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 runOnData (bool runOnData)
 
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
 
int m_maxBX
 
int m_minBX
 
std::unique_ptr< CSCMuonPortCardm_muonportcard
 
bool runME11ILT_
 
bool runME21ILT_
 
bool runME3141ILT_
 
bool runOnData_
 temporary flag to run on data More...
 
bool smartME1aME1b
 
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(), 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_, smartME1aME1b, 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  smartME1aME1b = commonParams.getParameter<bool>("smartME1aME1b");
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("L1CSCTPEmulatorSetupError")
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 && smartME1aME1b && !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 && smartME1aME1b && 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 && 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 && 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:186
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::alct, relativeConstraints::cham, relativeConstraints::chamber, CSCGeometry::chamber(), CSCTriggerNumbering::chamberFromTriggerLabels(), checkBadChambers_, CSCMotherboard::clct, CSCGEMMotherboardME11::clct1a, CSCMotherboardME11::clct1a, CSCGEMMotherboard::coPadProcessor, csc_g, disableME1a, disableME42, MillePedeFileConverter_cfg::e, gem_g, CSCBadChambers::isInBadChamber(), 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(), CSCMotherboardME11::run(), CSCGEMMotherboardME11::run(), CSCGEMMotherboardME21::run(), CSCMotherboard::run(), runME11ILT_, runME21ILT_, runME3141ILT_, runOnData_, CSCMotherboard::setCSCGeometry(), CSCUpgradeMotherboard::setCSCGeometry(), CSCGEMMotherboard::setGEMGeometry(), smartME1aME1b, AlCaHLTBitMon_QueryRunRegistry::string, tmb_, and CSCDetId::zendcap().

Referenced by runOnData().

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 && smartME1aME1b && !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  const std::vector<CSCCorrelatedLCTDigi>& lctV = tmb11->readoutLCTs1b();
218  const std::vector<CSCCorrelatedLCTDigi>& lctV1a = tmb11->readoutLCTs1a();
219  std::vector<CSCALCTDigi> alctV1a, alctV = tmb11->alct->readoutALCTs();
220  const std::vector<CSCCLCTDigi>& clctV = tmb11->clct->readoutCLCTs();
221  const std::vector<int> preTriggerBXs = tmb11->clct->preTriggerBXs();
222  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV = tmb11->clct->preTriggerDigis();
223  const std::vector<CSCCLCTDigi>& clctV1a = tmb11->clct1a->readoutCLCTs();
224  const std::vector<int> preTriggerBXs1a = tmb11->clct1a->preTriggerBXs();
225  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV1a = tmb11->clct1a->preTriggerDigis();
226 
227  // perform simple separation of ALCTs into 1/a and 1/b
228  // for 'smart' case. Some duplication occurs for WG [10,15]
229  std::vector<CSCALCTDigi> tmpV(alctV);
230  alctV.clear();
231  for (unsigned int al=0; al < tmpV.size(); al++)
232  {
233  if (tmpV[al].getKeyWG()<=15) alctV1a.push_back(tmpV[al]);
234  if (tmpV[al].getKeyWG()>=10) alctV.push_back(tmpV[al]);
235  }
236 
237  LogTrace("CSCTriggerPrimitivesBuilder")<<"CSCTriggerPrimitivesBuilder:: a="<<alctV.size()<<" c="<<clctV.size()<<" l="<<lctV.size()
238  <<" 1a: a="<<alctV1a.size()<<" c="<<clctV1a.size()<<" l="<<lctV1a.size();
239 
240  // ME1/b
241 
242  if (!(lctV.empty()&&alctV.empty()&&clctV.empty())) {
243  LogTrace("L1CSCTrigger")
244  << "CSCTriggerPrimitivesBuilder results in " <<detid;
245  }
246 
247  // put collections in event
248  put(lctV, oc_lct, detid, " ME1b LCT digi");
249  put(alctV, oc_alct, detid, " ME1b ALCT digi");
250  put(clctV, oc_clct, detid, " ME1b CLCT digi");
251  put(pretriggerV, oc_pretrigger, detid, " ME1b CLCT pre-trigger digi");
252  put(preTriggerBXs, oc_pretrig, detid, " ME1b CLCT pre-trigger BX");
253 
254  // ME1/a
255 
256  if (disableME1a) continue;
257 
258  CSCDetId detid1a(endc, stat, 4, chid, 0);
259 
260  if (!(lctV1a.empty()&&alctV1a.empty()&&clctV1a.empty())){
261  LogTrace("L1CSCTrigger") << "CSCTriggerPrimitivesBuilder results in " <<detid1a;
262  }
263 
264  // put collections in event
265  put(lctV1a, oc_lct, detid1a, " ME1a LCT digi");
266  put(alctV1a, oc_alct, detid1a, " ME1a ALCT digi");
267  put(clctV1a, oc_clct, detid1a, " ME1a CLCT digi");
268  put(pretriggerV1a, oc_pretrigger, detid1a, " ME1a CLCT pre-trigger digi");
269  put(preTriggerBXs1a, oc_pretrig, detid1a, " ME1a CLCT pre-trigger BX");
270  } // upgraded TMB
271 
272  // running upgraded ME1/1 TMBs with GEMs
273  else if (stat==1 && ring==1 && smartME1aME1b && runME11ILT_)
274  {
275  // run the TMB
276  CSCGEMMotherboardME11* tmb11GEM = static_cast<CSCGEMMotherboardME11*>(tmb);
277  tmb11GEM->setCSCGeometry(csc_g);
278  tmb11GEM->setGEMGeometry(gem_g);
279  LogTrace("CSCTriggerPrimitivesBuilder")<<"CSCTriggerPrimitivesBuilder::build in E:"<<endc<<" S:"<<stat<<" R:"<<ring;
280  tmb11GEM->run(wiredc, compdc, gemPads);
281 
282  // 0th layer means whole chamber.
283  GEMDetId gemId(detid.zendcap(), 1, 1, 0, chid, 0);
284 
285  // get the collections
286  const std::vector<CSCCorrelatedLCTDigi>& lctV = tmb11GEM->readoutLCTs1b();
287  const std::vector<CSCCorrelatedLCTDigi>& lctV1a = tmb11GEM->readoutLCTs1a();
288  std::vector<CSCALCTDigi> alctV1a, alctV = tmb11GEM->alct->readoutALCTs();
289  const std::vector<CSCCLCTDigi>& clctV = tmb11GEM->clct->readoutCLCTs();
290  const std::vector<int>& preTriggerBXs = tmb11GEM->clct->preTriggerBXs();
291  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV = tmb11GEM->clct->preTriggerDigis();
292  const std::vector<CSCCLCTDigi>& clctV1a = tmb11GEM->clct1a->readoutCLCTs();
293  const std::vector<int>& preTriggerBXs1a = tmb11GEM->clct1a->preTriggerBXs();
294  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV1a = tmb11GEM->clct1a->preTriggerDigis();
295  const std::vector<GEMCoPadDigi>& copads = tmb11GEM->coPadProcessor->readoutCoPads();
296 
297  // perform simple separation of ALCTs into 1/a and 1/b
298  // for 'smart' case. Some duplication occurs for WG [10,15]
299  std::vector<CSCALCTDigi> tmpV(alctV);
300  alctV.clear();
301  for (unsigned int al=0; al < tmpV.size(); al++)
302  {
303  if (tmpV[al].getKeyWG()<=15) alctV1a.push_back(tmpV[al]);
304  if (tmpV[al].getKeyWG()>=10) alctV.push_back(tmpV[al]);
305  }
306  //LogTrace("CSCTriggerPrimitivesBuilder")<<"CSCTriggerPrimitivesBuilder:: a="<<alctV.size()<<" c="<<clctV.size()<<" l="<<lctV.size()
307  // <<" 1a: a="<<alctV1a.size()<<" c="<<clctV1a.size()<<" l="<<lctV1a.size();
308 
309  // ME1/b
310  if (!(lctV.empty()&&alctV.empty()&&clctV.empty())) {
311  LogTrace("L1CSCTrigger")
312  << "CSCTriggerPrimitivesBuilder results in " <<detid;
313  }
314 
315  // put collections in event
316  put(lctV, oc_lct, detid, " ME1b LCT digi");
317  put(alctV, oc_alct, detid, " ME1b ALCT digi");
318  put(clctV, oc_clct, detid, " ME1b CLCT digi");
319  put(pretriggerV, oc_pretrigger, detid, " ME1b CLCT pre-trigger digi");
320  put(preTriggerBXs, oc_pretrig, detid, " ME1b CLCT pre-trigger BX");
321  put(copads, oc_gemcopad, gemId, " GEM coincidence pad");
322 
323  // ME1/a
324  if (disableME1a) continue;
325 
326  CSCDetId detid1a(endc, stat, 4, chid, 0);
327 
328  if (!(lctV1a.empty()&&alctV1a.empty()&&clctV1a.empty())){
329  LogTrace("L1CSCTrigger") << "CSCTriggerPrimitivesBuilder results in " <<detid1a;
330  }
331 
332  // put collections in event
333  put(lctV1a, oc_lct, detid1a, " ME1a LCT digi");
334  put(alctV1a, oc_alct, detid1a, " ME1a ALCT digi");
335  put(clctV1a, oc_clct, detid1a, " ME1a CLCT digi");
336  put(pretriggerV1a, oc_pretrigger, detid1a, " ME1a CLCT pre-trigger digi");
337  put(preTriggerBXs1a, oc_pretrig, detid1a, " ME1a CLCT pre-trigger BX");
338  }
339 
340  // running upgraded ME2/1 TMBs
341  else if (stat==2 && ring==1 && runME21ILT_)
342  {
343  // run the TMB
344  CSCGEMMotherboardME21* tmb21GEM = static_cast<CSCGEMMotherboardME21*>(tmb);
345  tmb21GEM->setCSCGeometry(csc_g);
346  tmb21GEM->setGEMGeometry(gem_g);
347  tmb21GEM->run(wiredc, compdc, gemPads);
348 
349  // 0th layer means whole chamber.
350  GEMDetId gemId(detid.zendcap(), 1, 2, 0, chid, 0);
351 
352  // get the collections
353  const std::vector<CSCCorrelatedLCTDigi>& lctV = tmb21GEM->readoutLCTs();
354  const std::vector<CSCALCTDigi>& alctV = tmb21GEM->alct->readoutALCTs();
355  const std::vector<CSCCLCTDigi>& clctV = tmb21GEM->clct->readoutCLCTs();
356  const std::vector<int>& preTriggerBXs = tmb21GEM->clct->preTriggerBXs();
357  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV = tmb21GEM->clct->preTriggerDigis();
358  const std::vector<GEMCoPadDigi>& copads = tmb21GEM->coPadProcessor->readoutCoPads();
359 
360  if (!(alctV.empty() && clctV.empty() && lctV.empty())) {
361  LogTrace("L1CSCTrigger")
362  << "CSCTriggerPrimitivesBuilder got results in " <<detid;
363  }
364 
365  // put collections in event
366  put(lctV, oc_lct, detid, " ME21 LCT digi");
367  put(alctV, oc_alct, detid, " ME21 ALCT digi");
368  put(clctV, oc_clct, detid, " ME21 CLCT digi");
369  put(pretriggerV, oc_pretrigger, detid, " ME21 CLCT pre-trigger digi");
370  put(preTriggerBXs, oc_pretrig, detid, " ME21 CLCT pre-trigger BX");
371  put(copads, oc_gemcopad, gemId, " GEM coincidence pad");
372  }
373  // running upgraded ME3/1-ME4/1 TMBs
374  else if ((stat==3 or stat==4) && ring==1 && runME3141ILT_)
375  {
376  // run the TMB
377  CSCMotherboardME3141* tmb3141 = static_cast<CSCMotherboardME3141*>(tmb);
378  tmb3141->setCSCGeometry(csc_g);
379  tmb3141->run(wiredc, compdc);
380 
381  // get the collections
382  const std::vector<CSCCorrelatedLCTDigi>& lctV = tmb3141->readoutLCTs();
383  const std::vector<CSCALCTDigi>& alctV = tmb3141->alct->readoutALCTs();
384  const std::vector<CSCCLCTDigi>& clctV = tmb3141->clct->readoutCLCTs();
385  const std::vector<int>& preTriggerBXs = tmb3141->clct->preTriggerBXs();
386  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV = tmb3141->clct->preTriggerDigis();
387 
388  if (!(alctV.empty() && clctV.empty() && lctV.empty())) {
389  LogTrace("L1CSCTrigger")
390  << "CSCTriggerPrimitivesBuilder got results in " <<detid;
391  }
392 
393  // put collections in event
394  put(lctV, oc_lct, detid, " ME21 LCT digi");
395  put(alctV, oc_alct, detid, " ME21 ALCT digi");
396  put(clctV, oc_clct, detid, " ME21 CLCT digi");
397  put(pretriggerV, oc_pretrigger, detid, " ME21 CLCT pre-trigger digi");
398  put(preTriggerBXs, oc_pretrig, detid, " ME21 CLCT pre-trigger BX");
399  }
400 
401  // running non-upgraded TMB
402  else
403  {
404  // run the TMB
405  tmb->run(wiredc,compdc);
406 
407  // get the collections
408  const std::vector<CSCCorrelatedLCTDigi>& lctV = tmb->readoutLCTs();
409  const std::vector<CSCALCTDigi>& alctV = tmb->alct->readoutALCTs();
410  const std::vector<CSCCLCTDigi>& clctV = tmb->clct->readoutCLCTs();
411  const std::vector<int>& preTriggerBXs = tmb->clct->preTriggerBXs();
412  const std::vector<CSCCLCTPreTriggerDigi>& pretriggerV = tmb->clct->preTriggerDigis();
413 
414  if (!(alctV.empty() && clctV.empty() && lctV.empty())) {
415  LogTrace("L1CSCTrigger")
416  << "CSCTriggerPrimitivesBuilder got results in " <<detid;
417  }
418 
419  // put collections in event
420  const std::string chamberString("ME" + std::to_string(stat) + "" + std::to_string(ring) + " ");
421  put(lctV, oc_lct, detid, chamberString + " LCT digi");
422  put(alctV, oc_alct, detid, chamberString + " ALCT digi");
423  put(clctV, oc_clct, detid, chamberString + " CLCT digi");
424  put(pretriggerV, oc_pretrigger, detid, chamberString + " CLCT pre-trigger digi");
425  put(preTriggerBXs, oc_pretrig, detid, chamberString + " CLCT pre-trigger BX");
426  } // non-upgraded TMB
427  }
428  }
429  }
430  }
431  }
432 
433  // run MPC simulation
434  m_muonportcard->loadDigis(oc_lct);
435 
436  // temporary hack to ensure that all MPC LCTs are read out
437  // in the correct readout window
438  if (runOnData_) {
439  m_minBX = 5;
440  m_maxBX = 11;
441  }
442 
443  // sort the LCTs per sector
444  // insert them into the result vector
445  std::vector<csctf::TrackStub> result;
446  for(int bx = m_minBX; bx <= m_maxBX; ++bx)
447  for(int e = min_endcap; e <= max_endcap; ++e)
448  for(int st = min_station; st <= max_station; ++st)
449  for(int se = min_sector; se <= max_sector; ++se)
450  {
451  if(st == 1)
452  {
453  std::vector<csctf::TrackStub> subs1, subs2;
454  subs1 = m_muonportcard->sort(e, st, se, 1, bx);
455  subs2 = m_muonportcard->sort(e, st, se, 2, bx);
456  result.insert(result.end(), subs1.begin(), subs1.end());
457  result.insert(result.end(), subs2.begin(), subs2.end());
458  }
459  else
460  {
461  std::vector<csctf::TrackStub> sector;
462  sector = m_muonportcard->sort(e, st, se, 0, bx);
463  result.insert(result.end(), sector.begin(), sector.end());
464  }
465  }
466 
467  // now convert csctf::TrackStub back into CSCCorrelatedLCTDigi
468  // put MPC stubs into the event
469  std::vector<csctf::TrackStub>::const_iterator itr = result.begin();
470  for (; itr != result.end(); itr++)
471  {
472  oc_sorted_lct.insertDigi(CSCDetId(itr->getDetId().rawId()), *(itr->getDigi()));
473  LogDebug("L1CSCTrigger")
474  << "MPC " << *(itr->getDigi()) << " found in ME"
475  << ((itr->endcap() == 1) ? "+" : "-") << itr->station() << "/"
476  << CSCDetId(itr->getDetId().rawId()).ring() << "/"
477  << CSCDetId(itr->getDetId().rawId()).chamber()
478  << " (sector " << itr->sector()
479  << " trig id. " << itr->cscid() << ")" << "\n";
480  }
481 }
#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
void setCSCGeometry(const CSCGeometry *g)
static int ringFromTriggerLabels(int station, int triggerCSCID)
std::vector< CSCCorrelatedLCTDigi > readoutLCTs1b() const
std::unique_ptr< CSCCathodeLCTProcessor > clct1a
bool isInBadChamber(IndexType ichamber) const
Is the chamber with index &#39;ichamber&#39; flagged as bad?
std::vector< CSCCorrelatedLCTDigi > readoutLCTs1a() const
bool runOnData_
temporary flag to run on data
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
void run(const std::vector< int > w_time[CSCConstants::NUM_LAYERS][CSCConstants::MAX_NUM_WIRES], const std::vector< int > hs_times[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS], const std::vector< int > ds_times[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS])
std::unique_ptr< CSCCathodeLCTProcessor > clct1a
std::vector< CSCCorrelatedLCTDigi > readoutLCTs1a() const
#define LogTrace(id)
std::vector< CSCCorrelatedLCTDigi > readoutLCTs1b() const
const CSCChamber * chamber(CSCDetId id) const
Return the chamber corresponding to given DetId.
Definition: CSCGeometry.cc:118
void put(const T &, S &, const CSCDetId &, std::string comment)
bool checkBadChambers_
a flag whether to skip chambers from the bad chambers map
std::vector< CSCCorrelatedLCTDigi > readoutLCTs() const
std::unique_ptr< CSCAnodeLCTProcessor > alct
std::unique_ptr< CSCCathodeLCTProcessor > clct
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 148 of file CSCTriggerPrimitivesBuilder.h.

References LogTrace.

Referenced by build().

150 {
151  if (!t.empty()) {
152  LogTrace("L1CSCTrigger")
153  << "Put " << t.size() << comment
154  << ((t.size() > 1) ? "s " : " ") << "in collection\n";
155  s.put(std::make_pair(t.begin(),t.end()), detid);
156  }
157 }
#define LogTrace(id)
#define comment(par)
Definition: vmac.h:163
void CSCTriggerPrimitivesBuilder::runOnData ( bool  runOnData)
inline

Definition at line 66 of file CSCTriggerPrimitivesBuilder.h.

References build(), runOnData(), and runOnData_.

Referenced by runOnData().

bool runOnData_
temporary flag to run on data
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 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 113 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

const CSCGeometry* CSCTriggerPrimitivesBuilder::csc_g
private

Definition at line 140 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and setCSCGeometry().

bool CSCTriggerPrimitivesBuilder::disableME1a
private

Definition at line 116 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

bool CSCTriggerPrimitivesBuilder::disableME42
private

SLHC: special switch for disabling ME42

Definition at line 119 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

const GEMGeometry* CSCTriggerPrimitivesBuilder::gem_g
private

Definition at line 141 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and setGEMGeometry().

int CSCTriggerPrimitivesBuilder::m_maxBX
private

Definition at line 133 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

int CSCTriggerPrimitivesBuilder::m_minBX
private

Definition at line 133 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

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

Pointer to MPC processor.

Definition at line 144 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 98 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 122 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 125 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 128 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and CSCTriggerPrimitivesBuilder().

bool CSCTriggerPrimitivesBuilder::runOnData_
private

temporary flag to run on data

Definition at line 110 of file CSCTriggerPrimitivesBuilder.h.

Referenced by build(), and runOnData().

bool CSCTriggerPrimitivesBuilder::smartME1aME1b
private

SLHC: special configuration parameters for ME11 treatment.

Definition at line 116 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 137 of file CSCTriggerPrimitivesBuilder.h.

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

bool CSCTriggerPrimitivesBuilder::useClusters_
private

SLHC: special switch to use gem clusters

Definition at line 131 of file CSCTriggerPrimitivesBuilder.h.

Referenced by CSCTriggerPrimitivesBuilder().