1#include "GaudiKernel/MsgStream.h"
21 declareProperty(
"Debug", m_debug=
false);
22 declareProperty(
"DebugMin", m_debug_min=2);
23 declareProperty(
"DebugMax", m_debug_max=2);
28 MsgStream log(
msgSvc(), name());
29 log<<MSG::INFO<<
"DedxCalibCostheta::BookHists()"<<endreq;
43 hlabel<<
"dEdx_costheta"<<i;
46 hlabel<<
"pos_dEdx_costheta"<<i;
49 hlabel<<
"neg_dEdx_costheta"<<i;
52 hlabel<<
"chi_costheta"<<i;
55 hlabel<<
"pos_chi_costheta"<<i;
58 hlabel<<
"neg_chi_costheta"<<i;
62 hlabel<<
"dEdxVsCostheta";
64 m_dEdxVsCostheta->GetXaxis()->SetTitle(
"cos#theta");
65 m_dEdxVsCostheta->GetYaxis()->SetTitle(
"dE/dx");
67 hlabel<<
"pos_dEdxVsCostheta";
69 m_pos_dEdxVsCostheta->GetXaxis()->SetTitle(
"cos#theta");
70 m_pos_dEdxVsCostheta->GetYaxis()->SetTitle(
"dE/dx");
72 hlabel<<
"neg_dEdxVsCostheta";
74 m_neg_dEdxVsCostheta->GetXaxis()->SetTitle(
"cos#theta");
75 m_neg_dEdxVsCostheta->GetYaxis()->SetTitle(
"dE/dx");
83 MsgStream log(
msgSvc(), name());
84 log<<MSG::INFO<<
"DedxCalibCostheta::FillHists()"<<endreq;
91 double dEdx[100]={0},pathlength[100]={0},wid[100]={0},layid[100]={0},dd_in[100]={0},eangle[100]={0},zhit[100]={0};
93 float runNO=0,runFlag=0,costheta=0,tes=0,charge=0,recalg=0,ptrk=0,chidedx=0;
95 vector<double> phlist;
100 f =
new TFile(runlist.c_str());
101 n103 = (TTree*)f->Get(
"n103");
119 for(
int j=0;j<n103->GetEntries();j++)
124 if(tes>1400)
continue;
125 for(
int k=0;k<ndedxhit;k++)
127 dEdx[k] =
exsvc->
StandardHitCorrec(0,runFlag,2,runNO,pathlength[k],wid[k],layid[k],dEdx[k],dd_in[k],eangle[k],costheta);
128 phlist.push_back(dEdx[k]);
132 double pre_dedx = dedx;
133 if(m_debug && iCos>=m_debug_min && iCos<=m_debug_max)
134 cout <<
"before cor, dedx " << pre_dedx <<
" with cos(theta) " << costheta << endl;
136 if(m_debug && iCos>=m_debug_min && iCos<=m_debug_max)
137 cout <<
"after cor, dedx " << dedx <<
" with gain " << pre_dedx/dedx << endl;
138 m_costheta[iCos]->Fill(dedx);
139 if(charge>0) m_pos_costheta[iCos]->Fill(dedx);
140 if(charge<0) m_neg_costheta[iCos]->Fill(dedx);
143 set_dEdx(1,dedx,recalg,runFlag,usedhit,ptrk,acos(costheta),1.5,
vFlag,tes);
146 m_chi[iCos]->Fill(chi);
147 if(charge>0) m_pos_chi[iCos]->Fill(chi);
148 if(charge<0) m_neg_chi[iCos]->Fill(chi);
150 Vec_dedx.push_back(dedx);
151 Vec_costheta.push_back(costheta);
158 MsgStream log(
msgSvc(), name());
159 log<<MSG::INFO<<
"DedxCalibCostheta::AnalyseHists()"<<endreq;
161 gStyle->SetOptFit(1111);
164 if(m_debug) cout <<
"num of bin " << i << endl;
165 if(m_costheta[i]->GetEntries()>100) m_costheta[i]->Fit(
"gaus",
"Q" );
166 if(m_pos_costheta[i]->GetEntries()>100) m_pos_costheta[i]->Fit(
"gaus",
"Q" );
167 if(m_neg_costheta[i]->GetEntries()>100) m_neg_costheta[i]->Fit(
"gaus",
"Q" );
168 if(m_chi[i]->GetEntries()>100) m_chi[i]->Fit(
"gaus",
"Q" );
169 if(m_pos_chi[i]->GetEntries()>100) m_pos_chi[i]->Fit(
"gaus",
"Q" );
170 if(m_neg_chi[i]->GetEntries()>100) m_neg_chi[i]->Fit(
"gaus",
"Q" );
176 MsgStream log(
msgSvc(), name());
177 log<<MSG::INFO<<
"DedxCalibCostheta::WriteHists()"<<endreq;
191 chientryNo[i] = m_chi[i]->GetEntries();
192 if(m_debug) cout <<
"get results at " << i <<
" bin with chi entries " << chientryNo[i] << endl;
193 if(m_chi[i]->GetFunction(
"gaus"))
195 chimean[i] = m_chi[i]->GetFunction(
"gaus")->GetParameter(1);
196 chimeanerr[i] = m_chi[i]->GetFunction(
"gaus")->GetParError(1);
197 chisigma[i] = m_chi[i]->GetFunction(
"gaus")->GetParameter(2);
198 chisq[i] = (m_chi[i]->GetFunction(
"gaus")->GetChisquare())/(m_chi[i]->GetFunction(
"gaus")->GetNDF());
200 pos_chientryNo[i] = m_pos_chi[i]->GetEntries();
201 if(m_debug) cout <<
"get results at " << i <<
" bin with pos_chi entries " << pos_chientryNo[i] << endl;
202 if(m_pos_chi[i]->GetFunction(
"gaus"))
204 pos_chimean[i] = m_pos_chi[i]->GetFunction(
"gaus")->GetParameter(1);
205 pos_chimeanerr[i] = m_pos_chi[i]->GetFunction(
"gaus")->GetParError(1);
206 pos_chisigma[i] = m_pos_chi[i]->GetFunction(
"gaus")->GetParameter(2);
207 pos_chisq[i] = (m_pos_chi[i]->GetFunction(
"gaus")->GetChisquare())/(m_pos_chi[i]->GetFunction(
"gaus")->GetNDF());
209 neg_chientryNo[i] = m_neg_chi[i]->GetEntries();
210 if(m_debug) cout <<
"get results at " << i <<
" bin with neg_chi entries " << neg_chientryNo[i] << endl;
211 if(m_neg_chi[i]->GetFunction(
"gaus"))
213 neg_chimean[i] = m_neg_chi[i]->GetFunction(
"gaus")->GetParameter(1);
214 neg_chimeanerr[i] = m_neg_chi[i]->GetFunction(
"gaus")->GetParError(1);
215 neg_chisigma[i] = m_neg_chi[i]->GetFunction(
"gaus")->GetParameter(2);
216 neg_chisq[i] = (m_neg_chi[i]->GetFunction(
"gaus")->GetChisquare())/(m_neg_chi[i]->GetFunction(
"gaus")->GetNDF());
219 fitentryNo[i] = m_costheta[i]->GetEntries();
220 if(m_debug) cout <<
"get results at " << i <<
" bin with fit entries " << fitentryNo[i] << endl;
221 if(m_costheta[i]->GetFunction(
"gaus"))
223 fitmean[i] = m_costheta[i]->GetFunction(
"gaus")->GetParameter(1);
224 fitmeanerr[i] = m_costheta[i]->GetFunction(
"gaus")->GetParError(1);
225 fitsigma[i] = m_costheta[i]->GetFunction(
"gaus")->GetParameter(2);
227 fitchisq[i] = (m_costheta[i]->GetFunction(
"gaus")->GetChisquare())/(m_costheta[i]->GetFunction(
"gaus")->GetNDF());
229 pos_fitentryNo[i] = m_pos_costheta[i]->GetEntries();
230 if(m_debug) cout <<
"get results at " << i <<
" bin with pos_fit entries " << pos_fitentryNo[i] << endl;
231 if(m_pos_costheta[i]->GetFunction(
"gaus"))
233 pos_fitmean[i] = m_pos_costheta[i]->GetFunction(
"gaus")->GetParameter(1);
234 pos_fitmeanerr[i] = m_pos_costheta[i]->GetFunction(
"gaus")->GetParError(1);
235 pos_fitsigma[i] = m_pos_costheta[i]->GetFunction(
"gaus")->GetParameter(2);
237 pos_fitchisq[i] = (m_pos_costheta[i]->GetFunction(
"gaus")->GetChisquare())/(m_pos_costheta[i]->GetFunction(
"gaus")->GetNDF());
239 neg_fitentryNo[i] = m_neg_costheta[i]->GetEntries();
240 if(m_debug) cout <<
"get results at " << i <<
" bin with neg_fit entries " << neg_fitentryNo[i] << endl;
241 if(m_neg_costheta[i]->GetFunction(
"gaus"))
243 neg_fitmean[i] = m_neg_costheta[i]->GetFunction(
"gaus")->GetParameter(1);
244 neg_fitmeanerr[i] = m_neg_costheta[i]->GetFunction(
"gaus")->GetParError(1);
245 neg_fitsigma[i] = m_neg_costheta[i]->GetFunction(
"gaus")->GetParameter(2);
247 neg_fitchisq[i] = (m_neg_costheta[i]->GetFunction(
"gaus")->GetChisquare())/(m_neg_costheta[i]->GetFunction(
"gaus")->GetNDF());
250 if(fitentryNo[i]>100) m_dEdxVsCostheta -> SetBinContent(i+1,fitmean[i]);
251 if(pos_fitentryNo[i]>100) m_pos_dEdxVsCostheta -> SetBinContent(i+1,pos_fitmean[i]);
252 if(neg_fitentryNo[i]>100) m_neg_dEdxVsCostheta -> SetBinContent(i+1,neg_fitmean[i]);
255 double dedx1[
Size] = {0};
256 double costheta1[
Size] = {0};
257 cout <<
"Vec_dedx.size() = " << Vec_dedx.size() << endl;
258 for(
unsigned int i=0;i<
Size && i< Vec_dedx.size();i++)
260 dedx1[i] = Vec_dedx[i];
261 costheta1[i] = Vec_costheta[i];
265 log<<MSG::INFO<<
"begin generating root file!!! "<<endreq;
266 TFile* f =
new TFile(
m_rootfile.c_str(),
"RECREATE");
270 m_pos_chi[i]->Write();
271 m_neg_chi[i]->Write();
272 m_costheta[i]->Write();
273 m_pos_costheta[i]->Write();
274 m_neg_costheta[i]->Write();
276 m_dEdxVsCostheta->Write();
277 m_pos_dEdxVsCostheta->Write();
278 m_neg_dEdxVsCostheta->Write();
280 TTree *costhetacalib =
new TTree(
"costhetacalib",
"costhetacalib");
281 costhetacalib -> Branch(
"chientryNo",chientryNo,
"chientryNo[80]/D");
282 costhetacalib -> Branch(
"chimean",chimean,
"chimean[80]/D");
283 costhetacalib -> Branch(
"chimeanerr",chimeanerr,
"chimeanerr[80]/D");
284 costhetacalib -> Branch(
"chisigma",chisigma,
"chisigma[80]/D");
285 costhetacalib -> Branch(
"chisq",chisq,
"chisq[80]/D");
286 costhetacalib -> Branch(
"pos_chientryNo",pos_chientryNo,
"pos_chientryNo[80]/D");
287 costhetacalib -> Branch(
"pos_chimean",pos_chimean,
"pos_chimean[80]/D");
288 costhetacalib -> Branch(
"pos_chimeanerr",pos_chimeanerr,
"pos_chimeanerr[80]/D");
289 costhetacalib -> Branch(
"pos_chisigma",pos_chisigma,
"pos_chisigma[80]/D");
290 costhetacalib -> Branch(
"pos_chisq",pos_chisq,
"pos_chisq[80]/D");
291 costhetacalib -> Branch(
"neg_chientryNo",neg_chientryNo,
"neg_chientryNo[80]/D");
292 costhetacalib -> Branch(
"neg_chimean",neg_chimean,
"neg_chimean[80]/D");
293 costhetacalib -> Branch(
"neg_chimeanerr",neg_chimeanerr,
"neg_chimeanerr[80]/D");
294 costhetacalib -> Branch(
"neg_chisigma",neg_chisigma,
"neg_chisigma[80]/D");
295 costhetacalib -> Branch(
"neg_chisq",neg_chisq,
"neg_chisq[80]/D");
296 costhetacalib -> Branch(
"fitentryNo", fitentryNo,
"fitentryNo[80]/D");
297 costhetacalib -> Branch(
"fitmean", fitmean,
"fitmean[80]/D");
298 costhetacalib -> Branch(
"fitmeanerr", fitmeanerr,
"fitmeanerr[80]/D");
299 costhetacalib -> Branch(
"fitsigma", fitsigma,
"fitsigma[80]/D");
300 costhetacalib -> Branch(
"costheta", gain,
"gain[80]/D");
301 costhetacalib -> Branch(
"fitchisq", fitchisq,
"fitchisq[80]/D");
302 costhetacalib -> Branch(
"pos_fitentryNo", pos_fitentryNo,
"pos_fitentryNo[80]/D");
303 costhetacalib -> Branch(
"pos_fitmean", pos_fitmean,
"pos_fitmean[80]/D");
304 costhetacalib -> Branch(
"pos_fitmeanerr", pos_fitmeanerr,
"pos_fitmeanerr[80]/D");
305 costhetacalib -> Branch(
"pos_fitsigma", pos_fitsigma,
"pos_fitsigma[80]/D");
306 costhetacalib -> Branch(
"pos_gain", pos_gain,
"pos_gain[80]/D");
307 costhetacalib -> Branch(
"pos_fitchisq", pos_fitchisq,
"pos_fitchisq[80]/D");
308 costhetacalib -> Branch(
"neg_fitentryNo", neg_fitentryNo,
"neg_fitentryNo[80]/D");
309 costhetacalib -> Branch(
"neg_fitmean", neg_fitmean,
"neg_fitmean[80]/D");
310 costhetacalib -> Branch(
"neg_fitmeanerr", neg_fitmeanerr,
"neg_fitmeanerr[80]/D");
311 costhetacalib -> Branch(
"neg_fitsigma", neg_fitsigma,
"neg_fitsigma[80]/D");
312 costhetacalib -> Branch(
"neg_gain", neg_gain,
"neg_gain[80]/D");
313 costhetacalib -> Branch(
"neg_fitchisq", neg_fitchisq,
"neg_fitchisq[80]/D");
314 costhetacalib -> Branch(
"cosBin", cosBin,
"cosBin[80]/D");
315 costhetacalib -> Branch(
"costheta1",costheta1,
"costheta1[700000]/D");
316 costhetacalib -> Branch(
"dedx1",dedx1,
"dedx1[700000]/D");
317 costhetacalib -> Fill();
318 costhetacalib -> Write();
320 TCanvas
c1(
"c1",
"canvas", 500, 400);
322 costhetacalib ->
Draw(
"dedx1:costheta1",
"dedx1>200 && dedx1<1000");
324 m_dEdxVsCostheta->Draw();
326 m_pos_dEdxVsCostheta->Draw();
328 m_neg_dEdxVsCostheta->Draw();
337 m_pos_chi[i]->Draw();
342 m_neg_chi[i]->Draw();
347 m_costheta[i]->Draw();
352 m_pos_costheta[i]->Draw();
357 m_neg_costheta[i]->Draw();
368 delete m_costheta[i];
369 delete m_pos_costheta[i];
370 delete m_neg_costheta[i];
372 delete m_dEdxVsCostheta;
373 delete m_pos_dEdxVsCostheta;
374 delete m_neg_dEdxVsCostheta;
data SetBranchAddress("time",&time)
const double StepCostheta
DedxCalibCostheta(const std::string &name, ISvcLocator *pSvcLocator)
void set_dEdx(int landau, float dEdx, int trkalg, int runflag, int dedxhit_use, float ptrk, float theta, float pl_rp, int vflag[3], double t0)
double cal_dedx_bitrunc(float truncate, std::vector< double > phlist)
vector< string > m_recFileVector
virtual double StandardHitCorrec(int calib_rec_Flag, int runFlag, int ntpFlag, int runNO, double pathl, int wid, int layid, double adc, double dd, double eangle, double costheta) const =0
virtual double StandardTrackCorrec(int calib_rec_Flag, int typFlag, int ntpFlag, int runNO, double ex, double costheta, double t0) const =0