ProteoWizard
Chemistry.hpp
Go to the documentation of this file.
1 //
2 // $Id$
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, // Order matters: _15N is the end of the CHONSP entries
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, _3H
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
Uuh
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