Home  · Classes  · Annotated Classes  · Modules  · Members  · Namespaces  · Related Pages

EmpiricalFormula.h

Go to the documentation of this file.
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