49 : _card(card), _geom(geom), _config(conf) {
56 cout <<
"DTBtiChip constructor called for BTI number " <<
n;
57 cout <<
" in superlayer " << supl << endl;
167 cout <<
"Position: R=" << gp.
perp() <<
"cm, Phi=" << gp.
phi() * 180 / 3.14159;
168 cout <<
" deg, Z=" << gp.
z() <<
" cm" << endl;
173 theta = atan(-(gp.
z()) / gp.
perp());
175 theta = atan((gp.
z()) / gp.
perp());
178 float fktmin =
tan(theta) * distp2 + K0;
180 float fktmax =
tan(theta) * distp2 + K0 + 1;
215 if (cell < 1 || cell > 9) {
216 cout <<
"DTBtiChip::add_digi : wrong cell number: " << cell;
217 cout <<
". Digi not added!" << endl;
226 _digis[cell - 1].push_back(digi);
230 cout <<
"DTBtiChip::add_digi: DTBtiChip # " <<
_id.
bti() <<
" cell " << cell
231 <<
" --> drift time (tdc units)= " << digi->
countsTDC() << endl;
237 cout <<
"DTBtiChip::add_digi: DTBtiChip # " <<
_id.
bti() <<
" cell " << cell
238 <<
" in dead time -> digi not added! " << endl;
243 if (cell < 1 || cell > 9) {
244 cout <<
"DTBtiChip::add_digi_clock : wrong cell number: " << cell;
245 cout <<
". Digi not added!" << endl;
256 cout <<
"DTBtiChip::add_digi_clock: DTBtiChip # " <<
number() <<
" cell " << cell <<
" --> clock time = " << digi
261 cout <<
"DTBtiChip::add_digi_clock: DTBtiChip # " <<
number() <<
" cell " << cell
262 <<
" in dead time -> digi not added! " << endl;
274 cout << n <<
" cells with hits found:" << endl;
277 for (i = 0; i < 9; i++) {
278 for (
auto const&
d : _digis[i]) {
279 cout <<
"DTBtiChip # " <<
_id.
bti() <<
" cell " << i + 1;
280 cout <<
" --> drift time (tdc units): " <<
d->countsTDC() << endl;
317 cout <<
"DTBtiChip: adding trigger..." << endl;
321 cout <<
"DTBtiChip::addTrig: step " <<
step;
322 cout <<
" outside range. Trigger not added" << endl;
329 cout <<
"DTBtiChip::nTrig: step out of range: " <<
step;
330 cout <<
" 0 returned" << endl;
338 cout <<
"DTBtiChip::trigList: step out of range: " <<
step;
339 cout <<
" empty pointer returned" << endl;
347 cout <<
"DTBtiChip::trigger: step out of range: " <<
step;
348 cout <<
" empty pointer returned" << endl;
352 cout <<
"DTBtiChip::trigger: requested trigger does not exist: " <<
n;
353 cout <<
" empty pointer returned!" << endl;
357 return (*(
p + n - 1)).get();
362 cout <<
"DTBtiChip::triggerData: step out of range: " <<
step;
363 cout <<
" dummy trigger returned" << endl;
367 cout <<
"DTBtiChip::triggerData: requested trig. doesn't exist: " <<
n;
368 cout <<
" dummy trigger returned!" << endl;
372 return (*(
p + n - 1))->data();
377 cout <<
"DTBtiChip::eraseTrigger: step out of range: " <<
step;
378 cout <<
" trigger not deleted!" << endl;
381 cout <<
"DTBtiChip::trigger: requested trigger does not exist: " <<
n;
382 cout <<
" trigger not deleted!" << endl;
390 cout <<
"DTBtiChip::clear()" << endl;
409 cout <<
"DTBtiChip::init() -> initializing bti chip" << endl;
412 for (
int i = 0;
i < 25;
i++) {
417 for (
int cell = 0; cell < 9; cell++) {
421 vector<const DTDigi*>::const_iterator
p;
426 _hits[cell].push_back(hit);
431 vector<DTBtiHit*>::const_iterator
p1;
433 cout <<
" Filling hit in cell " << cell + 1;
434 if ((*p1)->curTime() != 4000)
435 cout <<
" raw time in trigger: " << (*p1)->curTime() << endl;
436 cout <<
" time (clock units): " << (*p1)->clockTime() << endl;
446 cout <<
"DTBtiChip::init_clock() -> initializing bti chip" << endl;
451 for (
int i = 0;
i < 25;
i++) {
456 for (
int cell = 0; cell < 9; cell++) {
463 _hits[cell].push_back(hit);
468 vector<DTBtiHit*>::const_iterator
p1;
470 cout <<
" Filling hit in cell " << cell + 1;
471 if ((*p1)->curTime() != 4000)
472 cout <<
" time: " << (*p1)->curTime() << endl;
474 cout <<
" time (clock units): " << (*p1)->clockTime() << endl;
485 cout <<
"DTBtiChip::run: Processing BTI " <<
_id.
bti() << endl;
492 cout <<
"DTBtiChip::run : wrong BTI number: " <<
_id.
bti() << endl;
543 for (
int cell = 0; cell < 9; cell++) {
545 for (
auto&
h :
_hits[cell]) {
551 for (
auto&
h :
_hits[cell]) {
552 if (
h->isDrifting()) {
554 }
else if (
h->isInsideReg()) {
559 if (
h->curTime() != 4000)
560 cout <<
"DTBtiChip::tick: hit in register: time=" <<
h->curTime();
562 cout <<
"DTBtiChip::tick: hit in register! " << endl;
563 cout <<
" jtrig=" <<
h->jtrig() << endl;
590 cout <<
"Do LTS" << endl;
604 if (
trigger(is, 1)->code() == 8) {
606 for (
int js = is + 1; (js <= is + nbxlts && js <=
DTConfig::NSTEPL); js++) {
609 if (tr->
code() < 8 && (lts == 1 || lts == 3)) {
611 cout <<
"LTS: erasing trigger!" << endl;
619 if (tr->
code() < 8 && (lts == 2 || lts == 3)) {
621 cout <<
"LTS: erasing trigger!" << endl;
665 float Keq[6] = {KeqAB, KeqBC, KeqCD, KeqAC, KeqBD, KeqAD};
667 auto trg = std::make_unique<DTBtiTrig>(
this, code, K,
X, trig_step, eq, strobe, Keq);
672 const DTDigi* digi =
h->hitDigi();
690 cout <<
"DTBtiChip::store, REJECTED TRIGGER at step " <<
currentStep();
691 cout <<
" allowed K range in theta view is: [";
693 cout <<
"K value is " << K << endl;
706 ST = int(
double(
ST43) * 3. / 4. +
double(
RE43) * 1. / 4.);
707 ST2 = int((
double(
ST43) * 3. / 4. +
double(
RE43) * 1. / 4.) * 2.);
708 ST3 = int((
double(
ST43) * 3. / 4. +
double(
RE43) * 1. / 4.) * 3.);
709 ST4 = int((
double(
ST43) * 3. / 4. +
double(
RE43) * 1. / 4.) * 4.);
710 ST5 = int((
double(
ST43) * 3. / 4. +
double(
RE43) * 1. / 4.) * 5.);
711 ST7 = int((
double(
ST43) * 3. / 4. +
double(
RE43) * 1. / 4.) * 7.);
714 cout <<
"Snap register dump: " << endl;
719 cout <<
"ST = " <<
ST << endl;
720 cout <<
"ST2 = " <<
ST2 << endl;
721 cout <<
"ST3 = " <<
ST3 << endl;
722 cout <<
"ST4 = " <<
ST4 << endl;
723 cout <<
"ST5 = " <<
ST5 << endl;
724 cout <<
"ST7 = " <<
ST7 << endl;
DTBtiChip(DTBtiCard *card, DTTrigGeom *geom, int supl, int n, DTConfigBti *_config)
original constructor
int debug() const
Debug flag.
const edm::EventSetup & c
float cellPitch() const
Width of a cell (cm) i.e. distance between ywo wires.
int superlayer() const
Return superlayer.
std::array< std::vector< std::unique_ptr< DTBtiTrig > >, DTConfig::NSTEPL-DTConfig::NSTEPF+1 > _trigs
int DEADpar() const
Wire DEAD time parameter.
std::array< std::vector< const DTDigi * >, 9 > _digis
void print() const
Print content of digi.
int ST43() const
ST and RE parameters for drift velocity.
void eraseTrigger(int step, unsigned n)
int store(const int eq, const int code, const int K, const int X, float KeqAB=0., float KeqBC=0., float KeqCD=0., float KeqAC=0., float KeqBD=0., float KeqAD=0.)
int CH() const
K right limit for center traco.
Geom::Phi< T > phi() const
float ST() const
Max drift time in 12.5 ns steps.
Geom::Theta< T > theta() const
void clear()
delete hits and triggers
std::array< float, 25 > _difs
std::array< DTBtiHit *, 9 > _thisStepUsedHit
static const float _stepTimeTdc
DTBtiTrig const * trigger(int step, unsigned n) const
Return the requested trigger.
void run()
Run DTBtiChip algorithm.
int currentIntStep() const
int superlayer() const
Returns the superlayer.
DTBtiTrigData triggerData(int step, unsigned n) const
Return the data part of the requested trigger.
float cellH() const
Height of a cell (cm)
int code() const
Return trigger code.
Tan< T >::type tan(const T &t)
int nTrig(int step) const
Number of triggers found.
static const int NSTEPL
Constants: first and last step to start trigger finding.
std::array< int, 9 > _busyStart_clock
GlobalPoint CMSPosition() const
Position in CMS frame.
int KAccTheta() const
BTI angular acceptance in theta view.
std::array< std::vector< int >, 9 > _digis_clock
int number() const
Return DTBtiChip number.
int bti() const
Returns the bti.
std::array< std::vector< DTBtiHit * >, 9 > _hits
DTChamberId statId() const
Identifier of the associated chamber.
bool useAcceptParamFlag()
Return acceptance flag.
std::array< float, 25 > _sums
int nCellHit() const
Number of cells with hits.
int CL() const
K left limit for center traco.
void add_digi(int cell, const DTDigi *digi)
Add a digi to the DTBtiChip.
void addTrig(int step, std::unique_ptr< DTBtiTrig > btitrig)
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
DTConfigBti * config() const
Configuration set.
std::vector< std::unique_ptr< DTBtiTrig > > const & trigList(int step) const
int WENflag(int wire) const
Wire mask flag.
int32_t countsTDC() const
Get raw TDC count.
GlobalPoint CMSPosition(const DTBtiId obj) const
CMS position of a BTI.
int nCell(int sl) const
Number of BTIs in a required superlayer (i.e. nCells in lay 1)
void add_digi_clock(int cell, int clock_digi)
Add a clock digi to the DTBtiChip.
tuple size
Write out results.