23 #include "TCollection.h"
58 std::map<TString, std::vector<booky_page> >
booky_map;
64 std::vector<TString> histnames_neutral;
65 std::vector<TString> histnames_charged;
67 histnames_neutral.push_back(TString(
"hMIsobarMC_Kpi"));
68 histnames_neutral.push_back(TString(
"spacer"));
69 histnames_neutral.push_back(TString(
"hGJMC_Kpi"));
70 histnames_neutral.push_back(TString(
"hTYMC_Kpi"));
71 histnames_neutral.push_back(TString(
"hHThetaMC_Kpi"));
72 histnames_neutral.push_back(TString(
"hHPhiMC_Kpi"));
74 histnames_charged.push_back(TString(
"hMIsobarMC_pipi"));
75 histnames_charged.push_back(TString(
"spacer"));
76 histnames_charged.push_back(TString(
"hGJMC_pipi"));
77 histnames_charged.push_back(TString(
"hTYMC_pipi"));
78 histnames_charged.push_back(TString(
"hHThetaMC_pipi"));
79 histnames_charged.push_back(TString(
"hHPhiMC_pipi"));
81 booky_setup_map.insert(std::pair<TString, std::vector<TString> >(
"Booky_Kpi_isobar", histnames_neutral));
82 booky_setup_map.insert(std::pair<TString, std::vector<TString> >(
"Booky_pipi_isobar", histnames_charged));
91 std::map<TString, std::vector<booky_page> >::iterator it;
92 for(it = booky_map.begin(); it != booky_map.end(); it++) {
93 TString psFileName(it->first);
94 psFileName.Append(
".ps");
95 TCanvas dummyCanv(
"dummy",
"dummy", 800, 800);
96 dummyCanv.Print((psFileName +
"["));
98 std::vector<booky_page> vec = it->second;
101 for (
unsigned int i = 0;
i < vec.size();
i++) {
103 if (vec[
i].page_title.Length() == 0) {
104 textlabel =
"#scale[0.5]{Mass Bin ";
110 textlabel +=
"] MeV/c^{2}}";
113 textlabel = vec[
i].page_title;
115 TLatex label(0.37, 1.0, textlabel);
117 label.SetTextAlign(23);
118 vec[
i].page_canvas->cd();
121 vec[
i].page_canvas->Print(psFileName);
123 dummyCanv.Print((psFileName +
"]"));
127 void fillDiffvsMassPlot(
const TH1D* hist, std::string dirname,
int massbins,
double mass_start,
double mass_end,
128 std::map<std::string, std::pair<
double, std::pair<double, double> > > diffbounds, TFile* ofile) {
132 int pos = dirname.find(
".");
133 std::string masslow = dirname.substr(0, pos+1);
134 std::string masshigh = dirname.substr(pos+1);
135 double mass = atof(masslow.c_str()) + atof(masshigh.c_str());
138 std::string s(hist->GetName());
139 std::map<std::string, std::pair<double, std::pair<double, double> > >::iterator iter = diffbounds.find(s);
140 s.insert(s.size(),
"vsMass");
141 TH2D* hdiffvsmass = (TH2D*)ofile->Get((std::string(
"global/")+s).c_str());
143 TCanvas *c =
new TCanvas(s.c_str(), s.c_str(), 800, 800);
144 hdiffvsmass =
new TH2D(s.c_str(), hist->GetTitle(), massbins, mass_start, mass_end,
145 hist->GetNbinsX(), iter->second.second.first, iter->second.second.second);
147 hdiffvsmass->SetXTitle(
"Resonance Mass [GeV/c^{2}]");
148 hdiffvsmass->SetYTitle(hist->GetXaxis()->GetTitle());
149 hdiffvsmass->SetMaximum(iter->second.first);
150 hdiffvsmass->SetMinimum(-iter->second.first);
151 hdiffvsmass->SetStats(0);
152 hdiffvsmass->Draw(
"colz");
156 std::vector<booky_page>& tempvec = booky_map[
"Booky_mass_overview"];
161 for(
int i = 0;
i < hist->GetNbinsX();
i++) {
162 double diffpos = hist->GetBinCenter(
i);
163 double diffval = hist->GetBinContent(
i);
165 hdiffvsmass->Fill(mass, diffpos, diffval);
171 if (mchist && datahist && diffhist && reldiffhist) {
172 double scale = datahist->Integral();
173 scale = scale / (mchist->Integral());
174 mchist->Scale(scale);
176 double max = mchist->GetMaximum();
177 if(datahist->GetMaximum() > max)
178 mchist->SetMaximum(datahist->GetMaximum());
180 datahist->SetMaximum(max);
183 mchist->GetXaxis()->SetRangeUser(0.0, pow(mass,2));
184 mchist->GetYaxis()->SetRangeUser(0.0, pow(mass,2));
185 datahist->GetXaxis()->SetRangeUser(0.0, pow(mass,2));
186 datahist->GetYaxis()->SetRangeUser(0.0, pow(mass,2));
187 diffhist->GetXaxis()->SetRangeUser(0.0, pow(mass,2));
188 diffhist->GetYaxis()->SetRangeUser(0.0, pow(mass,2));
189 reldiffhist->GetXaxis()->SetRangeUser(0.0, pow(mass,2));
190 reldiffhist->GetYaxis()->SetRangeUser(0.0, pow(mass,2));
191 reldiffhist->SetMaximum(1.0);
192 reldiffhist->SetMinimum(-1.0);
195 TString s(
"setDiffColorStyle(");
200 sprintf(name,
"%s_%f", mchist->GetName(),
mass);
201 TCanvas *c =
new TCanvas(name, mchist->GetTitle(), 800, 800);
204 mchist->Draw(
"colz");
207 TExec *ex1 =
new TExec(
"ex1",
"gStyle->SetPalette(1);");
209 mchist->Draw(
"colz same");
211 datahist->Draw(
"colz");
214 TExec *ex2 =
new TExec(
"ex2",
"gStyle->SetPalette(1);");
216 datahist->Draw(
"colz same");
218 diffhist->Draw(
"colz");
220 TExec *ex3 =
new TExec(
"ex3", s);
222 diffhist->Draw(
"colz same");
224 reldiffhist->Draw(
"colz");
226 TExec *ex4 =
new TExec(
"ex4", s);
228 reldiffhist->Draw(
"colz same");
234 std::vector<booky_page>& tempvec = booky_map[mchist->GetName()];
246 unsigned int pointpos = dirname.find(
".");
247 if (!(pointpos == 0 || pointpos == dirname.size())) {
248 std::string masslow = dirname.substr(0, pointpos + 1);
249 std::string masshigh = dirname.substr(pointpos + 1);
250 massstart =
atoi(masslow.c_str());
251 massend =
atoi(masshigh.c_str());
252 mass = 1.0 * (massstart + massend) / 2 / 1000;
255 std::map<TString, std::vector<TString> >::iterator it;
256 for (it = booky_setup_map.begin(); it != booky_setup_map.end(); it++) {
257 TString name(it->first.Data());
258 name += dirname.c_str();
260 if (it->first ==
"Booky_Kpi_isobar"){
261 isoname =
"(K^{-} #pi^{+})";
263 isoname =
"(#pi^{-} #pi^{+})";
266 TCanvas *c =
new TCanvas(name,
"", 800, 800);
268 std::vector<TString> histlist = it->second;
270 for (
unsigned int i = 0;
i < histlist.size();
i++) {
272 if (histlist[
i].CompareTo(
"spacer")) {
273 TIter histiter = TIter(mclist);
274 TH1D *reldiffhist, *diffhist, *mchist, *datahist;
276 std::string hnamemc(histlist[
i].Data());
278 std::string hnamediff(hnamemc);
279 int pos = hnamemc.find(
"MC");
280 hnamediff.erase(pos, 2);
281 hnamediff.insert(pos,
"Diff");
283 std::string hnamereldiff(hnamemc);
284 hnamereldiff.erase(pos, 2);
285 hnamereldiff.insert(pos,
"RelDiff");
287 std::string hnamedata(hnamemc);
288 hnamedata.erase(pos, 2);
289 hnamedata.insert(pos,
"Data");
291 infile->GetObject((dirname +
"/" + hnamereldiff).c_str(), reldiffhist);
292 infile->GetObject((dirname +
"/" + hnamediff).c_str(), diffhist);
293 infile->GetObject((dirname +
"/" + hnamedata).c_str(), datahist);
294 infile->GetObject((dirname +
"/" + hnamemc).c_str(), mchist);
296 outfile->cd(dirname.c_str());
297 if (mchist && datahist) {
299 title << isoname <<
" " << mchist->GetXaxis()->GetTitle();
300 mchist->GetXaxis()->SetTitle( title.str().c_str() );
302 title << isoname <<
" " << datahist->GetXaxis()->GetTitle();
303 datahist->GetXaxis()->SetTitle( title.str().c_str() );
308 double scale = datahist->Integral();
309 scale = scale / (mchist->Integral());
310 mchist->Scale(scale);
312 mchist->SetLineColor(kRed);
313 mchist->SetFillColor(kRed);
315 datahist->Draw(
"same");
317 title << isoname <<
" " << diffhist->GetXaxis()->GetTitle();
318 diffhist->GetXaxis()->SetTitle( title.str().c_str() );
321 title << isoname <<
" " << reldiffhist->GetXaxis()->GetTitle();
322 reldiffhist->GetXaxis()->SetTitle( title.str().c_str() );
325 TLine* line =
new TLine(mchist->GetXaxis()->GetXmin(), 0, mchist->GetXaxis()->GetXmax(), 0);
326 line->SetLineStyle(3);
328 diffhist->SetLineColor(kOrange - 3);
329 diffhist->Draw(
"same");
331 double max = mchist->GetMaximum();
332 double min = mchist->GetMinimum();
333 if (max < datahist->GetMaximum())
334 max = datahist->GetMaximum();
336 min = diffhist->GetMinimum();
337 mchist->GetYaxis()->SetRangeUser(diffhist->GetMinimum() * 1.5, max * 1.2);
345 std::vector<booky_page>& tempvec = booky_map[it->first];
363 gROOT->SetStyle(
"Plain");
364 gStyle->SetTitleFont(10*13+2,
"xyz");
365 gStyle->SetTitleSize(0.06,
"xyz");
366 gStyle->SetTitleOffset(1.3,
"y");
367 gStyle->SetTitleOffset(1.3,
"z");
368 gStyle->SetLabelFont(10*13+2,
"xyz");
369 gStyle->SetLabelSize(0.06,
"xyz");
370 gStyle->SetLabelOffset(0.009,
"xyz");
371 gStyle->SetPadBottomMargin(0.16);
372 gStyle->SetPadTopMargin(0.16);
373 gStyle->SetPadLeftMargin(0.16);
374 gStyle->SetPadRightMargin(0.16);
375 gStyle->SetOptTitle(0);
376 gStyle->SetOptStat(0);
378 gStyle->SetFrameFillColor(0);
379 gStyle->SetFrameFillStyle(0);
380 TGaxis::SetMaxDigits(3);
384 double mass= 0.0, massstart =1000.0, massend=0.0;
385 std::map<std::string, std::pair<double, std::pair<double, double> > > diffbounds;
387 TFile* infile = TFile::Open(input_filename,
"READ");
388 TFile* outfile =
new TFile(output_filename,
"RECREATE");
389 outfile->mkdir(
"global");
391 TList *dirlist = infile->GetListOfKeys();
392 massbins = dirlist->GetSize();
394 TIter diriter(dirlist);
397 std::cout<<
"scanning directories and creating overview canvases..." <<std::endl;
398 while ((dir = (TDirectory *)diriter())) {
399 std::string dirname = dir->GetName();
401 unsigned int pointpos = dirname.find(
".");
402 if(pointpos == 0 || pointpos == dirname.size())
continue;
403 std::string masslow = dirname.substr(0, pointpos+1);
404 std::string masshigh = dirname.substr(pointpos+1);
405 double massstarttemp = atof(masslow.c_str())/1000;
406 double massendtemp = atof(masshigh.c_str())/1000;
409 mass = (massstarttemp + massendtemp)/2;
410 if(massstart > massstarttemp) massstart = massstarttemp;
411 if(massend < massendtemp) massend = massendtemp;
414 outfile->mkdir(dir->GetName());
415 infile->cd(dir->GetName());
419 TList *histlist = gDirectory->GetListOfKeys();
420 TIter histiter(histlist);
422 while ((obj = histiter())) {
423 TString s(obj->GetName());
426 else if(s.Contains(
"MC_"))
430 histiter = TIter(&mclist);
431 TH1D *diffhist, *mchist;
432 while ((mchist = (TH1D*)histiter())) {
434 std::string hnamemc(mchist->GetName());
436 std::string hnamediff(hnamemc);
437 int pos = hnamemc.find(
"MC");
438 hnamediff.erase(pos, 2);
439 hnamediff.insert(pos,
"Diff");
441 infile->GetObject((std::string(dir->GetName())+
"/"+hnamediff).c_str(), diffhist);
445 std::pair<double, std::pair<double, double> >
p;
448 double maxdiff = diffhist->GetMaximum();
449 double maxdifftemp = diffhist->GetMinimum();
450 if(abs(maxdifftemp) > maxdiff) maxdiff = maxdifftemp;
452 double diffmintemp = diffhist->GetXaxis()->GetXmin();
453 double diffmaxtemp = diffhist->GetXaxis()->GetXmax();
454 std::map<std::string, std::pair<double, std::pair<double, double> > >::iterator iter = diffbounds.find(
455 diffhist->GetName());
456 if (iter != diffbounds.end()) {
457 p.first = iter->second.first;
458 p.second.first = iter->second.second.first;
459 p.second.second = iter->second.second.second;
461 if (iter->second.first < maxdiff) {
465 if (iter->second.second.first > diffmintemp) {
467 p.second.first = diffmintemp;
469 if (iter->second.second.second < diffmaxtemp) {
471 p.second.second = diffmaxtemp;
475 diffbounds[diffhist->GetName()] =
p;
480 p.second.first = diffmintemp;
481 p.second.second = diffmaxtemp;
482 diffbounds.insert(std::pair<std::string, std::pair<
double, std::pair<double, double> > >(diffhist->GetName(),
487 histiter = TIter(&mclist);
488 TH2D *reldiffhist2d, *diffhist2d, *mchist2d, *datahist2d;
489 while ((mchist2d = (TH2D*) histiter())) {
491 std::string hnamemc(mchist2d->GetName());
493 std::string hnamediff(hnamemc);
494 int pos = hnamemc.find(
"MC");
495 hnamediff.erase(pos, 2);
496 hnamediff.insert(pos,
"Diff");
498 std::string hnamereldiff(hnamemc);
499 hnamereldiff.erase(pos, 2);
500 hnamereldiff.insert(pos,
"RelDiff");
502 std::string hnamedata(hnamemc);
503 hnamedata.erase(pos, 2);
504 hnamedata.insert(pos,
"Data");
506 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamereldiff).c_str(), reldiffhist2d);
507 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamediff).c_str(), diffhist2d);
508 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamedata).c_str(), datahist2d);
509 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamemc).c_str(), mchist2d);
511 outfile->cd(dir->GetName());
516 dirlist = infile->GetListOfKeys();
518 diriter = TIter(dirlist);
520 std::cout <<
"creating global histograms and 2D diff vs mass plots..." << std::endl;
521 while ((dir = (TDirectory *) diriter())) {
522 std::string dirname = dir->GetName();
524 unsigned int pointpos = dirname.find(
".");
525 if (pointpos == 0 || pointpos == dirname.size())
528 infile->cd(dir->GetName());
532 TList *histlist = gDirectory->GetListOfKeys();
533 TIter histiter(histlist);
535 while ((obj = histiter())) {
536 TString s(obj->GetName());
537 if (s.EndsWith(
"MC"))
539 else if (s.Contains(
"MC_"))
542 histiter = TIter(&mclist);
544 TH1D *diffhist, *mchist, *datahist;
545 while ((hist = (TH1D*) histiter())) {
547 std::string hnamemc(hist->GetName());
549 std::string hname(hnamemc);
550 int pos = hnamemc.find(
"MC");
552 hname.insert(pos,
"Diff");
554 std::string hnamedata(hnamemc);
555 hnamedata.erase(pos, 2);
556 hnamedata.insert(pos,
"Data");
558 std::string hnamemcglob(hnamemc);
559 hnamemcglob.insert(pos + 2,
"Global");
561 std::string hnamedataglob(hnamemc);
562 hnamedataglob.erase(pos, 2);
563 hnamedataglob.insert(pos,
"DataGlobal");
565 infile->GetObject((std::string(dir->GetName()) +
"/" + hname +
";1").c_str(), diffhist);
566 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamedata +
";1").c_str(), datahist);
567 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamemc +
";1").c_str(), mchist);
570 outfile->cd(
"global");
571 TH1D* hmcglob = (TH1D*) outfile->Get(std::string(
"global/"+hnamemcglob).c_str());
573 hmcglob =
new TH1D(hnamemcglob.c_str(), mchist->GetTitle(), mchist->GetNbinsX(),
574 mchist->GetXaxis()->GetXmin(), mchist->GetXaxis()->GetXmax());
575 hmcglob->Add(mchist);
576 TH1D* hdataglob = (TH1D*) outfile->Get(std::string(
"global/"+hnamedataglob).c_str());
577 if (hdataglob == NULL)
578 hdataglob =
new TH1D(hnamedataglob.c_str(), datahist->GetTitle(), datahist->GetNbinsX(),
579 datahist->GetXaxis()->GetXmin(), datahist->GetXaxis()->GetXmax());
580 hdataglob->Add(datahist);
583 fillDiffvsMassPlot(diffhist, dir->GetName(), massbins, massstart, massend, diffbounds, outfile);
586 histiter = TIter(&mclist);
587 TH2D *mchist2d, *datahist2d;
588 while ((mchist2d = (TH2D*) histiter())) {
590 std::string hnamemc(mchist2d->GetName());
592 std::string hnamediff(hnamemc);
593 int pos = hnamemc.find(
"MC");
594 hnamediff.erase(pos, 2);
595 hnamediff.insert(pos,
"Diff");
597 std::string hnamedata(hnamemc);
598 hnamedata.erase(pos, 2);
599 hnamedata.insert(pos,
"Data");
601 std::string hnamemcglob(hnamemc);
602 hnamemcglob.insert(pos + 2,
"Global");
604 std::string hnamedataglob(hnamemc);
605 hnamedataglob.erase(pos, 2);
606 hnamedataglob.insert(pos,
"DataGlobal");
608 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamedata +
";1").c_str(), datahist2d);
609 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamemc +
";1").c_str(), mchist2d);
612 outfile->cd(
"global");
613 TH2D* hmcglob = (TH2D*) outfile->Get(std::string(
"global/" + hnamemcglob).c_str());
614 if (hmcglob == NULL) {
615 hmcglob =
new TH2D(hnamemcglob.c_str(), mchist2d->GetTitle(), mchist->GetNbinsX(),
616 mchist2d->GetXaxis()->GetXmin(), mchist2d->GetXaxis()->GetXmax(), mchist2d->GetNbinsY(),
617 mchist2d->GetYaxis()->GetXmin(), mchist2d->GetYaxis()->GetXmax());
618 hmcglob->SetXTitle(mchist2d->GetXaxis()->GetTitle());
619 hmcglob->SetYTitle(mchist2d->GetYaxis()->GetTitle());
621 hmcglob->Add(mchist2d);
622 TH2D* hdataglob = (TH2D*) outfile->Get(std::string(
"global/" + hnamedataglob).c_str());
623 if (hdataglob == NULL) {
624 hdataglob =
new TH2D(hnamedataglob.c_str(), datahist2d->GetTitle(), datahist2d->GetNbinsX(),
625 datahist2d->GetXaxis()->GetXmin(), datahist2d->GetXaxis()->GetXmax(), datahist2d->GetNbinsY(),
626 datahist2d->GetYaxis()->GetXmin(), datahist2d->GetYaxis()->GetXmax());
627 hdataglob->SetXTitle(datahist2d->GetXaxis()->GetTitle());
628 hdataglob->SetYTitle(datahist2d->GetYaxis()->GetTitle());
630 hdataglob->Add(datahist2d);
637 std::cout<<
"saving to disk..." <<std::endl;
639 std::cout<<
"done!" <<std::endl;