84 std::cout << std::endl;
85 std::cout << std::endl;
86 std::cout <<
"--- CaloHadDMCoeffCheck::process() --- " << std::endl;
107 m_data->fChain->SetBranchStatus(
"*",0);
108 m_data->fChain->SetBranchStatus(
"mc_ener",1);
109 m_data->fChain->SetBranchStatus(
"mc_eta",1);
110 m_data->fChain->SetBranchStatus(
"mc_phi",1);
111 m_data->fChain->SetBranchStatus(
"mc_pdg",1);
112 m_data->fChain->SetBranchStatus(
"ncls",1);
113 m_data->fChain->SetBranchStatus(
"cls_eta",1);
114 m_data->fChain->SetBranchStatus(
"cls_phi",1);
115 m_data->fChain->SetBranchStatus(
"cls_lambda",1);
116 m_data->fChain->SetBranchStatus(
"cls_calib_emfrac",1);
117 m_data->fChain->SetBranchStatus(
"cls_engcalib",1);
118 m_data->fChain->SetBranchStatus(
"engClusSumCalib",1);
119 m_data->fChain->SetBranchStatus(
"cls_ener_unw",1);
120 m_data->fChain->SetBranchStatus(
"narea",1);
121 m_data->fChain->SetBranchStatus(
"cls_eprep",1);
122 m_data->fChain->SetBranchStatus(
"cls_dmener",1);
123 m_data->fChain->SetBranchStatus(
"cls_smpener_unw",1);
124 m_data->fChain->SetBranchStatus(
"cls_oocener",1);
125 m_data->fChain->SetBranchStatus(
"cls_engcalibpres",1);
127 if( !
m_data->GetEntries() ) {
128 std::cout <<
"CaloHadDMCoeffCheck::process -> Error! No entries in DeadMaterialTree." << std::endl;
132 std::vector<std::vector<std::vector<CaloHadDMCoeffFit::PrepData *> > > ereco;
133 std::vector<std::vector<std::vector<CaloHadDMCoeffFit::PrepData *> > > etrue;
137 for(
int i_area=0; i_area<nArea; i_area++){
140 for(
int i_eta=0; i_eta<
m_netabin; i_eta++){
154 std::cout <<
"CaloHadDMCoeffCheck::process() -> Info. First loop to find histogram limits " << std::endl;
155 for(
int i_ev=0;
m_data->GetEntry(i_ev)>0;i_ev++) {
156 if(i_ev%10000==0) std::cout <<
" i_ev: " << i_ev <<
" '" <<
static_cast<TChain *
>(
m_data->fChain)->GetFile()->GetName() <<
"'" << std::endl;
157 if(
m_data->m_mc_ener <= 0.0) {
158 std::cout <<
"CaloHadDMCoeffCheck::process() -> Warning! Unknown particle energy " <<
m_data->m_mc_ener << std::endl;
163 if(isSingleParticle) {
164 bool GoodClusterFound(
false);
166 HepLorentzVector hlv_pion(1,0,0,1);
168 for(
int i_cls=0; i_cls<
m_data->m_ncls; i_cls++){
169 HepLorentzVector hlv_cls(1,0,0,1);
170 hlv_cls.setREtaPhi(1./cosh( (*
m_data->m_cls_eta)[i_cls] ), (*
m_data->m_cls_eta)[i_cls], (*
m_data->m_cls_phi)[i_cls]);
171 double r = hlv_pion.angle(hlv_cls.vect());
173 && (*
m_data->m_cls_engcalib)[i_cls] > 20.0*MeV
176 GoodClusterFound =
true;
181 if(!GoodClusterFound)
continue;
188 if(mc_etabin <0 || mc_etabin >=
m_netabin || mc_enerbin <0 || mc_enerbin >=
m_nlogenerbin || mc_phibin!=0)
continue;
189 if(
m_data->m_engClusSumCalib <=0.0)
continue;
191 std::vector<std::vector<double > > engDmReco;
193 std::vector<double > engDmRecSumClus;
194 std::vector<double > engDmTrueSumClus;
195 engDmRecSumClus.resize(nArea, 0.0);
196 engDmTrueSumClus.resize(nArea, 0.0);
197 for(
int i_cls=0; i_cls<
m_data->m_ncls; i_cls++){
198 for(
int i_area=0; i_area<
m_HadDMCoeff->getSizeAreaSet(); i_area++){
199 engDmRecSumClus[i_area] += engDmReco[i_cls][i_area];
200 engDmTrueSumClus[i_area] += (*
m_data->m_cls_dmener)[i_cls][i_area];
201 engDmRecSumClus[
m_HadDMCoeff->getSizeAreaSet()] += engDmReco[i_cls][i_area];
202 engDmTrueSumClus[
m_HadDMCoeff->getSizeAreaSet()] += (*
m_data->m_cls_dmener)[i_cls][i_area];
205 for(
int i_area=0; i_area<
m_HadDMCoeff->getSizeAreaSet()+1; i_area++){
206 ereco[i_area][mc_etabin][mc_enerbin]->add(engDmRecSumClus[i_area]);
207 etrue[i_area][mc_etabin][mc_enerbin] ->
add(engDmTrueSumClus[i_area]);
218 for(
int i_area=0; i_area<nArea; i_area++){
221 for(
int i_eta=0; i_eta<
m_netabin; i_eta++){
225 float elimreco = ereco[i_area][i_eta][i_ener]->m_aver + 5.*sqrt(ereco[i_area][i_eta][i_ener]->m_rms);
226 float elimtrue = etrue[i_area][i_eta][i_ener]->m_aver + 5.*sqrt(etrue[i_area][i_eta][i_ener]->m_rms);
227 if(elimreco <=0.0) elimreco = 1.0;
228 if(elimtrue <=0.0) elimtrue = 1.0;
230 sprintf(hname,
"h2_etrue_vs_ereco_dm%d_eta%d_ener%d",i_area, i_eta, i_ener);
231 m_h2_etrue_vs_ereco[i_area][i_eta][i_ener] =
new TH2F(hname, hname, 30, 0.0, elimtrue, 30, 0.0, elimreco);
232 sprintf(hname,
"hp_etrue_vs_ereco_dm%d_eta%d_ener%d",i_area, i_eta, i_ener);
233 m_hp_etrue_vs_ereco[i_area][i_eta][i_ener] =
new TProfile(hname, hname, 30, 0.0, elimtrue);
242 for(
int i_pdg=0; i_pdg<
m_npdg; i_pdg++){
244 for(
int i_area=0; i_area<nArea; i_area++){
246 for(
int i_reco=0; i_reco<
m_nrecobin; i_reco++){
249 sprintf(hname,
"m_hp_engRecoOverTruth_vs_eta_pdg%d_dm%d_reco%d_ener%d",i_pdg,i_area, i_reco, i_ener);
258 for(
int i_pdg=0; i_pdg<
m_npdg; i_pdg++){
260 for(
int i_area=0; i_area<nArea; i_area++){
262 for(
int i_reco=0; i_reco<
m_nrecobin; i_reco++){
266 for(
int i_eta=0; i_eta<
m_netabin; i_eta++){
267 sprintf(hname,
"m_engRecSpect_pdg%d_dm%d_reco%d_ener%d_eta%d",i_pdg,i_area, i_reco, i_ener, i_eta);
268 TH1F *h1 =
new TH1F(hname, hname, 110, -0.2, 2.0);
279 std::cout <<
"CaloHadDMCoeffCheck::process() -> Info. Second loop to fill histogram " << std::endl;
280 for(
int i_ev=0;
m_data->GetEntry(i_ev)>0;i_ev++) {
281 if(i_ev%10000==0) std::cout <<
" i_ev: " << i_ev <<
" '" <<
static_cast<TChain *
>(
m_data->fChain)->GetFile()->GetName() <<
"'" << std::endl;
286 if(mc_etabin <0 || mc_etabin >=
m_netabin || mc_enerbin <0 || mc_enerbin >=
m_nlogenerbin || mc_phibin!=0)
continue;
287 if(
m_data->m_engClusSumCalib <=0.0)
continue;
290 if( abs(
m_data->m_mc_pdg)==211) {
296 std::vector<std::vector<double > > engDmReco;
298 std::vector<double > engDmRecSumClus;
299 std::vector<double > engDmTrueSumClus;
300 engDmRecSumClus.resize(nArea, 0.0);
301 engDmTrueSumClus.resize(nArea, 0.0);
302 double engClusSumCalib = 0.0;
303 double engClusSumOOC = 0.0;
304 double engClusSumDM = 0.0;
305 double engClusSumCalibInPresampler = 0.0;
307 for(
int i_cls=0; i_cls<
m_data->m_ncls; i_cls++){
308 engClusSumCalib +=
m_data->m_cls_engcalib ? (*
m_data->m_cls_engcalib)[i_cls] : 0.0;
309 engClusSumOOC +=
m_data->m_cls_oocener ? (*
m_data->m_cls_oocener)[i_cls] : 0.0;
310 engClusSumCalibInPresampler +=
m_data->m_cls_engcalibpres ? (*
m_data->m_cls_engcalibpres)[i_cls] : 0.0;
311 for(
int i_area=0; i_area<
m_HadDMCoeff->getSizeAreaSet(); i_area++){
312 engDmRecSumClus[i_area] += engDmReco[i_cls][i_area];
313 engDmTrueSumClus[i_area] +=
m_data->m_cls_dmener ? (*
m_data->m_cls_dmener)[i_cls][i_area] : 0.0;
314 engDmRecSumClus[
m_HadDMCoeff->getSizeAreaSet()] += engDmReco[i_cls][i_area];
316 m_data->m_cls_dmener ? (*
m_data->m_cls_dmener)[i_cls][i_area] : 0.0;
317 engClusSumDM +=
m_data->m_cls_dmener ? (*
m_data->m_cls_dmener)[i_cls][i_area] : 0.0;
320 for(
int i_area=0; i_area<
m_HadDMCoeff->getSizeAreaSet()+1; i_area++){
321 m_h2_etrue_vs_ereco[i_area][mc_etabin][mc_enerbin]->Fill(engDmTrueSumClus[i_area], engDmRecSumClus[i_area]);
322 m_hp_etrue_vs_ereco[i_area][mc_etabin][mc_enerbin]->Fill(engDmTrueSumClus[i_area], engDmRecSumClus[i_area]);
326 double sum = engClusSumCalib + engClusSumOOC + engClusSumDM - engClusSumCalibInPresampler;
327 for(
int i_area=0; i_area<
m_HadDMCoeff->getSizeAreaSet()+1; i_area++){
328 for(
int i_reco=0; i_reco<
m_nrecobin; i_reco++){
329 double engReco = 0.0;
331 engReco = sum - engDmTrueSumClus[i_area] + engDmRecSumClus[i_area];
335 engReco = sum - engDmTrueSumClus[i_area];
337 std::cout <<
"panic" << std::endl;
340 m_engRecSpect[i_pdg][i_area][i_reco][mc_enerbin][mc_etabin]->Fill(engReco/
m_data->m_mc_ener);
349 TF1 *fun_p1 =
new TF1(
"fun_udeg3",
"[0]+[1]*x",1.,200000.);
350 for(
int i_area=0; i_area<nArea; i_area++){
351 for(
int i_eta=0; i_eta<
m_netabin; i_eta++){
354 if(hp->GetEntries() < 100)
continue;
355 float fitlim1 = hp->GetBinCenter(2);
356 float fitlim2 = hp->GetBinCenter(30);
357 hp->Fit(fun_p1,
"0Q",
"",fitlim1,fitlim2);
358 TF1 *f=hp->GetFunction(fun_p1->GetName());
360 f->ResetBit(TF1::kNotDraw);
380 const char *a_title[
sDM] = {
392 int a_enerbin_sel[] = {12, 15};
393 int a_etabin_sel[] = {2, 7, 10, 18};
407 std::cout <<
"CaloHadDMCoeffCheck::make_report() -> Info. Making report..." << std::endl;
408 gStyle->SetCanvasColor(10);
409 gStyle->SetCanvasBorderMode(0);
410 gStyle->SetPadColor(10);
411 gStyle->SetPadBorderMode(0);
412 gStyle->SetPalette(1);
413 gStyle->SetTitleBorderSize(1);
414 gStyle->SetTitleFillColor(10);
415 int cc_xx = 768, cc_yy = 1024;
417 gROOT->SetBatch(kTRUE);
419 std::string sfname = sreport;
420 TCanvas *ctmp =
new TCanvas(
"ctmp",
"ctmp", cc_xx, cc_yy);
422 ctmp->Print(sfname.c_str());
427 tex.SetTextSize(0.05);
429 TCanvas *c1ps =
new TCanvas(
"c1ps",
"c1ps", cc_xx, cc_yy);
430 for(
int i_ener=0; i_ener<int(
sizeof(a_enerbin_sel)/
sizeof(
int)); i_ener++){
431 int i_ener_sel = a_enerbin_sel[i_ener];
432 for(
int i_eta=0; i_eta<int(
sizeof(a_etabin_sel)/
sizeof(
int)); i_eta++){
433 int i_eta_sel = a_etabin_sel[i_eta];
436 for(
int i_area=0; i_area<int(
sizeof(a_area_sel)/
sizeof(
int)); i_area++){
437 int i_area_sel = a_area_sel[i_area];
439 gPad->SetLeftMargin(0.12);
440 gPad->SetTopMargin(0.20);
441 sprintf(
str,
"%s ener%d eta%d dm%d",a_title[i_area_sel], i_ener_sel, i_eta_sel, i_area);
444 h->GetXaxis()->SetTitle(
"E_{DM} True");
445 h->GetYaxis()->SetTitle(
"E_{DM} Reco");
446 h->GetYaxis()->SetTitleOffset(1.6);
447 h->GetYaxis()->SetNdivisions(508);
448 h->GetXaxis()->SetNdivisions(508);
451 h->SetLineColor(kRed);
452 h->SetMarkerColor(kRed);
454 sprintf(
str,
"E = %3.1f-%3.1f GeV",
457 tex.SetTextSize(0.05);
458 tex.DrawLatex(0.2,0.85,
str);
460 tex.DrawLatex(0.2,0.78,
str);
462 c1ps->Print(sfname.c_str());
467 int a_color[] = {kRed, kBlue, kGreen};
468 for(
int i_pdg=0; i_pdg<
m_npdg; i_pdg++){
469 for(
int i_ener=0; i_ener<int(
sizeof(a_enerbin_sel)/
sizeof(
int)); i_ener++){
470 int i_ener_sel = a_enerbin_sel[i_ener];
473 sprintf(cname,
"c2ps_engRecoOverTruth_%d_%d",i_pdg, i_ener);
474 TCanvas *c1 =
new TCanvas(cname, cname, cc_xx, cc_yy);
476 sprintf(cname,
"c2ps_engRecoOverTruth_%d_%d_pad1",i_pdg, i_ener);
477 TPad *c1_pad1 =
new TPad(cname, cname, 0.0, 0.9, 1.0, 1.0); c1_pad1->Draw();
478 sprintf(cname,
"c2ps_engRecoOverTruth_%d_%d_pad2",i_pdg, i_ener);
479 TPad *c1_pad2 =
new TPad(cname, cname, 0.0, 0.0, 1.0, 0.9); c1_pad2->Draw();
482 sprintf(
str,
"pdg:%d E = %3.1f-%3.1f GeV",i_pdg,
485 tex.SetTextSize(0.12);
486 tex.DrawLatex(0.1, 0.5,
str);
488 c1_pad2->Divide(3,3);
489 for(
int i_area=0; i_area<int(
sizeof(a_area_sel)/
sizeof(
int)); i_area++){
490 int i_area_sel = a_area_sel[i_area];
491 c1_pad2->cd(i_area+1); gPad->SetGrid();
492 for(
int i_reco=0; i_reco<
m_nrecobin; i_reco++){
494 hp->SetLineColor(a_color[i_reco]);
497 hp->GetXaxis()->SetTitle(
"mc_eta");
498 hp->GetYaxis()->SetTitle(
"engReco / engTruth");
499 hp->SetTitle(a_title[i_area_sel]);
507 std::cout <<
"adding " << i_pdg <<
" " << i_ener << std::endl;
508 c1->Print(sfname.c_str());
510 sprintf(cname,
"c2ps_engResolution_%d_%d",i_pdg, i_ener);
511 TCanvas *c2 =
new TCanvas(cname, cname, cc_xx, cc_yy);
513 sprintf(cname,
"c2ps_engResolution_%d_%d_pad1",i_pdg, i_ener);
514 TPad *c2_pad1 =
new TPad(cname, cname, 0.0, 0.9, 1.0, 1.0); c2_pad1->Draw();
515 sprintf(cname,
"c2ps_engResolution_%d_%d_pad2",i_pdg, i_ener);
516 TPad *c2_pad2 =
new TPad(cname, cname, 0.0, 0.0, 1.0, 0.9); c2_pad2->Draw();
519 sprintf(
str,
"pdg:%d E = %3.1f-%3.1f GeV (resolution)",i_pdg,
522 tex.SetTextSize(0.12);
523 tex.DrawLatex(0.1, 0.5,
str);
525 c2_pad2->Divide(3,3);
527 h1ref->SetMaximum(0.25);
528 h1ref->SetMinimum(0.0);
529 h1ref->GetXaxis()->SetTitle(
"#eta");
530 h1ref->GetYaxis()->SetTitle(
"#sigma_{E}/E");
532 for(
int i_area=0; i_area<int(
sizeof(a_area_sel)/
sizeof(
int)); i_area++){
533 int i_area_sel = a_area_sel[i_area];
534 c2_pad2->cd(i_area+1); gPad->SetGrid();
535 h1ref->SetTitle(a_title[i_area_sel]);
538 for(
int i_reco=0; i_reco<
m_nrecobin; i_reco++){
540 for(
int i_eta=0; i_eta<
m_netabin; i_eta++){
541 std::cout <<
" i_pdg:" << i_pdg
542 <<
" i_area_sel:" << i_area_sel
543 <<
" i_reco:" << i_reco
544 <<
" i_ener_sel:" << i_ener_sel
545 <<
" i_eta:" << i_eta
547 TH1F *h1 =
m_engRecSpect[i_pdg][i_area_sel][i_reco][i_ener_sel][i_eta];
549 std::cout <<
" panic, h1==0" << std::endl;
552 if(h1->GetMean() == 0.0) {
553 std::cout <<
" Resolution() -> Warning! Skipping point, no energy i_ener:" << i_ener_sel
555 <<
" mean2:" << h1->GetMean()
556 <<
" nent2:" << h1->GetEntries() << std::endl;
561 float mean3(0), rms3(0);
565 gr->SetPoint(i_eta,
m_etamin + (i_eta+0.5)*
m_deta, h1->GetRMS()/h1->GetMean());
568 gr->SetLineColor(a_color[i_reco]);
569 gr->SetMarkerColor(a_color[i_reco]);
570 gr->SetMarkerSize(1.0);
574 c2->Print(sfname.c_str());
581 ctmp->Print(sfname.c_str());