/ElectroWeakAnalysis/WMuNu/bin/WMuNuValidatorMacro.cpp

https://github.com/aivanov-cern/cmssw · C++ · 214 lines · 167 code · 39 blank · 8 comment · 29 complexity · 53dc17c517e6987ef677be949204a8ad MD5 · raw file

  1. #include "TROOT.h"
  2. #include "TSystem.h"
  3. #include "TStyle.h"
  4. #include "TRint.h"
  5. #include "TFile.h"
  6. #include "TCanvas.h"
  7. #include "TPaveLabel.h"
  8. #include "TPad.h"
  9. #include "TH1D.h"
  10. #include "TLegend.h"
  11. int printUsage(){
  12. printf("Usage: WMuNuValidatorMacro [-lbh] 'root_file_to_validate' 'reference_root_file' 'directory_name'\n\n");
  13. printf("\tOptions:\t -l ==> linear scale for Y axes (default is log-scale)\n");
  14. printf("\t \t -b ==> run in batch (no graphics)\n");
  15. printf("\t \t -n ==> normalize reference to data (default = false)\n");
  16. printf("\t \t -h ==> print this message\n\n");
  17. printf("\tInput files:\t Created via '*Validator.py' configuration files in:\n");
  18. printf("\t \t $CMSSW_BASE/src/ElectroWeakAnalysis/WMuNu/test/\n\n");
  19. printf("\tOutput: \t Canvases: './WMuNuValidation_$CMSSW_VERSION_*.root'\n");
  20. printf("\t \t Gifs: './WMuNuValidation_$CMSSW_VERSION_*.gif'\n\n");
  21. return 1;
  22. }
  23. int main(int argc, char** argv){
  24. TString chfile;
  25. TString chfileref;
  26. TString DirectoryLast;
  27. int ntrueargs = 0;
  28. bool logyFlag = true;
  29. bool normalize = false;
  30. for (int i=1; i<argc; ++i) {
  31. if (argv[i][0] == '-') {
  32. if (argv[i][1]=='l') logyFlag = false;
  33. else if (argv[i][1]=='b') gROOT->SetBatch();
  34. else if (argv[i][1]=='h') return printUsage();
  35. else if (argv[i][1]=='n') normalize=true;
  36. } else {
  37. ntrueargs += 1;
  38. if (ntrueargs==1) chfile = argv[i];
  39. else if (ntrueargs==2) chfileref = argv[i];
  40. else if (ntrueargs==3) DirectoryLast = argv[i];
  41. }
  42. }
  43. if (ntrueargs!=3) return printUsage();
  44. TRint* app = new TRint("CMS Root Application", 0, 0);
  45. TString cmssw_version = gSystem->Getenv("CMSSW_VERSION");
  46. TString chsample = "WMuNu";
  47. TString chtitle = chsample + " validation for " + cmssw_version;
  48. //TCanvas* c1 = new TCanvas("c1",chtitle.Data());
  49. TCanvas* c1 = new TCanvas("c1",chtitle.Data(),0,0,1024,768);
  50. TPaveLabel* paveTitle = new TPaveLabel(0.1,0.93,0.9,0.99, chtitle.Data());
  51. paveTitle->Draw();
  52. gStyle->SetOptLogy(logyFlag);
  53. gStyle->SetPadGridX(true);
  54. gStyle->SetPadGridY(true);
  55. gStyle->SetOptStat(1111111);
  56. gStyle->SetFillColor(0);
  57. TPad* pad[4];
  58. pad[0] = new TPad("pad_tl","The top-left pad",0.01,0.48,0.49,0.92);
  59. pad[1] = new TPad("pad_tr","The top-right pad",0.51,0.48,0.99,0.92);
  60. pad[2] = new TPad("pad_bl","The bottom-left pad",0.01,0.01,0.49,0.46);
  61. pad[3] = new TPad("pad_br","The bottom-right pad",0.51,0.01,0.99,0.46);
  62. for (unsigned int i=0; i<4; ++i) pad[i]->Draw();
  63. TLegend* leg = new TLegend(0.5,0.9,0.7,1.0);
  64. TFile* input_file = new TFile(chfile.Data(),"READONLY");
  65. TFile* input_fileref = new TFile(chfileref.Data(),"READONLY");
  66. bool first_plots_done = false;
  67. TString directory = DirectoryLast + "/BeforeCuts";
  68. TDirectory* dir_before = input_file->GetDirectory(directory);
  69. TDirectory* dirref_before = input_fileref->GetDirectory(directory);
  70. TList* list_before = dir_before->GetListOfKeys();
  71. list_before->Print();
  72. unsigned int list_before_size = list_before->GetSize();
  73. TString auxTitle = chtitle + ": BEFORE CUTS";
  74. for (unsigned int i=0; i<list_before_size; i+=4) {
  75. if (first_plots_done==true) c1->DrawClone();
  76. paveTitle->SetLabel(auxTitle.Data());
  77. for (unsigned int j=0; j<4; ++j) {
  78. pad[j]->cd();
  79. pad[j]->Clear();
  80. if ((i+j)>=list_before_size) continue;
  81. TH1D* h1 = (TH1D*)dir_before->Get(list_before->At(i+j)->GetName());
  82. // h1->SetLineColor(kBlue);
  83. // h1->SetMarkerColor(kBlue);
  84. h1->SetMarkerStyle(21);
  85. h1->SetLineStyle(1);
  86. h1->SetLineWidth(3);
  87. h1->SetTitleSize(0.05,"X");
  88. h1->SetTitleSize(0.05,"Y");
  89. h1->SetXTitle(h1->GetTitle());
  90. h1->SetYTitle("");
  91. h1->SetTitle("");
  92. h1->SetTitleOffset(0.85,"X");
  93. TH1D* hr = (TH1D*)dirref_before->Get(list_before->At(i+j)->GetName());
  94. hr->SetLineColor(kRed);
  95. // hr->SetLineStyle(2);
  96. hr->SetLineWidth(3);
  97. hr->SetTitleSize(0.05,"X");
  98. hr->SetTitleSize(0.05,"Y");
  99. hr->SetXTitle(h1->GetTitle());
  100. hr->SetYTitle("");
  101. hr->SetTitle("");
  102. hr->SetTitleOffset(0.85,"X");
  103. if(normalize) {hr->DrawNormalized("hist",h1->Integral());}
  104. else{hr->Draw("hist");}
  105. h1->Draw("same,p");
  106. leg->Clear();
  107. leg->AddEntry(h1,"Skim","L");
  108. leg->AddEntry(hr,"Reference","L");
  109. leg->Draw();
  110. }
  111. first_plots_done = true;
  112. c1->Modified();
  113. c1->Update();
  114. char chplot[80];
  115. sprintf(chplot,"%sValidation_%s_BEFORECUTS_%d.root",chsample.Data(),cmssw_version.Data(),i/4);
  116. c1->SaveAs(chplot);
  117. sprintf(chplot,"%sValidation_%s_BEFORECUTS_%d.gif",chsample.Data(),cmssw_version.Data(),i/4);
  118. c1->SaveAs(chplot);
  119. }
  120. TString directory2 = DirectoryLast + "/LastCut";
  121. TDirectory* dir_lastcut = input_file->GetDirectory(directory2);
  122. TDirectory* dirref_lastcut = input_fileref->GetDirectory(directory2);
  123. TList* list_lastcut = dir_lastcut->GetListOfKeys();
  124. list_lastcut->Print();
  125. unsigned int list_lastcut_size = list_lastcut->GetSize();
  126. auxTitle = chtitle + ": AFTER N-1 CUTS";
  127. for (unsigned int i=0; i<list_lastcut_size; i+=4) {
  128. if (first_plots_done==true) c1->DrawClone();
  129. paveTitle->SetLabel(auxTitle.Data());
  130. for (unsigned int j=0; j<4; ++j) {
  131. pad[j]->cd();
  132. pad[j]->Clear();
  133. if ((i+j)>=list_lastcut_size) continue;
  134. TH1D* h1 = (TH1D*)dir_lastcut->Get(list_lastcut->At(i+j)->GetName());
  135. // h1->SetLineColor(kBlue);
  136. // h1->SetMarkerColor(kBlue);
  137. h1->SetMarkerStyle(21);
  138. h1->SetLineWidth(3);
  139. h1->SetTitleSize(0.05,"X");
  140. h1->SetTitleSize(0.05,"Y");
  141. h1->SetXTitle(h1->GetTitle());
  142. h1->SetYTitle("");
  143. h1->SetTitle("");
  144. h1->SetTitleOffset(0.85,"X");
  145. TH1D* hr = (TH1D*)dirref_lastcut->Get(list_lastcut->At(i+j)->GetName());
  146. hr->SetLineColor(kRed);
  147. // hr->SetLineStyle(2);
  148. hr->SetLineWidth(3);
  149. hr->SetTitleSize(0.05,"X");
  150. hr->SetTitleSize(0.05,"Y");
  151. hr->SetXTitle(h1->GetTitle());
  152. hr->SetYTitle("");
  153. hr->SetTitle("");
  154. hr->SetTitleOffset(0.85,"X");
  155. // h1->Draw();
  156. if(normalize) {hr->DrawNormalized("hist",h1->Integral());}
  157. else{hr->Draw("hist");}
  158. h1->Draw("same,p");
  159. leg->Clear();
  160. leg->AddEntry(h1,"Skim" ,"L");
  161. leg->AddEntry(hr,"Reference","L");
  162. leg->Draw();
  163. }
  164. first_plots_done = true;
  165. c1->Modified();
  166. c1->Update();
  167. char chplot[80];
  168. sprintf(chplot,"%sValidation_%s_LASTCUT_%d.root",chsample.Data(),cmssw_version.Data(),i/4);
  169. c1->SaveAs(chplot);
  170. sprintf(chplot,"%sValidation_%s_LASTCUT_%d.gif",chsample.Data(),cmssw_version.Data(),i/4);
  171. c1->SaveAs(chplot);
  172. }
  173. if (!gROOT->IsBatch()) app->Run();
  174. return 0;
  175. }