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_NEUTRALLOSSDIFFFILTER_H
00028 #define OPENMS_FILTERING_TRANSFORMERS_NEUTRALLOSSDIFFFILTER_H
00029
00030 #include <OpenMS/FILTERING/TRANSFORMERS/FilterFunctor.h>
00031
00032 #include <map>
00033 #include <cmath>
00034
00035 namespace OpenMS
00036 {
00044 class NeutralLossDiffFilter : public FilterFunctor
00045 {
00046 public:
00047
00048
00049
00051 NeutralLossDiffFilter();
00052
00054 NeutralLossDiffFilter(const NeutralLossDiffFilter& source);
00055
00057 virtual ~NeutralLossDiffFilter();
00058
00059
00060
00061
00063 NeutralLossDiffFilter& operator = (const NeutralLossDiffFilter& source);
00064
00065
00066
00067
00069 static FilterFunctor* create() { return new NeutralLossDiffFilter(); }
00070
00072 template <typename SpectrumType> double apply(SpectrumType& spectrum)
00073 {
00074 double tolerance = (double)param_.getValue("tolerance");
00075 double isodiff = 0;
00076
00077 for (int i = 0; i < (int)spectrum.size(); ++i)
00078 {
00079 for (int j = 1; i - j >= 0; ++j)
00080 {
00081 double pos_diff = std::fabs(spectrum.getContainer()[i-j].getPosition()[0] - spectrum.getContainer()[i].getPosition()[0]);
00082 if (std::fabs(pos_diff - 18) < tolerance || std::fabs(pos_diff - 17) < tolerance)
00083 {
00084 isodiff += spectrum.getContainer()[i-j].getIntensity() + spectrum.getContainer()[i].getIntensity();
00085 }
00086 else
00087 {
00088 if (pos_diff > 18 + tolerance)
00089 {
00090 break;
00091 }
00092 }
00093 }
00094 }
00095
00096 return isodiff;
00097 }
00098
00100 static const String getProductName()
00101 {
00102 return "NeutralLossDiffFilter";
00103 }
00104
00105
00106 };
00107 }
00108 #endif // OPENMS_FILTERING_TRANSFORMERS_NEUTRALLOSSDIFFFILTER_H