ProteoWizard
Chemistry.hpp
Go to the documentation of this file.
1 //
2 // $Id: Chemistry.hpp 6865 2014-10-31 21:47:12Z chambm $
3 //
4 //
5 // Original author: Darren Kessner <darren@proteowizard.org>
6 //
7 // Copyright 2006 Louis Warschaw Prostate Cancer Center
8 // Cedars Sinai Medical Center, Los Angeles, California 90048
9 //
10 // Licensed under the Apache License, Version 2.0 (the "License");
11 // you may not use this file except in compliance with the License.
12 // You may obtain a copy of the License at
13 //
14 // http://www.apache.org/licenses/LICENSE-2.0
15 //
16 // Unless required by applicable law or agreed to in writing, software
17 // distributed under the License is distributed on an "AS IS" BASIS,
18 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 // See the License for the specific language governing permissions and
20 // limitations under the License.
21 //
22 
23 
24 #ifndef _CHEMISTRY_HPP_
25 #define _CHEMISTRY_HPP_
26 
27 
29 #include <iosfwd>
30 #include <string>
31 #include <vector>
33 #include <boost/shared_ptr.hpp>
34 
35 
36 namespace pwiz {
37 namespace chemistry {
38 
39 
40 /// the mass of a proton in unified atomic mass units
41 const double Proton = 1.00727646688;
42 
43 /// the mass of a neutron in unified atomic mass units
44 const double Neutron = 1.00866491560;
45 
46 /// the mass of an electron in unified atomic mass units
47 const double Electron = 0.00054857991;
48 
49 
50 /// struct for holding isotope information
52 {
53  double mass;
54  double abundance;
55 
56  MassAbundance(double m = 0, double a = 0)
57  : mass(m), abundance(a)
58  {}
59 
60  bool operator==(const MassAbundance& that) const;
61  bool operator!=(const MassAbundance& that) const;
62 };
63 
64 
65 /// struct for holding isotope distribution
66 typedef std::vector<MassAbundance> MassDistribution;
67 
68 
69 PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const MassAbundance& ma);
70 PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const MassDistribution& md);
71 
72 
73 /// scope for declarations related to elements
74 namespace Element {
75 
76 
77 /// enumeration of the elements
79 {
80  C, H, O, N, S, P, _13C, _2H, _18O, _15N,
81  He, Li, Be, B, F, Ne,
82  Na, Mg, Al, Si, Cl, Ar, K, Ca,
83  Sc, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Zn,
84  Ga, Ge, As, Se, Br, Kr, Rb, Sr, Y, Zr,
85  Nb, Mo, Tc, Ru, Rh, Pd, Ag, Cd, In, Sn,
86  Sb, Te, I, Xe, Cs, Ba, La, Ce, Pr, Nd,
87  Pm, Sm, Eu, Gd, Tb, Dy, Ho, Er, Tm, Yb,
88  Lu, Hf, Ta, W, Re, Os, Ir, Pt, Au, Hg,
89  Tl, Pb, Bi, Po, At, Rn, Fr, Ra, Ac, Th,
90  Pa, U, Np, Pu, Am, Cm, Bk, Cf, Es, Fm,
91  Md, No, Lr, Rf, Db, Sg, Bh, Hs, Mt, Uun,
92  Uuu, Uub, Uuq, Uuh
93 };
94 
95 
96 PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, Type type);
97 
98 
99 /// class for obtaining information about elements
100 namespace Info
101 {
102 
103 
105 {
107  std::string symbol;
109  double atomicWeight;
110  MassAbundance monoisotope; /// the most abundant isotope
111  MassDistribution isotopes;
112 };
113 
114 /// retrieve the record for an element
115 PWIZ_API_DECL const Record& record(Type type);
116 
117 /// retrieve the record for an element
118 PWIZ_API_DECL const Record& record(const std::string& symbol);
119 
120 
121 } // namespace Info
122 
123 
124 PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const Info::Record& record);
125 
126 
127 } // namespace Element
128 
129 
130 class CompositionMap;
131 
132 /// class to represent a chemical formula
134 {
135  public:
136 
137  /// formula string given by symbol/count pairs, e.g. water: "H2 O1" (whitespace optional)
138  Formula(const std::string& formula = "");
139  Formula(const char* formula);
140  Formula(const Formula& formula);
141  const Formula& operator=(const Formula& formula);
142  ~Formula();
143 
144  double monoisotopicMass() const;
145  double molecularWeight() const;
146  std::string formula() const;
147 
148  /// access to the Element's count in the formula
149  int operator[](Element::Type e) const;
150  int& operator[](Element::Type e);
151 
152  // direct access to the map, for iteration
153  typedef std::map<Element::Type, int> Map;
154  Map data() const;
155 
156  // operations
157  Formula& operator+=(const Formula& that);
158  Formula& operator-=(const Formula& that);
159  Formula& operator*=(int scalar);
160 
161  /// formulas are equal iff their elemental compositions are equal
162  bool operator==(const Formula& that) const;
163  bool operator!=(const Formula& that) const;
164 
165  private:
166  class Impl;
167  boost::shared_ptr<Impl> impl_;
168 };
169 
170 
171 PWIZ_API_DECL Formula operator+(const Formula& a, const Formula& b);
172 PWIZ_API_DECL Formula operator-(const Formula& a, const Formula& b);
173 PWIZ_API_DECL Formula operator*(const Formula& a, int scalar);
174 PWIZ_API_DECL Formula operator*(int scalar, const Formula& a);
175 
176 
177 /// output a Formula
178 PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const Formula& formula);
179 
180 
181 } // namespace chemistry
182 } // namespace pwiz
183 
184 
185 #endif // _CHEMISTRY_HPP_
_13C
Definition: Chemistry.hpp:80
Rb
Definition: Chemistry.hpp:80
Ne
Definition: Chemistry.hpp:80
K
Definition: Chemistry.hpp:80
Zn
Definition: Chemistry.hpp:80
Ho
Definition: Chemistry.hpp:80
I
Definition: Chemistry.hpp:80
Ce
Definition: Chemistry.hpp:80
Pr
Definition: Chemistry.hpp:80
Cf
Definition: Chemistry.hpp:80
PWIZ_API_DECL double & operator+=(double &d, const MZTolerance &tolerance)
Rf
Definition: Chemistry.hpp:80
Mg
Definition: Chemistry.hpp:80
Pa
Definition: Chemistry.hpp:80
Tm
Definition: Chemistry.hpp:80
PWIZ_API_DECL bool operator==(const MZTolerance &a, const MZTolerance &b)
No
Definition: Chemistry.hpp:80
Ar
Definition: Chemistry.hpp:80
class to represent a chemical formula
Definition: Chemistry.hpp:133
V
Definition: Chemistry.hpp:80
Mn
Definition: Chemistry.hpp:80
Eu
Definition: Chemistry.hpp:80
Tb
Definition: Chemistry.hpp:80
Hg
Definition: Chemistry.hpp:80
Cr
Definition: Chemistry.hpp:80
Pm
Definition: Chemistry.hpp:80
Rn
Definition: Chemistry.hpp:80
Ba
Definition: Chemistry.hpp:80
Au
Definition: Chemistry.hpp:80
Hs
Definition: Chemistry.hpp:80
Nd
Definition: Chemistry.hpp:80
Co
Definition: Chemistry.hpp:80
Ra
Definition: Chemistry.hpp:80
Cs
Definition: Chemistry.hpp:80
PWIZ_API_DECL double & operator-=(double &d, const MZTolerance &tolerance)
PWIZ_API_DECL std::ostream & operator<<(std::ostream &os, const MassAbundance &ma)
As
Definition: Chemistry.hpp:80
Si
Definition: Chemistry.hpp:80
Ir
Definition: Chemistry.hpp:80
Es
Definition: Chemistry.hpp:80
La
Definition: Chemistry.hpp:80
Ge
Definition: Chemistry.hpp:80
Br
Definition: Chemistry.hpp:80
Pt
Definition: Chemistry.hpp:80
Li
Definition: Chemistry.hpp:80
Mt
Definition: Chemistry.hpp:80
Dy
Definition: Chemistry.hpp:80
Sc
Definition: Chemistry.hpp:80
Uuq
Definition: Chemistry.hpp:80
U
Definition: Chemistry.hpp:80
At
Definition: Chemistry.hpp:80
Md
Definition: Chemistry.hpp:80
Sn
Definition: Chemistry.hpp:80
Tc
Definition: Chemistry.hpp:80
Mo
Definition: Chemistry.hpp:80
Uuu
Definition: Chemistry.hpp:80
Am
Definition: Chemistry.hpp:80
P
Definition: Chemistry.hpp:80
F
Definition: Chemistry.hpp:80
Pu
Definition: Chemistry.hpp:80
Po
Definition: Chemistry.hpp:80
Se
Definition: Chemistry.hpp:80
Cu
Definition: Chemistry.hpp:80
const double Neutron
the mass of a neutron in unified atomic mass units
Definition: Chemistry.hpp:44
Ac
Definition: Chemistry.hpp:80
Rh
Definition: Chemistry.hpp:80
Al
Definition: Chemistry.hpp:80
Bk
Definition: Chemistry.hpp:80
Gd
Definition: Chemistry.hpp:80
N
Definition: Chemistry.hpp:80
const double Proton
the mass of a proton in unified atomic mass units
Definition: Chemistry.hpp:41
Yb
Definition: Chemistry.hpp:80
Ca
Definition: Chemistry.hpp:80
Er
Definition: Chemistry.hpp:80
_18O
Definition: Chemistry.hpp:80
const double Electron
the mass of an electron in unified atomic mass units
Definition: Chemistry.hpp:47
MassDistribution isotopes
the most abundant isotope
Definition: Chemistry.hpp:111
#define PWIZ_API_DECL
Definition: Export.hpp:32
Zr
Definition: Chemistry.hpp:80
Bh
Definition: Chemistry.hpp:80
Xe
Definition: Chemistry.hpp:80
Sr
Definition: Chemistry.hpp:80
PWIZ_API_DECL Formula operator+(const Formula &a, const Formula &b)
Te
Definition: Chemistry.hpp:80
Na
Definition: Chemistry.hpp:80
Ga
Definition: Chemistry.hpp:80
MassAbundance(double m=0, double a=0)
Definition: Chemistry.hpp:56
PWIZ_API_DECL Formula operator*(const Formula &a, int scalar)
Hf
Definition: Chemistry.hpp:80
Sb
Definition: Chemistry.hpp:80
Lr
Definition: Chemistry.hpp:80
Db
Definition: Chemistry.hpp:80
He
Definition: Chemistry.hpp:80
Be
Definition: Chemistry.hpp:80
Th
Definition: Chemistry.hpp:80
Tl
Definition: Chemistry.hpp:80
H
Definition: Chemistry.hpp:80
Nb
Definition: Chemistry.hpp:80
_15N
Definition: Chemistry.hpp:80
Pd
Definition: Chemistry.hpp:80
Cd
Definition: Chemistry.hpp:80
Cl
Definition: Chemistry.hpp:80
Ni
Definition: Chemistry.hpp:80
In
Definition: Chemistry.hpp:80
Sm
Definition: Chemistry.hpp:80
boost::shared_ptr< Impl > impl_
Definition: Chemistry.hpp:166
Ta
Definition: Chemistry.hpp:80
Fm
Definition: Chemistry.hpp:80
Ag
Definition: Chemistry.hpp:80
Sg
Definition: Chemistry.hpp:80
Pb
Definition: Chemistry.hpp:80
Fe
Definition: Chemistry.hpp:80
Cm
Definition: Chemistry.hpp:80
Re
Definition: Chemistry.hpp:80
B
Definition: Chemistry.hpp:80
S
Definition: Chemistry.hpp:80
Np
Definition: Chemistry.hpp:80
pwiz::chemistry::Element::Type Type
O
Definition: Chemistry.hpp:80
Os
Definition: Chemistry.hpp:80
C
Definition: Chemistry.hpp:80
Y
Definition: Chemistry.hpp:80
PWIZ_API_DECL const Record & record(const std::string &symbol)
retrieve the record for an element
Uub
Definition: Chemistry.hpp:80
struct for holding isotope information
Definition: Chemistry.hpp:51
PWIZ_API_DECL bool operator!=(const MZTolerance &a, const MZTolerance &b)
Kr
Definition: Chemistry.hpp:80
Ti
Definition: Chemistry.hpp:80
std::vector< MassAbundance > MassDistribution
struct for holding isotope distribution
Definition: Chemistry.hpp:66
W
Definition: Chemistry.hpp:80
_2H
Definition: Chemistry.hpp:80
Uun
Definition: Chemistry.hpp:80
PWIZ_API_DECL Formula operator-(const Formula &a, const Formula &b)
Ru
Definition: Chemistry.hpp:80
Lu
Definition: Chemistry.hpp:80
std::map< Element::Type, int > Map
Definition: Chemistry.hpp:153
Bi
Definition: Chemistry.hpp:80
Fr
Definition: Chemistry.hpp:80