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

AveragePosition.h (Maintainer: Clemens Groepl)

Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 // --------------------------------------------------------------------------
00005 //                   OpenMS Mass Spectrometry Framework 
00006 // --------------------------------------------------------------------------
00007 //  Copyright (C) 2003-2008 -- Oliver Kohlbacher, Knut Reinert
00008 //
00009 //  This library is free software; you can redistribute it and/or
00010 //  modify it under the terms of the GNU Lesser General Public
00011 //  License as published by the Free Software Foundation; either
00012 //  version 2.1 of the License, or (at your option) any later version.
00013 //
00014 //  This library is distributed in the hope that it will be useful,
00015 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017 //  Lesser General Public License for more details.
00018 //
00019 //  You should have received a copy of the GNU Lesser General Public
00020 //  License along with this library; if not, write to the Free Software
00021 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 //
00023 // --------------------------------------------------------------------------
00024 // $Maintainer: Clemens Groepl $
00025 // --------------------------------------------------------------------------
00026 
00027 #ifndef OPENMS_MATH_STATISTICS_AVERAGEPOSITION_H
00028 #define OPENMS_MATH_STATISTICS_AVERAGEPOSITION_H
00029 
00030 #include <OpenMS/DATASTRUCTURES/DPosition.h>
00031 
00032 namespace OpenMS
00033 {
00034 
00035   namespace Math
00036   {
00048     template < UInt D >
00049     class AveragePosition
00050     {
00051      public:
00052 
00054       enum
00055         {
00056           DIMENSION = D
00057         };
00058 
00060       typedef DPosition<DIMENSION> PositionType;
00061 
00063       typedef typename PositionType::CoordinateType CoordinateType;
00064 
00065      public:
00066 
00068       AveragePosition ()
00069         : position_(),
00070           position_weighted_sum_(),
00071           weight_sum_()
00072       {
00073       }
00074       
00076       AveragePosition ( AveragePosition const & rhs )
00077         : position_               ( rhs.position_),
00078           position_weighted_sum_  ( rhs.position_weighted_sum_),
00079           weight_sum_             ( rhs.weight_sum_)
00080       {
00081       }
00082 
00084       PositionType const & getPosition() const
00085       {
00086         return position_;
00087       }
00088 
00090       CoordinateType const & getWeight() const
00091       {
00092         return weight_sum_;
00093       }
00094 
00096       void clear ()
00097       {
00098         position_.clear();
00099         position_weighted_sum_.clear();
00100         weight_sum_ = 0;
00101         return;
00102       }
00103 
00105       void add ( PositionType position, CoordinateType const weight = 1 )
00106       {
00107         
00108         weight_sum_ += weight;
00109         position *= weight;
00110         position_weighted_sum_ += position;
00111         
00112         // if the sum of weights is 0, set all coordinates to zero as well
00113         if (weight_sum_ == 0)
00114         {
00115           position_.clear();
00116         }
00117         else 
00118         {
00119           position_ = position_weighted_sum_;
00120           position_ /= weight_sum_;
00121         }
00122         return;
00123       }
00124 
00125      protected:
00126 
00127       PositionType position_;
00128       PositionType position_weighted_sum_;
00129       CoordinateType weight_sum_;
00130 
00131     };
00132 
00133   } // namespace Math
00134 
00135 } // namespace OpenMS
00136 
00137 #endif //  OPENMS_MATH_STATISTICS_AVERAGEPOSITION_H

Generated Tue Apr 1 15:36:32 2008 -- using doxygen 1.5.4 OpenMS / TOPP 1.1