#include "EFTGenReader/EFTHelperUtilities/interface/WCPoint.h" #include "EFTGenReader/EFTHelperUtilities/interface/WCFit.h" #include "EFTGenReader/EFTHelperUtilities/interface/TH1EFT.h" #include "EFTGenReader/EFTHelperUtilities/interface/TH2EFT.h" void plot2D(std::vector input_fnames, TString wc_string) { gStyle->SetOptStat(0); gStyle->SetPadRightMargin(0.2); std::vector files; //std::cout << "Output File: " << output_fname << std::endl; for (auto s: input_fnames) { std::cout << " Input File: " << s << std::endl; TFile* f = TFile::Open(s); if (f) { //f->Print(); files.push_back(f); } } if (!files.size()) { return; } WCPoint *wc_pt = new WCPoint(wc_string.Data()); auto regexp = TRegexp("[a-zA-Z]+3?i?_-?[0-9]+.[0-9]+"); TString wc_string_single = TString("wcpoint_" + wc_string(regexp)); WCPoint *wc_pt_single = new WCPoint(wc_string_single.Data()); auto wc = TString(wc_pt_single->inputs.begin()->first.c_str()); auto val = wc_pt_single->inputs.begin()->second; std::cout << TString::Format("%s=%0.2f", wc.Data(), val) << std::endl; WCPoint *sm_pt = new WCPoint("smpt"); //std::vector leps = {"2l", "3l", "4l"}; std::vector leps = {"2lss", "3l", "4l"}; std::vector hists = {"h_opAng_lep", "h_d_lep", "h_sum2_lep"}; std::map xsec; xsec["ttHJet"] = 0.5085*(1-0.577); xsec["ttlnuJet"] = 0.2043; xsec["tHq4f"] = 0.0771; xsec["ttllNuNuJetNoHiggs"] = 0.2529; xsec["tllq4fNoSchanWNoHiggs0p"] = 0.0942; auto c = new TCanvas("c","c",1100,800); for(auto f : files) { std::vector words; split_string(f->GetName(),words,"_"); int index(-1); for(int i = 0; i < words.size(); i++) { if(TString(f->GetName()).Contains("_final_")) continue; if(words[i].compare(0,5,"HanV4") == 0) { index = i-1; break; } } TString fname(""); if(index>=0) fname = TString::Format("output/output_process_%s_%s_EFT.root", words[index].c_str(), wc.Data()); std::cout << fname << std::endl; std::cout << "Loading event sum" << std::endl; auto h_eventsumEFT = (TH1EFT*)f->Get("EFTGenHistsWithCuts/h_eventsumEFT"); TFile *fout; if(!TString(f->GetName()).Contains("_final_")) { fout = new TFile(fname, "RECREATE"); auto EFTGenHistsWithCuts = new TDirectoryFile("EFTGenHistsWithCuts", "EFTGenHistsWithCuts"); EFTGenHistsWithCuts->cd(); h_eventsumEFT->Write(); } for(auto lep : leps) { std::cout << "Loading histograms" << std::endl; /* std::cout << TString::Format("EFTGenHistsWithCuts/h_bjet_jet%sEFT", lep.Data()) << std::endl; std::cout << TString::Format("EFTGenHistsWithCuts/h_bjet_jet%sSM", lep.Data()) << std::endl; auto h = (TH2EFT*)f->Get(TString::Format("EFTGenHistsWithCuts/h_bjet_jet%sEFT", lep.Data())); auto hsm = (TH2D*)f->Get(TString::Format("EFTGenHistsWithCuts/h_bjet_jet%sSM", lep.Data())); */ std::cout << TString::Format("EFTGenHistsWithCuts/h_%s_jetbjetEFT", lep.Data()) << std::endl; std::cout << TString::Format("EFTGenHistsWithCuts/h_%s_jetbjetSM", lep.Data()) << std::endl; auto h = (TH2EFT*)f->Get(TString::Format("EFTGenHistsWithCuts/h_%s_jetbjetEFT", lep.Data())); auto hsm = (TH2D*)f->Get(TString::Format("EFTGenHistsWithCuts/h_%s_jetbjetSM", lep.Data())); TH1D* h_EvSP = new TH1D("h_EvSP","h_EvSP",20,0,20); if(!TString(f->GetName()).Contains("_final_")) { hsm->Scale(xsec[words[index]] * 41530. / h_eventsumEFT->GetBinFit(1).evalPoint(sm_pt)); std::cout << "Found " << hsm->Integral() << " events" << std::endl; h->Scale(*wc_pt); h->Scale(xsec[words[index]] * 41530. / h_eventsumEFT->GetBinFit(1).evalPoint(sm_pt)); h->Write(); hsm->Write(); } /* for(int i =0; i<8;i++){ for(int j = 0; j<5;j++){ int binnum = h->FindBin(i,j); double bincontent = h->GetBinContent(binnum); std::cout<<"bin content is: "<Fill(bincontent); } } */ h->GetXaxis()->SetNdivisions(h->GetNbinsX()); h->GetYaxis()->SetNdivisions(h->GetNbinsY()); h->Draw("colz text"); auto s = TString(h->GetName()); //if(!TString(f->GetName()).Contains("_final_")) s = s + words[index]; s = s + ".png"; c->Print(s,"png"); c->Print(s.ReplaceAll("png","pdf"),"pdf"); /* TString hist = TString::Format("h_EvSP_%s",lep.Data()); h_EvSP->Draw(); double entries = h_EvSP->GetEntries(); double integral = h_EvSP->Integral(); std::cout<<"Get Entries gives: "<Print(hist+".png"); c->Print(hist.ReplaceAll("png","pdf"),"pdf"); */ h->NormalizeTo(hsm); h->SetTitle(TString::Format("%s=%0.2f", wc.Data(), val)); auto color = (TH2EFT*)h->Clone(); for(int i = 0; i < color->GetNbinsX(); i++) { for(int j = 0; j < color->GetNbinsY(); j++) { int bin = color->FindBin(i,j); color->SetBinContent(bin, abs(color->GetBinContent(bin))); } } color->SetMinimum(-1e-2); color->SetMaximum(5); color->Draw("colz"); h->Draw("same text"); s = TString(h->GetName()); s = s + ".png"; s.ReplaceAll("EFT", "EFTtoSM"); c->Print(s,"png"); c->Print(s.ReplaceAll("png","pdf"),"pdf"); for(int i =0; i<8;i++){ for(int j = 0; j<5;j++){ int binnum = h->FindBin(i,j); double bincontent = h->GetBinContent(binnum); std::cout<<"bincontent is:"<Fill(bincontent); } } TString hist = TString::Format("h_EvSP_%s",lep.Data()); h_EvSP->Write(); h_EvSP->Draw(); c->Print(hist+".png"); c->Print(hist.ReplaceAll("png","pdf"),"pdf"); double entries = h_EvSP->GetEntries(); double integral = h_EvSP->Integral(); std::cout<<"Get Entries gives: "<GetXaxis()->SetNdivisions(h->GetNbinsX()); hsm->GetYaxis()->SetNdivisions(h->GetNbinsY()); hsm->Draw("colz text"); s.ReplaceAll("EFTtoSM", "SM"); c->Print(s,"png"); c->Print(s.ReplaceAll("pdf","png"),"png"); } /* for(auto it : hists) { std::cout << "Loading other hists" << std::endl; auto he = (TH1EFT*)f->Get(TString::Format("EFTGenHistsWithCuts/%sEFT", it.Data())); auto hs = (TH1D*)f->Get(TString::Format("EFTGenHistsWithCuts/%sSM", it.Data())); if(he == nullptr) break; //only exists in Brent's testing files if(!TString(f->GetName()).Contains("_final_")) { hs->Scale(xsec[words[index]] * 41530. / h_eventsumEFT->GetBinFit(1).evalPoint(sm_pt)); he->Scale(*wc_pt); he->Scale(xsec[words[index]] * 41530. / h_eventsumEFT->GetBinFit(1).evalPoint(sm_pt)); } double ks=he->KolmogorovTest(hs, "MN"); he->SetTitle(TString::Format("%s=%0.2f KS=%0.3f", wc_pt->inputs.begin()->first.c_str(), wc_pt->inputs.begin()->second, ks)); if(!TString(f->GetName()).Contains("_final_")) { he->Write(); hs->Write(); } he->Draw("hist"); hs->Draw("same"); TString s(TString::Format("%sEFT.png", it.Data())); c->Print(s,"png"); c->Print(s.ReplaceAll("png","pdf"),"pdf"); ks=he->KolmogorovTest(hs, "M"); he->SetTitle(TString::Format("%s=%0.2f KS=%0.3f", wc_pt->inputs.begin()->first.c_str(), wc_pt->inputs.begin()->second, ks)); he->DrawNormalized("hist"); hs->DrawNormalized("same"); s.ReplaceAll("EFT", "normEFT"); c->Print(s,"pdf"); c->Print(s.ReplaceAll("pdf","png"),"png"); } */ if(!TString(f->GetName()).Contains("_final_")) { fout->Close(); delete fout; } std::cout << "Done with " << f->GetName() << std::endl; std::cout << "Closing " << f->GetName() << std::endl; f->Close(); } if(files.size() != 1 || !TString(files[0]->GetName()).Contains("final")) system(TString::Format("hadd -f output/output_final_%s_EFT.root output/output_process_*_%s*.root", wc.Data(), wc.Data())); }