48 _card(card), _config(conf) {
54 std::cout <<
"DTTracoChip constructor called for TRACO number " << n << std::endl;
101 float SL_shift = xBTI1_3 - xBTI1_1;
158 std::vector<DTTracoCand>::const_iterator
p;
167 std::vector<DTTracoTrig*>::const_iterator
p1;
213 std::vector<DTTracoCand>::const_iterator
p;
222 std::vector<DTTracoTrig*>::const_iterator
p1;
239 std::vector<DTTracoTrig*>::iterator
p1;
267 std::cout <<
"DTTracoChip::run: wrong TRACO number " <<
_id.
traco() << std::endl;
274 std::cout <<
"\n STEP: " << is << std::endl;
275 std::cout <<
" ================" << std::endl;
287 std::cout <<
" candidates " << std::endl;
295 if(
config()->LVALIDIFH()){
313 for(
int itk=0; itk < 2; itk++){
326 std::cout<<
"Best candidates for track " << itk+1 <<
" are:"<<std::endl;
338 if(inner==
nullptr&&outer==
nullptr)
386 std::cout<<
"Checking overlap I-II track..." <<std::endl;
394 std::cout <<
"II track at step " << std::hex << is-1 <<
std::dec <<
"marked rej."<< std::endl;
395 std::cout <<
"I track overlap flag at step " << std::hex << is <<
std::dec <<
" setted" << std::endl;
403 std::cout <<
"overlap flag step = " << isd+DTConfigTraco::NSTEPF <<
409 for(
int cc=1;cc<=
nTrig(is);cc++){
431 if(prevTraco!=
nullptr){
432 if(prevTraco->
edgeBTI(step,1,2))
434 if(prevTraco->
edgeBTI(step,2,2))
438 if(nextTraco!=
nullptr){
439 if(nextTraco->
edgeBTI(step,1,1))
441 if(nextTraco->
edgeBTI(step,2,1))
447 for(
int i=0;
i<6;
i++){
456 std::cout <<
"Flags set for bx=" << step << std::endl;
474 if(tclist.empty())
return nullptr;
479 stable_sort( tclist.begin(),tclist.end() );
481 !(tclist.size()==2 && tclist[0].K()==tclist[1].K()) ) {
482 reverse( tclist.begin(),tclist.end() );
484 std::cout <<
"Reversing order of sorted candidate list..." << std::endl;
497 std::cout <<
"DTTracoChip::findBest - Looking for track number " << itk+1 << std::endl ;
498 std::cout <<
"Sorted std::vector of usable track candidates is:" << std::endl;
500 for(std::vector<DTTracoCand>::iterator
p=tclist.begin();
p<tclist.end();
p++){
502 std::cout <<
" DTTracoChip Candidate # " << i++;
506 std::cout <<
"--------------------------------------------------" << std::endl;
513 std::vector<DTTracoCand>::iterator
p;
514 for ( p = tclist.begin(); p < tclist.end(); ++
p ) {
519 std::cout <<
"Candidate # " << i <<
" supp. because next to H in adiacent Tracos" << std::endl;
523 if( (*p).BtiTrig()->code()==8 )
return &(*p);
524 if( bestltrig==
nullptr ) bestltrig=&(*p);
537 std::vector<DTTracoCand>::iterator
p;
538 for(p=tclist.begin();p<tclist.end();p++){
539 if( (*p).BtiTrig()->code()<8 &&
540 abs( (*p).BtiTrig()->btiNumber() -
546 std::cout <<
"Suppressed because adiacent to H trig" <<std::endl;
560 candidate->
position()==1 )
return 1;
577 std::cout <<
"DTTracoChip::setPV called for candidates : " << std::endl;
578 if(inner)inner->
print();
579 if(outer)outer->
print();
580 std::cout <<
"--------------------------------------------------" << std::endl;
587 int first = (itk==0) ? 1 : 0;
593 if(inner!=
nullptr&&outer!=
nullptr) {
618 }
else if(inner==
nullptr&&outer!=
nullptr) {
620 }
else if(inner!=
nullptr&&outer==
nullptr) {
632 int K=candidate->
K();
638 tct->
setPV(first, cod, K, ioflag);
641 std::cout <<
"Selected candidate stored for preview is: ";
651 int is = tctrig->
step();
655 std::cout <<
"DTTracoChip::storeCorr called with candidates: " << std::endl;
656 if(inner)inner->
print();
657 if(outer)outer->
print();
658 std::cout <<
"--------------------------------------------------" << std::endl;
681 int xq1 = inner->
X();
682 int xq2 = outer->
X();
684 kcor = (xq1-xq2)+512;
689 int kd1 =
abs(kcor/16-kq1/16);
690 int kd2 =
abs(kcor/16-kq2/16);
698 std::cout <<
"*************************************************************";
711 std::cout <<
"*************************************************************";
722 tctrig->
setK(kcor - 512);
748 else if( tctrig->
qdec()==4 &&
764 std::cout <<
"*************************************************************";
766 std::cout <<
" Correlation was successfull: ";
772 std::cout <<
"*************************************************************";
781 std::cout <<
"*************************************************************";
783 std::cout <<
" No correlation possible ";
785 std::cout <<
"*************************************************************";
799 int is = tctrig->
step();
803 std::cout <<
"DTTracoChip::storeUncorr called with candidates: " << std::endl;
804 if(inner)inner->
print();
805 if(outer)outer->
print();
806 std::cout <<
"--------------------------------------------------" << std::endl;
814 if(inner!=
nullptr&&outer!=
nullptr) {
844 }
else if(inner==
nullptr&&outer!=
nullptr) {
846 }
else if(inner!=
nullptr&&outer==
nullptr) {
864 std::cout <<
"Low accepted because LVALIDIFH on...." << std::endl;
877 std::cout <<
"Single low trigger discarded by preview and " 878 <<
"priority selector for ltmsk!" <<std::endl;
887 if(candidate==outer &&
config()->TcReuse(0) && inner)
897 std::cout <<
"Low trigger suppressed because H in next 4 bx "<<
898 " and LTS flag on...." << std::endl;
917 if(candidate==outer &&
config()->TcReuse(0) && inner)
929 tctrig->
setX( candidate->
X() );
964 std::cout <<
"L rejected because outside angular window!" << std::endl;
972 std::cout <<
"*************************************************************";
980 std::cout <<
"*************************************************************";
993 std::cout <<
"DTTracoChip::add_btiT: wrong position: " << pos;
994 std::cout <<
"trigger not added!" << std::endl;
998 std::cout <<
"DTTracoChip::add_btiT: step out of range: " <<
step;
999 std::cout <<
"trigger not added!" << std::endl;
1003 if(!
config()->usedBti(pos)) {
1005 std::cout <<
"DTTracoChip::add_btiT: position: " << pos;
1006 std::cout <<
"has disconnected bti" << std::endl;
1018 std::cout <<
"In TRACO num. " <<
number() <<
" BTI trig. in pos " << pos <<
" outside K acceptance (";
1027 if(pos<=DTConfigTraco::NBTITC){
1036 if(btitrig->
code()==8){
1037 for(
int is=step-4;is<
step;is++){
1038 if(is>0&&is<=DTConfigTraco::NSTEPL)
_bxlts.
set(is);
1051 std::cout <<
" to TRACO " <<
_id.
traco() <<
" at position " << pos << std::endl;
1061 std::cout <<
"DTTracoChip::addTrig: step out of range: " <<
step;
1062 std::cout <<
" trigger not added!" << std::endl;
1070 std::cout <<
"DTTracoChip::addTrig: adding trigger:"<< std::endl;
1080 std::cout <<
"DTTracoChip::nTrig: step out of range: " <<
step;
1081 std::cout <<
" 0 returned!" << std::endl;
1090 std::cout <<
"DTTracoChip::trigger: step out of range: " <<
step;
1091 std::cout <<
" empty pointer returned!" << std::endl;
1095 std::cout <<
"DTTracoChip::trigger: requested trigger doesn't exist: " <<
n;
1096 std::cout <<
" empty pointer returned!" << std::endl;
1099 std::vector<DTTracoTrig*>::const_iterator
p =
1107 std::cout <<
"DTTracoChip::triggerData: step out of range: " <<
step;
1108 std::cout <<
" dummy trigger returned!" << std::endl;
1112 std::cout <<
"DTTracoChip::trigger: requested trigger doesn't exist: " <<
n;
1113 std::cout <<
" dummy trigger returned!" << std::endl;
1116 std::vector<DTTracoTrig*>::const_iterator
p =
1118 return (*p)->data();
1161 std::cout <<
"DTTracoChip::useSecondTrack: step out of range: " <<
step;
1162 std::cout <<
" 0 returned!" << std::endl;
1171 std::cout <<
"DTTracoChip::edgeBTI: step out of range: " <<
step;
1172 std::cout <<
" 0 returned!" << std::endl;
1179 std::vector<DTTracoCand>::const_iterator
p;
1185 if(lr==1 && (*p).position()==1 && (*p).BtiTrig()->code()==8 )
1259 if(qual==3 || qual==1)
1261 if(qual==2 || qual==0)
1263 if(qual==6 || qual==5 || qual==4)
1268 idpsir = ipsi - iphir/8;
1313 idpsir = ipsi-dpsir;
1323 std::cout <<
"DTTracoChip::calculateAngles :" << std::endl;
1326 std::cout <<
" ipsi = " << ipsi <<
" iphir = " << iphir;
1327 std::cout <<
" idpsir = " << idpsir << std::endl;
1329 std::cout <<
"Angles are calculated from LUT parameters from DB!" << std::endl;
1345 int bendAngINT = bendAng.
read(0,9);
1348 if(
config()->BendingAngleCut()!= -1 &&
1349 bendAngINT > 2*(
config()->BendingAngleCut())) {
1350 int absBendAng = tctrig->
DeltaPsiR() & 0x1FF;
1352 std::cout <<
"Attention: abs(bendAng)=" << absBendAng <<
" > " 1377 float Xin_max = Xin_min + K0;
1379 float Xout_max = 3 * DTConfig::NBTITC * K0;
1380 _PSIMAX[
i] =
int( 2.*h/distsl * (Xin_max - Xout_min) + K0 + 1.01 );
1381 _PSIMIN[
i] =
int( 2.*h/distsl * (Xin_min - Xout_max) + K0 );
1387 float Xin_max = 2. * DTConfig::NBTITC * K0 + shiftSL;
1388 float Xout_min = i * K0;
1389 float Xout_max = Xout_min + K0;
1390 _PSIMAX[DTConfig::NBTITC+
i] =
int( 2.*h/distsl * (Xin_max - Xout_min) + K0 + 1.01 );
1391 _PSIMIN[DTConfig::NBTITC+
i] =
int( 2.*h/distsl * (Xin_min - Xout_max) + K0 );
1399 std::cout <<
"Acceptance of mt ports for offset (cell unit) " void setPosIn(int pos)
Set position of segments, inner.
int _PSIMAX[4 *DTConfig::NBTITC]
DTTSTheta * TSTh() const
Return TSTheta.
GlobalPoint CMSPosition() const
Position in CMS frame.
std::vector< DTTracoTrig * > _tracotrig[DTConfigTraco::NSTEPL-DTConfigTraco::NSTEPF+1]
void print() const override
Print.
GlobalPoint CMSPosition(const DTTrigData *trig) const
CMS position in chamber of a trigger-data object.
DTTrigGeom * geom() const
Associated geometry.
DTTracoTrigData data() const
Return the data part.
DTConfigTraco * config() const
Configuration set.
void run()
Run TRACO algorithm.
DTTrigGeom * geom() const
Return trigger geometry.
int nHTrig(int step)
Return number of DTBtiChip fired with a HTRIG (used by DTTracoChip)
float phiCh() const
Rotation angle of chamber (deg)
int insideAngWindow(DTTracoTrig *) const
Check if a trigger is inside the angular acceptance window.
float cellPitch() const
Width of a cell (cm) i.e. distance between ywo wires.
int AdjBtiLTSuppressed(DTTracoCand *candidate)
Do suppression of LTRIG on adjacent TRACO.
int eq() const
Return triggering equation.
void setX(int x)
Set trigger X parameter.
void setK(int k)
Set trigger K parameter.
void calculateAngles(DTTracoTrig *)
Calculate trigger angles.
void setFlag(int step, int ext=0)
Set flags for multiple trigger detection between cons. TRACO's.
void addTrig(int step, DTTracoTrig *)
Add a TRACO trigger.
void setTracoAcceptances()
Compute traco chip acceptances.
int BTIC() const
BTIC parameter.
void resetVar()
Reset all variables but preview.
Geom::Phi< T > phi() const
int KRAD() const
KRAD traco parameter.
int prefHtrig(int i) const
Preference to HTRIG on first/second tracks: F(S)HTPRF.
int KRad() const
K par of the radial angle of corr center referred to plane sl.
int K() const
Return K-KRAD.
int LVALIDIFH() const
Flag for Low validation parameter.
int get_k(int addr) const
bool lutFromDBFlag()
Return lut computation option (DB/geometry)
int get_x(int addr) const
int singleLenab(int i) const
Single LTRIG accept enabling on first/second tracks LTF.
void add_btiT(int step, int pos, const DTBtiTrigData *btitrig)
Add a BTI trigger to the TRACO.
DTTracoChip * getTRACO(int n) const
Returns the required DTTracoChip. Return 0 if it doesn't exist.
void setCodeIn(int code)
Set trigger code, inner segment.
void setPosOut(int pos)
Set position of segments, outer.
~DTTracoChip()
Destructor.
int traco() const
Returns the traco.
int BTIC() const
BTIC traco parameter: must be equal to Btis ST parameter.
DTTracoCand * bestCand(int itk, std::vector< DTTracoCand > &tclist)
Get the best inner/outer candidate.
int step() const
Return step.
int step() const
Return Bunch crossing.
float distSL() const
Distance between the phi view superlayers (cms)
void setCodeOut(int code)
Set trigger code, outer segment.
float cellH() const
Height of a cell (cm)
int BendingAngleCut() const
Bending angle cut for all stations and triggers : KPRGCOM.
Abs< T >::type abs(const T &t)
void raiseOverlap(int step)
raise overlap flag
int number() const
Return TRACO number.
unsigned read(const int p, const int n) const
void print() const override
Print.
std::vector< DTTracoCand > _outerCand[DTConfigTraco::NSTEPL-DTConfigTraco::NSTEPF+1]
int storeUncorr(DTTracoTrig *tctrig, DTTracoCand *inner, DTTracoCand *outer, int tkn)
Store uncorrelated trigger.
void setEqOut(int eq)
Set bti trigger equation of segments, outer.
const DTBtiTrigData * BtiTrig() const
Return associated BTI trigger.
std::vector< DTTracoCand > _innerCand[DTConfigTraco::NSTEPL-DTConfigTraco::NSTEPF+1]
static const int NSTEPL
Constants: first and last step to start trigger finding.
DTTracoTrig * trigger(int step, unsigned n) const
Return the requested trigger.
int btiNumber() const
Return parent BTI number.
void addDTBtiTrig(const DTBtiTrigData *btitrig)
Add a BTI trigger to the list.
void setAngles(int psi, int psir, int dpsir)
Set trigger angles.
int TcBxLts() const
Suppr. of LTRIG in 4 BX before HTRIG: LTS.
DTTracoChip(DTTracoCard *card, int n, DTConfigTraco *config)
Constructor.
int edgeBTI(int step, int io, int lr) const
flags for HTRIG in edge BTI
BitArray< 32 > _flag[DTConfigTraco::NSTEPL-DTConfigTraco::NSTEPF+1]
DTTracoChip & operator=(const DTTracoChip &traco)
Assignment operator.
static const int RESOLPSIR
Costant: resulution for psiR (phi)
int TcKToll(int i) const
K tollerance for correlation in TRACO: F(S)PRGCOMP.
int prefInner(int i) const
Preference to inner on first/second tracks: F(S)SLMSK.
float phiSLOffset()
Superlayer offset in chamber front-end frame, in cm.
DTChamberId statId() const
Identifier of the associated chamber.
int qdec() const
Return the trigger code in new format.
int element(const int pos) const
int btiSL() const
Return parent BTI superlayer.
BitArray< DTConfigTraco::NSTEPL+2 > _bxlts
bool useAcceptParamFlag()
Return acceptance flag.
void DoAdjBtiLts(DTTracoCand *candidate, std::vector< DTTracoCand > &tclist)
Do suppression of LTRIG on BTI close to selected HTRIG.
BitArray< N > twoComplement() const
int K() const
Return trigger K parameter.
void assign(const int p, const int n, const int val)
int storeCorr(DTTracoTrig *tctrig, DTTracoCand *inner, DTTracoCand *outer, int tkn)
Check correlation and store correlated trigger.
void setPVCorr(int ic)
Set trigger preview correlation bit.
DTTracoTrigData triggerData(int step, unsigned n) const
Return the data part of the requested trigger.
int qdec() const
Return the trigger code in new format.
LocalPoint localPosition(const DTBtiId) const
Local position in chamber of a BTI.
void setUsed()
set candidate used (unusable)
int X() const
Return trigger X parameter.
const DTConfigLUTs * config_luts() const
Return LUTS config for this chamber (=minicrate)
void setEqIn(int eq)
Set bti trigger equation of segments, inner.
int singleLflag(int i) const
Single LTRIG enabling on first/second tracks: F(S)LTMSK.
int _PSIMIN[4 *DTConfig::NBTITC]
static unsigned int const shift
int useSecondTrack(int step) const
a flag for a usable second track
void setUnused()
set candidate unused (usable)
int station() const
Return the station number.
void setPV(int first, int code, int K, int io)
Set trigger preview parameters.
float psiRad(int sl=0) const
Radial angle of correlator center in mrad referred to plane sl.
int TcReuse(int i) const
Recycling of TRACO cand. in inner/outer SL : REUSEI/REUSEO.
int wheel() const
Return the wheel number.
static const int RESOLPSI
Costants: esolution for psi and DeltaPsiR (phi_B)
int X() const
Return local X coordinate.
int debug() const
Debug flag.
int position() const
Return position inside TRACO.
int sortKascend(int i) const
Ascend. order for K sorting first/second tracks: F(S)HISM.
void setPV(int step, int ntrk, int code, int K)
Set the preview values for a TRACO trigger.
int code() const
Return trigger code.
int K() const
Return trigger K parameter.
DTChamberId ChamberId() const override
Return chamber identifier.
int DeltaPsiR() const
Return DeltaPsiR.
void print() const
Print candidate.
int nTrig(int step) const
Return the number of trigger candidates.
int nTrig(int step)
Return number of DTBtiChip fired (used by DTTracoChip)
LocalVector localDirection(const DTTrigData *) const override
NEWGEO Local direction in chamber of a trigger-data object.
int code() const
Return trigger code.