CMS 3D CMS Logo

CSCGEMMotherboardME21.cc
Go to the documentation of this file.
5 
7  unsigned sector, unsigned subsector,
8  unsigned chamber,
9  const edm::ParameterSet& conf)
10  : CSCGEMMotherboard(endcap, station, sector, subsector, chamber, conf)
11  , allLCTs(match_trig_window_size)
12  , dropLowQualityCLCTsNoGEMs_(tmbParams_.getParameter<bool>("dropLowQualityCLCTsNoGEMs"))
13  , dropLowQualityALCTsNoGEMs_(tmbParams_.getParameter<bool>("dropLowQualityALCTsNoGEMs"))
14  , buildLCTfromALCTandGEM_(tmbParams_.getParameter<bool>("buildLCTfromALCTandGEM"))
15  , buildLCTfromCLCTandGEM_(tmbParams_.getParameter<bool>("buildLCTfromCLCTandGEM"))
16 {
17  // set LUTs
18  tmbLUT_.reset(new CSCGEMMotherboardLUTME21());
19 }
20 
21 
25 {
26 }
27 
28 
30 {
31 }
32 
33 
35 {
38 
39  for (int bx = 0; bx < CSCConstants::MAX_LCT_TBINS; bx++) {
40  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++) {
41  for (int i=0;i<CSCConstants::MAX_LCTS_PER_CSC;i++) {
42  allLCTs(bx,mbx,i).clear();
43  }
44  }
45  }
46 }
47 
48 void
50  const CSCComparatorDigiCollection* compdc,
51  const GEMPadDigiCollection* gemPads)
52 {
53  clear();
54  setupGeometry();
55  debugLUTs();
56 
57  if (gem_g != nullptr) {
58  if (infoV >= 0) edm::LogInfo("L1CSCTPEmulatorSetupInfo")
59  << "+++ run() called for GEM-CSC integrated trigger! +++ \n";
60  gemGeometryAvailable = true;
61  }
62 
63  // check for GEM geometry
64  if (not gemGeometryAvailable){
65  if (infoV >= 0) edm::LogError("L1CSCTPEmulatorSetupError")
66  << "+++ run() called for GEM-CSC integrated trigger without valid GEM geometry! +++ \n";
67  return;
68  }
69  gemCoPadV = coPadProcessor->run(gemPads); // run copad processor in GE1/1
70 
71  if (!( alct and clct))
72  {
73  if (infoV >= 0) edm::LogError("L1CSCTPEmulatorSetupError")
74  << "+++ run() called for non-existing ALCT/CLCT processor! +++ \n";
75  return;
76  }
77 
78  alct->setCSCGeometry(csc_g);
79  clct->setCSCGeometry(csc_g);
80 
81  alctV = alct->run(wiredc); // run anodeLCT
82  clctV = clct->run(compdc); // run cathodeLCT
83 
84  // if there are no ALCTs and no CLCTs, it does not make sense to run this TMB
85  if (alctV.empty() and clctV.empty()) return;
86 
87  int used_clct_mask[20];
88  for (int c=0;c<20;++c) used_clct_mask[c]=0;
89 
90  // retrieve pads and copads in a certain BX window for this CSC
91 
92  retrieveGEMPads(gemPads, gemId);
94 
95  const bool hasPads(!pads_.empty());
96  const bool hasCoPads(!coPads_.empty());
97 
98  // ALCT centric matching
99  for (int bx_alct = 0; bx_alct < CSCConstants::MAX_ALCT_TBINS; bx_alct++)
100  {
101  if (alct->bestALCT[bx_alct].isValid())
102  {
103  const int bx_clct_start(bx_alct - match_trig_window_size/2);
104  const int bx_clct_stop(bx_alct + match_trig_window_size/2);
105  const int bx_copad_start(bx_alct - maxDeltaBXCoPad_);
106  const int bx_copad_stop(bx_alct + maxDeltaBXCoPad_);
107 
108  if (debug_matching){
109  LogTrace("CSCGEMCMotherboardME21") << "========================================================================" << std::endl;
110  LogTrace("CSCGEMCMotherboardME21") << "ALCT-CLCT matching in ME2/1 chamber: " << cscChamber->id() << std::endl;
111  LogTrace("CSCGEMCMotherboardME21") << "------------------------------------------------------------------------" << std::endl;
112  LogTrace("CSCGEMCMotherboardME21") << "+++ Best ALCT Details: ";
113  alct->bestALCT[bx_alct].print();
114  LogTrace("CSCGEMCMotherboardME21") << "+++ Second ALCT Details: ";
115  alct->secondALCT[bx_alct].print();
116 
117  printGEMTriggerPads(bx_clct_start, bx_clct_stop, CSCPart::ME21);
118  printGEMTriggerCoPads(bx_clct_start, bx_clct_stop, CSCPart::ME21);
119 
120  LogTrace("CSCGEMCMotherboardME21") << "------------------------------------------------------------------------" << std::endl;
121  LogTrace("CSCGEMCMotherboardME21") << "Attempt ALCT-CLCT matching in ME2/1 in bx range: [" << bx_clct_start << "," << bx_clct_stop << "]" << std::endl;
122  }
123 
124  // ALCT-to-CLCT
125  int nSuccessFulMatches = 0;
126  for (int bx_clct = bx_clct_start; bx_clct <= bx_clct_stop; bx_clct++)
127  {
128  if (bx_clct < 0 or bx_clct >= CSCConstants::MAX_CLCT_TBINS) continue;
129  if (drop_used_clcts and used_clct_mask[bx_clct]) continue;
130  if (clct->bestCLCT[bx_clct].isValid())
131  {
132  // clct quality
133  const int quality(clct->bestCLCT[bx_clct].getQuality());
134  // low quality ALCT
135  const bool lowQualityALCT(alct->bestALCT[bx_alct].getQuality() == 0);
136  // low quality ALCT or CLCT
137  const bool lowQuality(quality<4 or lowQualityALCT);
138  if (debug_matching) LogTrace("CSCGEMCMotherboardME21") << "++Valid ME21 CLCT: " << clct->bestCLCT[bx_clct] << std::endl;
139 
140  // pick the pad that corresponds
141  matches<GEMPadDigi> mPads;
142  matchingPads<GEMPadDigi>(clct->bestCLCT[bx_clct], clct->secondCLCT[bx_clct],
143  alct->bestALCT[bx_alct], alct->secondALCT[bx_alct], ME21, mPads);
144  matches<GEMCoPadDigi> mCoPads;
145  matchingPads<GEMCoPadDigi>(clct->bestCLCT[bx_clct], clct->secondCLCT[bx_clct],
146  alct->bestALCT[bx_alct], alct->secondALCT[bx_alct], ME21, mCoPads);
147 
148  if (dropLowQualityCLCTsNoGEMs_ and lowQuality and hasPads){
149  int nFound(mPads.size());
150  const bool clctInEdge(clct->bestCLCT[bx_clct].getKeyStrip() < 5 or clct->bestCLCT[bx_clct].getKeyStrip() > 155);
151  if (clctInEdge){
152  if (debug_matching) LogTrace("CSCGEMCMotherboardME21") << "\tInfo: low quality CLCT in CSC chamber edge, don't care about GEM pads" << std::endl;
153  }
154  else {
155  if (nFound != 0){
156  if (debug_matching) LogTrace("CSCGEMCMotherboardME21") << "\tInfo: low quality CLCT with " << nFound << " matching GEM trigger pads" << std::endl;
157  }
158  else {
159  if (debug_matching) LogTrace("CSCGEMCMotherboardME21") << "\tWarning: low quality CLCT without matching GEM trigger pad" << std::endl;
160  continue;
161  }
162  }
163  }
164 
165  ++nSuccessFulMatches;
166 
167  int mbx = bx_clct-bx_clct_start;
168  correlateLCTsGEM(alct->bestALCT[bx_alct], alct->secondALCT[bx_alct],
169  clct->bestCLCT[bx_clct], clct->secondCLCT[bx_clct],
170  mPads, mCoPads,
171  allLCTs(bx_alct,mbx,0), allLCTs(bx_alct,mbx,1), CSCPart::ME21);
172  if (debug_matching) {
173  // if (infoV > 1) LogTrace("CSCMotherboard")
174  LogTrace("CSCGEMCMotherboardME21") << "Successful ALCT-CLCT match in ME21: bx_alct = " << bx_alct
175  << "; match window: [" << bx_clct_start << "; " << bx_clct_stop
176  << "]; bx_clct = " << bx_clct << std::endl;
177  LogTrace("CSCGEMCMotherboardME21") << "+++ Best CLCT Details: ";
178  clct->bestCLCT[bx_clct].print();
179  LogTrace("CSCGEMCMotherboardME21") << "+++ Second CLCT Details: ";
180  clct->secondCLCT[bx_clct].print();
181  }
182  if (allLCTs(bx_alct,mbx,0).isValid()) {
183  used_clct_mask[bx_clct] += 1;
184  if (match_earliest_clct_only) break;
185  }
186  }
187  }
188 
189  // ALCT-to-GEM matching
190  int nSuccessFulGEMMatches = 0;
191  if (nSuccessFulMatches==0 and buildLCTfromALCTandGEM_){
192  if (debug_matching) LogTrace("CSCGEMCMotherboardME21") << "++No valid ALCT-CLCT matches in ME21" << std::endl;
193  for (int bx_gem = bx_copad_start; bx_gem <= bx_copad_stop; bx_gem++) {
194  if (not hasCoPads) {
195  continue;
196  }
197 
198  // find the best matching copad
199  matches<GEMCoPadDigi> copads;
200  matchingPads<CSCALCTDigi, GEMCoPadDigi>(alct->bestALCT[bx_alct], alct->secondALCT[bx_alct], ME21, copads);
201 
202  if (debug_matching) LogTrace("CSCGEMCMotherboardME21") << "\t++Number of matching GEM CoPads in BX " << bx_alct << " : "<< copads.size() << std::endl;
203  if (copads.empty()) {
204  continue;
205  }
206 
207  CSCGEMMotherboard::correlateLCTsGEM(alct->bestALCT[bx_alct], alct->secondALCT[bx_alct],
208  copads, allLCTs(bx_alct,0,0), allLCTs(bx_alct,0,1), CSCPart::ME21);
209  if (allLCTs(bx_alct,0,0).isValid()) {
210  ++nSuccessFulGEMMatches;
211  if (match_earliest_clct_only) break;
212  }
213  if (debug_matching) {
214  LogTrace("CSCGEMCMotherboardME21") << "Successful ALCT-GEM CoPad match in ME21: bx_alct = " << bx_alct << std::endl << std::endl;
215  LogTrace("CSCGEMCMotherboardME21") << "------------------------------------------------------------------------" << std::endl << std::endl;
216  }
217  }
218  }
219 
220  if (debug_matching) {
221  LogTrace("CSCGEMCMotherboardME21") << "========================================================================" << std::endl;
222  LogTrace("CSCGEMCMotherboardME21") << "Summary: " << std::endl;
223  if (nSuccessFulMatches>1)
224  LogTrace("CSCGEMCMotherboardME21") << "Too many successful ALCT-CLCT matches in ME21: " << nSuccessFulMatches
225  << ", CSCDetId " << cscChamber->id()
226  << ", bx_alct = " << bx_alct
227  << "; match window: [" << bx_clct_start << "; " << bx_clct_stop << "]" << std::endl;
228  else if (nSuccessFulMatches==1)
229  LogTrace("CSCGEMCMotherboardME21") << "1 successful ALCT-CLCT match in ME21: "
230  << " CSCDetId " << cscChamber->id()
231  << ", bx_alct = " << bx_alct
232  << "; match window: [" << bx_clct_start << "; " << bx_clct_stop << "]" << std::endl;
233  else if (nSuccessFulGEMMatches==1)
234  LogTrace("CSCGEMCMotherboardME21") << "1 successful ALCT-GEM match in ME21: "
235  << " CSCDetId " << cscChamber->id()
236  << ", bx_alct = " << bx_alct
237  << "; match window: [" << bx_clct_start << "; " << bx_clct_stop << "]" << std::endl;
238  else
239  LogTrace("CSCGEMCMotherboardME21") << "Unsuccessful ALCT-CLCT match in ME21: "
240  << "CSCDetId " << cscChamber->id()
241  << ", bx_alct = " << bx_alct
242  << "; match window: [" << bx_clct_start << "; " << bx_clct_stop << "]" << std::endl;
243  }
244  }
245  // at this point we have invalid ALCTs --> try GEM pad matching
246  else{
247  auto coPads(coPads_[bx_alct]);
248  if (!coPads.empty() and buildLCTfromCLCTandGEM_) {
249  const int bx_clct_start(bx_alct - match_trig_window_size/2);
250  const int bx_clct_stop(bx_alct + match_trig_window_size/2);
251 
252  if (debug_matching){
253  LogTrace("CSCGEMCMotherboardME21") << "========================================================================" << std::endl;
254  LogTrace("CSCGEMCMotherboardME21") <<"GEM-CLCT matching in ME2/1 chamber: "<< cscChamber->id()<< "in bx:"<<bx_alct<<std::endl;
255  LogTrace("CSCGEMCMotherboardME21") << "------------------------------------------------------------------------" << std::endl;
256  }
257  // GEM-to-CLCT
258  int nSuccessFulMatches = 0;
259  for (int bx_clct = bx_clct_start; bx_clct <= bx_clct_stop; bx_clct++)
260  {
261  if (bx_clct < 0 or bx_clct >= CSCConstants::MAX_CLCT_TBINS) continue;
262  if (drop_used_clcts and used_clct_mask[bx_clct]) continue;
263  if (clct->bestCLCT[bx_clct].isValid())
264  {
265  const int quality(clct->bestCLCT[bx_clct].getQuality());
266  // only use high-Q stubs for the time being
267  if (quality < 4) continue;
268 
269  ++nSuccessFulMatches;
270 
271  int mbx = std::abs(clct->bestCLCT[bx_clct].getBX()-bx_alct);
272  int bx_gem = (coPads[0].second).bx(1)+CSCConstants::LCT_CENTRAL_BX;
273  CSCGEMMotherboard::correlateLCTsGEM(clct->bestCLCT[bx_clct], clct->secondCLCT[bx_clct], coPads,
274  allLCTs(bx_gem,mbx,0), allLCTs(bx_gem,mbx,1), CSCPart::ME21);
275  if (debug_matching) {
276  // if (infoV > 1) LogTrace("CSCGEMMotherboardME21")
277  LogTrace("CSCGEMCMotherboardME21") << "Successful GEM-CLCT match in ME21: bx_alct = " << bx_alct <<std::endl;
278  //<< "; match window: [" << bx_clct_start << "; " << bx_clct_stop
279  //<< "]; bx_clct = " << bx_clct << std::endl;
280  LogTrace("CSCGEMCMotherboardME21") << "+++ Best CLCT Details: ";
281  clct->bestCLCT[bx_clct].print();
282  LogTrace("CSCGEMCMotherboardME21") << "+++ Second CLCT Details: ";
283  clct->secondCLCT[bx_clct].print();
284  }
285  if (allLCTs(bx_gem,mbx,0).isValid()) {
286  used_clct_mask[bx_gem] += 1;
287  if (match_earliest_clct_only) break;
288  }
289  }
290  }
291  }
292  }
293  }
294  // reduction of nLCTs per each BX
295  for (int bx = 0; bx < CSCConstants::MAX_LCT_TBINS; bx++)
296  {
297  // counting
298  unsigned int n=0;
299  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++)
300  for (int i=0;i<CSCConstants::MAX_LCTS_PER_CSC;i++)
301  {
302  int cbx = bx + mbx - match_trig_window_size/2;
303  if (allLCTs(bx,mbx,i).isValid())
304  {
305  ++n;
306  if (infoV > 0) LogDebug("CSCGEMMotherboardME21")
307  << "LCT"<<i+1<<" "<<bx<<"/"<<cbx<<": "<<allLCTs(bx,mbx,i)<<std::endl;
308  }
309  }
310 
311  // some simple cross-bx sorting algorithms
312  if (tmb_cross_bx_algo == 1 and (n>2))
313  {
314  n=0;
315  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++)
316  for (int i=0;i<CSCConstants::MAX_LCTS_PER_CSC;i++)
317  {
318  if (allLCTs(bx,pref[mbx],i).isValid())
319  {
320  n++;
321  if (n>2) allLCTs(bx,pref[mbx],i).clear();
322  }
323  }
324 
325  n=0;
326  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++)
327  for (int i=0;i<CSCConstants::MAX_LCTS_PER_CSC;i++)
328  {
329  int cbx = bx + mbx - match_trig_window_size/2;
330  if (allLCTs(bx,mbx,i).isValid())
331  {
332  n++;
333  if (infoV > 0) LogDebug("CSCGEMMotherboardME21")
334  << "LCT"<<i+1<<" "<<bx<<"/"<<cbx<<": "<<allLCTs(bx,mbx,i)<< std::endl;
335  }
336  }
337  if (infoV > 0 and n>0) LogDebug("CSCGEMMotherboardME21")
338  <<"bx "<<bx<<" nnLCT:"<<n<<" "<<n<<std::endl;
339  } // x-bx sorting
340  }
341 
342  bool first = true;
343  unsigned int n=0;
344  for (const auto& p : readoutLCTs()) {
345  if (debug_matching and first){
346  LogTrace("CSCGEMCMotherboardME21") << "========================================================================" << std::endl;
347  LogTrace("CSCGEMCMotherboardME21") << "Counting the final LCTs" << std::endl;
348  LogTrace("CSCGEMCMotherboardME21") << "========================================================================" << std::endl;
349  first = false;
350  LogTrace("CSCGEMCMotherboardME21") << "tmb_cross_bx_algo: " << tmb_cross_bx_algo << std::endl;
351  }
352  n++;
353  if (debug_matching)
354  LogTrace("CSCGEMCMotherboardME21") << "LCT "<<n<<" " << p <<std::endl;
355  }
356 }
357 
358 //readout LCTs
359 std::vector<CSCCorrelatedLCTDigi> CSCGEMMotherboardME21::readoutLCTs() const
360 {
361  std::vector<CSCCorrelatedLCTDigi> result;
362  allLCTs.getMatched(result);
365  return result;
366 }
367 
368 
370  const CSCALCTDigi& sALCT,
371  const CSCCLCTDigi& bCLCT,
372  const CSCCLCTDigi& sCLCT,
373  const GEMPadDigiIds& pads,
374  const GEMCoPadDigiIds& copads,
375  CSCCorrelatedLCTDigi& lct1,
376  CSCCorrelatedLCTDigi& lct2, enum CSCPart p) const
377 {
378  CSCALCTDigi bestALCT = bALCT;
379  CSCALCTDigi secondALCT = sALCT;
380  CSCCLCTDigi bestCLCT = bCLCT;
381  CSCCLCTDigi secondCLCT = sCLCT;
382 
383  // assume that always anodeBestValid and cathodeBestValid
384  if (secondALCT == bestALCT) secondALCT.clear();
385  if (secondCLCT == bestCLCT) secondCLCT.clear();
386 
387  const bool ok_bb = bestALCT.isValid() and bestCLCT.isValid();
388  const bool ok_bs = bestALCT.isValid() and secondCLCT.isValid();
389  const bool ok_sb = secondALCT.isValid() and bestCLCT.isValid();
390  const bool ok_ss = secondALCT.isValid() and secondCLCT.isValid();
391 
392  if (!copads.empty() or !pads.empty()){
393 
394  // check matching copads
395  const GEMCoPadDigi& bb_copad = bestMatchingPad<GEMCoPadDigi>(bestALCT, bestCLCT, copads, p);
396  const GEMCoPadDigi& bs_copad = bestMatchingPad<GEMCoPadDigi>(bestALCT, secondCLCT, copads, p);
397  const GEMCoPadDigi& sb_copad = bestMatchingPad<GEMCoPadDigi>(secondALCT, bestCLCT, copads, p);
398  const GEMCoPadDigi& ss_copad = bestMatchingPad<GEMCoPadDigi>(secondALCT, secondCLCT, copads, p);
399 
400  // check matching pads
401  const GEMPadDigi& bb_pad = bestMatchingPad<GEMPadDigi>(bestALCT, bestCLCT, pads, p);
402  const GEMPadDigi& bs_pad = bestMatchingPad<GEMPadDigi>(bestALCT, secondCLCT, pads, p);
403  const GEMPadDigi& sb_pad = bestMatchingPad<GEMPadDigi>(secondALCT, bestCLCT, pads, p);
404  const GEMPadDigi& ss_pad = bestMatchingPad<GEMPadDigi>(secondALCT, secondCLCT, pads, p);
405 
406  // evaluate possible combinations
407  const bool ok_bb_copad = ok_bb and bb_copad.isValid();
408  const bool ok_bs_copad = ok_bs and bs_copad.isValid();
409  const bool ok_sb_copad = ok_sb and sb_copad.isValid();
410  const bool ok_ss_copad = ok_ss and ss_copad.isValid();
411 
412  const bool ok_bb_pad = (not ok_bb_copad) and ok_bb and bb_pad.isValid();
413  const bool ok_bs_pad = (not ok_bs_copad) and ok_bs and bs_pad.isValid();
414  const bool ok_sb_pad = (not ok_sb_copad) and ok_sb and sb_pad.isValid();
415  const bool ok_ss_pad = (not ok_ss_copad) and ok_ss and ss_pad.isValid();
416 
417  // possible cases with copad
418  if (ok_bb_copad or ok_ss_copad){
419  if (ok_bb_copad) lct1 = constructLCTsGEM(bestALCT, bestCLCT, bb_copad, p, 1);
420  if (ok_ss_copad) lct2 = constructLCTsGEM(secondALCT, secondCLCT, ss_copad, p, 2);
421  }
422  else if(ok_bs_copad or ok_sb_copad){
423  if (ok_bs_copad) lct1 = constructLCTsGEM(bestALCT, secondCLCT, bs_copad, p, 1);
424  if (ok_sb_copad) lct2 = constructLCTsGEM(secondALCT, bestCLCT, sb_copad, p, 2);
425  }
426 
427  // done processing?
428  if (lct1.isValid() and lct2.isValid()) return;
429 
430  // possible cases with pad
431  if ((ok_bb_pad or ok_ss_pad) and not (ok_bs_copad or ok_sb_copad)){
432  if (ok_bb_pad) lct1 = constructLCTsGEM(bestALCT, bestCLCT, bb_pad, p, 1);
433  if (ok_ss_pad) lct2 = constructLCTsGEM(secondALCT, secondCLCT, ss_pad, p, 2);
434  }
435  else if((ok_bs_pad or ok_sb_pad) and not (ok_bb_copad or ok_ss_copad)){
436  if (ok_bs_pad) lct1 = constructLCTsGEM(bestALCT, secondCLCT, bs_pad, p, 1);
437  if (ok_sb_pad) lct2 = constructLCTsGEM(secondALCT, bestCLCT, sb_pad, p, 2);
438  }
439  } else {
440  // run without gems - happens in less than 0.04% of the time
441  if (ok_bb) lct1 = constructLCTs(bestALCT, bestCLCT, CSCCorrelatedLCTDigi::ALCTCLCT, 1);
442  if (ok_ss) lct2 = constructLCTs(secondALCT, secondCLCT, CSCCorrelatedLCTDigi::ALCTCLCT, 2);
443  }
444 }
#define LogDebug(id)
void retrieveGEMPads(const GEMPadDigiCollection *pads, unsigned id)
void run(const CSCWireDigiCollection *wiredc, const CSCComparatorDigiCollection *compdc, const GEMPadDigiCollection *gemPads) override
unsigned int match_trig_window_size
CSCDetId id() const
Get the (concrete) DetId.
Definition: CSCChamber.h:37
void correlateLCTsGEM(const CSCALCTDigi &bestALCT, const CSCALCTDigi &secondALCT, const CSCCLCTDigi &bestCLCT, const CSCCLCTDigi &secondCLCT, const GEMPadDigiIds &pads, const GEMCoPadDigiIds &copads, CSCCorrelatedLCTDigi &lct1, CSCCorrelatedLCTDigi &lct2, enum CSCPart p) const
bool isValid() const
check ALCT validity (1 - valid ALCT)
Definition: CSCALCTDigi.h:30
GEMCoPadDigiIdsBX coPads_
CSCCorrelatedLCTDigi constructLCTsGEM(const CSCALCTDigi &alct, const GEMCoPadDigi &gem, enum CSCPart, int i) const
void clear()
clear this ALCT
Definition: CSCALCTDigi.cc:35
static bool sortLCTsByQuality(const CSCCorrelatedLCTDigi &, const CSCCorrelatedLCTDigi &)
int pref[CSCConstants::MAX_LCT_TBINS]
const CSCChamber * cscChamber
matches< GEMCoPadDigi > GEMCoPadDigiIds
std::vector< GEMCoPadDigi > gemCoPadV
std::vector< CSCALCTDigi > alctV
bool isValid() const
Definition: GEMCoPadDigi.cc:32
void sortLCTs(std::vector< CSCCorrelatedLCTDigi > &lcts, bool(*sorter)(const CSCCorrelatedLCTDigi &, const CSCCorrelatedLCTDigi &)) const
std::unique_ptr< GEMCoPadProcessor > coPadProcessor
const CSCGeometry * csc_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< 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 correlateLCTsGEM(T &best, T &second, const GEMCoPadDigiIds &coPads, CSCCorrelatedLCTDigi &lct1, CSCCorrelatedLCTDigi &lct2, enum CSCPart) const
static bool sortLCTsByGEMDphi(const CSCCorrelatedLCTDigi &, const CSCCorrelatedLCTDigi &)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
void printGEMTriggerCoPads(int bx_start, int bx_stop, enum CSCPart)
bool isValid() const
check CLCT validity (1 - valid CLCT)
Definition: CSCCLCTDigi.h:30
CSCCorrelatedLCTDigi constructLCTs(const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT, int type, int trknmb) const
std::unique_ptr< CSCGEMMotherboardLUTME21 > tmbLUT_
#define LogTrace(id)
void getMatched(std::vector< CSCCorrelatedLCTDigi > &) const
bool isValid() const
return valid pattern bit
std::vector< CSCCorrelatedLCTDigi > readoutLCTs() const
GEMPadDigiIdsBX pads_
std::unique_ptr< CSCAnodeLCTProcessor > alct
std::vector< CSCCLCTDigi > clctV
std::unique_ptr< CSCCathodeLCTProcessor > clct
void clear()
clear this CLCT
Definition: CSCCLCTDigi.cc:58
matches< GEMPadDigi > GEMPadDigiIds
const GEMGeometry * gem_g
void printGEMTriggerPads(int bx_start, int bx_stop, enum CSCPart)