1#include "GaudiKernel/MsgStream.h"
28 declareProperty(
"PMin", pMin=0.2);
29 declareProperty(
"PMax", pMax=1.0);
34 MsgStream log(
msgSvc(), name());
35 log<<MSG::INFO<<
"DedxCalibMomentum::BookHists()"<<endreq;
36 bin_step = (pMax-pMin)/
nbins;
39 m_chi =
new TH1F*[
nbins];
40 m_pos_chi =
new TH1F*[
nbins];
41 m_neg_chi =
new TH1F*[
nbins];
42 m_dedx =
new TH1F*[
nbins];
43 m_pos_dedx =
new TH1F*[
nbins];
44 m_neg_dedx =
new TH1F*[
nbins];
45 m_hits =
new TH1F*[
nbins];
48 for(
int i=0;i<
nbins;i++)
63 hlabel<<
"pos_dedx"<<i;
66 hlabel<<
"neg_dedx"<<i;
79 MsgStream log(
msgSvc(), name());
80 log<<MSG::INFO<<
"DedxCalibMomentum::FillHists()"<<endreq;
87 double dEdx[100]={0},pathlength[100]={0},wid[100]={0},layid[100]={0},dd_in[100]={0},eangle[100]={0},zhit[100]={0};
91 vector<double> phlist;
96 f =
new TFile(runlist.c_str());
97 n103 = (TTree*)
f->Get(
"n103");
116 for(
int j=0;j<n103->GetEntries();j++)
120 if(
ptrk>pMax ||
ptrk<pMin)
continue;
121 if(tes>1400)
continue;
122 for(
int k=0;k<ndedxhit;k++)
124 dEdx[k] =
exsvc->
StandardHitCorrec(0,runFlag,2,runNO,evtNO,pathlength[k],wid[k],layid[k],dEdx[k],dd_in[k],eangle[k],
costheta);
125 phlist.push_back(dEdx[k]);
129 int ipBin = (Int_t)floor((
ptrk-pMin)/bin_step);
130 m_dedx[ipBin]->Fill(dedx);
131 if(
charge>0) m_pos_dedx[ipBin]->Fill(dedx);
132 if(
charge<0) m_neg_dedx[ipBin]->Fill(dedx);
138 m_chi[ipBin]->Fill(chi);
139 if(
charge>0) m_pos_chi[ipBin]->Fill(chi);
140 if(
charge<0) m_neg_chi[ipBin]->Fill(chi);
141 m_hits[ipBin]->Fill(usedhit);
143 Vec_dedx.push_back(dedx);
144 Vec_ptrk.push_back(
ptrk);
151 MsgStream log(
msgSvc(), name());
152 log<<MSG::INFO<<
"DedxCalibMomentum::AnalyseHists()"<<endreq;
154 gStyle->SetOptFit(1111);
155 for(
int i=0; i<
nbins; i++)
157 m_dedx[i]->Fit(
"gaus",
"Q" );
158 m_pos_dedx[i]->Fit(
"gaus",
"Q" );
159 m_neg_dedx[i]->Fit(
"gaus",
"Q" );
160 m_chi[i]->Fit(
"gaus",
"Q" );
161 m_pos_chi[i]->Fit(
"gaus",
"Q" );
162 m_neg_chi[i]->Fit(
"gaus",
"Q" );
168 MsgStream log(
msgSvc(), name());
169 log<<MSG::INFO<<
"DedxCalibMomentum::WriteHists()"<< endreq;
172 double pos_chientryNo[
nbins]={0},pos_chimean[
nbins]={0},pos_chimeanerr[
nbins]={0},pos_chisigma[
nbins]={0},pos_chisq[
nbins]={0};
173 double neg_chientryNo[
nbins]={0},neg_chimean[
nbins]={0},neg_chimeanerr[
nbins]={0},neg_chisigma[
nbins]={0},neg_chisq[
nbins]={0};
175 double pos_fitentryNo[
nbins]={0},pos_fitmean[
nbins]={0},pos_fitmeanerr[
nbins]={0},pos_fitsigma[
nbins]={0},pos_fitchisq[
nbins]={0};
176 double neg_fitentryNo[
nbins]={0},neg_fitmean[
nbins]={0},neg_fitmeanerr[
nbins]={0},neg_fitsigma[
nbins]={0},neg_fitchisq[
nbins]={0};
177 double hits_mean[
nbins]={0},hits_sigma[
nbins]={0};
178 double pBin[
nbins]={0};
180 for(
int i=0;i<
nbins;i++)
182 pBin[i] = (i+0.5)*bin_step + pMin;
184 chientryNo[i] = m_chi[i]->Integral();
185 if(chientryNo[i]>100)
187 chimean[i] = m_chi[i]->GetFunction(
"gaus")->GetParameter(1);
188 chimeanerr[i] = m_chi[i]->GetFunction(
"gaus")->GetParError(1);
189 chisigma[i] = m_chi[i]->GetFunction(
"gaus")->GetParameter(2);
190 chisq[i] = (m_chi[i]->GetFunction(
"gaus")->GetChisquare())/(m_chi[i]->GetFunction(
"gaus")->GetNDF());
192 pos_chientryNo[i] = m_pos_chi[i]->Integral();
193 if(pos_chientryNo[i]>100)
195 pos_chimean[i] = m_pos_chi[i]->GetFunction(
"gaus")->GetParameter(1);
196 pos_chimeanerr[i] = m_pos_chi[i]->GetFunction(
"gaus")->GetParError(1);
197 pos_chisigma[i] = m_pos_chi[i]->GetFunction(
"gaus")->GetParameter(2);
198 pos_chisq[i] = (m_pos_chi[i]->GetFunction(
"gaus")->GetChisquare())/(m_pos_chi[i]->GetFunction(
"gaus")->GetNDF());
200 neg_chientryNo[i] = m_neg_chi[i]->Integral();
201 if(neg_chientryNo[i]>100)
203 neg_chimean[i] = m_neg_chi[i]->GetFunction(
"gaus")->GetParameter(1);
204 neg_chimeanerr[i] = m_neg_chi[i]->GetFunction(
"gaus")->GetParError(1);
205 neg_chisigma[i] = m_neg_chi[i]->GetFunction(
"gaus")->GetParameter(2);
206 neg_chisq[i] = (m_neg_chi[i]->GetFunction(
"gaus")->GetChisquare())/(m_neg_chi[i]->GetFunction(
"gaus")->GetNDF());
209 fitentryNo[i] = m_dedx[i]->Integral();
210 if(fitentryNo[i]>100)
212 fitmean[i] = m_dedx[i]->GetFunction(
"gaus")->GetParameter(1);
213 fitmeanerr[i] = m_dedx[i]->GetFunction(
"gaus")->GetParError(1);
214 fitsigma[i] = m_dedx[i]->GetFunction(
"gaus")->GetParameter(2);
215 fitchisq[i] = (m_dedx[i]->GetFunction(
"gaus")->GetChisquare())/(m_dedx[i]->GetFunction(
"gaus")->GetNDF());
217 pos_fitentryNo[i] = m_pos_dedx[i]->Integral();
218 if(pos_fitentryNo[i]>100)
220 pos_fitmean[i] = m_pos_dedx[i]->GetFunction(
"gaus")->GetParameter(1);
221 pos_fitmeanerr[i] = m_pos_dedx[i]->GetFunction(
"gaus")->GetParError(1);
222 pos_fitsigma[i] = m_pos_dedx[i]->GetFunction(
"gaus")->GetParameter(2);
223 pos_fitchisq[i] = (m_pos_dedx[i]->GetFunction(
"gaus")->GetChisquare())/(m_pos_dedx[i]->GetFunction(
"gaus")->GetNDF());
225 neg_fitentryNo[i] = m_neg_dedx[i]->Integral();
226 if(neg_fitentryNo[i]>100)
228 neg_fitmean[i] = m_neg_dedx[i]->GetFunction(
"gaus")->GetParameter(1);
229 neg_fitmeanerr[i] = m_neg_dedx[i]->GetFunction(
"gaus")->GetParError(1);
230 neg_fitsigma[i] = m_neg_dedx[i]->GetFunction(
"gaus")->GetParameter(2);
231 neg_fitchisq[i] = (m_neg_dedx[i]->GetFunction(
"gaus")->GetChisquare())/(m_neg_dedx[i]->GetFunction(
"gaus")->GetNDF());
234 hits_mean[i] = m_hits[i]->GetMean();
235 hits_sigma[i] = m_hits[i]->GetRMS();
238 double dedx1[
Size] = {0};
239 double ptrk1[
Size] = {0};
240 cout <<
"Vec_dedx.size() = " << Vec_dedx.size() << endl;
241 for(
int i=0;i<
Size && i< Vec_dedx.size();i++)
243 dedx1[i] = Vec_dedx[i];
244 ptrk1[i] = Vec_ptrk[i];
248 log<<MSG::INFO<<
"begin generating root file!!! "<<endreq;
249 TFile*
f =
new TFile(
m_rootfile.c_str(),
"RECREATE");
250 for(
int i=0;i<
nbins;i++)
253 m_pos_chi[i]->Write();
254 m_neg_chi[i]->Write();
256 m_pos_dedx[i]->Write();
257 m_neg_dedx[i]->Write();
261 TTree* momInfor =
new TTree(
"momInfor",
"momInfor");
262 momInfor->Branch(
"chientryNo",chientryNo,
"chientryNo[50]/D");
263 momInfor->Branch(
"chimean",chimean,
"chimean[50]/D");
264 momInfor->Branch(
"chimeanerr",chimeanerr,
"chimeanerr[50]/D");
265 momInfor->Branch(
"chisigma",chisigma,
"chisigma[50]/D");
266 momInfor->Branch(
"chisq",chisq,
"chisq[50]/D");
267 momInfor->Branch(
"pos_chientryNo",pos_chientryNo,
"pos_chientryNo[50]/D");
268 momInfor->Branch(
"pos_chimean",pos_chimean,
"pos_chimean[50]/D");
269 momInfor->Branch(
"pos_chimeanerr",pos_chimeanerr,
"pos_chimeanerr[50]/D");
270 momInfor->Branch(
"pos_chisigma",pos_chisigma,
"pos_chisigma[50]/D");
271 momInfor->Branch(
"pos_chisq",pos_chisq,
"pos_chisq[50]/D");
272 momInfor->Branch(
"neg_chientryNo",neg_chientryNo,
"neg_chientryNo[50]/D");
273 momInfor->Branch(
"neg_chimean",neg_chimean,
"neg_chimean[50]/D");
274 momInfor->Branch(
"neg_chimeanerr",neg_chimeanerr,
"neg_chimeanerr[50]/D");
275 momInfor->Branch(
"neg_chisigma",neg_chisigma,
"neg_chisigma[50]/D");
276 momInfor->Branch(
"neg_chisq",neg_chisq,
"neg_chisq[50]/D");
277 momInfor->Branch(
"fitentryNo",fitentryNo,
"fitentryNo[50]/D");
278 momInfor->Branch(
"fitmean",fitmean,
"fitmean[50]/D");
279 momInfor->Branch(
"fitmeanerr",fitmeanerr,
"fitmeanerr[50]/D");
280 momInfor->Branch(
"fitsigma",fitsigma,
"fitsigma[50]/D");
281 momInfor->Branch(
"fitchisq",fitchisq,
"fitchisq[50]/D");
282 momInfor->Branch(
"pos_fitentryNo",pos_fitentryNo,
"pos_fitentryNo[50]/D");
283 momInfor->Branch(
"pos_fitmean",pos_fitmean,
"pos_fitmean[50]/D");
284 momInfor->Branch(
"pos_fitmeanerr",pos_fitmeanerr,
"pos_fitmeanerr[50]/D");
285 momInfor->Branch(
"pos_fitsigma",pos_fitsigma,
"pos_fitsigma[50]/D");
286 momInfor->Branch(
"pos_fitchisq",pos_fitchisq,
"pos_fitchisq[50]/D");
287 momInfor->Branch(
"neg_fitentryNo",neg_fitentryNo,
"neg_fitentryNo[50]/D");
288 momInfor->Branch(
"neg_fitmean",neg_fitmean,
"neg_fitmean[50]/D");
289 momInfor->Branch(
"neg_fitmeanerr",neg_fitmeanerr,
"neg_fitmeanerr[50]/D");
290 momInfor->Branch(
"neg_fitsigma",neg_fitsigma,
"neg_fitsigma[50]/D");
291 momInfor->Branch(
"neg_fitchisq",neg_fitchisq,
"neg_fitchisq[50]/D");
292 momInfor->Branch(
"hits_mean",hits_mean,
"hits_mean[50]/D");
293 momInfor->Branch(
"hits_sigma",hits_sigma,
"hits_sigma[50]/D");
294 momInfor->Branch(
"pBin",pBin,
"pBin[50]/D");
295 momInfor->
Branch(
"ptrk1",ptrk1,
"ptrk1[700000]/D");
296 momInfor->
Branch(
"dedx1",dedx1,
"dedx1[700000]/D");
300 TCanvas c1(
"c1",
"canvas", 500, 400);
302 momInfor ->
Draw(
"dedx1:ptrk1",
"dedx1>200 && dedx1<1200");
304 for(Int_t i=0;i<
nbins;i++)
309 for(Int_t i=0;i<
nbins;i++)
311 m_pos_chi[i]->Draw();
314 for(Int_t i=0;i<
nbins;i++)
316 m_neg_chi[i]->Draw();
319 for(Int_t i=0;i<
nbins;i++)
324 for(Int_t i=0;i<
nbins;i++)
326 m_pos_dedx[i]->Draw();
329 for(Int_t i=0;i<
nbins;i++)
331 m_neg_dedx[i]->Draw();
337 for(
int i=0;i<
nbins;i++)
343 delete m_pos_dedx[i];
344 delete m_neg_dedx[i];
curve Branch("CurveSize",&CurveSize,"CurveSize/I")
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
data SetBranchAddress("time",&time)
const double dedxhist_max
const double dedxhist_min
DedxCalibMomentum(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, int evtNO, 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, int evtNO, double ex, double costheta, double t0) const =0