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 #ifndef OPENMS_FILTERING_TRANSFORMERS_ISOTOPEDIFFFILTER_H
00028 #define OPENMS_FILTERING_TRANSFORMERS_ISOTOPEDIFFFILTER_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 IsotopeDiffFilter : public FilterFunctor
00046 {
00047
00048 public:
00049
00050
00051
00053 IsotopeDiffFilter();
00054
00056 IsotopeDiffFilter(const IsotopeDiffFilter& source);
00057
00059 virtual ~IsotopeDiffFilter();
00060
00061
00062
00063
00065 IsotopeDiffFilter& operator = (const IsotopeDiffFilter& source);
00066
00067
00068
00069
00071 static FilterFunctor* create() { return new IsotopeDiffFilter(); }
00072
00074 template <typename SpectrumType> double apply(SpectrumType& spectrum)
00075 {
00076 double tolerance = (double)param_.getValue("tolerance");
00077 double isodiff = 0;
00078
00079
00080 for (int i = 0; i < (int)spectrum.size(); ++i)
00081 {
00082 for (uint j = 1; i + j < spectrum.size(); ++j)
00083 {
00084 double pos_ij = spectrum.getContainer()[i+j].getPosition()[0];
00085 double pos_i = spectrum.getContainer()[i].getPosition()[0];
00086 if (std::fabs(pos_ij - pos_i + 1) < tolerance)
00087 {
00088 isodiff += spectrum.getContainer()[i].getIntensity() + spectrum.getContainer()[i+j].getIntensity();
00089 }
00090 else
00091 {
00092 if (std::fabs(spectrum.getContainer()[i+j].getPosition()[0] - spectrum.getContainer()[i].getPosition()[0]) > 1 + tolerance)
00093 {
00094 break;
00095 }
00096 }
00097 }
00098 }
00099 return isodiff;
00100 }
00101
00103 static const String getProductName()
00104 {
00105 return "IsotopeDiffFilter";
00106 }
00107
00108
00109 private:
00110 };
00111 }
00112 #endif // OPENMS_FILTERING_TRANSFORMERS_ISOTOPEDIFFFILTER_H