6 if (!fSpectraFile.IsNull()) {
9 if (fSpectraFile.Contains(
"FD") && fSpectraFile.Contains(
"BD")) {
11 if (fEffFiles.size() > 2)
17 for (
auto effFile : fEffFiles)
25 TClonesArray* out =
new TClonesArray(
"TriggerEfficiency");
27 for (Int_t iData1 = 0; iData1 < filledData->GetEntriesFast(); iData1++) {
30 TString trig1 = eff1->
trigger();
35 for (Int_t iData2 = iData1; iData2 < filledData->GetEntriesFast(); iData2++) {
38 TString trig2 = eff2->
trigger();
42 if (minMul1 != minMul2 || maxMul1 != maxMul2 || trig1 == trig2)
50 Double_t relErr = TMath::Sqrt(relErr1 * relErr1 + relErr2 * relErr2);
51 Double_t absErr = eff * relErr;
53 new ((*out)[out->GetEntriesFast()])
62 nMultBins = out->GetEntriesFast();
64 vector<Double_t> triggEffs;
65 vector<Double_t> triggEffErrs;
67 for (Int_t iEntry = 0; iEntry < out->GetEntriesFast(); iEntry++) {
77 TFile* eff =
new TFile(Form(
"eff_%s.root", fTrigger.Data()),
"recreate");
79 new TH1F(
"Eff", Form(
"Efficiency of %s", fTrigger.Data()), triggEffs.size(), 0., triggEffs.size());
81 for (Int_t iMultBin = 0; iMultBin < nMultBins; iMultBin++) {
82 effGr->SetBinContent(iMultBin + 1, (triggEffs.at(iMultBin) > 1.) ? 1. : triggEffs.at(iMultBin));
83 effGr->SetBinError(iMultBin + 1, triggEffErrs.at(iMultBin));
85 Int_t
min = fMultMap.find(iMultBin)->second.first;
86 Int_t
max = fMultMap.find(iMultBin)->second.second;
88 effGr->GetXaxis()->SetBinLabel(iMultBin + 1, Form(
"[%d, %d)",
min,
max));
91 effGr->SetMarkerStyle(20);
92 effGr->SetMarkerColor(kSpring - 6);
93 effGr->SetLineColor(kSpring - 6);
94 effGr->SetLineWidth(1);
95 effGr->GetXaxis()->SetTitle(
"nTracks in V_{p}");
96 effGr->GetYaxis()->SetTitle(
"");
97 effGr->GetXaxis()->SetNdivisions(5);
98 effGr->GetYaxis()->SetNdivisions(5);
99 effGr->GetYaxis()->SetLabelOffset(0.01);
100 effGr->GetXaxis()->SetLabelSize(0.06);
101 effGr->GetYaxis()->SetLabelSize(0.04);
102 effGr->GetXaxis()->SetTitleSize(0.05);
103 effGr->GetYaxis()->SetTitleSize(0.05);
104 effGr->GetXaxis()->SetTitleOffset(0.85);
105 effGr->GetYaxis()->SetTitleOffset(1.5);
106 effGr->GetYaxis()->CenterTitle();
107 effGr->Draw(
"PE1X0");
117 TFile*
f =
new TFile(fSpectraFile.Data());
125 auto it = fMultMap.begin();
127 const Int_t nTrigCond = 2;
129 map<Int_t, pair<TH1F*, TH1F*>> histoMap;
131 for (Int_t iMultBin = 0; iMultBin < nMultBins; iMultBin++) {
132 auto itShifted = next(it, iMultBin);
135 for (Int_t iCond = 0; iCond < nTrigCond; iCond++) {
136 TString hName =
"Target: " + targ
137 + TString::Format(
", Trigger: %s (%s)", fTrigger.Data(),
138 (iCond == TriggConditions::severe) ?
"nominator" :
"denominator")
139 + TString::Format(
", minMult (>=) %d, maxMult (<) %d", itShifted->second.first,
140 itShifted->second.second);
142 TH1F* h = (TH1F*)
f->Get(hName.Data());
146 histoMap[iMultBin] = make_pair(vSet.at(0), vSet.at(1));
149 Double_t mean, sigma = -1.;
150 pair<Double_t, Double_t> T = make_pair(-1., -1.);
151 pair<Double_t, Double_t> B = make_pair(-1., -1.);
153 TFile* out =
new TFile(
"outH.root",
"recreate");
156 vector<TH1F*> denoms;
158 vector<Double_t> nomsSignal;
159 vector<Double_t> denomsSignal;
161 vector<Double_t> errsRelTot;
163 for (
auto histo : histoMap) {
164 TH1F* hNom = histo.second.second;
165 TH1F* hDenom = histo.second.first;
168 Double_t dS = 0., dB = 0., errTotRelNom = 0., errTotRelDenom = 0.;
172 nomsSignal.push_back(T.second - B.second);
174 delete hNom->GetListOfFunctions()->FindObject(
"f");
175 delete hNom->GetListOfFunctions()->FindObject(
"f2");
176 f1 = (TF1*)hNom->GetListOfFunctions()->FindObject(
"f1");
177 f1->SetLineColor(kRed);
178 dS = TMath::Sqrt(T.second - B.second);
181 errTotRelNom = TMath::Sqrt((dS / (T.second - B.second)) * (dS / (T.second - B.second))
182 + (dB / B.second) * (dB / B.second));
187 denomsSignal.push_back(T.second - B.second);
189 delete hDenom->GetListOfFunctions()->FindObject(
"f");
190 delete hDenom->GetListOfFunctions()->FindObject(
"f2");
191 f1 = (TF1*)hDenom->GetListOfFunctions()->FindObject(
"f1");
192 f1->SetLineColor(kRed);
193 dS = TMath::Sqrt(T.second - B.second);
196 errTotRelDenom = TMath::Sqrt((dS / (T.second - B.second)) * (dS / (T.second - B.second))
197 + (dB / B.second) * (dB / B.second));
200 noms.push_back(hNom);
201 denoms.push_back(hDenom);
203 errsRelTot.push_back(TMath::Sqrt(errTotRelNom * errTotRelNom + errTotRelDenom * errTotRelDenom));
206 TCanvas* c =
new TCanvas(
"c",
"c", 1200, 600);
207 c->Divide(nMultBins, 2);
209 gStyle->SetOptStat(0);
210 gStyle->SetTitleFontSize(0.1);
211 gStyle->SetTitleY(1.0);
213 for (Int_t iMultBin = 0; iMultBin < nMultBins; iMultBin++) {
214 TH1F* n = noms.at(iMultBin);
219 TLatex* t1 =
new TLatex();
221 t1->SetTextSize(.045);
222 TString name = n->GetName();
223 name.ReplaceAll(
"Target: PbSnCuAl,",
"")
224 .ReplaceAll(
"Trigger: ",
"")
225 .ReplaceAll(
"nominator",
"nom.")
226 .ReplaceAll(
"minMult",
"nVpTr:")
227 .ReplaceAll(
"maxMult",
"");
228 t1->DrawLatex(.15, .15, name.Data());
229 t1->DrawLatex(.1, .85, Form(
"S (bin cont. in sig. reg. - bckgrnd) = %d", (Int_t)nomsSignal.at(iMultBin)));
231 TH1F*
d = denoms.at(iMultBin);
232 c->cd(iMultBin + 1 + nMultBins);
238 t1->SetTextSize(.045);
240 name.ReplaceAll(
"Target: PbSnCuAl,",
"")
241 .ReplaceAll(
"Trigger: ",
"")
242 .ReplaceAll(
"denominator",
"den.")
243 .ReplaceAll(
"minMult",
"nVpTr:")
244 .ReplaceAll(
"maxMult",
"");
245 t1->DrawLatex(.15, .15, name.Data());
246 t1->SetTextSize(.04);
247 t1->DrawLatex(.15, .85,
248 Form(
"S (bin cont. in sig. reg. - bckgrnd) = %d", (Int_t)denomsSignal.at(iMultBin)));
251 c->SaveAs(Form(
"triggEff_%s_multBins.pdf", fTrigger.Data()));
253 vector<Double_t> triggEffs;
254 for (Int_t iMultBin = 0; iMultBin < nMultBins; iMultBin++)
255 triggEffs.push_back(nomsSignal.at(iMultBin) / denomsSignal.at(iMultBin));
257 TFile* eff =
new TFile(Form(
"eff_%s.root", fTrigger.Data()),
"recreate");
259 new TH1F(
"Eff", Form(
"Efficiency of %s", fTrigger.Data()), triggEffs.size(), 0., triggEffs.size());
261 for (Int_t iMultBin = 0; iMultBin < nMultBins; iMultBin++) {
262 effGr->SetBinContent(iMultBin + 1, (triggEffs.at(iMultBin) > 1.) ? 1. : triggEffs.at(iMultBin));
263 effGr->SetBinError(iMultBin + 1, triggEffs.at(iMultBin) * errsRelTot.at(iMultBin));
265 Int_t
min = fMultMap.find(iMultBin)->second.first;
266 Int_t
max = fMultMap.find(iMultBin)->second.second;
268 effGr->GetXaxis()->SetBinLabel(iMultBin + 1, Form(
"[%d, %d)",
min,
max));
271 effGr->SetMarkerStyle(20);
272 effGr->SetMarkerColor(kSpring - 6);
273 effGr->SetLineColor(kSpring - 6);
274 effGr->SetLineWidth(1);
275 effGr->GetXaxis()->SetTitle(
"nTracks in V_{p}");
276 effGr->GetYaxis()->SetTitle(
"");
277 effGr->GetXaxis()->SetNdivisions(5);
278 effGr->GetYaxis()->SetNdivisions(5);
279 effGr->GetYaxis()->SetLabelOffset(0.01);
280 effGr->GetXaxis()->SetLabelSize(0.06);
281 effGr->GetYaxis()->SetLabelSize(0.04);
282 effGr->GetXaxis()->SetTitleSize(0.05);
283 effGr->GetYaxis()->SetTitleSize(0.05);
284 effGr->GetXaxis()->SetTitleOffset(0.85);
285 effGr->GetYaxis()->SetTitleOffset(1.5);
286 effGr->GetYaxis()->CenterTitle();
287 effGr->Draw(
"PE1X0");
306 cuts = tCutMap.find(target)->second;
310 const Int_t nTrigCond = 2;
311 hSpectra =
new TH1F**[nTrigCond];
312 hMult =
new TH1F*[nTrigCond];
314 auto it = fMultMap.begin();
316 for (Int_t iCond = 0; iCond < nTrigCond; iCond++) {
317 hSpectra[iCond] =
new TH1F*[nMultBins];
319 TString hName =
"Target: " + targ
320 + TString::Format(
", Trigger: %s (%s)", fTrigger.Data(),
321 (iCond == TriggConditions::severe) ?
"nominator" :
"denominator");
323 hMult[iCond] =
new TH1F(hName.Data(), hName.Data(), 100, 0., 100.);
325 for (Int_t iMultBin = 0; iMultBin < nMultBins; iMultBin++) {
326 auto itShifted = next(it, iMultBin);
327 hName =
"Target: " + targ
328 + TString::Format(
", Trigger: %s (%s)", fTrigger.Data(),
329 (iCond == TriggConditions::severe) ?
"nominator" :
"denominator")
330 + TString::Format(
", minMult (>=) %d, maxMult (<) %d", itShifted->second.first,
331 itShifted->second.second);
332 hSpectra[iCond][iMultBin] =
new TH1F(hName.Data(), hName.Data(), 75,
xLow,
xUp);
338 vector<TString> triggsSet;
341 if (fTrigger ==
"BT+FD3" || fTrigger ==
"BT+FD2") {
342 triggsSet.push_back(
"BT+BD2");
343 triggsSet.push_back(
"BT+BD3");
344 }
else if (fTrigger ==
"BT+BD3" || fTrigger ==
"BT+BD2" || fTrigger ==
"BT+BD1") {
345 triggsSet.push_back(
"BT+FD2");
346 triggsSet.push_back(
"BT+FD3");
347 }
else if (fTrigger ==
"BT+BD1+FD2")
351 Fatal(
"BmnTriggerEfficiencyRun7::triggerEfficiency",
"Trigger condition not supported!!!");
355 isAddTriggerCondition = kFALSE;
359 isAddTriggerCondition = kTRUE;
365 TFile*
f =
new TFile(Form(
"out_%s_start%d_finish%d.root", fTrigger.Data(),
fStartRun,
fFinishRun),
"recreate");
367 for (Int_t iCond = 0; iCond < nTrigCond; iCond++)
368 for (Int_t iMultBin = 0; iMultBin < nMultBins; iMultBin++)
369 hSpectra[iCond][iMultBin]->Write();