OpenMS  2.7.0
EmpiricalFormula.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-2021.
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: Chris Bielow, Ahmed Khalil $
32 // $Authors: Andreas Bertsch, Chris Bielow $
33 // --------------------------------------------------------------------------
34 //
35 #pragma once
36 
37 #include <iosfwd>
38 #include <map>
39 #include <set>
40 #include <algorithm>
41 #include <string>
42 
43 #include <OpenMS/CONCEPT/Types.h>
44 
45 namespace OpenMS
46 {
47  class String;
48  class Element;
49  class ElementDB;
50  class IsotopeDistribution;
51  class IsotopePatternGenerator;
52  class CoarseIsotopePatternGenerator;
53 
82  class OPENMS_DLLAPI EmpiricalFormula
83  {
84 
85 protected:
87  typedef std::map<const Element*, SignedSize> MapType_;
88 
89 public:
94  typedef MapType_::const_iterator ConstIterator;
95  typedef MapType_::const_iterator const_iterator;
96  typedef MapType_::iterator Iterator;
97  typedef MapType_::iterator iterator;
99 
105 
108 
111 
117  explicit EmpiricalFormula(const String& rhs);
118 
119 
121  EmpiricalFormula(SignedSize number, const Element* element, SignedSize charge = 0);
122 
124  virtual ~EmpiricalFormula();
126 
131  double getMonoWeight() const;
132 
134  double getAverageWeight() const;
135 
138 
152  bool estimateFromWeightAndComp(double average_weight, double C, double H, double N, double O, double S, double P);
153 
168  bool estimateFromWeightAndCompAndS(double average_weight, UInt S, double C, double H, double N, double O, double P);
169 
170 
179 
191  const std::set<UInt>& precursor_isotopes,
192  const CoarseIsotopePatternGenerator& method) const;
193 
195  SignedSize getNumberOf(const Element* element) const;
196 
199 
201  Int getCharge() const;
202 
204  void setCharge(Int charge);
205 
207  String toString() const;
208 
210  std::map<std::string, int> toMap() const;
212 
216 
219 
222 
225 
227  EmpiricalFormula operator*(const SignedSize& times) const;
228 
231 
234 
237 
239 
244  bool isEmpty() const;
245 
247  bool isCharged() const;
248 
250  bool hasElement(const Element* element) const;
251 
253  bool contains(const EmpiricalFormula& ef);
254 
256  bool operator==(const EmpiricalFormula& rhs) const;
257 
259  bool operator!=(const EmpiricalFormula& rhs) const;
260 
262  bool operator<(const EmpiricalFormula& rhs) const;
263 
265 
267  friend OPENMS_DLLAPI std::ostream& operator<<(std::ostream& os, const EmpiricalFormula& formula);
268 
272  inline ConstIterator begin() const { return formula_.begin(); }
273 
274  inline ConstIterator end() const { return formula_.end(); }
275 
276  inline Iterator begin() { return formula_.begin(); }
277 
278  inline Iterator end() { return formula_.end(); }
280 
281 protected:
282 
285 
287 
289 
290  Int parseFormula_(std::map<const Element*, SignedSize>& ef, const String& formula) const;
291 
292  };
293 
294  OPENMS_DLLAPI std::ostream& operator<<(std::ostream& os, const EmpiricalFormula& formula);
295 
296 } // namespace OpenMS
Isotope pattern generator for coarse isotope distributions.
Definition: CoarseIsotopePatternGenerator.h:98
Representation of an element.
Definition: Element.h:56
Representation of an empirical formula.
Definition: EmpiricalFormula.h:83
Int parseFormula_(std::map< const Element *, SignedSize > &ef, const String &formula) const
bool hasElement(const Element *element) const
returns true if the formula contains the element
EmpiricalFormula operator*(const SignedSize &times) const
multiplies the elements and charge with a factor
EmpiricalFormula operator+(const EmpiricalFormula &rhs) const
adds the elements of the given formula and returns a new formula
bool estimateFromWeightAndComp(double average_weight, double C, double H, double N, double O, double S, double P)
Fills this EmpiricalFormula with an approximate elemental composition for a given average weight and ...
EmpiricalFormula(const String &rhs)
Iterator begin()
Definition: EmpiricalFormula.h:276
String toString() const
returns the formula as a string (charges are not included)
bool operator<(const EmpiricalFormula &rhs) const
less operator
double getMonoWeight() const
returns the mono isotopic weight of the formula (includes proton charges)
std::map< const Element *, SignedSize > MapType_
Internal typedef for the used map type.
Definition: EmpiricalFormula.h:87
MapType_::const_iterator ConstIterator
Iterators.
Definition: EmpiricalFormula.h:94
friend std::ostream & operator<<(std::ostream &os, const EmpiricalFormula &formula)
writes the formula to a stream
EmpiricalFormula & operator=(const EmpiricalFormula &)=default
Assignment operator.
EmpiricalFormula & operator-=(const EmpiricalFormula &rhs)
subtracts the elements of a formula
EmpiricalFormula(EmpiricalFormula &&)=default
Move constructor.
EmpiricalFormula()
Default constructor.
bool isCharged() const
returns true if charge != 0
EmpiricalFormula(const EmpiricalFormula &)=default
Copy constructor.
ConstIterator end() const
Definition: EmpiricalFormula.h:274
EmpiricalFormula operator-(const EmpiricalFormula &rhs) const
subtracts the elements of a formula an returns a new formula
Int getCharge() const
returns the charge
IsotopeDistribution getIsotopeDistribution(const IsotopePatternGenerator &method) const
returns the isotope distribution of the formula The details of the calculation of the isotope distrib...
void removeZeroedElements_()
remove elements with count 0
MapType_ formula_
Definition: EmpiricalFormula.h:286
SignedSize getNumberOf(const Element *element) const
returns the number of atoms for a certain element (can be negative)
bool operator!=(const EmpiricalFormula &rhs) const
returns true if the formulas differ in elements composition
bool contains(const EmpiricalFormula &ef)
returns true if all elements from ef are LESS abundant (negative allowed) than the corresponding elem...
double getAverageWeight() const
returns the average weight of the formula (includes proton charges)
bool operator==(const EmpiricalFormula &rhs) const
returns true if the formulas contain equal elements in equal quantities
MapType_::iterator iterator
Definition: EmpiricalFormula.h:97
bool estimateFromWeightAndCompAndS(double average_weight, UInt S, double C, double H, double N, double O, double P)
Fills this EmpiricalFormula with an approximate elemental composition for a given average weight,...
EmpiricalFormula(SignedSize number, const Element *element, SignedSize charge=0)
Constructor with element pointer and number.
SignedSize getNumberOfAtoms() const
returns the atoms total (not absolute: negative counts for certain elements will reduce the overall c...
Iterator end()
Definition: EmpiricalFormula.h:278
double calculateTheoreticalIsotopesNumber() const
returns the total number of discrete isotopes
void setCharge(Int charge)
sets the charge
MapType_::const_iterator const_iterator
Definition: EmpiricalFormula.h:95
bool isEmpty() const
returns true if the formula does not contain a element
IsotopeDistribution getConditionalFragmentIsotopeDist(const EmpiricalFormula &precursor, const std::set< UInt > &precursor_isotopes, const CoarseIsotopePatternGenerator &method) const
returns the fragment isotope distribution of this given a precursor formula and conditioned on a set ...
ConstIterator begin() const
Definition: EmpiricalFormula.h:272
EmpiricalFormula & operator+=(const EmpiricalFormula &rhs)
adds the elements of the given formula
virtual ~EmpiricalFormula()
Destructor.
EmpiricalFormula & operator=(EmpiricalFormula &&) &=default
Move assignment operator.
MapType_::iterator Iterator
Definition: EmpiricalFormula.h:96
Int charge_
Definition: EmpiricalFormula.h:288
std::map< std::string, int > toMap() const
returns the formula as a map (charges are not included)
Definition: IsotopeDistribution.h:65
Provides an interface for different isotope pattern generator methods.
Definition: IsotopePatternGenerator.h:54
A more convenient string class.
Definition: String.h:61
int Int
Signed integer type.
Definition: Types.h:102
unsigned int UInt
Unsigned integer type.
Definition: Types.h:94
ptrdiff_t SignedSize
Signed Size type e.g. used as pointer difference.
Definition: Types.h:134
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47
std::ostream & operator<<(std::ostream &os, const AccurateMassSearchResult &amsr)