OpenMS
XMassFile.h
Go to the documentation of this file.
1 // Copyright (c) 2002-present, OpenMS Inc. -- EKU Tuebingen, ETH Zurich, and FU Berlin
2 // SPDX-License-Identifier: BSD-3-Clause
3 //
4 // --------------------------------------------------------------------------
5 // $Maintainer: Timo Sachsenberg $
6 // $Authors: Guillaume Belz $
7 // --------------------------------------------------------------------------
8 
9 #pragma once
10 
16 #include <OpenMS/SYSTEM/File.h>
17 
18 namespace OpenMS
19 {
41  class OPENMS_DLLAPI XMassFile :
42  public ProgressLogger
43  {
44 public:
48  ~XMassFile() override;
49 
58  void load(const String & filename, MSSpectrum & spectrum)
59  {
60  Internal::AcqusHandler acqus(filename.prefix(filename.length() - 3) + String("acqus"));
61 
62  Internal::FidHandler fid(filename);
63  if (!fid)
64  {
65  if (!File::exists(filename))
66  {
67  throw Exception::FileNotFound(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, filename);
68  }
69  else if (!File::readable(filename))
70  {
71  throw Exception::FileNotReadable(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, filename);
72  }
73  else
74  {
75  throw Exception::IOException(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, filename);
76  }
77  }
78 
79  // Delete old spectrum
80  spectrum.clear(true);
81 
82  //temporary variables
83  Peak1D p;
84 
85  while (spectrum.size() < acqus.getSize())
86  {
87  //fill peak
90  spectrum.push_back(p);
91  }
92  fid.close();
93 
94  // import metadata
95  spectrum.setRT(0.0);
96  spectrum.setMSLevel(1);
97  spectrum.setName("Xmass analysis file " + acqus.getParam("$ID_raw"));
99  spectrum.setNativeID("spectrum=xsd:" + acqus.getParam("$ID_raw").remove('<').remove('>'));
100  spectrum.setComment("no comment");
101 
102  InstrumentSettings instrument_settings;
103  instrument_settings.setScanMode(InstrumentSettings::MASSSPECTRUM);
104  instrument_settings.setZoomScan(false);
105 
106  if (acqus.getParam(".IONIZATION MODE") == "LD+")
107  {
108  instrument_settings.setPolarity(IonSource::POSITIVE);
109  }
110  else if (acqus.getParam(".IONIZATION MODE") == "LD-")
111  {
112  instrument_settings.setPolarity(IonSource::NEGATIVE);
113  }
114  else
115  {
116  instrument_settings.setPolarity(IonSource::POLNULL);
117  }
118  spectrum.setInstrumentSettings(instrument_settings);
119 
120  AcquisitionInfo acquisition_info;
121  acquisition_info.setMethodOfCombination("Sum of " + acqus.getParam("$NoSHOTS") + " raw spectrum");
122  spectrum.setAcquisitionInfo(acquisition_info);
123 
124  SourceFile source_file;
125  source_file.setNameOfFile("fid");
126  source_file.setPathToFile(filename.prefix(filename.length() - 3));
127  source_file.setFileSize(4.0 * acqus.getSize() / 1024 / 1024); // 4 bytes / point
128  source_file.setFileType("Xmass analysis file (fid)");
129  spectrum.setSourceFile(source_file);
130 
131  DataProcessing data_processing;
132  Software software;
133  software.setName("FlexControl");
134  String fc_ver = acqus.getParam("$FCVer"); // FlexControlVersion
135  if (fc_ver.hasPrefix("<flexControl "))
136  {
137  fc_ver = fc_ver.suffix(' ');
138  }
139  if (fc_ver.hasSuffix(">"))
140  {
141  fc_ver = fc_ver.prefix('>');
142  }
143  software.setVersion(fc_ver);
144  software.setMetaValue("Acquisition method", DataValue(acqus.getParam("$ACQMETH").remove('<').remove('>')));
145  data_processing.setSoftware(software);
146  std::set<DataProcessing::ProcessingAction> actions;
147  actions.insert(DataProcessing::SMOOTHING);
148  actions.insert(DataProcessing::BASELINE_REDUCTION);
149  actions.insert(DataProcessing::CALIBRATION);
150  data_processing.setProcessingActions(actions);
151  data_processing.setCompletionTime(DateTime::now());
152 
153  std::vector< boost::shared_ptr< DataProcessing> > data_processing_vector;
154  data_processing_vector.push_back( boost::shared_ptr< DataProcessing>(new DataProcessing(data_processing)) );
155  spectrum.setDataProcessing(data_processing_vector);
156  }
157 
166  void importExperimentalSettings(const String & filename, PeakMap & exp)
167  {
168  Internal::AcqusHandler acqus(filename.prefix(filename.length() - 3) + String("acqus"));
169 
170  ExperimentalSettings & experimental_settings = exp.getExperimentalSettings();
171 
172  Instrument & instrument = experimental_settings.getInstrument();
173  instrument.setName(acqus.getParam("SPECTROMETER/DATASYSTEM"));
174  instrument.setVendor(acqus.getParam("ORIGIN"));
175  instrument.setModel(acqus.getParam("$InstrID").remove('<').remove('>'));
176 
177  std::vector<IonSource> & ionSourceList = instrument.getIonSources();
178  ionSourceList.clear();
179  ionSourceList.resize(1);
180  if (acqus.getParam(".INLET") == "DIRECT")
181  {
182  ionSourceList[0].setInletType(IonSource::DIRECT);
183  }
184  else
185  {
186  ionSourceList[0].setInletType(IonSource::INLETNULL);
187  ionSourceList[0].setIonizationMethod(IonSource::MALDI);
188  }
189  if (acqus.getParam(".IONIZATION MODE") == "LD+")
190  {
191  ionSourceList[0].setPolarity(IonSource::POSITIVE);
192  }
193  else if (acqus.getParam(".IONIZATION MODE") == "LD-")
194  {
195  ionSourceList[0].setPolarity(IonSource::NEGATIVE);
196  }
197  else
198  {
199  ionSourceList[0].setPolarity(IonSource::POLNULL);
200  }
201  ionSourceList[0].setMetaValue("MALDI target reference", DataValue(acqus.getParam("$TgIDS").remove('<').remove('>')));
202  ionSourceList[0].setOrder(0);
203 
204  std::vector<MassAnalyzer> & massAnalyzerList = instrument.getMassAnalyzers();
205  massAnalyzerList.clear();
206  massAnalyzerList.resize(1);
207  if (acqus.getParam(".SPECTROMETER TYPE") == "TOF")
208  {
209  massAnalyzerList[0].setType(MassAnalyzer::TOF);
210  }
211  else
212  {
213  massAnalyzerList[0].setType(MassAnalyzer::ANALYZERNULL);
214  }
215 
216  DateTime date;
217  date.set(acqus.getParam("$AQ_DATE").remove('<').remove('>'));
218  experimental_settings.setDateTime(date);
219  }
220 
226  void store(const String & /*filename*/, const MSSpectrum & /*spectrum*/)
227  {
228  throw Exception::NotImplemented(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION);
229  }
230 
231  };
232 } // namespace OpenMS
233 
Description of the combination of raw data to a single spectrum.
Definition: AcquisitionInfo.h:29
void setMethodOfCombination(const String &method_of_combination)
sets the method of combination
Description of the applied preprocessing steps.
Definition: DataProcessing.h:27
void setCompletionTime(const DateTime &completion_time)
sets the time of completion taking a DateTime object
void setSoftware(const Software &software)
sets the software used for processing
void setProcessingActions(const std::set< ProcessingAction > &actions)
sets the description of the applied processing
@ CALIBRATION
Calibration of m/z positions.
Definition: DataProcessing.h:43
@ SMOOTHING
Smoothing of the signal to reduce noise.
Definition: DataProcessing.h:37
@ BASELINE_REDUCTION
Baseline reduction.
Definition: DataProcessing.h:40
Class to hold strings, numeric values, lists of strings and lists of numeric values.
Definition: DataValue.h:33
DateTime Class.
Definition: DateTime.h:33
static DateTime now()
Returns the current date and time.
void set(UInt month, UInt day, UInt year, UInt hour, UInt minute, UInt second)
sets data from six integers
File not found exception.
Definition: Exception.h:474
File not readable exception.
Definition: Exception.h:500
General IOException.
Definition: Exception.h:540
Not implemented exception.
Definition: Exception.h:399
Description of the experimental settings.
Definition: ExperimentalSettings.h:36
const Instrument & getInstrument() const
returns a const reference to the MS instrument description
void setDateTime(const DateTime &date)
sets the date the experiment was performed
static bool exists(const String &file)
Method used to test if a file exists.
static bool readable(const String &file)
Return true if the file exists and is readable.
Description of the settings a MS Instrument was run with.
Definition: InstrumentSettings.h:23
void setPolarity(IonSource::Polarity polarity)
sets the polarity
void setZoomScan(bool zoom_scan)
sets if this scan is a zoom (enhanced resolution) scan
void setScanMode(ScanMode scan_mode)
sets the scan mode
@ MASSSPECTRUM
general spectrum type
Definition: InstrumentSettings.h:29
Description of a MS instrument.
Definition: Instrument.h:39
const std::vector< MassAnalyzer > & getMassAnalyzers() const
returns a const reference to the mass analyzer list
void setName(const String &name)
sets the name of the instrument
void setModel(const String &model)
sets the instrument model
void setVendor(const String &vendor)
sets the instrument vendor
const std::vector< IonSource > & getIonSources() const
returns a const reference to the ion source list
Read-only acqus File handler for XMass Analysis.
Definition: AcqusHandler.h:27
Size getSize() const
Get size of spectrum.
String getParam(const String &param)
Read param as string.
double getPosition(Size index) const
Conversion from index to MZ ratio using internal calibration params.
Read-only fid File handler for XMass Analysis.
Definition: FidHandler.h:27
Size getIndex() const
Get index of current position (without position moving).
Size getIntensity()
Get intensity of current position and move to next position.
@ DIRECT
Direct.
Definition: IonSource.h:29
@ INLETNULL
Unknown.
Definition: IonSource.h:28
@ POSITIVE
Positive polarity.
Definition: IonSource.h:117
@ NEGATIVE
Negative polarity.
Definition: IonSource.h:118
@ POLNULL
Unknown.
Definition: IonSource.h:116
@ MALDI
Matrix-assisted laser desorption ionization.
Definition: IonSource.h:81
In-Memory representation of a mass spectrometry run.
Definition: MSExperiment.h:49
const ExperimentalSettings & getExperimentalSettings() const
returns the meta information of this experiment (const access)
The representation of a 1D spectrum.
Definition: MSSpectrum.h:44
void setMSLevel(UInt ms_level)
Sets the MS level.
void setName(const String &name)
Sets the name.
void clear(bool clear_meta_data)
Clears all data and meta data.
void setRT(double rt)
Sets the absolute retention time (in seconds)
@ ANALYZERNULL
Unknown.
Definition: MassAnalyzer.h:28
@ TOF
Time-of-flight.
Definition: MassAnalyzer.h:33
void setMetaValue(const String &name, const DataValue &value)
Sets the DataValue corresponding to a name.
A 1-dimensional raw data point or peak.
Definition: Peak1D.h:28
void setIntensity(IntensityType intensity)
Mutable access to the data point intensity (height)
Definition: Peak1D.h:84
void setPosition(PositionType const &position)
Mutable access to the position.
Definition: Peak1D.h:123
float IntensityType
Intensity type.
Definition: Peak1D.h:36
Base class for all classes that want to report their progress.
Definition: ProgressLogger.h:27
Description of the software used for processing.
Definition: Software.h:24
void setName(const String &name)
Sets the name of the software.
void setVersion(const String &version)
Sets the software version.
Description of a file location, used to store the origin of (meta) data.
Definition: SourceFile.h:22
void setFileType(const String &file_type)
sets the file type
void setPathToFile(const String &path_path_to_file)
sets the file path
void setNameOfFile(const String &name_of_file)
sets the file name
void setFileSize(float file_size)
sets the file size in MB
void setComment(const String &comment)
sets the free-text comment
void setInstrumentSettings(const InstrumentSettings &instrument_settings)
sets the instrument settings of the current spectrum
void setType(SpectrumType type)
sets the spectrum type
void setSourceFile(const SourceFile &source_file)
sets the source file
void setDataProcessing(const std::vector< DataProcessingPtr > &data_processing)
sets the description of the applied processing
@ PROFILE
profile data
Definition: SpectrumSettings.h:48
void setAcquisitionInfo(const AcquisitionInfo &acquisition_info)
sets the acquisition info
void setNativeID(const String &native_id)
sets the native identifier for the spectrum, used by the acquisition software.
A more convenient string class.
Definition: String.h:34
bool hasPrefix(const String &string) const
true if String begins with string, false otherwise
String & remove(char what)
Remove all occurrences of the character what.
String prefix(SizeType length) const
returns the prefix of length length
bool hasSuffix(const String &string) const
true if String ends with string, false otherwise
String suffix(SizeType length) const
returns the suffix of length length
Definition: XMassFile.h:43
void importExperimentalSettings(const String &filename, PeakMap &exp)
Import settings from a XMass file.
Definition: XMassFile.h:166
~XMassFile() override
Destructor.
void load(const String &filename, MSSpectrum &spectrum)
Definition: XMassFile.h:58
XMassFile()
Default constructor.
void store(const String &, const MSSpectrum &)
Stores a spectrum in a XMass file (not available)
Definition: XMassFile.h:226
Main OpenMS namespace.
Definition: openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h:19