CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
L1MuBMSectorReceiver Class Reference

#include <L1MuBMSectorReceiver.h>

Public Member Functions

 L1MuBMSectorReceiver (L1MuBMSectorProcessor &, edm::ConsumesCollector &&iC)
 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 BBMX and CSC chamber triggers More...
 
virtual ~L1MuBMSectorReceiver ()
 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 receiveBBMXData (int bx, const edm::Event &e, const edm::EventSetup &c)
 receive track segment data from BBMX chamber trigger More...
 
void receiveCSCData (int bx, const edm::Event &e, const edm::EventSetup &c)
 receive track segment data from CSC chamber trigger More...
 

Private Attributes

edm::ESHandle< L1TMuonBarrelParamsbmtfParamsHandle
 
edm::EDGetTokenT< L1MuDTChambPhContainerm_DTDigiToken
 
L1MuBMSectorProcessorm_sp
 
L1MuDTTFMasks msks
 
L1MuDTTFParameters pars
 

Detailed Description

Sector Receiver:

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

N. Neumeister CERN EP J. Troconiz UAM Madrid

Definition at line 53 of file L1MuBMSectorReceiver.h.

Constructor & Destructor Documentation

L1MuBMSectorReceiver::L1MuBMSectorReceiver ( L1MuBMSectorProcessor sp,
edm::ConsumesCollector &&  iC 
)

constructor

Definition at line 52 of file L1MuBMSectorReceiver.cc.

52  :
53  m_sp(sp),
55 
56 }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
edm::EDGetTokenT< L1MuDTChambPhContainer > m_DTDigiToken
L1MuBMSectorProcessor & m_sp
static edm::InputTag getBMDigiInputTag()
L1MuBMSectorReceiver::~L1MuBMSectorReceiver ( )
virtual

destructor

Definition at line 62 of file L1MuBMSectorReceiver.cc.

62  {
63 
64 // reset();
65 
66 }

Member Function Documentation

int L1MuBMSectorReceiver::address2sector ( int  adr) const
private

find the right sector for a given address

Definition at line 238 of file L1MuBMSectorReceiver.cc.

References L1MuBMSectorProcessor::id(), m_sp, and L1MuBMSecProcId::sector().

Referenced by receiveBBMXData().

238  {
239 
240  int sector = m_sp.id().sector();
241 
242  if ( adr >= 4 && adr <= 7 ) sector = (sector+13)%12; // +1
243  if ( adr >= 8 && adr <= 11 ) sector = (sector+11)%12; // -1
244 
245  return sector;
246 
247 }
int sector() const
return sector number
L1MuBMSectorProcessor & m_sp
const L1MuBMSecProcId & id() const
return Sector Processor identifier
int L1MuBMSectorReceiver::address2wheel ( int  adr) const
private

find the right wheel for a given address

Definition at line 253 of file L1MuBMSectorReceiver.cc.

References L1MuBMSectorProcessor::id(), L1MuBMSecProcId::locwheel(), m_sp, L1MuBMSecProcId::wheel(), and makeMuonMisalignmentScenario::wheel.

Referenced by receiveBBMXData().

253  {
254 
255  int wheel = m_sp.id().locwheel();
256 
257  // for 2, 3, 6, 7, 10, 11
258  if ( (adr/2)%2 == 1 ) wheel = m_sp.id().wheel();
259 
260  return wheel;
261 
262 }
L1MuBMSectorProcessor & m_sp
const L1MuBMSecProcId & 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 L1MuBMSectorReceiver::receiveBBMXData ( int  bx,
const edm::Event e,
const edm::EventSetup c 
)
private

receive track segment data from BBMX chamber trigger

Definition at line 106 of file L1MuBMSectorReceiver.cc.

References funct::abs(), address2sector(), address2wheel(), L1MuBMDataBuffer::addTSphi(), L1MuDTChambPhContainer::chPhiSegm1(), L1MuDTChambPhContainer::chPhiSegm2(), L1MuDTChambPhDigi::code(), L1MuBMSectorProcessor::data(), L1MuDTTFMasks::get_inrec_chdis_st1(), L1MuDTTFMasks::get_inrec_chdis_st2(), L1MuDTTFMasks::get_inrec_chdis_st3(), L1MuDTTFMasks::get_inrec_chdis_st4(), L1MuDTTFParameters::get_inrec_qual_st1(), L1MuDTTFParameters::get_inrec_qual_st2(), L1MuDTTFParameters::get_inrec_qual_st3(), L1MuDTTFParameters::get_inrec_qual_st4(), L1MuDTTFParameters::get_soc_nbx_del(), L1MuDTTFParameters::get_soc_stdis_n(), L1MuDTTFParameters::get_soc_stdis_wl(), L1MuDTTFParameters::get_soc_stdis_wr(), L1MuDTTFParameters::get_soc_stdis_zl(), L1MuDTTFParameters::get_soc_stdis_zr(), edm::Event::getByToken(), L1MuBMTFConfig::getNbitsExtPhi(), L1MuBMTFConfig::getTSOutOfTimeFilter(), L1MuBMTFConfig::getTSOutOfTimeWindow(), L1MuBMSectorProcessor::id(), m_DTDigiToken, m_sp, msks, pars, phi, L1MuDTChambPhDigi::phi(), L1MuDTChambPhDigi::phiB(), L1MuBMSecProcId::sector(), relativeConstraints::station, GlobalPosition_Frontier_DevDB_cff::tag, tolerance, L1MuBMSecProcId::wheel(), and makeMuonMisalignmentScenario::wheel.

Referenced by run().

106  {
108  //e.getByLabel(L1MuBMTFConfig::getBMDigiInputTag(),dttrig);
109  e.getByToken(m_DTDigiToken,dttrig);
110  L1MuDTChambPhDigi const* ts=nullptr;
111 
112  // const int bx_offset = dttrig->correctBX();
113  int bx_offset=0;
114  bx = bx + bx_offset;
115  // get BBMX phi track segments
116  int address = 0;
117  for ( int station = 1; station <= 4; station++ ) {
118  int max_address = (station == 1) ? 2 : 12;
119  for (int reladr =0; reladr < max_address; reladr++) {
120  address++;
121  //if ( m_sp.ovl() && (reladr/2)%2 != 0 ) continue;
122  int wheel = address2wheel(reladr);
123  int sector = address2sector(reladr);
124  //if ( (wheel==2 || wheel==-2) && station==1 ) continue;
125 
126  if ( reladr%2 == 0 ) ts = dttrig->chPhiSegm1(wheel,station,sector,bx);
127  if ( reladr%2 == 1 ) ts = dttrig->chPhiSegm2(wheel,station,sector,bx-1);
128  if ( ts ) {
129  int phi = ts->phi();
130 // int phib = ts->phiB();
131  int phib = 0;
132  if(station!=3) phib = ts->phiB();
133 
134  int qual = ts->code();
135  bool tag = (reladr%2 == 1) ? true : false;
136 
137  int lwheel = m_sp.id().wheel();
138  lwheel = abs(lwheel)/lwheel*(abs(wheel)+1);
139 
140  if ( station == 1 ) {
141  if ( msks.get_inrec_chdis_st1(lwheel, sector) ) continue;
142  if ( qual < pars.get_inrec_qual_st1(lwheel, sector) ) continue;
143  }
144  else if ( station == 2 ) {
145  if ( msks.get_inrec_chdis_st2(lwheel, sector) ) continue;
146  if ( qual < pars.get_inrec_qual_st2(lwheel, sector) ) continue;
147  }
148  else if ( station == 3 ) {
149  if ( msks.get_inrec_chdis_st3(lwheel, sector) ) continue;
150  if ( qual < pars.get_inrec_qual_st3(lwheel, sector) ) continue;
151  }
152  else if ( station == 4 ) {
153  if ( msks.get_inrec_chdis_st4(lwheel, sector) ) continue;
154  if ( qual < pars.get_inrec_qual_st4(lwheel, sector) ) continue;
155  }
156 
157  if ( reladr/2 == 1 && qual < pars.get_soc_stdis_n(m_sp.id().wheel(), m_sp.id().sector()) ) continue;
158  if ( reladr/2 == 2 && qual < pars.get_soc_stdis_wl(m_sp.id().wheel(), m_sp.id().sector()) ) continue;
159  if ( reladr/2 == 3 && qual < pars.get_soc_stdis_zl(m_sp.id().wheel(), m_sp.id().sector()) ) continue;
160  if ( reladr/2 == 4 && qual < pars.get_soc_stdis_wr(m_sp.id().wheel(), m_sp.id().sector()) ) continue;
161  if ( reladr/2 == 5 && qual < pars.get_soc_stdis_zr(m_sp.id().wheel(), m_sp.id().sector()) ) continue;
162 
163  //
164  // out-of-time TS filter (compare TS at +-1 bx)
165  //
166  bool skipTS = false;
167 
168  bool nbx_del = pars.get_soc_nbx_del(m_sp.id().wheel(), m_sp.id().sector());
169  if ( L1MuBMTFConfig::getTSOutOfTimeFilter() || nbx_del ) {
170 
171  int sh_phi = 12 - L1MuBMTFConfig::getNbitsExtPhi();
173 
174  L1MuDTChambPhDigi const * tsPreviousBX_1 = dttrig->chPhiSegm1(wheel,station,sector,bx-1);
175  if ( tsPreviousBX_1 ) {
176  int phiBX = tsPreviousBX_1->phi();
177  int qualBX = tsPreviousBX_1->code();
178  if ( abs( (phi >> sh_phi) - (phiBX >> sh_phi) ) <= tolerance &&
179  qualBX > qual ) skipTS = true;
180  }
181 
182  L1MuDTChambPhDigi const * tsPreviousBX_2 = dttrig->chPhiSegm2(wheel,station,sector,bx-1);
183  if ( tsPreviousBX_2 ) {
184  int phiBX = tsPreviousBX_2->phi();
185  int qualBX = tsPreviousBX_2->code();
186  if ( abs( (phi >> sh_phi) - (phiBX >> sh_phi) ) <= tolerance &&
187  qualBX > qual ) skipTS = true;
188  }
189 
190  L1MuDTChambPhDigi const * tsNextBX_1 = dttrig->chPhiSegm1(wheel,station,sector,bx+1);
191  if ( tsNextBX_1 ) {
192  int phiBX = tsNextBX_1->phi();
193  int qualBX = tsNextBX_1->code();
194  if ( abs( (phi >> sh_phi) - (phiBX >> sh_phi) ) <= tolerance &&
195  qualBX > qual ) skipTS = true;
196  }
197 
198  L1MuDTChambPhDigi const * tsNextBX_2 = dttrig->chPhiSegm2(wheel,station,sector,bx+1);
199  if ( tsNextBX_2 ) {
200  int phiBX = tsNextBX_2->phi();
201  int qualBX = tsNextBX_2->code();
202  if ( abs( (phi >> sh_phi) - (phiBX >> sh_phi) ) <= tolerance &&
203  qualBX > qual ) skipTS = true;
204  }
205 
206  }
207 
208  if ( !skipTS ) {
209 
210  /* if(reladr%2 == 0) {
211  L1MuBMTrackSegPhi tmpts(wheel,sector,station,phi,phib,
212  static_cast<L1MuBMTrackSegPhi::TSQuality>(qual),
213  tag,bx-bx_offset);
214  m_sp.data()->addTSphi(address-1,tmpts);
215  }
216  if(reladr%2 == 1) {
217  L1MuBMTrackSegPhi tmpts(wheel,sector,station,phi,phib,
218  static_cast<L1MuBMTrackSegPhi::TSQuality>(qual),
219  tag,bx+1);
220  m_sp.data()->addTSphi(address-1,tmpts);
221  }*/
222  L1MuBMTrackSegPhi tmpts(wheel,sector,station,phi,phib,
223  static_cast<L1MuBMTrackSegPhi::TSQuality>(qual),
224  tag,bx-bx_offset);
225  m_sp.data()->addTSphi(address-1,tmpts);
226  }
227  }
228 
229  }
230  }
231 
232 }
static int getTSOutOfTimeWindow()
L1MuDTTFParameters pars
int address2wheel(int adr) const
find the right wheel for a given address
static int getNbitsExtPhi()
unsigned short int get_inrec_qual_st4(int wh, int sc) const
void addTSphi(int adr, const L1MuBMTrackSegPhi &)
add new phi track segment to the Data Buffer
L1MuDTChambPhDigi const * chPhiSegm1(int wheel, int stat, int sect, int bx) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
bool get_soc_nbx_del(int wh, int sc) const
const double tolerance
L1MuDTChambPhDigi const * chPhiSegm2(int wheel, int stat, int sect, int bx) const
bool get_inrec_chdis_st1(int wh, int sc) const
unsigned short int get_soc_stdis_wr(int wh, int sc) const
unsigned short int get_soc_stdis_zr(int wh, int sc) const
bool get_inrec_chdis_st3(int wh, int sc) const
int address2sector(int adr) const
find the right sector for a given address
edm::EDGetTokenT< L1MuDTChambPhContainer > m_DTDigiToken
int sector() const
return sector number
L1MuBMSectorProcessor & m_sp
unsigned short int get_inrec_qual_st3(int wh, int sc) const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool get_inrec_chdis_st2(int wh, int sc) const
static bool getTSOutOfTimeFilter()
unsigned short int get_inrec_qual_st2(int wh, int sc) const
const L1MuBMSecProcId & id() const
return Sector Processor identifier
unsigned short int get_soc_stdis_zl(int wh, int sc) const
bool get_inrec_chdis_st4(int wh, int sc) const
unsigned short int get_inrec_qual_st1(int wh, int sc) const
const L1MuBMDataBuffer * data() const
return pointer to Data Buffer
unsigned short int get_soc_stdis_wl(int wh, int sc) const
unsigned short int get_soc_stdis_n(int wh, int sc) const
int wheel() const
return wheel number
void L1MuBMSectorReceiver::receiveCSCData ( int  bx,
const edm::Event e,
const edm::EventSetup c 
)
private

receive track segment data from CSC chamber trigger

void L1MuBMSectorReceiver::reset ( void  )

clear Sector Receiver

Definition at line 98 of file L1MuBMSectorReceiver.cc.

Referenced by L1MuBMSectorProcessor::reset().

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

receive track segment data from the BBMX and CSC chamber triggers

Definition at line 76 of file L1MuBMSectorReceiver.cc.

References bmtfParamsHandle, edm::EventSetup::get(), edm::eventsetup::EventSetupRecord::get(), L1TMuonBarrelParams::l1mudttfmasks, L1TMuonBarrelParams::l1mudttfparams, msks, pars, edm::ESHandle< T >::product(), and receiveBBMXData().

Referenced by L1MuBMSectorProcessor::run().

76  {
77 
78  //c.get< L1MuDTTFParametersRcd >().get( pars );
79  //c.get< L1MuDTTFMasksRcd >().get( msks );
80 
81  const L1TMuonBarrelParamsRcd& bmtfParamsRcd = c.get<L1TMuonBarrelParamsRcd>();
82  bmtfParamsRcd.get(bmtfParamsHandle);
83  const L1TMuonBarrelParams& bmtfParams = *bmtfParamsHandle.product();
84  msks = bmtfParams.l1mudttfmasks;
85  pars = bmtfParams.l1mudttfparams;
86  //pars.print();
87  //msks.print();
88 
89  // get track segments from BBMX chamber trigger
90  receiveBBMXData(bx, e, c);
91 
92 }
L1MuDTTFParameters l1mudttfparams
L1MuDTTFParameters pars
L1MuDTTFMasks l1mudttfmasks
void get(HolderT &iHolder) const
T get() const
Definition: EventSetup.h:62
edm::ESHandle< L1TMuonBarrelParams > bmtfParamsHandle
T const * product() const
Definition: ESHandle.h:86
void receiveBBMXData(int bx, const edm::Event &e, const edm::EventSetup &c)
receive track segment data from BBMX chamber trigger

Member Data Documentation

edm::ESHandle< L1TMuonBarrelParams > L1MuBMSectorReceiver::bmtfParamsHandle
private

Definition at line 87 of file L1MuBMSectorReceiver.h.

Referenced by run().

edm::EDGetTokenT<L1MuDTChambPhContainer> L1MuBMSectorReceiver::m_DTDigiToken
private

Definition at line 93 of file L1MuBMSectorReceiver.h.

Referenced by receiveBBMXData().

L1MuBMSectorProcessor& L1MuBMSectorReceiver::m_sp
private

Definition at line 85 of file L1MuBMSectorReceiver.h.

Referenced by address2sector(), address2wheel(), and receiveBBMXData().

L1MuDTTFMasks L1MuBMSectorReceiver::msks
private

Definition at line 88 of file L1MuBMSectorReceiver.h.

Referenced by receiveBBMXData(), and run().

L1MuDTTFParameters L1MuBMSectorReceiver::pars
private

Definition at line 89 of file L1MuBMSectorReceiver.h.

Referenced by receiveBBMXData(), and run().