CMS 3D CMS Logo

DTTrigPhase2Prod.cc
Go to the documentation of this file.
10 
17 
21 
24 
37 
47 
48 // DT trigger GeomUtils
50 
51 //RPC TP
56 
57 #include <fstream>
58 #include <iostream>
59 #include <queue>
60 #include <cmath>
61 
62 using namespace edm;
63 using namespace std;
64 using namespace cmsdt;
65 
67  typedef std::map<DTChamberId, DTDigiCollection, std::less<DTChamberId>> DTDigiMap;
68  typedef DTDigiMap::iterator DTDigiMap_iterator;
69  typedef DTDigiMap::const_iterator DTDigiMap_const_iterator;
70 
71 public:
74 
76  ~DTTrigPhase2Prod() override;
77 
79  void beginRun(edm::Run const& iRun, const edm::EventSetup& iEventSetup) override;
80 
82  void produce(edm::Event& iEvent, const edm::EventSetup& iEventSetup) override;
83 
85  void endRun(edm::Run const& iRun, const edm::EventSetup& iEventSetup) override;
86 
87  // Methods
88  int rango(const metaPrimitive& mp) const;
89  bool outer(const metaPrimitive& mp) const;
90  bool inner(const metaPrimitive& mp) const;
91  void printmP(const std::string& ss, const metaPrimitive& mP) const;
92  void printmPC(const std::string& ss, const metaPrimitive& mP) const;
93  bool hasPosRF(int wh, int sec) const;
94 
95  // Getter-methods
96  MP_QUALITY getMinimumQuality(void);
97 
98  // Setter-methods
99  void setChiSquareThreshold(float ch2Thr);
100  void setMinimumQuality(MP_QUALITY q);
101 
102  // data-members
105  std::vector<std::pair<int, MuonPath>> primitives_;
106 
107 private:
108  // Trigger Configuration Manager CCB validity flag
110 
111  // BX offset used to correct DTTPG output
113 
114  // Debug Flag
115  bool debug_;
116  bool dump_;
122 
123  // ParameterSet
126 
127  // Grouping attributes and methods
128  int algo_; // Grouping code
129  std::unique_ptr<MotherGrouping> grouping_obj_;
130  std::unique_ptr<MuonPathAnalyzer> mpathanalyzer_;
131  std::unique_ptr<MPFilter> mpathqualityenhancer_;
132  std::unique_ptr<MPFilter> mpathredundantfilter_;
133  std::unique_ptr<MuonPathAssociator> mpathassociator_;
134  std::shared_ptr<GlobalCoordsObtainer> globalcoordsobtainer_;
135 
136  // Buffering
140  std::vector<DTDigiCollection*> distribDigis(std::queue<std::pair<DTLayerId, DTDigi>>& inQ);
141  void processDigi(std::queue<std::pair<DTLayerId, DTDigi>>& inQ,
142  std::vector<std::queue<std::pair<DTLayerId, DTDigi>>*>& vec);
143 
144  // RPC
145  std::unique_ptr<RPCIntegrator> rpc_integrator_;
146  bool useRPC_;
147 
148  void assignIndex(std::vector<metaPrimitive>& inMPaths);
149  void assignIndexPerBX(std::vector<metaPrimitive>& inMPaths);
150  int assignQualityOrder(const metaPrimitive& mP) const;
151 
152  const std::unordered_map<int, int> qmap_;
153 };
154 
155 namespace {
156  struct {
157  bool operator()(std::pair<DTLayerId, DTDigi> a, std::pair<DTLayerId, DTDigi> b) const {
158  return (a.second.time() < b.second.time());
159  }
160  } const DigiTimeOrdering;
161 } // namespace
162 
164  : qmap_({{9, 9}, {8, 8}, {7, 6}, {6, 7}, {5, 3}, {4, 5}, {3, 4}, {2, 2}, {1, 1}}) {
165  produces<L1Phase2MuDTPhContainer>();
166  produces<L1Phase2MuDTThContainer>();
167 
168  debug_ = pset.getUntrackedParameter<bool>("debug");
169  dump_ = pset.getUntrackedParameter<bool>("dump");
170 
171  do_correlation_ = pset.getParameter<bool>("do_correlation");
172  scenario_ = pset.getParameter<int>("scenario");
173 
174  dtDigisToken_ = consumes<DTDigiCollection>(pset.getParameter<edm::InputTag>("digiTag"));
175 
176  rpcRecHitsLabel_ = consumes<RPCRecHitCollection>(pset.getParameter<edm::InputTag>("rpcRecHits"));
177  useRPC_ = pset.getParameter<bool>("useRPC");
178 
179  // Choosing grouping scheme:
180  algo_ = pset.getParameter<int>("algo");
181 
182  // Local to global coordinates approach
183  cmssw_for_global_ = pset.getUntrackedParameter<bool>("cmssw_for_global", true);
184  geometry_tag_ = pset.getUntrackedParameter<std::string>("geometry_tag", "");
185 
186  edm::ConsumesCollector consumesColl(consumesCollector());
187  globalcoordsobtainer_ = std::make_shared<GlobalCoordsObtainer>(pset);
188  if (!cmssw_for_global_)
189  globalcoordsobtainer_->generate_luts();
190 
191  if (algo_ == PseudoBayes) {
192  grouping_obj_ =
193  std::make_unique<PseudoBayesGrouping>(pset.getParameter<edm::ParameterSet>("PseudoBayesPattern"), consumesColl);
194  } else if (algo_ == HoughTrans) {
195  grouping_obj_ =
196  std::make_unique<HoughGrouping>(pset.getParameter<edm::ParameterSet>("HoughGrouping"), consumesColl);
197  } else {
198  grouping_obj_ = std::make_unique<InitialGrouping>(pset, consumesColl);
199  }
200 
201  if (algo_ == Standard) {
202  if (debug_)
203  LogDebug("DTTrigPhase2Prod") << "DTp2:constructor: JM analyzer";
204  mpathanalyzer_ = std::make_unique<MuonPathAnalyticAnalyzer>(pset, consumesColl, globalcoordsobtainer_);
205  } else {
206  if (debug_)
207  LogDebug("DTTrigPhase2Prod") << "DTp2:constructor: Full chamber analyzer";
208  mpathanalyzer_ = std::make_unique<MuonPathAnalyzerInChamber>(pset, consumesColl);
209  }
210 
211  // Getting buffer option
212  activateBuffer_ = pset.getParameter<bool>("activateBuffer");
213  superCellhalfspacewidth_ = pset.getParameter<int>("superCellspacewidth") / 2;
214  superCelltimewidth_ = pset.getParameter<double>("superCelltimewidth");
215 
216  mpathqualityenhancer_ = std::make_unique<MPQualityEnhancerFilter>(pset);
217  mpathredundantfilter_ = std::make_unique<MPRedundantFilter>(pset);
218  mpathassociator_ = std::make_unique<MuonPathAssociator>(pset, consumesColl, globalcoordsobtainer_);
219  rpc_integrator_ = std::make_unique<RPCIntegrator>(pset, consumesColl);
220 
221  dtGeomH = esConsumes<DTGeometry, MuonGeometryRecord, edm::Transition::BeginRun>();
222 }
223 
225  if (debug_)
226  LogDebug("DTTrigPhase2Prod") << "DTp2: calling destructor" << std::endl;
227 }
228 
229 void DTTrigPhase2Prod::beginRun(edm::Run const& iRun, const edm::EventSetup& iEventSetup) {
230  if (debug_)
231  LogDebug("DTTrigPhase2Prod") << "beginRun " << iRun.id().run();
232  if (debug_)
233  LogDebug("DTTrigPhase2Prod") << "beginRun: getting DT geometry";
234 
235  grouping_obj_->initialise(iEventSetup); // Grouping object initialisation
236  mpathanalyzer_->initialise(iEventSetup); // Analyzer object initialisation
237  mpathqualityenhancer_->initialise(iEventSetup); // Filter object initialisation
238  mpathredundantfilter_->initialise(iEventSetup); // Filter object initialisation
239  mpathassociator_->initialise(iEventSetup); // Associator object initialisation
240 
242  iEventSetup.get<MuonGeometryRecord>().get(geometry_tag_, geom);
243  dtGeo_ = &(*geom);
244 }
245 
246 void DTTrigPhase2Prod::produce(Event& iEvent, const EventSetup& iEventSetup) {
247  if (debug_)
248  LogDebug("DTTrigPhase2Prod") << "produce";
250  iEvent.getByToken(dtDigisToken_, dtdigis);
251 
252  if (debug_)
253  LogDebug("DTTrigPhase2Prod") << "\t Getting the RPC RecHits" << std::endl;
255  iEvent.getByToken(rpcRecHitsLabel_, rpcRecHits);
256 
258  // GROUPING CODE:
260  DTDigiMap digiMap;
262  for (const auto& detUnitIt : *dtdigis) {
263  const DTLayerId& layId = detUnitIt.first;
264  const DTChamberId chambId = layId.superlayerId().chamberId();
265  const DTDigiCollection::Range& range = detUnitIt.second;
266  digiMap[chambId].put(range, layId);
267  }
268 
269  // generate a list muon paths for each event!!!
270  if (debug_ && activateBuffer_)
271  LogDebug("DTTrigPhase2Prod") << "produce - Getting and grouping digis per chamber using a buffer and super cells.";
272  else if (debug_)
273  LogDebug("DTTrigPhase2Prod") << "produce - Getting and grouping digis per chamber.";
274 
275  MuonPathPtrs muonpaths;
276  for (const auto& ich : dtGeo_->chambers()) {
277  // The code inside this for loop would ideally later fit inside a trigger unit (in principle, a DT station) of the future Phase 2 DT Trigger.
278  const DTChamber* chamb = ich;
279  DTChamberId chid = chamb->id();
280  DTDigiMap_iterator dmit = digiMap.find(chid);
281 
282  if (dmit == digiMap.end())
283  continue;
284 
285  if (activateBuffer_) { // Use buffering (per chamber) or not
286  // Import digis from the station
287  std::vector<std::pair<DTLayerId, DTDigi>> tmpvec;
288  tmpvec.clear();
289 
290  for (const auto& dtLayerIdIt : (*dmit).second) {
291  for (DTDigiCollection::const_iterator digiIt = (dtLayerIdIt.second).first;
292  digiIt != (dtLayerIdIt.second).second;
293  digiIt++) {
294  tmpvec.emplace_back(dtLayerIdIt.first, *digiIt);
295  }
296  }
297 
298  // Check to enhance CPU time usage
299  if (tmpvec.empty())
300  continue;
301 
302  // Order digis depending on TDC time and insert them into a queue (FIFO buffer). TODO: adapt for MC simulations.
303  std::sort(tmpvec.begin(), tmpvec.end(), DigiTimeOrdering);
304  std::queue<std::pair<DTLayerId, DTDigi>> timequeue;
305 
306  for (const auto& elem : tmpvec)
307  timequeue.emplace(elem);
308  tmpvec.clear();
309 
310  // Distribute the digis from the queue into supercells
311  std::vector<DTDigiCollection*> superCells;
312  superCells = distribDigis(timequeue);
313 
314  // Process each supercell & collect the resulting muonpaths (as the muonpaths std::vector is only enlarged each time
315  // the groupings access it, it's not needed to "collect" the final products).
316  while (!superCells.empty()) {
317  grouping_obj_->run(iEvent, iEventSetup, *(superCells.back()), muonpaths);
318  superCells.pop_back();
319  }
320  } else {
321  grouping_obj_->run(iEvent, iEventSetup, (*dmit).second, muonpaths);
322  }
323  }
324  digiMap.clear();
325 
326  if (dump_) {
327  for (unsigned int i = 0; i < muonpaths.size(); i++) {
328  stringstream ss;
329  ss << iEvent.id().event() << " mpath " << i << ": ";
330  for (int lay = 0; lay < muonpaths.at(i)->nprimitives(); lay++)
331  ss << muonpaths.at(i)->primitive(lay)->channelId() << " ";
332  for (int lay = 0; lay < muonpaths.at(i)->nprimitives(); lay++)
333  ss << muonpaths.at(i)->primitive(lay)->tdcTimeStamp() << " ";
334  for (int lay = 0; lay < muonpaths.at(i)->nprimitives(); lay++)
335  ss << muonpaths.at(i)->primitive(lay)->laterality() << " ";
336  LogInfo("DTTrigPhase2Prod") << ss.str();
337  }
338  }
339 
340  // FILTER GROUPING
341  MuonPathPtrs filteredmuonpaths;
342  if (algo_ == Standard) {
343  mpathredundantfilter_->run(iEvent, iEventSetup, muonpaths, filteredmuonpaths);
344  }
345 
346  if (dump_) {
347  for (unsigned int i = 0; i < filteredmuonpaths.size(); i++) {
348  stringstream ss;
349  ss << iEvent.id().event() << " filt. mpath " << i << ": ";
350  for (int lay = 0; lay < filteredmuonpaths.at(i)->nprimitives(); lay++)
351  ss << filteredmuonpaths.at(i)->primitive(lay)->channelId() << " ";
352  for (int lay = 0; lay < filteredmuonpaths.at(i)->nprimitives(); lay++)
353  ss << filteredmuonpaths.at(i)->primitive(lay)->tdcTimeStamp() << " ";
354  LogInfo("DTTrigPhase2Prod") << ss.str();
355  }
356  }
357 
361  if (debug_)
362  LogDebug("DTTrigPhase2Prod") << "MUON PATHS found: " << muonpaths.size() << " (" << filteredmuonpaths.size()
363  << ") in event " << iEvent.id().event();
364  if (debug_)
365  LogDebug("DTTrigPhase2Prod") << "filling NmetaPrimtives" << std::endl;
366  std::vector<metaPrimitive> metaPrimitives;
367  MuonPathPtrs outmpaths;
368  if (algo_ == Standard) {
369  if (debug_)
370  LogDebug("DTTrigPhase2Prod") << "Fitting 1SL ";
371  mpathanalyzer_->run(iEvent, iEventSetup, filteredmuonpaths, metaPrimitives);
372  } else {
373  // implementation for advanced (2SL) grouping, no filter required..
374  if (debug_)
375  LogDebug("DTTrigPhase2Prod") << "Fitting 2SL at once ";
376  mpathanalyzer_->run(iEvent, iEventSetup, muonpaths, outmpaths);
377  }
378 
379  if (dump_) {
380  for (unsigned int i = 0; i < outmpaths.size(); i++) {
381  LogInfo("DTTrigPhase2Prod") << iEvent.id().event() << " mp " << i << ": " << outmpaths.at(i)->bxTimeValue() << " "
382  << outmpaths.at(i)->horizPos() << " " << outmpaths.at(i)->tanPhi() << " "
383  << outmpaths.at(i)->phi() << " " << outmpaths.at(i)->phiB() << " "
384  << outmpaths.at(i)->quality() << " " << outmpaths.at(i)->chiSquare();
385  }
386  for (unsigned int i = 0; i < metaPrimitives.size(); i++) {
387  stringstream ss;
388  ss << iEvent.id().event() << " mp " << i << ": ";
389  printmP(ss.str(), metaPrimitives.at(i));
390  }
391  }
392 
393  muonpaths.clear();
394  filteredmuonpaths.clear();
395 
397  // FILTER SECTIONS:
399  if (debug_)
400  LogDebug("DTTrigPhase2Prod") << "declaring new vector for filtered" << std::endl;
401 
402  std::vector<metaPrimitive> filteredMetaPrimitives;
403  if (algo_ == Standard)
404  mpathqualityenhancer_->run(iEvent, iEventSetup, metaPrimitives, filteredMetaPrimitives);
405 
406  if (dump_) {
407  for (unsigned int i = 0; i < filteredMetaPrimitives.size(); i++) {
408  stringstream ss;
409  ss << iEvent.id().event() << " filtered mp " << i << ": ";
410  printmP(ss.str(), filteredMetaPrimitives.at(i));
411  }
412  }
413 
414  metaPrimitives.clear();
415  metaPrimitives.erase(metaPrimitives.begin(), metaPrimitives.end());
416 
417  if (debug_)
418  LogDebug("DTTrigPhase2Prod") << "DTp2 in event:" << iEvent.id().event() << " we found "
419  << filteredMetaPrimitives.size() << " filteredMetaPrimitives (superlayer)"
420  << std::endl;
421  if (debug_)
422  LogDebug("DTTrigPhase2Prod") << "filteredMetaPrimitives: starting correlations" << std::endl;
423 
427  std::vector<metaPrimitive> correlatedMetaPrimitives;
428  if (algo_ == Standard)
429  mpathassociator_->run(iEvent, iEventSetup, dtdigis, filteredMetaPrimitives, correlatedMetaPrimitives);
430  else {
431  for (const auto& muonpath : outmpaths) {
432  correlatedMetaPrimitives.emplace_back(muonpath->rawId(),
433  (double)muonpath->bxTimeValue(),
434  muonpath->horizPos(),
435  muonpath->tanPhi(),
436  muonpath->phi(),
437  muonpath->phiB(),
438  muonpath->chiSquare(),
439  (int)muonpath->quality(),
440  muonpath->primitive(0)->channelId(),
441  muonpath->primitive(0)->tdcTimeStamp(),
442  muonpath->primitive(0)->laterality(),
443  muonpath->primitive(1)->channelId(),
444  muonpath->primitive(1)->tdcTimeStamp(),
445  muonpath->primitive(1)->laterality(),
446  muonpath->primitive(2)->channelId(),
447  muonpath->primitive(2)->tdcTimeStamp(),
448  muonpath->primitive(2)->laterality(),
449  muonpath->primitive(3)->channelId(),
450  muonpath->primitive(3)->tdcTimeStamp(),
451  muonpath->primitive(3)->laterality(),
452  muonpath->primitive(4)->channelId(),
453  muonpath->primitive(4)->tdcTimeStamp(),
454  muonpath->primitive(4)->laterality(),
455  muonpath->primitive(5)->channelId(),
456  muonpath->primitive(5)->tdcTimeStamp(),
457  muonpath->primitive(5)->laterality(),
458  muonpath->primitive(6)->channelId(),
459  muonpath->primitive(6)->tdcTimeStamp(),
460  muonpath->primitive(6)->laterality(),
461  muonpath->primitive(7)->channelId(),
462  muonpath->primitive(7)->tdcTimeStamp(),
463  muonpath->primitive(7)->laterality());
464  }
465  }
466  filteredMetaPrimitives.clear();
467 
468  if (debug_)
469  LogDebug("DTTrigPhase2Prod") << "DTp2 in event:" << iEvent.id().event() << " we found "
470  << correlatedMetaPrimitives.size() << " correlatedMetPrimitives (chamber)";
471 
472  if (dump_) {
473  LogInfo("DTTrigPhase2Prod") << "DTp2 in event:" << iEvent.id().event() << " we found "
474  << correlatedMetaPrimitives.size() << " correlatedMetPrimitives (chamber)";
475 
476  for (unsigned int i = 0; i < correlatedMetaPrimitives.size(); i++) {
477  stringstream ss;
478  ss << iEvent.id().event() << " correlated mp " << i << ": ";
479  printmPC(ss.str(), correlatedMetaPrimitives.at(i));
480  }
481  }
482 
483  double shift_back = 0;
484  if (scenario_ == MC) //scope for MC
485  shift_back = 400;
486  else if (scenario_ == DATA) //scope for data
487  shift_back = 0;
488  else if (scenario_ == SLICE_TEST) //scope for slice test
489  shift_back = 400;
490 
491  // RPC integration
492  if (useRPC_) {
493  rpc_integrator_->initialise(iEventSetup, shift_back);
494  rpc_integrator_->prepareMetaPrimitives(rpcRecHits);
495  rpc_integrator_->matchWithDTAndUseRPCTime(correlatedMetaPrimitives);
496  rpc_integrator_->makeRPCOnlySegments();
497  rpc_integrator_->storeRPCSingleHits();
498  rpc_integrator_->removeRPCHitsUsed();
499  }
500 
502  vector<L1Phase2MuDTPhDigi> outP2Ph;
503  vector<L1Phase2MuDTThDigi> outP2Th;
504 
505  // Assigning index value
506  assignIndex(correlatedMetaPrimitives);
507  for (const auto& metaPrimitiveIt : correlatedMetaPrimitives) {
508  DTChamberId chId(metaPrimitiveIt.rawId);
509  DTSuperLayerId slId(metaPrimitiveIt.rawId);
510  if (debug_)
511  LogDebug("DTTrigPhase2Prod") << "looping in final vector: SuperLayerId" << chId << " x=" << metaPrimitiveIt.x
512  << " quality=" << metaPrimitiveIt.quality
513  << " BX=" << round(metaPrimitiveIt.t0 / 25.) << " index=" << metaPrimitiveIt.index;
514 
515  int sectorTP = chId.sector();
516  //sectors 13 and 14 exist only for the outermost stations for sectors 4 and 10 respectively
517  //due to the larger MB4 that are divided into two.
518  if (sectorTP == 13)
519  sectorTP = 4;
520  if (sectorTP == 14)
521  sectorTP = 10;
522  sectorTP = sectorTP - 1;
523  int sl = 0;
524  if (metaPrimitiveIt.quality < LOWLOWQ || metaPrimitiveIt.quality == CHIGHQ) {
525  if (inner(metaPrimitiveIt))
526  sl = 1;
527  else
528  sl = 3;
529  }
530 
531  if (debug_)
532  LogDebug("DTTrigPhase2Prod") << "pushing back phase-2 dataformat carlo-federica dataformat";
533 
534  if (slId.superLayer() != 2) {
535  //phiTP
536  outP2Ph.push_back(L1Phase2MuDTPhDigi(
537  (int)round(metaPrimitiveIt.t0 / (float)LHC_CLK_FREQ) - shift_back,
538  chId.wheel(), // uwh (m_wheel)
539  sectorTP, // usc (m_sector)
540  chId.station(), // ust (m_station)
541  sl, // ust (m_station)
542  (int)round(metaPrimitiveIt.phi * PHIRES_CONV), // uphi (_phiAngle)
543  (int)round(metaPrimitiveIt.phiB * PHIBRES_CONV), // uphib (m_phiBending)
544  metaPrimitiveIt.quality, // uqua (m_qualityCode)
545  metaPrimitiveIt.index, // uind (m_segmentIndex)
546  (int)round(metaPrimitiveIt.t0) - shift_back * LHC_CLK_FREQ, // ut0 (m_t0Segment)
547  (int)round(metaPrimitiveIt.chi2 * CHI2RES_CONV), // uchi2 (m_chi2Segment)
548  metaPrimitiveIt.rpcFlag // urpc (m_rpcFlag)
549  ));
550  } else {
551  //thTP
552  outP2Th.push_back(L1Phase2MuDTThDigi(
553  (int)round(metaPrimitiveIt.t0 / (float)LHC_CLK_FREQ) - shift_back,
554  chId.wheel(), // uwh (m_wheel)
555  sectorTP, // usc (m_sector)
556  chId.station(), // ust (m_station)
557  (int)round(metaPrimitiveIt.phi * ZRES_CONV), // uz (m_zGlobal)
558  (int)round(metaPrimitiveIt.phiB * KRES_CONV), // uk (m_kSlope)
559  metaPrimitiveIt.quality, // uqua (m_qualityCode)
560  metaPrimitiveIt.index, // uind (m_segmentIndex)
561  (int)round(metaPrimitiveIt.t0) - shift_back * LHC_CLK_FREQ, // ut0 (m_t0Segment)
562  (int)round(metaPrimitiveIt.chi2 * CHI2RES_CONV), // uchi2 (m_chi2Segment)
563  metaPrimitiveIt.rpcFlag // urpc (m_rpcFlag)
564  ));
565  }
566  }
567 
568  // Storing RPC hits that were not used elsewhere
569  if (useRPC_) {
570  for (auto rpc_dt_digi = rpc_integrator_->rpcRecHits_translated_.begin();
571  rpc_dt_digi != rpc_integrator_->rpcRecHits_translated_.end();
572  rpc_dt_digi++) {
573  outP2Ph.push_back(*rpc_dt_digi);
574  }
575  }
576 
577  auto resultP2Ph = std::make_unique<L1Phase2MuDTPhContainer>();
578  resultP2Ph->setContainer(outP2Ph);
579  iEvent.put(std::move(resultP2Ph));
580  outP2Ph.clear();
581  outP2Ph.erase(outP2Ph.begin(), outP2Ph.end());
582 
583  std::unique_ptr<L1Phase2MuDTThContainer> resultP2Th(new L1Phase2MuDTThContainer);
584  resultP2Th->setContainer(outP2Th);
585  iEvent.put(std::move(resultP2Th));
586  outP2Th.clear();
587  outP2Th.erase(outP2Th.begin(), outP2Th.end());
588 }
589 
590 void DTTrigPhase2Prod::endRun(edm::Run const& iRun, const edm::EventSetup& iEventSetup) {
591  grouping_obj_->finish();
592  mpathanalyzer_->finish();
593  mpathqualityenhancer_->finish();
594  mpathredundantfilter_->finish();
595  mpathassociator_->finish();
596  rpc_integrator_->finish();
597 };
598 
599 bool DTTrigPhase2Prod::outer(const metaPrimitive& mp) const {
600  int counter = (mp.wi5 != -1) + (mp.wi6 != -1) + (mp.wi7 != -1) + (mp.wi8 != -1);
601  return (counter > 2);
602 }
603 
604 bool DTTrigPhase2Prod::inner(const metaPrimitive& mp) const {
605  int counter = (mp.wi1 != -1) + (mp.wi2 != -1) + (mp.wi3 != -1) + (mp.wi4 != -1);
606  return (counter > 2);
607 }
608 
609 bool DTTrigPhase2Prod::hasPosRF(int wh, int sec) const { return wh > 0 || (wh == 0 && sec % 4 > 1); }
610 
611 void DTTrigPhase2Prod::printmP(const string& ss, const metaPrimitive& mP) const {
612  DTSuperLayerId slId(mP.rawId);
613  LogInfo("DTTrigPhase2Prod") << ss << (int)slId << "\t " << setw(2) << left << mP.wi1 << " " << setw(2) << left
614  << mP.wi2 << " " << setw(2) << left << mP.wi3 << " " << setw(2) << left << mP.wi4 << " "
615  << setw(5) << left << mP.tdc1 << " " << setw(5) << left << mP.tdc2 << " " << setw(5)
616  << left << mP.tdc3 << " " << setw(5) << left << mP.tdc4 << " " << setw(10) << right
617  << mP.x << " " << setw(9) << left << mP.tanPhi << " " << setw(5) << left << mP.t0 << " "
618  << setw(13) << left << mP.chi2 << " r:" << rango(mP);
619 }
620 
621 void DTTrigPhase2Prod::printmPC(const string& ss, const metaPrimitive& mP) const {
622  DTChamberId ChId(mP.rawId);
623  LogInfo("DTTrigPhase2Prod") << ss << (int)ChId << "\t " << setw(2) << left << mP.wi1 << " " << setw(2) << left
624  << mP.wi2 << " " << setw(2) << left << mP.wi3 << " " << setw(2) << left << mP.wi4 << " "
625  << setw(2) << left << mP.wi5 << " " << setw(2) << left << mP.wi6 << " " << setw(2) << left
626  << mP.wi7 << " " << setw(2) << left << mP.wi8 << " " << setw(5) << left << mP.tdc1 << " "
627  << setw(5) << left << mP.tdc2 << " " << setw(5) << left << mP.tdc3 << " " << setw(5)
628  << left << mP.tdc4 << " " << setw(5) << left << mP.tdc5 << " " << setw(5) << left
629  << mP.tdc6 << " " << setw(5) << left << mP.tdc7 << " " << setw(5) << left << mP.tdc8
630  << " " << setw(2) << left << mP.lat1 << " " << setw(2) << left << mP.lat2 << " "
631  << setw(2) << left << mP.lat3 << " " << setw(2) << left << mP.lat4 << " " << setw(2)
632  << left << mP.lat5 << " " << setw(2) << left << mP.lat6 << " " << setw(2) << left
633  << mP.lat7 << " " << setw(2) << left << mP.lat8 << " " << setw(10) << right << mP.x << " "
634  << setw(9) << left << mP.tanPhi << " " << setw(5) << left << mP.t0 << " " << setw(13)
635  << left << mP.chi2 << " r:" << rango(mP);
636 }
637 
639  if (mp.quality == 1 or mp.quality == 2)
640  return 3;
641  if (mp.quality == 3 or mp.quality == 4)
642  return 4;
643  return mp.quality;
644 }
645 
646 void DTTrigPhase2Prod::assignIndex(std::vector<metaPrimitive>& inMPaths) {
647  std::map<int, std::vector<metaPrimitive>> primsPerBX;
648  for (const auto& metaPrimitive : inMPaths) {
649  int BX = round(metaPrimitive.t0 / 25.);
650  primsPerBX[BX].push_back(metaPrimitive);
651  }
652  inMPaths.clear();
653  for (auto& prims : primsPerBX) {
654  assignIndexPerBX(prims.second);
655  for (const auto& primitive : prims.second)
656  inMPaths.push_back(primitive);
657  }
658 }
659 
660 void DTTrigPhase2Prod::assignIndexPerBX(std::vector<metaPrimitive>& inMPaths) {
661  // First we asociate a new index to the metaprimitive depending on quality or phiB;
662  uint32_t rawId = -1;
663  int numP = -1;
664  for (auto& metaPrimitiveIt : inMPaths) {
665  numP++;
666  rawId = metaPrimitiveIt.rawId;
667  int iOrder = assignQualityOrder(metaPrimitiveIt);
668  int inf = 0;
669  int numP2 = -1;
670  for (auto& metaPrimitiveItN : inMPaths) {
671  int nOrder = assignQualityOrder(metaPrimitiveItN);
672  numP2++;
673  if (rawId != metaPrimitiveItN.rawId)
674  continue;
675  if (numP2 == numP) {
676  metaPrimitiveIt.index = inf;
677  break;
678  } else if (iOrder < nOrder) {
679  inf++;
680  } else if (iOrder > nOrder) {
681  metaPrimitiveItN.index++;
682  } else if (iOrder == nOrder) {
683  if (std::abs(metaPrimitiveIt.phiB) >= std::abs(metaPrimitiveItN.phiB)) {
684  inf++;
685  } else if (std::abs(metaPrimitiveIt.phiB) < std::abs(metaPrimitiveItN.phiB)) {
686  metaPrimitiveItN.index++;
687  }
688  }
689  } // ending second for
690  } // ending first for
691 }
692 
694  if (mP.quality > 9 || mP.quality < 1)
695  return -1;
696 
697  return qmap_.find(mP.quality)->second;
698 }
699 
700 std::vector<DTDigiCollection*> DTTrigPhase2Prod::distribDigis(std::queue<std::pair<DTLayerId, DTDigi>>& inQ) {
701  std::vector<std::queue<std::pair<DTLayerId, DTDigi>>*> tmpVector;
702  tmpVector.clear();
703  std::vector<DTDigiCollection*> collVector;
704  collVector.clear();
705  while (!inQ.empty()) {
706  processDigi(inQ, tmpVector);
707  }
708  for (auto& sQ : tmpVector) {
709  DTDigiCollection tmpColl;
710  while (!sQ->empty()) {
711  tmpColl.insertDigi((sQ->front().first), (sQ->front().second));
712  sQ->pop();
713  }
714  collVector.push_back(&tmpColl);
715  }
716  return collVector;
717 }
718 
719 void DTTrigPhase2Prod::processDigi(std::queue<std::pair<DTLayerId, DTDigi>>& inQ,
720  std::vector<std::queue<std::pair<DTLayerId, DTDigi>>*>& vec) {
721  bool classified = false;
722  if (!vec.empty()) {
723  for (auto& sC : vec) { // Conditions for entering a super cell.
724  if ((sC->front().second.time() + superCelltimewidth_) > inQ.front().second.time()) {
725  // Time requirement
726  if (TMath::Abs(sC->front().second.wire() - inQ.front().second.wire()) <= superCellhalfspacewidth_) {
727  // Spatial requirement
728  sC->push(std::move(inQ.front()));
729  classified = true;
730  }
731  }
732  }
733  }
734  if (classified) {
735  inQ.pop();
736  return;
737  }
738 
739  std::queue<std::pair<DTLayerId, DTDigi>> newQueue;
740 
741  std::pair<DTLayerId, DTDigi> tmpPair;
742  tmpPair = std::move(inQ.front());
743  newQueue.push(tmpPair);
744  inQ.pop();
745 
746  vec.push_back(&newQueue);
747 }
748 
DTChamber::id
DTChamberId id() const
Return the DTChamberId of this chamber.
Definition: DTChamber.cc:32
DTGeometry
Definition: DTGeometry.h:28
DTTrigPhase2Prod::inner
bool inner(const metaPrimitive &mp) const
Definition: DTTrigPhase2Prod.cc:604
cmsdt::metaPrimitive
Definition: constants.h:49
Ecal2004TBTDCRanges_v1_cff.endRun
endRun
Definition: Ecal2004TBTDCRanges_v1_cff.py:4
DTSuperLayerId
Definition: DTSuperLayerId.h:12
counter
Definition: counter.py:1
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
DTTrigGeomUtils.h
mps_fire.i
i
Definition: mps_fire.py:428
DTTrigPhase2Prod::debug_
bool debug_
Definition: DTTrigPhase2Prod.cc:115
MessageLogger.h
cmsdt::metaPrimitive::rawId
uint32_t rawId
Definition: constants.h:119
DTTrigPhase2Prod::printmP
void printmP(const std::string &ss, const metaPrimitive &mP) const
Definition: DTTrigPhase2Prod.cc:611
cmsdt::metaPrimitive::x
double x
Definition: constants.h:121
ESHandle.h
DTTrigPhase2Prod::outer
bool outer(const metaPrimitive &mp) const
Definition: DTTrigPhase2Prod.cc:599
DTTrigPhase2Prod::endRun
void endRun(edm::Run const &iRun, const edm::EventSetup &iEventSetup) override
endRun: finish things
Definition: DTTrigPhase2Prod.cc:590
edm::RunID::run
RunNumber_t run() const
Definition: RunID.h:36
DTTrigPhase2Prod::mpathanalyzer_
std::unique_ptr< MuonPathAnalyzer > mpathanalyzer_
Definition: DTTrigPhase2Prod.cc:130
DTTrigPhase2Prod::activateBuffer_
bool activateBuffer_
Definition: DTTrigPhase2Prod.cc:137
edm::Run
Definition: Run.h:45
DTLayerId.h
edm::EDGetTokenT< DTDigiCollection >
DTTrigPhase2Prod::mpathqualityenhancer_
std::unique_ptr< MPFilter > mpathqualityenhancer_
Definition: DTTrigPhase2Prod.cc:131
edm
HLT enums.
Definition: AlignableModifier.h:19
cmsdt::metaPrimitive::lat8
int lat8
Definition: constants.h:150
DTTrigPhase2Prod::globalcoordsobtainer_
std::shared_ptr< GlobalCoordsObtainer > globalcoordsobtainer_
Definition: DTTrigPhase2Prod.cc:134
DTChamber
Definition: DTChamber.h:24
cmsdt::metaPrimitive::wi1
int wi1
Definition: constants.h:127
cmsdt::metaPrimitive::wi8
int wi8
Definition: constants.h:148
DTTrigPhase2Prod::superCelltimewidth_
float superCelltimewidth_
Definition: DTTrigPhase2Prod.cc:139
InitialGrouping.h
ESProducer.h
EDProducer.h
DTTrigPhase2Prod::rango
int rango(const metaPrimitive &mp) const
Definition: DTTrigPhase2Prod.cc:638
cmsdt::metaPrimitive::lat4
int lat4
Definition: constants.h:138
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
DTSuperLayerId::superLayer
int superLayer() const
Return the superlayer number.
Definition: DTSuperLayerId.h:39
DTTrigPhase2Prod::DTDigiMap_const_iterator
DTDigiMap::const_iterator DTDigiMap_const_iterator
Definition: DTTrigPhase2Prod.cc:69
DTTrigPhase2Prod::geometry_tag_
std::string geometry_tag_
Definition: DTTrigPhase2Prod.cc:121
edm::Handle< DTDigiCollection >
cmsdt::metaPrimitive::tdc8
int tdc8
Definition: constants.h:149
ESGetToken.h
MuonPathPtrs
std::vector< MuonPathPtr > MuonPathPtrs
Definition: MuonPath.h:122
cmsdt::KRES_CONV
constexpr float KRES_CONV
Definition: constants.h:223
DTTrigPhase2Prod::assignQualityOrder
int assignQualityOrder(const metaPrimitive &mP) const
Definition: DTTrigPhase2Prod.cc:693
cmsdt::CHIGHQ
Definition: constants.h:42
DTTrigPhase2Prod::beginRun
void beginRun(edm::Run const &iRun, const edm::EventSetup &iEventSetup) override
Create Trigger Units before starting event processing.
Definition: DTTrigPhase2Prod.cc:229
MuonDigiCollection::const_iterator
std::vector< DigiType >::const_iterator const_iterator
Definition: MuonDigiCollection.h:94
L1Phase2MuDTThContainer
Definition: L1Phase2MuDTThContainer.h:34
cmsdt::metaPrimitive::tdc1
int tdc1
Definition: constants.h:128
DTTrigPhase2Prod::mpathredundantfilter_
std::unique_ptr< MPFilter > mpathredundantfilter_
Definition: DTTrigPhase2Prod.cc:132
cmsdt::ZRES_CONV
constexpr float ZRES_CONV
Definition: constants.h:222
contentValuesCheck.ss
ss
Definition: contentValuesCheck.py:33
MakerMacros.h
cmsdt
Definition: constants.h:39
DTTrigPhase2Prod::assignIndexPerBX
void assignIndexPerBX(std::vector< metaPrimitive > &inMPaths)
Definition: DTTrigPhase2Prod.cc:660
constants.h
edm::EventSetup::get
T get() const
Definition: EventSetup.h:87
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
cmsdt::metaPrimitive::quality
int quality
Definition: constants.h:126
cmsdt::metaPrimitive::lat5
int lat5
Definition: constants.h:141
L1Phase2MuDTThDigi
Definition: L1Phase2MuDTThDigi.h:4
Abs
T Abs(T a)
Definition: MathUtil.h:49
DTTrigPhase2Prod::DTDigiMap
std::map< DTChamberId, DTDigiCollection, std::less< DTChamberId > > DTDigiMap
Definition: DTTrigPhase2Prod.cc:67
DTTrigPhase2Prod::DTDigiMap_iterator
DTDigiMap::iterator DTDigiMap_iterator
Definition: DTTrigPhase2Prod.cc:68
cmsdt::metaPrimitive::lat6
int lat6
Definition: constants.h:144
SurfaceOrientation::inner
Definition: Surface.h:19
DTGeometry::chambers
const std::vector< const DTChamber * > & chambers() const
Return a vector of all Chamber.
Definition: DTGeometry.cc:84
cmsdt::metaPrimitive::wi2
int wi2
Definition: constants.h:130
cmsdt::metaPrimitive::tdc7
int tdc7
Definition: constants.h:146
MPRedundantFilter.h
cmsdt::metaPrimitive::lat1
int lat1
Definition: constants.h:129
Run.h
GlobalCoordsObtainer.h
edm::ESHandle< DTGeometry >
cmsdt::metaPrimitive::wi7
int wi7
Definition: constants.h:145
cmsdt::metaPrimitive::wi6
int wi6
Definition: constants.h:142
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
cmsdt::MP_QUALITY
MP_QUALITY
Definition: constants.h:42
L1Phase2MuDTThContainer.h
DTTrigPhase2Prod::~DTTrigPhase2Prod
~DTTrigPhase2Prod() override
Destructor.
Definition: DTTrigPhase2Prod.cc:224
cmsdt::PHIRES_CONV
constexpr float PHIRES_CONV
Definition: constants.h:218
cmsdt::metaPrimitive::tdc3
int tdc3
Definition: constants.h:134
cmsdt::metaPrimitive::lat7
int lat7
Definition: constants.h:147
b
double b
Definition: hdecay.h:118
DTChamberId.h
DTLayerId
Definition: DTLayerId.h:12
HoughGrouping.h
MPFilter.h
createBeamHaloJobs.queue
queue
Definition: createBeamHaloJobs.py:343
DTLayer.h
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
ESProducts.h
DTTrigPhase2Prod::DTTrigPhase2Prod
DTTrigPhase2Prod(const edm::ParameterSet &pset)
Constructor.
Definition: DTTrigPhase2Prod.cc:163
DTGeometry.h
cmsdt::HoughTrans
Definition: constants.h:165
cmsdt::metaPrimitive::wi5
int wi5
Definition: constants.h:139
RPCDetId.h
DTTrigPhase2Prod::hasPosRF
bool hasPosRF(int wh, int sec) const
Definition: DTTrigPhase2Prod.cc:609
cmsdt::LHC_CLK_FREQ
constexpr int LHC_CLK_FREQ
Definition: constants.h:170
cmsdt::Standard
Definition: constants.h:165
RPCRecHitCollection.h
cscdqm::DATA
Definition: CSCDQM_Summary.h:47
DTTrigPhase2Prod::produce
void produce(edm::Event &iEvent, const edm::EventSetup &iEventSetup) override
Producer: process every event and generates trigger data.
Definition: DTTrigPhase2Prod.cc:246
funct::primitive
Primitive< F, X >::type primitive(const F &f)
Definition: Primitive.h:41
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
edm::ParameterSet
Definition: ParameterSet.h:47
a
double a
Definition: hdecay.h:119
cmsdt::SLICE_TEST
Definition: constants.h:167
cmsdt::metaPrimitive::lat2
int lat2
Definition: constants.h:132
DTTrigPhase2Prod::algo_
int algo_
Definition: DTTrigPhase2Prod.cc:128
Event.h
IntegrityClient_cfi.ChId
ChId
Definition: IntegrityClient_cfi.py:18
cmsdt::metaPrimitive::wi4
int wi4
Definition: constants.h:136
DTTrigPhase2Prod::my_BXoffset_
int my_BXoffset_
Definition: DTTrigPhase2Prod.cc:112
DTTrigPhase2Prod
Definition: DTTrigPhase2Prod.cc:66
MPQualityEnhancerFilter.h
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
DTSuperLayerId::chamberId
DTChamberId chamberId() const
Return the corresponding ChamberId.
Definition: DTSuperLayerId.h:45
DTDigiCollection
DTTrigPhase2Prod::qmap_
const std::unordered_map< int, int > qmap_
Definition: DTTrigPhase2Prod.cc:152
cmsdt::metaPrimitive::tdc5
int tdc5
Definition: constants.h:140
DTTrigPhase2Prod::primitives_
std::vector< std::pair< int, MuonPath > > primitives_
Definition: DTTrigPhase2Prod.cc:105
DTTrigPhase2Prod::dtGeo_
DTGeometry const * dtGeo_
Definition: DTTrigPhase2Prod.cc:103
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
cmsdt::metaPrimitive::tdc6
int tdc6
Definition: constants.h:143
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
edm::stream::EDProducer
Definition: EDProducer.h:38
L1Phase2MuDTPhContainer.h
cmsdt::MC
Definition: constants.h:167
submitPVResolutionJobs.q
q
Definition: submitPVResolutionJobs.py:84
edm::EventSetup
Definition: EventSetup.h:58
DTTrigPhase2Prod::dtDigisToken_
edm::EDGetTokenT< DTDigiCollection > dtDigisToken_
Definition: DTTrigPhase2Prod.cc:124
get
#define get
DTTrigPhase2Prod::grouping_obj_
std::unique_ptr< MotherGrouping > grouping_obj_
Definition: DTTrigPhase2Prod.cc:129
cmsdt::metaPrimitive::tanPhi
double tanPhi
Definition: constants.h:122
cmsdt::PHIBRES_CONV
constexpr float PHIBRES_CONV
Definition: constants.h:219
edm::ESGetToken< DTGeometry, MuonGeometryRecord >
fileinputsource_cfi.sec
sec
Definition: fileinputsource_cfi.py:94
DTTrigPhase2Prod::distribDigis
std::vector< DTDigiCollection * > distribDigis(std::queue< std::pair< DTLayerId, DTDigi >> &inQ)
Definition: DTTrigPhase2Prod.cc:700
cmsdt::metaPrimitive::tdc4
int tdc4
Definition: constants.h:137
L1Phase2MuDTPhDigi.h
DTTrigPhase2Prod::dT0_correlate_TP_
double dT0_correlate_TP_
Definition: DTTrigPhase2Prod.cc:117
L1Phase2MuDTThDigi.h
cmsdt::metaPrimitive::chi2
double chi2
Definition: constants.h:125
ModuleFactory.h
DTChamberId::sector
int sector() const
Definition: DTChamberId.h:49
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
DTTrigPhase2Prod::processDigi
void processDigi(std::queue< std::pair< DTLayerId, DTDigi >> &inQ, std::vector< std::queue< std::pair< DTLayerId, DTDigi >> * > &vec)
Definition: DTTrigPhase2Prod.cc:719
DTTrigPhase2Prod::superCellhalfspacewidth_
int superCellhalfspacewidth_
Definition: DTTrigPhase2Prod.cc:138
dqmiodatasetharvest.inf
inf
Definition: dqmiodatasetharvest.py:38
DTWireId.h
DTTrigPhase2Prod::my_CCBValid_
bool my_CCBValid_
Definition: DTTrigPhase2Prod.cc:109
dtTriggerPhase2PrimitiveDigis_cfi.rpcRecHits
rpcRecHits
Definition: dtTriggerPhase2PrimitiveDigis_cfi.py:45
Frameworkfwd.h
L1Phase2MuDTPhDigi
Definition: L1Phase2MuDTPhDigi.h:32
DTTrigPhase2Prod::useRPC_
bool useRPC_
Definition: DTTrigPhase2Prod.cc:146
cmsdt::PseudoBayes
Definition: constants.h:165
MuonPath.h
DTTrigPhase2Prod::dump_
bool dump_
Definition: DTTrigPhase2Prod.cc:116
DTLayerId::superlayerId
DTSuperLayerId superlayerId() const
Return the corresponding SuperLayerId.
Definition: DTLayerId.h:45
PseudoBayesGrouping.h
DTTrigPhase2Prod::cmssw_for_global_
bool cmssw_for_global_
Definition: DTTrigPhase2Prod.cc:120
cmsdt::metaPrimitive::tdc2
int tdc2
Definition: constants.h:131
EventSetup.h
MuonPathAnalyzer.h
MuonDigiCollection::Range
std::pair< const_iterator, const_iterator > Range
Definition: MuonDigiCollection.h:95
or
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
L1TStage2uGTEmulatorClient_cff.BX
BX
Definition: L1TStage2uGTEmulatorClient_cff.py:9
RPCIntegrator.h
cmsdt::CHI2RES_CONV
constexpr int CHI2RES_CONV
Definition: constants.h:220
DTTrigPhase2Prod::printmPC
void printmPC(const std::string &ss, const metaPrimitive &mP) const
Definition: DTTrigPhase2Prod.cc:621
ConsumesCollector.h
MuonPathAnalyzerInChamber.h
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
DTDigiCollection.h
DTChamberId
Definition: DTChamberId.h:14
cmsdt::LOWLOWQ
Definition: constants.h:42
ParameterSet.h
DTSuperLayerId.h
MuonPathAnalyticAnalyzer.h
MuonGeometryRecord.h
SurfaceOrientation::outer
Definition: Surface.h:19
DTTrigPhase2Prod::rpc_integrator_
std::unique_ptr< RPCIntegrator > rpc_integrator_
Definition: DTTrigPhase2Prod.cc:145
DTTrigPhase2Prod::do_correlation_
bool do_correlation_
Definition: DTTrigPhase2Prod.cc:118
DigiContainerIterator
Definition: MuonDigiCollection.h:30
DTTrigPhase2Prod::assignIndex
void assignIndex(std::vector< metaPrimitive > &inMPaths)
Definition: DTTrigPhase2Prod.cc:646
edm::Event
Definition: Event.h:73
MotherGrouping.h
cmsdt::metaPrimitive::lat3
int lat3
Definition: constants.h:135
edm::RunBase::id
RunID const & id() const
Definition: RunBase.h:39
MuonGeometryRecord
Definition: MuonGeometryRecord.h:34
DTTrigPhase2Prod::dtGeomH
edm::ESGetToken< DTGeometry, MuonGeometryRecord > dtGeomH
Definition: DTTrigPhase2Prod.cc:104
RPCGeometry.h
DTChamberId::wheel
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:39
edm::InputTag
Definition: InputTag.h:15
DTTrigPhase2Prod::rpcRecHitsLabel_
edm::EDGetTokenT< RPCRecHitCollection > rpcRecHitsLabel_
Definition: DTTrigPhase2Prod.cc:125
MuonPathAssociator.h
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
cmsdt::metaPrimitive::wi3
int wi3
Definition: constants.h:133
DTChamberId::station
int station() const
Return the station number.
Definition: DTChamberId.h:42
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
cmsdt::metaPrimitive::t0
double t0
Definition: constants.h:120
DTTrigPhase2Prod::mpathassociator_
std::unique_ptr< MuonPathAssociator > mpathassociator_
Definition: DTTrigPhase2Prod.cc:133
DTTrigPhase2Prod::scenario_
int scenario_
Definition: DTTrigPhase2Prod.cc:119