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_SCALER_H
00028 #define OPENMS_FILTERING_TRANSFORMERS_SCALER_H
00029
00030 #include <OpenMS/FILTERING/TRANSFORMERS/PreprocessingFunctor.h>
00031 #include <map>
00032
00033 namespace OpenMS
00034 {
00040 class Scaler
00041 : public PreprocessingFunctor
00042 {
00043 public:
00044
00045
00046
00048 Scaler();
00049
00051 Scaler(const Scaler& source);
00052
00054 virtual ~Scaler();
00055
00056
00057
00058
00060 Scaler& operator = (const Scaler& source);
00061
00062
00063
00064
00066 static PreprocessingFunctor* create() { return new Scaler(); }
00067
00069 static const String getProductName()
00070 {
00071 return "Scaler";
00072 }
00073
00074 template <typename SpectrumType> void filterSpectrum(SpectrumType& spectrum)
00075 {
00076 if (spectrum.size()==0) return;
00077
00078 spectrum.getContainer().sortByIntensity();
00079 typename SpectrumType::size_type count = spectrum.size();
00080 ++count;
00081 typename SpectrumType::PeakType::IntensityType last_int = 0.0;
00082 typename SpectrumType::Iterator it = spectrum.end();
00083 do
00084 {
00085 --it;
00086 if (it->getIntensity()!=last_int)
00087 {
00088 --count;
00089 }
00090 last_int = it->getIntensity();
00091 it->setIntensity(count);
00092 }
00093 while (it!=spectrum.begin());
00094 }
00095
00096 void filterPeakSpectrum(PeakSpectrum& spectrum);
00097
00098 void filterPeakMap(PeakMap& exp);
00099
00100
00101 };
00102
00103 }
00104 #endif //OPENMS_FILTERING_TRANSFORMERS_SCALER_H