#include #include #include #include #include #include "TString.h" #include "TFile.h" #include "TH1F.h" void FillEventCuts(std::string name, std::vector& cuts, std::vector& errors, float xsect); void FillCandCuts(std::string name, std::vector& cuts, std::vector& errors); void PrintCuts(std::string* sampleNames, std::string* cutNames, std::vector >& cuts, std::vector >& errors); //float m_scaleFactor(0); float m_lumi = 100; int main(int argc, char *argv[]) { int nsamples = 8; std::string sampleNames[] = {"Ztautau", "Zee", "Zmumu", "Wenu", "Wmunu", "Wtaulepnu", "Wtauhadnu", "Ttbar", "Dijet"}; std::string eventCutNames[] = {"Total", "Trigger", "Isol. lepton", "MET > 20", "Mt(lep, MET) < 30", "Sum Et < 400", ">= 1 candidate" }; std::string candCutNames[] = {"Candidates", "1 < dPhi < 3.1", "Identified Tau Jet", "OS", "M(lep,tau)", "SS", "M(lep,tau)" }; float sampleXsects[] = { 1.357 * 1000, 1.357 * 1000 * 0.96009632, 1.357 * 1000 * 0.96044032, (8.071 + 5.743) * 1000 * 0.87661927, (8.071 + 5.743) * 1000 * 0.87630332, (8.071 + 5.743) * 1000 * 0.352 * 0.87424961, (8.071 + 5.743) * 1000 * (1-0.352), //(8.071 + 5.743) * 1000 * (/*0.352 * 0.87424961 + */(1-0.352)), //202.86 * 1.07 * 0.543 401.60 * 0.543, 1.170E+10 + 8.668E+08 + 5.601E+07 + 3.280E+06 + 1.516E+05 + 5.112E+03 + 1.119E+02 }; std::vector > m_eventCuts(nsamples, std::vector()) ; std::vector > m_candCuts(nsamples, std::vector()); std::vector > m_eventCutErrors(nsamples, std::vector()); std::vector > m_candCutErrors(nsamples, std::vector()); for (int isample(0); isample < nsamples; isample++) { std::cout << "Starting " << sampleNames[isample] << std::endl; FillEventCuts(sampleNames[isample], m_eventCuts.at(isample), m_eventCutErrors.at(isample), sampleXsects[isample]); FillCandCuts(sampleNames[isample], m_candCuts.at(isample), m_candCutErrors.at(isample)); } PrintCuts(sampleNames, eventCutNames, m_eventCuts, m_eventCutErrors); PrintCuts(sampleNames, candCutNames, m_candCuts, m_candCutErrors); return 0; } void FillEventCuts(std::string name, std::vector& cuts, std::vector& errors, float xsect) { TFile file(TString("/hepstore/store2/gwilliam/ZtautauNtuples/Ntuple.") + name + ".All.root"); TH1F* cutHist = dynamic_cast(file.Get("Cuts/CutHist")); for (int icut(1); icut <= cutHist->GetNbinsX(); icut++) { if (icut == 3 || icut == 4 || icut == 5) {std::cout << "Removing some cuts" << std::endl; continue;} float lumiScale = m_lumi * xsect / cutHist->GetBinContent(1); cuts.push_back(lumiScale * cutHist->GetBinContent(icut)); errors.push_back(lumiScale * cutHist->GetBinError(icut)); //cuts.push_back(cutHist->GetBinContent(icut)); //errors.push_back(cutHist->GetBinError(icut)); } delete cutHist; } void FillCandCuts(std::string name, std::vector& cuts, std::vector& errors) { TFile file(TString("/user1/gwilliam/AtlasWork14/14.4.0/groups/Liverpool/LiverpoolAnalysis/LivZAnalysis/root/") + name + "Hists.root"); //TH1F* cutHist = dynamic_cast(file.Get("CutHist")); TH1F* cutHist = dynamic_cast(file.Get("CutHistScaled")); for (int icut(1); icut <= cutHist->GetNbinsX(); icut++) { //if (cutHist->GetBinContent(icut) == 0) {std::cout << "Removing some cuts" << std::endl; continue;} if (icut >= 8) {std::cout << "Removing some cuts" << std::endl; continue;} cuts.push_back(cutHist->GetBinContent(icut)); errors.push_back(cutHist->GetBinError(icut)); } delete cutHist; } void PrintCuts(std::string* sampleNames, std::string* cutNames, std::vector >& cuts, std::vector >& errors) { int nsamples(cuts.size()); int ncuts(cuts.at(0).size()); std::cout << "=======================================================================================================================================" << std::endl; std::cout << std::setw(18) << "Cut " << " | "; for (int isample(0); isample < nsamples ; isample++) { std::cout << std::setw(16) << sampleNames[isample] << " | "; } std::cout << std::endl; std::cout << "=======================================================================================================================================" << std::endl; for (int icut(0); icut < ncuts ; icut++) { std::cout << std::setw(18) << cutNames[icut] << " | "; for (int isample(0); isample < nsamples ; isample++) { std::stringstream cutAndError; if (cuts.at(isample).at(icut) <= 9999999) { cutAndError << std::fixed << std::setprecision(0) << cuts.at(isample).at(icut) << " +- " << std::fixed << std::setprecision(0) << errors.at(isample).at(icut); } else { cutAndError << std::scientific << std::setprecision(1) << cuts.at(isample).at(icut) << " +- " << std::scientific << std::setprecision(1) << errors.at(isample).at(icut); } std::cout << std::setw(16) << cutAndError.str() << " | "; } std::cout << std::endl; } std::cout << "=======================================================================================================================================" << std::endl; std::cout << "\n" << std::endl; }