CMS 3D CMS Logo

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