From 8d2c1de8cabf90e8550003b5122e87f767a2196e Mon Sep 17 00:00:00 2001 From: Marino Missiroli Date: Wed, 23 Oct 2019 23:02:50 +0200 Subject: [PATCH] [NTuplizers] added RecoGen{Jet,MET}CollectionContainer --- .../interface/RecoGenJetCollectionContainer.h | 29 +++++ .../interface/RecoGenMETCollectionContainer.h | 39 ++++++ NTuplizers/plugins/JMETriggerNTuple.cc | 113 ++++++++++++++++++ .../src/RecoGenJetCollectionContainer.cc | 30 +++++ .../src/RecoGenMETCollectionContainer.cc | 45 +++++++ NTuplizers/src/classes.h | 4 + NTuplizers/src/classes_def.xml | 2 + readme.md | 2 +- 8 files changed, 263 insertions(+), 1 deletion(-) create mode 100644 NTuplizers/interface/RecoGenJetCollectionContainer.h create mode 100644 NTuplizers/interface/RecoGenMETCollectionContainer.h create mode 100644 NTuplizers/src/RecoGenJetCollectionContainer.cc create mode 100644 NTuplizers/src/RecoGenMETCollectionContainer.cc diff --git a/NTuplizers/interface/RecoGenJetCollectionContainer.h b/NTuplizers/interface/RecoGenJetCollectionContainer.h new file mode 100644 index 00000000..d1e4d029 --- /dev/null +++ b/NTuplizers/interface/RecoGenJetCollectionContainer.h @@ -0,0 +1,29 @@ +#ifndef JMETriggerAnalysis_RecoGenJetCollectionContainer_h +#define JMETriggerAnalysis_RecoGenJetCollectionContainer_h + +#include +#include + +class RecoGenJetCollectionContainer : public VRecoCandidateCollectionContainer { + + public: + explicit RecoGenJetCollectionContainer(const std::string&, const std::string&, const edm::EDGetToken&, const std::string& strCut="", const bool orderByHighestPt=false); + virtual ~RecoGenJetCollectionContainer() {} + + void clear(); + void reserve(const size_t); + void emplace_back(const reco::GenJet&); + + std::vector& vec_pt(){ return pt_; } + std::vector& vec_eta(){ return eta_; } + std::vector& vec_phi(){ return phi_; } + std::vector& vec_mass(){ return mass_; } + + protected: + std::vector pt_; + std::vector eta_; + std::vector phi_; + std::vector mass_; +}; + +#endif diff --git a/NTuplizers/interface/RecoGenMETCollectionContainer.h b/NTuplizers/interface/RecoGenMETCollectionContainer.h new file mode 100644 index 00000000..328828a2 --- /dev/null +++ b/NTuplizers/interface/RecoGenMETCollectionContainer.h @@ -0,0 +1,39 @@ +#ifndef JMETriggerAnalysis_RecoGenMETCollectionContainer_h +#define JMETriggerAnalysis_RecoGenMETCollectionContainer_h + +#include +#include + +class RecoGenMETCollectionContainer : public VRecoCandidateCollectionContainer { + + public: + explicit RecoGenMETCollectionContainer(const std::string&, const std::string&, const edm::EDGetToken&, const std::string& strCut="", const bool orderByHighestPt=false); + virtual ~RecoGenMETCollectionContainer() {} + + void clear(); + void reserve(const size_t); + void emplace_back(const reco::GenMET&); + + std::vector& vec_pt(){ return pt_; } + std::vector& vec_phi(){ return phi_; } + std::vector& vec_sumEt(){ return sumEt_; } + std::vector& vec_NeutralEMEtFraction(){ return NeutralEMEtFraction_; } + std::vector& vec_NeutralHadEtFraction(){ return NeutralHadEtFraction_; } + std::vector& vec_ChargedEMEtFraction(){ return ChargedEMEtFraction_; } + std::vector& vec_ChargedHadEtFraction(){ return ChargedHadEtFraction_; } + std::vector& vec_MuonEtFraction(){ return MuonEtFraction_; } + std::vector& vec_InvisibleEtFraction(){ return InvisibleEtFraction_; } + + protected: + std::vector pt_; + std::vector phi_; + std::vector sumEt_; + std::vector NeutralEMEtFraction_; + std::vector NeutralHadEtFraction_; + std::vector ChargedEMEtFraction_; + std::vector ChargedHadEtFraction_; + std::vector MuonEtFraction_; + std::vector InvisibleEtFraction_; +}; + +#endif diff --git a/NTuplizers/plugins/JMETriggerNTuple.cc b/NTuplizers/plugins/JMETriggerNTuple.cc index 700a0658..fcff4b0d 100644 --- a/NTuplizers/plugins/JMETriggerNTuple.cc +++ b/NTuplizers/plugins/JMETriggerNTuple.cc @@ -13,8 +13,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -63,8 +65,10 @@ class JMETriggerNTuple : public edm::EDAnalyzer { std::vector v_recoVertexCollectionContainer_; std::vector v_recoPFCandidateCollectionContainer_; std::vector v_patPackedCandidateCollectionContainer_; + std::vector v_recoGenJetCollectionContainer_; std::vector v_recoPFJetCollectionContainer_; std::vector v_patJetCollectionContainer_; + std::vector v_recoGenMETCollectionContainer_; std::vector v_recoCaloMETCollectionContainer_; std::vector v_recoPFMETCollectionContainer_; std::vector v_patMETCollectionContainer_; @@ -148,6 +152,27 @@ JMETriggerNTuple::JMETriggerNTuple(const edm::ParameterSet& iConfig) } } + // reco::GenJetCollection + v_recoGenJetCollectionContainer_.clear(); + + if(iConfig.exists("recoGenJetCollections")){ + + const edm::ParameterSet& pset_recoGenJetCollections = iConfig.getParameter("recoGenJetCollections"); + + const auto& inputTagLabels_recoGenJetCollections = pset_recoGenJetCollections.getParameterNamesForType(); + + v_recoGenJetCollectionContainer_.reserve(inputTagLabels_recoGenJetCollections.size()); + + for(const std::string& label : inputTagLabels_recoGenJetCollections){ + + const auto& inputTag = pset_recoGenJetCollections.getParameter(label); + + LogDebug("JMETriggerNTuple::JMETriggerNTuple") << "adding reco::GenJetCollection \"" << inputTag.label() << "\" (NTuple branches: \"" << label << "_*\")"; + + v_recoGenJetCollectionContainer_.emplace_back(RecoGenJetCollectionContainer(label, inputTag.label(), this->consumes >(inputTag))); + } + } + // reco::PFJetCollection v_recoPFJetCollectionContainer_.clear(); @@ -190,6 +215,27 @@ JMETriggerNTuple::JMETriggerNTuple(const edm::ParameterSet& iConfig) } } + // reco::GenMETCollection + v_recoGenMETCollectionContainer_.clear(); + + if(iConfig.exists("recoGenMETCollections")){ + + const edm::ParameterSet& pset_recoGenMETCollections = iConfig.getParameter("recoGenMETCollections"); + + const auto& inputTagLabels_recoGenMETCollections = pset_recoGenMETCollections.getParameterNamesForType(); + + v_recoGenMETCollectionContainer_.reserve(inputTagLabels_recoGenMETCollections.size()); + + for(const std::string& label : inputTagLabels_recoGenMETCollections){ + + const auto& inputTag = pset_recoGenMETCollections.getParameter(label); + + LogDebug("JMETriggerNTuple::JMETriggerNTuple") << "adding reco::GenMETCollection \"" << inputTag.label() << "\" (NTuple branches: \"" << label << "_*\")"; + + v_recoGenMETCollectionContainer_.emplace_back(RecoGenMETCollectionContainer(label, inputTag.label(), this->consumes >(inputTag))); + } + } + // reco::CaloMETCollection v_recoCaloMETCollectionContainer_.clear(); @@ -398,6 +444,29 @@ void JMETriggerNTuple::analyze(const edm::Event& iEvent, const edm::EventSetup& } } + // fill recoGenJetCollectionContainers + if(not iEvent.isRealData()){ + + for(auto& recoGenJetCollectionContainer_i : v_recoGenJetCollectionContainer_){ + + edm::Handle > i_handle; + iEvent.getByToken(recoGenJetCollectionContainer_i.token(), i_handle); + + if(not i_handle.isValid()){ + + edm::LogWarning("JMETriggerNTuple::analyze") + << "invalid handle for input collection: \"" << recoGenJetCollectionContainer_i.inputTagLabel() + << "\" (NTuple branches: \"" << recoGenJetCollectionContainer_i.name() << "_*\")"; + + recoGenJetCollectionContainer_i.clear(); + } + else { + + recoGenJetCollectionContainer_i.fill(*i_handle); + } + } + } + // fill recoPFJetCollectionContainers for(auto& recoPFJetCollectionContainer_i : v_recoPFJetCollectionContainer_){ @@ -438,6 +507,29 @@ void JMETriggerNTuple::analyze(const edm::Event& iEvent, const edm::EventSetup& } } + // fill recoGenMETCollectionContainers + if(not iEvent.isRealData()){ + + for(auto& recoGenMETCollectionContainer_i : v_recoGenMETCollectionContainer_){ + + edm::Handle > i_handle; + iEvent.getByToken(recoGenMETCollectionContainer_i.token(), i_handle); + + if(not i_handle.isValid()){ + + edm::LogWarning("JMETriggerNTuple::analyze") + << "invalid handle for input collection: \"" << recoGenMETCollectionContainer_i.inputTagLabel() + << "\" (NTuple branches: \"" << recoGenMETCollectionContainer_i.name() << "_*\")"; + + recoGenMETCollectionContainer_i.clear(); + } + else { + + recoGenMETCollectionContainer_i.fill(*i_handle); + } + } + } + // fill recoCaloMETCollectionContainers for(auto& recoCaloMETCollectionContainer_i : v_recoCaloMETCollectionContainer_){ @@ -603,6 +695,14 @@ void JMETriggerNTuple::beginJob(){ this->addBranch(patPackedCandidateCollectionContainer_i.name()+"_fromPV", &patPackedCandidateCollectionContainer_i.vec_fromPV()); } + for(auto& recoGenJetCollectionContainer_i : v_recoGenJetCollectionContainer_){ + + this->addBranch(recoGenJetCollectionContainer_i.name()+"_pt", &recoGenJetCollectionContainer_i.vec_pt()); + this->addBranch(recoGenJetCollectionContainer_i.name()+"_eta", &recoGenJetCollectionContainer_i.vec_eta()); + this->addBranch(recoGenJetCollectionContainer_i.name()+"_phi", &recoGenJetCollectionContainer_i.vec_phi()); + this->addBranch(recoGenJetCollectionContainer_i.name()+"_mass", &recoGenJetCollectionContainer_i.vec_mass()); + } + for(auto& recoPFJetCollectionContainer_i : v_recoPFJetCollectionContainer_){ this->addBranch(recoPFJetCollectionContainer_i.name()+"_pt", &recoPFJetCollectionContainer_i.vec_pt()); @@ -619,6 +719,19 @@ void JMETriggerNTuple::beginJob(){ this->addBranch(patJetCollectionContainer_i.name()+"_mass", &patJetCollectionContainer_i.vec_mass()); } + for(auto& recoGenMETCollectionContainer_i : v_recoGenMETCollectionContainer_){ + + this->addBranch(recoGenMETCollectionContainer_i.name()+"_pt", &recoGenMETCollectionContainer_i.vec_pt()); + this->addBranch(recoGenMETCollectionContainer_i.name()+"_phi", &recoGenMETCollectionContainer_i.vec_phi()); + this->addBranch(recoGenMETCollectionContainer_i.name()+"_sumEt", &recoGenMETCollectionContainer_i.vec_sumEt()); + this->addBranch(recoGenMETCollectionContainer_i.name()+"_NeutralEMEtFraction", &recoGenMETCollectionContainer_i.vec_NeutralEMEtFraction()); + this->addBranch(recoGenMETCollectionContainer_i.name()+"_NeutralHadEtFraction", &recoGenMETCollectionContainer_i.vec_NeutralHadEtFraction()); + this->addBranch(recoGenMETCollectionContainer_i.name()+"_ChargedEMEtFraction", &recoGenMETCollectionContainer_i.vec_ChargedEMEtFraction()); + this->addBranch(recoGenMETCollectionContainer_i.name()+"_ChargedHadEtFraction", &recoGenMETCollectionContainer_i.vec_ChargedHadEtFraction()); + this->addBranch(recoGenMETCollectionContainer_i.name()+"_MuonEtFraction", &recoGenMETCollectionContainer_i.vec_MuonEtFraction()); + this->addBranch(recoGenMETCollectionContainer_i.name()+"_InvisibleEtFraction", &recoGenMETCollectionContainer_i.vec_InvisibleEtFraction()); + } + for(auto& recoCaloMETCollectionContainer_i : v_recoCaloMETCollectionContainer_){ this->addBranch(recoCaloMETCollectionContainer_i.name()+"_pt", &recoCaloMETCollectionContainer_i.vec_pt()); diff --git a/NTuplizers/src/RecoGenJetCollectionContainer.cc b/NTuplizers/src/RecoGenJetCollectionContainer.cc new file mode 100644 index 00000000..e77b1802 --- /dev/null +++ b/NTuplizers/src/RecoGenJetCollectionContainer.cc @@ -0,0 +1,30 @@ +#include + +RecoGenJetCollectionContainer::RecoGenJetCollectionContainer( + const std::string& name, const std::string& inputTagLabel, const edm::EDGetToken& token, const std::string& strCut, const bool orderByHighestPt +) : VRecoCandidateCollectionContainer(name, inputTagLabel, token, strCut, orderByHighestPt) { +} + +void RecoGenJetCollectionContainer::clear(){ + + pt_.clear(); + eta_.clear(); + phi_.clear(); + mass_.clear(); +} + +void RecoGenJetCollectionContainer::reserve(const size_t vec_size){ + + pt_.reserve(vec_size); + eta_.reserve(vec_size); + phi_.reserve(vec_size); + mass_.reserve(vec_size); +} + +void RecoGenJetCollectionContainer::emplace_back(const reco::GenJet& obj){ + + pt_.emplace_back(obj.pt()); + eta_.emplace_back(obj.eta()); + phi_.emplace_back(obj.phi()); + mass_.emplace_back(obj.mass()); +} diff --git a/NTuplizers/src/RecoGenMETCollectionContainer.cc b/NTuplizers/src/RecoGenMETCollectionContainer.cc new file mode 100644 index 00000000..920c81bd --- /dev/null +++ b/NTuplizers/src/RecoGenMETCollectionContainer.cc @@ -0,0 +1,45 @@ +#include + +RecoGenMETCollectionContainer::RecoGenMETCollectionContainer( + const std::string& name, const std::string& inputTagLabel, const edm::EDGetToken& token, const std::string& strCut, const bool orderByHighestPt +) : VRecoCandidateCollectionContainer(name, inputTagLabel, token, strCut, orderByHighestPt) { +} + +void RecoGenMETCollectionContainer::clear(){ + + pt_.clear(); + phi_.clear(); + sumEt_.clear(); + NeutralEMEtFraction_.clear(); + NeutralHadEtFraction_.clear(); + ChargedEMEtFraction_.clear(); + ChargedHadEtFraction_.clear(); + MuonEtFraction_.clear(); + InvisibleEtFraction_.clear(); +} + +void RecoGenMETCollectionContainer::reserve(const size_t vec_size){ + + pt_.reserve(vec_size); + phi_.reserve(vec_size); + sumEt_.reserve(vec_size); + NeutralEMEtFraction_.reserve(vec_size); + NeutralHadEtFraction_.reserve(vec_size); + ChargedEMEtFraction_.reserve(vec_size); + ChargedHadEtFraction_.reserve(vec_size); + MuonEtFraction_.reserve(vec_size); + InvisibleEtFraction_.reserve(vec_size); +} + +void RecoGenMETCollectionContainer::emplace_back(const reco::GenMET& obj){ + + pt_.emplace_back(obj.pt()); + phi_.emplace_back(obj.phi()); + sumEt_.emplace_back(obj.sumEt()); + NeutralEMEtFraction_.emplace_back(obj.NeutralEMEtFraction()); + NeutralHadEtFraction_.emplace_back(obj.NeutralHadEtFraction()); + ChargedEMEtFraction_.emplace_back(obj.ChargedEMEtFraction()); + ChargedHadEtFraction_.emplace_back(obj.ChargedHadEtFraction()); + MuonEtFraction_.emplace_back(obj.MuonEtFraction()); + InvisibleEtFraction_.emplace_back(obj.InvisibleEtFraction()); +} diff --git a/NTuplizers/src/classes.h b/NTuplizers/src/classes.h index 491f4ef3..388c37a1 100644 --- a/NTuplizers/src/classes.h +++ b/NTuplizers/src/classes.h @@ -2,8 +2,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -18,8 +20,10 @@ namespace { RecoVertexCollectionContainer RecoVertexCollectionContainer1; RecoPFCandidateCollectionContainer RecoPFCandidateCollectionContainer1; PATPackedCandidateCollectionContainer PATPackedCandidateCollectionContainer1; + RecoGenJetCollectionContainer RecoGenJetCollectionContainer1; RecoPFJetCollectionContainer RecoPFJetCollectionContainer1; PATJetCollectionContainer PATJetCollectionContainer1; + RecoGenMETCollectionContainer RecoGenMETCollectionContainer1; RecoCaloMETCollectionContainer RecoCaloMETCollectionContainer1; RecoPFMETCollectionContainer RecoPFMETCollectionContainer1; PATMETCollectionContainer PATMETCollectionContainer1; diff --git a/NTuplizers/src/classes_def.xml b/NTuplizers/src/classes_def.xml index 279e583c..1591f3f6 100644 --- a/NTuplizers/src/classes_def.xml +++ b/NTuplizers/src/classes_def.xml @@ -3,8 +3,10 @@ + + diff --git a/readme.md b/readme.md index 785042db..64b14e2e 100644 --- a/readme.md +++ b/readme.md @@ -11,7 +11,7 @@ Set up CMSSW area: cmsrel CMSSW_10_6_1_patch3 cd CMSSW_10_6_1_patch3/src cmsenv -git cms-merge-topic cms-egamma:EgammaPostRecoTools +#git cms-merge-topic cms-egamma:EgammaPostRecoTools git cms-addpkg HLTrigger/Configuration git clone https://missirol@github.com/missirol/JMETriggerAnalysis.git -o missirol scram b