Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #include <CalibCalorimetry/EcalLaserAnalyzer/interface/TMom.h>
00009 #include <CalibCalorimetry/EcalLaserAnalyzer/interface/TMarkov.h>
00010 #include <TMath.h>
00011
00012 #include <cassert>
00013
00014 using namespace std;
00015
00016
00017
00018
00019
00020 TMom::TMom()
00021 {
00022 init(0.0,10.0e9);
00023 }
00024
00025
00026 TMom::TMom(double cutlow, double cuthigh)
00027 {
00028 init(cutlow,cuthigh);
00029 }
00030 TMom::TMom(const std::vector<double>& cutlow, const std::vector<double>& cuthigh)
00031 {
00032 init(cutlow,cuthigh);
00033 }
00034
00035
00036 TMom::~TMom()
00037 {
00038 }
00039
00040 void TMom::init(double cutlow, double cuthigh)
00041 {
00042
00043 nevt=0;
00044 mean=0;
00045 mean2=0;
00046 mean3=0;
00047 sum=0;
00048 sum2=0;
00049 sum3=0;
00050 rms=0;
00051 M3=0;
00052 peak=0;
00053 min=10.0e9;
00054 max=0.;
00055 _cutLow.clear();
00056 _cutHigh.clear();
00057 _dimCut=1;
00058 _cutLow.push_back(cutlow);
00059 _cutHigh.push_back(cuthigh);
00060 for(int i=0;i<101;i++){
00061 bing[i]=0;
00062 }
00063
00064 }
00065 void TMom::init(const std::vector<double>& cutlow, const std::vector<double>& cuthigh)
00066 {
00067
00068 nevt=0;
00069 mean=0;
00070 mean2=0;
00071 mean3=0;
00072 sum=0;
00073 sum2=0;
00074 sum3=0;
00075 rms=0;
00076 M3=0;
00077 peak=0;
00078 min=10.0e9;
00079 max=0.;
00080 assert(cutlow.size()==cuthigh.size());
00081 _cutLow.clear();
00082 _cutHigh.clear();
00083 _dimCut=cutlow.size();
00084 _cutLow=cutlow;
00085 _cutHigh=cuthigh;
00086 for(int i=0;i<101;i++){
00087 bing[i]=0;
00088 }
00089
00090 }
00091 void TMom::setCut(double cutlow, double cuthigh){
00092
00093 _cutLow.clear();
00094 _cutHigh.clear();
00095 _dimCut=1;
00096 _cutLow.push_back(cutlow);
00097 _cutHigh.push_back(cuthigh);
00098
00099 }
00100 void TMom::setCut(const std::vector<double>& cutlow ,const std::vector<double>& cuthigh){
00101
00102 assert(cutlow.size( )== cuthigh.size());
00103 _cutLow.clear();
00104 _cutHigh.clear();
00105 _dimCut=cutlow.size();
00106 _cutLow=cutlow;
00107 _cutHigh=cuthigh;
00108
00109 }
00110
00111 void TMom::addEntry(double val)
00112 {
00113 std::vector<double> dumb;
00114 dumb.push_back(val);
00115 addEntry(val,dumb);
00116 }
00117
00118 void TMom::addEntry(double val, const std::vector<double>& valcut)
00119 {
00120
00121 int passingAllCuts=1;
00122
00123 for (int iCut=0;iCut<_dimCut;iCut++){
00124 int passing;
00125 if( valcut.at(iCut)>_cutLow.at(iCut) && valcut.at(iCut) <=_cutHigh.at(iCut) ){
00126 passing=1;
00127 }else passing=0;
00128 passingAllCuts*=passing;
00129 }
00130
00131 if( passingAllCuts == 1 ){
00132
00133 nevt+=1;
00134 sum+=val;
00135 sum2+=val*val;
00136 sum3+=val*val*val;
00137 if(val>max) max=val;
00138 if(val<min) min=val;
00139
00140
00141 _ampl.push_back(val);
00142 }
00143
00144 }
00145
00146
00147
00148 double TMom::getMean(){
00149 if(nevt!=0) mean=sum/nevt;
00150 else mean=0.0;
00151 return mean;
00152 }
00153
00154 double TMom::getMean2(){
00155 if(nevt!=0) mean2=sum2/nevt;
00156 else mean2=0.0;
00157 return mean2;
00158 }
00159 double TMom::getMean3(){
00160 if(nevt!=0) mean3=sum3/nevt;
00161 else mean3=0.0;
00162 return mean3;
00163 }
00164
00165 int TMom::getNevt(){ return nevt;}
00166
00167 double TMom::getRMS(){
00168 double m=getMean();
00169 double m2=getMean2();
00170 if(nevt!=0) rms=TMath::Sqrt( m2 - m*m );
00171 else rms=0.0;
00172 return rms;
00173 }
00174
00175 double TMom::getM3(){
00176
00177 double m=getMean();
00178 double m2=getMean2();
00179 double m3=getMean3();
00180 double sig = getRMS();
00181
00182 if(nevt!=0 && sig!=0) M3=( m3 - 3.0*m*(m2-m*m) - m*m*m )/(sig*sig*sig);
00183 else M3=0.0;
00184 return M3;
00185 }
00186
00187 double TMom::getMin(){return min;}
00188 double TMom::getMax(){return max;}
00189
00190 std::vector<double> TMom::getPeak(){
00191
00192 std::vector<double> p;
00193 double wbin=(max-min)/100.;
00194 int bung;
00195
00196 for(unsigned int i=0;i<_ampl.size();i++){
00197 if(wbin <= 0.0)
00198 bung=1;
00199 else
00200 bung= (int) ((_ampl.at(i)-min)/wbin)+1;
00201 if(1 <= bung && bung <= 100)
00202 bing[bung]++;
00203 }
00204
00205 TMarkov *peakM = new TMarkov();
00206
00207 int popmax=0;
00208
00209 for(int k=1;k<101;k++) {
00210 if(bing[k] > popmax) {
00211 popmax=bing[k];
00212 }
00213 }
00214
00215 peakM -> peakFinder(&bing[0]);
00216 p.push_back(peakM -> getPeakValue(0));
00217 p.push_back(peakM -> getPeakValue(1));
00218
00219 return p;
00220 }
00221