package uk.ac.diamond.scisoft.analysis.io; import java.io.File; import java.util.Scanner; import org.eclipse.dawnsci.analysis.api.io.ScanFileHolderException; import org.eclipse.january.IMonitor; import org.eclipse.january.dataset.Dataset; import org.eclipse.january.dataset.DatasetFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import uk.ac.diamond.scisoft.analysis.io.AbstractFileLoader; import uk.ac.diamond.scisoft.analysis.io.DataHolder; public class SpeLoader extends AbstractFileLoader { transient protected static final Logger logger = LoggerFactory.getLogger(SpeLoader.class); protected int channel_begin; protected int channel_end; protected int nchannels; public SpeLoader() { } public SpeLoader(final String fileName) { setFile(fileName); } @Override public void setFile(String fileName) { super.setFile(fileName); } @Override protected void clearMetadata() { //no metadata in SPE files } @Override public DataHolder loadFile() throws ScanFileHolderException { return loadFile((IMonitor)null); } /** * Function that loads in the standard SPE datafile * * @return The package which contains the data that has been loaded * @throws ScanFileHolderException */ @Override public DataHolder loadFile(final IMonitor mon) throws ScanFileHolderException { final DataHolder result = loadFile(-1, mon); return result; } @SuppressWarnings("unused") private DataHolder loadFile(final int columnIndex, final IMonitor mon) throws ScanFileHolderException { // first instantiate the return object. final DataHolder result = new DataHolder(); // then try to read the file given Scanner scanner = null; try { File file = new File(fileName); scanner = new Scanner(file); String line; do { line = scanner.next(); } while (!line.trim().equals("$DATA:")); channel_begin = scanner.nextInt(); channel_end = scanner.nextInt(); nchannels = channel_end - channel_begin + 1; double[] array = new double[nchannels]; for (int channel = 0 ; channel < nchannels ; channel++) { array[channel] = scanner.nextDouble(); } scanner.close(); final Dataset set = DatasetFactory.createFromObject(array); set.setName("Spectrum"); result.addDataset("Spectrum", set); } catch (Exception e) { throw new ScanFileHolderException("SpeLoader.loadFile exception loading " + fileName, e); } finally { if (scanner != null) scanner.close(); } return result; } }