23 #include "TCollection.h"
56 std::map<TString, std::vector<booky_page> >
booky_map;
62 std::vector<TString> histnames_neutral;
63 std::vector<TString> histnames_charged;
65 histnames_neutral.push_back(TString(
"hMIsobarMC_Neutral"));
66 histnames_neutral.push_back(TString(
"spacer"));
67 histnames_neutral.push_back(TString(
"hGJMC_Neutral"));
68 histnames_neutral.push_back(TString(
"hTYMC_Neutral"));
69 histnames_neutral.push_back(TString(
"hHThetaMC_Neutral"));
70 histnames_neutral.push_back(TString(
"hHPhiMC_Neutral"));
72 histnames_charged.push_back(TString(
"hMIsobarMC_Charged"));
73 histnames_charged.push_back(TString(
"spacer"));
74 histnames_charged.push_back(TString(
"hGJMC_Charged"));
75 histnames_charged.push_back(TString(
"hTYMC_Charged"));
76 histnames_charged.push_back(TString(
"hHThetaMC_Charged"));
77 histnames_charged.push_back(TString(
"hHPhiMC_Charged"));
79 booky_setup_map.insert(std::pair<TString, std::vector<TString> >(
"Booky_neutral_isobar", histnames_neutral));
80 booky_setup_map.insert(std::pair<TString, std::vector<TString> >(
"Booky_charged_isobar", histnames_charged));
89 std::map<TString, std::vector<booky_page> >::iterator it;
90 for(it = booky_map.begin(); it != booky_map.end(); it++) {
91 TString psFileName(it->first);
92 psFileName.Append(
".ps");
93 TCanvas dummyCanv(
"dummy",
"dummy");
94 dummyCanv.Print((psFileName +
"["));
96 std::vector<booky_page> vec = it->second;
99 for (
unsigned int i = 0;
i < vec.size();
i++) {
101 if (vec[
i].page_title.Length() == 0) {
102 textlabel =
"#scale[0.5]{Mass Bin ";
108 textlabel +=
"] MeV/c^{2}}";
111 textlabel = vec[
i].page_title;
113 TLatex label(0.37, 1.0, textlabel);
115 label.SetTextAlign(23);
116 vec[
i].page_canvas->cd();
119 vec[
i].page_canvas->Print(psFileName);
121 dummyCanv.Print((psFileName +
"]"));
125 void fillDiffvsMassPlot(
const TH1D* hist, std::string dirname,
int massbins,
double mass_start,
double mass_end,
126 std::map<std::string, std::pair<
double, std::pair<double, double> > > diffbounds, TFile* ofile) {
130 int pos = dirname.find(
".");
131 std::string masslow = dirname.substr(0, pos+1);
132 std::string masshigh = dirname.substr(pos+1);
133 double mass = atof(masslow.c_str()) + atof(masshigh.c_str());
136 std::string s(hist->GetName());
137 std::map<std::string, std::pair<double, std::pair<double, double> > >::iterator iter = diffbounds.find(s);
138 s.insert(s.size(),
"vsMass");
139 TH2D* hdiffvsmass = (TH2D*)ofile->Get((std::string(
"global/")+s).c_str());
141 TCanvas *c =
new TCanvas(s.c_str(), s.c_str());
142 hdiffvsmass =
new TH2D(s.c_str(), hist->GetTitle(), massbins, mass_start, mass_end,
143 hist->GetNbinsX(), iter->second.second.first, iter->second.second.second);
145 hdiffvsmass->SetXTitle(
"Resonance Mass [GeV/c^{2}]");
146 hdiffvsmass->SetYTitle(hist->GetXaxis()->GetTitle());
147 hdiffvsmass->SetMaximum(iter->second.first);
148 hdiffvsmass->SetMinimum(-iter->second.first);
149 hdiffvsmass->SetStats(0);
150 hdiffvsmass->Draw(
"colz");
154 std::vector<booky_page>& tempvec = booky_map[
"Booky_mass_overview"];
159 for(
int i = 0;
i < hist->GetNbinsX();
i++) {
160 double diffpos = hist->GetBinCenter(
i);
161 double diffval = hist->GetBinContent(
i);
163 hdiffvsmass->Fill(mass, diffpos, diffval);
169 if (mchist && datahist && diffhist && reldiffhist) {
170 double scale = datahist->Integral();
171 scale = scale / (mchist->Integral());
172 mchist->Scale(scale);
174 double max = mchist->GetMaximum();
175 if(datahist->GetMaximum() > max)
176 mchist->SetMaximum(datahist->GetMaximum());
178 datahist->SetMaximum(max);
181 mchist->GetXaxis()->SetRangeUser(0.0, pow(mass,2));
182 mchist->GetYaxis()->SetRangeUser(0.0, pow(mass,2));
183 datahist->GetXaxis()->SetRangeUser(0.0, pow(mass,2));
184 datahist->GetYaxis()->SetRangeUser(0.0, pow(mass,2));
185 diffhist->GetXaxis()->SetRangeUser(0.0, pow(mass,2));
186 diffhist->GetYaxis()->SetRangeUser(0.0, pow(mass,2));
187 reldiffhist->GetXaxis()->SetRangeUser(0.0, pow(mass,2));
188 reldiffhist->GetYaxis()->SetRangeUser(0.0, pow(mass,2));
189 reldiffhist->SetMaximum(1.0);
190 reldiffhist->SetMinimum(-1.0);
193 TString s(
"setDiffColorStyle(");
198 sprintf(name,
"%s_%f", mchist->GetName(),
mass);
199 TCanvas *c =
new TCanvas(name, mchist->GetTitle());
202 mchist->Draw(
"colz");
205 TExec *ex1 =
new TExec(
"ex1",
"gStyle->SetPalette(1);");
207 mchist->Draw(
"colz same");
209 datahist->Draw(
"colz");
212 TExec *ex2 =
new TExec(
"ex2",
"gStyle->SetPalette(1);");
214 datahist->Draw(
"colz same");
216 diffhist->Draw(
"colz");
218 TExec *ex3 =
new TExec(
"ex3", s);
220 diffhist->Draw(
"colz same");
222 reldiffhist->Draw(
"colz");
224 TExec *ex4 =
new TExec(
"ex4", s);
226 reldiffhist->Draw(
"colz same");
232 std::vector<booky_page>& tempvec = booky_map[mchist->GetName()];
244 unsigned int pointpos = dirname.find(
".");
245 if (!(pointpos == 0 || pointpos == dirname.size())) {
246 std::string masslow = dirname.substr(0, pointpos + 1);
247 std::string masshigh = dirname.substr(pointpos + 1);
248 massstart =
atoi(masslow.c_str());
249 massend =
atoi(masshigh.c_str());
250 mass = 1.0 * (massstart + massend) / 2 / 1000;
253 std::map<TString, std::vector<TString> >::iterator it;
254 for (it = booky_setup_map.begin(); it != booky_setup_map.end(); it++) {
255 TString name(it->first.Data());
256 name += dirname.c_str();
258 TCanvas *c =
new TCanvas(name,
"");
260 std::vector<TString> histlist = it->second;
262 for (
unsigned int i = 0;
i < histlist.size();
i++) {
264 if (histlist[
i].CompareTo(
"spacer")) {
265 TIter histiter = TIter(mclist);
266 TH1D *reldiffhist, *diffhist, *mchist, *datahist;
268 std::string hnamemc(histlist[
i].Data());
270 std::string hnamediff(hnamemc);
271 int pos = hnamemc.find(
"MC");
272 hnamediff.erase(pos, 2);
273 hnamediff.insert(pos,
"Diff");
275 std::string hnamereldiff(hnamemc);
276 hnamereldiff.erase(pos, 2);
277 hnamereldiff.insert(pos,
"RelDiff");
279 std::string hnamedata(hnamemc);
280 hnamedata.erase(pos, 2);
281 hnamedata.insert(pos,
"Data");
283 infile->GetObject((dirname +
"/" + hnamereldiff).c_str(), reldiffhist);
284 infile->GetObject((dirname +
"/" + hnamediff).c_str(), diffhist);
285 infile->GetObject((dirname +
"/" + hnamedata).c_str(), datahist);
286 infile->GetObject((dirname +
"/" + hnamemc).c_str(), mchist);
288 outfile->cd(dirname.c_str());
289 if (mchist && datahist) {
293 double scale = datahist->Integral();
294 scale = scale / (mchist->Integral());
295 mchist->Scale(scale);
297 mchist->SetLineColor(kRed);
298 mchist->SetFillColor(kRed);
300 datahist->Draw(
"same");
302 TLine* line =
new TLine(mchist->GetXaxis()->GetXmin(), 0, mchist->GetXaxis()->GetXmax(), 0);
303 line->SetLineStyle(3);
305 diffhist->SetLineColor(kOrange - 3);
306 diffhist->Draw(
"same");
308 double max = mchist->GetMaximum();
309 double min = mchist->GetMinimum();
310 if (max < datahist->GetMaximum())
311 max = datahist->GetMaximum();
313 min = diffhist->GetMinimum();
314 mchist->GetYaxis()->SetRangeUser(diffhist->GetMinimum() * 1.5, max * 1.2);
322 std::vector<booky_page>& tempvec = booky_map[it->first];
341 double mass= 0.0, massstart =1000.0, massend=0.0;
342 std::map<std::string, std::pair<double, std::pair<double, double> > > diffbounds;
344 TFile* infile = TFile::Open(input_filename,
"READ");
345 TFile* outfile =
new TFile(output_filename,
"RECREATE");
346 outfile->mkdir(
"global");
348 TList *dirlist = infile->GetListOfKeys();
349 massbins = dirlist->GetSize();
351 TIter diriter(dirlist);
354 std::cout<<
"scanning directories and creating overview canvases..." <<std::endl;
355 while ((dir = (TDirectory *)diriter())) {
356 std::string dirname = dir->GetName();
358 unsigned int pointpos = dirname.find(
".");
359 if(pointpos == 0 || pointpos == dirname.size())
continue;
360 std::string masslow = dirname.substr(0, pointpos+1);
361 std::string masshigh = dirname.substr(pointpos+1);
362 double massstarttemp = atof(masslow.c_str())/1000;
363 double massendtemp = atof(masshigh.c_str())/1000;
366 mass = (massstarttemp + massendtemp)/2;
367 if(massstart > massstarttemp) massstart = massstarttemp;
368 if(massend < massendtemp) massend = massendtemp;
371 outfile->mkdir(dir->GetName());
372 infile->cd(dir->GetName());
376 TList *histlist = gDirectory->GetListOfKeys();
377 TIter histiter(histlist);
379 while ((obj = histiter())) {
380 TString s(obj->GetName());
383 else if(s.Contains(
"MC_"))
387 histiter = TIter(&mclist);
388 TH1D *diffhist, *mchist;
389 while ((mchist = (TH1D*)histiter())) {
391 std::string hnamemc(mchist->GetName());
393 std::string hnamediff(hnamemc);
394 int pos = hnamemc.find(
"MC");
395 hnamediff.erase(pos, 2);
396 hnamediff.insert(pos,
"Diff");
398 infile->GetObject((std::string(dir->GetName())+
"/"+hnamediff).c_str(), diffhist);
402 std::pair<double, std::pair<double, double> >
p;
405 double maxdiff = diffhist->GetMaximum();
406 double maxdifftemp = diffhist->GetMinimum();
407 if(abs(maxdifftemp) > maxdiff) maxdiff = maxdifftemp;
409 double diffmintemp = diffhist->GetXaxis()->GetXmin();
410 double diffmaxtemp = diffhist->GetXaxis()->GetXmax();
411 std::map<std::string, std::pair<double, std::pair<double, double> > >::iterator iter = diffbounds.find(
412 diffhist->GetName());
413 if (iter != diffbounds.end()) {
414 p.first = iter->second.first;
415 p.second.first = iter->second.second.first;
416 p.second.second = iter->second.second.second;
418 if (iter->second.first < maxdiff) {
422 if (iter->second.second.first > diffmintemp) {
424 p.second.first = diffmintemp;
426 if (iter->second.second.second < diffmaxtemp) {
428 p.second.second = diffmaxtemp;
432 diffbounds[diffhist->GetName()] =
p;
437 p.second.first = diffmintemp;
438 p.second.second = diffmaxtemp;
439 diffbounds.insert(std::pair<std::string, std::pair<
double, std::pair<double, double> > >(diffhist->GetName(),
444 histiter = TIter(&mclist);
445 TH2D *reldiffhist2d, *diffhist2d, *mchist2d, *datahist2d;
446 while ((mchist2d = (TH2D*) histiter())) {
448 std::string hnamemc(mchist2d->GetName());
450 std::string hnamediff(hnamemc);
451 int pos = hnamemc.find(
"MC");
452 hnamediff.erase(pos, 2);
453 hnamediff.insert(pos,
"Diff");
455 std::string hnamereldiff(hnamemc);
456 hnamereldiff.erase(pos, 2);
457 hnamereldiff.insert(pos,
"RelDiff");
459 std::string hnamedata(hnamemc);
460 hnamedata.erase(pos, 2);
461 hnamedata.insert(pos,
"Data");
463 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamereldiff).c_str(), reldiffhist2d);
464 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamediff).c_str(), diffhist2d);
465 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamedata).c_str(), datahist2d);
466 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamemc).c_str(), mchist2d);
468 outfile->cd(dir->GetName());
473 dirlist = infile->GetListOfKeys();
475 diriter = TIter(dirlist);
477 std::cout <<
"creating global histograms and 2D diff vs mass plots..." << std::endl;
478 while ((dir = (TDirectory *) diriter())) {
479 std::string dirname = dir->GetName();
481 unsigned int pointpos = dirname.find(
".");
482 if (pointpos == 0 || pointpos == dirname.size())
485 infile->cd(dir->GetName());
489 TList *histlist = gDirectory->GetListOfKeys();
490 TIter histiter(histlist);
492 while ((obj = histiter())) {
493 TString s(obj->GetName());
494 if (s.EndsWith(
"MC"))
496 else if (s.Contains(
"MC_"))
499 histiter = TIter(&mclist);
501 TH1D *diffhist, *mchist, *datahist;
502 while ((hist = (TH1D*) histiter())) {
504 std::string hnamemc(hist->GetName());
506 std::string hname(hnamemc);
507 int pos = hnamemc.find(
"MC");
509 hname.insert(pos,
"Diff");
511 std::string hnamedata(hnamemc);
512 hnamedata.erase(pos, 2);
513 hnamedata.insert(pos,
"Data");
515 std::string hnamemcglob(hnamemc);
516 hnamemcglob.insert(pos + 2,
"Global");
518 std::string hnamedataglob(hnamemc);
519 hnamedataglob.erase(pos, 2);
520 hnamedataglob.insert(pos,
"DataGlobal");
522 infile->GetObject((std::string(dir->GetName()) +
"/" + hname +
";1").c_str(), diffhist);
523 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamedata +
";1").c_str(), datahist);
524 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamemc +
";1").c_str(), mchist);
527 outfile->cd(
"global");
528 TH1D* hmcglob = (TH1D*) outfile->Get(std::string(
"global/"+hnamemcglob).c_str());
530 hmcglob =
new TH1D(hnamemcglob.c_str(), mchist->GetTitle(), mchist->GetNbinsX(),
531 mchist->GetXaxis()->GetXmin(), mchist->GetXaxis()->GetXmax());
532 hmcglob->Add(mchist);
533 TH1D* hdataglob = (TH1D*) outfile->Get(std::string(
"global/"+hnamedataglob).c_str());
534 if (hdataglob == NULL)
535 hdataglob =
new TH1D(hnamedataglob.c_str(), datahist->GetTitle(), datahist->GetNbinsX(),
536 datahist->GetXaxis()->GetXmin(), datahist->GetXaxis()->GetXmax());
537 hdataglob->Add(datahist);
540 fillDiffvsMassPlot(diffhist, dir->GetName(), massbins, massstart, massend, diffbounds, outfile);
543 histiter = TIter(&mclist);
544 TH2D *mchist2d, *datahist2d;
545 while ((mchist2d = (TH2D*) histiter())) {
547 std::string hnamemc(mchist2d->GetName());
549 std::string hnamediff(hnamemc);
550 int pos = hnamemc.find(
"MC");
551 hnamediff.erase(pos, 2);
552 hnamediff.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()) +
"/" + hnamedata +
";1").c_str(), datahist2d);
566 infile->GetObject((std::string(dir->GetName()) +
"/" + hnamemc +
";1").c_str(), mchist2d);
569 outfile->cd(
"global");
570 TH2D* hmcglob = (TH2D*) outfile->Get(std::string(
"global/" + hnamemcglob).c_str());
571 if (hmcglob == NULL) {
572 hmcglob =
new TH2D(hnamemcglob.c_str(), mchist2d->GetTitle(), mchist->GetNbinsX(),
573 mchist2d->GetXaxis()->GetXmin(), mchist2d->GetXaxis()->GetXmax(), mchist2d->GetNbinsY(),
574 mchist2d->GetYaxis()->GetXmin(), mchist2d->GetYaxis()->GetXmax());
575 hmcglob->SetXTitle(mchist2d->GetXaxis()->GetTitle());
576 hmcglob->SetYTitle(mchist2d->GetYaxis()->GetTitle());
578 hmcglob->Add(mchist2d);
579 TH2D* hdataglob = (TH2D*) outfile->Get(std::string(
"global/" + hnamedataglob).c_str());
580 if (hdataglob == NULL) {
581 hdataglob =
new TH2D(hnamedataglob.c_str(), datahist2d->GetTitle(), datahist2d->GetNbinsX(),
582 datahist2d->GetXaxis()->GetXmin(), datahist2d->GetXaxis()->GetXmax(), datahist2d->GetNbinsY(),
583 datahist2d->GetYaxis()->GetXmin(), datahist2d->GetYaxis()->GetXmax());
584 hdataglob->SetXTitle(datahist2d->GetXaxis()->GetTitle());
585 hdataglob->SetYTitle(datahist2d->GetYaxis()->GetTitle());
587 hdataglob->Add(datahist2d);
594 std::cout<<
"saving to disk..." <<std::endl;
596 std::cout<<
"done!" <<std::endl;