11 #include <reconstruction/modules/CDCDedxValidation/CDCDedxValidation.h>
13 #include <mdst/dataobjects/Track.h>
14 #include <mdst/dataobjects/ECLCluster.h>
34 setDescription(
"Make data quality monitoring plots for CDC dE/dx");
35 addParam(
"outputFileName", fOutFileName,
"Name for output file", std::string(
"CDCdEdxValidation.root"));
36 addParam(
"SampleType", fCollType,
"Switch to hadron (false) vs bhabha files", std::string(
"temp"));
37 addParam(
"fnRuns", fnRuns,
"Number of input runs");
48 printf(
"Wrong input file tpye (%s): choose bhabha or radbhabha or hadron \n",
fCollType.data());
84 ((TH1D*)
fBasic->FindObject(
"hTrkPerEvtStats"))->Fill(0.0);
90 ((TH1D*)
fBasic->FindObject(
"hTrkPerEvtStats"))->Fill(1.0);
98 mTrack = track->getTrackFitResultWithClosestMass(
Const::pion);
101 ((TH1D*)
fBasic->FindObject(
"hTrkPerEvtStats"))->Fill(2.0);
106 if (!IsTrkSelected) {
107 ((TH1D*)
fBasic->FindObject(
"hTrkPerEvtStats"))->Fill(3.0);
121 ((TH1D*)
fBasic->FindObject(
"hTrkPerEvtStats"))->Fill(4.0);
126 ((TH1D*)
fBasic->FindObject(
"hTrkPerEvtStats"))->Fill(5.0);
139 Double_t TrkdEdx = dedxTrack->
getDedx();
143 if (TrkMom >= 8.00)TrkMom = 7.999;
144 Double_t BWMom = 0.250;
145 Int_t iMomBin = Int_t(TrkMom / BWMom);
150 ((TH1D*)
fBasic->FindObject(Form(
"hP_Positron_AR")))->Fill(TrkMom);
151 ((TH1D*)
fBasic->FindObject(Form(
"hdEdx_Positron_AR")))->Fill(TrkdEdxnosat);
152 ((TH1D*)
fPRdEdxinP->FindObject(Form(
"hdEdx_Posi_Pbin_AR%d", iMomBin)))->Fill(TrkdEdxnosat);
153 }
else if (TrkCharge < 0) {
154 ((TH1D*)
fBasic->FindObject(Form(
"hP_Electron_AR")))->Fill(TrkMom);
155 ((TH1D*)
fBasic->FindObject(Form(
"hdEdx_Electron_AR")))->Fill(TrkdEdxnosat);
156 ((TH1D*)
fPRdEdxinP->FindObject(Form(
"hdEdx_Elec_Pbin_AR%d", iMomBin)))->Fill(TrkdEdxnosat);
159 ((TH1D*)
fBasic->FindObject(Form(
"hdEdx_AR")))->Fill(
double(TrkdEdxnosat));
160 ((TH2D*)
fBasic->FindObject(Form(
"hdEdxvsPhi_AR")))->Fill(
double(mTrack->
getPhi()),
double(TrkdEdxnosat));
161 ((TH2D*)
fBasic->FindObject(Form(
"hPvsdEdx_AR")))->Fill(TrkMom * TrkCharge,
double(TrkdEdxnosat));
162 ((TH2D*)
fBasic->FindObject(Form(
"hPvsCosth_AR")))->Fill(TrkMom * TrkCharge,
double(TrkCosTheta));
170 double ChiPi = dedxTrack->
getChi(2);
171 double ChiK = dedxTrack->
getChi(3);
172 double ChiP = dedxTrack->
getChi(4);
175 ((TH2D*)
fBasic->FindObject(Form(
"hPvsdEdx_hadAR")))->Fill(TrkMom, TrkdEdx);
177 if ((TrkMom < 0.40) && (
fTrkEoverP < 0.4) && (TrkdEdx < (0.6 + 0.10 / (TrkMom * TrkMom)))
178 && (TrkdEdx > (0.4 + 0.012 / (TrkMom * TrkMom)))) {
179 ((TH1D*)
fBasic->FindObject(Form(
"hPionChiallP")))->Fill(ChiPi);
180 if (TrkMom < 0.300)((TH1D*)
fBasic->FindObject(Form(
"hPionChiLowP")))->Fill(ChiPi);
181 else ((TH1D*)
fBasic->FindObject(Form(
"hPionChiHighP")))->Fill(ChiPi);
182 ((TH2D*)
fBasic->FindObject(Form(
"hPvsdEdxPion_hadAR")))->Fill(TrkMom, TrkdEdx);
185 if ((TrkMom < 0.40) && (TrkdEdx > 1.35) && (TrkdEdx < (0.6 + 0.40 / (TrkMom * TrkMom)))
186 && (TrkdEdx > (0.6 + 0.10 / (TrkMom * TrkMom)))) {
187 ((TH1D*)
fBasic->FindObject(Form(
"hKaonChiallP")))->Fill(ChiK);
188 if (TrkMom < 0.350)((TH1D*)
fBasic->FindObject(Form(
"hKaonChiLowP")))->Fill(ChiK);
189 else ((TH1D*)
fBasic->FindObject(Form(
"hKaonChiHighP")))->Fill(ChiK);
190 ((TH2D*)
fBasic->FindObject(Form(
"hPvsdEdxKaon_hadAR")))->Fill(TrkMom, TrkdEdx);
193 if ((TrkMom < 0.80) && (TrkdEdx > 1.35) && (TrkdEdx < (0.6 + 1.20 / (TrkMom * TrkMom)))
194 && (TrkdEdx > (0.6 + 0.40 / (TrkMom * TrkMom)))) {
195 ((TH1D*)
fBasic->FindObject(Form(
"hProtonChiallP")))->Fill(ChiP);
196 if (TrkMom < 0.600)((TH1D*)
fBasic->FindObject(Form(
"hProtonChiLowP")))->Fill(ChiP);
197 else ((TH1D*)
fBasic->FindObject(Form(
"hProtonChiHighP")))->Fill(ChiP);
198 ((TH2D*)
fBasic->FindObject(Form(
"hPvsdEdxProton_hadAR")))->Fill(TrkMom, TrkdEdx);
218 TH1D* hTrkPerEvtStats =
new TH1D(
"hTrkPerEvtStats",
"Track selections", 6, -0.5, 5.5);
219 hTrkPerEvtStats->GetXaxis()->SetBinLabel(1,
"no dedxobject");
220 hTrkPerEvtStats->GetXaxis()->SetBinLabel(2,
"no assoc-track");
221 hTrkPerEvtStats->GetXaxis()->SetBinLabel(3,
"no TrackFit");
222 hTrkPerEvtStats->GetXaxis()->SetBinLabel(4,
"no pass cuts");
223 hTrkPerEvtStats->GetXaxis()->SetBinLabel(5,
"no eclCluster");
224 hTrkPerEvtStats->GetXaxis()->SetBinLabel(6,
"Selected");
225 hTrkPerEvtStats->SetFillColor(kRed);
226 hTrkPerEvtStats->SetFillStyle(3015);
227 hTrkPerEvtStats->SetMinimum(0);
228 fBasic->Add(hTrkPerEvtStats);
233 hdEdx_AR->GetXaxis()->SetTitle(Form(
"dE/dx truncMean of %s tracks",
fCollType.data()));
234 hdEdx_AR->GetYaxis()->SetTitle(
"Entries");
237 TH1D* hEOverP_AR =
new TH1D(
"hEOverP_AR",
"E/p distribution", 100, 0.5, 1.5);
238 hEOverP_AR->GetXaxis()->SetTitle(
"E/p distribution");
239 hEOverP_AR->GetYaxis()->SetTitle(
"Entries");
242 TH1D* hRunGainPR =
new TH1D(
"hRunGainPR",
"bla-bla",
fnRuns, -0.5,
fnRuns - 0.5);
243 hRunGainPR->SetTitle(
"Run gain variation vs. RunNumber;Run Numbers;dE/dx mean");
244 hRunGainPR->GetYaxis()->SetRangeUser(0.85, 1.15);
247 TH1D* hP_Electron_AR =
new TH1D(
"hP_Electron_AR",
"bla-bla", 320, 0.0, 8.0);
248 hP_Electron_AR->SetTitle(
"Momentum distribution of e-; Momentum of (e-); Entries");
249 fBasic->Add(hP_Electron_AR);
251 TH1D* hP_Positron_AR =
new TH1D(
"hP_Positron_AR",
"bla-bla", 320, 0.0, 8.0);
252 hP_Positron_AR->SetTitle(
"Momentum distribution of e+;Momentum of (e+);Entries");
253 fBasic->Add(hP_Positron_AR);
256 hdEdx_Electron_AR->SetTitle(
"dE/dx (nohad sat) of e- ;dE/dx distrbution (e-);Entries");
257 fBasic->Add(hdEdx_Electron_AR);
260 hdEdx_Positron_AR->SetTitle(
"dE/dx (nohad sat) of e+;dE/dx distrbution (e+);Entries");
261 fBasic->Add(hdEdx_Positron_AR);
263 TH2D* hPvsdEdx_AR =
new TH2D(
"hPvsdEdx_AR",
"bla-bla", 320, -8.0, 8.0, 100, 0.0, 2.0);
264 hPvsdEdx_AR->SetTitle(
"dE/dx band plots for e+ and e-; Momentum of (e+(right)) and e-);dE/dx");
267 TH2D* hdEdxvsPhi_AR =
new TH2D(
"hdEdxvsPhi_AR",
"dE/dx (no had sat) vs #phi", 64, -3.14, 3.14, 200, 0., 2.0);
268 hdEdxvsPhi_AR->SetTitle(
"dE/dx (no Had Sat) vs #phi;track #phi;dE/dx");
269 fBasic->Add(hdEdxvsPhi_AR);
271 TH2D* hPvsCosth_AR =
new TH2D(
"hPvsCosth_AR",
"cos(#theta) vs. p: all Runs", 2 * 48, -10., 10., 60, -1.2, 1.2);
272 hPvsCosth_AR->GetXaxis()->SetTitle(Form(
"Momentum of %s tracks",
fCollType.data()));
273 hPvsCosth_AR->GetYaxis()->SetTitle(
"cos(#theta)");
274 fBasic->Add(hPvsCosth_AR);
277 TH1D* hdEdx_Posi_Pbin_AR[32], *hdEdx_Elec_Pbin_AR[32];
278 for (
int ip = 0; ip < 32; ip++) {
280 hdEdx_Posi_Pbin_AR[ip] =
new TH1D(Form(
"hdEdx_Posi_Pbin_AR%d", ip), Form(
"hdEdx_Posi_Pbin_AR%d", ip),
fnBinsdedx,
fnBinsdedxLE,
282 hdEdx_Posi_Pbin_AR[ip]->GetXaxis()->SetTitle(
"dE/dx distrbution (e+)");
283 hdEdx_Posi_Pbin_AR[ip]->GetYaxis()->SetTitle(
"Entries");
284 hdEdx_Posi_Pbin_AR[ip]->SetTitle(Form(
"Momentum range %0.03f to %0.03f", ip * 0.250, (ip + 1) * 0.250));
287 hdEdx_Elec_Pbin_AR[ip] =
new TH1D(Form(
"hdEdx_Elec_Pbin_AR%d", ip), Form(
"hdEdx_Elec_Pbin_AR%d", ip),
fnBinsdedx,
fnBinsdedxLE,
289 hdEdx_Elec_Pbin_AR[ip]->GetXaxis()->SetTitle(
"dE/dx distrbution (e-)");
290 hdEdx_Elec_Pbin_AR[ip]->GetYaxis()->SetTitle(
"Entries");
291 hdEdx_Elec_Pbin_AR[ip]->SetTitle(Form(
"Momentum range %0.03f to %0.03f", ip * 0.250, (ip + 1) * 0.250));
295 for (
int ip = 0; ip < 32; ip++)
fPRdEdxinP->Add(hdEdx_Elec_Pbin_AR[ip]);
302 TH2D* hPvsdEdx_hadAR =
new TH2D(
"hPvsdEdx_hadAR",
"bla-bla", 500, 0.10, 15.0, 750, 0.05, 15);
303 hPvsdEdx_hadAR->SetTitle(
"dE/dx band plot; Momentum;dE/dx");
304 fBasic->Add(hPvsdEdx_hadAR);
306 TH2D* hPvsdEdxPion_hadAR =
new TH2D(
"hPvsdEdxPion_hadAR",
"bla-bla", 500, 0.10, 15.0, 750, 0.05, 15);
307 hPvsdEdxPion_hadAR->SetTitle(
"dE/dx band plot (Pion); Momentum;dE/dx");
308 hPvsdEdxPion_hadAR->SetMarkerColor(kRed);
309 fBasic->Add(hPvsdEdxPion_hadAR);
311 TH2D* hPvsdEdxKaon_hadAR =
new TH2D(
"hPvsdEdxKaon_hadAR",
"bla-bla", 500, 0.10, 15.0, 750, 0.05, 15);
312 hPvsdEdxKaon_hadAR->SetTitle(
"dE/dx band plot (Kaon); Momentum;dE/dx");
313 hPvsdEdxKaon_hadAR->SetMarkerColor(kGreen);
314 fBasic->Add(hPvsdEdxKaon_hadAR);
316 TH2D* hPvsdEdxProton_hadAR =
new TH2D(
"hPvsdEdxProton_hadAR",
"bla-bla", 500, 0.10, 15.0, 750, 0.05, 15);
317 hPvsdEdxProton_hadAR->SetTitle(
"dE/dx band plot (Proton); Momentum;dE/dx");
318 hPvsdEdxKaon_hadAR->SetMarkerColor(kBlue);
319 fBasic->Add(hPvsdEdxProton_hadAR);
322 TH1D* hPionChiallP =
new TH1D(
"hPionChiallP",
"bla-bla", 240, -6.0, 6.0);
323 hPionChiallP->SetTitle(
"Chi value (Pion);chi value; Entries");
324 fBasic->Add(hPionChiallP);
326 TH1D* hPionChiLowP =
new TH1D(
"hPionChiLowP",
"bla-bla", 240, -6.0, 6.0);
327 hPionChiLowP->SetTitle(
"Chi value (Pion), Momentum (0-300) MeV; chi value; Entries");
328 fBasic->Add(hPionChiLowP);
330 TH1D* hPionChiHighP =
new TH1D(
"hPionChiHighP",
"bla-bla", 240, -6.0, 6.0);
331 hPionChiHighP->SetTitle(
"Chi value (Pion), Momentum (300-400) MeV; chi value; Entries");
332 fBasic->Add(hPionChiHighP);
335 TH1D* hKaonChiallP =
new TH1D(
"hKaonChiallP",
"bla-bla", 240, -6.0, 6.0);
336 hKaonChiallP->SetTitle(
"Chi value (Kaon);chi value; Entries");
337 fBasic->Add(hKaonChiallP);
339 TH1D* hKaonChiLowP =
new TH1D(
"hKaonChiLowP",
"bla-bla", 240, -6.0, 6.0);
340 hKaonChiLowP->SetTitle(
"Chi value (Kaon), Momentum (0-350) MeV; chi value; Entries");
341 fBasic->Add(hKaonChiLowP);
343 TH1D* hKaonChiHighP =
new TH1D(
"hKaonChiHighP",
"bla-bla", 240, -6.0, 6.0);
344 hKaonChiHighP->SetTitle(
"Chi value (Kaon), Momentum (350-800) MeV; chi value; Entries");
345 fBasic->Add(hKaonChiHighP);
348 TH1D* hProtonChiallP =
new TH1D(
"hProtonChiallP",
"bla-bla", 240, -6.0, 6.0);
349 hProtonChiallP->SetTitle(
"Chi value (Proton);chi value; Entries");
350 fBasic->Add(hProtonChiallP);
352 TH1D* hProtonChiLowP =
new TH1D(
"hProtonChiLowP",
"bla-bla", 240, -6.0, 6.0);
353 hProtonChiLowP->SetTitle(
"Chi value (Proton), Momentum (0-600) MeV; chi value; Entries");
354 fBasic->Add(hProtonChiLowP);
356 TH1D* hProtonChiHighP =
new TH1D(
"hProtonChiHighP",
"bla-bla", 240, -6.0, 6.0);
357 hProtonChiHighP->SetTitle(
"Chi value (Proton), Momentum (600-800) MeV; chi value; Entries");
358 fBasic->Add(hProtonChiHighP);
360 }
else if (level ==
"PR") {
364 hdEdx_PR[iR]->GetXaxis()->SetTitle(Form(
"dE/dx trucMean of %s tracks",
fCollType.data()));
365 hdEdx_PR[iR]->GetYaxis()->SetTitle(
"Entries");
369 B2ERROR(
"Run Gain: Enter AR or PR mode only");
380 Double_t mean = 0., meanError = 0.;
381 Double_t sigma = 0., sigmaError = 0.;
384 Int_t fitStatus = -1;
386 if (fitStatus == 0) {
388 mean = fit->GetParameter(1);
389 meanError = fit->GetParError(1);
390 sigma = fit->GetParameter(2);
391 sigmaError = fit->GetParError(2);
392 hdEdx_PR[
fiRun]->GetXaxis()->SetRangeUser(mean - 7 * sigma, mean + 7 * sigma);
407 }
else if (level ==
"AR") {
409 const Int_t allNRun =
TotMean.size();
410 ((TH1D*)
fBasic->FindObject(
"hRunGainPR"))->GetXaxis()->SetRange(1, allNRun);
412 TH1D* hFitdEdxMeanPR =
new TH1D(
"hFitdEdxMeanPR",
"dE/dx(nohad-sat) #mu via fit vs. Runs", allNRun, 0, allNRun);
413 hFitdEdxMeanPR->GetYaxis()->SetRangeUser(0.90, 1.10);
414 hFitdEdxMeanPR->SetMarkerStyle(21);
415 hFitdEdxMeanPR->SetMarkerColor(kRed);
416 hFitdEdxMeanPR->SetMarkerSize(1);
417 hFitdEdxMeanPR->GetXaxis()->SetTitle(
"Run numbers");
418 hFitdEdxMeanPR->GetYaxis()->SetTitle(
"dEdx mean (fit)");
419 hFitdEdxMeanPR->GetXaxis()->LabelsOption(
"v");
421 TH1D* hFitdEdxSigmaPR =
new TH1D(
"hFitdEdxSigmaPR",
"dE/dx(nohad-sat) #sigma via fit vs. Runs", allNRun, 0, allNRun);
422 hFitdEdxSigmaPR->GetYaxis()->SetRangeUser(0, 0.30);
423 hFitdEdxSigmaPR->SetMarkerStyle(21);
424 hFitdEdxSigmaPR->SetMarkerColor(kRed);
425 hFitdEdxSigmaPR->SetMarkerSize(1);
426 hFitdEdxSigmaPR->GetXaxis()->SetTitle(
"Run numbers");
427 hFitdEdxSigmaPR->GetYaxis()->SetTitle(
"dEdx sigma (fit)");
428 hFitdEdxSigmaPR->GetXaxis()->LabelsOption(
"v");
430 for (Int_t i = 0; i < allNRun; i++) {
432 if (i % 10 == 0)hFitdEdxMeanPR->GetXaxis()->SetBinLabel(i + 1, Form(
"%d",
TotRunN.at(i)));
433 hFitdEdxMeanPR->SetBinContent(i + 1,
TotMean.at(i));
434 hFitdEdxMeanPR->SetBinError(i + 1,
TotMeanE.at(i));
436 if (i % 10 == 0)hFitdEdxSigmaPR->GetXaxis()->SetBinLabel(i + 1, Form(
"%d",
TotRunN.at(i)));
437 hFitdEdxSigmaPR->SetBinContent(i + 1,
TotSigma.at(i));
438 hFitdEdxSigmaPR->SetBinError(i + 1,
TotSigmaE.at(i));
441 fBasic->Add(hFitdEdxMeanPR);
442 fBasic->Add(hFitdEdxSigmaPR);
444 TH1D* hdEdxFit_allRun = (TH1D*)(
fBasic->FindObject(Form(
"hdEdx_AR"))->Clone(
"hdEdxFit_allRun"));
445 if (hdEdxFit_allRun->GetEntries() > 100) {
446 hdEdxFit_allRun->Fit(
"gaus",
"Q");
447 TF1* hGfit = (TF1*)hdEdxFit_allRun->GetFunction(
"gaus");
448 Double_t meanGFit = hGfit->GetParameter(1);
449 Double_t sigmaGFit = hGfit->GetParameter(2);
450 hdEdxFit_allRun->GetXaxis()->SetRangeUser(meanGFit - 7 * sigmaGFit, meanGFit + 7 * sigmaGFit);
451 hdEdxFit_allRun->SetFillColor(kYellow);
452 hdEdxFit_allRun->SetStats(kTRUE);
453 fBasic->Add(hdEdxFit_allRun);
456 TH1D* hdEdxMeanVsMomentum =
new TH1D(
"hdEdxMeanVsMomentum",
"dEdx-mean vs P bins (BW = 250MeV)", 64, -8.0, 8.0);
457 hdEdxMeanVsMomentum->GetXaxis()->SetTitle(
"Track Momentum");
458 hdEdxMeanVsMomentum->GetYaxis()->SetTitle(
"dEdx Mean");
460 TH1D* hdEdxSigmaVsMomentum =
new TH1D(
"hdEdxSigmaVsMomentum",
"dEdx-sigma vs P bins (BW = 250MeV)", 64, -8.0, 8.0);
461 hdEdxSigmaVsMomentum->GetXaxis()->SetTitle(
"Track Momentum");
462 hdEdxSigmaVsMomentum->GetYaxis()->SetTitle(
"dEdx Sigma");
464 for (
int ip = 0; ip < 32; ip++) {
465 Int_t nTrack = ((TH1D*)
fPRdEdxinP->FindObject(Form(
"hdEdx_Posi_Pbin_AR%d", ip)))->GetEntries();
466 ((TH1D*)
fPRdEdxinP->FindObject(Form(
"hdEdx_Posi_Pbin_AR%d", ip)))->SetFillColor(kYellow);
467 Double_t iPMean = 1.0, iPSigma = 0.0;
469 ((TH1D*)
fPRdEdxinP->FindObject(Form(
"hdEdx_Posi_Pbin_AR%d", ip)))->Fit(
"gaus",
"0");
470 iPMean = ((TH1D*)
fPRdEdxinP->FindObject(Form(
"hdEdx_Posi_Pbin_AR%d", ip)))->GetFunction(
"gaus")->GetParameter(1);
471 iPSigma = ((TH1D*)
fPRdEdxinP->FindObject(Form(
"hdEdx_Posi_Pbin_AR%d", ip)))->GetFunction(
"gaus")->GetParameter(2);
473 hdEdxMeanVsMomentum->SetBinContent(32 + ip + 1, iPMean);
474 hdEdxSigmaVsMomentum->SetBinContent(32 + ip + 1, iPSigma);
477 for (
int ip = 0; ip < 32; ip++) {
478 Int_t nTrack = ((TH1D*)
fPRdEdxinP->FindObject(Form(
"hdEdx_Posi_Pbin_AR%d", ip)))->GetEntries();
479 ((TH1D*)
fPRdEdxinP->FindObject(Form(
"hdEdx_Elec_Pbin_AR%d", ip)))->SetFillColor(kYellow);
480 Double_t iPMean = 1.0, iPSigma = 0.0;
483 ((TH1D*)
fPRdEdxinP->FindObject(Form(
"hdEdx_Elec_Pbin_AR%d", ip)))->Fit(
"gaus",
"0");
484 iPMean = ((TH1D*)
fPRdEdxinP->FindObject(Form(
"hdEdx_Elec_Pbin_AR%d", ip)))->GetFunction(
"gaus")->GetParameter(1);
485 iPSigma = ((TH1D*)
fPRdEdxinP->FindObject(Form(
"hdEdx_Elec_Pbin_AR%d", ip)))->GetFunction(
"gaus")->GetParameter(2);
487 hdEdxMeanVsMomentum->SetBinContent(32 - ip, iPMean);
488 hdEdxSigmaVsMomentum->SetBinContent(32 - ip, iPSigma);
491 fBasic->Add(hdEdxSigmaVsMomentum);
492 fBasic->Add(hdEdxMeanVsMomentum);
494 B2ERROR(
"RunGain >> NO-REQUEST-FOUND for PR or AR level plots, exiting..");
502 B2INFO(
"Terminating plots for all runs ");
506 fBasic->Write(
"ARBasics", 1);