CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
L1MuDTSectorReceiver Class Reference

#include <L1MuDTSectorReceiver.h>

Public Member Functions

 L1MuDTSectorReceiver (L1MuDTSectorProcessor &)
 constructor More...
 
void reset ()
 clear Sector Receiver More...
 
void run (int bx, const edm::Event &e, const edm::EventSetup &c)
 receive track segment data from the DTBX and CSC chamber triggers More...
 
virtual ~L1MuDTSectorReceiver ()
 destructor More...
 

Private Member Functions

int address2sector (int adr) const
 find the right sector for a given address More...
 
int address2wheel (int adr) const
 find the right wheel for a given address More...
 
void receiveCSCData (int bx, const edm::Event &e, const edm::EventSetup &c)
 receive track segment data from CSC chamber trigger More...
 
void receiveDTBXData (int bx, const edm::Event &e, const edm::EventSetup &c)
 receive track segment data from DTBX chamber trigger More...
 

Private Attributes

L1MuDTSectorProcessorm_sp
 
edm::ESHandle< L1MuDTTFMasksmsks
 
edm::ESHandle< L1MuDTTFParameterspars
 

Detailed Description

Sector Receiver:

The Sector Receiver receives track segment data from the DTBX and CSC chamber triggers and stores it into the Data Buffer

Date:
2010/09/10 12:26:35
Revision:
1.9

N. Neumeister CERN EP J. Troconiz UAM Madrid

Definition at line 48 of file L1MuDTSectorReceiver.h.

Constructor & Destructor Documentation

L1MuDTSectorReceiver::L1MuDTSectorReceiver ( L1MuDTSectorProcessor sp)

constructor

Definition at line 57 of file L1MuDTSectorReceiver.cc.

57  :
58  m_sp(sp) {
59 
60 }
L1MuDTSectorProcessor & m_sp
L1MuDTSectorReceiver::~L1MuDTSectorReceiver ( )
virtual

destructor

Definition at line 66 of file L1MuDTSectorReceiver.cc.

66  {
67 
68 // reset();
69 
70 }

Member Function Documentation

int L1MuDTSectorReceiver::address2sector ( int  adr) const
private

find the right sector for a given address

Definition at line 294 of file L1MuDTSectorReceiver.cc.

References L1MuDTSectorProcessor::id(), m_sp, and L1MuDTSecProcId::sector().

Referenced by receiveDTBXData().

294  {
295 
296  int sector = m_sp.id().sector();
297 
298  if ( adr >= 4 && adr <= 7 ) sector = (sector+13)%12; // +1
299  if ( adr >= 8 && adr <= 11 ) sector = (sector+11)%12; // -1
300 
301  return sector;
302 
303 }
L1MuDTSectorProcessor & m_sp
int sector() const
return sector number
const L1MuDTSecProcId & id() const
return Sector Processor identifier
int L1MuDTSectorReceiver::address2wheel ( int  adr) const
private

find the right wheel for a given address

Definition at line 309 of file L1MuDTSectorReceiver.cc.

References L1MuDTSectorProcessor::id(), L1MuDTSecProcId::locwheel(), m_sp, and L1MuDTSecProcId::wheel().

Referenced by receiveDTBXData().

309  {
310 
311  int wheel = m_sp.id().locwheel();
312 
313  // for 2, 3, 6, 7, 10, 11
314  if ( (adr/2)%2 == 1 ) wheel = m_sp.id().wheel();
315 
316  return wheel;
317 
318 }
L1MuDTSectorProcessor & m_sp
const L1MuDTSecProcId & id() const
return Sector Processor identifier
int locwheel() const
return physical wheel number (-2,-1,0,+1,+2)
int wheel() const
return wheel number
void L1MuDTSectorReceiver::receiveCSCData ( int  bx,
const edm::Event e,
const edm::EventSetup c 
)
private

receive track segment data from CSC chamber trigger

Definition at line 223 of file L1MuDTSectorReceiver.cc.

References L1MuDTDataBuffer::addTSphi(), L1MuDTSectorProcessor::data(), edm::Event::getByLabel(), L1MuDTTFConfig::getCSCTrSInputTag(), L1MuDTTFConfig::getEtaCanc(), L1MuDTSectorProcessor::id(), diffTwoXMLs::label, m_sp, msks, pars, phi, L1MuDTSecProcId::sector(), relativeConstraints::station, GlobalPosition_Frontier_DevDB_cff::tag, and L1MuDTSecProcId::wheel().

Referenced by run().

223  {
224 
225  if ( (L1MuDTTFConfig::getCSCTrSInputTag()).label() == "none" ) return;
226 
227  if ( bx < -6 || bx > 6 ) return;
228 
231 
232  const int bxCSC = 6;
233 
234  vector<csctf::TrackStub> csc_list;
235  vector<csctf::TrackStub>::const_iterator csc_iter;
236 
237  int station = 1; // only ME13
238  int wheel = m_sp.id().wheel();
239  int side = ( wheel == 3 ) ? 1 : 2;
240  int sector = m_sp.id().sector();
241  int csc_sector = ( sector == 0 ) ? 6 : (sector+1)/2;
242  int subsector = ( sector%2 == 0 ) ? 2 : 1;
243 
244  csc_list = csctrig->get(side,station,csc_sector,subsector,bxCSC+bx);
245  int ncsc = 0;
246  for ( csc_iter = csc_list.begin(); csc_iter != csc_list.end(); csc_iter++ ) {
247  bool etaFlag = ( csc_iter->etaPacked() > 17 );
248  int qualCSC = csc_iter->getQuality();
249 
250  // convert CSC quality code to DTBX quality code
251  unsigned int qual = 7;
252  if ( qualCSC == 2 ) qual = 0;
253  if ( qualCSC == 6 ) qual = 1;
254  if ( qualCSC == 7 ) qual = 2;
255  if ( qualCSC == 8 ) qual = 2;
256  if ( qualCSC == 9 ) qual = 3;
257  if ( qualCSC == 10 ) qual = 3;
258  if ( qualCSC == 11 ) qual = 4;
259  if ( qualCSC == 12 ) qual = 5;
260  if ( qualCSC == 13 ) qual = 5;
261  if ( qualCSC == 14 ) qual = 6;
262  if ( qualCSC == 15 ) qual = 6;
263  if ( qual == 7 ) continue;
264 
265  // convert CSC phi to DTBX phi
266  int phi = csc_iter->phiPacked();
267  if ( phi > 2047 ) phi -= 4096;
268  if ( phi < -2048 || phi > 2047 ) continue;
269 
270  if ( msks->get_inrec_chdis_csc(m_sp.id().wheel(), m_sp.id().sector()) ) continue;
271  if ( qual < pars->get_soc_qual_csc(m_sp.id().wheel(), m_sp.id().sector()) ) continue;
272  if ( pars->get_soc_csc_etacanc(m_sp.id().wheel(), m_sp.id().sector()) && etaFlag ) continue;
273  if ( L1MuDTTFConfig::getEtaCanc() && etaFlag ) continue;
274 
275  if ( ncsc < 2 ) {
276  int address = 16 + ncsc;
277  bool tag = (ncsc == 1 ) ? true : false;
278  L1MuDTTrackSegPhi tmpts(wheel,sector,station+2,phi,0,
279  static_cast<L1MuDTTrackSegPhi::TSQuality>(qual),
280  tag,bx,etaFlag);
281  m_sp.data()->addTSphi(address,tmpts);
282  ncsc++;
283  }
284  // else cout << "too many CSC track segments!" << endl;
285  }
286 
287 }
char * address
Definition: mlp_lapack.h:14
L1MuDTSectorProcessor & m_sp
int sector() const
return sector number
const L1MuDTDataBuffer * data() const
return pointer to Data Buffer
edm::ESHandle< L1MuDTTFParameters > pars
edm::ESHandle< L1MuDTTFMasks > msks
const L1MuDTSecProcId & id() const
return Sector Processor identifier
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
static bool getEtaCanc()
void addTSphi(int adr, const L1MuDTTrackSegPhi &)
add new phi track segment to the Data Buffer
int wheel() const
return wheel number
static edm::InputTag getCSCTrSInputTag()
Definition: DDAxes.h:10
void L1MuDTSectorReceiver::receiveDTBXData ( int  bx,
const edm::Event e,
const edm::EventSetup c 
)
private

receive track segment data from DTBX chamber trigger

Definition at line 107 of file L1MuDTSectorReceiver.cc.

References abs, address2sector(), address2wheel(), L1MuDTDataBuffer::addTSphi(), L1MuDTChambPhDigi::code(), L1MuDTSectorProcessor::data(), edm::Event::getByLabel(), L1MuDTTFConfig::getDTDigiInputTag(), L1MuDTTFConfig::getNbitsExtPhi(), L1MuDTTFConfig::getTSOutOfTimeFilter(), L1MuDTTFConfig::getTSOutOfTimeWindow(), L1MuDTSectorProcessor::id(), m_sp, msks, L1MuDTSectorProcessor::ovl(), pars, phi, L1MuDTChambPhDigi::phi(), L1MuDTChambPhDigi::phiB(), L1MuDTSecProcId::sector(), relativeConstraints::station, GlobalPosition_Frontier_DevDB_cff::tag, and L1MuDTSecProcId::wheel().

Referenced by run().

107  {
108 
111 
112  L1MuDTChambPhDigi* ts=0;
113 
114  // const int bx_offset = dttrig->correctBX();
115  int bx_offset=0;
116  bx = bx + bx_offset;
117 
118  // get DTBX phi track segments
119  int address = 0;
120  for ( int station = 1; station <= 4; station++ ) {
121  int max_address = (station == 1) ? 2 : 12;
122  for (int reladr =0; reladr < max_address; reladr++) {
123  address++;
124  if ( m_sp.ovl() && (reladr/2)%2 != 0 ) continue;
125  int wheel = address2wheel(reladr);
126  int sector = address2sector(reladr);
127  if ( reladr%2 == 0 ) ts = dttrig->chPhiSegm1(wheel,station,sector,bx);
128  if ( reladr%2 == 1 ) ts = dttrig->chPhiSegm2(wheel,station,sector,bx);
129  if ( ts ) {
130  int phi = ts->phi();
131  int phib = ts->phiB();
132  int qual = ts->code();
133  bool tag = (reladr%2 == 1) ? true : false;
134 
135  int lwheel = m_sp.id().wheel();
136  lwheel = abs(lwheel)/lwheel*(abs(wheel)+1);
137 
138  if ( station == 1 ) {
139  if ( msks->get_inrec_chdis_st1(lwheel, sector) ) continue;
140  if ( qual < pars->get_inrec_qual_st1(lwheel, sector) ) continue;
141  }
142  else if ( station == 2 ) {
143  if ( msks->get_inrec_chdis_st2(lwheel, sector) ) continue;
144  if ( qual < pars->get_inrec_qual_st2(lwheel, sector) ) continue;
145  }
146  else if ( station == 3 ) {
147  if ( msks->get_inrec_chdis_st3(lwheel, sector) ) continue;
148  if ( qual < pars->get_inrec_qual_st3(lwheel, sector) ) continue;
149  }
150  else if ( station == 4 ) {
151  if ( msks->get_inrec_chdis_st4(lwheel, sector) ) continue;
152  if ( qual < pars->get_inrec_qual_st4(lwheel, sector) ) continue;
153  }
154 
155  if ( reladr/2 == 1 && qual < pars->get_soc_stdis_n(m_sp.id().wheel(), m_sp.id().sector()) ) continue;
156  if ( reladr/2 == 2 && qual < pars->get_soc_stdis_wl(m_sp.id().wheel(), m_sp.id().sector()) ) continue;
157  if ( reladr/2 == 3 && qual < pars->get_soc_stdis_zl(m_sp.id().wheel(), m_sp.id().sector()) ) continue;
158  if ( reladr/2 == 4 && qual < pars->get_soc_stdis_wr(m_sp.id().wheel(), m_sp.id().sector()) ) continue;
159  if ( reladr/2 == 5 && qual < pars->get_soc_stdis_zr(m_sp.id().wheel(), m_sp.id().sector()) ) continue;
160 
161  //
162  // out-of-time TS filter (compare TS at +-1 bx)
163  //
164  bool skipTS = false;
165 
166  bool nbx_del = pars->get_soc_nbx_del(m_sp.id().wheel(), m_sp.id().sector());
167  if ( L1MuDTTFConfig::getTSOutOfTimeFilter() || nbx_del ) {
168 
169  int sh_phi = 12 - L1MuDTTFConfig::getNbitsExtPhi();
170  int tolerance = L1MuDTTFConfig::getTSOutOfTimeWindow();
171 
172  L1MuDTChambPhDigi* tsPreviousBX_1 = dttrig->chPhiSegm1(wheel,station,sector,bx-1);
173  if ( tsPreviousBX_1 ) {
174  int phiBX = tsPreviousBX_1->phi();
175  int qualBX = tsPreviousBX_1->code();
176  if ( abs( (phi >> sh_phi) - (phiBX >> sh_phi) ) <= tolerance &&
177  qualBX > qual ) skipTS = true;
178  }
179 
180  L1MuDTChambPhDigi* tsPreviousBX_2 = dttrig->chPhiSegm2(wheel,station,sector,bx-1);
181  if ( tsPreviousBX_2 ) {
182  int phiBX = tsPreviousBX_2->phi();
183  int qualBX = tsPreviousBX_2->code();
184  if ( abs( (phi >> sh_phi) - (phiBX >> sh_phi) ) <= tolerance &&
185  qualBX > qual ) skipTS = true;
186  }
187 
188  L1MuDTChambPhDigi* tsNextBX_1 = dttrig->chPhiSegm1(wheel,station,sector,bx+1);
189  if ( tsNextBX_1 ) {
190  int phiBX = tsNextBX_1->phi();
191  int qualBX = tsNextBX_1->code();
192  if ( abs( (phi >> sh_phi) - (phiBX >> sh_phi) ) <= tolerance &&
193  qualBX > qual ) skipTS = true;
194  }
195 
196  L1MuDTChambPhDigi* tsNextBX_2 = dttrig->chPhiSegm2(wheel,station,sector,bx+1);
197  if ( tsNextBX_2 ) {
198  int phiBX = tsNextBX_2->phi();
199  int qualBX = tsNextBX_2->code();
200  if ( abs( (phi >> sh_phi) - (phiBX >> sh_phi) ) <= tolerance &&
201  qualBX > qual ) skipTS = true;
202  }
203 
204  }
205 
206  if ( !skipTS ) {
207  L1MuDTTrackSegPhi tmpts(wheel,sector,station,phi,phib,
208  static_cast<L1MuDTTrackSegPhi::TSQuality>(qual),
209  tag,bx-bx_offset);
210  m_sp.data()->addTSphi(address-1,tmpts);
211  }
212  }
213 
214  }
215  }
216 
217 }
char * address
Definition: mlp_lapack.h:14
int address2sector(int adr) const
find the right sector for a given address
L1MuDTSectorProcessor & m_sp
#define abs(x)
Definition: mlp_lapack.h:159
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
const L1MuDTSecProcId & id() const
return Sector Processor identifier
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
int address2wheel(int adr) const
find the right wheel for a given address
static int getTSOutOfTimeWindow()
static edm::InputTag getDTDigiInputTag()
void addTSphi(int adr, const L1MuDTTrackSegPhi &)
add new phi track segment to the Data Buffer
int wheel() const
return wheel number
bool ovl() const
is it an overlap region Sector Processor?
Definition: DDAxes.h:10
void L1MuDTSectorReceiver::reset ( void  )

clear Sector Receiver

Definition at line 99 of file L1MuDTSectorReceiver.cc.

Referenced by L1MuDTSectorProcessor::reset().

99  {
100 
101 }
void L1MuDTSectorReceiver::run ( int  bx,
const edm::Event e,
const edm::EventSetup c 
)

receive track segment data from the DTBX and CSC chamber triggers

Definition at line 80 of file L1MuDTSectorReceiver.cc.

References edm::EventSetup::get(), m_sp, msks, L1MuDTTFConfig::overlap(), L1MuDTSectorProcessor::ovl(), pars, receiveCSCData(), and receiveDTBXData().

Referenced by L1MuDTSectorProcessor::run().

80  {
81 
82  c.get< L1MuDTTFParametersRcd >().get( pars );
83  c.get< L1MuDTTFMasksRcd >().get( msks );
84 
85  // get track segments from DTBX chamber trigger
86  receiveDTBXData(bx, e, c);
87 
88  // get track segments from CSC chamber trigger
89  if ( L1MuDTTFConfig::overlap() && m_sp.ovl() ) {
90  receiveCSCData(bx, e, c);
91  }
92 
93 }
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
L1MuDTSectorProcessor & m_sp
static bool overlap()
edm::ESHandle< L1MuDTTFParameters > pars
edm::ESHandle< L1MuDTTFMasks > msks
const T & get() const
Definition: EventSetup.h:55
bool ovl() const
is it an overlap region Sector Processor?

Member Data Documentation

L1MuDTSectorProcessor& L1MuDTSectorReceiver::m_sp
private
edm::ESHandle< L1MuDTTFMasks > L1MuDTSectorReceiver::msks
private

Definition at line 83 of file L1MuDTSectorReceiver.h.

Referenced by receiveCSCData(), receiveDTBXData(), and run().

edm::ESHandle< L1MuDTTFParameters > L1MuDTSectorReceiver::pars
private

Definition at line 82 of file L1MuDTSectorReceiver.h.

Referenced by receiveCSCData(), receiveDTBXData(), and run().