CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
TriggerObjectTableProducer Class Reference
Inheritance diagram for TriggerObjectTableProducer:
edm::stream::EDProducer<>

Classes

struct  SelectedObject
 

Public Member Functions

 TriggerObjectTableProducer (const edm::ParameterSet &iConfig)
 
 ~TriggerObjectTableProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Member Functions

void produce (edm::Event &, edm::EventSetup const &) override
 

Private Attributes

std::string bitsDoc_
 
std::string idDoc_
 
edm::EDGetTokenT
< l1t::EGammaBxCollection
l1EG_
 
edm::EDGetTokenT
< l1t::JetBxCollection
l1Jet_
 
edm::EDGetTokenT
< l1t::MuonBxCollection
l1Muon_
 
edm::EDGetTokenT
< l1t::EtSumBxCollection
l1Sum_
 
edm::EDGetTokenT
< l1t::TauBxCollection
l1Tau_
 
std::string name_
 
std::vector< SelectedObjectsels_
 
edm::EDGetTokenT< std::vector
< pat::TriggerObjectStandAlone > > 
src_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T...>
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T...>
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 27 of file TriggerObjectTableProducer.cc.

Constructor & Destructor Documentation

TriggerObjectTableProducer::TriggerObjectTableProducer ( const edm::ParameterSet iConfig)
inlineexplicit

Definition at line 29 of file TriggerObjectTableProducer.cc.

References bitsDoc_, edm::ParameterSet::getParameter(), idDoc_, TrackValidation_cff::pset, and sels_.

30  : name_(iConfig.getParameter<std::string>("name")),
31  src_(consumes<std::vector<pat::TriggerObjectStandAlone>>(iConfig.getParameter<edm::InputTag>("src"))),
32  l1EG_(consumes<l1t::EGammaBxCollection>(iConfig.getParameter<edm::InputTag>("l1EG"))),
33  l1Sum_(consumes<l1t::EtSumBxCollection>(iConfig.getParameter<edm::InputTag>("l1Sum"))),
34  l1Jet_(consumes<l1t::JetBxCollection>(iConfig.getParameter<edm::InputTag>("l1Jet"))),
35  l1Muon_(consumes<l1t::MuonBxCollection>(iConfig.getParameter<edm::InputTag>("l1Muon"))),
36  l1Tau_(consumes<l1t::TauBxCollection>(iConfig.getParameter<edm::InputTag>("l1Tau"))) {
37  std::vector<edm::ParameterSet> selPSets = iConfig.getParameter<std::vector<edm::ParameterSet>>("selections");
38  sels_.reserve(selPSets.size());
39  std::stringstream idstr, qualitystr;
40  idstr << "ID of the object: ";
41  for (auto &pset : selPSets) {
42  sels_.emplace_back(pset);
43  idstr << sels_.back().id << " = " << sels_.back().name;
44  if (sels_.size() < selPSets.size())
45  idstr << ", ";
46  if (!sels_.back().qualityBitsDoc.empty()) {
47  qualitystr << sels_.back().qualityBitsDoc << " for " << sels_.back().name << "; ";
48  }
49  }
50  idDoc_ = idstr.str();
51  bitsDoc_ = qualitystr.str();
52 
53  produces<nanoaod::FlatTable>();
54  }
edm::EDGetTokenT< l1t::JetBxCollection > l1Jet_
edm::EDGetTokenT< std::vector< pat::TriggerObjectStandAlone > > src_
edm::EDGetTokenT< l1t::MuonBxCollection > l1Muon_
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::EDGetTokenT< l1t::TauBxCollection > l1Tau_
std::vector< SelectedObject > sels_
edm::EDGetTokenT< l1t::EGammaBxCollection > l1EG_
edm::EDGetTokenT< l1t::EtSumBxCollection > l1Sum_
TriggerObjectTableProducer::~TriggerObjectTableProducer ( )
inlineoverride

Definition at line 56 of file TriggerObjectTableProducer.cc.

56 {}

Member Function Documentation

void TriggerObjectTableProducer::produce ( edm::Event iEvent,
edm::EventSetup const &  iSetup 
)
overrideprivate

Definition at line 115 of file TriggerObjectTableProducer.cc.

References funct::abs(), bitsDoc_, reco::deltaR2(), alignCSCRings::e, PVValHelper::eta, edm::Event::getByToken(), mps_fire::i, gpuClustering::id, idDoc_, dqmiolumiharvest::j, L1Analysis::kMissingEt, L1Analysis::kMissingEtHF, L1Analysis::kMissingHt, L1Analysis::kMissingHtHF, L1Analysis::kTotalEt, L1Analysis::kTotalEtEm, L1Analysis::kTotalHt, L1Analysis::kTotalHtHF, l1EG_, l1Jet_, l1Muon_, l1Sum_, l1Tau_, eostools::move(), name_, getGTfromDQMFile::obj, phi, DiDispStaMuonMonitor_cfi::pt, edm::Event::put(), fileCollector::seed, EgammaValidation_Wenu_cff::sel, sels_, pat::TriggerObject::setCollection(), alcazmumu_cfi::src, src_, trigger::TriggerL1EG, trigger::TriggerL1ETM, trigger::TriggerL1ETT, trigger::TriggerL1HTM, trigger::TriggerL1HTT, trigger::TriggerL1Jet, trigger::TriggerL1Mu, and trigger::TriggerL1Tau.

115  {
117  iEvent.getByToken(src_, src);
118 
119  std::vector<std::pair<const pat::TriggerObjectStandAlone *, const SelectedObject *>> selected;
120  for (const auto &obj : *src) {
121  for (const auto &sel : sels_) {
122  if (sel.match(obj) && (sel.skipObjectsNotPassingQualityBits ? (int(sel.qualityBits(obj)) > 0) : true)) {
123  selected.emplace_back(&obj, &sel);
124  break;
125  }
126  }
127  }
128 
129  // Self-cleaning
130  std::map<const pat::TriggerObjectStandAlone *, int> selected_bits;
131  for (unsigned int i = 0; i < selected.size(); ++i) {
132  const auto &obj = *selected[i].first;
133  const auto &sel = *selected[i].second;
134  selected_bits[&obj] = int(sel.qualityBits(obj));
135 
136  for (unsigned int j = 0; j < i; ++j) {
137  const auto &obj2 = *selected[j].first;
138  const auto &sel2 = *selected[j].second;
139  if (sel.id == sel2.id && abs(obj.pt() - obj2.pt()) < 1e-6 && deltaR2(obj, obj2) < 1e-6) {
140  selected_bits[&obj2] |= selected_bits[&obj]; //Keep filters from all the objects
141  selected.erase(selected.begin() + i);
142  i--;
143  }
144  }
145  }
146 
152  iEvent.getByToken(l1EG_, l1EG);
153  iEvent.getByToken(l1Sum_, l1Sum);
154  iEvent.getByToken(l1Jet_, l1Jet);
155  iEvent.getByToken(l1Muon_, l1Muon);
156  iEvent.getByToken(l1Tau_, l1Tau);
157 
158  std::vector<pair<pat::TriggerObjectStandAlone, int>> l1Objects;
159 
160  for (l1t::EGammaBxCollection::const_iterator it = l1EG->begin(0); it != l1EG->end(0); it++) {
161  pat::TriggerObjectStandAlone l1obj(it->p4());
162  l1obj.setCollection("L1EG");
163  l1obj.addTriggerObjectType(trigger::TriggerL1EG);
164  l1Objects.emplace_back(l1obj, it->hwIso());
165  }
166 
167  for (l1t::EtSumBxCollection::const_iterator it = l1Sum->begin(0); it != l1Sum->end(0); it++) {
168  pat::TriggerObjectStandAlone l1obj(it->p4());
169 
170  switch (it->getType()) {
172  l1obj.addTriggerObjectType(trigger::TriggerL1ETM);
173  l1obj.setCollection("L1ETM");
174  break;
175 
177  l1obj.addTriggerObjectType(trigger::TriggerL1ETM);
178  l1obj.setCollection("L1ETMHF");
179  break;
180 
182  l1obj.addTriggerObjectType(trigger::TriggerL1ETT);
183  l1obj.setCollection("L1ETT");
184  break;
185 
187  l1obj.addTriggerObjectType(trigger::TriggerL1ETT);
188  l1obj.setCollection("L1ETEm");
189  break;
190 
192  l1obj.addTriggerObjectType(trigger::TriggerL1HTT);
193  l1obj.setCollection("L1HTT");
194  break;
195 
197  l1obj.addTriggerObjectType(trigger::TriggerL1HTT);
198  l1obj.setCollection("L1HTTHF");
199  break;
200 
202  l1obj.addTriggerObjectType(trigger::TriggerL1HTM);
203  l1obj.setCollection("L1HTM");
204  break;
205 
207  l1obj.addTriggerObjectType(trigger::TriggerL1HTM);
208  l1obj.setCollection("L1HTMHF");
209  break;
210 
211  default:
212  continue;
213  }
214 
215  l1Objects.emplace_back(l1obj, it->hwIso());
216  }
217 
218  for (l1t::JetBxCollection::const_iterator it = l1Jet->begin(0); it != l1Jet->end(0); it++) {
219  pat::TriggerObjectStandAlone l1obj(it->p4());
220  l1obj.setCollection("L1Jet");
221  l1obj.addTriggerObjectType(trigger::TriggerL1Jet);
222  l1Objects.emplace_back(l1obj, it->hwIso());
223  }
224 
225  for (l1t::MuonBxCollection::const_iterator it = l1Muon->begin(0); it != l1Muon->end(0); it++) {
226  pat::TriggerObjectStandAlone l1obj(it->p4());
227  l1obj.setCollection("L1Mu");
228  l1obj.addTriggerObjectType(trigger::TriggerL1Mu);
229  l1obj.setCharge(it->charge());
230  l1Objects.emplace_back(l1obj, it->hwIso());
231  }
232 
233  for (l1t::TauBxCollection::const_iterator it = l1Tau->begin(0); it != l1Tau->end(0); it++) {
234  pat::TriggerObjectStandAlone l1obj(it->p4());
235  l1obj.setCollection("L1Tau");
236  l1obj.addTriggerObjectType(trigger::TriggerL1Tau);
237  l1Objects.emplace_back(l1obj, it->hwIso());
238  }
239 
240  unsigned int nobj = selected.size();
241  std::vector<float> pt(nobj, 0), eta(nobj, 0), phi(nobj, 0), l1pt(nobj, 0), l1pt_2(nobj, 0), l2pt(nobj, 0);
242  std::vector<int> id(nobj, 0), bits(nobj, 0), l1iso(nobj, 0), l1charge(nobj, 0);
243  for (unsigned int i = 0; i < nobj; ++i) {
244  const auto &obj = *selected[i].first;
245  const auto &sel = *selected[i].second;
246  pt[i] = obj.pt();
247  eta[i] = obj.eta();
248  phi[i] = obj.phi();
249  id[i] = sel.id;
250  bits[i] = selected_bits[&obj];
251  if (sel.l1DR2 > 0) {
252  float best = sel.l1DR2;
253  for (const auto &l1obj : l1Objects) {
254  const auto &seed = l1obj.first;
255  float dr2 = deltaR2(seed, obj);
256  if (dr2 < best && sel.l1cut(seed)) {
257  l1pt[i] = seed.pt();
258  l1iso[i] = l1obj.second;
259  l1charge[i] = seed.charge();
260  }
261  }
262  }
263  if (sel.l1DR2_2 > 0) {
264  float best = sel.l1DR2_2;
265  for (const auto &l1obj : l1Objects) {
266  const auto &seed = l1obj.first;
267  float dr2 = deltaR2(seed, obj);
268  if (dr2 < best && sel.l1cut_2(seed)) {
269  l1pt_2[i] = seed.pt();
270  }
271  }
272  }
273  if (sel.l2DR2 > 0) {
274  float best = sel.l2DR2;
275  for (const auto &seed : *src) {
276  float dr2 = deltaR2(seed, obj);
277  if (dr2 < best && sel.l2cut(seed)) {
278  l2pt[i] = seed.pt();
279  }
280  }
281  }
282  }
283 
284  auto tab = std::make_unique<nanoaod::FlatTable>(nobj, name_, false, false);
285  tab->addColumn<int>("id", id, idDoc_);
286  tab->addColumn<float>("pt", pt, "pt", 12);
287  tab->addColumn<float>("eta", eta, "eta", 12);
288  tab->addColumn<float>("phi", phi, "phi", 12);
289  tab->addColumn<float>("l1pt", l1pt, "pt of associated L1 seed", 8);
290  tab->addColumn<int>("l1iso", l1iso, "iso of associated L1 seed");
291  tab->addColumn<int>("l1charge", l1charge, "charge of associated L1 seed");
292  tab->addColumn<float>("l1pt_2", l1pt_2, "pt of associated secondary L1 seed", 8);
293  tab->addColumn<float>("l2pt", l2pt, "pt of associated 'L2' seed (i.e. HLT before tracking/PF)", 10);
294  tab->addColumn<int>("filterBits", bits, "extra bits of associated information: " + bitsDoc_);
295  iEvent.put(std::move(tab));
296 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
uint16_t *__restrict__ id
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
enum start value shifted to 81 so as to avoid clashes with PDG codes
edm::EDGetTokenT< l1t::JetBxCollection > l1Jet_
std::vector< T >::const_iterator const_iterator
Definition: BXVector.h:18
edm::EDGetTokenT< std::vector< pat::TriggerObjectStandAlone > > src_
void setCollection(const std::string &collName)
Methods.
Definition: TriggerObject.h:79
edm::EDGetTokenT< l1t::MuonBxCollection > l1Muon_
def move
Definition: eostools.py:511
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16
edm::EDGetTokenT< l1t::TauBxCollection > l1Tau_
std::vector< SelectedObject > sels_
edm::EDGetTokenT< l1t::EGammaBxCollection > l1EG_
edm::EDGetTokenT< l1t::EtSumBxCollection > l1Sum_
Analysis-level trigger object class (stand-alone)

Member Data Documentation

std::string TriggerObjectTableProducer::bitsDoc_
private

Definition at line 63 of file TriggerObjectTableProducer.cc.

Referenced by produce(), and TriggerObjectTableProducer().

std::string TriggerObjectTableProducer::idDoc_
private

Definition at line 63 of file TriggerObjectTableProducer.cc.

Referenced by produce(), and TriggerObjectTableProducer().

edm::EDGetTokenT<l1t::EGammaBxCollection> TriggerObjectTableProducer::l1EG_
private

Definition at line 65 of file TriggerObjectTableProducer.cc.

Referenced by produce().

edm::EDGetTokenT<l1t::JetBxCollection> TriggerObjectTableProducer::l1Jet_
private

Definition at line 67 of file TriggerObjectTableProducer.cc.

Referenced by produce().

edm::EDGetTokenT<l1t::MuonBxCollection> TriggerObjectTableProducer::l1Muon_
private

Definition at line 68 of file TriggerObjectTableProducer.cc.

Referenced by produce().

edm::EDGetTokenT<l1t::EtSumBxCollection> TriggerObjectTableProducer::l1Sum_
private

Definition at line 66 of file TriggerObjectTableProducer.cc.

Referenced by produce().

edm::EDGetTokenT<l1t::TauBxCollection> TriggerObjectTableProducer::l1Tau_
private

Definition at line 69 of file TriggerObjectTableProducer.cc.

Referenced by produce().

std::string TriggerObjectTableProducer::name_
private

Definition at line 61 of file TriggerObjectTableProducer.cc.

Referenced by produce().

std::vector<SelectedObject> TriggerObjectTableProducer::sels_
private

Definition at line 111 of file TriggerObjectTableProducer.cc.

Referenced by produce(), and TriggerObjectTableProducer().

edm::EDGetTokenT<std::vector<pat::TriggerObjectStandAlone> > TriggerObjectTableProducer::src_
private

Definition at line 62 of file TriggerObjectTableProducer.cc.

Referenced by produce().