BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
DedxCalibDocaEAng.cxx
Go to the documentation of this file.
1#include "GaudiKernel/MsgStream.h"
2
3#include "TCanvas.h"
4#include "TF1.h"
5#include "TFile.h"
6#include "TH1F.h"
7#include "TH2F.h"
8#include "TStyle.h"
9#include "TTree.h"
10#include <sstream>
11#include <string>
12
15
16using namespace std;
17const double StepDoca = ( DocaMax - DocaMin ) / NumSlicesDoca;
18
19DedxCalibDocaEAng::DedxCalibDocaEAng( const std::string& name, ISvcLocator* pSvcLocator )
20 : DedxCalib( name, pSvcLocator ) {
21 declareProperty( "Debug", m_debug = false );
22 declareProperty( "Idoca", m_idoca_test = 1 );
23 declareProperty( "Ieang", m_ieang_test = 1 );
24 declareProperty( "PMin", pMin = 0.2 );
25 declareProperty( "PMax", pMax = 2.3 );
26 declareProperty( "Truncate", m_truncate = 0.7 );
27}
28
30 MsgStream log( msgSvc(), name() );
31 log << MSG::INFO << "DedxCalibDocaEAng::BookHists()" << endmsg;
32
34
35 m_docaeangle = new TH1F**[NumSlicesDoca];
36 stringstream hlabel;
37 for ( int i = 0; i < NumSlicesDoca; i++ )
38 {
39 m_docaeangle[i] = new TH1F*[NumSlicesEAng];
40 for ( int j = 0; j < NumSlicesEAng; j++ )
41 {
42 hlabel.str( "" );
43 hlabel << "dEdx_doca" << i << "_eang" << j;
44 m_docaeangle[i][j] = new TH1F( hlabel.str().c_str(), hlabel.str().c_str(), NumHistBins,
46 }
47 }
48 hlabel.str( "" );
49 hlabel << "dEdxVsDocaEAng";
50 m_DocaEAngAverdE = new TH2F( hlabel.str().c_str(), "dEdx vs Doca & EAng", NumSlicesDoca,
52}
53
55 MsgStream log( msgSvc(), name() );
56 log << MSG::INFO << "DedxCalibDocaEAng::FillHists()" << endmsg;
57
58 TFile *f, *f_test( 0 );
59 TTree *n103, *t_test( 0 );
60 string runlist;
61
62 double doca_test( 0 ), eang_test( 0 );
63 int ndedxhit = 0;
64 double dEdx[100] = { 0 }, pathlength[100] = { 0 }, wid[100] = { 0 }, layid[100] = { 0 },
65 dd_in[100] = { 0 }, eangle[100] = { 0 }, zhit[100] = { 0 };
66 float runNO = 0, evtNO = 0, runFlag = 0, costheta = 0, tes = 0, charge = 0, recalg = 0,
67 ptrk = 0, chidedx = 0;
68 cout << "m_recFileVector.size()= " << m_recFileVector.size() << endl;
69 if ( m_debug )
70 {
71 f_test = new TFile( "doca_eangle_test.root", "recreate" );
72 t_test = new TTree( "inftest", "information for test doca eangle calibration" );
73 t_test->Branch( "idoca", &m_idoca_test, "idoca/I" );
74 t_test->Branch( "ieang", &m_ieang_test, "ieang/I" );
75 t_test->Branch( "doca", &doca_test, "doca/D" );
76 t_test->Branch( "eang", &eang_test, "eang/D" );
77 }
78
79 for ( unsigned int i = 0; i < m_recFileVector.size(); i++ )
80 {
81 runlist = m_recFileVector[i];
82 cout << "runlist: " << runlist.c_str() << endl;
83 f = new TFile( runlist.c_str() );
84 n103 = (TTree*)f->Get( "n103" );
85 if ( f == 0 )
86 {
87 cout << "the file is empty" << endl;
88 continue;
89 }
90 if ( n103 == 0 )
91 {
92 cout << "the tree is empty" << endl;
93 continue;
94 }
95 n103->SetBranchAddress( "ndedxhit", &ndedxhit );
96 n103->SetBranchAddress( "dEdx_hit", dEdx );
97 n103->SetBranchAddress( "pathlength_hit", pathlength );
98 n103->SetBranchAddress( "wid_hit", wid );
99 n103->SetBranchAddress( "layid_hit", layid );
100 n103->SetBranchAddress( "dd_in_hit", dd_in );
101 n103->SetBranchAddress( "eangle_hit", eangle );
102 n103->SetBranchAddress( "zhit_hit", zhit );
103 n103->SetBranchAddress( "runNO", &runNO );
104 n103->SetBranchAddress( "evtNO", &evtNO );
105 n103->SetBranchAddress( "runFlag", &runFlag );
106 n103->SetBranchAddress( "costheta", &costheta );
107 n103->SetBranchAddress( "t0", &tes );
108 n103->SetBranchAddress( "charge", &charge );
109 n103->SetBranchAddress( "recalg", &recalg );
110 n103->SetBranchAddress( "ptrk", &ptrk );
111 n103->SetBranchAddress( "chidedx_e", &chidedx );
112
113 vector<double> m_phlist_test( 0 );
114 for ( int j = 0; j < n103->GetEntries(); j++ )
115 {
116 n103->GetEntry( j );
117 if ( ptrk > pMax || ptrk < pMin ) continue;
118 if ( tes > 1400 ) continue;
119 // begin of save truncated hits information for EACH track
120 // m_phlist_test.clear();
121 // for(int ktest=0; ktest<ndedxhit; ktest++){
122 // if(layid[ktest]<4) continue;
123 // m_phlist_test.push_back(dEdx[ktest]);
124 // }
125 // sort(m_phlist_test.begin(), m_phlist_test.end());
126 // if(m_debug){
127 // for(unsigned int i=0; i<m_phlist_test.size(); i++)
128 // cout << "i " << i << " " << m_phlist_test[i] << endl;
129 // }
130 // unsigned int nsample = (unsigned int)(m_phlist_test.size()*m_truncate);
131 // double m_trunc_value = m_phlist_test[nsample];
132 // if(m_debug) cout << "trunctate value " << m_trunc_value << endl;
133 for ( int k = 0; k < ndedxhit; k++ )
134 {
135 // if(dEdx[k]>m_trunc_value) continue;
136 dd_in[k] = dd_in[k] / doca_norm[int( layid[k] )];
137 if ( eangle[k] > 0.25 ) eangle[k] = eangle[k] - 0.5;
138 else if ( eangle[k] < -0.25 ) eangle[k] = eangle[k] + 0.5;
139 if ( eangle[k] > PhiMin && eangle[k] < PhiMax && dd_in[k] > DocaMin &&
140 dd_in[k] < DocaMax )
141 {
142 if ( layid[k] < 4 ) continue;
143 // else if(layid[k] <8)
144 // {if(dEdx[k]<MinADCValuecut || dEdx[k]>MaxADCValuecut ||
145 //pathlength[k]>RPhi_PathMaxCut || pathlength[k]<Iner_RPhi_PathMinCut ||
146 //driftdist[k]>Iner_DriftDistCut) continue;} else {if(dEdx[k]<MinADCValuecut ||
147 //dEdx[k]>MaxADCValuecut || pathlength[k]>RPhi_PathMaxCut ||
148 //pathlength[k]<Out_RPhi_PathMinCut || driftdist[k]>Out_DriftDistCut) continue;}
149 int iDoca = (Int_t)floor( ( dd_in[k] - DocaMin ) / StepDoca );
150 int iEAng = 0;
151 for ( int i = 0; i < 14; i++ )
152 {
153 if ( eangle[k] < Eangle_value_cut[i] || eangle[k] >= Eangle_value_cut[i + 1] )
154 continue;
155 else if ( eangle[k] >= Eangle_value_cut[i] && eangle[k] < Eangle_value_cut[i + 1] )
156 {
157 for ( int m = 0; m < i; m++ ) { iEAng += Eangle_cut_bin[m]; }
158 double eangle_bin_cut_step =
159 ( Eangle_value_cut[i + 1] - Eangle_value_cut[i] ) / Eangle_cut_bin[i];
160 int temp_bin = int( ( eangle[k] - Eangle_value_cut[i] ) / eangle_bin_cut_step );
161 iEAng += temp_bin;
162 }
163 }
164 if ( m_debug && ( iDoca == m_idoca_test ) && ( iEAng == m_ieang_test ) )
165 {
166 doca_test = dd_in[k];
167 eang_test = eangle[k];
168 t_test->Fill();
169 cout << "dedx before cor: " << dEdx[k] * 1.5 / pathlength[k] << endl;
170 }
171 dEdx[k] = exsvc->StandardHitCorrec(
172 0, runFlag, 2, runNO, evtNO, pathlength[k], wid[k], layid[k], dEdx[k],
173 ( dd_in[k] ) * ( doca_norm[int( layid[k] )] ), eangle[k], costheta );
174 dEdx[k] = exsvc->StandardTrackCorrec( 0, runFlag, 2, runNO, evtNO, dEdx[k], costheta,
175 tes );
176 m_docaeangle[iDoca][iEAng]->Fill( dEdx[k] );
177 if ( m_debug && ( iDoca == m_idoca_test ) && ( iEAng == m_ieang_test ) )
178 { cout << "dedx after cor: " << dEdx[k] << endl << endl; }
179 } // end of if(eangle, doca) are normal
180 } // end of loop in k, hit list
181 } // end of loop in j, entry list
182 f->Close();
183 f = 0;
184 n103 = 0;
185 } // end of loop in i, filelist
186 if ( m_debug )
187 {
188 f_test->cd();
189 t_test->Write();
190 f_test->Close();
191 }
192} // end of FillHists()
193
195 MsgStream log( msgSvc(), name() );
196 log << MSG::INFO << "DedxCalibDocaEAng::AnalyseHists()" << endmsg;
197
198 TF1* func;
199 Double_t entry = 0, mean = 0, rms = 0;
200 Double_t binmax = 0;
201 Double_t lp[3] = { 0 };
202 gStyle->SetOptFit( 1111 );
203 for ( Int_t id = 0; id < NumSlicesDoca; id++ )
204 {
205 for ( Int_t ip = 0; ip < NumSlicesEAng; ip++ )
206 {
207 entry = m_docaeangle[id][ip]->GetEntries();
208 if ( entry < 10 ) continue;
209 mean = m_docaeangle[id][ip]->GetMean();
210 rms = m_docaeangle[id][ip]->GetRMS();
211 binmax = m_docaeangle[id][ip]->GetMaximumBin();
212 lp[1] = m_docaeangle[id][ip]->GetBinCenter( binmax );
213 lp[2] = 200;
214 lp[0] = ( m_docaeangle[id][ip]->GetBinContent( binmax ) +
215 m_docaeangle[id][ip]->GetBinContent( binmax - 1 ) +
216 m_docaeangle[id][ip]->GetBinContent( binmax + 1 ) ) /
217 3;
218
219 if ( m_phShapeFlag == 0 )
220 {
221 func = new TF1( "mylan", mylan, 10, 3000, 4 );
222 func->SetParameters( entry, mean, rms, -0.8 );
223 func->SetParLimits( 0, 0, entry );
224 func->SetParLimits( 1, 0, mean );
225 func->SetParLimits( 2, 10, rms );
226 func->SetParLimits( 3, -1, 0 );
227 func->SetParameters( entry / 36., mean - 200, rms / 2.3, -0.5 );
228 }
229 else if ( m_phShapeFlag == 1 )
230 {
231 func = new TF1( "landaun", landaun, 10, 3000, 3 );
232 func->SetParameters( lp[0], lp[1], lp[2] );
233 }
234 else if ( m_phShapeFlag == 2 )
235 {
236 func = new TF1( "Landau", Landau, 10, 3000, 2 );
237 func->SetParameters( 0.7 * mean, rms );
238 }
239 else if ( m_phShapeFlag == 3 )
240 {
241 func = new TF1( "Vavilov", Vavilov, 10, 3000, 2 );
242 func->SetParameters( 0.05, 0.6 );
243 }
244 else if ( m_phShapeFlag == 4 )
245 {
246 func = new TF1( "AsymGauss", AsymGauss, 10, 3000, 4 );
247 func->SetParameters( entry, mean, rms, 1.0 );
248 }
249 func->SetLineWidth( 2.1 );
250 func->SetLineColor( 2 );
251
252 m_docaeangle[id][ip]->Fit( func, "rq" );
253 }
254 }
255}
256
258 MsgStream log( msgSvc(), name() );
259 log << MSG::INFO << "DedxCalibDocaEAng::WriteHists()" << endmsg;
260
261 const int totalNo = NumSlicesDoca * NumSlicesEAng;
262 double Out_entryNo[totalNo] = { 0 }, Out_mean[totalNo] = { 0 }, Out_sigma[totalNo] = { 0 },
263 Out_fitmean[totalNo] = { 0 }, Out_fitmeanerr[totalNo] = { 0 },
264 Out_fitsigma[totalNo] = { 0 }, Out_gain[totalNo] = { 0 };
265 double Iner_entryNo[totalNo] = { 0 }, Iner_mean[totalNo] = { 0 },
266 Iner_sigma[totalNo] = { 0 }, Iner_fitmean[totalNo] = { 0 },
267 Iner_fitmeanerr[totalNo] = { 0 }, Iner_fitsigma[totalNo] = { 0 },
268 Iner_gain[totalNo] = { 0 };
269 double Id_doca[totalNo] = { 0 }, Ip_eangle[totalNo] = { 0 }, doca[totalNo] = { 0 },
270 eangle[totalNo] = { 0 }, chisq[totalNo] = { 0 };
271
272 double Norm( 0 ), count( 0 );
273 for ( Int_t id = 0; id < NumSlicesDoca; id++ )
274 {
275 for ( Int_t ip = 0; ip < NumSlicesEAng; ip++ )
276 {
277 Id_doca[id * NumSlicesEAng + ip] = id;
278 Ip_eangle[id * NumSlicesEAng + ip] = ip;
279 doca[id * NumSlicesEAng + ip] = ( id + 0.5 ) * StepDoca + DocaMin;
280 int iE = 0, i = 0;
281 for ( ; i < 14; i++ )
282 {
283 if ( ip >= iE && ip < iE + Eangle_cut_bin[i] ) break;
284 iE = iE + Eangle_cut_bin[i];
285 }
286 // cout<<"iE= "<<iE<<" Eangle_cut_bin["<<i<<"]= "<<Eangle_cut_bin[i]<<endl;
287 eangle[id * NumSlicesEAng + ip] =
288 Eangle_value_cut[i] + ( ip - iE + 0.5 ) *
289 ( Eangle_value_cut[i + 1] - Eangle_value_cut[i] ) /
290 Eangle_cut_bin[i];
291 // cout<<"eangle["<<id<<"]["<<ip<<"]= "<<eangle[id*NumSlicesEAng+ip]<<endl;
292
293 Out_entryNo[id * NumSlicesEAng + ip] = m_docaeangle[id][ip]->GetEntries();
294 Out_mean[id * NumSlicesEAng + ip] = m_docaeangle[id][ip]->GetMean();
295 Out_sigma[id * NumSlicesEAng + ip] = m_docaeangle[id][ip]->GetRMS();
296 // cout<<"Out_entryNo["<<id<<"]["<<ip<<"]= "<<Out_entryNo[id*NumSlicesEAng+ip]<<"
297 // "<<Out_mean[id*NumSlicesEAng+ip]<<" "<<Out_sigma[id*NumSlicesEAng+ip]<<endl;
298 if ( Out_entryNo[id * NumSlicesEAng + ip] < 10 ) continue;
299
300 if ( m_phShapeFlag == 0 )
301 {
302 Out_fitmean[id * NumSlicesEAng + ip] =
303 m_docaeangle[id][ip]->GetFunction( "mylan" )->GetParameter( 1 );
304 Out_fitmeanerr[id * NumSlicesEAng + ip] =
305 m_docaeangle[id][ip]->GetFunction( "mylan" )->GetParError( 1 );
306 Out_fitsigma[id * NumSlicesEAng + ip] =
307 m_docaeangle[id][ip]->GetFunction( "mylan" )->GetParameter( 2 );
308 // cout<<Out_fitmean[id*NumSlicesEAng+ip]<<" "<<Out_fitmeanerr[id*NumSlicesEAng+ip]<<"
309 // "<<Out_fitsigma[id*NumSlicesEAng+ip]<<endl;
310 chisq[id * NumSlicesEAng + ip] =
311 ( m_docaeangle[id][ip]->GetFunction( "mylan" )->GetChisquare() ) /
312 ( m_docaeangle[id][ip]->GetFunction( "mylan" )->GetNDF() );
313 }
314 if ( m_phShapeFlag == 1 )
315 {
316 Out_fitmean[id * NumSlicesEAng + ip] =
317 m_docaeangle[id][ip]->GetFunction( "landaun" )->GetParameter( 1 );
318 Out_fitmeanerr[id * NumSlicesEAng + ip] =
319 m_docaeangle[id][ip]->GetFunction( "landaun" )->GetParError( 1 );
320 Out_fitsigma[id * NumSlicesEAng + ip] =
321 m_docaeangle[id][ip]->GetFunction( "landaun" )->GetParameter( 2 );
322 chisq[id * NumSlicesEAng + ip] =
323 ( m_docaeangle[id][ip]->GetFunction( "landaun" )->GetChisquare() ) /
324 ( m_docaeangle[id][ip]->GetFunction( "landaun" )->GetNDF() );
325 }
326 if ( m_phShapeFlag == 2 )
327 {
328 Out_fitmean[id * NumSlicesEAng + ip] =
329 m_docaeangle[id][ip]->GetFunction( "Landau" )->GetParameter( 1 );
330 Out_fitmeanerr[id * NumSlicesEAng + ip] =
331 m_docaeangle[id][ip]->GetFunction( "Landau" )->GetParError( 1 );
332 Out_fitsigma[id * NumSlicesEAng + ip] =
333 m_docaeangle[id][ip]->GetFunction( "Landau" )->GetParameter( 2 );
334 chisq[id * NumSlicesEAng + ip] =
335 ( m_docaeangle[id][ip]->GetFunction( "Landau" )->GetChisquare() ) /
336 ( m_docaeangle[id][ip]->GetFunction( "Landau" )->GetNDF() );
337 }
338 if ( m_phShapeFlag == 3 )
339 {
340 Out_fitmean[id * NumSlicesEAng + ip] =
341 m_docaeangle[id][ip]->GetFunction( "Vavilov" )->GetParameter( 1 );
342 Out_fitmeanerr[id * NumSlicesEAng + ip] =
343 m_docaeangle[id][ip]->GetFunction( "Vavilov" )->GetParError( 1 );
344 Out_fitsigma[id * NumSlicesEAng + ip] =
345 m_docaeangle[id][ip]->GetFunction( "Vavilov" )->GetParameter( 2 );
346 chisq[id * NumSlicesEAng + ip] =
347 ( m_docaeangle[id][ip]->GetFunction( "Vavilov" )->GetChisquare() ) /
348 ( m_docaeangle[id][ip]->GetFunction( "Vavilov" )->GetNDF() );
349 }
350 if ( m_phShapeFlag == 4 )
351 {
352 Out_fitmean[id * NumSlicesEAng + ip] =
353 m_docaeangle[id][ip]->GetFunction( "AsymGauss" )->GetParameter( 1 );
354 Out_fitmeanerr[id * NumSlicesEAng + ip] =
355 m_docaeangle[id][ip]->GetFunction( "AsymGauss" )->GetParError( 1 );
356 Out_fitsigma[id * NumSlicesEAng + ip] =
357 m_docaeangle[id][ip]->GetFunction( "AsymGauss" )->GetParameter( 2 );
358 chisq[id * NumSlicesEAng + ip] =
359 ( m_docaeangle[id][ip]->GetFunction( "AsymGauss" )->GetChisquare() ) /
360 ( m_docaeangle[id][ip]->GetFunction( "AsymGauss" )->GetNDF() );
361 }
362
363 m_DocaEAngAverdE->SetBinContent( id + 1, ip + 1, Out_fitmean[id * NumSlicesEAng + ip] );
364 if ( Out_fitmean[id * NumSlicesEAng + ip] > 0 &&
365 Out_fitmeanerr[id * NumSlicesEAng + ip] > 0 &&
366 Out_fitmeanerr[id * NumSlicesEAng + ip] < 10 &&
367 Out_fitsigma[id * NumSlicesEAng + ip] > 0 &&
368 Out_fitsigma[id * NumSlicesEAng + ip] < 200 )
369 {
370 Norm += ( Out_fitmean[id * NumSlicesEAng + ip] ) *
371 ( Out_entryNo[id * NumSlicesEAng + ip] );
372 count += Out_entryNo[id * NumSlicesEAng + ip];
373 }
374 } // end of loop in ip
375 } // end of loop in id
376 Norm = Norm / count;
377 cout << "count= " << count << " average value of doca eangle bins: " << Norm << endl;
378 for ( Int_t i = 0; i < totalNo; i++ )
379 {
380 if ( Out_entryNo[i] > 10 && Out_fitmean[i] > 0 && Out_fitsigma[i] > 0 )
381 Out_gain[i] = Out_fitmean[i] / Norm;
382 else Out_gain[i] = 0;
383 }
384
385 log << MSG::INFO << "begin generating root file!!! " << endmsg;
386 TFile* f = new TFile( m_rootfile.c_str(), "recreate" );
387 for ( Int_t id = 0; id < NumSlicesDoca; id++ )
388 {
389 for ( Int_t ip = 0; ip < NumSlicesEAng; ip++ ) { m_docaeangle[id][ip]->Write(); }
390 }
391 m_DocaEAngAverdE->Write();
392
393 TTree* ddgcalib = new TTree( "ddgcalib", "ddgcalib" );
394 ddgcalib->Branch( "Out_hits", Out_entryNo, "Out_entryNo[1600]/D" );
395 ddgcalib->Branch( "Out_mean", Out_mean, "Out_mean[1600]/D" );
396 ddgcalib->Branch( "Out_sigma", Out_sigma, "Out_sigma[1600]/D" );
397 ddgcalib->Branch( "Out_fitmean", Out_fitmean, "Out_fitmean[1600]/D" );
398 ddgcalib->Branch( "Out_fitmeanerr", Out_fitmeanerr, "Out_fitmeanerr[1600]/D" );
399 ddgcalib->Branch( "Out_chi", Out_fitsigma, "Out_fitsigma[1600]/D" );
400 ddgcalib->Branch( "Out_gain", Out_gain, "Out_gain[1600]/D" );
401 ddgcalib->Branch( "Iner_hits", Iner_entryNo, "Iner_entryNo[1600]/D" );
402 ddgcalib->Branch( "Iner_mean", Iner_mean, "Iner_mean[1600]/D" );
403 ddgcalib->Branch( "Iner_sigma", Iner_sigma, "Iner_sigma[1600]/D" );
404 ddgcalib->Branch( "Iner_fitmean", Iner_fitmean, "Iner_fitmean[1600]/D" );
405 ddgcalib->Branch( "Iner_fitmeanerr", Iner_fitmeanerr, "Iner_fitmeanerr[1600]/D" );
406 ddgcalib->Branch( "Iner_chi", Iner_fitsigma, "Iner_fitsigma[1600]/D" );
407 ddgcalib->Branch( "Iner_gain", Iner_gain, "Iner_gain[1600]/D" );
408 ddgcalib->Branch( "Id_doca", Id_doca, "Id_doca[1600]/D" );
409 ddgcalib->Branch( "Ip_eangle", Ip_eangle, "Ip_eangle[1600]/D" );
410 ddgcalib->Branch( "chisq", chisq, "chisq[1600]/D" );
411 ddgcalib->Branch( "doca", doca, "doca[1600]/D" );
412 ddgcalib->Branch( "eangle", eangle, "eangle[1600]/D" );
413 ddgcalib->Fill();
414 ddgcalib->Write();
415 f->Close();
416
417 TCanvas c1( "c1", "canvas", 500, 400 );
418 c1.Print( ( m_rootfile + ".ps[" ).c_str() );
419 for ( Int_t id = 0; id < NumSlicesDoca; id++ )
420 {
421 for ( Int_t ip = 0; ip < NumSlicesEAng; ip++ )
422 {
423 m_docaeangle[id][ip]->Draw();
424 c1.Print( ( m_rootfile + ".ps" ).c_str() );
425 }
426 }
427 c1.Print( ( m_rootfile + ".ps]" ).c_str() );
428
429 for ( Int_t id = 0; id < NumSlicesDoca; id++ )
430 {
431 for ( Int_t ip = 0; ip < NumSlicesEAng; ip++ ) { delete m_docaeangle[id][ip]; }
432 }
433 delete m_DocaEAngAverdE;
434}
DECLARE_COMPONENT(BesBdkRc)
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
const double StepDoca
double Landau(double *x, double *par)
double Vavilov(double *x, double *par)
#define DocaMin
#define DocaMax
double landaun(double *x, double *par)
double AsymGauss(double *x, double *par)
#define PhiMax
#define PhiMin
double mylan(double *x, double *par)
DOUBLE_PRECISION count[3]
IMessageSvc * msgSvc()
DedxCalibDocaEAng(const std::string &name, ISvcLocator *pSvcLocator)
DedxCalib(const std::string &name, ISvcLocator *pSvcLocator)
Definition DedxCalib.cxx:12
void ReadRecFileList()
Definition DedxCalib.cxx:84
int m_phShapeFlag
Definition DedxCalib.h:54
std::string m_rootfile
Definition DedxCalib.h:57
IDedxCorrecSvc * exsvc
Definition DedxCalib.h:29
vector< string > m_recFileVector
Definition DedxCalib.h:50