OpenMS
XMassFile.h
Go to the documentation of this file.
1 // --------------------------------------------------------------------------
2 // OpenMS -- Open-Source Mass Spectrometry
3 // --------------------------------------------------------------------------
4 // Copyright The OpenMS Team -- Eberhard Karls University Tuebingen,
5 // ETH Zurich, and Freie Universitaet Berlin 2002-2023.
6 //
7 // This software is released under a three-clause BSD license:
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of any author or any participating institution
14 // may be used to endorse or promote products derived from this software
15 // without specific prior written permission.
16 // For a full list of authors, refer to the file AUTHORS.
17 // --------------------------------------------------------------------------
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 // ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING
22 // INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 //
30 // --------------------------------------------------------------------------
31 // $Maintainer: Timo Sachsenberg $
32 // $Authors: Guillaume Belz $
33 // --------------------------------------------------------------------------
34 
35 #pragma once
36 
42 
43 namespace OpenMS
44 {
66  class OPENMS_DLLAPI XMassFile :
67  public ProgressLogger
68  {
69 public:
73  ~XMassFile() override;
74 
83  void load(const String & filename, MSSpectrum & spectrum)
84  {
85  Internal::AcqusHandler acqus(filename.prefix(filename.length() - 3) + String("acqus"));
86 
87  Internal::FidHandler fid(filename);
88  if (!fid)
89  {
90  throw Exception::FileNotFound(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, filename);
91  }
92 
93  // Delete old spectrum
94  spectrum.clear(true);
95 
96  //temporary variables
97  Peak1D p;
98 
99  while (spectrum.size() < acqus.getSize())
100  {
101  //fill peak
104  spectrum.push_back(p);
105  }
106  fid.close();
107 
108  // import metadata
109  spectrum.setRT(0.0);
110  spectrum.setMSLevel(1);
111  spectrum.setName("Xmass analysis file " + acqus.getParam("$ID_raw"));
113  spectrum.setNativeID("spectrum=xsd:" + acqus.getParam("$ID_raw").remove('<').remove('>'));
114  spectrum.setComment("no comment");
115 
116  InstrumentSettings instrument_settings;
117  instrument_settings.setScanMode(InstrumentSettings::MASSSPECTRUM);
118  instrument_settings.setZoomScan(false);
119 
120  if (acqus.getParam(".IONIZATION MODE") == "LD+")
121  {
122  instrument_settings.setPolarity(IonSource::POSITIVE);
123  }
124  else if (acqus.getParam(".IONIZATION MODE") == "LD-")
125  {
126  instrument_settings.setPolarity(IonSource::NEGATIVE);
127  }
128  else
129  {
130  instrument_settings.setPolarity(IonSource::POLNULL);
131  }
132  spectrum.setInstrumentSettings(instrument_settings);
133 
134  AcquisitionInfo acquisition_info;
135  acquisition_info.setMethodOfCombination("Sum of " + acqus.getParam("$NoSHOTS") + " raw spectrum");
136  spectrum.setAcquisitionInfo(acquisition_info);
137 
138  SourceFile source_file;
139  source_file.setNameOfFile("fid");
140  source_file.setPathToFile(filename.prefix(filename.length() - 3));
141  source_file.setFileSize(4.0 * acqus.getSize() / 1024 / 1024); // 4 bytes / point
142  source_file.setFileType("Xmass analysis file (fid)");
143  spectrum.setSourceFile(source_file);
144 
145  DataProcessing data_processing;
146  Software software;
147  software.setName("FlexControl");
148  String fc_ver = acqus.getParam("$FCVer"); // FlexControlVersion
149  if (fc_ver.hasPrefix("<flexControl "))
150  {
151  fc_ver = fc_ver.suffix(' ');
152  }
153  if (fc_ver.hasSuffix(">"))
154  {
155  fc_ver = fc_ver.prefix('>');
156  }
157  software.setVersion(fc_ver);
158  software.setMetaValue("Acquisition method", DataValue(acqus.getParam("$ACQMETH").remove('<').remove('>')));
159  data_processing.setSoftware(software);
160  std::set<DataProcessing::ProcessingAction> actions;
161  actions.insert(DataProcessing::SMOOTHING);
162  actions.insert(DataProcessing::BASELINE_REDUCTION);
163  actions.insert(DataProcessing::CALIBRATION);
164  data_processing.setProcessingActions(actions);
165  data_processing.setCompletionTime(DateTime::now());
166 
167  std::vector< boost::shared_ptr< DataProcessing> > data_processing_vector;
168  data_processing_vector.push_back( boost::shared_ptr< DataProcessing>(new DataProcessing(data_processing)) );
169  spectrum.setDataProcessing(data_processing_vector);
170  }
171 
180  void importExperimentalSettings(const String & filename, PeakMap & exp)
181  {
182  Internal::AcqusHandler acqus(filename.prefix(filename.length() - 3) + String("acqus"));
183 
184  ExperimentalSettings & experimental_settings = exp.getExperimentalSettings();
185 
186  Instrument & instrument = experimental_settings.getInstrument();
187  instrument.setName(acqus.getParam("SPECTROMETER/DATASYSTEM"));
188  instrument.setVendor(acqus.getParam("ORIGIN"));
189  instrument.setModel(acqus.getParam("$InstrID").remove('<').remove('>'));
190 
191  std::vector<IonSource> & ionSourceList = instrument.getIonSources();
192  ionSourceList.clear();
193  ionSourceList.resize(1);
194  if (acqus.getParam(".INLET") == "DIRECT")
195  {
196  ionSourceList[0].setInletType(IonSource::DIRECT);
197  }
198  else
199  {
200  ionSourceList[0].setInletType(IonSource::INLETNULL);
201  ionSourceList[0].setIonizationMethod(IonSource::MALDI);
202  }
203  if (acqus.getParam(".IONIZATION MODE") == "LD+")
204  {
205  ionSourceList[0].setPolarity(IonSource::POSITIVE);
206  }
207  else if (acqus.getParam(".IONIZATION MODE") == "LD-")
208  {
209  ionSourceList[0].setPolarity(IonSource::NEGATIVE);
210  }
211  else
212  {
213  ionSourceList[0].setPolarity(IonSource::POLNULL);
214  }
215  ionSourceList[0].setMetaValue("MALDI target reference", DataValue(acqus.getParam("$TgIDS").remove('<').remove('>')));
216  ionSourceList[0].setOrder(0);
217 
218  std::vector<MassAnalyzer> & massAnalyzerList = instrument.getMassAnalyzers();
219  massAnalyzerList.clear();
220  massAnalyzerList.resize(1);
221  if (acqus.getParam(".SPECTROMETER TYPE") == "TOF")
222  {
223  massAnalyzerList[0].setType(MassAnalyzer::TOF);
224  }
225  else
226  {
227  massAnalyzerList[0].setType(MassAnalyzer::ANALYZERNULL);
228  }
229 
230  DateTime date;
231  date.set(acqus.getParam("$AQ_DATE").remove('<').remove('>'));
232  experimental_settings.setDateTime(date);
233  }
234 
240  void store(const String & /*filename*/, const MSSpectrum & /*spectrum*/)
241  {
242  throw Exception::NotImplemented(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION);
243  }
244 
245  };
246 } // namespace OpenMS
247 
Description of the combination of raw data to a single spectrum.
Definition: AcquisitionInfo.h:55
void setMethodOfCombination(const String &method_of_combination)
sets the method of combination
Description of the applied preprocessing steps.
Definition: DataProcessing.h:53
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:69
@ SMOOTHING
Smoothing of the signal to reduce noise.
Definition: DataProcessing.h:63
@ BASELINE_REDUCTION
Baseline reduction.
Definition: DataProcessing.h:66
Class to hold strings, numeric values, lists of strings and lists of numeric values.
Definition: DataValue.h:59
DateTime Class.
Definition: DateTime.h:59
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:511
Not implemented exception.
Definition: Exception.h:430
Description of the experimental settings.
Definition: ExperimentalSettings.h:62
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
Description of the settings a MS Instrument was run with.
Definition: InstrumentSettings.h:49
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:55
Description of a MS instrument.
Definition: Instrument.h:65
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:53
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:53
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:55
@ INLETNULL
Unknown.
Definition: IonSource.h:54
@ POSITIVE
Positive polarity.
Definition: IonSource.h:143
@ NEGATIVE
Negative polarity.
Definition: IonSource.h:144
@ POLNULL
Unknown.
Definition: IonSource.h:142
@ MALDI
Matrix-assisted laser desorption ionization.
Definition: IonSource.h:107
In-Memory representation of a mass spectrometry run.
Definition: MSExperiment.h:72
const ExperimentalSettings & getExperimentalSettings() const
returns the meta information of this experiment (const access)
The representation of a 1D spectrum.
Definition: MSSpectrum.h:70
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:54
@ TOF
Time-of-flight.
Definition: MassAnalyzer.h:59
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:54
void setIntensity(IntensityType intensity)
Mutable access to the data point intensity (height)
Definition: Peak1D.h:110
void setPosition(PositionType const &position)
Mutable access to the position.
Definition: Peak1D.h:149
float IntensityType
Intensity type.
Definition: Peak1D.h:62
Base class for all classes that want to report their progress.
Definition: ProgressLogger.h:53
Description of the software used for processing.
Definition: Software.h:50
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:48
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:74
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:60
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
File adapter for 'XMass Analysis (fid)' files.
Definition: XMassFile.h:68
void importExperimentalSettings(const String &filename, PeakMap &exp)
Import settings from a XMass file.
Definition: XMassFile.h:180
~XMassFile() override
Destructor.
void load(const String &filename, MSSpectrum &spectrum)
Loads a spectrum from a XMass file.
Definition: XMassFile.h:83
XMassFile()
Default constructor.
void store(const String &, const MSSpectrum &)
Stores a spectrum in a XMass file (not available)
Definition: XMassFile.h:240
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:48