34 MsgStream log(
msgSvc(), name() );
35 log << MSG::INFO <<
"DedxCalibMomentum::BookHists()" << endmsg;
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++ )
52 m_chi[i] =
new TH1F( hlabel.str().c_str(), hlabel.str().c_str(),
nbins,
chihist_min,
55 hlabel <<
"pos_chi" << i;
56 m_pos_chi[i] =
new TH1F( hlabel.str().c_str(), hlabel.str().c_str(),
nbins,
chihist_min,
59 hlabel <<
"neg_chi" << i;
60 m_neg_chi[i] =
new TH1F( hlabel.str().c_str(), hlabel.str().c_str(),
nbins,
chihist_min,
63 hlabel <<
"dedx" << i;
64 m_dedx[i] =
new TH1F( hlabel.str().c_str(), hlabel.str().c_str(),
nbins,
dedxhist_min,
67 hlabel <<
"pos_dedx" << i;
68 m_pos_dedx[i] =
new TH1F( hlabel.str().c_str(), hlabel.str().c_str(),
nbins,
dedxhist_min,
71 hlabel <<
"neg_dedx" << i;
72 m_neg_dedx[i] =
new TH1F( hlabel.str().c_str(), hlabel.str().c_str(),
nbins,
dedxhist_min,
75 hlabel <<
"hits" << i;
85 MsgStream log(
msgSvc(), name() );
86 log << MSG::INFO <<
"DedxCalibMomentum::FillHists()" << endmsg;
93 double dEdx[100] = { 0 }, pathlength[100] = { 0 }, wid[100] = { 0 }, layid[100] = { 0 },
94 dd_in[100] = { 0 }, eangle[100] = { 0 }, zhit[100] = { 0 };
96 float runNO = 0, evtNO = 0, runFlag = 0, costheta = 0, tes = 0, charge = 0, recalg = 0,
97 ptrk = 0, chidedx = 0;
99 vector<double> phlist;
104 f =
new TFile( runlist.c_str() );
105 n103 = (TTree*)
f->Get(
"n103" );
106 n103->SetBranchAddress(
"ndedxhit", &ndedxhit );
107 n103->SetBranchAddress(
"dEdx_hit", dEdx );
108 n103->SetBranchAddress(
"pathlength_hit", pathlength );
109 n103->SetBranchAddress(
"wid_hit", wid );
110 n103->SetBranchAddress(
"layid_hit", layid );
111 n103->SetBranchAddress(
"dd_in_hit", dd_in );
112 n103->SetBranchAddress(
"eangle_hit", eangle );
113 n103->SetBranchAddress(
"zhit_hit", zhit );
114 n103->SetBranchAddress(
"runNO", &runNO );
115 n103->SetBranchAddress(
"evtNO", &evtNO );
116 n103->SetBranchAddress(
"runFlag", &runFlag );
117 n103->SetBranchAddress(
"costheta", &costheta );
118 n103->SetBranchAddress(
"t0", &tes );
119 n103->SetBranchAddress(
"charge", &charge );
120 n103->SetBranchAddress(
"recalg", &recalg );
121 n103->SetBranchAddress(
"ndedxhit", &ndedxhit );
122 n103->SetBranchAddress(
"ptrk", &ptrk );
123 n103->SetBranchAddress(
"chidedx_e", &chidedx );
124 for (
int j = 0; j < n103->GetEntries(); j++ )
128 if ( ptrk > pMax || ptrk < pMin )
continue;
129 if ( tes > 1400 )
continue;
130 for (
int k = 0; k < ndedxhit; k++ )
132 dEdx[k] =
exsvc->StandardHitCorrec( 0, runFlag, 2, runNO, evtNO, pathlength[k], wid[k],
133 layid[k], dEdx[k], dd_in[k], eangle[k], costheta );
134 phlist.push_back( dEdx[k] );
137 dedx =
exsvc->StandardTrackCorrec( 0, runFlag, 2, runNO, evtNO, dedx, costheta, tes );
138 int ipBin = (Int_t)floor( ( ptrk - pMin ) / bin_step );
139 m_dedx[ipBin]->Fill( dedx );
140 if ( charge > 0 ) m_pos_dedx[ipBin]->Fill( dedx );
141 if ( charge < 0 ) m_neg_dedx[ipBin]->Fill( dedx );
144 set_dEdx( 1, dedx, recalg, runFlag, usedhit, ptrk, acos( costheta ), 1.5,
vFlag, tes );
147 m_chi[ipBin]->Fill( chi );
148 if ( charge > 0 ) m_pos_chi[ipBin]->Fill( chi );
149 if ( charge < 0 ) m_neg_chi[ipBin]->Fill( chi );
150 m_hits[ipBin]->Fill( usedhit );
152 Vec_dedx.push_back( dedx );
153 Vec_ptrk.push_back( ptrk );
175 MsgStream log(
msgSvc(), name() );
176 log << MSG::INFO <<
"DedxCalibMomentum::WriteHists()" << endmsg;
178 double chientryNo[
nbins] = { 0 }, chimean[
nbins] = { 0 }, chimeanerr[
nbins] = { 0 },
179 chisigma[
nbins] = { 0 }, chisq[
nbins] = { 0 };
180 double pos_chientryNo[
nbins] = { 0 }, pos_chimean[
nbins] = { 0 },
181 pos_chimeanerr[
nbins] = { 0 }, pos_chisigma[
nbins] = { 0 }, pos_chisq[
nbins] = { 0 };
182 double neg_chientryNo[
nbins] = { 0 }, neg_chimean[
nbins] = { 0 },
183 neg_chimeanerr[
nbins] = { 0 }, neg_chisigma[
nbins] = { 0 }, neg_chisq[
nbins] = { 0 };
184 double fitentryNo[
nbins] = { 0 }, fitmean[
nbins] = { 0 }, fitmeanerr[
nbins] = { 0 },
185 fitsigma[
nbins] = { 0 }, fitchisq[
nbins] = { 0 };
186 double pos_fitentryNo[
nbins] = { 0 }, pos_fitmean[
nbins] = { 0 },
187 pos_fitmeanerr[
nbins] = { 0 }, pos_fitsigma[
nbins] = { 0 },
188 pos_fitchisq[
nbins] = { 0 };
189 double neg_fitentryNo[
nbins] = { 0 }, neg_fitmean[
nbins] = { 0 },
190 neg_fitmeanerr[
nbins] = { 0 }, neg_fitsigma[
nbins] = { 0 },
191 neg_fitchisq[
nbins] = { 0 };
192 double hits_mean[
nbins] = { 0 }, hits_sigma[
nbins] = { 0 };
193 double pBin[
nbins] = { 0 };
195 for (
int i = 0; i <
nbins; i++ )
197 pBin[i] = ( i + 0.5 ) * bin_step + pMin;
199 chientryNo[i] = m_chi[i]->Integral();
200 if ( chientryNo[i] > 100 )
202 chimean[i] = m_chi[i]->GetFunction(
"gaus" )->GetParameter( 1 );
203 chimeanerr[i] = m_chi[i]->GetFunction(
"gaus" )->GetParError( 1 );
204 chisigma[i] = m_chi[i]->GetFunction(
"gaus" )->GetParameter( 2 );
205 chisq[i] = ( m_chi[i]->GetFunction(
"gaus" )->GetChisquare() ) /
206 ( m_chi[i]->GetFunction(
"gaus" )->GetNDF() );
208 pos_chientryNo[i] = m_pos_chi[i]->Integral();
209 if ( pos_chientryNo[i] > 100 )
211 pos_chimean[i] = m_pos_chi[i]->GetFunction(
"gaus" )->GetParameter( 1 );
212 pos_chimeanerr[i] = m_pos_chi[i]->GetFunction(
"gaus" )->GetParError( 1 );
213 pos_chisigma[i] = m_pos_chi[i]->GetFunction(
"gaus" )->GetParameter( 2 );
214 pos_chisq[i] = ( m_pos_chi[i]->GetFunction(
"gaus" )->GetChisquare() ) /
215 ( m_pos_chi[i]->GetFunction(
"gaus" )->GetNDF() );
217 neg_chientryNo[i] = m_neg_chi[i]->Integral();
218 if ( neg_chientryNo[i] > 100 )
220 neg_chimean[i] = m_neg_chi[i]->GetFunction(
"gaus" )->GetParameter( 1 );
221 neg_chimeanerr[i] = m_neg_chi[i]->GetFunction(
"gaus" )->GetParError( 1 );
222 neg_chisigma[i] = m_neg_chi[i]->GetFunction(
"gaus" )->GetParameter( 2 );
223 neg_chisq[i] = ( m_neg_chi[i]->GetFunction(
"gaus" )->GetChisquare() ) /
224 ( m_neg_chi[i]->GetFunction(
"gaus" )->GetNDF() );
227 fitentryNo[i] = m_dedx[i]->Integral();
228 if ( fitentryNo[i] > 100 )
230 fitmean[i] = m_dedx[i]->GetFunction(
"gaus" )->GetParameter( 1 );
231 fitmeanerr[i] = m_dedx[i]->GetFunction(
"gaus" )->GetParError( 1 );
232 fitsigma[i] = m_dedx[i]->GetFunction(
"gaus" )->GetParameter( 2 );
233 fitchisq[i] = ( m_dedx[i]->GetFunction(
"gaus" )->GetChisquare() ) /
234 ( m_dedx[i]->GetFunction(
"gaus" )->GetNDF() );
236 pos_fitentryNo[i] = m_pos_dedx[i]->Integral();
237 if ( pos_fitentryNo[i] > 100 )
239 pos_fitmean[i] = m_pos_dedx[i]->GetFunction(
"gaus" )->GetParameter( 1 );
240 pos_fitmeanerr[i] = m_pos_dedx[i]->GetFunction(
"gaus" )->GetParError( 1 );
241 pos_fitsigma[i] = m_pos_dedx[i]->GetFunction(
"gaus" )->GetParameter( 2 );
242 pos_fitchisq[i] = ( m_pos_dedx[i]->GetFunction(
"gaus" )->GetChisquare() ) /
243 ( m_pos_dedx[i]->GetFunction(
"gaus" )->GetNDF() );
245 neg_fitentryNo[i] = m_neg_dedx[i]->Integral();
246 if ( neg_fitentryNo[i] > 100 )
248 neg_fitmean[i] = m_neg_dedx[i]->GetFunction(
"gaus" )->GetParameter( 1 );
249 neg_fitmeanerr[i] = m_neg_dedx[i]->GetFunction(
"gaus" )->GetParError( 1 );
250 neg_fitsigma[i] = m_neg_dedx[i]->GetFunction(
"gaus" )->GetParameter( 2 );
251 neg_fitchisq[i] = ( m_neg_dedx[i]->GetFunction(
"gaus" )->GetChisquare() ) /
252 ( m_neg_dedx[i]->GetFunction(
"gaus" )->GetNDF() );
255 hits_mean[i] = m_hits[i]->GetMean();
256 hits_sigma[i] = m_hits[i]->GetRMS();
259 double dedx1[
Size] = { 0 };
260 double ptrk1[
Size] = { 0 };
261 cout <<
"Vec_dedx.size() = " << Vec_dedx.size() << endl;
262 for (
int i = 0; i <
Size && i < Vec_dedx.size(); i++ )
264 dedx1[i] = Vec_dedx[i];
265 ptrk1[i] = Vec_ptrk[i];
269 log << MSG::INFO <<
"begin generating root file!!! " << endmsg;
270 TFile*
f =
new TFile(
m_rootfile.c_str(),
"RECREATE" );
271 for (
int i = 0; i <
nbins; i++ )
274 m_pos_chi[i]->Write();
275 m_neg_chi[i]->Write();
277 m_pos_dedx[i]->Write();
278 m_neg_dedx[i]->Write();
282 TTree* momInfor =
new TTree(
"momInfor",
"momInfor" );
283 momInfor->Branch(
"chientryNo", chientryNo,
"chientryNo[50]/D" );
284 momInfor->Branch(
"chimean", chimean,
"chimean[50]/D" );
285 momInfor->Branch(
"chimeanerr", chimeanerr,
"chimeanerr[50]/D" );
286 momInfor->Branch(
"chisigma", chisigma,
"chisigma[50]/D" );
287 momInfor->Branch(
"chisq", chisq,
"chisq[50]/D" );
288 momInfor->Branch(
"pos_chientryNo", pos_chientryNo,
"pos_chientryNo[50]/D" );
289 momInfor->Branch(
"pos_chimean", pos_chimean,
"pos_chimean[50]/D" );
290 momInfor->Branch(
"pos_chimeanerr", pos_chimeanerr,
"pos_chimeanerr[50]/D" );
291 momInfor->Branch(
"pos_chisigma", pos_chisigma,
"pos_chisigma[50]/D" );
292 momInfor->Branch(
"pos_chisq", pos_chisq,
"pos_chisq[50]/D" );
293 momInfor->Branch(
"neg_chientryNo", neg_chientryNo,
"neg_chientryNo[50]/D" );
294 momInfor->Branch(
"neg_chimean", neg_chimean,
"neg_chimean[50]/D" );
295 momInfor->Branch(
"neg_chimeanerr", neg_chimeanerr,
"neg_chimeanerr[50]/D" );
296 momInfor->Branch(
"neg_chisigma", neg_chisigma,
"neg_chisigma[50]/D" );
297 momInfor->Branch(
"neg_chisq", neg_chisq,
"neg_chisq[50]/D" );
298 momInfor->Branch(
"fitentryNo", fitentryNo,
"fitentryNo[50]/D" );
299 momInfor->Branch(
"fitmean", fitmean,
"fitmean[50]/D" );
300 momInfor->Branch(
"fitmeanerr", fitmeanerr,
"fitmeanerr[50]/D" );
301 momInfor->Branch(
"fitsigma", fitsigma,
"fitsigma[50]/D" );
302 momInfor->Branch(
"fitchisq", fitchisq,
"fitchisq[50]/D" );
303 momInfor->Branch(
"pos_fitentryNo", pos_fitentryNo,
"pos_fitentryNo[50]/D" );
304 momInfor->Branch(
"pos_fitmean", pos_fitmean,
"pos_fitmean[50]/D" );
305 momInfor->Branch(
"pos_fitmeanerr", pos_fitmeanerr,
"pos_fitmeanerr[50]/D" );
306 momInfor->Branch(
"pos_fitsigma", pos_fitsigma,
"pos_fitsigma[50]/D" );
307 momInfor->Branch(
"pos_fitchisq", pos_fitchisq,
"pos_fitchisq[50]/D" );
308 momInfor->Branch(
"neg_fitentryNo", neg_fitentryNo,
"neg_fitentryNo[50]/D" );
309 momInfor->Branch(
"neg_fitmean", neg_fitmean,
"neg_fitmean[50]/D" );
310 momInfor->Branch(
"neg_fitmeanerr", neg_fitmeanerr,
"neg_fitmeanerr[50]/D" );
311 momInfor->Branch(
"neg_fitsigma", neg_fitsigma,
"neg_fitsigma[50]/D" );
312 momInfor->Branch(
"neg_fitchisq", neg_fitchisq,
"neg_fitchisq[50]/D" );
313 momInfor->Branch(
"hits_mean", hits_mean,
"hits_mean[50]/D" );
314 momInfor->Branch(
"hits_sigma", hits_sigma,
"hits_sigma[50]/D" );
315 momInfor->Branch(
"pBin", pBin,
"pBin[50]/D" );
316 momInfor->Branch(
"ptrk1", ptrk1,
"ptrk1[700000]/D" );
317 momInfor->Branch(
"dedx1", dedx1,
"dedx1[700000]/D" );
321 TCanvas c1(
"c1",
"canvas", 500, 400 );
323 momInfor->Draw(
"dedx1:ptrk1",
"dedx1>200 && dedx1<1200" );
325 for ( Int_t i = 0; i <
nbins; i++ )
330 for ( Int_t i = 0; i <
nbins; i++ )
332 m_pos_chi[i]->Draw();
335 for ( Int_t i = 0; i <
nbins; i++ )
337 m_neg_chi[i]->Draw();
340 for ( Int_t i = 0; i <
nbins; i++ )
345 for ( Int_t i = 0; i <
nbins; i++ )
347 m_pos_dedx[i]->Draw();
350 for ( Int_t i = 0; i <
nbins; i++ )
352 m_neg_dedx[i]->Draw();
358 for (
int i = 0; i <
nbins; i++ )
364 delete m_pos_dedx[i];
365 delete m_neg_dedx[i];
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)