CMS 3D CMS Logo

HLTJetCollectionsForLeptonPlusJets.cc
Go to the documentation of this file.
1 #include <cmath>
2 
16 
17 template <typename jetType>
19  : hltLeptonTag(iConfig.getParameter<edm::InputTag>("HltLeptonTag")),
20  sourceJetTag(iConfig.getParameter<edm::InputTag>("SourceJetTag")),
21  // minimum delta-R^2 threshold with sign
22  minDeltaR2_(iConfig.getParameter<double>("minDeltaR") * std::abs(iConfig.getParameter<double>("minDeltaR"))) {
23  using namespace edm;
24  using namespace std;
25  typedef vector<RefVector<vector<jetType>, jetType, refhelper::FindUsingAdvance<vector<jetType>, jetType>>>
26  JetCollectionVector;
27  m_theLeptonToken = consumes<trigger::TriggerFilterObjectWithRefs>(hltLeptonTag);
28  m_theJetToken = consumes<std::vector<jetType>>(sourceJetTag);
29  produces<JetCollectionVector>();
30 }
31 
32 template <typename jetType>
35  desc.add<edm::InputTag>("HltLeptonTag", edm::InputTag("triggerFilterObjectWithRefs"));
36  desc.add<edm::InputTag>("SourceJetTag", edm::InputTag("caloJetCollection"));
37  desc.add<double>("minDeltaR", 0.5);
39 }
40 
41 //
42 // member functions
43 //
44 
45 // ------------ method called to produce the data ------------
46 // template <typename T>
47 template <typename jetType>
49  using namespace edm;
50  using namespace std;
51 
52  typedef vector<RefVector<vector<jetType>, jetType, refhelper::FindUsingAdvance<vector<jetType>, jetType>>>
53  JetCollectionVector;
54  typedef vector<jetType> JetCollection;
57 
59  iEvent.getByToken(m_theLeptonToken, PrevFilterOutput);
60 
61  //its easier on the if statement flow if I try everything at once, shouldnt add to timing
62  // Electrons can be stored as objects of types TriggerCluster, TriggerElectron, or TriggerPhoton
63  vector<Ref<reco::RecoEcalCandidateCollection>> clusCands;
64  PrevFilterOutput->getObjects(trigger::TriggerCluster, clusCands);
65 
66  vector<Ref<reco::ElectronCollection>> eleCands;
67  PrevFilterOutput->getObjects(trigger::TriggerElectron, eleCands);
68 
69  trigger::VRphoton photonCands;
70  PrevFilterOutput->getObjects(trigger::TriggerPhoton, photonCands);
71 
72  vector<reco::RecoChargedCandidateRef> muonCands;
73  PrevFilterOutput->getObjects(trigger::TriggerMuon, muonCands);
74 
75  Handle<JetCollection> theJetCollectionHandle;
76  iEvent.getByToken(m_theJetToken, theJetCollectionHandle);
77 
78  const JetCollection& theJetCollection = *theJetCollectionHandle;
79 
80  unique_ptr<JetCollectionVector> allSelections(new JetCollectionVector());
81 
82  if (!clusCands.empty()) { // try trigger clusters
83  for (auto const& clusCand : clusCands) {
84  JetRefVector refVector;
85  for (unsigned int j = 0; j < theJetCollection.size(); j++) {
86  if (reco::deltaR2(clusCand->superCluster()->position(), theJetCollection[j]) > minDeltaR2_)
87  refVector.push_back(JetRef(theJetCollectionHandle, j));
88  }
89  allSelections->push_back(refVector);
90  }
91  }
92 
93  if (!eleCands.empty()) { // try electrons
94  for (auto const& eleCand : eleCands) {
95  JetRefVector refVector;
96  for (unsigned int j = 0; j < theJetCollection.size(); j++) {
97  if (reco::deltaR2(eleCand->superCluster()->position(), theJetCollection[j]) > minDeltaR2_)
98  refVector.push_back(JetRef(theJetCollectionHandle, j));
99  }
100  allSelections->push_back(refVector);
101  }
102  }
103 
104  if (!photonCands.empty()) { // try photons
105  for (auto const& photonCand : photonCands) {
106  JetRefVector refVector;
107  for (unsigned int j = 0; j < theJetCollection.size(); j++) {
108  if (reco::deltaR2(photonCand->superCluster()->position(), theJetCollection[j]) > minDeltaR2_)
109  refVector.push_back(JetRef(theJetCollectionHandle, j));
110  }
111  allSelections->push_back(refVector);
112  }
113  }
114 
115  if (!muonCands.empty()) { // muons
116  for (auto const& muonCand : muonCands) {
117  JetRefVector refVector;
118  for (unsigned int j = 0; j < theJetCollection.size(); j++) {
119  if (reco::deltaR2(muonCand->p4(), theJetCollection[j]) > minDeltaR2_)
120  refVector.push_back(JetRef(theJetCollectionHandle, j));
121  }
122  allSelections->push_back(refVector);
123  }
124  }
125 
126  iEvent.put(std::move(allSelections));
127 
128  return;
129 }
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
std::vector< Jet > JetCollection
Definition: Jet.h:53
edm::Ref< JetBxCollection > JetRef
Definition: Jet.h:12
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > m_theLeptonToken
std::string defaultModuleLabel()
void produce(edm::Event &, const edm::EventSetup &) override
int iEvent
Definition: GenABIO.cc:224
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::RefVector< JetBxCollection > JetRefVector
Definition: Jet.h:13
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
HLT enums.
edm::EDGetTokenT< std::vector< jetType > > m_theJetToken
std::vector< reco::RecoEcalCandidateRef > VRphoton
def move(src, dest)
Definition: eostools.py:511