CMS 3D CMS Logo

L1MuBMSectorReceiver.cc
Go to the documentation of this file.
1 //-------------------------------------------------
2 //
3 // Class: L1MuBMSectorReceiver
4 //
5 // Description: Sector Receiver
6 //
7 //
8 //
9 // Author :
10 // N. Neumeister CERN EP
11 // J. Troconiz UAM Madrid
12 //
13 //--------------------------------------------------
14 
15 //-----------------------
16 // This Class's Header --
17 //-----------------------
18 
20 
21 //---------------
22 // C++ Headers --
23 //---------------
24 
25 #include <iostream>
26 #include <cmath>
27 
28 //-------------------------------
29 // Collaborating Class Headers --
30 //-------------------------------
31 
37 
42 
43 using namespace std;
44 
45 // --------------------------------
46 // class L1MuBMSectorReceiver
47 //---------------------------------
48 
49 //----------------
50 // Constructors --
51 //----------------
53  : m_sp(sp), m_DTDigiToken(iC.consumes<L1MuDTChambPhContainer>(L1MuBMTFConfig::getBMDigiInputTag())) {}
54 
55 //--------------
56 // Destructor --
57 //--------------
59  // reset();
60 }
61 
62 //--------------
63 // Operations --
64 //--------------
65 
66 //
67 // receive track segment data from the BBMX chamber triggers
68 //
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 }
84 
85 //
86 // clear
87 //
89 
90 //
91 // receive track segment data from the BBMX chamber trigger
92 //
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 }
227 
228 //
229 // find the right sector for a given address
230 //
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 }
241 
242 //
243 // find the right wheel for a given address
244 //
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 }
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
L1MuBMSectorReceiver::address2sector
int address2sector(int adr) const
find the right sector for a given address
Definition: L1MuBMSectorReceiver.cc:231
L1MuBMSectorReceiver::run
void run(int bx, const edm::Event &e, const edm::EventSetup &c)
receive track segment data from the BBMX and CSC chamber triggers
Definition: L1MuBMSectorReceiver.cc:69
L1MuDTTFParameters::get_soc_stdis_n
unsigned short int get_soc_stdis_n(int wh, int sc) const
Definition: L1MuDTTFParameters.cc:126
L1MuBMTrackSegPhi
Definition: L1MuBMTrackSegPhi.h:41
L1MuBMSectorReceiver::pars
L1MuDTTFParameters pars
Definition: L1MuBMSectorReceiver.h:85
L1MuDTChambPhContainer::chPhiSegm1
L1MuDTChambPhDigi const * chPhiSegm1(int wheel, int stat, int sect, int bx) const
Definition: L1MuDTChambPhContainer.cc:67
L1MuDTTFParameters::get_soc_nbx_del
bool get_soc_nbx_del(int wh, int sc) const
Definition: L1MuDTTFParameters.cc:246
L1MuDTTFParameters::get_inrec_qual_st3
unsigned short int get_inrec_qual_st3(int wh, int sc) const
Definition: L1MuDTTFParameters.cc:102
L1MuDTTFMasks::get_inrec_chdis_st1
bool get_inrec_chdis_st1(int wh, int sc) const
Definition: L1MuDTTFMasks.cc:69
relativeConstraints.station
station
Definition: relativeConstraints.py:67
L1MuDTTFParameters.h
L1MuDTTFParameters::get_inrec_qual_st2
unsigned short int get_inrec_qual_st2(int wh, int sc) const
Definition: L1MuDTTFParameters.cc:90
L1TMuonBarrelParams::l1mudttfparams
L1MuDTTFParameters l1mudttfparams
Definition: L1TMuonBarrelParams.h:65
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
L1MuBMTrackSegPhi.h
L1MuDTTFParameters::get_soc_stdis_wr
unsigned short int get_soc_stdis_wr(int wh, int sc) const
Definition: L1MuDTTFParameters.cc:150
L1MuBMSectorReceiver::bmtfParamsHandle
edm::ESHandle< L1TMuonBarrelParams > bmtfParamsHandle
Definition: L1MuBMSectorReceiver.h:83
L1MuBMSectorReceiver::~L1MuBMSectorReceiver
virtual ~L1MuBMSectorReceiver()
destructor
Definition: L1MuBMSectorReceiver.cc:58
edm::Handle< L1MuDTChambPhContainer >
L1MuDTChambPhDigi::phiB
int phiB() const
Definition: L1MuDTChambPhDigi.cc:76
L1MuBMSectorProcessor
Definition: L1MuBMSectorProcessor.h:54
L1MuBMSecProcId::sector
int sector() const
return sector number
Definition: L1MuBMSecProcId.h:58
L1MuDTChambPhContainer
Definition: L1MuDTChambPhContainer.h:33
L1MuBMSecProcId::wheel
int wheel() const
return wheel number
Definition: L1MuBMSecProcId.h:55
L1MuBMTFConfig::getNbitsExtPhi
static int getNbitsExtPhi()
Definition: L1MuBMTFConfig.h:68
L1MuBMTFConfig::getTSOutOfTimeFilter
static bool getTSOutOfTimeFilter()
Definition: L1MuBMTFConfig.h:66
L1MuBMTrackSegLoc.h
L1TMuonBarrelParams::l1mudttfmasks
L1MuDTTFMasks l1mudttfmasks
Definition: L1TMuonBarrelParams.h:66
GlobalPosition_Frontier_DevDB_cff.tag
tag
Definition: GlobalPosition_Frontier_DevDB_cff.py:11
L1MuDTChambPhDigi::phi
int phi() const
Definition: L1MuDTChambPhDigi.cc:74
L1MuDTTFParameters::get_soc_stdis_zl
unsigned short int get_soc_stdis_zl(int wh, int sc) const
Definition: L1MuDTTFParameters.cc:162
L1MuBMSectorReceiver::L1MuBMSectorReceiver
L1MuBMSectorReceiver(L1MuBMSectorProcessor &, edm::ConsumesCollector &&iC)
constructor
Definition: L1MuBMSectorReceiver.cc:52
L1MuBMSectorReceiver::m_DTDigiToken
edm::EDGetTokenT< L1MuDTChambPhContainer > m_DTDigiToken
Definition: L1MuBMSectorReceiver.h:89
L1MuBMSectorReceiver::m_sp
L1MuBMSectorProcessor & m_sp
Definition: L1MuBMSectorReceiver.h:81
L1MuDTTFMasks::get_inrec_chdis_st2
bool get_inrec_chdis_st2(int wh, int sc) const
Definition: L1MuDTTFMasks.cc:81
L1MuDTTFMasks::get_inrec_chdis_st3
bool get_inrec_chdis_st3(int wh, int sc) const
Definition: L1MuDTTFMasks.cc:93
L1MuBMSecProcId::locwheel
int locwheel() const
return physical wheel number (-2,-1,0,+1,+2)
Definition: L1MuBMSecProcId.cc:79
L1MuDTTFParameters::get_inrec_qual_st4
unsigned short int get_inrec_qual_st4(int wh, int sc) const
Definition: L1MuDTTFParameters.cc:114
L1MuDTTFMasks.h
L1MuBMSectorProcessor::id
const L1MuBMSecProcId & id() const
return Sector Processor identifier
Definition: L1MuBMSectorProcessor.h:75
L1MuBMSectorReceiver::address2wheel
int address2wheel(int adr) const
find the right wheel for a given address
Definition: L1MuBMSectorReceiver.cc:245
L1MuDTChambPhContainer::chPhiSegm2
L1MuDTChambPhDigi const * chPhiSegm2(int wheel, int stat, int sect, int bx) const
Definition: L1MuDTChambPhContainer.cc:78
L1MuBMTFConfig.h
makeMuonMisalignmentScenario.wheel
wheel
Definition: makeMuonMisalignmentScenario.py:319
tolerance
const double tolerance
Definition: HGCalGeomParameters.cc:26
L1MuBMSectorReceiver::reset
void reset()
clear Sector Receiver
Definition: L1MuBMSectorReceiver.cc:88
L1MuBMTFConfig::getTSOutOfTimeWindow
static int getTSOutOfTimeWindow()
Definition: L1MuBMTFConfig.h:67
edm::EventSetup
Definition: EventSetup.h:57
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
L1MuBMDataBuffer::addTSphi
void addTSphi(int adr, const L1MuBMTrackSegPhi &)
add new phi track segment to the Data Buffer
Definition: L1MuBMDataBuffer.cc:85
L1MuDTTFMasks::get_inrec_chdis_st4
bool get_inrec_chdis_st4(int wh, int sc) const
Definition: L1MuDTTFMasks.cc:105
DDAxes::phi
L1MuBMSectorReceiver::msks
L1MuDTTFMasks msks
Definition: L1MuBMSectorReceiver.h:84
L1MuBMSectorProcessor::data
const L1MuBMDataBuffer * data() const
return pointer to Data Buffer
Definition: L1MuBMSectorProcessor.h:87
std
Definition: JetResolutionObject.h:76
L1MuDTTFParameters::get_inrec_qual_st1
unsigned short int get_inrec_qual_st1(int wh, int sc) const
Definition: L1MuDTTFParameters.cc:78
L1MuBMSectorReceiver.h
L1MuBMDataBuffer.h
edm::eventsetup::EventSetupRecordImplementation::get
PRODUCT const & get(ESGetToken< PRODUCT, T > const &iToken) const
Definition: EventSetupRecordImplementation.h:74
L1TMuonBarrelParams
Definition: L1TMuonBarrelParams.h:23
L1MuDTTFMasksRcd.h
L1MuBMSectorReceiver::receiveBBMXData
void receiveBBMXData(int bx, const edm::Event &e, const edm::EventSetup &c)
receive track segment data from BBMX chamber trigger
Definition: L1MuBMSectorReceiver.cc:93
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
L1MuDTTFParametersRcd.h
L1MuBMTFConfig
Definition: L1MuBMTFConfig.h:41
L1MuDTTFParameters::get_soc_stdis_zr
unsigned short int get_soc_stdis_zr(int wh, int sc) const
Definition: L1MuDTTFParameters.cc:174
edm::Event
Definition: Event.h:73
L1MuDTChambPhDigi::code
int code() const
Definition: L1MuDTChambPhDigi.cc:78
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
L1TMuonBarrelParamsRcd
Definition: L1TMuonBarrelParamsRcd.h:13
L1MuBMSectorProcessor.h
L1MuDTChambPhDigi
Definition: L1MuDTChambPhDigi.h:31
L1MuDTTFParameters::get_soc_stdis_wl
unsigned short int get_soc_stdis_wl(int wh, int sc) const
Definition: L1MuDTTFParameters.cc:138
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37