CMS 3D CMS Logo

L1ExtraParticlesProd.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: L1ExtraParticlesProd
4 // Class: L1ExtraParticlesProd
5 //
9 //
10 // Original Author: Werner Sun
11 // Created: Mon Oct 2 22:45:32 EDT 2006
12 //
13 //
14 
15 // system include files
16 #include <memory>
17 
18 // user include files
20 
23 
27 
30 
38 
44 
46 
47 // #include "FWCore/Utilities/interface/EDMException.h"
48 
49 //
50 // class decleration
51 //
52 
53 //
54 // constants, enums and typedefs
55 //
56 
57 //
58 // static data member definitions
59 //
60 
61 double const L1ExtraParticlesProd::muonMassGeV_ = 0.105658369; // PDG06
62 
63 //
64 // constructors and destructor
65 //
67  : produceMuonParticles_(iConfig.getParameter<bool>("produceMuonParticles")),
68  muonSource_(iConfig.getParameter<edm::InputTag>("muonSource")),
69  produceCaloParticles_(iConfig.getParameter<bool>("produceCaloParticles")),
70  isoEmSource_(iConfig.getParameter<edm::InputTag>("isolatedEmSource")),
71  nonIsoEmSource_(iConfig.getParameter<edm::InputTag>("nonIsolatedEmSource")),
72  cenJetSource_(iConfig.getParameter<edm::InputTag>("centralJetSource")),
73  forJetSource_(iConfig.getParameter<edm::InputTag>("forwardJetSource")),
74  tauJetSource_(iConfig.getParameter<edm::InputTag>("tauJetSource")),
75  isoTauJetSource_(iConfig.getParameter<edm::InputTag>("isoTauJetSource")),
76  etTotSource_(iConfig.getParameter<edm::InputTag>("etTotalSource")),
77  etHadSource_(iConfig.getParameter<edm::InputTag>("etHadSource")),
78  etMissSource_(iConfig.getParameter<edm::InputTag>("etMissSource")),
79  htMissSource_(iConfig.getParameter<edm::InputTag>("htMissSource")),
80  hfRingEtSumsSource_(iConfig.getParameter<edm::InputTag>("hfRingEtSumsSource")),
81  hfRingBitCountsSource_(iConfig.getParameter<edm::InputTag>("hfRingBitCountsSource")),
82  centralBxOnly_(iConfig.getParameter<bool>("centralBxOnly")),
83  ignoreHtMiss_(iConfig.getParameter<bool>("ignoreHtMiss")) {
84  using namespace l1extra;
85 
86  // register your products
87  produces<L1EmParticleCollection>("Isolated");
88  produces<L1EmParticleCollection>("NonIsolated");
89  produces<L1JetParticleCollection>("Central");
90  produces<L1JetParticleCollection>("Forward");
91  produces<L1JetParticleCollection>("Tau");
92  produces<L1JetParticleCollection>("IsoTau");
93  produces<L1MuonParticleCollection>();
94  produces<L1EtMissParticleCollection>("MET");
95  produces<L1EtMissParticleCollection>("MHT");
96  produces<L1HFRingsCollection>();
97 
98  // now do what ever other initialization is needed
99  consumes<L1MuGMTReadoutCollection>(muonSource_);
100  consumes<L1GctEmCandCollection>(isoEmSource_);
101  consumes<L1GctEmCandCollection>(nonIsoEmSource_);
102  consumes<L1GctJetCandCollection>(cenJetSource_);
103  consumes<L1GctJetCandCollection>(forJetSource_);
104  consumes<L1GctJetCandCollection>(tauJetSource_);
105  consumes<L1GctJetCandCollection>(isoTauJetSource_);
106  consumes<L1GctEtTotalCollection>(etTotSource_);
107  consumes<L1GctEtMissCollection>(etMissSource_);
108  consumes<L1GctEtHadCollection>(etHadSource_);
109  consumes<L1GctHtMissCollection>(htMissSource_);
110  consumes<L1GctHFRingEtSumsCollection>(hfRingEtSumsSource_);
111  consumes<L1GctHFBitCountsCollection>(hfRingBitCountsSource_);
112 }
113 
115  // do anything here that needs to be done at desctruction time
116  // (e.g. close files, deallocate resources etc.)
117 }
118 
119 //
120 // member functions
121 //
122 
123 // ------------ method called to produce the data ------------
125  using namespace edm;
126  using namespace l1extra;
127  using namespace std;
128 
129  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
130  // ~~~~~~~~~~~~~~~~~~~~ Muons ~~~~~~~~~~~~~~~~~~~~
131  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
132 
133  unique_ptr<L1MuonParticleCollection> muColl(new L1MuonParticleCollection);
134 
135  if (produceMuonParticles_) {
137  iSetup.get<L1MuTriggerScalesRcd>().get(muScales);
138 
140  iSetup.get<L1MuTriggerPtScaleRcd>().get(muPtScale);
141 
142  Handle<L1MuGMTReadoutCollection> hwMuCollection;
143  iEvent.getByLabel(muonSource_, hwMuCollection);
144 
145  vector<L1MuGMTExtendedCand> hwMuCands;
146 
147  if (!hwMuCollection.isValid()) {
148  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1MuGMTReadoutCollection with " << muonSource_
149  << "\nrequested in configuration, but not found in the event." << std::endl;
150  } else {
151  if (centralBxOnly_) {
152  // Get GMT candidates from central bunch crossing only
153  hwMuCands = hwMuCollection->getRecord().getGMTCands();
154  } else {
155  // Get GMT candidates from all bunch crossings
156  vector<L1MuGMTReadoutRecord> records = hwMuCollection->getRecords();
157  vector<L1MuGMTReadoutRecord>::const_iterator rItr = records.begin();
158  vector<L1MuGMTReadoutRecord>::const_iterator rEnd = records.end();
159 
160  for (; rItr != rEnd; ++rItr) {
161  vector<L1MuGMTExtendedCand> tmpCands = rItr->getGMTCands();
162 
163  hwMuCands.insert(hwMuCands.end(), tmpCands.begin(), tmpCands.end());
164  }
165  }
166 
167  // cout << "HW muons" << endl ;
168  vector<L1MuGMTExtendedCand>::const_iterator muItr = hwMuCands.begin();
169  vector<L1MuGMTExtendedCand>::const_iterator muEnd = hwMuCands.end();
170  for (int i = 0; muItr != muEnd; ++muItr, ++i) {
171  // cout << "#" << i
172  // << " name " << muItr->name()
173  // << " empty " << muItr->empty()
174  // << " pt " << muItr->ptIndex()
175  // << " eta " << muItr->etaIndex()
176  // << " phi " << muItr->phiIndex()
177  // << " iso " << muItr->isol()
178  // << " mip " << muItr->mip()
179  // << " bx " << muItr->bx()
180  // << endl ;
181 
182  if (!muItr->empty()) {
183  // keep x and y components non-zero and protect against roundoff.
184  double pt = muPtScale->getPtScale()->getLowEdge(muItr->ptIndex()) + 1.e-6;
185 
186  // cout << "L1Extra pt " << pt << endl ;
187 
188  double eta = muScales->getGMTEtaScale()->getCenter(muItr->etaIndex());
189 
190  double phi = muScales->getPhiScale()->getLowEdge(muItr->phiIndex());
191 
193 
194  muColl->push_back(L1MuonParticle(muItr->charge(), p4, *muItr, muItr->bx()));
195  }
196  }
197  }
198  }
199 
201 
202  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
203  // ~~~~~~~~~~~~~~~~~~~~ Calorimeter ~~~~~~~~~~~~~~~~~~~~
204  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
205 
206  unique_ptr<L1EmParticleCollection> isoEmColl(new L1EmParticleCollection);
207 
208  unique_ptr<L1EmParticleCollection> nonIsoEmColl(new L1EmParticleCollection);
209 
210  unique_ptr<L1JetParticleCollection> cenJetColl(new L1JetParticleCollection);
211 
212  unique_ptr<L1JetParticleCollection> forJetColl(new L1JetParticleCollection);
213 
214  unique_ptr<L1JetParticleCollection> tauJetColl(new L1JetParticleCollection);
215 
216  unique_ptr<L1JetParticleCollection> isoTauJetColl(new L1JetParticleCollection);
217 
218  unique_ptr<L1EtMissParticleCollection> etMissColl(new L1EtMissParticleCollection);
219 
220  unique_ptr<L1EtMissParticleCollection> htMissColl(new L1EtMissParticleCollection);
221 
222  unique_ptr<L1HFRingsCollection> hfRingsColl(new L1HFRingsCollection);
223 
224  if (produceCaloParticles_) {
225  // ~~~~~~~~~~~~~~~~~~~~ Geometry ~~~~~~~~~~~~~~~~~~~~
226 
227  ESHandle<L1CaloGeometry> caloGeomESH;
228  iSetup.get<L1CaloGeometryRecord>().get(caloGeomESH);
229  const L1CaloGeometry *caloGeom = &(*caloGeomESH);
230 
231  // ~~~~~~~~~~~~~~~~~~~~ EM ~~~~~~~~~~~~~~~~~~~~
232 
233  ESHandle<L1CaloEtScale> emScale;
234  iSetup.get<L1EmEtScaleRcd>().get(emScale);
235 
236  // Isolated EM
237  Handle<L1GctEmCandCollection> hwIsoEmCands;
238  iEvent.getByLabel(isoEmSource_, hwIsoEmCands);
239 
240  if (!hwIsoEmCands.isValid()) {
241  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctEmCandCollection with " << isoEmSource_
242  << "\nrequested in configuration, but not found in the event." << std::endl;
243  } else {
244  // cout << "HW iso EM" << endl ;
245 
246  L1GctEmCandCollection::const_iterator emItr = hwIsoEmCands->begin();
247  L1GctEmCandCollection::const_iterator emEnd = hwIsoEmCands->end();
248  for (int i = 0; emItr != emEnd; ++emItr, ++i) {
249  // cout << "#" << i
250  // << " name " << emItr->name()
251  // << " empty " << emItr->empty()
252  // << " rank " << emItr->rank()
253  // << " eta " << emItr->etaIndex()
254  // << " sign " << emItr->etaSign()
255  // << " phi " << emItr->phiIndex()
256  // << " iso " << emItr->isolated()
257  // << " bx " << emItr->bx()
258  // << endl ;
259 
260  if (!emItr->empty() && (!centralBxOnly_ || emItr->bx() == 0)) {
261  double et = emScale->et(emItr->rank());
262 
263  // cout << "L1Extra et " << et << endl ;
264 
265  isoEmColl->push_back(L1EmParticle(
266  gctLorentzVector(et, *emItr, caloGeom, true), Ref<L1GctEmCandCollection>(hwIsoEmCands, i), emItr->bx()));
267  }
268  }
269  }
270 
271  // Non-isolated EM
272  Handle<L1GctEmCandCollection> hwNonIsoEmCands;
273  iEvent.getByLabel(nonIsoEmSource_, hwNonIsoEmCands);
274 
275  if (!hwNonIsoEmCands.isValid()) {
276  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctEmCandCollection with " << nonIsoEmSource_
277  << "\nrequested in configuration, but not found in the event." << std::endl;
278  } else {
279  // cout << "HW non-iso EM" << endl ;
280  L1GctEmCandCollection::const_iterator emItr = hwNonIsoEmCands->begin();
281  L1GctEmCandCollection::const_iterator emEnd = hwNonIsoEmCands->end();
282  for (int i = 0; emItr != emEnd; ++emItr, ++i) {
283  // cout << "#" << i
284  // << " name " << emItr->name()
285  // << " empty " << emItr->empty()
286  // << " rank " << emItr->rank()
287  // << " eta " << emItr->etaIndex()
288  // << " sign " << emItr->etaSign()
289  // << " phi " << emItr->phiIndex()
290  // << " iso " << emItr->isolated()
291  // << " bx " << emItr->bx()
292  // << endl ;
293 
294  if (!emItr->empty() && (!centralBxOnly_ || emItr->bx() == 0)) {
295  double et = emScale->et(emItr->rank());
296 
297  // cout << "L1Extra et " << et << endl ;
298 
299  nonIsoEmColl->push_back(L1EmParticle(gctLorentzVector(et, *emItr, caloGeom, true),
300  Ref<L1GctEmCandCollection>(hwNonIsoEmCands, i),
301  emItr->bx()));
302  }
303  }
304  }
305 
306  // ~~~~~~~~~~~~~~~~~~~~ Jets ~~~~~~~~~~~~~~~~~~~~
307 
309  iSetup.get<L1JetEtScaleRcd>().get(jetScale);
310 
311  // Central jets.
312  Handle<L1GctJetCandCollection> hwCenJetCands;
313  iEvent.getByLabel(cenJetSource_, hwCenJetCands);
314 
315  if (!hwCenJetCands.isValid()) {
316  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctJetCandCollection with " << cenJetSource_
317  << "\nrequested in configuration, but not found in the event." << std::endl;
318  } else {
319  // cout << "HW central jets" << endl ;
320  L1GctJetCandCollection::const_iterator jetItr = hwCenJetCands->begin();
321  L1GctJetCandCollection::const_iterator jetEnd = hwCenJetCands->end();
322  for (int i = 0; jetItr != jetEnd; ++jetItr, ++i) {
323  // cout << "#" << i
324  // << " name " << jetItr->name()
325  // << " empty " << jetItr->empty()
326  // << " rank " << jetItr->rank()
327  // << " eta " << jetItr->etaIndex()
328  // << " sign " << jetItr->etaSign()
329  // << " phi " << jetItr->phiIndex()
330  // << " cen " << jetItr->isCentral()
331  // << " for " << jetItr->isForward()
332  // << " tau " << jetItr->isTau()
333  // << " bx " << jetItr->bx()
334  // << endl ;
335 
336  if (!jetItr->empty() && (!centralBxOnly_ || jetItr->bx() == 0)) {
337  double et = jetScale->et(jetItr->rank());
338 
339  // cout << "L1Extra et " << et << endl ;
340 
341  cenJetColl->push_back(L1JetParticle(gctLorentzVector(et, *jetItr, caloGeom, true),
342  Ref<L1GctJetCandCollection>(hwCenJetCands, i),
343  jetItr->bx()));
344  }
345  }
346  }
347 
348  // Forward jets.
349  Handle<L1GctJetCandCollection> hwForJetCands;
350  iEvent.getByLabel(forJetSource_, hwForJetCands);
351 
352  if (!hwForJetCands.isValid()) {
353  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctEmCandCollection with " << forJetSource_
354  << "\nrequested in configuration, but not found in the event." << std::endl;
355  } else {
356  // cout << "HW forward jets" << endl ;
357  L1GctJetCandCollection::const_iterator jetItr = hwForJetCands->begin();
358  L1GctJetCandCollection::const_iterator jetEnd = hwForJetCands->end();
359  for (int i = 0; jetItr != jetEnd; ++jetItr, ++i) {
360  // cout << "#" << i
361  // << " name " << jetItr->name()
362  // << " empty " << jetItr->empty()
363  // << " rank " << jetItr->rank()
364  // << " eta " << jetItr->etaIndex()
365  // << " sign " << jetItr->etaSign()
366  // << " phi " << jetItr->phiIndex()
367  // << " cen " << jetItr->isCentral()
368  // << " for " << jetItr->isForward()
369  // << " tau " << jetItr->isTau()
370  // << " bx " << jetItr->bx()
371  // << endl ;
372 
373  if (!jetItr->empty() && (!centralBxOnly_ || jetItr->bx() == 0)) {
374  double et = jetScale->et(jetItr->rank());
375 
376  // cout << "L1Extra et " << et << endl ;
377 
378  forJetColl->push_back(L1JetParticle(gctLorentzVector(et, *jetItr, caloGeom, false),
379  Ref<L1GctJetCandCollection>(hwForJetCands, i),
380  jetItr->bx()));
381  }
382  }
383  }
384 
385  // Tau jets.
386  // cout << "HW tau jets" << endl ;
387  Handle<L1GctJetCandCollection> hwTauJetCands;
388  iEvent.getByLabel(tauJetSource_, hwTauJetCands);
389 
390  if (!hwTauJetCands.isValid()) {
391  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctJetCandCollection with " << tauJetSource_
392  << "\nrequested in configuration, but not found in the event." << std::endl;
393  } else {
394  L1GctJetCandCollection::const_iterator jetItr = hwTauJetCands->begin();
395  L1GctJetCandCollection::const_iterator jetEnd = hwTauJetCands->end();
396  for (int i = 0; jetItr != jetEnd; ++jetItr, ++i) {
397  // cout << "#" << i
398  // << " name " << jetItr->name()
399  // << " empty " << jetItr->empty()
400  // << " rank " << jetItr->rank()
401  // << " eta " << jetItr->etaIndex()
402  // << " sign " << jetItr->etaSign()
403  // << " phi " << jetItr->phiIndex()
404  // << " cen " << jetItr->isCentral()
405  // << " for " << jetItr->isForward()
406  // << " tau " << jetItr->isTau()
407  // << " bx " << jetItr->bx()
408  // << endl ;
409 
410  if (!jetItr->empty() && (!centralBxOnly_ || jetItr->bx() == 0)) {
411  double et = jetScale->et(jetItr->rank());
412 
413  // cout << "L1Extra et " << et << endl ;
414 
415  tauJetColl->push_back(L1JetParticle(gctLorentzVector(et, *jetItr, caloGeom, true),
416  Ref<L1GctJetCandCollection>(hwTauJetCands, i),
417  jetItr->bx()));
418  }
419  }
420  }
421 
422  // Isolated Tau jets.
423  // cout << "HW tau jets" << endl ;
424  Handle<L1GctJetCandCollection> hwIsoTauJetCands;
425  iEvent.getByLabel(isoTauJetSource_, hwIsoTauJetCands);
426 
427  if (!hwIsoTauJetCands.isValid()) {
428  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctJetCandCollection with " << isoTauJetSource_
429  << "\nrequested in configuration, but not found in the event." << std::endl;
430  } else {
431  L1GctJetCandCollection::const_iterator jetItr = hwIsoTauJetCands->begin();
432  L1GctJetCandCollection::const_iterator jetEnd = hwIsoTauJetCands->end();
433  for (int i = 0; jetItr != jetEnd; ++jetItr, ++i) {
434  // cout << "#" << i
435  // << " name " << jetItr->name()
436  // << " empty " << jetItr->empty()
437  // << " rank " << jetItr->rank()
438  // << " eta " << jetItr->etaIndex()
439  // << " sign " << jetItr->etaSign()
440  // << " phi " << jetItr->phiIndex()
441  // << " cen " << jetItr->isCentral()
442  // << " for " << jetItr->isForward()
443  // << " tau " << jetItr->isTau()
444  // << " bx " << jetItr->bx()
445  // << endl ;
446 
447  if (!jetItr->empty() && (!centralBxOnly_ || jetItr->bx() == 0)) {
448  double et = jetScale->et(jetItr->rank());
449 
450  // cout << "L1Extra et " << et << endl ;
451 
452  isoTauJetColl->push_back(L1JetParticle(gctLorentzVector(et, *jetItr, caloGeom, true),
453  Ref<L1GctJetCandCollection>(hwIsoTauJetCands, i),
454  jetItr->bx()));
455  }
456  }
457  }
458 
459  // ~~~~~~~~~~~~~~~~~~~~ ET Sums ~~~~~~~~~~~~~~~~~~~~
460 
461  double etSumLSB = jetScale->linearLsb();
462 
463  Handle<L1GctEtTotalCollection> hwEtTotColl;
464  iEvent.getByLabel(etTotSource_, hwEtTotColl);
465 
466  Handle<L1GctEtMissCollection> hwEtMissColl;
467  iEvent.getByLabel(etMissSource_, hwEtMissColl);
468 
469  if (!hwEtTotColl.isValid()) {
470  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctEtTotalCollection with " << etTotSource_
471  << "\nrequested in configuration, but not found in the event." << std::endl;
472  } else if (!hwEtMissColl.isValid()) {
473  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctEtMissCollection with " << etMissSource_
474  << "\nrequested in configuration, but not found in the event." << std::endl;
475  } else {
476  // Make a L1EtMissParticle even if either L1GctEtTotal or L1GctEtMiss
477  // is missing for a given bx. Keep track of which L1GctEtMiss objects
478  // have a corresponding L1GctEtTotal object.
479  std::vector<bool> etMissMatched;
480 
481  L1GctEtMissCollection::const_iterator hwEtMissItr = hwEtMissColl->begin();
482  L1GctEtMissCollection::const_iterator hwEtMissEnd = hwEtMissColl->end();
483  for (; hwEtMissItr != hwEtMissEnd; ++hwEtMissItr) {
484  etMissMatched.push_back(false);
485  }
486 
487  // Collate energy sums by bx
488  L1GctEtTotalCollection::const_iterator hwEtTotItr = hwEtTotColl->begin();
489  L1GctEtTotalCollection::const_iterator hwEtTotEnd = hwEtTotColl->end();
490 
491  int iTot = 0;
492  for (; hwEtTotItr != hwEtTotEnd; ++hwEtTotItr, ++iTot) {
493  int bx = hwEtTotItr->bx();
494 
495  if (!centralBxOnly_ || bx == 0) {
496  // ET bin low edge
497  double etTot =
498  (hwEtTotItr->overFlow() ? (double)L1GctEtTotal::kEtTotalMaxValue : (double)hwEtTotItr->et()) * etSumLSB +
499  1.e-6;
500 
501  int iMiss = 0;
502  hwEtMissItr = hwEtMissColl->begin();
503  hwEtMissEnd = hwEtMissColl->end();
504  for (; hwEtMissItr != hwEtMissEnd; ++hwEtMissItr, ++iMiss) {
505  if (hwEtMissItr->bx() == bx) {
506  etMissMatched[iMiss] = true;
507  break;
508  }
509  }
510 
511  double etMiss = 0.;
512  double phi = 0.;
515 
516  // If a L1GctEtMiss with the right bx is not found, itr == end.
517  if (hwEtMissItr != hwEtMissEnd) {
518  // ET bin low edge
519  etMiss = (hwEtMissItr->overFlow() ? (double)L1GctEtMiss::kEtMissMaxValue : (double)hwEtMissItr->et()) *
520  etSumLSB +
521  1.e-6;
522  // keep x and y components non-zero and
523  // protect against roundoff.
524 
525  phi = caloGeom->etSumPhiBinCenter(hwEtMissItr->phi());
526 
527  p4 = math::PtEtaPhiMLorentzVector(etMiss, 0., phi, 0.);
528 
529  metRef = Ref<L1GctEtMissCollection>(hwEtMissColl, iMiss);
530 
531  // cout << "HW ET Sums " << endl
532  // << "MET: phi " << hwEtMissItr->phi() << " = " << phi
533  // << " et " << hwEtMissItr->et() << " = " << etMiss
534  // << " EtTot " << hwEtTotItr->et() << " = " << etTot
535  // << " bx " << bx
536  // << endl ;
537  }
538  // else
539  // {
540  // cout << "HW ET Sums " << endl
541  // << "MET: phi " << phi
542  // << " et "<< etMiss
543  // << " EtTot " << hwEtTotItr->et() << " = " << etTot
544  // << " bx " << bx
545  // << endl ;
546  // }
547 
548  etMissColl->push_back(L1EtMissParticle(p4,
549  L1EtMissParticle::kMET,
550  etTot,
551  metRef,
552  Ref<L1GctEtTotalCollection>(hwEtTotColl, iTot),
555  bx));
556  }
557  }
558 
559  if (!centralBxOnly_) {
560  // Make L1EtMissParticles for those L1GctEtMiss objects without
561  // a matched L1GctEtTotal object.
562 
563  double etTot = 0.;
564 
565  hwEtMissItr = hwEtMissColl->begin();
566  hwEtMissEnd = hwEtMissColl->end();
567  int iMiss = 0;
568  for (; hwEtMissItr != hwEtMissEnd; ++hwEtMissItr, ++iMiss) {
569  if (!etMissMatched[iMiss]) {
570  int bx = hwEtMissItr->bx();
571 
572  // ET bin low edge
573  double etMiss =
574  (hwEtMissItr->overFlow() ? (double)L1GctEtMiss::kEtMissMaxValue : (double)hwEtMissItr->et()) *
575  etSumLSB +
576  1.e-6;
577  // keep x and y components non-zero and
578  // protect against roundoff.
579 
580  double phi = caloGeom->etSumPhiBinCenter(hwEtMissItr->phi());
581 
582  math::PtEtaPhiMLorentzVector p4(etMiss, 0., phi, 0.);
583 
584  // cout << "HW ET Sums " << endl
585  // << "MET: phi " << hwEtMissItr->phi() << " = " <<
586  // phi
587  // << " et " << hwEtMissItr->et() << " = " << etMiss
588  // << " EtTot " << etTot
589  // << " bx " << bx
590  // << endl ;
591 
592  etMissColl->push_back(L1EtMissParticle(p4,
593  L1EtMissParticle::kMET,
594  etTot,
595  Ref<L1GctEtMissCollection>(hwEtMissColl, iMiss),
599  bx));
600  }
601  }
602  }
603  }
604 
605  // ~~~~~~~~~~~~~~~~~~~~ HT Sums ~~~~~~~~~~~~~~~~~~~~
606 
607  Handle<L1GctEtHadCollection> hwEtHadColl;
608  iEvent.getByLabel(etHadSource_, hwEtHadColl);
609 
610  Handle<L1GctHtMissCollection> hwHtMissColl;
611  if (!ignoreHtMiss_) {
612  iEvent.getByLabel(htMissSource_, hwHtMissColl);
613  }
614 
615  ESHandle<L1GctJetFinderParams> jetFinderParams;
616  iSetup.get<L1GctJetFinderParamsRcd>().get(jetFinderParams);
617  double htSumLSB = jetFinderParams->getHtLsbGeV();
618 
619  ESHandle<L1CaloEtScale> htMissScale;
620  std::vector<bool> htMissMatched;
621  if (!ignoreHtMiss_) {
622  iSetup.get<L1HtMissScaleRcd>().get(htMissScale);
623 
624  if (!hwEtHadColl.isValid()) {
625  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctEtHadCollection with " << etHadSource_
626  << "\nrequested in configuration, but not found in the event." << std::endl;
627  } else if (!hwHtMissColl.isValid()) {
628  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctHtMissCollection with " << htMissSource_
629  << "\nrequested in configuration, but not found in the event." << std::endl;
630  } else {
631  // Make a L1EtMissParticle even if either L1GctEtHad or L1GctHtMiss
632  // is missing for a given bx. Keep track of which L1GctHtMiss objects
633  // have a corresponding L1GctHtTotal object.
634  L1GctHtMissCollection::const_iterator hwHtMissItr = hwHtMissColl->begin();
635  L1GctHtMissCollection::const_iterator hwHtMissEnd = hwHtMissColl->end();
636  for (; hwHtMissItr != hwHtMissEnd; ++hwHtMissItr) {
637  htMissMatched.push_back(false);
638  }
639  }
640  }
641 
642  if (!hwEtHadColl.isValid()) {
643  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctEtHadCollection with " << etHadSource_
644  << "\nrequested in configuration, but not found in the event." << std::endl;
645  } else if (!hwHtMissColl.isValid()) {
646  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctHtMissCollection with " << htMissSource_
647  << "\nrequested in configuration, but not found in the event." << std::endl;
648  } else {
649  L1GctEtHadCollection::const_iterator hwEtHadItr = hwEtHadColl->begin();
650  L1GctEtHadCollection::const_iterator hwEtHadEnd = hwEtHadColl->end();
651 
652  int iHad = 0;
653  for (; hwEtHadItr != hwEtHadEnd; ++hwEtHadItr, ++iHad) {
654  int bx = hwEtHadItr->bx();
655 
656  if (!centralBxOnly_ || bx == 0) {
657  // HT bin low edge
658  double htTot =
659  (hwEtHadItr->overFlow() ? (double)L1GctEtHad::kEtHadMaxValue : (double)hwEtHadItr->et()) * htSumLSB +
660  1.e-6;
661 
662  double htMiss = 0.;
663  double phi = 0.;
666 
667  if (!ignoreHtMiss_) {
668  L1GctHtMissCollection::const_iterator hwHtMissItr = hwHtMissColl->begin();
669  L1GctHtMissCollection::const_iterator hwHtMissEnd = hwHtMissColl->end();
670 
671  int iMiss = 0;
672  for (; hwHtMissItr != hwHtMissEnd; ++hwHtMissItr, ++iMiss) {
673  if (hwHtMissItr->bx() == bx) {
674  htMissMatched[iMiss] = true;
675  break;
676  }
677  }
678 
679  // If a L1GctHtMiss with the right bx is not found, itr == end.
680  if (hwHtMissItr != hwHtMissEnd) {
681  // HT bin low edge
682  htMiss =
683  htMissScale->et(hwHtMissItr->overFlow() ? htMissScale->rankScaleMax() : hwHtMissItr->et()) + 1.e-6;
684  // keep x and y components non-zero and
685  // protect against roundoff.
686 
687  phi = caloGeom->htSumPhiBinCenter(hwHtMissItr->phi());
688 
689  p4 = math::PtEtaPhiMLorentzVector(htMiss, 0., phi, 0.);
690 
691  mhtRef = Ref<L1GctHtMissCollection>(hwHtMissColl, iMiss);
692 
693  // cout << "HW HT Sums " << endl
694  // << "MHT: phi " << hwHtMissItr->phi() <<
695  // " = " << phi
696  // << " ht " << hwHtMissItr->et() << " = "
697  // << htMiss
698  // << " HtTot " << hwEtHadItr->et() << " =
699  // "
700  // << htTot
701  // << " bx " << bx
702  // << endl ;
703  }
704  // else
705  // {
706  // cout << "HW HT Sums " << endl
707  // << "MHT: phi " << phi
708  // << " ht " << htMiss
709  // << " HtTot " << hwEtHadItr->et() << " = " <<
710  // htTot
711  // << " bx " << bx
712  // << endl ;
713  // }
714  }
715 
716  htMissColl->push_back(L1EtMissParticle(p4,
717  L1EtMissParticle::kMHT,
718  htTot,
721  mhtRef,
722  Ref<L1GctEtHadCollection>(hwEtHadColl, iHad),
723  bx));
724  }
725  }
726 
727  if (!centralBxOnly_ && !ignoreHtMiss_) {
728  // Make L1EtMissParticles for those L1GctHtMiss objects without
729  // a matched L1GctHtTotal object.
730  double htTot = 0.;
731 
732  L1GctHtMissCollection::const_iterator hwHtMissItr = hwHtMissColl->begin();
733  L1GctHtMissCollection::const_iterator hwHtMissEnd = hwHtMissColl->end();
734 
735  int iMiss = 0;
736  for (; hwHtMissItr != hwHtMissEnd; ++hwHtMissItr, ++iMiss) {
737  if (!htMissMatched[iMiss]) {
738  int bx = hwHtMissItr->bx();
739 
740  // HT bin low edge
741  double htMiss =
742  htMissScale->et(hwHtMissItr->overFlow() ? htMissScale->rankScaleMax() : hwHtMissItr->et()) + 1.e-6;
743  // keep x and y components non-zero and
744  // protect against roundoff.
745 
746  double phi = caloGeom->htSumPhiBinCenter(hwHtMissItr->phi());
747 
748  math::PtEtaPhiMLorentzVector p4(htMiss, 0., phi, 0.);
749 
750  // cout << "HW HT Sums " << endl
751  // << "MHT: phi " << hwHtMissItr->phi() << " = " <<
752  // phi
753  // << " ht " << hwHtMissItr->et() << " = " << htMiss
754  // << " HtTot " << htTot
755  // << " bx " << bx
756  // << endl ;
757 
758  htMissColl->push_back(L1EtMissParticle(p4,
759  L1EtMissParticle::kMHT,
760  htTot,
763  Ref<L1GctHtMissCollection>(hwHtMissColl, iMiss),
765  bx));
766  }
767  }
768  }
769  }
770 
771  // ~~~~~~~~~~~~~~~~~~~~ HF Rings ~~~~~~~~~~~~~~~~~~~~
772 
774  iEvent.getByLabel(hfRingEtSumsSource_, hwHFEtSumsColl);
775 
776  Handle<L1GctHFBitCountsCollection> hwHFBitCountsColl;
777  iEvent.getByLabel(hfRingBitCountsSource_, hwHFBitCountsColl);
778 
779  ESHandle<L1CaloEtScale> hfRingEtScale;
780  iSetup.get<L1HfRingEtScaleRcd>().get(hfRingEtScale);
781 
782  if (!hwHFEtSumsColl.isValid()) {
783  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctHFRingEtSumsCollection with " << hfRingEtSumsSource_
784  << "\nrequested in configuration, but not found in the event." << std::endl;
785  } else if (!hwHFBitCountsColl.isValid()) {
786  LogDebug("L1ExtraParticlesProd") << "\nWarning: L1GctHFBitCountsCollection with " << hfRingBitCountsSource_
787  << "\nrequested in configuration, but not found in the event." << std::endl;
788  } else {
789  L1GctHFRingEtSumsCollection::const_iterator hwHFEtSumsItr = hwHFEtSumsColl->begin();
790  L1GctHFRingEtSumsCollection::const_iterator hwHFEtSumsEnd = hwHFEtSumsColl->end();
791 
792  int iEtSums = 0;
793  for (; hwHFEtSumsItr != hwHFEtSumsEnd; ++hwHFEtSumsItr, ++iEtSums) {
794  int bx = hwHFEtSumsItr->bx();
795 
796  if (!centralBxOnly_ || bx == 0) {
797  L1GctHFBitCountsCollection::const_iterator hwHFBitCountsItr = hwHFBitCountsColl->begin();
798  L1GctHFBitCountsCollection::const_iterator hwHFBitCountsEnd = hwHFBitCountsColl->end();
799 
800  int iBitCounts = 0;
801  for (; hwHFBitCountsItr != hwHFBitCountsEnd; ++hwHFBitCountsItr, ++iBitCounts) {
802  if (hwHFBitCountsItr->bx() == bx) {
803  break;
804  }
805  }
806 
807  // If a L1GctHFBitCounts with the right bx is not found, itr == end.
808  if (hwHFBitCountsItr != hwHFBitCountsEnd) {
809  // Construct L1HFRings only if both HW objects are present.
810 
811  // cout << "HF Rings " << endl
812 
813  // HF Et sums
814  double etSums[L1HFRings::kNumRings];
815  etSums[L1HFRings::kRing1PosEta] = hfRingEtScale->et(hwHFEtSumsItr->etSum(0)) + 1.e-6;
816  etSums[L1HFRings::kRing1NegEta] = hfRingEtScale->et(hwHFEtSumsItr->etSum(1)) + 1.e-6;
817  etSums[L1HFRings::kRing2PosEta] = hfRingEtScale->et(hwHFEtSumsItr->etSum(2)) + 1.e-6;
818  etSums[L1HFRings::kRing2NegEta] = hfRingEtScale->et(hwHFEtSumsItr->etSum(3)) + 1.e-6;
819  // protect against roundoff.
820 
821  // cout << "HF Et Sums "
822  // << hwHFEtSumsItr->etSum( 0 ) << " = "
823  // << etSums[ L1HFRings::kRing1PosEta ] << " "
824  // << hwHFEtSumsItr->etSum( 1 ) << " = "
825  // << etSums[ L1HFRings::kRing1NegEta ] << " "
826  // << hwHFEtSumsItr->etSum( 2 ) << " = "
827  // << etSums[ L1HFRings::kRing2PosEta ] << " "
828  // << hwHFEtSumsItr->etSum( 3 ) << " = "
829  // << etSums[ L1HFRings::kRing2NegEta ]
830  // << endl ;
831 
832  // HF bit counts
833  int bitCounts[L1HFRings::kNumRings];
834  bitCounts[L1HFRings::kRing1PosEta] = hwHFBitCountsItr->bitCount(0);
835  bitCounts[L1HFRings::kRing1NegEta] = hwHFBitCountsItr->bitCount(1);
836  bitCounts[L1HFRings::kRing2PosEta] = hwHFBitCountsItr->bitCount(2);
837  bitCounts[L1HFRings::kRing2NegEta] = hwHFBitCountsItr->bitCount(3);
838 
839  // cout << "HF bit counts "
840  // << hwHFBitCountsItr->bitCount( 0 ) << " "
841  // << hwHFBitCountsItr->bitCount( 1 ) << " "
842  // << hwHFBitCountsItr->bitCount( 2 ) << " "
843  // << hwHFBitCountsItr->bitCount( 3 ) << " "
844  // << endl ;
845 
846  hfRingsColl->push_back(L1HFRings(etSums,
847  bitCounts,
848  Ref<L1GctHFRingEtSumsCollection>(hwHFEtSumsColl, iEtSums),
849  Ref<L1GctHFBitCountsCollection>(hwHFBitCountsColl, iBitCounts),
850  bx));
851  }
852  }
853  }
854  }
855  }
856 
857  OrphanHandle<L1EmParticleCollection> isoEmHandle = iEvent.put(std::move(isoEmColl), "Isolated");
858 
859  OrphanHandle<L1EmParticleCollection> nonIsoEmHandle = iEvent.put(std::move(nonIsoEmColl), "NonIsolated");
860 
861  OrphanHandle<L1JetParticleCollection> cenJetHandle = iEvent.put(std::move(cenJetColl), "Central");
862 
863  OrphanHandle<L1JetParticleCollection> forJetHandle = iEvent.put(std::move(forJetColl), "Forward");
864 
865  OrphanHandle<L1JetParticleCollection> tauJetHandle = iEvent.put(std::move(tauJetColl), "Tau");
866 
867  OrphanHandle<L1JetParticleCollection> IsoTauJetHandle = iEvent.put(std::move(isoTauJetColl), "IsoTau");
868 
869  OrphanHandle<L1EtMissParticleCollection> etMissCollHandle = iEvent.put(std::move(etMissColl), "MET");
870 
871  OrphanHandle<L1EtMissParticleCollection> htMissCollHandle = iEvent.put(std::move(htMissColl), "MHT");
872 
873  OrphanHandle<L1HFRingsCollection> hfRingsCollHandle = iEvent.put(std::move(hfRingsColl));
874 }
875 
876 // math::XYZTLorentzVector
878  const L1GctCand &cand,
879  const L1CaloGeometry *geom,
880  bool central) {
881  // To keep x and y components non-zero.
882  double etCorr = et + 1.e-6; // protect against roundoff, not only for et=0
883 
884  double eta = geom->etaBinCenter(cand.etaIndex(), central);
885 
886  // double tanThOver2 = exp( -eta ) ;
887  // double ez = etCorr * ( 1. - tanThOver2 * tanThOver2 ) / ( 2. *
888  // tanThOver2 ); double e = etCorr * ( 1. + tanThOver2 * tanThOver2 ) /
889  // ( 2. * tanThOver2 );
890 
891  double phi = geom->emJetPhiBinCenter(cand.phiIndex());
892 
893  // return math::XYZTLorentzVector( etCorr * cos( phi ),
894  // etCorr * sin( phi ),
895  // ez,
896  // e ) ;
897  return math::PtEtaPhiMLorentzVector(etCorr, eta, phi, 0.);
898 }
899 
900 // define this as a plug-in
L1EmEtScaleRcd.h
L1CaloGeometry::htSumPhiBinCenter
double htSumPhiBinCenter(unsigned int phiIndex) const
Definition: L1CaloGeometry.cc:248
L1HFRingsCollection
Handle.h
L1JetParticleCollection
L1ExtraParticlesProd::hfRingEtSumsSource_
edm::InputTag hfRingEtSumsSource_
Definition: L1ExtraParticlesProd.h:72
electrons_cff.bool
bool
Definition: electrons_cff.py:372
mps_fire.i
i
Definition: mps_fire.py:355
L1MuonParticleCollection
L1ExtraParticlesProd::tauJetSource_
edm::InputTag tauJetSource_
Definition: L1ExtraParticlesProd.h:66
MessageLogger.h
L1ExtraParticlesProd::muonMassGeV_
static const double muonMassGeV_
Definition: L1ExtraParticlesProd.h:75
L1MuTriggerScales::getGMTEtaScale
const L1MuScale * getGMTEtaScale() const
get the GMT eta scale
Definition: L1MuTriggerScales.h:169
L1ExtraParticlesProd::htMissSource_
edm::InputTag htMissSource_
Definition: L1ExtraParticlesProd.h:71
ESHandle.h
L1GctJetFinderParamsRcd.h
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
L1ExtraParticlesProd::isoTauJetSource_
edm::InputTag isoTauJetSource_
Definition: L1ExtraParticlesProd.h:67
L1MuTriggerPtScaleRcd.h
edm
HLT enums.
Definition: AlignableModifier.h:19
L1MuGMTReadoutCollection.h
L1ExtraParticlesProd::hfRingBitCountsSource_
edm::InputTag hfRingBitCountsSource_
Definition: L1ExtraParticlesProd.h:73
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
central
Definition: L1ECALPrefiringWeightProducer.cc:36
L1ExtraParticlesProd::etHadSource_
edm::InputTag etHadSource_
Definition: L1ExtraParticlesProd.h:69
L1GctJetFinderParams::getHtLsbGeV
double getHtLsbGeV() const
Definition: L1GctJetFinderParams.h:36
L1MuTriggerScalesRcd.h
L1GctJetFinderParams.h
edm::Handle
Definition: AssociativeIterator.h:50
L1ExtraParticlesProd.h
L1ExtraParticlesProd::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: L1ExtraParticlesProd.cc:124
L1HfRingEtScaleRcd
Definition: L1HfRingEtScaleRcd.h:30
l1extra::L1EtMissParticle
Definition: L1EtMissParticle.h:27
edm::Ref< L1GctEmCandCollection >
L1GctEtMiss::kEtMissMaxValue
Definition: L1GctEtMiss.h:24
L1HtMissScaleRcd.h
L1CaloEtScale::rankScaleMax
unsigned rankScaleMax() const
Definition: L1CaloEtScale.h:51
L1MuTriggerScales::getPhiScale
const L1MuScale * getPhiScale() const
get the phi scale
Definition: L1MuTriggerScales.h:175
L1ExtraParticlesProd::forJetSource_
edm::InputTag forJetSource_
Definition: L1ExtraParticlesProd.h:65
MakerMacros.h
L1ExtraParticlesProd::nonIsoEmSource_
edm::InputTag nonIsoEmSource_
Definition: L1ExtraParticlesProd.h:63
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
PVValHelper::eta
Definition: PVValidationHelpers.h:69
l1extra::L1EmParticle
Definition: L1EmParticle.h:28
OrphanHandle.h
L1GctEtHad::kEtHadMaxValue
Definition: L1GctEtHad.h:22
L1JetEtScaleRcd
Definition: L1JetEtScaleRcd.h:30
edm::ESHandle
Definition: DTSurvey.h:22
L1GctJetFinderParamsRcd
Definition: L1GctJetFinderParamsRcd.h:31
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
L1MuScale::getLowEdge
virtual float getLowEdge(unsigned packed) const =0
get the low edge of bin represented by packed
L1GctEtTotal::kEtTotalMaxValue
Definition: L1GctEtTotal.h:22
l1extra::L1HFRings
Definition: L1HFRings.h:31
L1CaloGeometryRecord
Definition: L1CaloGeometryRecord.h:30
L1CaloGeometry::etSumPhiBinCenter
double etSumPhiBinCenter(unsigned int phiIndex) const
Definition: L1CaloGeometry.cc:236
L1ExtraParticlesProd::muonSource_
edm::InputTag muonSource_
Definition: L1ExtraParticlesProd.h:59
L1ExtraParticlesProd::centralBxOnly_
bool centralBxOnly_
Definition: L1ExtraParticlesProd.h:77
L1ExtraParticlesProd::gctLorentzVector
math::PtEtaPhiMLorentzVector gctLorentzVector(const double &et, const L1GctCand &cand, const L1CaloGeometry *geom, bool central)
Definition: L1ExtraParticlesProd.cc:877
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::ParameterSet
Definition: ParameterSet.h:36
L1CaloGeometry
Definition: L1CaloGeometry.h:33
L1MuGMTReadoutCollection::getRecords
std::vector< L1MuGMTReadoutRecord > const & getRecords() const
Definition: L1MuGMTReadoutCollection.h:52
L1MuTriggerPtScale::getPtScale
const L1MuScale * getPtScale() const
get the Pt scale
Definition: L1MuTriggerPtScale.h:59
L1CaloGeometryRecord.h
L1ExtraParticlesProd::produceCaloParticles_
bool produceCaloParticles_
Definition: L1ExtraParticlesProd.h:61
L1MuTriggerPtScale.h
L1MuGMTReadoutCollection::getRecord
L1MuGMTReadoutRecord const & getRecord(int bx=0) const
Definition: L1MuGMTReadoutCollection.h:55
L1ExtraParticlesProd
Definition: L1ExtraParticlesProd.h:43
l1extra::L1JetParticle
Definition: L1JetParticle.h:28
cand
Definition: decayParser.h:34
iEvent
int iEvent
Definition: GenABIO.cc:224
L1MuTriggerScales.h
L1ExtraParticlesProd::ignoreHtMiss_
bool ignoreHtMiss_
Definition: L1ExtraParticlesProd.h:81
l1extra::L1EtMissParticleCollection
std::vector< L1EtMissParticle > L1EtMissParticleCollection
Definition: L1EtMissParticleFwd.h:32
p4
double p4[4]
Definition: TauolaWrapper.h:92
L1ExtraParticlesProd::L1ExtraParticlesProd
L1ExtraParticlesProd(const edm::ParameterSet &)
Definition: L1ExtraParticlesProd.cc:66
L1ExtraParticlesProd::~L1ExtraParticlesProd
~L1ExtraParticlesProd() override
Definition: L1ExtraParticlesProd.cc:114
L1HfRingEtScaleRcd.h
EgHLTOffHistBins_cfi.et
et
Definition: EgHLTOffHistBins_cfi.py:8
L1MuGMTReadoutRecord::getGMTCands
std::vector< L1MuGMTExtendedCand > getGMTCands() const
get GMT candidates vector
Definition: L1MuGMTReadoutRecord.cc:93
edm::EventSetup
Definition: EventSetup.h:57
L1MuTriggerPtScaleRcd
Definition: L1MuTriggerPtScaleRcd.h:12
get
#define get
L1ExtraParticlesProd::etTotSource_
edm::InputTag etTotSource_
Definition: L1ExtraParticlesProd.h:68
L1MuTriggerScalesRcd
Definition: L1MuTriggerScalesRcd.h:12
L1EmParticleCollection
L1ExtraParticlesProd::etMissSource_
edm::InputTag etMissSource_
Definition: L1ExtraParticlesProd.h:70
L1CaloEtScale.h
DDAxes::phi
L1HtMissScaleRcd
Definition: L1HtMissScaleRcd.h:30
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
edm::OrphanHandle
Definition: EDProductfwd.h:39
Frameworkfwd.h
L1GctCand
ABC for GCT EM and jet candidates.
Definition: L1GctCand.h:12
L1EmEtScaleRcd
Definition: L1EmEtScaleRcd.h:30
L1ExtraParticlesProd::cenJetSource_
edm::InputTag cenJetSource_
Definition: L1ExtraParticlesProd.h:64
wplusjetsAnalysis_cfi.jetScale
jetScale
Definition: wplusjetsAnalysis_cfi.py:88
L1CaloEtScale::et
double et(const uint16_t rank) const
convert from rank to physically meaningful quantity
Definition: L1CaloEtScale.cc:68
l1extra::L1MuonParticle
Definition: L1MuonParticle.h:27
math::PtEtaPhiMLorentzVector
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:25
l1extra
Definition: L1EmParticle.h:26
L1JetEtScaleRcd.h
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
L1ExtraParticlesProd::isoEmSource_
edm::InputTag isoEmSource_
Definition: L1ExtraParticlesProd.h:62
L1CaloGeometry.h
L1ExtraParticlesProd::produceMuonParticles_
bool produceMuonParticles_
Definition: L1ExtraParticlesProd.h:58
L1MuScale::getCenter
virtual float getCenter(unsigned packed) const =0
get the center of bin represented by packed
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37