48 : _card(card), _config(conf) {
54 std::cout <<
"DTTracoChip constructor called for TRACO number " << n
112 float SL_shift = xBTI1_3 - xBTI1_1;
166 std::vector<DTTracoCand>::const_iterator
p;
175 std::vector<DTTracoTrig *>::const_iterator
p1;
212 if (
this != &traco) {
219 std::vector<DTTracoCand>::const_iterator
p;
230 std::vector<DTTracoTrig *>::const_iterator
p1;
247 std::vector<DTTracoTrig *>::iterator
p1;
270 int maxtc =
static_cast<int>(
283 std::cout <<
"\n STEP: " << is << std::endl;
284 std::cout <<
" ================" << std::endl;
297 std::cout <<
" candidates " << std::endl;
305 if (
config()->LVALIDIFH()) {
306 for (
unsigned int e = 0;
313 for (
unsigned int e = 0;
325 for (
int itk = 0; itk < 2; itk++) {
340 std::cout <<
"Best candidates for track " << itk + 1
341 <<
" are:" << std::endl;
353 if (inner ==
nullptr && outer ==
nullptr)
382 if (inner && outer) {
383 stored =
storeCorr(tct, inner, outer, itk);
404 std::cout <<
"Checking overlap I-II track..." << std::endl;
409 if (
nTrig(is - 1) > 0) {
411 (
nTrig(is - 1) == 2 &&
416 <<
"marked rej." << std::endl;
417 std::cout <<
"I track overlap flag at step " << std::hex << is
418 <<
std::dec <<
" setted" << std::endl;
427 std::cout <<
"overlap flag step = " << isd + DTConfigTraco::NSTEPF
433 for (
int cc = 1; cc <=
nTrig(is); cc++) {
451 if (prevTraco !=
nullptr) {
452 if (prevTraco->
edgeBTI(step, 1, 2))
454 if (prevTraco->
edgeBTI(step, 2, 2))
458 if (nextTraco !=
nullptr) {
459 if (nextTraco->
edgeBTI(step, 1, 1))
461 if (nextTraco->
edgeBTI(step, 2, 1))
466 for (
int i = 0;
i < 6;
i++) {
475 std::cout <<
"Flags set for bx=" << step << std::endl;
498 stable_sort(tclist.begin(), tclist.end());
500 !(tclist.size() == 2 && tclist[0].K() == tclist[1].K())) {
501 reverse(tclist.begin(), tclist.end());
503 std::cout <<
"Reversing order of sorted candidate list..." << std::endl;
516 std::cout <<
"DTTracoChip::findBest - Looking for track number " << itk + 1
518 std::cout <<
"Sorted std::vector of usable track candidates is:" 521 for (std::vector<DTTracoCand>::iterator
p = tclist.begin();
522 p < tclist.end();
p++) {
524 std::cout <<
" DTTracoChip Candidate # " << i++;
528 std::cout <<
"--------------------------------------------------" 536 std::vector<DTTracoCand>::iterator
p;
537 for (p = tclist.begin(); p < tclist.end(); ++
p) {
543 <<
" supp. because next to H in adiacent Tracos" << std::endl;
548 if ((*p).BtiTrig()->code() == 8)
550 if (bestltrig ==
nullptr)
558 std::vector<DTTracoCand> &tclist) {
564 std::vector<DTTracoCand>::iterator
p;
565 for (p = tclist.begin(); p < tclist.end(); p++) {
566 if ((*p).BtiTrig()->code() < 8 &&
573 std::cout <<
"Suppressed because adiacent to H trig" << std::endl;
607 std::cout <<
"DTTracoChip::setPV called for candidates : " << std::endl;
612 std::cout <<
"--------------------------------------------------" 620 int first = (itk == 0) ? 1 : 0;
626 if (inner !=
nullptr && outer !=
nullptr) {
651 }
else if (inner ==
nullptr && outer !=
nullptr) {
653 }
else if (inner !=
nullptr && outer ==
nullptr) {
666 int K = candidate->
K();
672 tct->
setPV(first, cod, K, ioflag);
675 std::cout <<
"Selected candidate stored for preview is: ";
685 int is = tctrig->
step();
689 std::cout <<
"DTTracoChip::storeCorr called with candidates: " << std::endl;
694 std::cout <<
"--------------------------------------------------" 719 int xq1 = inner->
X();
720 int xq2 = outer->
X();
721 xcor = (xq2 + xq1) / 2;
722 kcor = (xq1 - xq2) + 512;
727 int kd1 =
abs(kcor / 16 - kq1 / 16);
728 int kd2 =
abs(kcor / 16 - kq2 / 16);
736 <<
"*************************************************************";
750 <<
"*************************************************************";
761 tctrig->
setK(kcor - 512);
787 else if (tctrig->
qdec() == 4 &&
804 <<
"*************************************************************";
807 <<
" Correlation was successfull: ";
814 <<
"*************************************************************";
824 <<
"*************************************************************";
827 <<
" No correlation possible ";
830 <<
"*************************************************************";
843 int is = tctrig->
step();
847 std::cout <<
"DTTracoChip::storeUncorr called with candidates: " 853 std::cout <<
"--------------------------------------------------" 862 if (inner !=
nullptr && outer !=
nullptr) {
892 }
else if (inner ==
nullptr && outer !=
nullptr) {
894 }
else if (inner !=
nullptr && outer ==
nullptr) {
913 std::cout <<
"Low accepted because LVALIDIFH on...." << std::endl;
926 std::cout <<
"Single low trigger discarded by preview and " 927 <<
"priority selector for ltmsk!" << std::endl;
937 if (candidate == outer &&
config()->TcReuse(0) && inner)
941 if (
config()->TcBxLts()) {
948 std::cout <<
"Low trigger suppressed because H in next 4 bx " 949 <<
" and LTS flag on...." << std::endl;
968 if (candidate == outer &&
config()->TcReuse(0) && inner)
980 tctrig->
setX(candidate->
X());
1015 std::cout <<
"L rejected because outside angular window!" << std::endl;
1024 <<
"*************************************************************";
1027 <<
" Single trigger stored: ";
1034 <<
"*************************************************************";
1045 std::cout <<
"DTTracoChip::add_btiT: wrong position: " << pos;
1046 std::cout <<
"trigger not added!" << std::endl;
1050 std::cout <<
"DTTracoChip::add_btiT: step out of range: " <<
step;
1051 std::cout <<
"trigger not added!" << std::endl;
1055 if (!
config()->usedBti(pos)) {
1057 std::cout <<
"DTTracoChip::add_btiT: position: " << pos;
1058 std::cout <<
"has disconnected bti" << std::endl;
1070 std::cout <<
"In TRACO num. " <<
number() <<
" BTI trig. in pos " << pos
1071 <<
" outside K acceptance (";
1080 if (pos <= DTConfigTraco::NBTITC) {
1089 if (btitrig->
code() == 8) {
1090 for (
int is = step - 4; is <
step; is++) {
1091 if (is > 0 && is <= DTConfigTraco::NSTEPL)
1113 std::cout <<
"DTTracoChip::addTrig: step out of range: " <<
step;
1114 std::cout <<
" trigger not added!" << std::endl;
1122 std::cout <<
"DTTracoChip::addTrig: adding trigger:" << std::endl;
1130 std::cout <<
"DTTracoChip::nTrig: step out of range: " <<
step;
1131 std::cout <<
" 0 returned!" << std::endl;
1139 std::cout <<
"DTTracoChip::trigger: step out of range: " <<
step;
1140 std::cout <<
" empty pointer returned!" << std::endl;
1144 std::cout <<
"DTTracoChip::trigger: requested trigger doesn't exist: " <<
n;
1145 std::cout <<
" empty pointer returned!" << std::endl;
1148 std::vector<DTTracoTrig *>::const_iterator
p =
1155 std::cout <<
"DTTracoChip::triggerData: step out of range: " <<
step;
1156 std::cout <<
" dummy trigger returned!" << std::endl;
1160 std::cout <<
"DTTracoChip::trigger: requested trigger doesn't exist: " <<
n;
1161 std::cout <<
" dummy trigger returned!" << std::endl;
1164 std::vector<DTTracoTrig *>::const_iterator
p =
1166 return (*p)->data();
1205 std::cout <<
"DTTracoChip::useSecondTrack: step out of range: " <<
step;
1206 std::cout <<
" 0 returned!" << std::endl;
1214 std::cout <<
"DTTracoChip::edgeBTI: step out of range: " <<
step;
1215 std::cout <<
" 0 returned!" << std::endl;
1222 std::vector<DTTracoCand>::const_iterator
p;
1228 if (lr == 1 && (*p).position() == 1 && (*p).BtiTrig()->code() == 8)
1231 (*p).BtiTrig()->code() == 8)
1245 (*p).BtiTrig()->code() == 8)
1248 (*p).BtiTrig()->code() == 8)
1304 if (qual == 3 || qual == 1)
1306 if (qual == 2 || qual == 0)
1308 if (qual == 6 || qual == 5 || qual == 4)
1313 idpsir = ipsi - iphir / 8;
1356 idpsir = ipsi - dpsir;
1366 std::cout <<
"DTTracoChip::calculateAngles :" << std::endl;
1369 std::cout <<
" ipsi = " << ipsi <<
" iphir = " << iphir;
1370 std::cout <<
" idpsir = " << idpsir << std::endl;
1372 std::cout <<
"Angles are calculated from LUT parameters from DB!" 1387 int bendAngINT = bendAng.
read(0, 9);
1390 if (
config()->BendingAngleCut() != -1 &&
1391 bendAngINT > 2 * (
config()->BendingAngleCut())) {
1392 int absBendAng = tctrig->
DeltaPsiR() & 0x1FF;
1394 std::cout <<
"Attention: abs(bendAng)=" << absBendAng <<
" > " 1417 float Xin_max = Xin_min + K0;
1419 float Xout_max = 3 * DTConfig::NBTITC * K0;
1420 _PSIMAX[
i] =
int(2. * h / distsl * (Xin_max - Xout_min) + K0 + 1.01);
1421 _PSIMIN[
i] =
int(2. * h / distsl * (Xin_min - Xout_max) + K0);
1427 float Xin_max = 2. * DTConfig::NBTITC * K0 + shiftSL;
1428 float Xout_min = i * K0;
1429 float Xout_max = Xout_min + K0;
1431 int(2. * h / distsl * (Xin_max - Xout_min) + K0 + 1.01);
1433 int(2. * h / distsl * (Xin_min - Xout_max) + K0);
1440 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.
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.
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
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.
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)
std::vector< DTTracoTrig * > _tracotrig[DTConfigTraco::NSTEPL-DTConfigTraco::NSTEPF+1]
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
BitArray< DTConfigTraco::NSTEPL+2 > _bxlts
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.