OpenMS
SiriusAdapterAlgorithm.h
Go to the documentation of this file.
1 // Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin
2 // SPDX-License-Identifier: BSD-3-Clause
3 //
4 // --------------------------------------------------------------------------
5 // $Maintainer: Oliver Alka $
6 // $Authors: Oliver Alka, Lukas Zimmermann $
7 // --------------------------------------------------------------------------
8 
9 #pragma once
10 
12 
13 #include <OpenMS/SYSTEM/File.h>
14 
15 #include <unordered_map>
16 #include <QtCore/QString>
17 #include <QtCore/QStringList>
18 
19 using namespace std;
20 
21 namespace OpenMS
22 {
23  class FeatureMap;
24  class File;
25  class KDTreeFeatureMaps;
26 
27  class OPENMS_DLLAPI SiriusAdapterAlgorithm : public DefaultParamHandler
28  {
29  public:
32 
33  /*
34  * Accessors for Preprocessing Parameters
35  */
36 
37  bool isFeatureOnly() const { return preprocessing.getValue("feature_only").toBool(); }
38  UInt getFilterByNumMassTraces() const { return preprocessing.getValue("filter_by_num_masstraces"); }
39  double getPrecursorMzTolerance() const { return preprocessing.getValue("precursor_mz_tolerance"); }
40  double getPrecursorRtTolerance() const { return preprocessing.getValue("precursor_rt_tolerance"); }
41  bool precursorMzToleranceUnitIsPPM() const { return preprocessing.getValue("precursor_mz_tolerance_unit") == "ppm"; }
42  bool isNoMasstraceInfoIsotopePattern() const { return preprocessing.getValue("no_masstrace_info_isotope_pattern").toBool(); }
43  int getIsotopePatternIterations() const { return preprocessing.getValue("isotope_pattern_iterations"); }
44 
50  {
51  int number_of_candidates = sirius.getValue("candidates");
52  // default for SiriusAdapter is -1 to not pass a value to command and use SIRIUS 5 default (10)
53  // therefore 10 needs to be returned in this case
54  if (number_of_candidates == -1)
55  {
56  return 10;
57  }
58  else
59  {
60  return number_of_candidates;
61  }
62  }
63 
71  void updateExistingParameter(const Param &param);
72 
78  bool hasFullNameParameter(const String &name) const;
79 
82  {
83  public:
84 
87 
90 
91  const String& getTmpDir() const;
92  const String& getTmpOutDir() const;
93  const String& getTmpMsFile() const;
94 
95  private:
97 
101  };
102 
112 
119  static void sortSiriusWorkspacePathsByScanIndex(std::vector<String>& subdirs);
120 
121 
132  void preprocessingSirius(const String& featureinfo,
133  const MSExperiment& spectra,
135  FeatureMapping::FeatureToMs2Indices& feature_mapping) const;
136 
146  void logFeatureSpectraNumber(const String& featureinfo,
147  const FeatureMapping::FeatureToMs2Indices& feature_mapping,
148  const MSExperiment& spectra) const;
149 
157  void logInSiriusAccount(String& executable, const String& email, const String& password) const;
158 
170  const vector<String> callSiriusQProcess(const String& tmp_ms_file,
171  const String& tmp_out_dir,
172  String& executable,
173  const String& out_csifingerid,
174  const bool decoy_generation) const;
175 
176  private:
178  {
181 
182  public:
183  explicit ParameterModifier(const String &param_name, SiriusAdapterAlgorithm *enclose) :
184  openms_param_name(param_name), enclose(enclose) {}
185 
186  void withValidStrings(initializer_list<std::string> choices)
187  {
188  enclose->defaults_.setValidStrings(openms_param_name, choices);
189  }
190 
191  void withMinInt(int value)
192  {
193  enclose->defaults_.setMinInt(openms_param_name, value);
194  }
195  };
196 
198  {
199  // Maps the OpenMS Parameter Names to the one for Sirius
200  unordered_map<String, String> openms_to_sirius;
201 
202  String toFullParameter(const String &param_name) const
203  {
204  String result(param_name);
205  result.substitute('-', '_');
206  return sectionName() + ":" + result;
207  }
208 
209  protected:
211  const String &parameter_name,
212  const ParamValue &default_value,
213  const String &parameter_description);
214  void flag(
215  const String &parameter_name,
216  const String &parameter_description);
217 
218  explicit ParameterSection(SiriusAdapterAlgorithm* enclose): enclose(enclose) {}
219 
220  virtual void parameters() = 0;
221  virtual String sectionName() const = 0;
222 
224 
225  public:
226  virtual ~ParameterSection() = default;
227 
228  DataValue getValue(const String &param_name) const
229  {
230  return enclose->param_.getValue(toFullParameter(param_name));
231  }
232 
233  QStringList getCommandLine() const
234  {
235  QStringList result;
236  for (const auto &pair : openms_to_sirius)
237  {
238  DataValue value = enclose->param_.getValue(pair.first);
239  DataValue default_value = enclose->defaults_.getValue(pair.first);
240  if (!value.isEmpty() && value != default_value)
241  {
242  String string_value = value.toString(true);
243  if (string_value == "true")
244  {
245  result.push_back(String("--" + pair.second).toQString());
246  }
247  else if (string_value != "false")
248  {
249  result.push_back(String("--" + pair.second + "=" + string_value).toQString());
250  }
251  };
252  }
253  return result;
254  }
255  };
256 
258 
260  {
261  String sectionName() const override { return "preprocessing"; }
262  public:
263  explicit Preprocessing(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {}
264  void parameters() override;
265  };
266 
267  class Project final : public SiriusSubtool
268  {
269  String sectionName() const override { return "project"; }
270  public:
271  explicit Project(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {}
272  void parameters() override;
273  };
274 
275  class Sirius final : public SiriusSubtool
276  {
277  String sectionName() const override { return "sirius"; }
278  public:
279  explicit Sirius(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {}
280  void parameters() override;
281  };
282 
283  class Fingerid final : public SiriusSubtool
284  {
285  String sectionName() const override { return "fingerid"; }
286  public:
287  explicit Fingerid(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {}
288  void parameters() override;
289  };
290 
291  class Passatutto final : public SiriusSubtool
292  {
293  String sectionName() const override { return "passatutto"; }
294  public:
295  explicit Passatutto(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {}
296  void parameters() override;
297  };
298 
304 
305  };
306 } // namespace OpenMS
Class to hold strings, numeric values, lists of strings and lists of numeric values.
Definition: DataValue.h:33
String toString(bool full_precision=true) const
Conversion to String full_precision Controls number of fractional digits for all double types or list...
bool isEmpty() const
Test if the value is empty.
Definition: DataValue.h:362
A base class for all classes handling default parameters.
Definition: DefaultParamHandler.h:66
Param param_
Container for current parameters.
Definition: DefaultParamHandler.h:139
Param defaults_
Container for default parameters. This member should be filled in the constructor of derived classes!
Definition: DefaultParamHandler.h:146
Stores information required for preprocessing.
Definition: FeatureMapping.h:25
Stores preprocessed feature mapping information.
Definition: FeatureMapping.h:33
In-Memory representation of a mass spectrometry run.
Definition: MSExperiment.h:46
Class to hold strings, numeric values, vectors of strings and vectors of numeric values using the stl...
Definition: ParamValue.h:29
Management and storage of parameters / INI files.
Definition: Param.h:44
void setValidStrings(const std::string &key, const std::vector< std::string > &strings)
Sets the valid strings for the parameter key.
const ParamValue & getValue(const std::string &key) const
Returns a value of a parameter.
void setMinInt(const std::string &key, int min)
Sets the minimum value for the integer or integer list parameter key.
Definition: SiriusAdapterAlgorithm.h:284
Fingerid(SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:287
String sectionName() const override
Definition: SiriusAdapterAlgorithm.h:285
Definition: SiriusAdapterAlgorithm.h:178
SiriusAdapterAlgorithm * enclose
Definition: SiriusAdapterAlgorithm.h:180
ParameterModifier(const String &param_name, SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:183
void withValidStrings(initializer_list< std::string > choices)
Definition: SiriusAdapterAlgorithm.h:186
const String openms_param_name
Definition: SiriusAdapterAlgorithm.h:179
void withMinInt(int value)
Definition: SiriusAdapterAlgorithm.h:191
Definition: SiriusAdapterAlgorithm.h:198
unordered_map< String, String > openms_to_sirius
Definition: SiriusAdapterAlgorithm.h:200
ParameterModifier parameter(const String &parameter_name, const ParamValue &default_value, const String &parameter_description)
DataValue getValue(const String &param_name) const
Definition: SiriusAdapterAlgorithm.h:228
SiriusAdapterAlgorithm * enclose
Definition: SiriusAdapterAlgorithm.h:223
ParameterSection(SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:218
void flag(const String &parameter_name, const String &parameter_description)
QStringList getCommandLine() const
Definition: SiriusAdapterAlgorithm.h:233
String toFullParameter(const String &param_name) const
Definition: SiriusAdapterAlgorithm.h:202
Definition: SiriusAdapterAlgorithm.h:292
Passatutto(SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:295
String sectionName() const override
Definition: SiriusAdapterAlgorithm.h:293
Definition: SiriusAdapterAlgorithm.h:260
Preprocessing(SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:263
String sectionName() const override
Definition: SiriusAdapterAlgorithm.h:261
Definition: SiriusAdapterAlgorithm.h:268
Project(SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:271
String sectionName() const override
Definition: SiriusAdapterAlgorithm.h:269
Struct for temporary folder structure.
Definition: SiriusAdapterAlgorithm.h:82
SiriusTemporaryFileSystemObjects(int debug_level)
Construct temporary folder structure for SIRIUS (SiriusTemporaryFileSystemObjects)
String tmp_out_dir_
Definition: SiriusAdapterAlgorithm.h:100
~SiriusTemporaryFileSystemObjects()
Destructor of SiriusTemporaryFileSystemObjects based on debug level.
String tmp_dir_
Definition: SiriusAdapterAlgorithm.h:98
String tmp_ms_file_
Definition: SiriusAdapterAlgorithm.h:99
int debug_level_
Definition: SiriusAdapterAlgorithm.h:96
Definition: SiriusAdapterAlgorithm.h:276
Sirius(SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:279
String sectionName() const override
Definition: SiriusAdapterAlgorithm.h:277
Definition: SiriusAdapterAlgorithm.h:28
const vector< String > callSiriusQProcess(const String &tmp_ms_file, const String &tmp_out_dir, String &executable, const String &out_csifingerid, const bool decoy_generation) const
Call SIRIUS with QProcess.
Preprocessing preprocessing
Definition: SiriusAdapterAlgorithm.h:299
static void sortSiriusWorkspacePathsByScanIndex(std::vector< String > &subdirs)
Sort function using the extracted scan_index from the sirius workspace file path.
int getNumberOfSiriusCandidates() const
Accessors for Sirius Parameters.
Definition: SiriusAdapterAlgorithm.h:49
Passatutto passatutto
Definition: SiriusAdapterAlgorithm.h:303
double getPrecursorMzTolerance() const
Definition: SiriusAdapterAlgorithm.h:39
bool isNoMasstraceInfoIsotopePattern() const
Definition: SiriusAdapterAlgorithm.h:42
static String determineSiriusExecutable(String &executable)
Checks if the provided String points to a valid SIRIUS executable, otherwise tries to select the exec...
bool isFeatureOnly() const
Definition: SiriusAdapterAlgorithm.h:37
double getPrecursorRtTolerance() const
Definition: SiriusAdapterAlgorithm.h:40
Sirius sirius
Definition: SiriusAdapterAlgorithm.h:301
Fingerid fingerid
Definition: SiriusAdapterAlgorithm.h:302
void updateExistingParameter(const Param &param)
Updates all parameters that already exist in this DefaultParamHandler with the values provided by the...
bool precursorMzToleranceUnitIsPPM() const
Definition: SiriusAdapterAlgorithm.h:41
void preprocessingSirius(const String &featureinfo, const MSExperiment &spectra, FeatureMapping::FeatureMappingInfo &fm_info, FeatureMapping::FeatureToMs2Indices &feature_mapping) const
Preprocessing needed for SIRIUS.
SiriusAdapterAlgorithm()
default constructor
void logFeatureSpectraNumber(const String &featureinfo, const FeatureMapping::FeatureToMs2Indices &feature_mapping, const MSExperiment &spectra) const
logs number of features and spectra used
bool hasFullNameParameter(const String &name) const
Checks whether this DefaultParamHandler has a ParamEntry with the provided name.
UInt getFilterByNumMassTraces() const
Definition: SiriusAdapterAlgorithm.h:38
void logInSiriusAccount(String &executable, const String &email, const String &password) const
Log in to Sirius with personal user account (required in Sirius >= 5).
int getIsotopePatternIterations() const
Definition: SiriusAdapterAlgorithm.h:43
Project project
Definition: SiriusAdapterAlgorithm.h:300
A more convenient string class.
Definition: String.h:34
QString toQString() const
Conversion to Qt QString.
String & substitute(char from, char to)
Replaces all occurrences of the character from by the character to.
unsigned int UInt
Unsigned integer type.
Definition: Types.h:68
Main OpenMS namespace.
Definition: openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h:19