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 #ifndef OPENMS_TRANSFORMATIONS_FEATUREFINDER_ISOTOPEWAVELET_H
00036 #define OPENMS_TRANSFORMATIONS_FEATUREFINDER_ISOTOPEWAVELET_H
00037
00038 #include <OpenMS/TRANSFORMATIONS/FEATUREFINDER/IsotopeWaveletConstants.h>
00039 #include <OpenMS/KERNEL/MSSpectrum.h>
00040 #include <OpenMS/CHEMISTRY/IsotopeDistribution.h>
00041
00042 namespace OpenMS
00043 {
00051 class OPENMS_DLLAPI IsotopeWavelet
00052 {
00053 public:
00054
00056 static IsotopeWavelet * init(const DoubleReal max_m, const UInt max_charge);
00057
00059 static IsotopeWavelet * getInstance()
00060 {
00061 return me_;
00062 }
00063
00065 static void destroy();
00066
00067
00077 static DoubleReal getValueByMass(const DoubleReal t, const DoubleReal m, const UInt z, const Int mode = +1)
00078 {
00079 return getValueByLambda(getLambdaL(m * z - z * mode * Constants::IW_PROTON_MASS), t * z + 1);
00080 }
00081
00090 static DoubleReal getValueByLambda(const DoubleReal lambda, const DoubleReal tz1);
00091
00104 static DoubleReal getValueByLambdaExtrapol(const DoubleReal lambda, const DoubleReal tz1);
00105
00106 static DoubleReal getValueByLambdaExact(const DoubleReal lambda, const DoubleReal tz1);
00107
00108
00110 static UInt getMaxCharge()
00111 {
00112 return max_charge_;
00113 }
00114
00116 static void setMaxCharge(const UInt max_charge)
00117 {
00118 max_charge_ = max_charge;
00119 }
00120
00125 static DoubleReal getTableSteps()
00126 {
00127 return table_steps_;
00128 }
00129
00134 static DoubleReal getInvTableSteps()
00135 {
00136 return inv_table_steps_;
00137 }
00138
00140 static void setTableSteps(const DoubleReal table_steps)
00141 {
00142 inv_table_steps_ = 1. / table_steps;
00143 table_steps_ = table_steps;
00144 }
00145
00147 static DoubleReal getLambdaL(const DoubleReal m);
00148
00149
00154 static const IsotopeDistribution::ContainerType & getAveragine(const DoubleReal m, UInt * size = NULL);
00155
00156
00158 static Size getGammaTableMaxIndex()
00159 {
00160 return gamma_table_max_index_;
00161 }
00162
00164 static Size getExpTableMaxIndex()
00165 {
00166 return exp_table_max_index_;
00167 }
00168
00171 static float myPow(float a, float b);
00172
00173 static UInt getMzPeakCutOffAtMonoPos(const DoubleReal mass, const UInt z);
00174
00175 static UInt getNumPeakCutOff(const DoubleReal mass, const UInt z);
00176
00177 static UInt getNumPeakCutOff(const DoubleReal mz);
00178
00179
00180 protected:
00181
00183 static IsotopeWavelet * me_;
00184
00186 IsotopeWavelet();
00187
00191 IsotopeWavelet(const DoubleReal max_m, const UInt max_charge);
00192
00193
00195 virtual ~IsotopeWavelet();
00196
00197
00206 static void preComputeExpensiveFunctions_(const DoubleReal max_m);
00207
00208
00211 static void computeIsotopeDistributionSize_(const DoubleReal max_m);
00212
00213
00218 static float myPow2_(float i);
00219
00224 static float myLog2_(float i);
00225
00227 union fi_
00228 {
00229 Int i;
00230 float f;
00231 };
00232
00234 static UInt max_charge_;
00235
00237 static DoubleReal table_steps_;
00238 static DoubleReal inv_table_steps_;
00239
00241 static std::vector<DoubleReal> gamma_table_;
00242 static std::vector<DoubleReal> gamma_table_new_;
00243
00245 static std::vector<DoubleReal> exp_table_;
00246
00248 static std::vector<DoubleReal> sine_table_;
00249
00251 static IsotopeDistribution averagine_;
00252
00253 static Size gamma_table_max_index_;
00254 static Size exp_table_max_index_;
00255
00256 };
00257
00258 }
00259
00260 #endif