OpenMS  3.0.0
SiriusAdapterAlgorithm.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-2022.
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: Oliver Alka $
32 // $Authors: Oliver Alka, Lukas Zimmermann $
33 // --------------------------------------------------------------------------
34 
35 #pragma once
36 
38 
39 #include <OpenMS/SYSTEM/File.h>
40 
41 #include <unordered_map>
42 #include <QString>
43 #include <QStringList>
44 
45 using namespace std;
46 
47 namespace OpenMS
48 {
49  class FeatureMap;
50  class File;
51  class KDTreeFeatureMaps;
52 
53  class OPENMS_DLLAPI SiriusAdapterAlgorithm : public DefaultParamHandler
54  {
55  public:
58 
59  /*
60  * Accessors for Preprocessing Parameters
61  */
62 
63  bool isFeatureOnly() const { return preprocessing.getValue("feature_only").toBool(); }
64  UInt getFilterByNumMassTraces() const { return preprocessing.getValue("filter_by_num_masstraces"); }
65  double getPrecursorMzTolerance() const { return preprocessing.getValue("precursor_mz_tolerance"); }
66  double getPrecursorRtTolerance() const { return preprocessing.getValue("precursor_rt_tolerance"); }
67  bool precursorMzToleranceUnitIsPPM() const { return preprocessing.getValue("precursor_mz_tolerance_unit") == "ppm"; }
68  bool isNoMasstraceInfoIsotopePattern() const { return preprocessing.getValue("no_masstrace_info_isotope_pattern").toBool(); }
69  int getIsotopePatternIterations() const { return preprocessing.getValue("isotope_pattern_iterations"); }
70 
75  int getNumberOfSiriusCandidates() const { return sirius.getValue("candidates"); }
76 
84  void updateExistingParameter(const Param &param);
85 
91  bool hasFullNameParameter(const String &name) const;
92 
93 
94  int getNumberOfCSIFingerIDCandidates() const { return fingerid.getValue("candidates"); }
95 
96 
99  {
100  public:
101 
103  SiriusTemporaryFileSystemObjects(int debug_level);
104 
107 
108  const String& getTmpDir() const;
109  const String& getTmpOutDir() const;
110  const String& getTmpMsFile() const;
111 
112  private:
114 
118  };
119 
128  static String determineSiriusExecutable(String& executable);
129 
137  static void sortSiriusWorkspacePathsByScanIndex(std::vector<String>& subdirs);
138 
139 
152  void preprocessingSirius(const String& featureinfo,
153  const MSExperiment& spectra,
155  FeatureMapping::FeatureToMs2Indices& feature_mapping) const;
156 
166  void logFeatureSpectraNumber(const String& featureinfo,
167  const FeatureMapping::FeatureToMs2Indices& feature_mapping,
168  const MSExperiment& spectra) const;
169 
176  void logInSiriusAccount(String& executable, const String& email, const String& password) const;
177 
188  const vector<String> callSiriusQProcess(const String& tmp_ms_file,
189  const String& tmp_out_dir,
190  String& executable,
191  const String& out_csifingerid,
192  const bool decoy_generation) const;
193 
194  private:
196  {
199 
200  public:
201  explicit ParameterModifier(const String &param_name, SiriusAdapterAlgorithm *enclose) :
202  openms_param_name(param_name), enclose(enclose) {}
203 
204  void withValidStrings(initializer_list<std::string> choices)
205  {
206  enclose->defaults_.setValidStrings(openms_param_name, choices);
207  }
208 
209  void withMinInt(int value)
210  {
211  enclose->defaults_.setMinInt(openms_param_name, value);
212  }
213  };
214 
216  {
217  // Maps the OpenMS Parameter Names to the one for Sirius
218  unordered_map<String, String> openms_to_sirius;
219 
220  String toFullParameter(const String &param_name) const
221  {
222  String result(param_name);
223  result.substitute('-', '_');
224  return sectionName() + ":" + result;
225  }
226 
227  protected:
228  ParameterModifier parameter(
229  const String &parameter_name,
230  const ParamValue &default_value,
231  const String &parameter_description);
232  void flag(
233  const String &parameter_name,
234  const String &parameter_description);
235 
236  explicit ParameterSection(SiriusAdapterAlgorithm* enclose): enclose(enclose) {}
237 
238  virtual void parameters() = 0;
239  virtual String sectionName() const = 0;
240 
242 
243  public:
244  virtual ~ParameterSection() = default;
245 
246  DataValue getValue(const String &param_name) const
247  {
248  return enclose->param_.getValue(toFullParameter(param_name));
249  }
250 
251  QStringList getCommandLine() const
252  {
253  const DataValue omit_integer(-1);
254  const DataValue omit_string("");
255 
256  QStringList result;
257  for (const auto &pair : openms_to_sirius)
258  {
259  DataValue value = enclose->param_.getValue(pair.first);
260 
261  if (!value.isEmpty() && value != omit_integer && value != omit_string)
262  {
263  String string_value = value.toString(true);
264  if (string_value == "true")
265  {
266  result.push_back(String("--" + pair.second).toQString());
267  }
268  else if (string_value != "false")
269  {
270  result.push_back(String("--" + pair.second + "=" + string_value).toQString());
271  }
272  };
273  }
274  return result;
275  }
276  };
277 
279 
281  {
282  String sectionName() const override { return "preprocessing"; }
283  public:
284  explicit Preprocessing(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {}
285  void parameters() override;
286  };
287 
288  class Project final : public SiriusSubtool
289  {
290  String sectionName() const override { return "project"; }
291  public:
292  explicit Project(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {}
293  void parameters() override;
294  };
295 
296  class Sirius final : public SiriusSubtool
297  {
298  String sectionName() const override { return "sirius"; }
299  public:
300  explicit Sirius(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {}
301  void parameters() override;
302  };
303 
304  class Fingerid final : public SiriusSubtool
305  {
306  String sectionName() const override { return "fingerid"; }
307  public:
308  explicit Fingerid(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {}
309  void parameters() override;
310  };
311 
312  class Passatutto final : public SiriusSubtool
313  {
314  String sectionName() const override { return "passatutto"; }
315  public:
316  explicit Passatutto(SiriusAdapterAlgorithm *enclose) : ParameterSection(enclose) {}
317  void parameters() override;
318  };
319 
325 
326  };
327 } // namespace OpenMS
Project(SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:292
Definition: SiriusAdapterAlgorithm.h:312
bool precursorMzToleranceUnitIsPPM() const
Definition: SiriusAdapterAlgorithm.h:67
SiriusAdapterAlgorithm * enclose
Definition: SiriusAdapterAlgorithm.h:241
Definition: SiriusAdapterAlgorithm.h:195
void setValidStrings(const std::string &key, const std::vector< std::string > &strings)
Sets the valid strings for the parameter key.
QString toQString() const
Conversion to Qt QString.
Param defaults_
Container for default parameters. This member should be filled in the constructor of derived classes!...
Definition: DefaultParamHandler.h:173
A more convenient string class.
Definition: String.h:58
String sectionName() const override
Definition: SiriusAdapterAlgorithm.h:282
Preprocessing(SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:284
Fingerid fingerid
Definition: SiriusAdapterAlgorithm.h:323
Param param_
Container for current parameters.
Definition: DefaultParamHandler.h:166
String sectionName() const override
Definition: SiriusAdapterAlgorithm.h:290
String toString(bool full_precision=true) const
Conversion to String full_precision Controls number of fractional digits for all double types or list...
bool isFeatureOnly() const
Definition: SiriusAdapterAlgorithm.h:63
String sectionName() const override
Definition: SiriusAdapterAlgorithm.h:298
unsigned int UInt
Unsigned integer type.
Definition: Types.h:94
Definition: SiriusAdapterAlgorithm.h:280
Definition: SiriusAdapterAlgorithm.h:53
ParameterModifier(const String &param_name, SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:201
double getPrecursorRtTolerance() const
Definition: SiriusAdapterAlgorithm.h:66
STL namespace.
Definition: SiriusAdapterAlgorithm.h:215
ParameterSection(SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:236
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47
bool isNoMasstraceInfoIsotopePattern() const
Definition: SiriusAdapterAlgorithm.h:68
Sirius sirius
Definition: SiriusAdapterAlgorithm.h:322
void withMinInt(int value)
Definition: SiriusAdapterAlgorithm.h:209
Passatutto(SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:316
String tmp_ms_file_
Definition: SiriusAdapterAlgorithm.h:116
double getPrecursorMzTolerance() const
Definition: SiriusAdapterAlgorithm.h:65
Stores information required for preprocessing.
Definition: FeatureMapping.h:50
Class to hold strings, numeric values, lists of strings and lists of numeric values.
Definition: DataValue.h:58
int debug_level_
Definition: SiriusAdapterAlgorithm.h:113
Passatutto passatutto
Definition: SiriusAdapterAlgorithm.h:324
Fingerid(SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:308
String toFullParameter(const String &param_name) const
Definition: SiriusAdapterAlgorithm.h:220
Struct for temporary folder structure.
Definition: SiriusAdapterAlgorithm.h:98
unordered_map< String, String > openms_to_sirius
Definition: SiriusAdapterAlgorithm.h:218
Stores preprocessed feature mapping information.
Definition: FeatureMapping.h:58
String tmp_out_dir_
Definition: SiriusAdapterAlgorithm.h:117
String sectionName() const override
Definition: SiriusAdapterAlgorithm.h:314
String tmp_dir_
Definition: SiriusAdapterAlgorithm.h:115
Preprocessing preprocessing
Definition: SiriusAdapterAlgorithm.h:320
Definition: SiriusAdapterAlgorithm.h:304
Management and storage of parameters / INI files.
Definition: Param.h:69
In-Memory representation of a mass spectrometry run.
Definition: MSExperiment.h:70
Project project
Definition: SiriusAdapterAlgorithm.h:321
void setMinInt(const std::string &key, int min)
Sets the minimum value for the integer or integer list parameter key.
QStringList getCommandLine() const
Definition: SiriusAdapterAlgorithm.h:251
bool isEmpty() const
Test if the value is empty.
Definition: DataValue.h:388
const String openms_param_name
Definition: SiriusAdapterAlgorithm.h:197
const ParamValue & getValue(const std::string &key) const
Returns a value of a parameter.
String & substitute(char from, char to)
Replaces all occurrences of the character from by the character to.
DataValue getValue(const String &param_name) const
Definition: SiriusAdapterAlgorithm.h:246
Definition: SiriusAdapterAlgorithm.h:288
Class to hold strings, numeric values, vectors of strings and vectors of numeric values using the stl...
Definition: ParamValue.h:54
String sectionName() const override
Definition: SiriusAdapterAlgorithm.h:306
Sirius(SiriusAdapterAlgorithm *enclose)
Definition: SiriusAdapterAlgorithm.h:300
Definition: SiriusAdapterAlgorithm.h:296
A base class for all classes handling default parameters.
Definition: DefaultParamHandler.h:92
void withValidStrings(initializer_list< std::string > choices)
Definition: SiriusAdapterAlgorithm.h:204
SiriusAdapterAlgorithm * enclose
Definition: SiriusAdapterAlgorithm.h:198
int getNumberOfCSIFingerIDCandidates() const
Definition: SiriusAdapterAlgorithm.h:94
int getNumberOfSiriusCandidates() const
Accessors for Sirius Parameters.
Definition: SiriusAdapterAlgorithm.h:75
UInt getFilterByNumMassTraces() const
Definition: SiriusAdapterAlgorithm.h:64
int getIsotopePatternIterations() const
Definition: SiriusAdapterAlgorithm.h:69