120 int max_address = (
station == 1) ? 2 : 12;
121 for (
int reladr =0; reladr < max_address; reladr++) {
123 if (
m_sp.
ovl() && (reladr/2)%2 != 0 )
continue;
126 if ( reladr%2 == 0 ) ts = dttrig->chPhiSegm1(wheel,
station,sector,bx);
127 if ( reladr%2 == 1 ) ts = dttrig->chPhiSegm2(wheel,
station,sector,bx);
130 int phib = ts->
phiB();
131 int qual = ts->
code();
132 bool tag = (reladr%2 == 1) ?
true :
false;
135 lwheel =
abs(lwheel)/lwheel*(
abs(wheel)+1);
138 if (
msks->get_inrec_chdis_st1(lwheel, sector) )
continue;
139 if ( qual < pars->get_inrec_qual_st1(lwheel, sector) )
continue;
142 if (
msks->get_inrec_chdis_st2(lwheel, sector) )
continue;
143 if ( qual < pars->get_inrec_qual_st2(lwheel, sector) )
continue;
146 if (
msks->get_inrec_chdis_st3(lwheel, sector) )
continue;
147 if ( qual < pars->get_inrec_qual_st3(lwheel, sector) )
continue;
150 if (
msks->get_inrec_chdis_st4(lwheel, sector) )
continue;
151 if ( qual < pars->get_inrec_qual_st4(lwheel, sector) )
continue;
172 if ( tsPreviousBX_1 ) {
173 int phiBX = tsPreviousBX_1->
phi();
174 int qualBX = tsPreviousBX_1->
code();
175 if (
abs( (phi >> sh_phi) - (phiBX >> sh_phi) ) <= tolerance &&
176 qualBX > qual ) skipTS =
true;
180 if ( tsPreviousBX_2 ) {
181 int phiBX = tsPreviousBX_2->
phi();
182 int qualBX = tsPreviousBX_2->
code();
183 if (
abs( (phi >> sh_phi) - (phiBX >> sh_phi) ) <= tolerance &&
184 qualBX > qual ) skipTS =
true;
189 int phiBX = tsNextBX_1->
phi();
190 int qualBX = tsNextBX_1->
code();
191 if (
abs( (phi >> sh_phi) - (phiBX >> sh_phi) ) <= tolerance &&
192 qualBX > qual ) skipTS =
true;
197 int phiBX = tsNextBX_2->
phi();
198 int qualBX = tsNextBX_2->
code();
199 if (
abs( (phi >> sh_phi) - (phiBX >> sh_phi) ) <= tolerance &&
200 qualBX > qual ) skipTS =
true;
207 static_cast<L1MuDTTrackSegPhi::TSQuality>(qual),
226 if ( bx < -6 || bx > 6 )
return;
233 vector<csctf::TrackStub> csc_list;
234 vector<csctf::TrackStub>::const_iterator csc_iter;
238 int side = ( wheel == 3 ) ? 1 : 2;
240 int csc_sector = ( sector == 0 ) ? 6 : (sector+1)/2;
241 int subsector = ( sector%2 == 0 ) ? 2 : 1;
243 csc_list = csctrig->get(side,station,csc_sector,subsector,bxCSC+bx);
245 for ( csc_iter = csc_list.begin(); csc_iter != csc_list.end(); csc_iter++ ) {
246 bool etaFlag = ( csc_iter->etaPacked() > 17 );
247 int qualCSC = csc_iter->getQuality();
250 unsigned int qual = 7;
251 if ( qualCSC == 2 ) qual = 0;
252 if ( qualCSC == 6 ) qual = 1;
253 if ( qualCSC == 7 ) qual = 2;
254 if ( qualCSC == 8 ) qual = 2;
255 if ( qualCSC == 9 ) qual = 3;
256 if ( qualCSC == 10 ) qual = 3;
257 if ( qualCSC == 11 ) qual = 4;
258 if ( qualCSC == 12 ) qual = 5;
259 if ( qualCSC == 13 ) qual = 5;
260 if ( qualCSC == 14 ) qual = 6;
261 if ( qualCSC == 15 ) qual = 6;
262 if ( qual == 7 )
continue;
265 int phi = csc_iter->phiPacked();
266 if ( phi > 2047 ) phi -= 4096;
267 if ( phi < -2048 || phi > 2047 )
continue;
275 int address = 16 + ncsc;
276 bool tag = (ncsc == 1 ) ?
true :
false;
278 static_cast<L1MuDTTrackSegPhi::TSQuality>(qual),
297 if ( adr >= 4 && adr <= 7 ) sector = (sector+13)%12;
298 if ( adr >= 8 && adr <= 11 ) sector = (sector+11)%12;
void receiveCSCData(int bx, const edm::Event &e, const edm::EventSetup &c)
receive track segment data from CSC chamber trigger
void receiveDTBXData(int bx, const edm::Event &e, const edm::EventSetup &c)
receive track segment data from DTBX chamber trigger
L1MuDTSectorReceiver(L1MuDTSectorProcessor &, edm::ConsumesCollector &&iC)
constructor
int address2sector(int adr) const
find the right sector for a given address
void reset()
clear Sector Receiver
bool getByToken(EDGetToken token, Handle< PROD > &result) const
L1MuDTSectorProcessor & m_sp
static int getNbitsExtPhi()
static bool getTSOutOfTimeFilter()
int sector() const
return sector number
const L1MuDTDataBuffer * data() const
return pointer to Data Buffer
edm::ESHandle< L1MuDTTFParameters > pars
edm::ESHandle< L1MuDTTFMasks > msks
Abs< T >::type abs(const T &t)
const L1MuDTSecProcId & id() const
return Sector Processor identifier
int locwheel() const
return physical wheel number (-2,-1,0,+1,+2)
int address2wheel(int adr) const
find the right wheel for a given address
static int getTSOutOfTimeWindow()
void addTSphi(int adr, const L1MuDTTrackSegPhi &)
add new phi track segment to the Data Buffer
edm::EDGetTokenT< L1MuDTChambPhContainer > m_DTDigiToken
edm::EDGetTokenT< CSCTriggerContainer< csctf::TrackStub > > m_CSCTrSToken
void run(int bx, const edm::Event &e, const edm::EventSetup &c)
receive track segment data from the DTBX and CSC chamber triggers
int wheel() const
return wheel number
static edm::InputTag getCSCTrSInputTag()
bool ovl() const
is it an overlap region Sector Processor?
virtual ~L1MuDTSectorReceiver()
destructor