#include <DTBtiChip.h>
Public Member Functions | |
void | add_digi (int cell, const DTDigi *digi) |
Add a digi to the DTBtiChip. | |
void | add_digi_clock (int cell, int clock_digi) |
Add a clock digi to the DTBtiChip. | |
void | addTrig (int step, DTBtiTrig *btitrig) |
void | clear () |
delete hits and triggers | |
GlobalPoint | CMSPosition () const |
Position in CMS frame. | |
DTConfigBti * | config () const |
Configuration set. | |
DTBtiChip (DTBtiCard *card, DTTrigGeom *geom, int supl, int n, DTConfigBti *_config) | |
original constructor | |
DTBtiChip (const DTBtiChip &bti) | |
Copy constructor. | |
DTTrigGeom * | geom () const |
Return trigger geometry. | |
std::vector< const DTDigi * > | get_CellDigis (int cell) |
get digi vector - SV 28/XI/02 | |
DTBtiId | id () const |
Return the DTBtiChip Id. | |
void | init_clock () |
LocalPoint | localPosition () const |
Position in chamber frame (x is the one of first traco in slave plane) | |
int | nCellHit () const |
Number of cells with hits. | |
int | nTrig (int step) const |
Number of triggers found. | |
int | number () const |
Return DTBtiChip number. | |
DTBtiChip & | operator= (const DTBtiChip &bti) |
Assignment operator. | |
void | run () |
Run DTBtiChip algorithm. | |
int | sector () const |
Return sector number. | |
int | station () const |
Return station number. | |
int | superlayer () const |
Return superlayer. | |
DTBtiTrig * | trigger (int step, unsigned n) const |
Return the requested trigger. | |
DTBtiTrigData | triggerData (int step, unsigned n) const |
Return the data part of the requested trigger. | |
std::vector< DTBtiTrig * > | trigList (int step) const |
int | wheel () const |
Return wheel number. | |
~DTBtiChip () | |
Destructor. | |
Private Member Functions | |
void | acceptMask (BitArray< 80 > *BitArrPtr, int k, int accep) |
void | computeEqs () |
void | computeSums () |
int | currentIntStep () const |
int | currentStep () const |
void | doLTS () |
void | eraseTrigger (int step, unsigned n) |
void | findTrig () |
void | init () |
int | keepTrig (const int eq, const int acp, const int code) |
int | keepTrigPatt (int flag, const int eq, const int pattType, int hlflag) |
bool | matchEq (float eqA, float eqB, int AC) |
int | reSum (int a, int b) |
int | reSum23 (int a, int b) |
void | reSumSet () |
void | setSnap () |
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.) |
void | sum (const int s, const int a, const int b) |
void | tick () |
Private Attributes | |
int | _busyStart_clock [9] |
DTBtiCard * | _card |
DTConfigBti * | _config |
int | _curStep |
float | _difs [25] |
std::vector< const DTDigi * > | _digis [9] |
std::vector< int > | _digis_clock [9] |
DTTrigGeom * | _geom |
std::vector< DTBtiHit * > | _hits [9] |
DTBtiId | _id |
float | _JTR [32][3] |
float | _Keq [32][6] |
float | _KTR [32][2] |
int | _MaxKAcc |
int | _MaxKcenterTraco |
int | _MaxKleftTraco |
int | _MaxKrightTraco |
int | _MinKAcc |
int | _MinKcenterTraco |
int | _MinKleftTraco |
int | _MinKrightTraco |
int | _nStepUsedHits |
float | _sums [25] |
DTBtiHit * | _thisStepUsedHit [9] |
int | _thisStepUsedTimes [9] |
std::vector< DTBtiTrig * > | _trigs [DTConfig::NSTEPL-DTConfig::NSTEPF+1] |
float | _Xeq [32][2] |
float | _XeqAB_patt0 |
float | _XeqAC_patt0 |
float | _XeqBD_patt0 |
float | _XeqCD_patt0 |
int | init_done |
int | RE23 |
int | RE43 |
int | reSumAr [3][5] |
int | reSumAr23 [3][5] |
int | ST |
int | ST2 |
int | ST23 |
int | ST3 |
int | ST4 |
int | ST43 |
int | ST5 |
int | ST7 |
Implementation of DTBtiChip trigger algorithm Internally uses DTBtiHit to store muon digis
Definition at line 48 of file DTBtiChip.h.
DTBtiChip::DTBtiChip | ( | DTBtiCard * | card, |
DTTrigGeom * | geom, | ||
int | supl, | ||
int | n, | ||
DTConfigBti * | _config | ||
) |
original constructor
new constructor with configuration
Definition at line 48 of file DTBtiChip.cc.
References _busyStart_clock, _card, _digis, _geom, _hits, _id, _MaxKAcc, _MinKAcc, _trigs, DTTrigGeom::cellH(), DTTrigGeom::cellPitch(), DTConfigBti::CH(), DTConfigBti::CL(), CMSPosition(), DTTrigGeom::CMSPosition(), config(), gather_cfg::cout, DTConfigBti::DEADpar(), debug, i, init_done, DTConfigBti::KAccTheta(), n, DTConfig::NSTEPF, DTConfig::NSTEPL, PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::phi(), reSumSet(), setSnap(), evf::utils::sid, DTConfigBti::ST(), DTTrigGeom::statId(), DTBtiId::superlayer(), funct::tan(), theta(), DTBtiCard::useAcceptParamFlag(), and PV3DBase< T, PVType, FrameType >::z().
: _card(card), _geom(geom), _config(conf) { // original constructor setSnap(); reSumSet(); // Debugging... if(config()->debug()>2){ cout << "DTBtiChip constructor called for BTI number " << n; cout << " in superlayer " << supl << endl; } // reserve the appropriate amount of space for vectors int i=0; for(i=0;i<DTConfig::NSTEPL - DTConfig::NSTEPF;i++) { _trigs[i].reserve(2); } for(i=0;i<9;i++) { _digis[i].reserve(10); _hits[i].reserve(10); } //SV wire dead time init int DEAD = config()->DEADpar(); for(int cell=1; cell<=9; cell++){ _busyStart_clock[cell-1] = - DEAD -1; } // Identifier DTChamberId sid = _geom->statId(); _id = DTBtiId(sid, supl, n); //if(config()->trigSetupGeom() == 0){ // set K acceptance in theta view for this BTI: 6 bit resolution.... _MinKAcc = 0; _MaxKAcc = 63; /* DTBtiId _id1 = DTBtiId(sid,supl,1); cout <<"superlayer" << _id.superlayer()<< "BTI1 " << _id1.bti() << " BTICur " << _id.bti()<< endl; cout <<endl; GlobalPoint gp1 = _geom->CMSPosition(_id1); cout << "pos of BTI "<< _id1.bti() << gp1 <<endl; // K of tracks from vertex GlobalPoint gp = CMSPosition(); cout << "pos of BTI" << _id.bti() << gp <<endl; cout << endl ; */ // // theta bti acceptance cut is in bti chip (no traco in theta!) // // acceptance from orca geom: bti theta angle in CMS frame +-2 in K units // if(_id.superlayer()==2){ // float distp2 = (int)(2*_geom->cellH()*config()->ST()/_geom->cellPitch()); // float K0 = config()->ST(); // /* DTBtiId _id1 = DTBtiId(sid,supl,1); // cout << "BTI1 " << _id1.bti() << endl; // cout << "BTICur " << _id.bti() <<endl; // GlobalPoint gp1 = _geom->CMSPosition(_id1); // cout << "pos of BTI 1 " << gp1 <<endl;*/ // // K of tracks from vertex // GlobalPoint gp = CMSPosition(); // if(config()->debug()>3){ // cout << "Position: R=" << gp.perp() << "cm, Phi=" << gp.phi()*180/3.14159; // cout << " deg, Z=" << gp.z() << " cm" << endl; // } // // CB TEST WITH NEW GEOMETRY // // new geometry: modified wrt old due to specularity of theta SLs (still to understand on wheel zero) 19/06/06 // float theta; // if (_id.wheel()==0){ // if(_id.sector()%4>1) theta = atan( gp.z()/gp.perp() ); // else theta = atan( -gp.z()/gp.perp() ); // } // else theta = atan( fabs(gp.z())/gp.perp() ); // // .11 =TAN(6.3 deg) ==> k=2 (e' ancora vero? forse questa parte va aggiornata sena ripassare per gli angoli) 19/6/06 // float thetamin = theta-config()->KAccTheta()*0.055; // float thetamax = theta+config()->KAccTheta()*0.055; // float fktmin = tan(thetamin)*distp2 + K0; // int ktmin = (fktmin>0) ? (int)(fktmin+0.5) : (int)(fktmin-0.5); // float fktmax = tan(thetamax)*distp2 + K0; // int ktmax = (fktmax>0) ? (int)(fktmax+0.5) : (int)(fktmax-0.5); // // float fkbti = -gp.z()/gp.perp()*distp2; // // int kbti = (fkbti>0) ? (int)(fkbti+0.5) : (int)(fkbti-0.5); // // // K acceptance to point to vertex // // int ktmin = kbti-config()->KAccTheta(); // minimum // // int ktmax = kbti+config()->KAccTheta(); // maximum // if(ktmin>_MinKAcc)_MinKAcc=ktmin; // if(ktmax<_MaxKAcc)_MaxKAcc=ktmax; // } // // debugging // if(config()->debug()>2){ // cout << "CMS position:" << CMSPosition() << endl; // cout << "K acceptance:" << _MinKAcc << "," << _MaxKAcc << endl; // } // // end debugging // theta bti acceptance cut is in bti chip (no traco in theta!) // acceptance is determined about BTI angle wrt vertex with programmable value if(_id.superlayer()==2){ // 091105 SV theta bti trigger angular acceptance in CMSSW is computed from geometry // (theta of the bti) +- a given tolerance config()->KAccTheta(): tolerance NOT in // hardware configuration. The hw tolerance is given in the system and the // overall acceptance is computed "before" data (CH,CL) is given to the MC // or written in the DB. No way to "extract" the tolerance from DB yet. if(_card->useAcceptParamFlag()==0){ //float distp2 = (int)(2*_geom->cellH()*config()->ST()/_geom->cellPitch()); SV fix 17/III/07 float distp2 = 2*_geom->cellH()*config()->ST()/_geom->cellPitch(); float K0 = config()->ST(); // position of BTI 1 and of current one DTBtiId _id1 = DTBtiId(sid,supl,1); GlobalPoint gp1 = _geom->CMSPosition(_id1); GlobalPoint gp = CMSPosition(); if(config()->debug()>3){ cout << "Position: R=" << gp.perp() << "cm, Phi=" << gp.phi()*180/3.14159; cout << " deg, Z=" << gp.z() << " cm" << endl; } // new geometry: modified wrt old due to specularity of theta SLs --> fixed 6/9/06 float theta; if(gp1.z() < 0.0) theta = atan( -(gp.z())/gp.perp() ); else theta = atan( (gp.z())/gp.perp() ); // set BTI acceptance window : fixed wrt ORCA on 6/9/06 float fktmin = tan(theta)*distp2+K0 ; int ktmin = static_cast<int>(fktmin)-config()->KAccTheta(); float fktmax = tan(theta)*distp2+K0+1; int ktmax = static_cast<int>(fktmax)+config()->KAccTheta(); if(ktmin>_MinKAcc) _MinKAcc=ktmin; if(ktmax<_MaxKAcc) _MaxKAcc=ktmax; } // 091105 SV acceptance is taken simply from CH, CL parameters else { _MinKAcc = config()->CL(); _MaxKAcc = config()->CH(); } // debugging if(config()->debug()>2){ cout << "CMS position:" << CMSPosition() << endl; cout << "K acceptance (theta view):" << _MinKAcc << "," << _MaxKAcc << endl; }// end debugging }//end theta acceptance computation //}// end if trigSetupGeom=0 //SV flag for initialization.... init_done = 0; }
DTBtiChip::DTBtiChip | ( | const DTBtiChip & | bti | ) |
Copy constructor.
Definition at line 212 of file DTBtiChip.cc.
References _difs, _digis, _hits, _JTR, _Keq, _KTR, _MaxKAcc, _MinKAcc, _sums, _thisStepUsedHit, _thisStepUsedTimes, _trigs, _Xeq, i, j, DTConfig::NSTEPF, DTConfig::NSTEPL, AlCaHLTBitMon_ParallelJobs::p, p1, reSumSet(), and setSnap().
: _geom(bti._geom), _id(bti._id), _curStep(bti._curStep), _nStepUsedHits(bti._nStepUsedHits){ setSnap(); reSumSet(); int i=0; for(i=0;i<DTConfig::NSTEPL - DTConfig::NSTEPF;i++) { _trigs[i].reserve(2); vector<DTBtiTrig*>::const_iterator p; for(p=bti._trigs[i].begin();p<bti._trigs[i].end();p++){ _trigs[i].push_back(*p); } } for(i=0;i<9;i++) { _digis[i].reserve(10); vector<const DTDigi*>::const_iterator p; for(p=bti._digis[i].begin();p<bti._digis[i].end();p++){ _digis[i].push_back(*p); } _hits[i].reserve(10); vector<DTBtiHit*>::const_iterator p1; for(p1=bti._hits[i].begin();p1<bti._hits[i].end();p1++){ _hits[i].push_back(*p1); } _thisStepUsedTimes[i] = bti._thisStepUsedTimes[i]; _thisStepUsedHit[i] = _thisStepUsedHit[i]; } for(i=0;i<25;i++){ _sums[i] = bti._sums[i]; _difs[i] = bti._difs[i]; } for(i=0;i<26;i++){ int j = 0; for(j=0;j<6;j++){ _Keq[i][j] = bti._Keq[i][j]; } for(j=0;j<3;j++){ _JTR[i][j] = bti._JTR[i][j]; } for(j=0;j<2;j++){ _Xeq[i][j] = bti._Xeq[i][j]; _KTR[i][j] = bti._KTR[i][j]; } } _MinKAcc = bti._MinKAcc; _MaxKAcc = bti._MaxKAcc; }
DTBtiChip::~DTBtiChip | ( | ) |
void DTBtiChip::acceptMask | ( | BitArray< 80 > * | BitArrPtr, |
int | k, | ||
int | accep | ||
) | [private] |
Definition at line 678 of file DTBtiChipSelTrig.cc.
References HDQMDatabaseProducer::config, gather_cfg::cout, debug, and BitArray< N >::set().
{ if(k>=0&&k<78){ if(config()->debug()>4) cout<<"DTBtiChip::acceptMask -> Setting acceptance for k="<<k<<endl; if(accep==0){ //code 00 if(k>=1) BitArrPtr->set(k-1); BitArrPtr->set(k); BitArrPtr->set(k+1); } if(accep==1){ //code 01 BitArrPtr->set(k); BitArrPtr->set(k+1); BitArrPtr->set(k+2); } if(accep==2){ //code 10 if(k>1) BitArrPtr->set(k-2); if(k>=1) BitArrPtr->set(k-1); BitArrPtr->set(k); } if(accep==3){ //code 11 if(k>1) BitArrPtr->set(k-2); if(k>=1) BitArrPtr->set(k-1); BitArrPtr->set(k); BitArrPtr->set(k+1); BitArrPtr->set(k+2); } } if(config()->debug()>4) cout<<"DTBtiChip::acceptMask -> END "<<endl; }
void DTBtiChip::add_digi | ( | int | cell, |
const DTDigi * | digi | ||
) |
Add a digi to the DTBtiChip.
Definition at line 327 of file DTBtiChip.cc.
References _busyStart_clock, _digis, _geom, _id, DTBtiHit::_stepTimeTdc, DTBtiId::bti(), config(), DTDigi::countsTDC(), gather_cfg::cout, DTConfigBti::DEADpar(), debug, DTTrigGeom::nCell(), DTDigi::print(), and superlayer().
Referenced by DTBtiCard::loadBTI().
{ if(_id.bti()<1 || _id.bti() >_geom->nCell(superlayer()))return; if(cell<1 || cell>9){ cout << "DTBtiChip::add_digi : wrong cell number: " << cell; cout << ". Digi not added!" << endl; return; } int DEAD = config()->DEADpar(); float stepTimeTdc = DTBtiHit::_stepTimeTdc; if( int(digi->countsTDC()/stepTimeTdc) - _busyStart_clock[cell-1] > DEAD ){ _busyStart_clock[cell-1] = int(digi->countsTDC()/stepTimeTdc); _digis[cell-1].push_back(digi); // debugging if(config()->debug()>1){ cout << "DTBtiChip::add_digi: DTBtiChip # " <<_id.bti() << " cell " << cell << " --> drift time (tdc units)= " << digi->countsTDC()<< endl; digi->print(); } } else { // debugging if(config()->debug()>1) cout << "DTBtiChip::add_digi: DTBtiChip # " <<_id.bti() << " cell " << cell << " in dead time -> digi not added! " << endl; } }
void DTBtiChip::add_digi_clock | ( | int | cell, |
int | clock_digi | ||
) |
Add a clock digi to the DTBtiChip.
Definition at line 362 of file DTBtiChip.cc.
References _busyStart_clock, _digis_clock, config(), gather_cfg::cout, DTConfigBti::DEADpar(), debug, and number().
{ if(cell<1 || cell>9){ cout << "DTBtiChip::add_digi_clock : wrong cell number: " << cell; cout << ". Digi not added!" << endl; return; } int DEAD = config()->DEADpar(); if( digi - _busyStart_clock[cell-1] > DEAD ){ _busyStart_clock[cell-1] = digi; _digis_clock[cell-1].push_back(digi); // debugging if(config()->debug()>1) cout << "DTBtiChip::add_digi_clock: DTBtiChip # " <<number() << " cell " << cell << " --> clock time = " << digi << endl; } else{ // debugging if(config()->debug()>1) cout << "DTBtiChip::add_digi_clock: DTBtiChip # " << number() << " cell " << cell << " in dead time -> digi not added! " << endl; } }
void DTBtiChip::addTrig | ( | int | step, |
DTBtiTrig * | btitrig | ||
) |
Add a DTBtiChip trigger (normally used by DTBtiChip itself - may be used for debugging by other classes)
Definition at line 441 of file DTBtiChip.cc.
References _trigs, config(), gather_cfg::cout, debug, DTConfig::NSTEPF, DTConfig::NSTEPL, and relval_parameters_module::step.
Referenced by store(), and DTBtiCard::storeTrigger().
{ if(step>=DTConfig::NSTEPF&&step<=DTConfig::NSTEPL){ if(config()->debug()>3) cout << "DTBtiChip: adding trigger..." <<endl; _trigs[step-DTConfig::NSTEPF].push_back(btitrig); } else { if(config()->debug()>3){ cout << "DTBtiChip::addTrig: step " << step ; cout << " outside range. Trigger not added" << endl; } } }
void DTBtiChip::clear | ( | void | ) |
delete hits and triggers
Definition at line 522 of file DTBtiChip.cc.
References _digis, _digis_clock, _hits, _trigs, begin, trackerHits::c, config(), gather_cfg::cout, debug, DTConfig::NSTEPF, DTConfig::NSTEPL, AlCaHLTBitMon_ParallelJobs::p, and p1.
Referenced by ~DTBtiChip().
{ if(config()->debug()>3) cout << "DTBtiChip::clear()" << endl; for(int c=0;c<9;c++) { _digis[c].clear(); _digis_clock[c].clear(); vector<DTBtiHit*>::iterator p; for(p=_hits[c].begin();p<_hits[c].end();p++){ delete (*p); } _hits[c].clear(); } vector<DTBtiTrig*>::iterator p1; for(int is=0;is<DTConfig::NSTEPL-DTConfig::NSTEPF+1;is++){ for(p1=_trigs[is].begin();p1<_trigs[is].end();p1++){ delete (*p1); } _trigs[is].clear(); } }
GlobalPoint DTBtiChip::CMSPosition | ( | ) | const [inline] |
Position in CMS frame.
Definition at line 98 of file DTBtiChip.h.
References _geom, _id, and DTTrigGeom::CMSPosition().
Referenced by DTBtiChip().
{ return _geom->CMSPosition(_id); }
void DTBtiChip::computeEqs | ( | ) | [private] |
Definition at line 145 of file DTBtiChipEquations.cc.
References begin, HDQMDatabaseProducer::config, gather_cfg::cout, i, j, and findQualityFiles::size.
Referenced by run().
{ // // Compute all K and X equations of DTBtiChip algorithm // NB now Keq=Kman float K0 = config()->ST(); //cout <<"K0="<<K0<<endl; //enabled patterns.... int PTMS[32]; for(int i=0; i<32; i++){ PTMS[i] = config()->PTMSflag(i); } int i; // redundant patterns added by Sara Vanini i=0; // 1324A --> 1L3L2R4L if(PTMS[i] ){ _Keq[i][0] = _difs[1] + 2.*K0; //eq. AB _Keq[i][1] = -_sums[5] + 2.*K0; //eq. BC _Keq[i][2] = _sums[6]; //eq. CD _Keq[i][3] = -(_sums[0]/2.) + 2.*K0 + 0.01; //eq. AC _Keq[i][4] = (_difs[8]/2.) + K0 + 0.01 ; //eq. BD //_Keq[i][5] = (_difs[2]/3.) + 4.*K0/3. + 0.51; //eq. AD _Keq[i][5] = ST43 + reSum( RE43 , int(fmod(double(_difs[2]),3.)) ) + int( (double(_difs[2])/3.) ); //eq. AD //patt 0 always uses Xbc, because Xad could be negative... //when wire B is missing, TshiftB=0 //when hit B is gone out of shift register, Tshift=K0+1 float _difs_p0 = _difs[5]; float TshiftB = 0; float TshiftC = 0; if(_thisStepUsedHit[3-1]==0){ if(_hits[3-1].size()==0 ) TshiftB = 0; if(_hits[3-1].size()>0 && (*(_hits[3-1].begin()))->clockTime()<=-K0 ) TshiftB = K0+1; } else TshiftB = _thisStepUsedHit[3-1]->jtrig(); if(_thisStepUsedHit[2-1]==0){ if(_hits[2-1].size()==0 ) TshiftC = 0; if(_hits[2-1].size()>0 && (*(_hits[2-1].begin()))->clockTime()<=-K0 ) TshiftC = K0+1; } else TshiftC = _thisStepUsedHit[2-1]->jtrig(); _difs_p0 = (float)(TshiftB - TshiftC); // Zotto's _XeqAB_patt0 = (_sums[1] - K0) / 4.; //eq. AB _Xeq[i][0] = (_difs_p0 + K0) / 4.; //eq. BC _XeqCD_patt0 = (_difs[6] + K0) / 4.; //eq. CD _XeqAC_patt0 = -(_difs[0]) / 4.; //eq. AC _XeqBD_patt0 = (_sums[8]) / 4.; //eq. BD _Xeq[i][1] = (_sums[2] - K0) / 4.; //eq. AD /* // my eq _XeqAB_patt0 = (_sums[1] - K0) / 4.; //eq. AB _Xeq[i][0] = (_difs[5] + K0) / 4.; //eq. BC _XeqCD_patt0 = (_difs[6] + K0) / 4.; //eq. CD _XeqAC_patt0 = -(_difs[0]) / 4.; //eq. AC _XeqBD_patt0 = (_sums[8]) / 4.; //eq. BD _Xeq[i][1] = (_sums[2] - K0) / 4.; //eq. AD */ } i=1; // 1324B --> 1L3L2R4R if(PTMS[i] ){ _Keq[i][0] = _difs[1] + 2.*K0; _Keq[i][1] = -(_sums[5]) + 2.*K0; _Keq[i][2] = -_difs[6] + 2.*K0; _Keq[i][3] = -(_sums[0]/2.) + 2.*K0 + 0.01; _Keq[i][4] = -(_sums[8]/2.) + 2.*K0 + 0.01; //_Keq[i][5] = -(_sums[2]/3.) + 2.*K0 + 0.51; _Keq[i][5] = ST2 + reSum23( 0 , int(fmod(double(-_sums[2]),3.)) ) + int( (double(-_sums[2])/3.) ); _Xeq[i][0] = ( _difs[5] + K0) / 4.; _Xeq[i][1] = (-_difs[2] + K0) / 4.; } i=2; // 1324C --> 1R3L2R4L if(PTMS[i] ){ _Keq[i][0] = _sums[1]; _Keq[i][1] = -_sums[5] + 2.*K0; _Keq[i][2] = _sums[6]; _Keq[i][3] = -(_difs[0]/2.) + K0 + 0.01; _Keq[i][4] = (_difs[8]/2.) + K0 + 0.01; //_Keq[i][5] = (_sums[2]/3.) + 2.*K0/3. + 0.51; _Keq[i][5] = ST23 + reSum23( RE23 , int(fmod(double(_sums[2]),3.)) ) + int( (double(_sums[2])/3.) ); //eq. AD /* cout << "ST23 =" << ST23 << endl; cout << "RE23 =" << RE23 << endl; cout << "fmod(double(_sums[2]),3.) =" << fmod(double(_sums[2]),3.) << endl; cout << "reSum23 = "<< reSum23( RE23 , fmod(double(_sums[2]),3.) ) << endl; cout << "double(_sums[2])/3.="<<double(_sums[2])/3.<< endl; cout << "int('') = " << int( (double(_sums[2])/3.) ) << endl; */ _Xeq[i][0] = (_difs[5] + K0) / 4.; _Xeq[i][1] = (_difs[2] + K0) / 4.; } i=3; // 1324D --> 1R3L2R4R if(PTMS[i] ){ _Keq[i][0] = _sums[1]; _Keq[i][1] = -_sums[5] + 2.*K0; _Keq[i][2] = -_difs[6] + 2.*K0; _Keq[i][3] = -(_difs[0]/2.) + K0 + 0.01; _Keq[i][4] = -(_sums[8]/2.) + 2.*K0 + 0.01; //_Keq[i][5] = -(_difs[2]/3.) + 4.*K0/3.; _Keq[i][5] = ST43 + reSum( RE43 , int(fmod(double(-_difs[2]),3.)) ) + int( (double(-_difs[2])/3.) ); //eq. AD _Xeq[i][0] = ( _difs[5] + K0) / 4.; _Xeq[i][1] = (-_sums[2] + 3.*K0) / 4.; } i=4; // i = DTBtiChipEQMAP->index("1364A"); --> 1L3L6L4R if(PTMS[i] ){ _Keq[i][0] = _difs[1] + 2.*K0; _Keq[i][1] = _difs[10] + 2.*K0; _Keq[i][2] = -(_sums[13]) + 2.*K0; _Keq[i][3] = (_difs[3]/2.) + 2.*K0 + 0.01; _Keq[i][4] = -(_sums[8]/2.) + 2.*K0 + 0.01; //_Keq[i][5] = -(_sums[2]/3.) + 2.*K0 + 0.51; _Keq[i][5] = ST2 + reSum23( 0 , int(fmod(double(-_sums[2]),3.)) ) + int( (double(-_sums[2])/3.) ); _Xeq[i][0] = ( _sums[10] + K0) / 4.; _Xeq[i][1] = (-_difs[2] + K0) / 4.; } i=5; // i = DTBtiChipEQMAP->index("1364B"); --> 1R3L6L4R if(PTMS[i] ){ _Keq[i][0] = _sums[1]; _Keq[i][1] = _difs[10] + 2.*K0; _Keq[i][2] = -_sums[13] + 2.*K0; _Keq[i][3] = (_sums[3]/2.) + K0 + 0.01; _Keq[i][4] = -(_sums[8]/2.) + 2.*K0 + 0.01; //_Keq[i][5] = -(_difs[2]/3.) + 4.*K0/3.; _Keq[i][5] = ST43 + reSum( RE43 , int(fmod(double(-_difs[2]),3.)) ) + int( (double(-_difs[2])/3.) ); //eq. AD _Xeq[i][0] = ( _sums[10]+ K0) / 4.; _Xeq[i][1] = (-_sums[2] + 3.*K0) / 4.; } i=6; // i = DTBtiChipEQMAP->index("1364C"); --> 1R3R6L4R if(PTMS[i] ){ _Keq[i][0] = -_difs[1] + 2.*K0; _Keq[i][1] = _sums[10]; _Keq[i][2] = -_sums[13] + 2.*K0; _Keq[i][3] = (_sums[3]/2.) + K0 + 0.01; _Keq[i][4] = -(_difs[8]/2.) + K0 + 0.01; //_Keq[i][5] = -(_difs[2]/3.) + 4.*K0/3.; _Keq[i][5] = ST43 + reSum( RE43 , int(fmod(double(-_difs[2]),3.)) ) + int( (double(-_difs[2])/3.) ); //eq. AD _Xeq[i][0] = ( _difs[10]+ 3.*K0) / 4.; _Xeq[i][1] = (-_sums[2] + 3.*K0) / 4.; } i=7; // i = DTBtiChipEQMAP->index("1368A"); --> 1R3R6L8L if(PTMS[i] ){ _Keq[i][0] = -_difs[1] + 2.*K0; _Keq[i][1] = (_sums[10]); _Keq[i][2] = _difs[20] + 2.*K0; _Keq[i][3] = (_sums[3]/2.) + K0 + 0.01; _Keq[i][4] = (_sums[11]/2.) + K0 + 0.01; //_Keq[i][5] = (_sums[4]/3.) + 4.*K0/3. + 0.51; _Keq[i][5] = ST43 + reSum( RE43 , int(fmod(double(_sums[4]),3.)) ) + int( (double(_sums[4])/3.) ); //eq. AD _Xeq[i][0] = (_difs[10]+ 3.*K0) / 4.; _Xeq[i][1] = (_difs[4] + 3.*K0) / 4.; } i=8; // i = DTBtiChipEQMAP->index("1368B"); --> 1R3R6R8L if(PTMS[i] ){ _Keq[i][0] = -_difs[1] + 2.*K0; _Keq[i][1] = -_difs[10] + 2.*K0; _Keq[i][2] = (_sums[20]); _Keq[i][3] = -(_difs[3]/2.) + 2.*K0 + 0.01; _Keq[i][4] = (_sums[11]/2.) + K0 + 0.01; //_Keq[i][5] = (_sums[4]/3.) + 4.*K0/3.; _Keq[i][5] = ST43 + reSum( RE43 , int(fmod(double(_sums[4]),3.)) ) + int( (double(_sums[4])/3.) ); //eq. AD _Xeq[i][0] = (-_sums[10]+ 5.*K0) / 4.; _Xeq[i][1] = ( _difs[4] + 3.*K0) / 4.; } i=9; // i = DTBtiChipEQMAP->index("1368C"); --> 1R3L6L8L if(PTMS[i] ){ _Keq[i][0] = (_sums[1]); _Keq[i][1] = _difs[10] + 2.*K0; _Keq[i][2] = _difs[20] + 2.*K0; _Keq[i][3] = (_sums[3]/2.) + K0 + 0.01; _Keq[i][4] = (_difs[11]/2.) + 2.*K0 + 0.01; //_Keq[i][5] = (_sums[4]/3.) + 4.*K0/3.; _Keq[i][5] = ST43 + reSum( RE43 , int(fmod(double(_sums[4]),3.)) ) + int( (double(_sums[4])/3.) ); //eq. AD _Xeq[i][0] = (_sums[10]+ K0) / 4.; _Xeq[i][1] = (_difs[4] + 3.*K0) / 4.; } i=10; // i = DTBtiChipEQMAP->index("5324A"); --> 5L3L2R4L if(PTMS[i] ){ _Keq[i][0] = -_difs[9]; _Keq[i][1] = -_sums[5] + 2.*K0; _Keq[i][2] = _sums[6]; _Keq[i][3] = -(_sums[7]/2.) + K0 + 0.01; _Keq[i][4] = (_difs[8]/2.) + K0 + 0.01; //_Keq[i][5] = -(_difs[12]/3.) + 2.*K0/3.; _Keq[i][5] = ST23 + reSum23( RE23 , int(fmod(double(-_difs[12]),3.)) ) + int( (double(-_difs[12])/3.) ); //eq. AD _Xeq[i][0] = (_difs[5] + K0) / 4.; _Xeq[i][1] = (_sums[12]+ K0) / 4.; } i=11; // i = DTBtiChipEQMAP->index("5324B"); --> 5L3R2R4L if(PTMS[i] ){ _Keq[i][0] = -_sums[9] + 2.*K0; _Keq[i][1] = _difs[5]; _Keq[i][2] = _sums[6]; _Keq[i][3] = -(_sums[7]/2.) + K0 + 0.01; _Keq[i][4] = (_sums[8]/2. + 0.01); //_Keq[i][5] = -(_difs[12]/3.) + 2.*K0/3.; _Keq[i][5] = ST23 + reSum23( RE23 , int(fmod(double(-_difs[12]),3.)) ) + int( (double(-_difs[12])/3.) ); //eq. AD _Xeq[i][0] = (-_sums[5] + 3.*K0) / 4.; _Xeq[i][1] = ( _sums[12]+ K0) / 4.; } i=12; // i = DTBtiChipEQMAP->index("5324C"); --> 5R3R2R4L if(PTMS[i] ){ _Keq[i][0] = _difs[9]; _Keq[i][1] = _difs[5]; _Keq[i][2] = (_sums[6]); _Keq[i][3] = (_difs[7]/2.) + 0.01; _Keq[i][4] = (_sums[8]/2.) + 0.01; _Keq[i][5] = (_sums[12]/3.) + 0.51; _Xeq[i][0] = (-_sums[5] + 3. * K0) / 4.; _Xeq[i][1] = (-_difs[12]+ 3. * K0) / 4.; } i=13; // i = DTBtiChipEQMAP->index("5364A"); --> 5L3R6L4L if(PTMS[i] ){ _Keq[i][0] = -_sums[9] + 2.*K0; _Keq[i][1] = _sums[10]; _Keq[i][2] = -_difs[13]; _Keq[i][3] = (_difs[16]/2.) + K0 + 0.01; _Keq[i][4] = (_sums[8]/2. + 0.01); //_Keq[i][5] = -(_difs[12]/3.) + 2.*K0/3.; _Keq[i][5] = ST23 + reSum23( RE23 , int(fmod(double(-_difs[12]),3.)) ) + int( (double(-_difs[12])/3.) ); //eq. AD _Xeq[i][0] = (_difs[10]+ 3.*K0) / 4.; _Xeq[i][1] = (_sums[12]+ K0) / 4.; } i=14; // i = DTBtiChipEQMAP->index("5364B"); --> 5L3R6L4R if(PTMS[i] ){ _Keq[i][0] = -_sums[9] + 2.*K0; _Keq[i][1] = _sums[10]; _Keq[i][2] = -_sums[13] + 2.*K0; _Keq[i][3] = (_difs[16]/2.) + K0 + 0.01; _Keq[i][4] = -(_difs[8]/2.) + K0 + 0.01; //_Keq[i][5] = -(_sums[12]/3.) + 4.*K0/3.; _Keq[i][5] = ST43 + reSum( RE43 , int(fmod(double(-_sums[12]),3.)) ) + int( (double(-_sums[12])/3.) ); _Xeq[i][0] = (_difs[10]+ 3.*K0) / 4.; _Xeq[i][1] = (_difs[12]+ 3.*K0) / 4.; } i=15; // i = DTBtiChipEQMAP->index("5364C"); --> 5R3R6L4L if(PTMS[i] ){ _Keq[i][0] = _difs[9]; _Keq[i][1] = (_sums[10]); _Keq[i][2] = -_difs[13]; _Keq[i][3] = (_sums[16]/2. + 0.01); _Keq[i][4] = (_sums[8]/2. + 0.01); _Keq[i][5] = (_sums[12]/3.) + 0.51; _Xeq[i][0] = ( _difs[10]+ 3.*K0) / 4.; _Xeq[i][1] = (-_difs[12]+ 3.*K0) / 4.; } i=16; // i = DTBtiChipEQMAP->index("5364D"); --> 5R3R6L4R if(PTMS[i] ){ _Keq[i][0] = _difs[9]; _Keq[i][1] = _sums[10]; _Keq[i][2] = -_sums[13] + 2.*K0; _Keq[i][3] = (_sums[16]/2. + 0.01); _Keq[i][4] = -(_difs[8]/2.) + K0 + 0.01; //_Keq[i][5] = (_difs[12]/3.) + 2.*K0/3.; _Keq[i][5] = ST23 + reSum23( RE23 , int(fmod(double(_difs[12]),3.)) ) + int( (double(_difs[12])/3.) ); //eq. AD _Xeq[i][0] = ( _difs[10]+ 3.*K0) / 4.; _Xeq[i][1] = (-_sums[12]+ 5.*K0) / 4.; } i=17; // i = DTBtiChipEQMAP->index("5368A"); --> 5L3R6L8L if(PTMS[i] ){ _Keq[i][0] = -_sums[9] + 2.*K0; _Keq[i][1] = _sums[10]; _Keq[i][2] = _difs[20] + 2.*K0; _Keq[i][3] = (_difs[16]/2.) + K0 + 0.01; _Keq[i][4] = (_sums[11]/2.) + K0 + 0.01; //_Keq[i][5] = (_difs[18]/3.) + 4.*K0/3.; _Keq[i][5] = ST43 + reSum( RE43 , int(fmod(double(_difs[18]),3.)) ) + int( (double(_difs[18])/3.) ); //eq. AD _Xeq[i][0] = (_difs[10]+ 3.*K0) / 4.; _Xeq[i][1] = (_sums[18]+ 3.*K0) / 4.; } i=18; // i = DTBtiChipEQMAP->index("5368B"); --> 5L3R6R8L if(PTMS[i] ){ _Keq[i][0] = -_sums[9] + 2.*K0; _Keq[i][1] = -_difs[10] + 2.*K0; _Keq[i][2] = _sums[20]; _Keq[i][3] = -(_sums[16]/2.) + 2.*K0 + 0.01; _Keq[i][4] = (_sums[11]/2.) + K0 + 0.01; //_Keq[i][5] = (_difs[18]/3.) + 4.*K0/3.; _Keq[i][5] = ST43 + reSum( RE43 , int(fmod(double(_difs[18]),3.)) ) + int( (double(_difs[18])/3.) ); //eq. AD _Xeq[i][0] = (-_sums[10]+ 5.*K0) / 4.; _Xeq[i][1] = ( _sums[18]+ 3.*K0) / 4.; } i=19; // i = DTBtiChipEQMAP->index("5368C"); --> 5L3R6R8R if(PTMS[i] ){ _Keq[i][0] = -(_sums[9]) + 2.*K0; _Keq[i][1] = -_difs[10] + 2.*K0; _Keq[i][2] = -_difs[20] + 2.*K0; _Keq[i][3] = -(_sums[16]/2.) + 2.*K0 + 0.01; _Keq[i][4] = -(_difs[11]/2.) + 2.*K0 + 0.01; //_Keq[i][5] = -(_sums[18]/3.) + 2.*K0 + 0.51; _Keq[i][5] = ST2 + reSum23( 0 , int(fmod(double(-_sums[18]),3.)) ) + int( (double(-_sums[18])/3.) ); _Xeq[i][0] = (-_sums[10]+ 5.*K0) / 4.; _Xeq[i][1] = (-_difs[18]+ 5.*K0) / 4.; } i=20; // i = DTBtiChipEQMAP->index("5764A"); --> 5R7L6L4R if(PTMS[i] ){ _Keq[i][0] = _sums[17]; _Keq[i][1] = -_difs[19]; _Keq[i][2] = -_sums[13] + 2.*K0; _Keq[i][3] = (_sums[16]/2. + 0.01); _Keq[i][4] = -(_sums[14]/2.) + K0 + 0.01; //_Keq[i][5] = (_difs[12]/3.) + 2.*K0/3.; _Keq[i][5] = ST23 + reSum23( RE23 , int(fmod(double(_difs[12]),3.)) ) + int( (double(_difs[12])/3.) ); //eq. AD _Xeq[i][0] = ( _sums[19]+ 3.*K0) / 4.; _Xeq[i][1] = (-_sums[12]+ 5.*K0) / 4.; } i=21; // i = DTBtiChipEQMAP->index("5764B"); --> 5R7L6R4R if(PTMS[i] ){ _Keq[i][0] = _sums[17]; _Keq[i][1] = -_sums[19] + 2.*K0; _Keq[i][2] = _difs[13]; _Keq[i][3] = -(_difs[16]/2.) + K0 + 0.01; _Keq[i][4] = -(_sums[14]/2.) + K0 + 0.01; //_Keq[i][5] = (_difs[12]/3.) + 2.*K0/3.; _Keq[i][5] = ST23 + reSum23( RE23 , int(fmod(double(_difs[12]),3.)) ) + int( (double(_difs[12])/3.) ); //eq. AD _Xeq[i][0] = ( _difs[19]+ 5.*K0) / 4.; _Xeq[i][1] = (-_sums[12]+ 5.*K0) / 4.; } i=22; // i = DTBtiChipEQMAP->index("5764C"); --> 5R7L6L4L if(PTMS[i] ){ _Keq[i][0] = (_sums[17]); _Keq[i][1] = -_difs[19]; _Keq[i][2] = -_difs[13]; _Keq[i][3] = (_sums[16]/2. + 0.01); _Keq[i][4] = -(_difs[14]/2.) + 0.01; _Keq[i][5] = (_sums[12]/3.) + 0.51; _Xeq[i][0] = ( _sums[19]+ 3.*K0) / 4.; _Xeq[i][1] = (-_difs[12]+ 3.*K0) / 4.; } i=23; // i = DTBtiChipEQMAP->index("9764A"); --> 9L7L6L4R if(PTMS[i] ){ _Keq[i][0] = -_difs[23]; _Keq[i][1] = -_difs[19]; _Keq[i][2] = -(_sums[13]) + 2.*K0; _Keq[i][3] = -(_difs[21]/2.) + 0.01; _Keq[i][4] = -(_sums[14]/2.) + K0 + 0.01; //_Keq[i][5] = -(_sums[15]/3.) + 2.*K0/3.; _Keq[i][5] = ST23 + reSum23( RE23 , int(fmod(double(-_sums[15]),3.)) ) + int( (double(-_sums[15])/3.) ); //eq. AD _Xeq[i][0] = (_sums[19]+ 3.*K0) / 4.; _Xeq[i][1] = (_difs[15]+ 5.*K0) / 4.; } i=24; // i = DTBtiChipEQMAP->index("9764B"); --> 9L7L6R4R if(PTMS[i] ){ _Keq[i][0] = -_difs[23]; _Keq[i][1] = -(_sums[19]) + 2.*K0; _Keq[i][2] = _difs[13]; _Keq[i][3] = -(_sums[21]/2.) + K0 + 0.01; _Keq[i][4] = -(_sums[14]/2.) + K0 + 0.01; //_Keq[i][5] = -(_sums[15]/3.) + 2.*K0/3.; _Keq[i][5] = ST23 + reSum23( RE23 , int(fmod(double(-_sums[15]),3.)) ) + int( (double(-_sums[15])/3.) ); //eq. AD _Xeq[i][0] = (_difs[19]+ 5.*K0) / 4.; _Xeq[i][1] = (_difs[15]+ 5.*K0) / 4.; } i=25; // i = DTBtiChipEQMAP->index("9764C"); --> 9L7R6R4R if(PTMS[i] ){ _Keq[i][0] = -(_sums[23]) + 2.*K0; _Keq[i][1] = _difs[19]; _Keq[i][2] = _difs[13]; _Keq[i][3] = -(_sums[21]/2.) + K0 + 0.01; _Keq[i][4] = (_difs[14]/2.) + 0.01; //_Keq[i][5] = -(_sums[15]/3.) + 2.*K0/3.; _Keq[i][5] = ST23 + reSum23( RE23 , int(fmod(double(-_sums[15]),3.)) ) + int( (double(-_sums[15])/3.) ); //eq. AD _Xeq[i][0] = (-_sums[19]+ 7.*K0) / 4.; _Xeq[i][1] = ( _difs[15]+ 5.*K0) / 4.; } i=26; // int i = DTBtiChipEQMAP->index("5768A") --> 5L7L6R8L if(PTMS[i] ){ _Keq[i][0] = _difs[17] + 2.*K0; _Keq[i][1] = -_sums[19] + 2.*K0; _Keq[i][2] = _sums[20]; _Keq[i][3] = -(_sums[16]/2.) + 2.*K0 + 0.01; _Keq[i][4] = (_difs[22]/2.) + K0 + 0.01; //_Keq[i][5] = (_difs[18]/3.) + 4.*K0/3.; _Keq[i][5] = ST43 + reSum( RE43 , int(fmod(double(_difs[18]),3.)) ) + int( (double(_difs[18])/3.) ); //eq. AD _Xeq[i][0] = (_difs[19] + 5.*K0) / 4.; _Xeq[i][1] = (_sums[18] + 3.*K0) / 4.; } i=27; // i = DTBtiChipEQMAP->index("5768B"); --> 5L7L6R8R if(PTMS[i] ){ _Keq[i][0] = _difs[17] + 2.*K0; _Keq[i][1] = -(_sums[19]) + 2.*K0; _Keq[i][2] = -_difs[20] + 2.*K0; _Keq[i][3] = -(_sums[16]/2.) + 2.*K0 + 0.01; _Keq[i][4] = -(_sums[22]/2.) + 2.*K0 + 0.01; //_Keq[i][5] = -(_sums[18]/3.) + 2.*K0 + 0.51; _Keq[i][5] = ST2 + reSum23( 0 , int(fmod(double(-_sums[18]),3.)) ) + int( (double(-_sums[18])/3.) ); _Xeq[i][0] = ( _difs[19] + 5.*K0) / 4.; _Xeq[i][1] = (-_difs[18] + 5.*K0) / 4.; } i=28; // i = DTBtiChipEQMAP->index("5768C"); --> 5R7L6R8L if(PTMS[i] ){ _Keq[i][0] = _sums[17]; _Keq[i][1] = -_sums[19] + 2.*K0; _Keq[i][2] = _sums[20]; _Keq[i][3] = -(_difs[16]/2.) + K0 + 0.01; _Keq[i][4] = (_difs[22]/2.) + K0 + 0.01; //_Keq[i][5] = (_sums[18]/3.) + 2.*K0/3.; _Keq[i][5] = ST23 + reSum23( RE23 , int(fmod(double(_sums[18]),3.)) ) + int( (double(_sums[18])/3.) ); //eq. AD _Xeq[i][0] = (_difs[19] + 5.*K0) / 4.; _Xeq[i][1] = (_difs[18] + 5.*K0) / 4.; } i=29; // i = DTBtiChipEQMAP->index("5768D"); --> 5R7L6R8R if(PTMS[i] ){ _Keq[i][0] = _sums[17]; _Keq[i][1] = -_sums[19] + 2.*K0; _Keq[i][2] = -_difs[20] + 2.*K0; _Keq[i][3] = -(_difs[16]/2.) + K0 + 0.01; _Keq[i][4] = -(_sums[22]/2.) + 2.*K0 + 0.01; //_Keq[i][5] = -(_difs[18]/3.) + 4.*K0/3. ; _Keq[i][5] = ST43 + reSum( RE43 , int(fmod(double(-_difs[18]),3.)) ) + int( (double(-_difs[18])/3.) ); //eq. AD _Xeq[i][0] = ( _difs[19] + 5.*K0) / 4.; _Xeq[i][1] = (-_sums[18] + 7.*K0) / 4.; } i=30; // 9768A --> 9L7L6R8L if(PTMS[i] ){ _Keq[i][0] = -_difs[23]; _Keq[i][1] = -_sums[19] + 2.*K0; _Keq[i][2] = _sums[20]; _Keq[i][3] = -(_sums[21]/2.) + K0 + 0.01; _Keq[i][4] = (_difs[22]/2.) + K0 + 0.01; //_Keq[i][5] = -(_difs[24]/3.) + 2.*K0/3. ; _Keq[i][5] = ST23 + reSum23( RE23 , int(fmod(double(-_difs[24]),3.)) ) + int( (double(-_difs[24])/3.) ); //eq. AD _Xeq[i][0] = (_difs[19] + 5.*K0) / 4.; _Xeq[i][1] = (_sums[24] + 5.*K0) / 4.; } i=31; // 9768B --> 9L7R6R8L if(PTMS[i] ){ _Keq[i][0] = -_sums[23] + 2.*K0; _Keq[i][1] = _difs[19]; _Keq[i][2] = _sums[20]; _Keq[i][3] = -(_sums[21]/2.) + K0 + 0.01; _Keq[i][4] = (_sums[22]/2.) + 0.01; //_Keq[i][5] = -(_difs[24]/3.) + 2.*K0/3.; _Keq[i][5] = ST23 + reSum23( RE23 , int(fmod(double(-_difs[24]),3.)) ) + int( (double(-_difs[24])/3.) ); //eq. AD _Xeq[i][0] = (-_sums[19] + 7.*K0) / 4.; _Xeq[i][1] = ( _sums[24] + 5.*K0) / 4.; } // debugging if(config()->debug()>3){ cout << endl << " Step: " << currentStep() << endl; for(i=0;i<32;i++){ if(PTMS[i] ){ cout << "K Equation " << i << " --> "; int j=0; for(j=0;j<6;j++){ cout << _Keq[i][j] << " "; } cout << endl; cout << "X Equation " << i << " --> "; for(j=0;j<2;j++){ cout << _Xeq[i][j] << " "; } if( i==0 ){ cout << _XeqAB_patt0 << " " << _XeqCD_patt0 << " "; cout << _XeqAC_patt0 << " " << _XeqBD_patt0 << " "; } cout << endl; } } } // end debugging }
void DTBtiChip::computeSums | ( | ) | [private] |
Definition at line 39 of file DTBtiChipEquations.cc.
References HDQMDatabaseProducer::config, gather_cfg::cout, and debug.
Referenced by run().
{ // // compute all sums and diffs // nothing more than a table... // numbering convention here is the same as the fortran version: // sum number in the range [1,25] // cell numbers in the range [1,9] // --> sum(int,int,int) decreases the indices by 1 // sum (sum_number, first_cell, second_cell) // if(config()->debug()>3){ cout << "DTBtiChip::computeSums called" << endl; } sum( 1,2,1); sum( 2,3,1); sum( 3,4,1); sum( 4,6,1); sum( 5,8,1); sum( 6,3,2); sum( 7,4,2); sum( 8,5,2); sum( 9,4,3); sum(10,5,3); sum(11,6,3); sum(12,8,3); sum(13,5,4); sum(14,6,4); sum(15,7,4); sum(16,9,4); sum(17,6,5); sum(18,7,5); sum(19,8,5); sum(20,7,6); sum(21,8,6); sum(22,9,6); sum(23,8,7); sum(24,9,7); sum(25,9,8); }
DTConfigBti* DTBtiChip::config | ( | void | ) | const [inline] |
Configuration set.
testing DTConfigBti
Definition at line 119 of file DTBtiChip.h.
References _config.
Referenced by add_digi(), add_digi_clock(), addTrig(), clear(), doLTS(), DTBtiChip(), init(), init_clock(), nCellHit(), run(), setSnap(), store(), and tick().
{ return _config; }
int DTBtiChip::currentIntStep | ( | ) | const [inline, private] |
int DTBtiChip::currentStep | ( | ) | const [inline, private] |
void DTBtiChip::doLTS | ( | ) | [private] |
Definition at line 741 of file DTBtiChip.cc.
References DTBtiTrig::code(), config(), gather_cfg::cout, debug, DTConfigBti::debug(), eraseTrigger(), DTConfigBti::LTS(), DTConfig::NSTEPF, DTConfig::NSTEPL, nTrig(), DTConfigBti::SET(), and trigger().
Referenced by run().
{ if(config()->debug()>2) cout<<"Do LTS"<<endl; int lts = config()->LTS(); int nbxlts = config()->SET(); // Do LTS only on the requested SL //if (superlayer()==2 && lts==1) return; //if (superlayer()!=2 && lts==2) return; //new DTConfig: do LTS only is LTS!=0 --> somewhat redundant ! if (lts==0) return; // loop on steps for(int is=DTConfig::NSTEPF; is<=DTConfig::NSTEPL; is++) { if(nTrig(is)>0) { // non empty step if( trigger(is,1)->code()==8 ) { // HTRIG at this step // do LTS on nbxLTS[superlayer] following steps for(int js=is+1;(js<=is+nbxlts&&js<=DTConfig::NSTEPL);js++){ if(nTrig(js)>0) { // non empty step DTBtiTrig* tr = trigger(js,1); if( tr->code()<8 && (lts==1 || lts==3)) { if(config()->debug()>3) cout<<"LTS: erasing trigger!"<<endl; eraseTrigger(js,1); // delete trigger } } } // do LTS on previous step if(is>DTConfig::NSTEPF && nTrig(is-1)>0) { // non empty step DTBtiTrig* tr = trigger(is-1,1); if( tr->code()<8 && (lts==2 || lts==3) ) { if(config()->debug()>3) cout<<"LTS: erasing trigger!"<<endl; eraseTrigger(is-1,1); // delete trigger } } } } } }
void DTBtiChip::eraseTrigger | ( | int | step, |
unsigned | n | ||
) | [private] |
Definition at line 507 of file DTBtiChip.cc.
References _trigs, gather_cfg::cout, n, DTConfig::NSTEPF, DTConfig::NSTEPL, AlCaHLTBitMon_ParallelJobs::p, findQualityFiles::size, and relval_parameters_module::step.
Referenced by doLTS().
{ if(step<DTConfig::NSTEPF||step>DTConfig::NSTEPL){ cout << "DTBtiChip::eraseTrigger: step out of range: " << step ; cout << " trigger not deleted!" << endl; } if(n<1 || n>_trigs[step-DTConfig::NSTEPF].size()) { cout << "DTBtiChip::trigger: requested trigger does not exist: " << n; cout << " trigger not deleted!" << endl; } vector<DTBtiTrig*>::iterator p = _trigs[step-DTConfig::NSTEPF].begin()+n-1; if(&(*p))delete (*p); _trigs[step-DTConfig::NSTEPF].erase(p); }
void DTBtiChip::findTrig | ( | ) | [private] |
Definition at line 40 of file DTBtiChipSelTrig.cc.
References HDQMDatabaseProducer::config, gather_cfg::cout, debug, and i.
Referenced by run().
{ if(config()->debug()>3){ cout << "DTBtiChip::findTrig called" << endl; } //pattern type: 1 = normal // 2 = 1L1 // 3 = 11L // 4 = L11 // 5 = 1H1 // 6 = 11H // 7 = H11 // int accpatB = config()->AccPattB(); //default +-1 // int accpatA = config()->AccPattA(); //default +-2 // int tiKes = config()->XON(); int RON = config()->RONflag(); //default 1, redundant patterns enabled int PTMS[32]; for(int i=0; i<32; i++){ PTMS[i] = config()->PTMSflag(i); } //Triggers (same order as manual): for(int hl=0;hl<2;hl++){ //hl=0 high hl=1 low if( RON==1 ){ if( keepTrigPatt(PTMS[0],0,1,hl) ) return; // 1324A --> 0 - 1L3L2R4L: nor } if( keepTrigPatt(PTMS[1],1,2,hl) ) return; // 1324B --> 1 - 1L3L2R4R: 1L1 if( keepTrigPatt(PTMS[2],2,1,hl) ) return; // 1324C --> 2 - 1R3L2R4L: nor if( keepTrigPatt(PTMS[3],3,1,hl) ) return; // 1324D --> 3 - 1R3L2R4R: nor if( keepTrigPatt(PTMS[4],4,3,hl) ) return; // 1364A --> 4 - 1L3L6L4R: 11L if( keepTrigPatt(PTMS[5],5,1,hl) ) return; // 1364B --> 5 - 1R3L6L4R: nor if( keepTrigPatt(PTMS[6],6,1,hl) ) return; // 1364C --> 6 - 1R3R6L4R: nor if( keepTrigPatt(PTMS[7],7,5,hl) ) return; // 1368A --> 7 - 1R3R6L8L: 1H1 if( keepTrigPatt(PTMS[8],8,6,hl) ) return; // 1368B --> 8 - 1R3R6R8L: 11H if( keepTrigPatt(PTMS[9],9,7,hl) ) return; // 1368C --> 9 - 1R3L6L8L: H11 if( keepTrigPatt(PTMS[10],10,1,hl) ) return; // 5324A --> 10 - 5L3L2R4L: nor if( keepTrigPatt(PTMS[11],11,1,hl) ) return; // 5324B --> 11 - 5L3R2R4L: nor if( keepTrigPatt(PTMS[12],12,6,hl) ) return; // 5324C --> 12 - 5R3R2R4L: 11H if( keepTrigPatt(PTMS[13],13,1,hl) ) return; // 5364A --> 13 - 5L3R6L4L: nor if( keepTrigPatt(PTMS[14],14,1,hl) ) return; // 5364B --> 14 - 5L3R6L4R: nor if( keepTrigPatt(PTMS[15],15,5,hl) ) return; // 5364C --> 15 - 5R3R6L4L: 1H1 if( keepTrigPatt(PTMS[16],16,1,hl) ) return; // 5364D --> 16 - 5R3R6L4R: nor if( keepTrigPatt(PTMS[17],17,1,hl) ) return; // 5368A --> 17 - 5L3R6L8L: nor if( keepTrigPatt(PTMS[18],18,1,hl) ) return; // 5368B --> 18 - 5L3R6R8L: nor if( keepTrigPatt(PTMS[19],19,4,hl) ) return; // 5368C --> 19 - 5L3R6R8R: L11 if( keepTrigPatt(PTMS[20],20,1,hl) ) return; // 5764A --> 20 - 5R7L6L4R: nor if( keepTrigPatt(PTMS[21],21,1,hl) ) return; // 5764B --> 21 - 5R7L6R4R: nor if( keepTrigPatt(PTMS[22],22,7,hl) ) return; // 5764C --> 22 - 5R7L6L4L: H11 if( keepTrigPatt(PTMS[23],23,3,hl) ) return; // 9764A --> 23 - 9L7L6L4R: 11L if( keepTrigPatt(PTMS[24],24,2,hl) ) return; // 9764B --> 24 - 9L7L6R4R: 1L1 if( keepTrigPatt(PTMS[25],25,4,hl) ) return; // 9764C --> 25 - 9L7R6R4R: L11 if( keepTrigPatt(PTMS[26],26,1,hl) ) return; // 5768A --> 26 - 5L7L6R8L: nor if( RON==1 ){ if( keepTrigPatt(PTMS[27],27,2,hl) ) return; // 5768B --> 27 - 5L7L6R8R: 1L1 if( keepTrigPatt(PTMS[28],28,1,hl) ) return; // 5768C --> 28 - 5R7L6R8L: nor if( keepTrigPatt(PTMS[29],29,1,hl) ) return; // 5768D --> 29 - 5R7L6R8R: nor if( keepTrigPatt(PTMS[30],30,1,hl) ) return; // 9768A --> 30 - 9L7L6R8L: nor if( keepTrigPatt(PTMS[31],31,1,hl) ) return; // 9768B --> 31 - 9L7R6R8L: nor } }//end h/l loop /* for(int hl=0;hl<2;hl++){ //hl=0 high hl=1 low if( keepTrigPatt(PTMS[0],0,1,hl) ) return; // 5768A --> 0 - 5L7L6R8L: nor if( RON==1 ){ if( keepTrigPatt(PTMS[1],1,2,hl) ) return; // 5768B --> 1 - 5L7L6R8R: 1L1 if( keepTrigPatt(PTMS[2],2,1,hl) ) return; // 5768C --> 2 - 5R7L6R8L: nor if( keepTrigPatt(PTMS[3],3,1,hl) ) return; // 5768D --> 3 - 5R7L6R8R: nor } if( keepTrigPatt(PTMS[4],4,3,hl) ) return; // 1364A --> 4 - 1L3L6L4R: 11L if( keepTrigPatt(PTMS[5],5,1,hl) ) return; // 1364B --> 5 - 1R3L6L4R: nor if( keepTrigPatt(PTMS[6],6,1,hl) ) return; // 1364C --> 6 - 1R3R6L4R: nor if( keepTrigPatt(PTMS[7],7,5,hl) ) return; // 1368A --> 7 - 1R3R6L8L: 1H1 if( keepTrigPatt(PTMS[8],8,6,hl) ) return; // 1368B --> 8 - 1R3R6R8L: 11H if( keepTrigPatt(PTMS[9],9,7,hl) ) return; // 1368C --> 9 - 1R3L6L8L: H11 if( keepTrigPatt(PTMS[10],10,1,hl) ) return; // 5324A --> 10 - 5L3L2R4L: nor if( keepTrigPatt(PTMS[11],11,1,hl) ) return; // 5324B --> 11 - 5L3R2R4L: nor if( keepTrigPatt(PTMS[12],12,6,hl) ) return; // 5324C --> 12 - 5R3R2R4L: 11H if( keepTrigPatt(PTMS[13],13,1,hl) ) return; // 5364A --> 13 - 5L3R6L4L: nor if( keepTrigPatt(PTMS[14],14,1,hl) ) return; // 5364B --> 14 - 5L3R6L4R: nor if( keepTrigPatt(PTMS[15],15,5,hl) ) return; // 5364C --> 15 - 5R3R6L4L: 1H1 if( keepTrigPatt(PTMS[16],16,1,hl) ) return; // 5364D --> 16 - 5R3R6L4R: nor if( keepTrigPatt(PTMS[17],17,1,hl) ) return; // 5368A --> 17 - 5L3R6L8L: nor if( keepTrigPatt(PTMS[18],18,1,hl) ) return; // 5368B --> 18 - 5L3R6R8L: nor if( keepTrigPatt(PTMS[19],19,4,hl) ) return; // 5368C --> 19 - 5L3R6R8R: L11 if( keepTrigPatt(PTMS[20],20,1,hl) ) return; // 5764A --> 20 - 5R7L6L4R: nor if( keepTrigPatt(PTMS[21],21,1,hl) ) return; // 5764B --> 21 - 5R7L6R4R: nor if( keepTrigPatt(PTMS[22],22,7,hl) ) return; // 5764C --> 22 - 5R7L6L4L: H11 if( keepTrigPatt(PTMS[23],23,3,hl) ) return; // 9764A --> 23 - 9L7L6L4R: 11L if( keepTrigPatt(PTMS[24],24,2,hl) ) return; // 9764B --> 24 - 9L7L6R4R: 1L1 if( keepTrigPatt(PTMS[25],25,4,hl) ) return; // 9764C --> 25 - 9L7R6R4R: L11 if( RON==1 ){ if( keepTrigPatt(PTMS[26],26,1,hl) ) return; // 1324A --> 26 - 1L3L2R4L: nor } if( keepTrigPatt(PTMS[27],27,2,hl) ) return; // 1324B --> 27 - 1L3L2R4R: 1L1 if( keepTrigPatt(PTMS[28],28,1,hl) ) return; // 1324C --> 28 - 1R3L2R4L: nor if( keepTrigPatt(PTMS[29],29,1,hl) ) return; // 1324D --> 29 - 1R3L2R4R: nor if( RON==1 ){ if( keepTrigPatt(PTMS[30],30,1,hl) ) return; // 9768A --> 30 - 9L7L6R8L: nor } if( keepTrigPatt(PTMS[31],31,1,hl) ) return; // 9768B --> 31 - 9L7R6R8L: nor }//end h/l loop */ /* // High level triggers: if( keepTrig( 1,accpatB,8) ) return; // 5768B --> 1 - acc. patt. B if( keepTrig( 2,accpatA,8) ) return; // 5768C --> 2 - acc. patt. A if( keepTrig( 3,accpatA,8) ) return; // 5768D --> 3 - acc. patt. A if( keepTrig( 4,accpatB,8) ) return; // 1364A --> 4 - acc. patt. B if( keepTrig( 5,accpatA,8) ) return; // 1364B --> 5 - acc. patt. A if( keepTrig( 6,accpatA,8) ) return; // 1364C --> 6 - acc. patt. A if( keepTrig( 7,accpatB,8) ) return; // 1368A --> 7 - acc. patt. B if( keepTrig( 8,accpatB,8) ) return; // 1368B --> 8 - acc. patt. B if( keepTrig( 9,accpatB,8) ) return; // 1368C --> 9 - acc. patt. B if( keepTrig(10,accpatA,8) ) return; // 5324A --> 10 - acc. patt. A if( keepTrig(11,accpatA,8) ) return; // 5324B --> 11 - acc. patt. A if( keepTrig(12,accpatB,8) ) return; // 5324C --> 12 - acc. patt. B if( keepTrig(13,accpatA,8) ) return; // 5364A --> 13 - acc. patt. A if( keepTrig(14,accpatA,8) ) return; // 5364B --> 14 - acc. patt. A if( keepTrig(15,accpatB,8) ) return; // 5364C --> 15 - acc. patt. B if( keepTrig(16,accpatA,8) ) return; // 5364D --> 16 - acc. patt. A if( keepTrig(17,accpatA,8) ) return; // 5368A --> 17 - acc. patt. A if( keepTrig(18,accpatA,8) ) return; // 5368B --> 18 - acc. patt. A if( keepTrig(19,accpatB,8) ) return; // 5368C --> 19 - acc. patt. B if( keepTrig(20,accpatA,8) ) return; // 5764A --> 20 - acc. patt. A if( keepTrig(21,accpatA,8) ) return; // 5764B --> 21 - acc. patt. A if( keepTrig(22,accpatB,8) ) return; // 5764C --> 22 - acc. patt. B if( keepTrig(23,accpatB,8) ) return; // 9764A --> 23 - acc. patt. B if( keepTrig(24,accpatB,8) ) return; // 9764B --> 24 - acc. patt. B if( keepTrig(25,accpatB,8) ) return; // 9764C --> 25 - acc. patt. B if( keepTrig( 0,accpatA,8) ) return; // 5768A --> 0 - acc. patt. A */ /* // Low level triggers -B if( keepTrig( 1,accpatB,2) ) return; // 5768B --> 1 - acc. patt. B if( keepTrig( 2,accpatA,2) ) return; // 5768C --> 2 - acc. patt. A if(tiKes==1) { if( keepTrig( 3,accpatA,2) ) return; // 5768D --> 3 - acc. patt. A } if( keepTrig( 4,accpatB,2) ) return; // 1364A --> 4 - acc. patt. B if( keepTrig( 5,accpatA,2) ) return; // 1364B --> 5 - acc. patt. A if( keepTrig( 6,accpatA,2) ) return; // 1364C --> 6 - acc. patt. A if( keepTrig( 7,accpatB,2) ) return; // 1368A --> 7 - acc. patt. B if( keepTrig( 8,accpatB,2) ) return; // 1368B --> 8 - acc. patt. B if( keepTrig( 9,accpatB,2) ) return; // 1368C --> 9 - acc. patt. B if( keepTrig(10,accpatA,2) ) return; // 5324A --> 10 - acc. patt. A if( keepTrig(11,accpatA,2) ) return; // 5324B --> 11 - acc. patt. A if( keepTrig(12,accpatB,2) ) return; // 5324C --> 12 - acc. patt. B if(tiKes==1) { if( keepTrig(13,accpatA,2) ) return; // 5364A --> 13 - acc. patt. A } if( keepTrig(14,accpatA,2) ) return; // 5364B --> 14 - acc. patt. A if( keepTrig(15,accpatB,2) ) return; // 5364C --> 15 - acc. patt. B if( keepTrig(16,accpatA,2) ) return; // 5364D --> 16 - acc. patt. A if(tiKes==1) { if( keepTrig(17,accpatA,2) ) return; // 5368A --> 17 - acc. patt. A } if( keepTrig(18,accpatA,2) ) return; // 5368B --> 18 - acc. patt. A if( keepTrig(19,accpatB,2) ) return; // 5368C --> 19 - acc. patt. B if( keepTrig(20,accpatA,2) ) return; // 5764A --> 20 - acc. patt. A if(tiKes==1) { if( keepTrig(21,accpatA,2) ) return; // 5764B --> 21 - acc. patt. A } if( keepTrig(22,accpatB,2) ) return; // 5764C --> 22 - acc. patt. B if( keepTrig(23,accpatB,2) ) return; // 9764A --> 23 - acc. patt. B if( keepTrig(24,accpatB,2) ) return; // 9764B --> 24 - acc. patt. B if( keepTrig(25,accpatB,2) ) return; // 9764C --> 25 - acc. patt. B if( keepTrig( 0,accpatA,2) ) return; // 5768A --> 0 - acc. patt. A // Low level triggers -C if( keepTrig( 1,accpatB,3) ) return; // 5768B --> 1 - acc. patt. B if( keepTrig( 2,accpatA,3) ) return; // 5768C --> 2 - acc. patt. A if( keepTrig( 3,accpatA,3) ) return; // 5768D --> 3 - acc. patt. A if( keepTrig( 4,accpatB,3) ) return; // 1364A --> 4 - acc. patt. B if( keepTrig( 5,accpatA,3) ) return; // 1364B --> 5 - acc. patt. A if(tiKes==1) { if( keepTrig( 6,accpatA,3) ) return; // 1364C --> 6 - acc. patt. A } if( keepTrig( 7,accpatB,3) ) return; // 1368A --> 7 - acc. patt. B if( keepTrig( 8,accpatB,3) ) return; // 1368B --> 8 - acc. patt. B if( keepTrig( 9,accpatB,3) ) return; // 1368C --> 9 - acc. patt. B if(tiKes==1) { if( keepTrig(10,accpatA,3) ) return; // 5324A --> 10 - acc. patt. A } if( keepTrig(11,accpatA,3) ) return; // 5324B --> 11 - acc. patt. A if( keepTrig(12,accpatB,3) ) return; // 5324C --> 12 - acc. patt. B if( keepTrig(13,accpatA,3) ) return; // 5364A --> 13 - acc. patt. A if( keepTrig(14,accpatA,3) ) return; // 5364B --> 14 - acc. patt. A if( keepTrig(15,accpatB,3) ) return; // 5364C --> 15 - acc. patt. B if(tiKes==1) { if( keepTrig(16,accpatA,3) ) return; // 5364D --> 16 - acc. patt. A } if( keepTrig(17,accpatA,3) ) return; // 5368A --> 17 - acc. patt. A if( keepTrig(18,accpatA,3) ) return; // 5368B --> 18 - acc. patt. A if( keepTrig(19,accpatB,3) ) return; // 5368C --> 19 - acc. patt. B if( keepTrig(20,accpatA,3) ) return; // 5764A --> 20 - acc. patt. A if( keepTrig(21,accpatA,3) ) return; // 5764B --> 21 - acc. patt. A if( keepTrig(22,accpatB,3) ) return; // 5764C --> 22 - acc. patt. B if( keepTrig(23,accpatB,3) ) return; // 9764A --> 23 - acc. patt. B if( keepTrig(24,accpatB,3) ) return; // 9764B --> 24 - acc. patt. B if( keepTrig(25,accpatB,3) ) return; // 9764C --> 25 - acc. patt. B if(tiKes==1) { if( keepTrig( 0,accpatA,3) ) return; // 5768A --> 0 - acc. patt. A } // Low level triggers -A if( keepTrig( 1,accpatB,1) ) return; // 5768B --> 1 - acc. patt. B if( keepTrig( 2,accpatA,1) ) return; // 5768C --> 2 - acc. patt. A if( keepTrig( 3,accpatA,1) ) return; // 5768D --> 3 - acc. patt. A if( keepTrig( 4,accpatB,1) ) return; // 1364A --> 4 - acc. patt. B if( keepTrig( 5,accpatA,1) ) return; // 1364B --> 5 - acc. patt. A if( keepTrig( 6,accpatA,1) ) return; // 1364C --> 6 - acc. patt. A if( keepTrig( 7,accpatB,1) ) return; // 1368A --> 7 - acc. patt. B if( keepTrig( 8,accpatB,1) ) return; // 1368B --> 8 - acc. patt. B if(tiKes==1) { if( keepTrig( 9,accpatB,1) ) return; // 1368C --> 9 - acc. patt. B } if( keepTrig(10,accpatA,1) ) return; // 5324A --> 10 - acc. patt. A if( keepTrig(11,accpatA,1) ) return; // 5324B --> 11 - acc. patt. A if( keepTrig(12,accpatB,1) ) return; // 5324C --> 12 - acc. patt. B if( keepTrig(13,accpatA,1) ) return; // 5364A --> 13 - acc. patt. A if( keepTrig(14,accpatA,1) ) return; // 5364B --> 14 - acc. patt. A if( keepTrig(15,accpatB,1) ) return; // 5364C --> 15 - acc. patt. B if( keepTrig(16,accpatA,1) ) return; // 5364D --> 16 - acc. patt. A if( keepTrig(17,accpatA,1) ) return; // 5368A --> 17 - acc. patt. A if( keepTrig(18,accpatA,1) ) return; // 5368B --> 18 - acc. patt. A if(tiKes==1) { if( keepTrig(19,accpatB,1) ) return; // 5368C --> 19 - acc. patt. B } if( keepTrig(20,accpatA,1) ) return; // 5764A --> 20 - acc. patt. A if( keepTrig(21,accpatA,1) ) return; // 5764B --> 21 - acc. patt. A if(tiKes==1) { if( keepTrig(22,accpatB,1) ) return; // 5764C --> 22 - acc. patt. B } if( keepTrig(23,accpatB,1) ) return; // 9764A --> 23 - acc. patt. B if( keepTrig(24,accpatB,1) ) return; // 9764B --> 24 - acc. patt. B if(tiKes==1) { if( keepTrig(25,accpatB,1) ) return; // 9764C --> 25 - acc. patt. B } if( keepTrig( 0,accpatA,1) ) return; // 5768A --> 0 - acc. patt. A // Low level triggers -D if( keepTrig( 0,accpatA,4) ) return; // 5768A --> 0 - acc. patt. A if( keepTrig( 1,accpatB,4) ) return; // 5768B --> 1 - acc. patt. B if( keepTrig( 2,accpatA,4) ) return; // 5768C --> 2 - acc. patt. A if( keepTrig( 3,accpatA,4) ) return; // 5768D --> 3 - acc. patt. A if(tiKes==1) { if( keepTrig( 4,accpatB,4) ) return; // 1364A --> 4 - acc. patt. B } if( keepTrig( 5,accpatA,4) ) return; // 1364B --> 5 - acc. patt. A if( keepTrig( 6,accpatA,4) ) return; // 1364C --> 6 - acc. patt. A if( keepTrig( 7,accpatB,4) ) return; // 1368A --> 7 - acc. patt. B if(tiKes==1) { if( keepTrig( 8,accpatB,4) ) return; // 1368B --> 8 - acc. patt. B } if( keepTrig( 9,accpatB,4) ) return; // 1368C --> 9 - acc. patt. B if( keepTrig(10,accpatA,4) ) return; // 5324A --> 10 - acc. patt. A if( keepTrig(11,accpatA,4) ) return; // 5324B --> 11 - acc. patt. A if(tiKes==1) { if( keepTrig(12,accpatB,4) ) return; // 5324C --> 12 - acc. patt. B } if( keepTrig(13,accpatA,4) ) return; // 5364A --> 13 - acc. patt. A if( keepTrig(14,accpatA,4) ) return; // 5364B --> 14 - acc. patt. A if( keepTrig(15,accpatB,4) ) return; // 5364C --> 15 - acc. patt. B if( keepTrig(16,accpatA,4) ) return; // 5364D --> 16 - acc. patt. A if( keepTrig(17,accpatA,4) ) return; // 5368A --> 17 - acc. patt. A if( keepTrig(18,accpatA,4) ) return; // 5368B --> 18 - acc. patt. A if( keepTrig(19,accpatB,4) ) return; // 5368C --> 19 - acc. patt. B if( keepTrig(20,accpatA,4) ) return; // 5764A --> 20 - acc. patt. A if( keepTrig(21,accpatA,4) ) return; // 5764B --> 21 - acc. patt. A if( keepTrig(22,accpatB,4) ) return; // 5764C --> 22 - acc. patt. B if(tiKes==1) { if( keepTrig(23,accpatB,4) ) return; // 9764A --> 23 - acc. patt. B } if( keepTrig(24,accpatB,4) ) return; // 9764B --> 24 - acc. patt. B if( keepTrig(25,accpatB,4) ) return; // 9764C --> 25 - acc. patt. B */ }
DTTrigGeom* DTBtiChip::geom | ( | ) | const [inline] |
Return trigger geometry.
Definition at line 123 of file DTBtiChip.h.
References _geom.
{ return _geom; }
std::vector<const DTDigi*> DTBtiChip::get_CellDigis | ( | int | cell | ) | [inline] |
get digi vector - SV 28/XI/02
Definition at line 74 of file DTBtiChip.h.
References _digis.
{ return _digis[cell];}
DTBtiId DTBtiChip::id | ( | void | ) | const [inline] |
Return the DTBtiChip Id.
Definition at line 126 of file DTBtiChip.h.
References _id.
Referenced by DTBtiTrig::DTBtiTrig().
{ return _id; }
void DTBtiChip::init | ( | void | ) | [private] |
Definition at line 549 of file DTBtiChip.cc.
References _curStep, _difs, _digis, _hits, _sums, _thisStepUsedHit, begin, config(), gather_cfg::cout, debug, i, AlCaHLTBitMon_ParallelJobs::p, p1, and DTConfigBti::WENflag().
Referenced by run().
{ if(config()->debug()>3) cout << "DTBtiChip::init() -> initializing bti chip" << endl; _curStep=0; for(int i=0;i<25;i++) { _sums[i] = 1000; _difs[i] = 1000; } for(int cell=0;cell<9;cell++) { int WEN = config()->WENflag(cell+1); if( WEN==1 ){ _thisStepUsedHit[cell]=0; vector<const DTDigi*>::const_iterator p; for(p=_digis[cell].begin();p<_digis[cell].end();p++){ DTBtiHit* hit = new DTBtiHit(*p,config()); //int clockTime = (int)(fabs(((*p)->time()+config()->SetupTime())/12.5)); //DTBtiHit* hit = new DTBtiHit(clockTime,config()); _hits[cell].push_back(hit); } //debugging if(config()->debug()>2){ vector<DTBtiHit*>::const_iterator p1; for(p1=_hits[cell].begin();p1<_hits[cell].end();p1++){ cout << " Filling hit in cell " << cell+1; if((*p1)->curTime()!=4000) cout << " raw time in trigger: " << (*p1)->curTime() << endl; cout << " time (clock units): " << (*p1)->clockTime() << endl; } } // end debugging } } }
void DTBtiChip::init_clock | ( | ) |
Definition at line 589 of file DTBtiChip.cc.
References _curStep, _difs, _digis_clock, _hits, _sums, _thisStepUsedHit, begin, config(), gather_cfg::cout, debug, i, init_done, p1, and DTConfigBti::WENflag().
{ if(config()->debug()>3) cout << "DTBtiChip::init_clock() -> initializing bti chip" << endl; init_done = 1; _curStep=0; for(int i=0;i<25;i++) { _sums[i] = 1000; _difs[i] = 1000; } for(int cell=0;cell<9;cell++) { int WEN = config()->WENflag(cell+1); if( WEN==1 ){ _thisStepUsedHit[cell]=0; for(unsigned int i=0; i<_digis_clock[cell].size(); i++){ const int clockTime = (_digis_clock[cell])[i]; DTBtiHit* hit = new DTBtiHit(clockTime,config()); _hits[cell].push_back(hit); } //debugging if(config()->debug()>2){ vector<DTBtiHit*>::const_iterator p1; for(p1=_hits[cell].begin();p1<_hits[cell].end();p1++){ cout << " Filling hit in cell " << cell+1; if((*p1)->curTime()!=4000) cout << " time: " << (*p1)->curTime() << endl; else cout << " time (clock units): " << (*p1)->clockTime() << endl; } } // end debugging } } }
int DTBtiChip::keepTrig | ( | const int | eq, |
const int | acp, | ||
const int | code | ||
) | [private] |
Definition at line 722 of file DTBtiChipSelTrig.cc.
References abs, HDQMDatabaseProducer::config, gather_cfg::cout, debug, BitArray< N >::element(), i, BitArray< N >::print(), and BitArray< N >::set().
{ if(config()->debug()>4){ cout << "DTBtiChip::keepTrig called with arguments: "; cout << eq << ", " << acp << ", " << code << endl; } int const KCen = 40; // Arrays will start from 0 --> use 40 instead of 41 BitArray<80> val0, val1, val2, val3, val4, val5; int mm[6]; int i=0; for(i=0;i<6;i++){ mm[i]=0; int mk = (int)(2*_Keq[eq][i]); if(abs(mk) > config()->KCut() ) continue; mm[i]=(int)(_Keq[eq][i]*2)+KCen; // if(_Keq[eq][i]<0){ // mm[i]=_Keq[eq][i]*2-0.5+KCen; // } else { // mm[i]=_Keq[eq][i]*2+KCen; // } } if(mm[0]>0 && (code==8 || code==3 || code==4) ){ val0.set(mm[0]-1); val0.set(mm[0]); val0.set(mm[0]+1); if(acp==2 && (code==8 || code==3) ) { val0.set(mm[0]-2); val0.set(mm[0]+2); } } if(mm[1]>0 && (code==8 || code==1 || code==4) ){ val1.set(mm[1]-1); val1.set(mm[1]); val1.set(mm[1]+1); if(acp==2 && code==8 ) { val1.set(mm[1]-2); val1.set(mm[1]+2); } } if(mm[2]>0 && (code==8 || code==1 || code==2) ){ val2.set(mm[2]-1); val2.set(mm[2]); val2.set(mm[2]+1); if(acp==2 && (code==8 || code==2) ) { val2.set(mm[2]-2); val2.set(mm[2]+2); } } if(mm[3]>0 && (code==8 || code==2 || code==4) ){ val3.set(mm[3]-1); val3.set(mm[3]); val3.set(mm[3]+1); } if(mm[4]>0 && (code==8 || code==1 || code==3) ){ val4.set(mm[4]-1); val4.set(mm[4]); val4.set(mm[4]+1); } if(mm[5]>0 && (code==8 || code==2 || code==3) ){ val5.set(mm[5]); } // debugging if(config()->debug()>4){ cout << " dump of val arrays: " << endl; // cout << val0.to_string() << endl; // cout << val1.to_string() << endl; // cout << val2.to_string() << endl; // cout << val3.to_string() << endl; // cout << val4.to_string() << endl; // cout << val5.to_string() << endl; val0.print(); cout << endl; val1.print(); cout << endl; val2.print(); cout << endl; val3.print(); cout << endl; val4.print(); cout << endl; val5.print(); cout << endl; } // end debugging int KMax = 0; int LKMax = -1; for(i=0;i<80;i++){ int val = val0.element(i)+val1.element(i)+val2.element(i)+ val3.element(i)+val4.element(i)+val5.element(i); // int val = val0.test(i)+val1.test(i)+val2.test(i)+ // val3.test(i)+val4.test(i)+val5.test(i); if(val>KMax) { KMax=val; LKMax=i; } } // Note that all bits in val are shifted by one w.r.t. FORTRAN version // The output K will be the same because of the different value of Kcen if (KMax==6 && code==8) { store(eq,8,LKMax-KCen,int(_Xeq[eq][1])); return 1; } else if (KMax==3 && code!=8) { if(code==1 || code==4) { store(eq,code,LKMax-KCen,int(_Xeq[eq][0])); } else { store(eq,code,LKMax-KCen,int(_Xeq[eq][1])); } return 1; } return 0; // return value is ITFL of FORTRAN version }
int DTBtiChip::keepTrigPatt | ( | int | flag, |
const int | eq, | ||
const int | pattType, | ||
int | hlflag | ||
) | [private] |
Definition at line 327 of file DTBtiChipSelTrig.cc.
References abs, HDQMDatabaseProducer::config, gather_cfg::cout, debug, BitArray< N >::element(), Vispa::Plugins::EdmBrowser::EdmDataAccessor::eq(), i, BitArray< N >::print(), BitArray< N >::reset(), BitArray< N >::set(), and X.
{ //if pattern is not enabled, return if(flag==0) return 0; int AC1 = config()->AccPattAC1(); //default 0 int AC2 = config()->AccPattAC2(); //default 3 int ACH = config()->AccPattACH(); //default 1 int ACL = config()->AccPattACL(); //default 2 int tiKes = config()->XON(); if(config()->debug()>4){ cout << "DTBtiChip::keepTrigPatt called with arguments: "; cout << eq << ", " << pattType << ", " << hlflag << endl; cout<<"AC1,AC2,ACH,ACL="<<AC1<<" "<<AC2<<" "<<ACH<<" "<<ACL<<endl; } BitArray<80> val0, val1, val2, val3, val4, val5; int mm[6]; //NB _Keq = (Kman - K0)/2 where K0=tmax*2 --->OBSOLETE, now Keq=Kman //int K0 = 2 * (config()->ST()/2.); int K0 = int (config()->ST()); int i=0; float Keqfloat[6] = {0,0,0,0,0,0}; for(i=0;i<6;i++){ mm[i] = -1; int mk = (int)(_Keq[eq][i] - K0); //if(abs(mk) > config()->KCut(_id.superlayer()-1))continue; if(abs(mk) > 2*K0) continue; Keqfloat[i]=_Keq[eq][i]; mm[i]=(int)(_Keq[eq][i]); // if(_Keq[eq][i]<0){ // mm[i]=_Keq[eq][i]*2-0.5+KCen; // } else { // mm[i]=_Keq[eq][i]*2+KCen; // } } switch(pattType) { case 1: //normal pattern //if(hlflag==1 && (eq!=2 && eq!=14 && eq!=28) ){ //test for L /* if(hlflag==1){ //test for L acceptMask(&val0,mm[0],AC1); //eqAB acceptMask(&val1,mm[1],AC1); //eqBC acceptMask(&val2,mm[2],AC1); //eqCD } else */ { acceptMask(&val0,mm[0],AC2); //eqAB acceptMask(&val1,mm[1],AC2); //eqBC acceptMask(&val2,mm[2],AC2); //eqCD } break; case 2: //1L1 pattern acceptMask(&val0,mm[0],AC1); //eqAB acceptMask(&val1,mm[1],ACL); //eqBC acceptMask(&val2,mm[2],AC1); //eqCD break; case 3: //11L pattern acceptMask(&val0,mm[0],AC1); //eqAB acceptMask(&val1,mm[1],AC1); //eqBC acceptMask(&val2,mm[2],ACL); //eqCD break; case 4: //L11 pattern acceptMask(&val0,mm[0],ACL); //eqAB acceptMask(&val1,mm[1],AC1); //eqBC acceptMask(&val2,mm[2],AC1); //eqCD break; case 5: //1H1 pattern acceptMask(&val0,mm[0],AC1); //eqAB acceptMask(&val1,mm[1],ACH); //eqBC acceptMask(&val2,mm[2],AC1); //eqCD break; case 6: //11H pattern acceptMask(&val0,mm[0],AC1); //eqAB acceptMask(&val1,mm[1],AC1); //eqBC acceptMask(&val2,mm[2],ACH); //eqCD break; case 7: //H11 pattern acceptMask(&val0,mm[0],ACH); //eqAB acceptMask(&val1,mm[1],AC1); //eqBC acceptMask(&val2,mm[2],AC1); //eqCD break; default: acceptMask(&val0,mm[0],AC2); //eqAB acceptMask(&val1,mm[1],AC2); //eqBC acceptMask(&val2,mm[2],AC2); //eqCD break; } //eq. AC and BD acceptance are always +-1 ->code 00 int acc = 0; acceptMask(&val3,mm[3],acc); //eq.AC acceptMask(&val4,mm[4],acc); //eq.BD //eq. AD is the reference value! if(mm[5]>0){ val5.set(mm[5]); } // debugging: print() method prints from last to first bit! if(config()->debug()>4){ cout << " dump of val arrays: " << endl; // cout << val0.to_string() << endl; // cout << val1.to_string() << endl; // cout << val2.to_string() << endl; // cout << val3.to_string() << endl; // cout << val4.to_string() << endl; // cout << val5.to_string() << endl; val0.print(); cout << endl; val1.print(); cout << endl; val2.print(); cout << endl; val3.print(); cout << endl; val4.print(); cout << endl; val5.print(); cout << endl; } // end debugging //search for High trigger: if(hlflag==0){ int code = 0; int KMax = 0; int LKMax = -1; for(i=0;i<80;i++){ int val = val0.element(i)+val1.element(i)+val2.element(i)+ val3.element(i)+val4.element(i)+val5.element(i); if(val>KMax) { KMax=val; LKMax=i; } } //SV: K value is stored in 6 bits, so K=64->0, etc if(LKMax>63) LKMax-=64; if(KMax==6) { code=8; int X; if( eq==0 ) //store Xbc only for patt 0, else store Xad X=int(_Xeq[eq][0]); else X=int(_Xeq[eq][1]); store(eq,code,LKMax,X,Keqfloat[0],Keqfloat[1], Keqfloat[2],Keqfloat[3],Keqfloat[4],Keqfloat[5]); return 1; } return 0; } //end H //search for Low triggers: if(hlflag==1){ int code = 0; int RON = config()->RONflag(); //hit in B is missing if(config()->debug()>4) cout << "SelTrig: searching low-B" << endl; int LKMax = -1; for(i=0;i<80;i++){ int val = val2.element(i)+val3.element(i)+val5.element(i); if(val==3){ //Ref. is eqAD code=2; LKMax=i; int storefg = 1; //SV - XON time-ind.Keq suppr. XON=0 do not abilitate patterns if(tiKes==0) { if(eq==3 || eq==13 || eq==17 || eq==21 || eq==29){ if(config()->debug()>3) cout << "SelTrig: doing XON suppression!"<<endl; storefg = 0; } } //SV - RON suppression for low triggers if( RON==0 ){ if( eq==19 ){ if(config()->debug()>3) cout << "SelTrig: doing RON low triggers suppression!"<<endl; storefg = 0; } } if(storefg){ //SV: K value is stored in 6 bits, so K=64->0, etc if(LKMax>63) LKMax-=64; int X; if( eq==0 ) X=int(_Xeq[eq][0]); else X=int(_Xeq[eq][1]); store(eq,code,LKMax,X,Keqfloat[0],Keqfloat[1], Keqfloat[2],Keqfloat[3],Keqfloat[4],Keqfloat[5]); return 1; } } } //end -B Low //hit in C is missing if(config()->debug()>3) cout << "SelTrig: searching low-C" << endl; for(i=0;i<80;i++){ int val = val0.element(i)+val4.element(i)+val5.element(i); if(val==3){ //Ref. is eqAD code=3; LKMax=i; int storefg = 1; //SV - XON time-ind.Keq suppr. if(tiKes==0) { if(eq==0 || eq==6 || eq==10 || eq==16 || eq==26 || eq==30){ if(config()->debug()>3) cout << "SelTrig: doing XON suppression!"<<endl; storefg = 0; } } if(storefg){ //SV: K value is stored in 6 bits, so K=64->0, etc if(LKMax>63) LKMax-=64; int X; if( eq==0 ) X=int(_Xeq[eq][0]); else X=int(_Xeq[eq][1]); store(eq,code,LKMax,X,Keqfloat[0],Keqfloat[1], Keqfloat[2],Keqfloat[3],Keqfloat[4],Keqfloat[5]); return 1; } } } // end -C Low //for -A and -D low acceptance is +-1 // if(pattType==1){ val0.reset(); val1.reset(); val2.reset(); acceptMask(&val0,mm[0],AC1); //eqAB acceptMask(&val1,mm[1],AC1); //eqBC acceptMask(&val2,mm[2],AC1); //eqCD // } //hit in A is missing if(config()->debug()>4) cout << "SelTrig: searching low-A" << endl; for(i=0;i<80;i++){ int val = val1.element(i)+val2.element(i)+val4.element(i); if(val==3 && i==mm[4]){ //Ref. is eqBD code=1; LKMax=i; int storefg = 1; //SV - XON time-ind.Keq suppr. if(tiKes==0) { if(eq==9 || eq==19 || eq==22 || eq==25 ){ if(config()->debug()>3) cout << "SelTrig: doing low-A XON suppression!"<<endl; storefg = 0; } } if( RON==0 ){ //SV - RON suppression if( eq==26 ){ if(config()->debug()>3) cout << "SelTrig: doing RON low triggers suppression!"<<endl; storefg = 0; } } if(storefg){ //SV: K value is stored in 6 bits, so K=64->0, etc if(LKMax>63) LKMax-=64; store(eq,code,LKMax,int(_Xeq[eq][0]),Keqfloat[0],Keqfloat[1], Keqfloat[2],Keqfloat[3],Keqfloat[4],Keqfloat[5]); return 1; } } } //end -A Low //hit in D is missing if(config()->debug()>4) cout << "SelTrig: searching low-D" << endl; for(i=0;i<80;i++){ int val = val0.element(i)+val1.element(i)+val3.element(i); if(val==3 && i==mm[3]){ //Ref. is eqAC code=4; LKMax=i; int storefg = 1; //SV - XON time-ind.Keq suppr. if(tiKes==0){ if(eq==4 || eq==8 || eq==12 || eq==23){ if(config()->debug()>3) cout << "SelTrig: doing XON suppression!"<<endl; storefg = 0; } } //SV - RON suppression for low triggers if( RON==0 ){ if(eq==1 || eq==2 || eq==3 || eq==24 || eq==25){ if(config()->debug()>3) cout << "SelTrig: doing RON low triggers suppression!"<<endl; storefg = 0; } } if(storefg){ // && _Xeq[eq][1] >=0){ //SV: K value is stored in 6 bits, so K=64->0, etc if(LKMax>63) LKMax-=64; store(eq,code,LKMax,int(_Xeq[eq][0]),Keqfloat[0],Keqfloat[1], Keqfloat[2],Keqfloat[3],Keqfloat[4],Keqfloat[5]); return 1; } } } //end -D Low return 0; } //end Low return 0; }
LocalPoint DTBtiChip::localPosition | ( | ) | const [inline] |
Position in chamber frame (x is the one of first traco in slave plane)
Definition at line 95 of file DTBtiChip.h.
References _geom, _id, and DTTrigGeom::localPosition().
{ return _geom->localPosition(_id); }
bool DTBtiChip::matchEq | ( | float | eqA, |
float | eqB, | ||
int | AC | ||
) | [private] |
int DTBtiChip::nCellHit | ( | ) | const |
Number of cells with hits.
Definition at line 390 of file DTBtiChip.cc.
References _digis, _id, begin, DTBtiId::bti(), config(), gather_cfg::cout, debug, i, n, AlCaHLTBitMon_ParallelJobs::p, and findQualityFiles::size.
Referenced by run().
{ int n=0; int i=0; for(i=0;i<9;i++) { if( _digis[i].size() >0 ) n++; } if(config()->debug()>2) { cout << n << " cells with hits found:" << endl; } if(config()->debug()>2) { for(i=0;i<9;i++) { vector<const DTDigi*>::const_iterator p; for(p=_digis[i].begin();p<_digis[i].end();p++) { cout << "DTBtiChip # " << _id.bti() << " cell " << i+1; cout << " --> drift time (tdc units): " << (*p)->countsTDC() << endl; (*p)->print(); } } } return n; /* //SV 2/IV/03 counting hits from _hits int n=0; int i=0; for(i=0;i<9;i++) { if( _hits[i].size() >0 ) n++; } if(config()->debug()>2) { cout << n << " cells with hits found:" << endl; } if(config()->debug()>2) { for(i=0;i<9;i++) { vector<const DTBtiHit*>::const_iterator p; for(p=_hits[i].begin();p<_hits[i].end();p++) { cout << "DTBtiChip # " << number() << " cell " << i+1; if((*p)->curTime()!=4000) cout << " --> drift time: " << (*p)->curTime() << endl; else cout << " --> clock time: " << (*p)->clockTime() << endl; } } } return n; */ }
int DTBtiChip::nTrig | ( | int | step | ) | const |
Number of triggers found.
Definition at line 455 of file DTBtiChip.cc.
References _trigs, gather_cfg::cout, DTConfig::NSTEPF, DTConfig::NSTEPL, and relval_parameters_module::step.
Referenced by doLTS(), and DTBtiCard::runBTI().
{ if(step<DTConfig::NSTEPF||step>DTConfig::NSTEPL){ cout << "DTBtiChip::nTrig: step out of range: " << step ; cout << " 0 returned" << endl; return 0; } return _trigs[step-DTConfig::NSTEPF].size(); }
int DTBtiChip::number | ( | ) | const [inline] |
Return DTBtiChip number.
Definition at line 89 of file DTBtiChip.h.
References _id, and DTBtiId::bti().
Referenced by add_digi_clock(), and DTBtiCard::runBTI().
Assignment operator.
Definition at line 275 of file DTBtiChip.cc.
References _curStep, _difs, _digis, _geom, _hits, _id, _JTR, _Keq, _KTR, _MaxKAcc, _MinKAcc, _nStepUsedHits, _sums, _thisStepUsedHit, _thisStepUsedTimes, _trigs, _Xeq, i, j, DTConfig::NSTEPF, DTConfig::NSTEPL, AlCaHLTBitMon_ParallelJobs::p, and p1.
{ if(this != &bti){ _geom = bti._geom; _id = bti._id; _curStep = bti._curStep; _nStepUsedHits = bti._nStepUsedHits; int i=0; for(i=0;i<DTConfig::NSTEPL - DTConfig::NSTEPF;i++) { _trigs[i].reserve(2); vector<DTBtiTrig*>::const_iterator p; for(p=bti._trigs[i].begin();p<bti._trigs[i].end();p++){ _trigs[i].push_back(*p); } } for(i=0;i<9;i++) { _digis[i].reserve(10); vector<const DTDigi*>::const_iterator p; for(p=bti._digis[i].begin();p<bti._digis[i].end();p++){ _digis[i].push_back(*p); } _hits[i].reserve(10); vector<DTBtiHit*>::const_iterator p1; for(p1=bti._hits[i].begin();p1<bti._hits[i].end();p1++){ _hits[i].push_back(*p1); } _thisStepUsedTimes[i] = bti._thisStepUsedTimes[i]; _thisStepUsedHit[i] = _thisStepUsedHit[i]; } for(i=0;i<25;i++){ _sums[i] = bti._sums[i]; _difs[i] = bti._difs[i]; } for(i=0;i<26;i++){ int j = 0; for(j=0;j<6;j++){ _Keq[i][j] = bti._Keq[i][j]; } for(j=0;j<3;j++){ _JTR[i][j] = bti._JTR[i][j]; } for(j=0;j<2;j++){ _Xeq[i][j] = bti._Xeq[i][j]; _KTR[i][j] = bti._KTR[i][j]; } } _MinKAcc = bti._MinKAcc; _MaxKAcc = bti._MaxKAcc; } return *this; }
int DTBtiChip::reSum | ( | int | a, |
int | b | ||
) | [inline, private] |
int DTBtiChip::reSum23 | ( | int | a, |
int | b | ||
) | [inline, private] |
void DTBtiChip::reSumSet | ( | ) | [private] |
Definition at line 103 of file DTBtiChipEquations.cc.
Referenced by DTBtiChip().
{ reSumAr[2][ 2 +2]=0; reSumAr[2][ 1 +2]=0; reSumAr[2][ 0 +2]=0; reSumAr[2][-1 +2]=-1; reSumAr[2][-2 +2]=-1; reSumAr[1][ 2 +2]=1; reSumAr[1][ 1 +2]=1; reSumAr[1][ 0 +2]=0; reSumAr[1][-1 +2]=0; reSumAr[1][-2 +2]=0; reSumAr[0][ 2 +2]=1; reSumAr[0][ 1 +2]=0; reSumAr[0][ 0 +2]=0; reSumAr[0][-1 +2]=0; reSumAr[0][-2 +2]=-1; reSumAr23[2][ 2 +2]=1; reSumAr23[2][ 1 +2]=1; reSumAr23[2][ 0 +2]=1; reSumAr23[2][-1 +2]=0; reSumAr23[2][-2 +2]=0; reSumAr23[1][ 2 +2]=1; reSumAr23[1][ 1 +2]=1; reSumAr23[1][ 0 +2]=0; reSumAr23[1][-1 +2]=0; reSumAr23[1][-2 +2]=0; reSumAr23[0][ 2 +2]=1; reSumAr23[0][ 1 +2]=0; reSumAr23[0][ 0 +2]=0; reSumAr23[0][-1 +2]=0; reSumAr23[0][-2 +2]=-1; }
void DTBtiChip::run | ( | void | ) |
Definition at line 630 of file DTBtiChip.cc.
References _geom, _id, _nStepUsedHits, DTBtiId::bti(), computeEqs(), computeSums(), config(), gather_cfg::cout, currentIntStep(), currentStep(), debug, DTConfigBti::debug(), doLTS(), findTrig(), init(), init_done, DTTrigGeom::nCell(), nCellHit(), DTConfig::NSTEPF, DTConfig::NSTEPL, superlayer(), DTBtiId::superlayer(), and tick().
Referenced by DTBtiCard::runBTI().
{ // Debugging... if(config()->debug()>2){ cout << "DTBtiChip::run: Processing BTI " << _id.bti() << endl; cout << " in SL " << _id.superlayer() << endl; } // End debugging if(_id.bti()<1 || _id.bti() >_geom->nCell(superlayer())) { if(config()->debug()>1) cout << "DTBtiChip::run : wrong BTI number: " << _id.bti() << endl; return; } // run algorithm if(!init_done) init(); if( nCellHit()<3 ) return; // check that at least 3 cell have hits for(int ints=0; ints<2*DTConfig::NSTEPL; ints++) { // 80 MHz tick(); // Do a 12.5 ns step // In electronics equations are computed every 12.5 ns // but since triggers are searched for only every 25 ns, skip // also equation's computing at odd values of internal step if((currentIntStep()/2)*2!=currentIntStep())continue; //if((currentIntStep()/2)*2==currentIntStep())continue; if(config()->debug()>2){ cout << "DTBtiChip::run : internal step " << currentIntStep(); cout << " number of JTRIG hits is " << _nStepUsedHits << endl; } if(currentStep()>=DTConfig::NSTEPF && _nStepUsedHits>2) { // at least 3 good hits in this step -> run algorithm computeSums(); computeEqs(); findTrig(); } } if( config()->LTS()>0 ) doLTS(); // low trigger suppression }
int DTBtiChip::sector | ( | void | ) | const [inline] |
Return sector number.
Definition at line 135 of file DTBtiChip.h.
References _geom, and DTTrigGeom::sector().
void DTBtiChip::setSnap | ( | ) | [private] |
Definition at line 852 of file DTBtiChip.cc.
References config(), gather_cfg::cout, debug, RE23, RE43, DTConfigBti::RE43(), ST, ST2, ST23, ST3, ST4, DTConfigBti::ST43(), ST43, ST5, and ST7.
Referenced by DTBtiChip().
{ //set the internally calculated drift velocity parameters ST43 = config()->ST43(); RE43 = config()->RE43(); ST23 = int(double(ST43)/2.); RE23 = (RE43==1) ? 2 : int(double(RE43)/2.); ST = int( double(ST43) * 3./4. + double(RE43) * 1./4. ); ST2 = int( (double(ST43) * 3./4. + double(RE43) * 1./4.)*2. ); ST3 = int( (double(ST43) * 3./4. + double(RE43) * 1./4.)*3. ); ST4 = int( (double(ST43) * 3./4. + double(RE43) * 1./4.)*4. ); ST5 = int( (double(ST43) * 3./4. + double(RE43) * 1./4.)*5. ); ST7 = int( (double(ST43) * 3./4. + double(RE43) * 1./4.)*7. ); if(config()->debug()>3){ cout << "Snap register dump: " << endl; cout << "ST43 = " << ST43 << endl; cout << "RE43 = " << RE43 << endl; cout << "ST23 = " << ST23 << endl; cout << "RE23 = " << RE23 << endl; cout << "ST = " << ST << endl; cout << "ST2 = " << ST2 << endl; cout << "ST3 = " << ST3 << endl; cout << "ST4 = " << ST4 << endl; cout << "ST5 = " << ST5 << endl; cout << "ST7 = " << ST7 << endl; } }
int DTBtiChip::station | ( | ) | const [inline] |
Return station number.
Definition at line 132 of file DTBtiChip.h.
References _geom, and DTTrigGeom::station().
int DTBtiChip::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. |
||
) | [private] |
Definition at line 785 of file DTBtiChip.cc.
References _MaxKAcc, _MinKAcc, _thisStepUsedHit, DTBtiTrig::addDigi(), addTrig(), trackerHits::c, config(), gather_cfg::cout, currentStep(), debug, DTBtiHit::hitDigi(), DTBtiTrig::print(), and generateDummyData::trg().
{ // remove negative position triggers if(X<0)return 0; // accept in range triggers (acceptances defined in constructor) if(K>=_MinKAcc && K<=_MaxKAcc) { int trig_step = currentStep(); /* //SV test 27/I/2003 1-clock delay for critical patterns in default ACx configuration int AC1 = config()->AccPattAC1(); //default 0 int AC2 = config()->AccPattAC2(); //default 3 int ACH = config()->AccPattACH(); //default 1 int ACL = config()->AccPattACL(); //default 2 if(AC1==0 && AC2==3 && ACH==1 && ACL==2){ if(eq==1 || eq==4 || eq==7 || eq==8 || eq==9 || eq==12 || eq==15 || eq==19 || eq==22 || eq==23 || eq==24 || eq==25 || eq==27 ) trig_step = currentStep()+1; } */ //store strobe: SV no strobe defined for this setup SV 15/I/2007 int strobe=-1; // create a new trigger float Keq[6] = {KeqAB,KeqBC,KeqCD,KeqAC,KeqBD,KeqAD}; //DTBtiTrig* trg = new DTBtiTrig(this,code,K,X,currentStep(),eq); DTBtiTrig* trg = new DTBtiTrig(this,code,K,X,trig_step,eq,strobe,Keq); // store also the digis for(int c=0; c<9; c++) { if(_thisStepUsedHit[c]) { const DTDigi* digi = _thisStepUsedHit[c]->hitDigi(); if(digi) trg->addDigi(digi); } } //addTrig(currentStep(),trg); addTrig(trig_step,trg); // Debugging... if(config()->debug()>1) trg->print(); // end debugging return 1; } else{ // remove out of range triggers (acceptances defined in constructor) if(config()->debug()>2){ cout << "DTBtiChip::store, REJECTED TRIGGER at step "<< currentStep(); cout << " allowed K range in theta view is: ["; cout << _MinKAcc << ","<< _MaxKAcc << "]"; cout << "K value is " << K << endl; } return 0; }//end else }//end store
void DTBtiChip::sum | ( | const int | s, |
const int | a, | ||
const int | b | ||
) | [private] |
Definition at line 82 of file DTBtiChipEquations.cc.
{ // // fill the sums and difs arrays // a and b are the cell numbers (in the range [1,9]) // s is the sum number (in the range [1,25]) // if( _thisStepUsedHit[a-1]!=0 && _thisStepUsedHit[b-1]!=0 ){ _sums[s-1] = (float)(_thisStepUsedHit[a-1]->jtrig() + _thisStepUsedHit[b-1]->jtrig() ); _difs[s-1] = (float)(_thisStepUsedHit[a-1]->jtrig() - _thisStepUsedHit[b-1]->jtrig() ); } else { _sums[s-1] = 1000; _difs[s-1] = 1000; } }
int DTBtiChip::superlayer | ( | ) | const [inline] |
Return superlayer.
Definition at line 92 of file DTBtiChip.h.
References _id, and DTBtiId::superlayer().
Referenced by add_digi(), and run().
{ return _id.superlayer(); }
void DTBtiChip::tick | ( | ) | [private] |
Definition at line 675 of file DTBtiChip.cc.
References _curStep, _hits, _nStepUsedHits, _thisStepUsedHit, begin, config(), gather_cfg::cout, currentIntStep(), DTBtiHit::curTime(), debug, DTConfigBti::debug(), DTBtiHit::jtrig(), and AlCaHLTBitMon_ParallelJobs::p.
Referenced by run().
{ // // fills the DTBtiChip registers ( _thisStepUsedHit[cell] ) // for a given clock (Syncronizer and Shaper functionalities) // _curStep++; // increase internal step (12.5 ns --> 80 MHz) // debugging if(config()->debug()>2){ cout << "DTBtiChip::tick: internal step is now " << currentIntStep()<< endl; } // end debugging // Loop on cells _nStepUsedHits=0; for(int cell=0;cell<9;cell++) { // decrease drift time by 12.5 ns for each hit vector<DTBtiHit*>::const_iterator p; for(p=_hits[cell].begin();p<_hits[cell].end();p++){ (*p)->stepDownTime(); } // loop on hits _thisStepUsedHit[cell]=0; for(p=_hits[cell].begin();p<_hits[cell].end();p++){ if ( (*p)->isDrifting() ) { // hit is drifting break; // --> don't consider others } else if( (*p)->isInsideReg() ) { // hit is already in registers _thisStepUsedHit[cell]=(*p); _nStepUsedHits++; // debugging if(config()->debug()>2){ if((*p)->curTime() != 4000) cout << "DTBtiChip::tick: hit in register: time=" << (*p)->curTime(); else cout << "DTBtiChip::tick: hit in register! " << endl; cout << " jtrig=" << (*p)->jtrig() << endl; } // end debugging break; // --> don't consider other triggers } // hit is not drifting and not in registers: it is gone out of register, but // jtrig value is still=ST ; save in array and consider next one if exists } // end loop on cell hits // debugging... if(config()->debug()>2){ if(_thisStepUsedHit[cell]!=0){ cout << "int. step=" << currentIntStep() << " cell=" << cell+1; cout << " jtrig=" << _thisStepUsedHit[cell]->jtrig(); if( _thisStepUsedHit[cell]->curTime() != 4000 ) cout << " (time=" << _thisStepUsedHit[cell]->curTime() << ")" << endl; else cout << endl; } } // end debugging } // end loop on cells }
DTBtiTrig * DTBtiChip::trigger | ( | int | step, |
unsigned | n | ||
) | const |
Return the requested trigger.
Definition at line 475 of file DTBtiChip.cc.
References _trigs, gather_cfg::cout, n, DTConfig::NSTEPF, DTConfig::NSTEPL, AlCaHLTBitMon_ParallelJobs::p, findQualityFiles::size, and relval_parameters_module::step.
Referenced by doLTS().
{ if(step<DTConfig::NSTEPF||step>DTConfig::NSTEPL){ cout << "DTBtiChip::trigger: step out of range: " << step ; cout << " empty pointer returned" << endl; return 0; } if(n<1 || n>_trigs[step-DTConfig::NSTEPF].size()) { cout << "DTBtiChip::trigger: requested trigger does not exist: " << n; cout << " empty pointer returned!" << endl; return 0; } vector<DTBtiTrig*>::const_iterator p = _trigs[step-DTConfig::NSTEPF].begin(); return (*(p+n-1)); }
DTBtiTrigData DTBtiChip::triggerData | ( | int | step, |
unsigned | n | ||
) | const |
Return the data part of the requested trigger.
Definition at line 491 of file DTBtiChip.cc.
References _trigs, gather_cfg::cout, n, DTConfig::NSTEPF, DTConfig::NSTEPL, AlCaHLTBitMon_ParallelJobs::p, findQualityFiles::size, and relval_parameters_module::step.
Referenced by DTBtiCard::runBTI().
{ if(step<DTConfig::NSTEPF||step>DTConfig::NSTEPL){ cout << "DTBtiChip::triggerData: step out of range: " << step ; cout << " dummy trigger returned" << endl; return DTBtiTrigData(); } if(n<1 || n>_trigs[step-DTConfig::NSTEPF].size()) { cout << "DTBtiChip::triggerData: requested trig. doesn't exist: " << n; cout << " dummy trigger returned!" << endl; return DTBtiTrigData(); } vector<DTBtiTrig*>::const_iterator p = _trigs[step-DTConfig::NSTEPF].begin(); return (*(p+n-1))->data(); }
Definition at line 465 of file DTBtiChip.cc.
References _trigs, gather_cfg::cout, DTConfig::NSTEPF, DTConfig::NSTEPL, and relval_parameters_module::step.
{ if(step<DTConfig::NSTEPF||step>DTConfig::NSTEPL){ cout << "DTBtiChip::trigList: step out of range: " << step ; cout << " empty pointer returned" << endl; //return 0; } return _trigs[step-DTConfig::NSTEPF]; }
int DTBtiChip::wheel | ( | ) | const [inline] |
Return wheel number.
Definition at line 129 of file DTBtiChip.h.
References _geom, and DTTrigGeom::wheel().
int DTBtiChip::_busyStart_clock[9] [private] |
Definition at line 208 of file DTBtiChip.h.
Referenced by add_digi(), add_digi_clock(), and DTBtiChip().
DTBtiCard* DTBtiChip::_card [private] |
Definition at line 169 of file DTBtiChip.h.
Referenced by DTBtiChip().
DTConfigBti* DTBtiChip::_config [private] |
Definition at line 172 of file DTBtiChip.h.
Referenced by config().
int DTBtiChip::_curStep [private] |
Definition at line 185 of file DTBtiChip.h.
Referenced by currentIntStep(), currentStep(), init(), init_clock(), operator=(), and tick().
float DTBtiChip::_difs[25] [private] |
Definition at line 190 of file DTBtiChip.h.
Referenced by DTBtiChip(), init(), init_clock(), and operator=().
std::vector<const DTDigi*> DTBtiChip::_digis[9] [private] |
Definition at line 177 of file DTBtiChip.h.
Referenced by add_digi(), clear(), DTBtiChip(), get_CellDigis(), init(), nCellHit(), and operator=().
std::vector<int > DTBtiChip::_digis_clock[9] [private] |
Definition at line 179 of file DTBtiChip.h.
Referenced by add_digi_clock(), clear(), and init_clock().
DTTrigGeom* DTBtiChip::_geom [private] |
Definition at line 171 of file DTBtiChip.h.
Referenced by add_digi(), CMSPosition(), DTBtiChip(), geom(), localPosition(), operator=(), run(), sector(), station(), and wheel().
std::vector<DTBtiHit*> DTBtiChip::_hits[9] [private] |
Definition at line 186 of file DTBtiChip.h.
Referenced by clear(), DTBtiChip(), init(), init_clock(), operator=(), and tick().
DTBtiId DTBtiChip::_id [private] |
Definition at line 174 of file DTBtiChip.h.
Referenced by add_digi(), CMSPosition(), DTBtiChip(), id(), localPosition(), nCellHit(), number(), operator=(), run(), and superlayer().
float DTBtiChip::_JTR[32][3] [private] |
Definition at line 206 of file DTBtiChip.h.
Referenced by DTBtiChip(), and operator=().
float DTBtiChip::_Keq[32][6] [private] |
Definition at line 191 of file DTBtiChip.h.
Referenced by DTBtiChip(), and operator=().
float DTBtiChip::_KTR[32][2] [private] |
Definition at line 205 of file DTBtiChip.h.
Referenced by DTBtiChip(), and operator=().
int DTBtiChip::_MaxKAcc [private] |
Definition at line 194 of file DTBtiChip.h.
Referenced by DTBtiChip(), operator=(), and store().
int DTBtiChip::_MaxKcenterTraco [private] |
Definition at line 198 of file DTBtiChip.h.
int DTBtiChip::_MaxKleftTraco [private] |
Definition at line 196 of file DTBtiChip.h.
int DTBtiChip::_MaxKrightTraco [private] |
Definition at line 200 of file DTBtiChip.h.
int DTBtiChip::_MinKAcc [private] |
Definition at line 193 of file DTBtiChip.h.
Referenced by DTBtiChip(), operator=(), and store().
int DTBtiChip::_MinKcenterTraco [private] |
Definition at line 197 of file DTBtiChip.h.
int DTBtiChip::_MinKleftTraco [private] |
Definition at line 195 of file DTBtiChip.h.
int DTBtiChip::_MinKrightTraco [private] |
Definition at line 199 of file DTBtiChip.h.
int DTBtiChip::_nStepUsedHits [private] |
Definition at line 189 of file DTBtiChip.h.
Referenced by operator=(), run(), and tick().
float DTBtiChip::_sums[25] [private] |
Definition at line 190 of file DTBtiChip.h.
Referenced by DTBtiChip(), init(), init_clock(), and operator=().
DTBtiHit* DTBtiChip::_thisStepUsedHit[9] [private] |
Definition at line 188 of file DTBtiChip.h.
Referenced by DTBtiChip(), init(), init_clock(), operator=(), store(), and tick().
int DTBtiChip::_thisStepUsedTimes[9] [private] |
Definition at line 187 of file DTBtiChip.h.
Referenced by DTBtiChip(), and operator=().
std::vector<DTBtiTrig*> DTBtiChip::_trigs[DTConfig::NSTEPL-DTConfig::NSTEPF+1] [private] |
Definition at line 182 of file DTBtiChip.h.
Referenced by addTrig(), clear(), DTBtiChip(), eraseTrigger(), nTrig(), operator=(), trigger(), triggerData(), and trigList().
float DTBtiChip::_Xeq[32][2] [private] |
Definition at line 192 of file DTBtiChip.h.
Referenced by DTBtiChip(), and operator=().
float DTBtiChip::_XeqAB_patt0 [private] |
Definition at line 203 of file DTBtiChip.h.
float DTBtiChip::_XeqAC_patt0 [private] |
Definition at line 202 of file DTBtiChip.h.
float DTBtiChip::_XeqBD_patt0 [private] |
Definition at line 202 of file DTBtiChip.h.
float DTBtiChip::_XeqCD_patt0 [private] |
Definition at line 203 of file DTBtiChip.h.
int DTBtiChip::init_done [private] |
Definition at line 207 of file DTBtiChip.h.
Referenced by DTBtiChip(), init_clock(), and run().
int DTBtiChip::RE23 [private] |
Definition at line 211 of file DTBtiChip.h.
Referenced by setSnap().
int DTBtiChip::RE43 [private] |
Definition at line 211 of file DTBtiChip.h.
Referenced by setSnap().
int DTBtiChip::reSumAr[3][5] [private] |
Definition at line 213 of file DTBtiChip.h.
Referenced by reSum().
int DTBtiChip::reSumAr23[3][5] [private] |
Definition at line 214 of file DTBtiChip.h.
Referenced by reSum23().
int DTBtiChip::ST [private] |
Definition at line 211 of file DTBtiChip.h.
Referenced by setSnap().
int DTBtiChip::ST2 [private] |
Definition at line 211 of file DTBtiChip.h.
Referenced by setSnap().
int DTBtiChip::ST23 [private] |
Definition at line 211 of file DTBtiChip.h.
Referenced by setSnap().
int DTBtiChip::ST3 [private] |
Definition at line 211 of file DTBtiChip.h.
Referenced by setSnap().
int DTBtiChip::ST4 [private] |
Definition at line 211 of file DTBtiChip.h.
Referenced by setSnap().
int DTBtiChip::ST43 [private] |
Definition at line 211 of file DTBtiChip.h.
Referenced by setSnap().
int DTBtiChip::ST5 [private] |
Definition at line 211 of file DTBtiChip.h.
Referenced by setSnap().
int DTBtiChip::ST7 [private] |
Definition at line 211 of file DTBtiChip.h.
Referenced by setSnap().