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.

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 58 of file L1MuBMSectorReceiver.cc.

58  {
59  // reset();
60 }

Member Function Documentation

int L1MuBMSectorReceiver::address2sector ( int  adr) const
private

find the right sector for a given address

Definition at line 231 of file L1MuBMSectorReceiver.cc.

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

Referenced by receiveBBMXData().

231  {
232  int sector = m_sp.id().sector();
233 
234  if (adr >= 4 && adr <= 7)
235  sector = (sector + 13) % 12; // +1
236  if (adr >= 8 && adr <= 11)
237  sector = (sector + 11) % 12; // -1
238 
239  return sector;
240 }
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 245 of file L1MuBMSectorReceiver.cc.

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

Referenced by receiveBBMXData().

245  {
246  int wheel = m_sp.id().locwheel();
247 
248  // for 2, 3, 6, 7, 10, 11
249  if ((adr / 2) % 2 == 1)
250  wheel = m_sp.id().wheel();
251 
252  return wheel;
253 }
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 93 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().

93  {
95  //e.getByLabel(L1MuBMTFConfig::getBMDigiInputTag(),dttrig);
96  e.getByToken(m_DTDigiToken, dttrig);
97  L1MuDTChambPhDigi const* ts = nullptr;
98 
99  // const int bx_offset = dttrig->correctBX();
100  int bx_offset = 0;
101  bx = bx + bx_offset;
102  // get BBMX phi track segments
103  int address = 0;
104  for (int station = 1; station <= 4; station++) {
105  int max_address = (station == 1) ? 2 : 12;
106  for (int reladr = 0; reladr < max_address; reladr++) {
107  address++;
108  //if ( m_sp.ovl() && (reladr/2)%2 != 0 ) continue;
109  int wheel = address2wheel(reladr);
110  int sector = address2sector(reladr);
111  //if ( (wheel==2 || wheel==-2) && station==1 ) continue;
112 
113  if (reladr % 2 == 0)
114  ts = dttrig->chPhiSegm1(wheel, station, sector, bx);
115  if (reladr % 2 == 1)
116  ts = dttrig->chPhiSegm2(wheel, station, sector, bx - 1);
117  if (ts) {
118  int phi = ts->phi();
119  // int phib = ts->phiB();
120  int phib = 0;
121  if (station != 3)
122  phib = ts->phiB();
123 
124  int qual = ts->code();
125  bool tag = (reladr % 2 == 1) ? true : false;
126 
127  int lwheel = m_sp.id().wheel();
128  lwheel = abs(lwheel) / lwheel * (abs(wheel) + 1);
129 
130  if (station == 1) {
131  if (msks.get_inrec_chdis_st1(lwheel, sector))
132  continue;
133  if (qual < pars.get_inrec_qual_st1(lwheel, sector))
134  continue;
135  } else if (station == 2) {
136  if (msks.get_inrec_chdis_st2(lwheel, sector))
137  continue;
138  if (qual < pars.get_inrec_qual_st2(lwheel, sector))
139  continue;
140  } else if (station == 3) {
141  if (msks.get_inrec_chdis_st3(lwheel, sector))
142  continue;
143  if (qual < pars.get_inrec_qual_st3(lwheel, sector))
144  continue;
145  } else if (station == 4) {
146  if (msks.get_inrec_chdis_st4(lwheel, sector))
147  continue;
148  if (qual < pars.get_inrec_qual_st4(lwheel, sector))
149  continue;
150  }
151 
152  if (reladr / 2 == 1 && qual < pars.get_soc_stdis_n(m_sp.id().wheel(), m_sp.id().sector()))
153  continue;
154  if (reladr / 2 == 2 && qual < pars.get_soc_stdis_wl(m_sp.id().wheel(), m_sp.id().sector()))
155  continue;
156  if (reladr / 2 == 3 && qual < pars.get_soc_stdis_zl(m_sp.id().wheel(), m_sp.id().sector()))
157  continue;
158  if (reladr / 2 == 4 && qual < pars.get_soc_stdis_wr(m_sp.id().wheel(), m_sp.id().sector()))
159  continue;
160  if (reladr / 2 == 5 && qual < pars.get_soc_stdis_zr(m_sp.id().wheel(), m_sp.id().sector()))
161  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  int sh_phi = 12 - L1MuBMTFConfig::getNbitsExtPhi();
172 
173  L1MuDTChambPhDigi const* tsPreviousBX_1 = dttrig->chPhiSegm1(wheel, station, sector, bx - 1);
174  if (tsPreviousBX_1) {
175  int phiBX = tsPreviousBX_1->phi();
176  int qualBX = tsPreviousBX_1->code();
177  if (abs((phi >> sh_phi) - (phiBX >> sh_phi)) <= tolerance && qualBX > qual)
178  skipTS = true;
179  }
180 
181  L1MuDTChambPhDigi const* tsPreviousBX_2 = dttrig->chPhiSegm2(wheel, station, sector, bx - 1);
182  if (tsPreviousBX_2) {
183  int phiBX = tsPreviousBX_2->phi();
184  int qualBX = tsPreviousBX_2->code();
185  if (abs((phi >> sh_phi) - (phiBX >> sh_phi)) <= tolerance && qualBX > qual)
186  skipTS = true;
187  }
188 
189  L1MuDTChambPhDigi const* tsNextBX_1 = dttrig->chPhiSegm1(wheel, station, sector, bx + 1);
190  if (tsNextBX_1) {
191  int phiBX = tsNextBX_1->phi();
192  int qualBX = tsNextBX_1->code();
193  if (abs((phi >> sh_phi) - (phiBX >> sh_phi)) <= tolerance && qualBX > qual)
194  skipTS = true;
195  }
196 
197  L1MuDTChambPhDigi const* tsNextBX_2 = dttrig->chPhiSegm2(wheel, station, sector, bx + 1);
198  if (tsNextBX_2) {
199  int phiBX = tsNextBX_2->phi();
200  int qualBX = tsNextBX_2->code();
201  if (abs((phi >> sh_phi) - (phiBX >> sh_phi)) <= tolerance && qualBX > qual)
202  skipTS = true;
203  }
204  }
205 
206  if (!skipTS) {
207  /* if(reladr%2 == 0) {
208  L1MuBMTrackSegPhi tmpts(wheel,sector,station,phi,phib,
209  static_cast<L1MuBMTrackSegPhi::TSQuality>(qual),
210  tag,bx-bx_offset);
211  m_sp.data()->addTSphi(address-1,tmpts);
212  }
213  if(reladr%2 == 1) {
214  L1MuBMTrackSegPhi tmpts(wheel,sector,station,phi,phib,
215  static_cast<L1MuBMTrackSegPhi::TSQuality>(qual),
216  tag,bx+1);
217  m_sp.data()->addTSphi(address-1,tmpts);
218  }*/
219  L1MuBMTrackSegPhi tmpts(
220  wheel, sector, station, phi, phib, static_cast<L1MuBMTrackSegPhi::TSQuality>(qual), tag, bx - bx_offset);
221  m_sp.data()->addTSphi(address - 1, tmpts);
222  }
223  }
224  }
225  }
226 }
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:525
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 88 of file L1MuBMSectorReceiver.cc.

Referenced by L1MuBMSectorProcessor::reset().

88 {}
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 69 of file L1MuBMSectorReceiver.cc.

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

Referenced by L1MuBMSectorProcessor::run().

69  {
70  //c.get< L1MuDTTFParametersRcd >().get( pars );
71  //c.get< L1MuDTTFMasksRcd >().get( msks );
72 
73  const L1TMuonBarrelParamsRcd& bmtfParamsRcd = c.get<L1TMuonBarrelParamsRcd>();
74  bmtfParamsRcd.get(bmtfParamsHandle);
75  const L1TMuonBarrelParams& bmtfParams = *bmtfParamsHandle.product();
76  msks = bmtfParams.l1mudttfmasks;
77  pars = bmtfParams.l1mudttfparams;
78  //pars.print();
79  //msks.print();
80 
81  // get track segments from BBMX chamber trigger
82  receiveBBMXData(bx, e, c);
83 }
L1MuDTTFParameters l1mudttfparams
L1MuDTTFParameters pars
PRODUCT const & get(ESGetToken< PRODUCT, T > const &iToken) const
edm::ESHandle< L1TMuonBarrelParams > bmtfParamsHandle
L1MuDTTFMasks l1mudttfmasks
T get() const
Definition: EventSetup.h:73
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 83 of file L1MuBMSectorReceiver.h.

Referenced by run().

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

Definition at line 89 of file L1MuBMSectorReceiver.h.

Referenced by receiveBBMXData().

L1MuBMSectorProcessor& L1MuBMSectorReceiver::m_sp
private

Definition at line 81 of file L1MuBMSectorReceiver.h.

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

L1MuDTTFMasks L1MuBMSectorReceiver::msks
private

Definition at line 84 of file L1MuBMSectorReceiver.h.

Referenced by receiveBBMXData(), and run().

L1MuDTTFParameters L1MuBMSectorReceiver::pars
private

Definition at line 85 of file L1MuBMSectorReceiver.h.

Referenced by receiveBBMXData(), and run().