CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
CSCTriggerPrimitivesBuilder Class Reference

#include <CSCTriggerPrimitivesBuilder.h>

Public Types

enum  trig_cscs {
  MAX_ENDCAPS = 2, MAX_STATIONS = 4, MAX_SECTORS = 6, MAX_SUBSECTORS = 2,
  MAX_CHAMBERS = 9
}
 

Public Member Functions

void build (const CSCBadChambers *badChambers, const CSCWireDigiCollection *wiredc, const CSCComparatorDigiCollection *compdc, const GEMPadDigiCollection *gemPads, const GEMPadDigiClusterCollection *gemPadClusters, CSCALCTDigiCollection &oc_alct, CSCCLCTDigiCollection &oc_clct, CSCCLCTPreTriggerDigiCollection &oc_clctpretrigger, CSCCLCTPreTriggerCollection &oc_pretrig, CSCCorrelatedLCTDigiCollection &oc_lct, CSCCorrelatedLCTDigiCollection &oc_sorted_lct, GEMCoPadDigiCollection &oc_gemcopad)
 
 CSCTriggerPrimitivesBuilder (const edm::ParameterSet &)
 
void setConfigParameters (const CSCDBL1TPParameters *conf)
 
void setCSCGeometry (const CSCGeometry *g)
 set CSC and GEM geometries for the matching needs More...
 
void setGEMGeometry (const GEMGeometry *g)
 
 ~CSCTriggerPrimitivesBuilder ()
 

Private Member Functions

template<class T , class S >
void put (const T &, S &, const CSCDetId &, std::string comment)
 

Private Attributes

bool checkBadChambers_
 a flag whether to skip chambers from the bad chambers map More...
 
const CSCGeometrycsc_g
 
bool disableME1a_
 
bool disableME42_
 
const GEMGeometrygem_g
 
bool isSLHC_
 
int m_maxBX_
 
int m_minBX_
 
std::unique_ptr< CSCMuonPortCardm_muonportcard
 
bool runME11ILT_
 
bool runME21ILT_
 
bool runME3141ILT_
 
std::unique_ptr< CSCMotherboardtmb_ [MAX_ENDCAPS][MAX_STATIONS][MAX_SECTORS][MAX_SUBSECTORS][MAX_CHAMBERS]
 
bool useClusters_
 

Static Private Attributes

static const int max_chamber = CSCTriggerNumbering::maxTriggerCscId()
 
static const int max_endcap = CSCDetId::maxEndcapId()
 
static const int max_sector = CSCTriggerNumbering::maxTriggerSectorId()
 
static const int max_station = CSCDetId::maxStationId()
 
static const int max_subsector = CSCTriggerNumbering::maxTriggerSubSectorId()
 
static const int min_chamber = CSCTriggerNumbering::minTriggerCscId()
 
static const int min_endcap = CSCDetId::minEndcapId()
 
static const int min_sector = CSCTriggerNumbering::minTriggerSectorId()
 
static const int min_station = CSCDetId::minStationId()
 
static const int min_subsector = CSCTriggerNumbering::minTriggerSubSectorId()
 

Detailed Description

Definition at line 40 of file CSCTriggerPrimitivesBuilder.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

CSCTriggerPrimitivesBuilder::CSCTriggerPrimitivesBuilder ( const edm::ParameterSet conf)
explicit

Configure the algorithm via constructor. Receives ParameterSet percolated down from EDProducer which owns this Builder.

Definition at line 47 of file CSCTriggerPrimitivesBuilder.cc.

References relativeConstraints::cham, checkBadChambers_, disableME1a_, disableME42_, edm::ParameterSet::existsAs(), edm::ParameterSet::getParameter(), isSLHC_, m_maxBX_, m_minBX_, m_muonportcard, max_chamber, MAX_CHAMBERS, max_endcap, MAX_ENDCAPS, max_sector, MAX_SECTORS, max_station, MAX_STATIONS, max_subsector, MAX_SUBSECTORS, min_chamber, min_endcap, min_sector, min_station, min_subsector, relativeConstraints::ring, CSCTriggerNumbering::ringFromTriggerLabels(), runME11ILT_, runME21ILT_, runME3141ILT_, tmb_, and useClusters_.

48 {
49  // Receives ParameterSet percolated down from EDProducer.
50 
51  // special configuration parameters for ME11 treatment
52  edm::ParameterSet commonParams = conf.getParameter<edm::ParameterSet>("commonParam");
53  isSLHC_ = commonParams.getParameter<bool>("isSLHC");
54  disableME1a_ = commonParams.getParameter<bool>("disableME1a");
55  disableME42_ = commonParams.getParameter<bool>("disableME42");
56 
57  checkBadChambers_ = conf.getParameter<bool>("checkBadChambers");
58 
59  runME11ILT_ = commonParams.existsAs<bool>("runME11ILT")?commonParams.getParameter<bool>("runME11ILT"):false;
60  runME21ILT_ = commonParams.existsAs<bool>("runME21ILT")?commonParams.getParameter<bool>("runME21ILT"):false;
61  runME3141ILT_ = commonParams.existsAs<bool>("runME3141ILT")?commonParams.getParameter<bool>("runME3141ILT"):false;
62  useClusters_ = commonParams.existsAs<bool>("useClusters")?commonParams.getParameter<bool>("useClusters"):false;
63 
64  // Initializing boards.
65  for (int endc = min_endcap; endc <= max_endcap; endc++)
66  {
67  for (int stat = min_station; stat <= max_station; stat++)
68  {
69  int numsubs = ((stat == 1) ? max_subsector : 1);
70  for (int sect = min_sector; sect <= max_sector; sect++)
71  {
72  for (int subs = min_subsector; subs <= numsubs; subs++)
73  {
74  for (int cham = min_chamber; cham <= max_chamber; cham++)
75  {
76  if ((endc <= 0 || endc > MAX_ENDCAPS) ||
77  (stat <= 0 || stat > MAX_STATIONS) ||
78  (sect <= 0 || sect > MAX_SECTORS) ||
79  (subs <= 0 || subs > MAX_SUBSECTORS) ||
80  (cham <= 0 || cham > MAX_CHAMBERS))
81  {
82  edm::LogError("CSCTriggerPrimitivesBuilder|SetupError")
83  << "+++ trying to instantiate TMB of illegal CSC id ["
84  << " endcap = " << endc << " station = " << stat
85  << " sector = " << sect << " subsector = " << subs
86  << " chamber = " << cham << "]; skipping it... +++\n";
87  continue;
88  }
90  // When the motherboard is instantiated, it instantiates ALCT
91  // and CLCT processors.
92  if (stat==1 && ring==1 && isSLHC_ && !runME11ILT_)
93  tmb_[endc-1][stat-1][sect-1][subs-1][cham-1].reset( new CSCMotherboardME11(endc, stat, sect, subs, cham, conf) );
94  else if (stat==1 && ring==1 && isSLHC_ && runME11ILT_)
95  tmb_[endc-1][stat-1][sect-1][subs-1][cham-1].reset( new CSCGEMMotherboardME11(endc, stat, sect, subs, cham, conf) );
96  else if (stat==2 && ring==1 && isSLHC_ && runME21ILT_)
97  tmb_[endc-1][stat-1][sect-1][subs-1][cham-1].reset( new CSCGEMMotherboardME21(endc, stat, sect, subs, cham, conf) );
98  else if ((stat==3 || stat==4) && ring==1 && isSLHC_ && runME3141ILT_)
99  tmb_[endc-1][stat-1][sect-1][subs-1][cham-1].reset( new CSCMotherboardME3141(endc, stat, sect, subs, cham, conf) );
100  else
101  tmb_[endc-1][stat-1][sect-1][subs-1][cham-1].reset( new CSCMotherboard(endc, stat, sect, subs, cham, conf) );
102  }
103  }
104  }
105  }
106  }
107 
108  // Get min and max BX to sort LCTs in MPC.
109  m_minBX_ = conf.getParameter<int>("MinBX");
110  m_maxBX_ = conf.getParameter<int>("MaxBX");
111 
112  // Init MPC
113  m_muonportcard.reset( new CSCMuonPortCard(conf) );
114 }
T getParameter(std::string const &) const
std::unique_ptr< CSCMotherboard > tmb_[MAX_ENDCAPS][MAX_STATIONS][MAX_SECTORS][MAX_SUBSECTORS][MAX_CHAMBERS]
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:185
static int ringFromTriggerLabels(int station, int triggerCSCID)
bool checkBadChambers_
a flag whether to skip chambers from the bad chambers map
std::unique_ptr< CSCMuonPortCard > m_muonportcard
CSCTriggerPrimitivesBuilder::~CSCTriggerPrimitivesBuilder ( )

Definition at line 119 of file CSCTriggerPrimitivesBuilder.cc.

120 {
121 }

Member Function Documentation

void CSCTriggerPrimitivesBuilder::build ( const CSCBadChambers badChambers,
const CSCWireDigiCollection wiredc,
const CSCComparatorDigiCollection compdc,
const GEMPadDigiCollection gemPads,
const GEMPadDigiClusterCollection gemPadClusters,
CSCALCTDigiCollection oc_alct,
CSCCLCTDigiCollection oc_clct,
CSCCLCTPreTriggerDigiCollection oc_clctpretrigger,
CSCCLCTPreTriggerCollection oc_pretrig,
CSCCorrelatedLCTDigiCollection oc_lct,
CSCCorrelatedLCTDigiCollection oc_sorted_lct,
GEMCoPadDigiCollection oc_gemcopad 
)

Build anode, cathode, and correlated LCTs in each chamber and fill them into output collections. Select up to three best correlated LCTs in each (sub)sector and put them into an output collection as well.

Definition at line 159 of file CSCTriggerPrimitivesBuilder.cc.

References CSCMotherboard::alctProc, relativeConstraints::cham, relativeConstraints::chamber, CSCGeometry::chamber(), CSCTriggerNumbering::chamberFromTriggerLabels(), checkBadChambers_, CSCMotherboard::clctProc, CSCGEMMotherboard::coPadProcessor, csc_g, disableME1a_, disableME42_, MillePedeFileConverter_cfg::e, gem_g, CSCBadChambers::isInBadChamber(), isSLHC_, LogDebug, LogTrace, m_maxBX_, m_minBX_, m_muonportcard, max_chamber, max_endcap, max_sector, max_station, max_subsector, min_chamber, min_endcap, min_sector, min_station, min_subsector, or, put(), CSCMotherboardME3141::readoutLCTs(), CSCGEMMotherboardME21::readoutLCTs(), CSCMotherboard::readoutLCTs(), CSCGEMMotherboardME11::readoutLCTs1a(), CSCMotherboardME11::readoutLCTs1a(), CSCGEMMotherboardME11::readoutLCTs1b(), CSCMotherboardME11::readoutLCTs1b(), mps_fire::result, relativeConstraints::ring, CSCTriggerNumbering::ringFromTriggerLabels(), CSCMotherboardME3141::run(), CSCGEMMotherboardME11::run(), CSCGEMMotherboardME21::run(), CSCMotherboardME11::run(), CSCMotherboard::run(), runME11ILT_, runME21ILT_, runME3141ILT_, CSCMotherboard::setCSCGeometry(), CSCGEMMotherboard::setGEMGeometry(), AlCaHLTBitMon_QueryRunRegistry::string, tmb_, and CSCDetId::zendcap().

Referenced by setGEMGeometry().

171 {
172  // CSC geometry.
173  for (int endc = min_endcap; endc <= max_endcap; endc++)
174  {
175  for (int stat = min_station; stat <= max_station; stat++)
176  {
177  int numsubs = ((stat == 1) ? max_subsector : 1);
178  for (int sect = min_sector; sect <= max_sector; sect++)
179  {
180  for (int subs = min_subsector; subs <= numsubs; subs++)
181  {
182  for (int cham = min_chamber; cham <= max_chamber; cham++)
183  {
184  // extract the ring number
186 
187  // case when you want to ignore ME42
188  if (disableME42_ && stat==4 && ring==2) continue;
189 
190  CSCMotherboard* tmb = tmb_[endc-1][stat-1][sect-1][subs-1][cham-1].get();
191 
192  tmb->setCSCGeometry(csc_g);
193 
194  // actual chamber number =/= trigger chamber number
196 
197  // 0th layer means whole chamber.
198  CSCDetId detid(endc, stat, ring, chid, 0);
199 
200  // Run processors only if chamber exists in geometry.
201  if (tmb == nullptr || csc_g->chamber(detid) == nullptr) continue;
202 
203  // Skip chambers marked as bad (usually includes most of ME4/2 chambers;
204  // also, there's no ME1/a-1/b separation, it's whole ME1/1)
205  if (checkBadChambers_ && badChambers->isInBadChamber(detid)) continue;
206 
207 
208  // running upgraded ME1/1 TMBs
209  if (stat==1 && ring==1 && isSLHC_ && !runME11ILT_)
210  {
211  // run the TMB
212  CSCMotherboardME11* tmb11 = static_cast<CSCMotherboardME11*>(tmb);
213  LogTrace("CSCTriggerPrimitivesBuilder")<<"CSCTriggerPrimitivesBuilder::build in E:"<<endc<<" S:"<<stat<<" R:"<<ring;
214  tmb11->run(wiredc,compdc);
215 
216  // get all collections
217  // all ALCTs, CLCTs, LCTs are written with detid ring = 1, as data did
218  // but CLCTs and LCTs are written sperately in ME1a and ME1b, considering whether ME1a is disabled or not
219  const std::vector<CSCCorrelatedLCTDigi>& lctV = tmb11->readoutLCTs1b();
220  const std::vector<CSCCorrelatedLCTDigi>& lctV1a = tmb11->readoutLCTs1a();
221  const std::vector<CSCALCTDigi>& alctV = tmb11->alctProc->readoutALCTs();
222  const std::vector<CSCCLCTDigi>& clctV = tmb11->clctProc->readoutCLCTsME1b();
223  const std::vector<int> preTriggerBXs = tmb11->clctProc->preTriggerBXs();
224  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV = tmb11->clctProc->preTriggerDigisME1b();
225  const std::vector<CSCCLCTDigi>& clctV1a = tmb11->clctProc->readoutCLCTsME1a();
226  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV1a = tmb11->clctProc->preTriggerDigisME1a();
227 
228  LogTrace("CSCTriggerPrimitivesBuilder")<<"CSCTriggerPrimitivesBuilder:: a="<<alctV.size()<<" c="<<clctV.size()<<" l="<<lctV.size()
229  <<" c="<<clctV1a.size()<<" l="<<lctV1a.size();
230 
231  // ME1/b
232 
233  if (!(lctV.empty()&&alctV.empty()&&clctV.empty())) {
234  LogTrace("L1CSCTrigger")
235  << "CSCTriggerPrimitivesBuilder results in " <<detid;
236  }
237 
238  // put collections in event
239  put(lctV, oc_lct, detid, " ME1b LCT digi");
240  put(alctV, oc_alct, detid, " ME1b ALCT digi");
241  put(clctV, oc_clct, detid, " ME1b CLCT digi");
242  put(pretriggerV, oc_pretrigger, detid, " ME1b CLCT pre-trigger digi");
243  put(preTriggerBXs, oc_pretrig, detid, " ME1b CLCT pre-trigger BX");
244 
245  // ME1/a
246 
247  if (disableME1a_) continue;
248 
249  CSCDetId detid1a(endc, stat, 4, chid, 0);
250 
251  //if (!(lctV1a.empty()&&alctV1a.empty()&&clctV1a.empty())){
252  if (!(lctV1a.empty() && clctV1a.empty())){
253  LogTrace("L1CSCTrigger") << "CSCTriggerPrimitivesBuilder results in " <<detid1a;
254  }
255 
256  // put collections in event, still use detid ring =1
257  put(lctV1a, oc_lct, detid, " ME1a LCT digi");
258  put(clctV1a, oc_clct, detid, " ME1a CLCT digi");
259  put(pretriggerV1a, oc_pretrigger, detid, " ME1a CLCT pre-trigger digi");
260  } // upgraded TMB
261 
262  // running upgraded ME1/1 TMBs with GEMs
263  else if (stat==1 && ring==1 && isSLHC_ && runME11ILT_)
264  {
265  // run the TMB
266  CSCGEMMotherboardME11* tmb11GEM = static_cast<CSCGEMMotherboardME11*>(tmb);
267  tmb11GEM->setCSCGeometry(csc_g);
268  tmb11GEM->setGEMGeometry(gem_g);
269  LogTrace("CSCTriggerPrimitivesBuilder")<<"CSCTriggerPrimitivesBuilder::build in E:"<<endc<<" S:"<<stat<<" R:"<<ring;
270  tmb11GEM->run(wiredc, compdc, gemPads);
271 
272  // 0th layer means whole chamber.
273  GEMDetId gemId(detid.zendcap(), 1, 1, 0, chid, 0);
274 
275  // get the collections
276  const std::vector<CSCCorrelatedLCTDigi>& lctV = tmb11GEM->readoutLCTs1b();
277  const std::vector<CSCCorrelatedLCTDigi>& lctV1a = tmb11GEM->readoutLCTs1a();
278  const std::vector<CSCALCTDigi>& alctV = tmb11GEM->alctProc->readoutALCTs();
279  const std::vector<CSCCLCTDigi>& clctV = tmb11GEM->clctProc->readoutCLCTsME1b();
280  const std::vector<int>& preTriggerBXs = tmb11GEM->clctProc->preTriggerBXs();
281  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV = tmb11GEM->clctProc->preTriggerDigisME1b();
282  const std::vector<CSCCLCTDigi>& clctV1a = tmb11GEM->clctProc->readoutCLCTsME1a();
283  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV1a = tmb11GEM->clctProc->preTriggerDigisME1a();
284  const std::vector<GEMCoPadDigi>& copads = tmb11GEM->coPadProcessor->readoutCoPads();
285 
286  // ME1/b
287  if (!(lctV.empty()&&alctV.empty()&&clctV.empty())) {
288  LogTrace("L1CSCTrigger")
289  << "CSCTriggerPrimitivesBuilder results in " <<detid;
290  }
291 
292  // put collections in event
293  put(lctV, oc_lct, detid, " ME1b LCT digi");
294  put(alctV, oc_alct, detid, " ME1b ALCT digi");
295  put(clctV, oc_clct, detid, " ME1b CLCT digi");
296  put(pretriggerV, oc_pretrigger, detid, " ME1b CLCT pre-trigger digi");
297  put(preTriggerBXs, oc_pretrig, detid, " ME1b CLCT pre-trigger BX");
298  put(copads, oc_gemcopad, gemId, " GEM coincidence pad");
299 
300  // ME1/a
301  if (disableME1a_) continue;
302 
303  CSCDetId detid1a(endc, stat, 4, chid, 0);
304 
305  if (!(lctV1a.empty() && clctV1a.empty())){
306  LogTrace("L1CSCTrigger") << "CSCTriggerPrimitivesBuilder results in " <<detid1a;
307  }
308 
309  // put collections in event, still use detid ring =1
310  put(lctV1a, oc_lct, detid, " ME1a LCT digi");
311  put(clctV1a, oc_clct, detid, " ME1a CLCT digi");
312  put(pretriggerV1a, oc_pretrigger, detid, " ME1a CLCT pre-trigger digi");
313  }
314 
315  // running upgraded ME2/1 TMBs
316  else if (stat==2 && ring==1 && isSLHC_ && runME21ILT_)
317  {
318  // run the TMB
319  CSCGEMMotherboardME21* tmb21GEM = static_cast<CSCGEMMotherboardME21*>(tmb);
320  tmb21GEM->setCSCGeometry(csc_g);
321  tmb21GEM->setGEMGeometry(gem_g);
322  tmb21GEM->run(wiredc, compdc, gemPads);
323 
324  // 0th layer means whole chamber.
325  GEMDetId gemId(detid.zendcap(), 1, 2, 0, chid, 0);
326 
327  // get the collections
328  const std::vector<CSCCorrelatedLCTDigi>& lctV = tmb21GEM->readoutLCTs();
329  const std::vector<CSCALCTDigi>& alctV = tmb21GEM->alctProc->readoutALCTs();
330  const std::vector<CSCCLCTDigi>& clctV = tmb21GEM->clctProc->readoutCLCTs();
331  const std::vector<int>& preTriggerBXs = tmb21GEM->clctProc->preTriggerBXs();
332  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV = tmb21GEM->clctProc->preTriggerDigis();
333  const std::vector<GEMCoPadDigi>& copads = tmb21GEM->coPadProcessor->readoutCoPads();
334 
335  if (!(alctV.empty() && clctV.empty() && lctV.empty())) {
336  LogTrace("L1CSCTrigger")
337  << "CSCTriggerPrimitivesBuilder got results in " <<detid;
338  }
339 
340  // put collections in event
341  put(lctV, oc_lct, detid, " ME21 LCT digi");
342  put(alctV, oc_alct, detid, " ME21 ALCT digi");
343  put(clctV, oc_clct, detid, " ME21 CLCT digi");
344  put(pretriggerV, oc_pretrigger, detid, " ME21 CLCT pre-trigger digi");
345  put(preTriggerBXs, oc_pretrig, detid, " ME21 CLCT pre-trigger BX");
346  put(copads, oc_gemcopad, gemId, " GEM coincidence pad");
347  }
348  // running upgraded ME3/1-ME4/1 TMBs
349  else if ((stat==3 or stat==4) && ring==1 && isSLHC_ && runME3141ILT_)
350  {
351  // run the TMB
352  CSCMotherboardME3141* tmb3141 = static_cast<CSCMotherboardME3141*>(tmb);
353  tmb3141->setCSCGeometry(csc_g);
354  tmb3141->run(wiredc, compdc);
355 
356  // get the collections
357  const std::vector<CSCCorrelatedLCTDigi>& lctV = tmb3141->readoutLCTs();
358  const std::vector<CSCALCTDigi>& alctV = tmb3141->alctProc->readoutALCTs();
359  const std::vector<CSCCLCTDigi>& clctV = tmb3141->clctProc->readoutCLCTs();
360  const std::vector<int>& preTriggerBXs = tmb3141->clctProc->preTriggerBXs();
361  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV = tmb3141->clctProc->preTriggerDigis();
362 
363  if (!(alctV.empty() && clctV.empty() && lctV.empty())) {
364  LogTrace("L1CSCTrigger")
365  << "CSCTriggerPrimitivesBuilder got results in " <<detid;
366  }
367 
368  // put collections in event
369  put(lctV, oc_lct, detid, " ME21 LCT digi");
370  put(alctV, oc_alct, detid, " ME21 ALCT digi");
371  put(clctV, oc_clct, detid, " ME21 CLCT digi");
372  put(pretriggerV, oc_pretrigger, detid, " ME21 CLCT pre-trigger digi");
373  put(preTriggerBXs, oc_pretrig, detid, " ME21 CLCT pre-trigger BX");
374  }
375 
376  // running non-upgraded TMB
377  else
378  {
379  // run the TMB
380  tmb->run(wiredc,compdc);
381 
382  // get the collections
383  const std::vector<CSCCorrelatedLCTDigi>& lctV = tmb->readoutLCTs();
384  const std::vector<CSCALCTDigi>& alctV = tmb->alctProc->readoutALCTs();
385  const std::vector<CSCCLCTDigi>& clctV = tmb->clctProc->readoutCLCTs();
386  const std::vector<int>& preTriggerBXs = tmb->clctProc->preTriggerBXs();
387  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV = tmb->clctProc->preTriggerDigis();
388 
389  if (!(alctV.empty() && clctV.empty() && lctV.empty())) {
390  LogTrace("L1CSCTrigger")
391  << "CSCTriggerPrimitivesBuilder got results in " <<detid;
392  }
393 
394  // put collections in event
395  const std::string chamberString("ME" + std::to_string(stat) + "" + std::to_string(ring) + " ");
396  put(lctV, oc_lct, detid, chamberString + " LCT digi");
397  put(alctV, oc_alct, detid, chamberString + " ALCT digi");
398  put(clctV, oc_clct, detid, chamberString + " CLCT digi");
399  put(pretriggerV, oc_pretrigger, detid, chamberString + " CLCT pre-trigger digi");
400  put(preTriggerBXs, oc_pretrig, detid, chamberString + " CLCT pre-trigger BX");
401  } // non-upgraded TMB
402  }
403  }
404  }
405  }
406  }
407 
408  // run MPC simulation
409  m_muonportcard->loadDigis(oc_lct);
410 
411  // sort the LCTs per sector
412  // insert them into the result vector
413  std::vector<csctf::TrackStub> result;
414  for(int bx = m_minBX_; bx <= m_maxBX_; ++bx)
415  for(int e = min_endcap; e <= max_endcap; ++e)
416  for(int st = min_station; st <= max_station; ++st)
417  for(int se = min_sector; se <= max_sector; ++se)
418  {
419  if(st == 1)
420  {
421  std::vector<csctf::TrackStub> subs1, subs2;
422  subs1 = m_muonportcard->sort(e, st, se, 1, bx);
423  subs2 = m_muonportcard->sort(e, st, se, 2, bx);
424  result.insert(result.end(), subs1.begin(), subs1.end());
425  result.insert(result.end(), subs2.begin(), subs2.end());
426  }
427  else
428  {
429  std::vector<csctf::TrackStub> sector;
430  sector = m_muonportcard->sort(e, st, se, 0, bx);
431  result.insert(result.end(), sector.begin(), sector.end());
432  }
433  }
434 
435  // now convert csctf::TrackStub back into CSCCorrelatedLCTDigi
436  // put MPC stubs into the event
437  std::vector<csctf::TrackStub>::const_iterator itr = result.begin();
438  for (; itr != result.end(); itr++)
439  {
440  oc_sorted_lct.insertDigi(CSCDetId(itr->getDetId().rawId()), *(itr->getDigi()));
441  LogDebug("L1CSCTrigger")
442  << "MPC " << *(itr->getDigi()) << " found in ME"
443  << ((itr->endcap() == 1) ? "+" : "-") << itr->station() << "/"
444  << CSCDetId(itr->getDetId().rawId()).ring() << "/"
445  << CSCDetId(itr->getDetId().rawId()).chamber()
446  << " (sector " << itr->sector()
447  << " trig id. " << itr->cscid() << ")" << "\n";
448  }
449 }
#define LogDebug(id)
void run(const CSCWireDigiCollection *wiredc, const CSCComparatorDigiCollection *compdc)
void setCSCGeometry(const CSCGeometry *g)
void run(const CSCWireDigiCollection *wiredc, const CSCComparatorDigiCollection *compdc)
std::unique_ptr< CSCMotherboard > tmb_[MAX_ENDCAPS][MAX_STATIONS][MAX_SECTORS][MAX_SUBSECTORS][MAX_CHAMBERS]
void run(const CSCWireDigiCollection *wiredc, const CSCComparatorDigiCollection *compdc, const GEMPadDigiCollection *gemPads) override
void setGEMGeometry(const GEMGeometry *g)
set CSC and GEM geometries for the matching needs
std::unique_ptr< CSCCathodeLCTProcessor > clctProc
static int ringFromTriggerLabels(int station, int triggerCSCID)
std::vector< CSCCorrelatedLCTDigi > readoutLCTs1b() const
bool isInBadChamber(IndexType ichamber) const
Is the chamber with index &#39;ichamber&#39; flagged as bad?
std::vector< CSCCorrelatedLCTDigi > readoutLCTs1a() const
std::unique_ptr< GEMCoPadProcessor > coPadProcessor
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
std::vector< CSCCorrelatedLCTDigi > readoutLCTs1a() const
#define LogTrace(id)
std::vector< CSCCorrelatedLCTDigi > readoutLCTs1b() const
void run(const CSCWireDigiCollection *wiredc, const CSCComparatorDigiCollection *compdc)
const CSCChamber * chamber(CSCDetId id) const
Return the chamber corresponding to given DetId.
Definition: CSCGeometry.cc:133
void put(const T &, S &, const CSCDetId &, std::string comment)
bool checkBadChambers_
a flag whether to skip chambers from the bad chambers map
std::unique_ptr< CSCAnodeLCTProcessor > alctProc
std::vector< CSCCorrelatedLCTDigi > readoutLCTs() const
std::unique_ptr< CSCMuonPortCard > m_muonportcard
std::vector< CSCCorrelatedLCTDigi > readoutLCTs() const
static int chamberFromTriggerLabels(int TriggerSector, int TriggerSubSector, int station, int TriggerCSCID)
std::vector< CSCCorrelatedLCTDigi > readoutLCTs() const
void run(const CSCWireDigiCollection *wiredc, const CSCComparatorDigiCollection *compdc, const GEMPadDigiCollection *gemPads) override
template<class T , class S >
void CSCTriggerPrimitivesBuilder::put ( const T t,
S s,
const CSCDetId detid,
std::string  comment 
)
private

template function to put data in the output helps to reduce the large amount of code duplication!

Definition at line 139 of file CSCTriggerPrimitivesBuilder.h.

References LogTrace.

Referenced by build().

141 {
142  if (!t.empty()) {
143  LogTrace("L1CSCTrigger")
144  << "Put " << t.size() << comment
145  << ((t.size() > 1) ? "s " : " ") << "in collection\n";
146  s.put(std::make_pair(t.begin(),t.end()), detid);
147  }
148 }
#define LogTrace(id)
#define comment(par)
Definition: vmac.h:163
void CSCTriggerPrimitivesBuilder::setConfigParameters ( const CSCDBL1TPParameters conf)

Sets configuration parameters obtained via EventSetup mechanism.

Definition at line 127 of file CSCTriggerPrimitivesBuilder.cc.

References relativeConstraints::cham, max_chamber, max_endcap, max_sector, max_station, max_subsector, min_chamber, min_endcap, min_sector, min_station, min_subsector, and tmb_.

128 {
129  // Receives CSCDBL1TPParameters percolated down from ESProducer.
130 
131  for (int endc = min_endcap; endc <= max_endcap; endc++)
132  {
133  for (int stat = min_station; stat <= max_station; stat++)
134  {
135  int numsubs = ((stat == 1) ? max_subsector : 1);
136  for (int sect = min_sector; sect <= max_sector; sect++)
137  {
138  for (int subs = min_subsector; subs <= numsubs; subs++)
139  {
140  for (int cham = min_chamber; cham <= max_chamber; cham++)
141  {
142  tmb_[endc-1][stat-1][sect-1][subs-1][cham-1]->setConfigParameters(conf);
143  }
144  }
145  }
146  }
147  }
148 }
std::unique_ptr< CSCMotherboard > tmb_[MAX_ENDCAPS][MAX_STATIONS][MAX_SECTORS][MAX_SUBSECTORS][MAX_CHAMBERS]
void CSCTriggerPrimitivesBuilder::setCSCGeometry ( const CSCGeometry g)
inline

set CSC and GEM geometries for the matching needs

Definition at line 56 of file CSCTriggerPrimitivesBuilder.h.

References csc_g, and g.

56 { csc_g = g; }
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 g
Definition: Activities.doc:4
void CSCTriggerPrimitivesBuilder::setGEMGeometry ( const GEMGeometry g)
inline

Definition at line 57 of file CSCTriggerPrimitivesBuilder.h.

References build(), g, and gem_g.

57 { gem_g = g; }
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 g
Definition: Activities.doc:4

Member Data Documentation

bool CSCTriggerPrimitivesBuilder::checkBadChambers_
private

a flag whether to skip chambers from the bad chambers map

Definition at line 101 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

const CSCGeometry* CSCTriggerPrimitivesBuilder::csc_g
private

Definition at line 131 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and setCSCGeometry().

bool CSCTriggerPrimitivesBuilder::disableME1a_
private

SLHC: special switch for disabling ME42

Definition at line 107 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

bool CSCTriggerPrimitivesBuilder::disableME42_
private

SLHC: special switch for disabling ME42

Definition at line 110 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

const GEMGeometry* CSCTriggerPrimitivesBuilder::gem_g
private

Definition at line 132 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and setGEMGeometry().

bool CSCTriggerPrimitivesBuilder::isSLHC_
private

SLHC: special configuration parameters for ME11 treatment.

Definition at line 104 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

int CSCTriggerPrimitivesBuilder::m_maxBX_
private

Definition at line 124 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

int CSCTriggerPrimitivesBuilder::m_minBX_
private

Definition at line 124 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

std::unique_ptr<CSCMuonPortCard> CSCTriggerPrimitivesBuilder::m_muonportcard
private

Pointer to MPC processor.

Definition at line 135 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

const int CSCTriggerPrimitivesBuilder::max_chamber = CSCTriggerNumbering::maxTriggerCscId()
staticprivate
const int CSCTriggerPrimitivesBuilder::max_endcap = CSCDetId::maxEndcapId()
staticprivate
const int CSCTriggerPrimitivesBuilder::max_sector = CSCTriggerNumbering::maxTriggerSectorId()
staticprivate
const int CSCTriggerPrimitivesBuilder::max_station = CSCDetId::maxStationId()
staticprivate
const int CSCTriggerPrimitivesBuilder::max_subsector = CSCTriggerNumbering::maxTriggerSubSectorId()
staticprivate
const int CSCTriggerPrimitivesBuilder::min_chamber = CSCTriggerNumbering::minTriggerCscId()
staticprivate
const int CSCTriggerPrimitivesBuilder::min_endcap = CSCDetId::minEndcapId()
staticprivate

Min and max allowed values for various CSC elements, defined in CSCDetId and CSCTriggerNumbering classes.

Definition at line 89 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), CSCTriggerPrimitivesBuilder(), and setConfigParameters().

const int CSCTriggerPrimitivesBuilder::min_sector = CSCTriggerNumbering::minTriggerSectorId()
staticprivate
const int CSCTriggerPrimitivesBuilder::min_station = CSCDetId::minStationId()
staticprivate
const int CSCTriggerPrimitivesBuilder::min_subsector = CSCTriggerNumbering::minTriggerSubSectorId()
staticprivate
bool CSCTriggerPrimitivesBuilder::runME11ILT_
private

SLHC: special switch for the upgrade ME1/1 TMB

Definition at line 113 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

bool CSCTriggerPrimitivesBuilder::runME21ILT_
private

SLHC: special switch for the upgrade ME2/1 TMB

Definition at line 116 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

bool CSCTriggerPrimitivesBuilder::runME3141ILT_
private

SLHC: special switch for the upgrade ME3/1 and ME4/1 TMB

Definition at line 119 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

std::unique_ptr<CSCMotherboard> CSCTriggerPrimitivesBuilder::tmb_[MAX_ENDCAPS][MAX_STATIONS][MAX_SECTORS][MAX_SUBSECTORS][MAX_CHAMBERS]
private

Pointers to TMB processors for all possible chambers.

Definition at line 128 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), CSCTriggerPrimitivesBuilder(), and setConfigParameters().

bool CSCTriggerPrimitivesBuilder::useClusters_
private

SLHC: special switch to use gem clusters

Definition at line 122 of file CSCTriggerPrimitivesBuilder.h.

Referenced by CSCTriggerPrimitivesBuilder().