00001 // -------------------------------------------------------------------------- 00002 // OpenMS -- Open-Source Mass Spectrometry 00003 // -------------------------------------------------------------------------- 00004 // Copyright The OpenMS Team -- Eberhard Karls University Tuebingen, 00005 // ETH Zurich, and Freie Universitaet Berlin 2002-2012. 00006 // 00007 // This software is released under a three-clause BSD license: 00008 // * Redistributions of source code must retain the above copyright 00009 // notice, this list of conditions and the following disclaimer. 00010 // * Redistributions in binary form must reproduce the above copyright 00011 // notice, this list of conditions and the following disclaimer in the 00012 // documentation and/or other materials provided with the distribution. 00013 // * Neither the name of any author or any participating institution 00014 // may be used to endorse or promote products derived from this software 00015 // without specific prior written permission. 00016 // For a full list of authors, refer to the file AUTHORS. 00017 // -------------------------------------------------------------------------- 00018 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00019 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00020 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00021 // ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING 00022 // INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00023 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00024 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 00025 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 00026 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 00027 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 00028 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00029 // 00030 // -------------------------------------------------------------------------- 00031 // $Maintainer: Andreas Bertsch $ 00032 // $Authors: Andreas Bertsch $ 00033 // -------------------------------------------------------------------------- 00034 // 00035 #ifndef OPENMS_CHEMISTRY_EMPIRICALFORMULA_H 00036 #define OPENMS_CHEMISTRY_EMPIRICALFORMULA_H 00037 00038 #include <iostream> 00039 #include <vector> 00040 00041 #include <OpenMS/DATASTRUCTURES/String.h> 00042 #include <OpenMS/DATASTRUCTURES/Map.h> 00043 #include <OpenMS/CHEMISTRY/IsotopeDistribution.h> 00044 #include <OpenMS/CONCEPT/Types.h> 00045 00046 namespace OpenMS 00047 { 00048 class Element; 00049 class ElementDB; 00078 class OPENMS_DLLAPI EmpiricalFormula 00079 { 00080 00081 public: 00082 00086 00087 typedef Map<const Element *, SignedSize>::ConstIterator ConstIterator; 00088 typedef Map<const Element *, SignedSize>::ConstIterator const_iterator; 00089 00093 00094 EmpiricalFormula(); 00095 00097 EmpiricalFormula(const EmpiricalFormula & rhs); 00098 00103 EmpiricalFormula(const String & rhs); 00104 00106 EmpiricalFormula(SignedSize number, const Element * element, SignedSize charge = 0); 00107 00109 virtual ~EmpiricalFormula(); 00111 00115 00116 DoubleReal getMonoWeight() const; 00117 00119 DoubleReal getAverageWeight() const; 00120 00126 IsotopeDistribution getIsotopeDistribution(UInt max_depth) const; 00127 00129 const Element * getElement(const String & name) const; 00130 00132 const Element * getElement(UInt atomic_number) const; 00133 00135 const ElementDB * getElementDB() const; 00136 00138 Size getNumberOf(UInt atomic_number) const; 00139 00141 Size getNumberOf(const String & name) const; 00142 00144 Size getNumberOf(const Element * element) const; 00145 00147 Size getNumberOfAtoms() const; 00148 00150 SignedSize getCharge() const; 00151 00153 void setCharge(SignedSize charge); 00154 00156 String getString() const; 00158 00162 00163 EmpiricalFormula & operator=(const EmpiricalFormula & rhs); 00164 00169 EmpiricalFormula & operator=(const String & rhs); 00170 00172 EmpiricalFormula & operator+=(const EmpiricalFormula & rhs); 00173 00178 EmpiricalFormula & operator+=(const String & rhs); 00179 00181 EmpiricalFormula operator*(const SignedSize & times) const; 00182 00184 EmpiricalFormula operator+(const EmpiricalFormula & rhs) const; 00185 00190 EmpiricalFormula operator+(const String & rhs) const; 00191 00193 EmpiricalFormula & operator-=(const EmpiricalFormula & rhs); 00194 00199 EmpiricalFormula & operator-=(const String & rhs); 00200 00202 EmpiricalFormula operator-(const EmpiricalFormula & rhs) const; 00203 00208 EmpiricalFormula operator-(const String & rhs) const; 00210 00214 00215 bool isEmpty() const; 00216 00218 bool isCharged() const; 00219 00221 bool hasElement(const Element * element) const; 00222 00224 bool hasElement(const String & name) const; 00225 00227 bool hasElement(UInt atomic_number) const; 00228 00230 bool operator==(const EmpiricalFormula & rhs) const; 00231 00236 bool operator==(const String & rhs) const; 00237 00239 bool operator!=(const EmpiricalFormula & rhs) const; 00240 00245 bool operator!=(const String & rhs) const; 00247 00249 friend OPENMS_DLLAPI std::ostream & operator<<(std::ostream & os, const EmpiricalFormula & formula); 00250 00254 inline ConstIterator begin() const { return formula_.begin(); } 00255 00256 inline ConstIterator end() const { return formula_.end(); } 00258 00259 protected: 00260 00262 void removeZeroedElements_(); 00263 00264 Map<const Element *, SignedSize> formula_; 00265 00266 SignedSize charge_; 00267 00268 void readElementsFromFile_(const String & file_name); 00269 00270 SignedSize parseFormula_(Map<const Element *, SignedSize> & ef, const String & formula) const; 00271 00272 const ElementDB * element_db_; 00273 }; 00274 00275 OPENMS_DLLAPI std::ostream & operator<<(std::ostream & os, const EmpiricalFormula & formula); 00276 00277 } // namespace OpenMS 00278 #endif
| OpenMS / TOPP release 1.10.0 | Documentation generated on Thu Mar 7 2013 09:42:38 using doxygen 1.7.1 |