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_TRANSFORMATIONS_RAW2PEAK_OPTIMIZEPEAKDECONVOLUTION_H
00037 #define OPENMS_TRANSFORMATIONS_RAW2PEAK_OPTIMIZEPEAKDECONVOLUTION_H
00038
00039 #include <OpenMS/TRANSFORMATIONS/RAW2PEAK/PeakShape.h>
00040 #include <OpenMS/TRANSFORMATIONS/RAW2PEAK/OptimizePick.h>
00041 #include <gsl/gsl_vector.h>
00042 #include <gsl/gsl_multifit_nlin.h>
00043 #include <gsl/gsl_blas.h>
00044 #include <OpenMS/DATASTRUCTURES/DefaultParamHandler.h>
00045
00046
00047 #include <iostream>
00048 #ifdef DEBUG_DECONV
00049 #include <iostream>
00050 #include <fstream>
00051 #endif
00052 #include <vector>
00053
00054 namespace OpenMS
00055 {
00056
00057 namespace OptimizationFunctions
00058 {
00059
00066 struct OPENMS_DLLAPI PenaltyFactorsIntensity :
00067 public PenaltyFactors
00068 {
00069 PenaltyFactorsIntensity() :
00070 PenaltyFactors(), height(0){}
00071 PenaltyFactorsIntensity(const PenaltyFactorsIntensity & p) :
00072 PenaltyFactors(p), height(p.height) {}
00073 inline PenaltyFactorsIntensity & operator=(const PenaltyFactorsIntensity & p)
00074 {
00075 height = p.height;
00076 pos = p.pos;
00077 lWidth = p.lWidth;
00078 rWidth = p.rWidth;
00079
00080 return *this;
00081 }
00082
00083 ~PenaltyFactorsIntensity(){}
00084
00085 DoubleReal height;
00086
00087
00088 };
00089
00090
00091
00092 }
00093
00105 class OPENMS_DLLAPI OptimizePeakDeconvolution :
00106 public DefaultParamHandler
00107 {
00108 public:
00112 typedef std::vector<Peak1D> RawDataVector;
00113 typedef RawDataVector::iterator PeakIterator;
00115
00119 struct Data
00120 {
00121 std::vector<PeakShape> peaks;
00122 std::vector<DoubleReal> positions;
00123 std::vector<DoubleReal> signal;
00124 OptimizationFunctions::PenaltyFactorsIntensity penalties;
00125 Int charge;
00126 };
00127
00128
00129
00133
00134 OptimizePeakDeconvolution();
00135
00137 OptimizePeakDeconvolution(const OptimizePeakDeconvolution & opt) :
00138 DefaultParamHandler(opt),
00139 penalties_(opt.penalties_),
00140 charge_(opt.charge_){}
00141
00143 virtual ~OptimizePeakDeconvolution(){}
00145
00149 inline OptimizePeakDeconvolution & operator=(const OptimizePeakDeconvolution & opt)
00150 {
00151 DefaultParamHandler::operator=(opt);
00152 penalties_ = opt.penalties_;
00153 charge_ = opt.charge_;
00154
00155 return *this;
00156 }
00157
00159
00160
00164
00165 inline const OptimizationFunctions::PenaltyFactorsIntensity & getPenalties() const { return penalties_; }
00167 inline void setPenalties(const OptimizationFunctions::PenaltyFactorsIntensity & penalties)
00168 {
00169 penalties_ = penalties;
00170 param_.setValue("penalties:left_width", penalties_.lWidth);
00171 param_.setValue("penalties:right_width", penalties_.rWidth);
00172 param_.setValue("penalties:height", penalties_.height);
00173 param_.setValue("penalties:position", penalties_.pos);
00174 }
00175
00177 inline Int getCharge() const { return charge_; }
00179 inline void setCharge(const Int charge) { charge_ = charge; }
00181
00182
00184 bool optimize(std::vector<PeakShape> & peaks, Data & data);
00185
00186 protected:
00187
00188 OptimizationFunctions::PenaltyFactorsIntensity penalties_;
00189
00191 Int charge_;
00192
00194 static const DoubleReal dist_;
00195
00197 Size getNumberOfPeaks_(Int charge, std::vector<PeakShape> & temp_shapes, Data & data);
00198
00199
00200 bool checkFWHM_(std::vector<PeakShape> & peaks, gsl_multifit_fdfsolver * & fit);
00201
00202 void updateMembers_();
00203 };
00204
00205 }
00206
00207
00208 #endif