CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DTTSPhi.cc
Go to the documentation of this file.
1 //-------------------------------------------------
2 //
3 // Class: DTTSPhi.cpp
4 //
5 // Description: Implementation of TS Phi trigger algorithm
6 //
7 //
8 // Author List:
9 // C. Grandi
10 // Modifications:
11 // jan02 - D.Bonacorsi/S.Marcellini
12 // improved algorithm for 2nd track handling in case of pile-up in TSM
13 // param: tsmgetcarryflag - value: 1 (default)
14 // feb04 - Implementation of sector collector related stuff(S. Marcellini)
15 // jan07 - C. Battilana local conf update
16 // mar07 - S. Vanini : parameters from DTConfigManager
17 //
18 //--------------------------------------------------
19 
21 
22 //-----------------------
23 // This Class's Header --
24 //-----------------------
26 
27 //-------------------------------
28 // Collaborating Class Headers --
29 //-------------------------------
35 
36 //---------------
37 // C++ Headers --
38 //---------------
39 #include <iostream>
40 
41 //----------------
42 // Constructors --
43 //----------------
44 DTTSPhi::DTTSPhi(DTTrigGeom *geom, DTTracoCard *tracocard) : DTGeomSupplier(geom), _tracocard(tracocard) {
45  // reserve the appropriate amount of space for vectors
46  int i = 0;
47  for (i = 0; i < DTConfigTSPhi::NSTEPL - DTConfigTSPhi::NSTEPF + 1; i++) { // SM add + 1
48  _tss[i].reserve(DTConfigTSPhi::NTSSTSM);
49  // DBSM-doubleTSM
50  _tsm[i].reserve(DTConfigTSPhi::NTSMD);
51  }
52 
53  for (int is = 0; is < DTConfigTSPhi::NSTEPL - DTConfigTSPhi::NSTEPF + 1; is++) {
54  // create DTTSSs
55  for (int itss = 1; itss <= DTConfigTSPhi::NTSSTSM; itss++) {
56  DTTSS *tss = new DTTSS(itss);
57  _tss[is].push_back(tss);
58  }
59 
60  // create DTTSMs SM double TSM
61  for (int itsmd = 1; itsmd <= DTConfigTSPhi::NTSMD; itsmd++) {
62  DTTSM *tsm = new DTTSM(itsmd);
63  _tsm[is].push_back(tsm);
64  }
65  }
66 }
67 
68 //--------------
69 // Destructor --
70 //--------------
72  std::vector<DTTSS *>::iterator ptss;
73  std::vector<DTTSM *>::iterator ptsm;
74  for (int is = 0; is < DTConfigTSPhi::NSTEPL - DTConfigTSPhi::NSTEPF + 1; is++) {
75  // clear TSSs
76  for (ptss = _tss[is].begin(); ptss != _tss[is].end(); ptss++) {
77  delete (*ptss);
78  }
79  _tss[is].clear();
80  // clear TSMs
81  for (ptsm = _tsm[is].begin(); ptsm != _tsm[is].end(); ptsm++) {
82  delete (*ptsm);
83  }
84  _tsm[is].clear();
85  }
86 
87  localClear();
88 
89  // delete _config;
90 }
91 
92 //--------------
93 // Operations --
94 //--------------
95 
97  for (int is = 0; is < DTConfigTSPhi::NSTEPL - DTConfigTSPhi::NSTEPF + 1; is++) {
98  // clear buffer
99  std::vector<DTTSCand *>::iterator p1;
100  for (p1 = _tctrig[is].begin(); p1 != _tctrig[is].end(); p1++) {
101  delete (*p1);
102  }
103  _tctrig[is].clear();
104 
105  std::vector<DTTSS *>::iterator ptss;
106  for (ptss = _tss[is].begin(); ptss != _tss[is].end(); ptss++) {
107  (*ptss)->clear();
108  }
109  // clear all DTTSM
110  std::vector<DTTSM *>::iterator ptsm;
111  for (ptsm = _tsm[is].begin(); ptsm != _tsm[is].end(); ptsm++) {
112  (*ptsm)->clear();
113  }
114  }
115 }
116 
118  DTChamberId sid = ChamberId();
119  _config = conf->getDTConfigTSPhi(sid);
120 
121  for (int is = 0; is < DTConfigTSPhi::NSTEPL - DTConfigTSPhi::NSTEPF + 1; is++) {
122  // set TSS config
123  std::vector<DTTSS *>::iterator ptss;
124  for (ptss = _tss[is].begin(); ptss != _tss[is].end(); ptss++) {
125  (*ptss)->setConfig(config());
126  }
127  // set TSM config
128  std::vector<DTTSM *>::iterator ptsm;
129  for (ptsm = _tsm[is].begin(); ptsm != _tsm[is].end(); ptsm++) {
130  (*ptsm)->setConfig(config());
131  }
132  }
133 }
134 
136  // clear DTTSSs and DTTSM
137  localClear();
138 
139  if (config()->debug()) {
140  std::cout << "DTTSPhi::loadDTTSPhi called for wheel=" << wheel();
141  std::cout << ", station=" << station();
142  std::cout << ", sector=" << sector() << std::endl;
143  }
144 
145  // loop on all TRACO triggers
146  std::vector<DTTracoTrigData>::const_iterator p;
147  std::vector<DTTracoTrigData>::const_iterator pend = _tracocard->end();
148  for (p = _tracocard->begin(); p != pend; p++) {
149  if (config()->usedTraco(p->tracoNumber()) /*|| config()->usedTraco(p->tracoNumber())==1*/) {
150  int step = p->step();
151  int fs = (p->isFirst()) ? 1 : 2;
152 
153  // if first track is found inhibit second track processing in previous BX
154  if (fs == 1 && step > DTConfigTSPhi::NSTEPF)
155  ignoreSecondTrack(step - 1, p->tracoNumber());
156 
157  // load trigger
158  addTracoT(step, &(*p), fs);
159  }
160  }
161 }
162 
163 void DTTSPhi::addTracoT(int step, const DTTracoTrigData *tracotrig, int ifs) {
165  std::cout << "DTTSPhi::addTracoT: step out of range: " << step;
166  std::cout << " trigger not added!" << std::endl;
167  return;
168  }
169  // Check that a preview is present and code is not zero
170  if (!tracotrig->pvCode() || !tracotrig->code()) {
171  std::cout << "DTTSPhi::addTracoT: preview not present in TRACO trigger or "
172  "its code=0 ";
173  std::cout << " trigger not added!" << std::endl;
174  return;
175  }
176 
177  // Get the appropriate TSS
178  int itss = (tracotrig->tracoNumber() - 1) / DTConfigTSPhi::NTCTSS + 1;
179  if (itss < 1 || itss > DTConfigTSPhi::NTSSTSM) {
180  std::cout << "DTTSPhi::addTracoT: wrong TRACO number: ";
181  std::cout << tracotrig->tracoNumber();
182  std::cout << " trigger not added!" << std::endl;
183  return;
184  }
185 
186  // TSM status check (if it is the case, reject TRACO triggers related to
187  // broken TSMData)
188  if (config()->TsmStatus().element(itss) == 0) { // TSMD broken
189  return;
190  }
191 
192  int pos = tracotrig->tracoNumber() - (itss - 1) * DTConfigTSPhi::NTCTSS;
193  DTTSS *tss = getDTTSS(step, itss);
194 
195  // Create a new Trigger Server candidate
196  DTTSCand *cand = new DTTSCand(tss, tracotrig, ifs, pos);
197 
198  // Add it to the buffer and to the TSS
199  _tctrig[step - DTConfigTSPhi::NSTEPF].push_back(cand);
200  tss->addDTTSCand(cand);
201 
202  // Debugging...
203  if (config()->debug()) {
204  std::cout << "DTTSPhi::addTracoT at step " << step;
205  if (ifs == 1) {
206  std::cout << " (first track)";
207  } else {
208  std::cout << " (second track)";
209  }
210  std::cout << " from TRACO " << tracotrig->tracoNumber();
211  std::cout << " to TSS " << tss->number() << ", position=" << pos << std::endl;
212  tracotrig->print();
213  }
214  // end debugging
215 }
216 
218  DTTSCand *secondPrevBx = nullptr; // new DTTSCand;
219 
220  bool existSecondPrevBx = false;
221  int itsmd = 1; // initialize it to 1, default value if not in back up mode
223  int i_tsmd;
224 
225  for (int is = DTConfigTSPhi::NSTEPF; is < DTConfigTSPhi::NSTEPL + 1; is++) {
226  // loop on DTTSSs
227  int ntss = 0;
228  i_tsmd = 0;
229  ntsm[is - DTConfigTSPhi::NSTEPF][0] = 0; // counter to make sector collector run if at least a tsm
230  ntsm[is - DTConfigTSPhi::NSTEPF][1] = 0;
231  std::vector<DTTSS *>::iterator p;
232  for (p = _tss[is - DTConfigTSPhi::NSTEPF].begin(); p < _tss[is - DTConfigTSPhi::NSTEPF].end(); p++) {
233  if ((*p)->nTracoT(1) > 0) {
234  // run DTTSS algorithm on non-empty DTTSSs
235  (*p)->run();
236  // load DTTSM with output DTTSS tracks
237  if ((*p)->nTracks() > 0) {
238  for (int it = 1; it <= (*p)->nTracks(); it++) {
239  //--- SM double TSM get the corresponding tsm data
240  int bkmod = config()->TsmStatus().element(0);
241  if (bkmod == 0) { // we are in back-up mode
242  int my_itss = (*p)->number(); // metodo di DTTSS che ritorna itss
243  int ntsstsmd = config()->TSSinTSMD(station(), sector());
244  if (ntsstsmd < 2 || ntsstsmd > DTConfigTSPhi::NTSSTSMD) {
245  std::cout << " DTTSPhi::addTracoT - wrong TSMD: " << ntsstsmd << std::endl;
246  }
247 
248  // Get the appropriate TSMD
249  itsmd = (my_itss - 1) / ntsstsmd + 1;
250  if (config()->debug()) {
251  std::cout << " DTTSPhi::addTracoT: itsmd = (my_itss -1 ) / "
252  "ntsstsmd + 1 ---> my_itss = "
253  << my_itss << " ntsstsmd = " << ntsstsmd << " itsmd = " << itsmd << std::endl;
254  }
255  } else if (bkmod == 1) {
256  itsmd = 1; // initialize it to 1, default value if not in back up mode
257  }
258  if (itsmd > 2)
259  std::cout << "****** >DTTSPhi::RunTSPhi wrong itsmd = " << itsmd << std::endl;
260  DTTSM *tsm = getDTTSM(is, itsmd);
261  tsm->addCand((*p)->getTrack(it));
262  }
263  ntss++;
264  } // end loop on output DTTSS tracks
265  }
266  } // end loop on DTTSSs
267 
268  // at least a DTTSS with signal. Run DTTSM
269 
270  std::vector<DTTSM *>::iterator p_tsm;
271 
272  for (p_tsm = _tsm[is - DTConfigTSPhi::NSTEPF].begin(); p_tsm < _tsm[is - DTConfigTSPhi::NSTEPF].end(); p_tsm++) {
273  // Run TSM sorting if at least a first track
274 
275  i_tsmd = (*p_tsm)->number() - 1; // returns itsmd (0 in default, 0 or 1 when bkmode )
276 
277  if ((*p_tsm)->nCand(1) > 0) {
278  int bkmod = config()->TsmStatus().element(0);
279 
280  (*p_tsm)->run(bkmod); // bkmod 1 normal, 0 backup
281  // Run TSM for current BX in case of 1st Tracks
282  // Run TSM for previous BX for second tracks, to check whether there is
283  // a pile up Tells whether a second track at previous BX exists
284 
285  if ((*p_tsm)->nTracks() > 0) {
286  // We have a first track. Store it if code is > 0
287 
288  if ((*p_tsm)->getTrack(1)->tracoTr()->code() > 0) {
289  DTTSCand *first = (*p_tsm)->getTrack(1);
290  if (config()->TsmGetCarryFlag() == 0) { // get 1st tk at current BX and ignore any 2nd tk at
291  // previous BX
292 
293  _cache.push_back(DTChambPhSegm(ChamberId(), is, (*p_tsm)->getTrack(1)->tracoTr(), 1));
294  ntsm[is - DTConfigTSPhi::NSTEPF][i_tsmd]++; // SM increment ntsm at current BX
295  if (config()->debug())
296  std::cout << "ntsm = " << ntsm[is - DTConfigTSPhi::NSTEPF][i_tsmd] << " is = " << is
297  << " i_tsmd = " << i_tsmd << std::endl;
298  if ((*p_tsm)->nTracks() > 1) { // there is a 2nd tk
299  if ((*p_tsm)->getTrack(2)->tracoTr()->code() > 0) { // check if its code > 0
300  ntsm[is - DTConfigTSPhi::NSTEPF][i_tsmd]++;
301  if (config()->debug())
302  std::cout << "ntsm = " << ntsm[is - DTConfigTSPhi::NSTEPF][i_tsmd] << " is = " << is
303  << " i_tsmd = " << i_tsmd << std::endl;
304 
305  secondPrevBx = (*p_tsm)->getTrack(2); // assign second tk of previous BX
306  }
307  }
308  } else if (config()->TsmGetCarryFlag() == 1) { // compare with 2nd tk in previous BX and get the tk
309  // with better quality
310  existSecondPrevBx =
311  ((is - 1 - DTConfigTSPhi::NSTEPF >= 0) && (ntsm[is - 1 - DTConfigTSPhi::NSTEPF][i_tsmd] > 1) &&
312  (secondPrevBx->tracoTr()->code() > 0));
313  if ((!existSecondPrevBx) ||
314  !((secondPrevBx->isCorr() && secondPrevBx->isHtrig() && secondPrevBx->isInner()) ||
315  (secondPrevBx->isCorr() && secondPrevBx->isHtrig() && !secondPrevBx->isInner()) ||
316  (!secondPrevBx->isCorr() && secondPrevBx->isHtrig() && secondPrevBx->isInner())) ||
317 
318  ((secondPrevBx->isCorr() && secondPrevBx->isHtrig() && secondPrevBx->isInner()) &&
319  (first->isCorr() && first->isHtrig() && first->isInner())) ||
320 
321  ((secondPrevBx->isCorr() && secondPrevBx->isHtrig() && !secondPrevBx->isInner()) &&
322  ((first->isCorr() && first->isHtrig() && first->isInner()) ||
323  (first->isCorr() && first->isHtrig() && !first->isInner()))) ||
324 
325  ((!secondPrevBx->isCorr() && secondPrevBx->isHtrig() && secondPrevBx->isInner()) &&
326  !((!first->isCorr() && first->isHtrig() && !first->isInner()) ||
327  (!first->isCorr() && !first->isHtrig() && first->isInner()) ||
328  (!first->isCorr() && !first->isHtrig() && !first->isInner()) ||
329  (first->isCorr() && !first->isHtrig() && !first->isInner()) ||
330  (first->isCorr() && !first->isHtrig() && first->isInner())))) {
331  // SM sector collector
332  ntsm[is - DTConfigTSPhi::NSTEPF][i_tsmd]++; // SM increment ntsm at current BX. I need to
333  // know if there is at least a first track from
334  // TSM to run Sect Coll
335 
336  _cache.push_back(DTChambPhSegm(ChamberId(), is, (*p_tsm)->getTrack(1)->tracoTr(), 1));
337  // (*p_tsm)->getTrack(1)->print();
338 
339  if ((*p_tsm)->nTracks() > 1) { // there is a 2nd tk
340  ntsm[is - DTConfigTSPhi::NSTEPF][i_tsmd]++;
341  if ((*p_tsm)->getTrack(2)->tracoTr()->code() > 0) { // check if its code > 0
342  secondPrevBx = (*p_tsm)->getTrack(2); // assign second previous BX
343  }
344  }
345  } else { // if 2nd tk prev BX is better than first present BX skip
346  // the event and get 2nd prev BX
347  ntsm[is - 1 - DTConfigTSPhi::NSTEPF][i_tsmd]++; // SM increment ntsm at previous BX.
348  _cache.push_back(DTChambPhSegm(ChamberId(), is - 1, secondPrevBx->tracoTr(), 2));
349  // secondPrevBx->print();
350  }
351  }
352 
353  else if (config()->TsmGetCarryFlag() == 2) { // neglect first tk if it is a low uncorrelated
354  // trigger
355  existSecondPrevBx =
356  ((is - 1 - DTConfigTSPhi::NSTEPF >= 0) && (ntsm[is - 1 - DTConfigTSPhi::NSTEPF][i_tsmd] > 1) &&
357  (secondPrevBx->tracoTr()->code() > 0));
358  if ((!existSecondPrevBx) || first->isHtrig() || first->isCorr()) {
359  ntsm[is - DTConfigTSPhi::NSTEPF][i_tsmd]++; // SM increment ntsm at current BX.
360  // SM sector collector: Load DTSectColl with output of DTTSM
361  _cache.push_back(DTChambPhSegm(ChamberId(), is, (*p_tsm)->getTrack(1)->tracoTr(), 1));
362  // (*p_tsm)->getTrack(1)->print();
363 
364  if ((*p_tsm)->nTracks() > 1) { // there is a 2nd tk
365  ntsm[is - DTConfigTSPhi::NSTEPF][i_tsmd]++;
366  if ((*p_tsm)->getTrack(2)->tracoTr()->code() > 0) { // check if its code > 0
367  secondPrevBx = (*p_tsm)->getTrack(2); // assign second tk of previous BX
368  }
369  }
370  } else {
371  ntsm[is - 1 - DTConfigTSPhi::NSTEPF][i_tsmd]++; // SM increment ntsm at previous BX.
372  _cache.push_back(DTChambPhSegm(ChamberId(), is - 1, secondPrevBx->tracoTr(), 2));
373  // secondPrevBx->print();
374  }
375  }
376  }
377  }
378 
379  } else if (((*p_tsm)->nCand(1) == 0) && (is - 1 - DTConfigTSPhi::NSTEPF >= 0) &&
380  ntsm[is - 1 - DTConfigTSPhi::NSTEPF][i_tsmd] >
381  0) { // it means that the last BX with sort 2 was not the
382  // previous one
383  existSecondPrevBx =
384  ((is - 1 - DTConfigTSPhi::NSTEPF >= 0) && (ntsm[is - 1 - DTConfigTSPhi::NSTEPF][i_tsmd] > 1) &&
385  (secondPrevBx->tracoTr()->code() > 0));
386  if (existSecondPrevBx) {
387  _cache.push_back(DTChambPhSegm(ChamberId(), is - 1, secondPrevBx->tracoTr(), 2));
388 
389  // secondPrevBx->print();
390  }
391  }
392  }
393  //---
394 
395  } // end loop on step
396  // debugging...
397  if (config()->debug()) {
398  if (!_cache.empty()) {
399  std::cout << "====================================================" << std::endl;
400  std::cout << " Phi segments " << std::endl;
401  std::vector<DTChambPhSegm>::const_iterator p;
402  for (p = _cache.begin(); p < _cache.end(); p++) {
403  p->print();
404  }
405  std::cout << "====================================================" << std::endl;
406  }
407  }
408  // end debugging
409 }
410 
411 void DTTSPhi::ignoreSecondTrack(int step, int tracon) {
412  int itsmd = 1; // initialize it to default
413 
415  std::cout << "DTTSPhi::ignoreSecondTrack: step out of range: " << step;
416  std::cout << " no flag set!" << std::endl;
417  return;
418  }
419  int itss = (tracon - 1) / DTConfigTSPhi::NTCTSS + 1;
420  if (itss < 1 || itss > DTConfigTSPhi::NTSSTSM) {
421  std::cout << "DTTSPhi::ignoreSecondTrack: wrong TRACO number: " << tracon;
422  std::cout << " no flag set!" << std::endl;
423  return;
424  }
425  DTTSS *tss = getDTTSS(step, itss);
426  tss->ignoreSecondTrack();
427 
428  int bkmod = config()->TsmStatus().element(0);
429  if (bkmod == 0) { // we are in back-up mode
430 
431  int ntsstsmd = config()->TSSinTSMD(station(), sector());
432  // Get the appropriate TSMD
433  itsmd = (itss - 1) / ntsstsmd + 1;
434  }
435 
436  DTTSM *tsm = getDTTSM(step, itsmd);
437  tsm->ignoreSecondTrack();
438 }
439 
440 DTTSS *DTTSPhi::getDTTSS(int step, unsigned n) const {
442  std::cout << "DTTSPhi::getDTTSS: step out of range: " << step;
443  std::cout << " empty pointer returned!" << std::endl;
444  return nullptr;
445  }
446  if (n < 1 || n > _tss[step - DTConfigTSPhi::NSTEPF].size()) {
447  std::cout << "DTTSPhi::getDTTSS: requested DTTSS not present: " << n;
448  std::cout << " (at step " << step << ")";
449  std::cout << " empty pointer returned!" << std::endl;
450  return nullptr;
451  }
452 
453  std::vector<DTTSS *>::const_iterator p = _tss[step - DTConfigTSPhi::NSTEPF].begin() + n - 1;
454  return *p;
455 }
456 
457 DTTSM *DTTSPhi::getDTTSM(int step, unsigned n) const {
459  std::cout << "DTTSPhi::getDTTSM: step out of range: " << step;
460  std::cout << " empty pointer returned!" << std::endl;
461  return nullptr;
462  }
463  if (n < 1 || n > _tsm[step - DTConfigTSPhi::NSTEPF].size()) {
464  std::cout << "DTTSPhi::getDTTSM: requested DTTSM not present: " << n;
465  std::cout << " (at step " << step << ")";
466  std::cout << " empty pointer returned!" << std::endl;
467  return nullptr;
468  }
469  std::vector<DTTSM *>::const_iterator p_tsm = _tsm[step - DTConfigTSPhi::NSTEPF].begin() + n - 1;
470  return *p_tsm;
471 }
472 
474  int n = 0;
475  std::vector<DTChambPhSegm>::const_iterator p; // p=0;
476  for (p = begin(); p < end(); p++) {
477  if (p->step() == step)
478  n++;
479  }
480  return n;
481 }
482 
483 const DTChambPhSegm *DTTSPhi::segment(int step, unsigned n) {
484  std::vector<DTChambPhSegm>::const_iterator p; // p=0;
485  for (p = begin(); p < end(); p++) {
486  if (p->step() == step && ((n == 1 && p->isFirst()) || (n == 2 && !p->isFirst())))
487  return &(*p); // p;
488  }
489  return nullptr;
490 }
491 
493  //@@ patch for Sun 4.2 compiler
494  // sm DTChambPhSegm* trig =
495  // dynamic_cast<DTChambPhSegm*>(const_cast<DTTrigData*>(tr));
496  const DTChambPhSegm *trig = dynamic_cast<const DTChambPhSegm *>(tr);
497  if (!trig) {
498  std::cout << "DTTSPhi::LocalPosition called with wrong argument!" << std::endl;
499  return LocalPoint(0, 0, 0);
500  }
501  return _tracocard->localPosition(trig->tracoTrig());
502 }
503 
505  DTChambPhSegm *trig = dynamic_cast<DTChambPhSegm *>(const_cast<DTTrigData *>(tr));
506  // const DTChambPhSegm* trig = dynamic_cast<const DTChambPhSegm*>(tr);
507  if (!trig) {
508  std::cout << "DTTSPhi::LocalDirection called with wrong argument!" << std::endl;
509  return LocalVector(0, 0, 0);
510  }
511  return _tracocard->localDirection(trig->tracoTrig());
512 }
LocalVector localDirection(const DTTrigData *) const override
NEWGEO Local direction in chamber of a trigger-data object.
Definition: DTTracoCard.cc:403
my_collection _cache
Definition: DTCache.h:53
void ignoreSecondTrack()
Set a flag to skip sort2.
Definition: DTTSS.h:51
Local3DVector LocalVector
Definition: LocalVector.h:12
std::vector< DTTSM * > _tsm[DTConfigTSPhi::NSTEPL-DTConfigTSPhi::NSTEPF+1]
Definition: DTTSPhi.h:117
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:30
int sector() const
Return sector number.
int nSegm(int step)
Return number of DTTSPhi segments.
Definition: DTTSPhi.cc:473
int isHtrig() const
Return HTRIG/LTRIG bit.
Definition: DTTSCand.h:102
void runTSPhi()
run DTTSPhi algorithm (DTTSS+DTTSM)
Definition: DTTSPhi.cc:217
void loadTSPhi()
store DTTracoChip triggers in the DTTSS&#39;s
Definition: DTTSPhi.cc:135
void addDTTSCand(DTTSCand *cand)
Add a TS candidate to the TSS, ifs is first/second track flag.
Definition: DTTSS.cc:274
static const int NSTEPF
Definition: DTConfig.h:35
int tracoNumber() const
Return parent TRACO number.
static const int NTSSTSM
Constant: maximum number of TSS in input to the TSM.
Definition: DTConfigTSPhi.h:39
int station() const
Return station number.
const DTConfigTSPhi * config() const
Return the configuration class.
Definition: DTTSPhi.h:62
static const int NTCTSS
Constant: number of TRACOs in input to a TSS.
Definition: DTConfig.h:40
Definition: DTTSM.h:38
DTTSS * getDTTSS(int step, unsigned n) const
Definition: DTTSPhi.cc:440
int wheel() const
Return wheel number.
void ignoreSecondTrack(int step, int tracon)
Set a flag to ignore second tracks (if first track at following BX)
Definition: DTTSPhi.cc:411
bool debug() const
Return the debug flag.
Definition: DTConfigTSPhi.h:60
static const int NTSMD
Constant: number of TSMD.
Definition: DTConfigTSPhi.h:42
const DTChambPhSegm * segment(int step, unsigned n)
Return the requested DTTSPhi segment.
Definition: DTTSPhi.cc:483
const TString p1
Definition: fwPaths.cc:12
int TsmGetCarryFlag() const
Handling of second track (carry) in case of pile-up, in TSM.
DTChamberId ChamberId() const
Identifier of the associated chamber.
int TSSinTSMD(int stat, int sect) const
Return the max nb. of TSSs in input to a single TSMD (called ONLY in back-up mode) ...
static const int NSTEPL
Constants: first and last step to start trigger finding.
Definition: DTConfig.h:35
const DTConfigTSPhi * _config
Definition: DTTSPhi.h:112
LocalPoint localPosition(const DTTrigData *) const override
Local position in chamber of a trigger-data object.
Definition: DTTSPhi.cc:492
~DTTSPhi() override
Destructor.
Definition: DTTSPhi.cc:71
int pvCode() const
Return the preview code.
DTTracoCard * _tracocard
Definition: DTTSPhi.h:110
#define debug
Definition: HDRShower.cc:19
std::vector< DTTSCand * > _tctrig[DTConfigTSPhi::NSTEPL-DTConfigTSPhi::NSTEPF+1]
Definition: DTTSPhi.h:120
void ignoreSecondTrack()
Set a flag to skip sort2.
Definition: DTTSM.h:57
const DTTracoTrigData * tracoTr() const
Return associated TRACO trigger.
Definition: DTTSCand.h:84
int element(const int pos) const
Definition: BitArray.h:206
DTTSPhi(DTTrigGeom *, DTTracoCard *)
Constructor.
Definition: DTTSPhi.cc:44
Definition: DTTSS.h:36
void print() const override
print
const_iterator begin() const
Get first cache element.
Definition: DTCache.h:38
int isInner() const
Return Inner/Outer bit.
Definition: DTTSCand.h:104
void setConfig(const DTConfigManager *conf)
Set configuration.
Definition: DTTSPhi.cc:117
void localClear()
Clear.
Definition: DTTSPhi.cc:96
int code() const
Return trigger code.
int number() const
Return identifier.
Definition: DTTSS.h:66
void addTracoT(int step, const DTTracoTrigData *tracotrig, int ifs)
Definition: DTTSPhi.cc:163
static const int NTSSTSMD
Constant: maximum number of TSS in input to a single TSMD.
Definition: DTConfigTSPhi.h:45
std::vector< DTTSS * > _tss[DTConfigTSPhi::NSTEPL-DTConfigTSPhi::NSTEPF+1]
Definition: DTTSPhi.h:115
BitArray< 8 > TsmStatus() const
TSM status.
const DTTracoTrigData * tracoTrig() const
Return associated TRACO trigger.
Definition: DTChambPhSegm.h:70
const DTConfigTSPhi * getDTConfigTSPhi(DTChamberId) const
Get desired Trigger Server Phi configuration.
tuple cout
Definition: gather_cfg.py:144
void addCand(DTTSCand *cand)
Add a TSS candidate to the TSM, ifs is first/second track flag.
Definition: DTTSM.cc:256
step
Definition: StallMonitor.cc:94
const_iterator end() const
Get last cache element.
Definition: DTCache.h:41
LocalVector localDirection(const DTTrigData *) const override
Local direction in chamber of a trigger-data object.
Definition: DTTSPhi.cc:504
bool usedTraco(int i) const
Enabled TRACOs in TS.
int isCorr() const
Return correlation bit.
Definition: DTTSCand.h:107
int size() const
Get cache vector&#39;s size.
Definition: DTCache.h:44
DTTSM * getDTTSM(int step, unsigned n) const
Definition: DTTSPhi.cc:457
LocalPoint localPosition(const DTTrigData *) const override
NEWGEO Local position in chamber of a trigger-data object.
Definition: DTTracoCard.cc:351