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

GoodDiffFilter.h (Maintainer: Andreas Bertsch)

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: Andreas Bertsch $
00025 // --------------------------------------------------------------------------
00026 //
00027 #ifndef OPENMS_FILTERING_TRANSFORMERS_GOODDIFFFILTER_H
00028 #define OPENMS_FILTERING_TRANSFORMERS_GOODDIFFFILTER_H
00029 
00030 #include <OpenMS/FILTERING/TRANSFORMERS/FilterFunctor.h>
00031 
00032 #include <map>
00033 #include <string>
00034 #include <cmath>
00035 
00036 namespace OpenMS
00037 {
00045   class GoodDiffFilter : public FilterFunctor
00046   {
00047   public:
00048 
00049     // @name Constructors and Destructors
00050     // @{
00052     GoodDiffFilter();
00053 
00055     GoodDiffFilter(const GoodDiffFilter& source);
00056 
00058     virtual ~GoodDiffFilter();
00059     // @}
00060 
00061     // @name Operators
00062     // @{
00064     GoodDiffFilter& operator=(const GoodDiffFilter& source);
00065     // @}
00066 
00067     // @name Accessors
00068     // @{
00070     static FilterFunctor* create() { return new GoodDiffFilter();}
00071 
00073     template <typename SpectrumType> double apply(SpectrumType& spectrum)
00074     {
00075       double tolerance = (double)param_.getValue("tolerance");
00076       double gooddiff = 0;
00077       //iterate over all peaks
00078       double totaldiff = 0;
00079       for (uint i = 0; i < spectrum.size(); ++i)
00080       {
00081         //look for each peakdifference that is in range of aa residuemasses (56/187), if it could be a aa (aamass)
00082         for (uint j = i; i+j < spectrum.size(); ++j)
00083         {
00084           double diff =  spectrum.getContainer()[i+j].getPosition()[0] - spectrum.getContainer()[i].getPosition()[0];
00085           if (diff < 56)
00086           {
00087             continue;
00088           }
00089           
00090           if (diff > 187)
00091           {
00092             j = spectrum.size();
00093           }
00094           else
00095           {
00096             totaldiff += spectrum.getContainer()[i+j].getIntensity() + spectrum.getContainer()[i].getIntensity();
00097             std::map<double, char>::const_iterator aait = aamass_.lower_bound(diff);
00098             //look for aamasses that fit diff
00099             if (fabs(aait->first - diff ) <= tolerance)
00100             {
00101               gooddiff += spectrum.getContainer()[i+j].getIntensity()  + spectrum.getContainer()[i].getIntensity();
00102             }
00103             else
00104             {
00105               ++aait;
00106               if ((aait) != aamass_.end() && fabs ((aait)->first - diff) <= tolerance)
00107               {
00108                 gooddiff += spectrum.getContainer()[i+j].getIntensity() + spectrum.getContainer()[i].getIntensity();
00109               }
00110             }
00111           }
00112         }
00113       }
00114 
00115       return gooddiff/totaldiff;
00116     }
00117 
00119     static const String getProductName()
00120     {
00121       return "GoodDiffFilter";
00122     }
00123     // @}
00124 
00125 
00126     private: 
00127     
00129       std::map<double, char> aamass_;
00130   };
00131 }
00132 #endif // OPENMS_FILTERING_TRANSFORMERS_GOODDIFFFILTER_H

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