diff --git a/bin/mem_test.cc b/bin/mem_test.cc index 70c2965e1e07173563fa5b3f25a2675ce95363dd..2658594daea3baa1eb79092c9e56766e3ea72b58 100644 --- a/bin/mem_test.cc +++ b/bin/mem_test.cc @@ -31,34 +31,42 @@ int main(){ p4(52.8751449585, -0.260020583868, -2.55171084404, 0.139569997787) }; + vector<double> variations = {0.9, 1.0, 1.1}; + vector<vector<double>> jet_variations; + for (unsigned int ijet=0; ijet<jets_p4.size(); ijet++) { + jet_variations.push_back(variations); + } //create a MET TLorentzVector lv_met; lv_met.SetPtEtaPhiM(92.1731872559,0., -1.08158898354, 0.); - for (int i=0; i<2; i++) { - auto res = mem.GetOutput( - leps_p4, - {-1}, - jets_p4, - { - 0.0429882630706, - 0.990463197231, - 0.899696052074, - 0.979629218578, - 0.437245458364, - 0.996093869209, - 0.212953850627 - }, - { - MEMClassifier::JetType::RESOLVED, - MEMClassifier::JetType::RESOLVED, - MEMClassifier::JetType::RESOLVED, - MEMClassifier::JetType::RESOLVED, - MEMClassifier::JetType::RESOLVED, - MEMClassifier::JetType::RESOLVED, - MEMClassifier::JetType::RESOLVED, - }, - lv_met - ); - std::cout << "mem=" << res.p << std::endl; + auto res = mem.GetOutput( + leps_p4, + {-1}, + jets_p4, + //CSV + { + 0.0429882630706, + 0.990463197231, + 0.899696052074, + 0.979629218578, + 0.437245458364, + 0.996093869209, + 0.212953850627 + }, + { + MEMClassifier::JetType::RESOLVED, + MEMClassifier::JetType::RESOLVED, + MEMClassifier::JetType::RESOLVED, + MEMClassifier::JetType::RESOLVED, + MEMClassifier::JetType::RESOLVED, + MEMClassifier::JetType::RESOLVED, + MEMClassifier::JetType::RESOLVED, + }, + jet_variations, + lv_met + ); + std::cout << "mem=" << res.p << std::endl; + for (unsigned int ivar=0; ivar < res.p_variated.size(); ivar++) { + std::cout << "mem var " << ivar << " = " << res.p_variated.at(ivar) << std::endl; } } diff --git a/bin/mem_test_dl.cc b/bin/mem_test_dl.cc index 5fe06e05f2123796bdb44c91be69bc1e8a8e0015..5535da7ad043709569b162c07be8d78004d65994 100644 --- a/bin/mem_test_dl.cc +++ b/bin/mem_test_dl.cc @@ -58,6 +58,12 @@ int main(){ 0.015261447988450527 ) }; + + vector<double> variations = {0.9, 1.0, 1.1}; + vector<vector<double>> jet_variations; + for (unsigned int ijet=0; ijet<jets_p4.size(); ijet++) { + jet_variations.push_back(variations); + } //create a MET TLorentzVector lv_met; @@ -67,25 +73,28 @@ int main(){ 0.9771100282669067, 0.0 ); - for (int i=0; i<2; i++) { - auto res = mem.GetOutput( - leps_p4, - {-1, 1}, - jets_p4, - { - 0.0429882630706, - 0.990463197231, - 0.899696052074, - 0.979629218578, - }, - { - MEMClassifier::JetType::RESOLVED, - MEMClassifier::JetType::RESOLVED, - MEMClassifier::JetType::RESOLVED, - MEMClassifier::JetType::RESOLVED, - }, - lv_met - ); - std::cout << "mem=" << res.p << std::endl; + auto res = mem.GetOutput( + leps_p4, + {-1, 1}, + jets_p4, + { + 0.0429882630706, + 0.990463197231, + 0.899696052074, + 0.979629218578, + }, + { + MEMClassifier::JetType::RESOLVED, + MEMClassifier::JetType::RESOLVED, + MEMClassifier::JetType::RESOLVED, + MEMClassifier::JetType::RESOLVED, + }, + jet_variations, + lv_met + ); + std::cout << "mem=" << res.p << std::endl; + for (unsigned int ivar=0; ivar < res.p_variated.size(); ivar++) { + std::cout << "mem var " << ivar << " = " << res.p_variated.at(ivar) << std::endl; } + } diff --git a/data/transfer.root b/data/transfer.root index da2059864c64a5460e6f71c88f671fe8d0716e9a..f119ce8b6f6c1482d1fb33039ff085fec5be2763 100644 Binary files a/data/transfer.root and b/data/transfer.root differ diff --git a/interface/MEMClassifier.h b/interface/MEMClassifier.h index edbeb613fe2e9ebf75568e8b889fb9f9bfdf7822..4b2c5076c6ad3d0cfce7adaab35be52a7339a53f 100644 --- a/interface/MEMClassifier.h +++ b/interface/MEMClassifier.h @@ -27,6 +27,8 @@ public: //Number of permutations per hypothesis double n_perm_sig; double n_perm_bkg; + + vector<double> p_variated; }; class MEMClassifier { @@ -76,6 +78,7 @@ public: const std::vector<TLorentzVector>& selectedJetP4, const std::vector<double>& selectedJetCSV, const std::vector<JetType>& selectedJetType, + const std::vector<vector<double>>& selectedJetVariation, const std::vector<TLorentzVector>& looseSelectedJetP4, const std::vector<double>& looseSelectedJetCSV, TLorentzVector& metP4, @@ -89,6 +92,7 @@ public: const std::vector<TLorentzVector>& selectedJetP4, const std::vector<double>& selectedJetCSV, const std::vector<JetType>& selectedJetType, + const std::vector<vector<double>>& selectedJetVariation, TLorentzVector& metP4 ); @@ -99,6 +103,7 @@ public: const std::vector<TLorentzVector>& selectedJetP4, const std::vector<double>& selectedJetCSV, const std::vector<JetType>& selectedJetType, + const std::vector<vector<double>>& selectedJetVariation, const std::vector<TLorentzVector>& looseSelectedJetP4, const std::vector<double>& looseSelectedJetCSV, TLorentzVector& metP4, @@ -112,6 +117,7 @@ public: const std::vector<TLorentzVector>& selectedJetP4, const std::vector<double>& selectedJetCSV, const std::vector<JetType>& selectedJetType, + const std::vector<vector<double>>& selectedJetVariation, const std::vector<TLorentzVector>& looseSelectedJetP4, const std::vector<double>& looseSelectedJetCSV, TLorentzVector& metP4, @@ -125,6 +131,7 @@ public: const std::vector<TLorentzVector>& selectedJetP4, const std::vector<double>& selectedJetCSV, const std::vector<JetType>& selectedJetType, + const std::vector<vector<double>>& selectedJetVariation, const std::vector<TLorentzVector>& looseSelectedJetP4, const std::vector<double>& looseSelectedJetCSV, TLorentzVector& metP4, diff --git a/src/MEMClassifier.cc b/src/MEMClassifier.cc index d06629c5797db161f0d63afcc45579b9213036b2..06ef796a03ddfdcdff15ec2619d566cda73ccfc3 100644 --- a/src/MEMClassifier.cc +++ b/src/MEMClassifier.cc @@ -9,6 +9,7 @@ void MEMClassifier::setup_mem( const std::vector<TLorentzVector>& selectedJetP4, const std::vector<double>& selectedJetCSV, const std::vector<JetType>& selectedJetType, + const std::vector<vector<double>>& selectedJetVariation, const std::vector<TLorentzVector>& looseSelectedJetP4, const std::vector<double>& looseSelectedJetCSV, TLorentzVector& metP4, @@ -34,6 +35,7 @@ void MEMClassifier::setup_mem( selectedJetP4, selectedJetCSV, selectedJetType, + selectedJetVariation, looseSelectedJetP4, looseSelectedJetCSV, metP4, @@ -47,6 +49,7 @@ void MEMClassifier::setup_mem( selectedJetP4, selectedJetCSV, selectedJetType, + selectedJetVariation, looseSelectedJetP4, looseSelectedJetCSV, metP4, @@ -72,6 +75,7 @@ void MEMClassifier::setup_mem_impl( const std::vector<TLorentzVector>& selectedJetP4, const std::vector<double>& selectedJetCSV, const std::vector<JetType>& selectedJetType, + const std::vector<vector<double>>& selectedJetVariation, const std::vector<TLorentzVector>& looseSelectedJetP4, const std::vector<double>& looseSelectedJetCSV, TLorentzVector& metP4, @@ -115,6 +119,12 @@ void MEMClassifier::setup_mem_impl( selectedJetCSV.at(ij), false ); + if (selectedJetVariation.size() > 0) { + for (unsigned int ivar=0; ivar < selectedJetVariation.at(ij).size(); ivar++) { + jet->p4_variations.push_back(selectedJetVariation.at(ij).at(ivar)); + } + } + if (is_btagged) { tagged.push_back(jet); } else { @@ -146,6 +156,7 @@ void MEMClassifier::setup_mem_sl_2w2h2t_sj( const std::vector<TLorentzVector>& selectedJetP4, const std::vector<double>& selectedJetCSV, const std::vector<JetType>& selectedJetType, + const std::vector<vector<double>>& selectedJetVariation, const std::vector<TLorentzVector>& looseSelectedJetP4, const std::vector<double>& looseSelectedJetCSV, TLorentzVector& metP4, @@ -247,6 +258,7 @@ MEMResult MEMClassifier::GetOutput( const std::vector<TLorentzVector>& selectedJetP4, const std::vector<double>& selectedJetCSV, const std::vector<JetType>& selectedJetType, + const std::vector<vector<double>>& selectedJetVariation, TLorentzVector& metP4 ) { const int nleps = selectedLeptonP4.size(); @@ -280,6 +292,7 @@ MEMResult MEMClassifier::GetOutput( selectedJetP4, selectedJetCSV, selectedJetType, + selectedJetVariation, {}, {}, metP4 @@ -294,6 +307,7 @@ MEMResult MEMClassifier::GetOutput( const std::vector<TLorentzVector>& selectedJetP4, const std::vector<double>& selectedJetCSV, const std::vector<JetType>& selectedJetType, + const std::vector<vector<double>>& selectedJetVariation, const std::vector<TLorentzVector>& looseSelectedJetP4, const std::vector<double>& looseSelectedJetCSV, TLorentzVector& metP4, @@ -317,6 +331,7 @@ MEMResult MEMClassifier::GetOutput( selectedJetP4, selectedJetCSV, selectedJetType, + selectedJetVariation, looseSelectedJetP4, looseSelectedJetCSV, metP4, objs, res @@ -362,6 +377,13 @@ MEMResult MEMClassifier::GetOutput( res.n_perm_sig = res_sig.num_perm; res.n_perm_bkg = res_bkg.num_perm; res.p = res.p_sig / (res.p_sig + mem_weight*res.p_bkg); + + if (selectedJetVariation.size() > 0) { + const auto num_var = selectedJetVariation.at(1).size(); + for (unsigned int nvar = 0; nvar < num_var; nvar++) { + res.p_variated.push_back(res_sig.variated.at(nvar) / (res_sig.variated.at(nvar) + mem_weight * res_bkg.variated.at(nvar))); + } + } return res; } @@ -446,6 +468,7 @@ MEMClassifier::MEMClassifier(int verbosity, const char* _btag_prefix) : btag_pre cfg.perm_pruning.push_back(MEM::Permutations::BTagged); cfg.perm_pruning.push_back(MEM::Permutations::QUntagged); cfg.perm_pruning.push_back(MEM::Permutations::QQbarBBbarSymmetry); + cfg.num_jet_variations = 100; integrand = new MEM::Integrand( verbosity,