diff --git a/bin/mem_test.cc b/bin/mem_test.cc index 9f50a060ee4cac1350dc4cc9687a82a0ef4885a8..0426a22205d9123873684c97414aeeca2f4fea57 100644 --- a/bin/mem_test.cc +++ b/bin/mem_test.cc @@ -60,7 +60,8 @@ int main(){ }, {}, {}, - lv_met + lv_met, + -1 ); std::cout << "mem=" << res.p << std::endl; } diff --git a/bin/mem_test_dl.cc b/bin/mem_test_dl.cc index 867663c6b8b0f28c4e3c05fe064d63c1d56aa547..29d00fd6edd325279495083171cf11f5700a29bc 100644 --- a/bin/mem_test_dl.cc +++ b/bin/mem_test_dl.cc @@ -87,7 +87,8 @@ int main(){ }, {}, {}, - lv_met + lv_met, + -1 ); std::cout << "mem=" << res.p << std::endl; } diff --git a/data/transfer.root b/data/transfer.root index 6fbb788aa38af23c786cd9b4cf7f2d474ed6f1fc..a6d46c218cecd707359f81b31235a6b90d791bcc 100644 Binary files a/data/transfer.root and b/data/transfer.root differ diff --git a/interface/MEMClassifier.h b/interface/MEMClassifier.h index 9e9df83748c4d4130a271599194f783a6bc73d87..3583e516511260ea0c847e6a73d4b3588fb04a82 100644 --- a/interface/MEMClassifier.h +++ b/interface/MEMClassifier.h @@ -54,6 +54,7 @@ class MEMClassifier { //The constructor loads the transfer functions and b-tag PDF-s MEMClassifier(); + MEMClassifier(MEM::MEMConfig _cfg); ~MEMClassifier(); // Call this method to return the MEM output, provide all necessary inputs. @@ -68,7 +69,8 @@ class MEMClassifier { const std::vector<JetType>& selectedJetType, const std::vector<TLorentzVector>& looseSelectedJetP4, const std::vector<double>& looseSelectedJetCSV, - TLorentzVector& metP4 + TLorentzVector& metP4, + int ncalls=1 ); void setup_mem( diff --git a/setup/install_mem.sh b/setup/install_mem.sh index 8aab14a3550062812a55f19a8e5a9f6dff869978..4ee68b3a331feb076ded0b64e92181ae1bffda7c 100644 --- a/setup/install_mem.sh +++ b/setup/install_mem.sh @@ -7,7 +7,7 @@ if [ -e "${CMSSW_BASE}" ]; then cd src/TTH #get the MEM code - git clone https://github.com/bianchini/Code.git MEIntegratorStandalone + git clone https://github.com/bianchini/Code.git MEIntegratorStandalone --branch v0.1 #copy the OpenLoops ME libraries cp $CMSSW_BASE/src/TTH/MEIntegratorStandalone/libs/*.so $CMSSW_BASE/lib/$SCRAM_ARCH/ diff --git a/src/MEMClassifier.cc b/src/MEMClassifier.cc index a2b120e3a887b759adc50d21dbe07d5b635b0b07..6037946743b91d92fd85a3a52d59632a074420bc 100644 --- a/src/MEMClassifier.cc +++ b/src/MEMClassifier.cc @@ -87,7 +87,7 @@ void MEMClassifier::setup_mem( // Fallback default: { - std::cout << "Warning! Fallback case reached. Invalid MEM Hypo!!!" << std::endl; + std::cerr << "Warning! Fallback case reached. Invalid MEM Hypo!!!" << std::endl; throw 1; } @@ -152,7 +152,7 @@ void MEMClassifier::setup_mem_sl_0w2h2t( for (auto* jet : tagged) { objs.push_back(jet); integrand->push_back_object(jet); - std::cout << "adding jet " << jet->p4().Pt() << " btag " << jet->getObs(MEM::Observable::BTAG) << std::endl; + //std::cout << "adding jet " << jet->p4().Pt() << " btag " << jet->getObs(MEM::Observable::BTAG) << std::endl; } for (unsigned int il=0; il < selectedLeptonP4.size(); il++) { @@ -222,14 +222,14 @@ void MEMClassifier::setup_mem_sl_2w2h2t( for (auto* jet : tagged) { objs.push_back(jet); integrand->push_back_object(jet); - std::cout << "adding tagged jet " << jet->p4().Pt() << " btag " << jet->getObs(MEM::Observable::BTAG) << std::endl; + //std::cout << "adding tagged jet " << jet->p4().Pt() << " btag " << jet->getObs(MEM::Observable::BTAG) << std::endl; } assert(untagged.size() >= 2); for (auto* jet : untagged) { objs.push_back(jet); integrand->push_back_object(jet); - std::cout << "adding untagged jet " << jet->p4().Pt() << " btag " << jet->getObs(MEM::Observable::BTAG) << std::endl; + //std::cout << "adding untagged jet " << jet->p4().Pt() << " btag " << jet->getObs(MEM::Observable::BTAG) << std::endl; } for (unsigned int il=0; il < selectedLeptonP4.size(); il++) { @@ -296,7 +296,7 @@ void MEMClassifier::setup_mem_dl_0w2h2t( for (auto* jet : tagged) { objs.push_back(jet); integrand->push_back_object(jet); - std::cout << "adding jet " << jet->p4().Pt() << " btag " << jet->getObs(MEM::Observable::BTAG) << std::endl; + //std::cout << "adding jet " << jet->p4().Pt() << " btag " << jet->getObs(MEM::Observable::BTAG) << std::endl; } for (unsigned int il=0; il < selectedLeptonP4.size(); il++) { @@ -399,13 +399,13 @@ void MEMClassifier::setup_mem_sl_2w2h2t_sj( for (auto* jet : tagged) { objs.push_back(jet); integrand->push_back_object(jet); - std::cout << "adding tagged jet " << jet->p4().Pt() << " btag " << jet->getObs(MEM::Observable::BTAG) << std::endl; + //std::cout << "adding tagged jet " << jet->p4().Pt() << " btag " << jet->getObs(MEM::Observable::BTAG) << std::endl; } for (auto* jet : untagged) { objs.push_back(jet); integrand->push_back_object(jet); - std::cout << "adding untagged jet " << jet->p4().Pt() << " btag " << jet->getObs(MEM::Observable::BTAG) << std::endl; + //std::cout << "adding untagged jet " << jet->p4().Pt() << " btag " << jet->getObs(MEM::Observable::BTAG) << std::endl; } for (unsigned int il=0; il < selectedLeptonP4.size(); il++) { @@ -414,16 +414,15 @@ void MEMClassifier::setup_mem_sl_2w2h2t_sj( MEM::Object* lep = make_lepton(lep_p4.Pt(), lep_p4.Eta(), lep_p4.Phi(), lep_p4.M(), selectedLeptonCharge[il]); objs.push_back(lep); integrand->push_back_object(lep); - std::cout << "adding lep " << lep->p4().Pt() << " charge " << lep->getObs(MEM::Observable::CHARGE) << std::endl; + //std::cout << "adding lep " << lep->p4().Pt() << " charge " << lep->getObs(MEM::Observable::CHARGE) << std::endl; } assert(metP4.Pt() > 0); MEM::Object* met = new MEM::Object(metP4, MEM::ObjectType::MET ); - std::cout << "adding met pt " << met->p4().Pt() << " phi " << met->p4().Phi() << std::endl; + //std::cout << "adding met pt " << met->p4().Pt() << " phi " << met->p4().Phi() << std::endl; integrand->push_back_object(met); } - MEMResult MEMClassifier::GetOutput( const Hypothesis hypo, const std::vector<TLorentzVector>& selectedLeptonP4, @@ -433,7 +432,8 @@ MEMResult MEMClassifier::GetOutput( const std::vector<JetType>& selectedJetType, const std::vector<TLorentzVector>& looseSelectedJetP4, const std::vector<double>& looseSelectedJetCSV, - TLorentzVector& metP4 + TLorentzVector& metP4, + int ncalls ) { // Make sure vector sizes match up @@ -471,48 +471,48 @@ MEMResult MEMClassifier::GetOutput( // Single Lepton - Boosted 222 case SL_2W2H2T_SJ: { - std::cout << "MEM running signal" << std::endl; - res_sig = integrand->run(MEM::FinalState::LH, MEM::Hypothesis::TTH, {}, {}); + //std::cout << "MEM running signal" << std::endl; + res_sig = integrand->run(MEM::FinalState::LH, MEM::Hypothesis::TTH, {}, {}, ncalls); - std::cout << "MEM running background" << std::endl; - res_bkg = integrand->run(MEM::FinalState::LH, MEM::Hypothesis::TTBB, {}, {}); + //std::cout << "MEM running background" << std::endl; + res_bkg = integrand->run(MEM::FinalState::LH, MEM::Hypothesis::TTBB, {}, {}, ncalls); break; } // Single Lepton - Boosted 222 case SL_2W2H2T: { - std::cout << "MEM running signal" << std::endl; - res_sig = integrand->run(MEM::FinalState::LH, MEM::Hypothesis::TTH, {}, {}); + //std::cout << "MEM running signal" << std::endl; + res_sig = integrand->run(MEM::FinalState::LH, MEM::Hypothesis::TTH, {}, {}, ncalls); - std::cout << "MEM running background" << std::endl; - res_bkg = integrand->run(MEM::FinalState::LH, MEM::Hypothesis::TTBB, {}, {}); + //std::cout << "MEM running background" << std::endl; + res_bkg = integrand->run(MEM::FinalState::LH, MEM::Hypothesis::TTBB, {}, {}, ncalls); break; } // Single Lepton - Resolved 022 case SL_0W2H2T: { - std::cout << "MEM running signal" << std::endl; + //std::cout << "MEM running signal" << std::endl; res_sig = integrand->run(MEM::FinalState::LH, MEM::Hypothesis::TTH, {}, - {MEM::PSVar::cos_q1, MEM::PSVar::phi_q1, MEM::PSVar::cos_qbar1, MEM::PSVar::phi_qbar1}); + {MEM::PSVar::cos_q1, MEM::PSVar::phi_q1, MEM::PSVar::cos_qbar1, MEM::PSVar::phi_qbar1}, ncalls); - std::cout << "MEM running background" << std::endl; + //std::cout << "MEM running background" << std::endl; res_bkg = integrand->run(MEM::FinalState::LH, MEM::Hypothesis::TTBB, {}, - {MEM::PSVar::cos_q1, MEM::PSVar::phi_q1, MEM::PSVar::cos_qbar1, MEM::PSVar::phi_qbar1}); + {MEM::PSVar::cos_q1, MEM::PSVar::phi_q1, MEM::PSVar::cos_qbar1, MEM::PSVar::phi_qbar1}, ncalls); break; } // Di Lepton - Resolved 022 case DL_0W2H2T: { - std::cout << "MEM running signal" << std::endl; + //std::cout << "MEM running signal" << std::endl; res_sig = integrand->run(MEM::FinalState::LL, MEM::Hypothesis::TTH, {}, - {}); + {}, ncalls); - std::cout << "MEM running background" << std::endl; + //std::cout << "MEM running background" << std::endl; res_bkg = integrand->run(MEM::FinalState::LL, MEM::Hypothesis::TTBB, {}, - {}); + {}, ncalls); break; } @@ -586,7 +586,11 @@ TF1* MEMClassifier::getTransferFunction(const char* flavour, double eta) const { return tf; } -MEMClassifier::MEMClassifier() : cfg(MEM::MEMConfig()) { +MEMClassifier::MEMClassifier() : MEMClassifier(MEM::MEMConfig()) { +} + +MEMClassifier::MEMClassifier(MEM::MEMConfig _cfg) : + cfg(_cfg) { const string cmssw_path(std::getenv("CMSSW_BASE")); @@ -602,11 +606,11 @@ MEMClassifier::MEMClassifier() : cfg(MEM::MEMConfig()) { string("/src/TTH/CommonClassifier/data/btag_pdfs.root") ).c_str(); - cout << "opening " << transfers_path << endl; + //cout << "opening " << transfers_path << endl; transfers = new TFile(transfers_path.c_str()); assert(transfers != nullptr); - cout << "opening " << btagfile_path << endl; + //cout << "opening " << btagfile_path << endl; btagfile = new TFile(btagfile_path.c_str()); assert(btagfile != nullptr); diff --git a/test/mem.py b/test/mem.py index 32242888f5c723060807046e8c566c12a4a93afe..009d8e4e18355fc9f5a40ab3349be3948cb5c990 100644 --- a/test/mem.py +++ b/test/mem.py @@ -1,22 +1,26 @@ -import ROOT, json +import ROOT, json, sys ROOT.gSystem.Load("libTTHCommonClassifier") +ROOT.gSystem.Load("libTTHMEIntegratorStandalone") CvectorLorentz = getattr(ROOT, "std::vector<TLorentzVector>") Cvectordouble = getattr(ROOT, "std::vector<double>") CvectorJetType = getattr(ROOT, "std::vector<int>") +ncalls = [1000, 2000, 4000, 8000, 16000, 32000] f = ROOT.MEMClassifier() -inf = open("root/events_6j.json") -data = inf.read() -events = data.split("\n\n\n")[:-1] +if len(sys.argv)==2: + inf = open(sys.argv[1]) +else: + inf = sys.stdin def make_p4(pt, eta, phi, m): v = ROOT.TLorentzVector() v.SetPtEtaPhiM(pt, eta, phi, m) return v -for ev in events: +for ev in inf.readlines(): print "----" + print ev jsev = json.loads(ev) jets_p4 = jsev["input"]["selectedJetsP4"] jets_csv = jsev["input"]["selectedJetsCSV"] @@ -42,17 +46,20 @@ for ev in events: c_loosejets_p4 = CvectorLorentz() c_loosejets_csv = Cvectordouble() + out = {} + print "tthbb13 code cat={0}".format(jsev["event"]["cat"]) + for _ncalls in ncalls: + if jsev["output"]["mem_cfg"] == "SL_2w2h2t": + ret = f.GetOutput(f.SL_2W2H2T, c_leps_p4, c_leps_charge, c_jets_p4, c_jets_csv, c_jets_jettype, c_loosejets_p4, c_loosejets_csv, met_p4, _ncalls) + elif jsev["output"]["mem_cfg"] == "SL_1w2h2t": + ret = f.GetOutput(f.SL_1W2H2T, c_leps_p4, c_leps_charge, c_jets_p4, c_jets_csv, c_jets_jettype, c_loosejets_p4, c_loosejets_csv, met_p4, _ncalls) + elif jsev["output"]["mem_cfg"] == "SL_0w2h2t": + ret = f.GetOutput(f.SL_0W2H2T, c_leps_p4, c_leps_charge, c_jets_p4, c_jets_csv, c_jets_jettype, c_loosejets_p4, c_loosejets_csv, met_p4, _ncalls) + out["output__{0}".format(_ncalls)] = { + "p_sig": ret.p_sig, + "p_err_sig": ret.p_err_sig, + "p_bkg": ret.p_bkg, + "p_err_bkg": ret.p_err_bkg + } + print "out:", json.dumps(out) - print "tthbb13 code blr=", jsev["event"]["blr"], "mem=", jsev["output"]["p_tth"], jsev["output"]["p_ttbb"], jsev["output"]["p"] - if jsev["event"]["cat"].startswith("dl"): - print "DL_0w2h2t" - ret = f.GetOutput(f.DL_0W2H2T, c_leps_p4, c_leps_charge, c_jets_p4, c_jets_csv, c_jets_jettype, c_loosejets_p4, c_loosejets_csv, met_p4) - print "mem.py blr=", ret.blr_4b/(ret.blr_4b + ret.blr_2b), "mem=", ret.p_sig, ret.p_bkg, ret.p - elif jsev["event"]["cat"].startswith("sl_jge6"): - print "SL_2w2h2t" - ret = f.GetOutput(f.SL_2W2H2T, c_leps_p4, c_leps_charge, c_jets_p4, c_jets_csv, c_jets_jettype, c_loosejets_p4, c_loosejets_csv, met_p4) - print "mem.py blr=", ret.blr_4b/(ret.blr_4b + ret.blr_2b), "mem=", ret.p_sig, ret.p_bkg, ret.p - elif jsev["event"]["cat"].startswith("sl"): - print "SL_0w2h2t" - ret = f.GetOutput(f.SL_0W2H2T, c_leps_p4, c_leps_charge, c_jets_p4, c_jets_csv, c_jets_jettype, c_loosejets_p4, c_loosejets_csv, met_p4) - print "mem.py blr=", ret.blr_4b/(ret.blr_4b + ret.blr_2b), "mem=", ret.p_sig, ret.p_bkg, ret.p