Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef OPENMS_FILTERING_TRANSFORMERS_GOODDIFFFILTER_H
00037 #define OPENMS_FILTERING_TRANSFORMERS_GOODDIFFFILTER_H
00038
00039 #include <OpenMS/FILTERING/TRANSFORMERS/FilterFunctor.h>
00040
00041 #include <map>
00042 #include <string>
00043 #include <cmath>
00044
00045 namespace OpenMS
00046 {
00054 class OPENMS_DLLAPI GoodDiffFilter :
00055 public FilterFunctor
00056 {
00057 public:
00058
00059
00060
00062 GoodDiffFilter();
00063
00065 GoodDiffFilter(const GoodDiffFilter & source);
00066
00068 virtual ~GoodDiffFilter();
00069
00070
00071
00072
00074 GoodDiffFilter & operator=(const GoodDiffFilter & source);
00075
00076
00077
00078
00080 static FilterFunctor * create() { return new GoodDiffFilter(); }
00081
00083 template <typename SpectrumType>
00084 double apply(SpectrumType & spectrum)
00085 {
00086 double tolerance = (double)param_.getValue("tolerance");
00087 double gooddiff = 0;
00088
00089 double totaldiff = 0;
00090 for (Size i = 0; i < spectrum.size(); ++i)
00091 {
00092
00093 for (Size j = i; i + j < spectrum.size(); ++j)
00094 {
00095 double diff = spectrum[i + j].getPosition()[0] - spectrum[i].getPosition()[0];
00096 if (diff < 56)
00097 {
00098 continue;
00099 }
00100
00101 if (diff > 187)
00102 {
00103 j = spectrum.size();
00104 }
00105 else
00106 {
00107 totaldiff += spectrum[i + j].getIntensity() + spectrum[i].getIntensity();
00108 std::map<double, char>::const_iterator aait = aamass_.lower_bound(diff);
00109 if (aait == aamass_.end())
00110 {
00111 continue;
00112 }
00113
00114 if (fabs(aait->first - diff) <= tolerance)
00115 {
00116 gooddiff += spectrum[i + j].getIntensity() + spectrum[i].getIntensity();
00117 }
00118 else
00119 {
00120 ++aait;
00121 if ((aait) != aamass_.end() && fabs((aait)->first - diff) <= tolerance)
00122 {
00123 gooddiff += spectrum[i + j].getIntensity() + spectrum[i].getIntensity();
00124 }
00125 }
00126 }
00127 }
00128 }
00129
00130 return gooddiff / totaldiff;
00131 }
00132
00134 static const String getProductName()
00135 {
00136 return "GoodDiffFilter";
00137 }
00138
00139
00140
00141
00142 private:
00143
00145 std::map<double, char> aamass_;
00146 };
00147 }
00148
00149 #endif // OPENMS_FILTERING_TRANSFORMERS_GOODDIFFFILTER_H