CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MuonTriggerPrimitive.cc
Go to the documentation of this file.
2 
3 // the primitive types we can use
8 
9 // detector ID types
13 
14 using namespace l1t;
15 
16 namespace {
17  const char subsystem_names[][4] = {"DT","CSC","RPC"};
18 }
19 
20 //constructors from DT data
22  const L1MuDTChambPhDigi& digi_phi,
23  const int segment_number):
24  _id(detid),
25  _subsystem(MuonTriggerPrimitive::kDT) {
27  // fill in information from theta trigger
28  _dt.theta_bti_group = -1;
29  _dt.segment_number = segment_number;
30  _dt.theta_code = -1;
31  _dt.theta_quality = -1;
32  // now phi trigger
33  _dt.bx = digi_phi.bxNum();
34  _dt.wheel = digi_phi.whNum();
35  _dt.sector = digi_phi.scNum();
36  _dt.station = digi_phi.stNum();
37  _dt.radialAngle = digi_phi.phi();
38  _dt.bendingAngle = digi_phi.phiB();
39  _dt.qualityCode = digi_phi.code();
40  _dt.Ts2TagCode = digi_phi.Ts2Tag();
41  _dt.BxCntCode = digi_phi.BxCnt();
42 }
43 
45  const L1MuDTChambThDigi& digi_th,
46  const int theta_bti_group):
47  _id(detid),
48  _subsystem(MuonTriggerPrimitive::kDT) {
50  // fill in information from theta trigger
51  _dt.theta_bti_group = theta_bti_group;
52  _dt.segment_number = digi_th.position(theta_bti_group);
53  _dt.theta_code = digi_th.code(theta_bti_group);
54  _dt.theta_quality = digi_th.quality(theta_bti_group);
55  // now phi trigger
56  _dt.bx = digi_th.bxNum();
57  _dt.wheel = digi_th.whNum();
58  _dt.sector = digi_th.scNum();
59  _dt.station = digi_th.stNum();
60  _dt.radialAngle = -1;
61  _dt.bendingAngle = -1;
62  _dt.qualityCode = -1;
63  _dt.Ts2TagCode = -1;
64  _dt.BxCntCode = -1;
65 }
66 
68  const L1MuDTChambPhDigi& digi_phi,
69  const L1MuDTChambThDigi& digi_th,
70  const int theta_bti_group):
71  _id(detid),
72  _subsystem(MuonTriggerPrimitive::kDT) {
74  // fill in information from theta trigger
75  _dt.theta_bti_group = theta_bti_group;
76  _dt.segment_number = digi_th.position(theta_bti_group);
77  _dt.theta_code = digi_th.code(theta_bti_group);
78  _dt.theta_quality = digi_th.quality(theta_bti_group);
79  // now phi trigger
80  _dt.bx = digi_phi.bxNum();
81  _dt.wheel = digi_phi.whNum();
82  _dt.sector = digi_phi.scNum();
83  _dt.station = digi_phi.stNum();
84  _dt.radialAngle = digi_phi.phi();
85  _dt.bendingAngle = digi_phi.phiB();
86  _dt.qualityCode = digi_phi.code();
87  _dt.Ts2TagCode = digi_phi.Ts2Tag();
88  _dt.BxCntCode = digi_phi.BxCnt();
89 }
90 
91 //constructor from CSC data
93  const CSCCorrelatedLCTDigi& digi):
94  _id(detid),
95  _subsystem(MuonTriggerPrimitive::kCSC) {
97  _csc.trknmb = digi.getTrknmb();
98  _csc.valid = digi.isValid();
99  _csc.quality = digi.getQuality();
100  _csc.keywire = digi.getKeyWG();
101  _csc.strip = digi.getStrip();
102  _csc.pattern = digi.getPattern();
103  _csc.bend = digi.getBend();
104  _csc.bx = digi.getBX();
105  _csc.mpclink = digi.getMPCLink();
106  _csc.bx0 = digi.getBX0();
107  _csc.syncErr = digi.getSyncErr();
108  _csc.cscID = digi.getCSCID();
109 }
110 
111 // constructor from RPC data
113  const unsigned strip,
114  const unsigned layer,
115  const uint16_t bx):
116  _id(detid),
117  _subsystem(MuonTriggerPrimitive::kRPC) {
119  _rpc.strip = strip;
120  _rpc.layer = layer;
121  _rpc.bx = bx;
122 }
123 
125  _dt(tp._dt),
126  _csc(tp._csc),
127  _rpc(tp._rpc),
128  _id(tp._id),
129  _subsystem(tp._subsystem),
130  _globalsector(tp._globalsector),
131  _subsector(tp._subsector),
132  _eta(tp._eta),
133  _phi(tp._phi),
134  _theta(tp._theta){
135 }
136 
138  this->_dt = tp._dt;
139  this->_csc = tp._csc;
140  this->_rpc = tp._rpc;
141  this->_id = tp._id;
142  this->_subsystem = tp._subsystem;
143  this->_globalsector = tp._globalsector;
144  this->_subsector = tp._subsector;
145  this->_eta = tp._eta;
146  this->_phi = tp._phi;
147  return *this;
148 }
149 
151  return ( this->_dt.bx == tp._dt.bx &&
152  this->_dt.wheel == tp._dt.wheel &&
153  this->_dt.sector == tp._dt.sector &&
154  this->_dt.station == tp._dt.station &&
155  this->_dt.radialAngle == tp._dt.radialAngle &&
156  this->_dt.bendingAngle == tp._dt.bendingAngle &&
157  this->_dt.qualityCode == tp._dt.qualityCode &&
158  this->_dt.Ts2TagCode == tp._dt.Ts2TagCode &&
159  this->_dt.BxCntCode == tp._dt.BxCntCode &&
160  this->_dt.theta_bti_group == tp._dt.theta_bti_group &&
161  this->_dt.segment_number == tp._dt.segment_number &&
162  this->_dt.theta_code == tp._dt.theta_code &&
163  this->_dt.theta_quality == tp._dt.theta_quality &&
164  this->_csc.trknmb == tp._csc.trknmb &&
165  this->_csc.valid == tp._csc.valid &&
166  this->_csc.quality == tp._csc.quality &&
167  this->_csc.keywire == tp._csc.keywire &&
168  this->_csc.strip == tp._csc.strip &&
169  this->_csc.pattern == tp._csc.pattern &&
170  this->_csc.bend == tp._csc.bend &&
171  this->_csc.bx == tp._csc.bx &&
172  this->_csc.mpclink == tp._csc.mpclink &&
173  this->_csc.bx0 == tp._csc.bx0 &&
174  this->_csc.syncErr == tp._csc.syncErr &&
175  this->_csc.cscID == tp._csc.cscID &&
176  this->_rpc.strip == tp._rpc.strip &&
177  this->_rpc.layer == tp._rpc.layer &&
178  this->_rpc.bx == tp._rpc.bx &&
179  this->_id == tp._id &&
180  this->_subsystem == tp._subsystem &&
181  this->_globalsector == tp._globalsector &&
182  this->_subsector == tp._subsector );
183 }
184 
185 const int MuonTriggerPrimitive::getBX() const {
186  switch(_subsystem) {
187  case kDT:
188  return _dt.bx;
189  case kCSC:
190  return _csc.bx;
191  case kRPC:
192  return _rpc.bx;
193  default:
194  throw cms::Exception("Invalid Subsytem")
195  << "The specified subsystem for this track stub is out of range"
196  << std::endl;
197  }
198  return -1;
199 }
200 
202  switch(_subsystem) {
203  case kDT:
204  return -1;
205  case kCSC:
206  return _csc.strip;
207  case kRPC:
208  return _rpc.strip;
209  default:
210  throw cms::Exception("Invalid Subsytem")
211  << "The specified subsystem for this track stub is out of range"
212  << std::endl;
213  }
214  return -1;
215 }
216 
217 const int MuonTriggerPrimitive::getWire() const {
218  switch(_subsystem) {
219  case kDT:
220  return -1;
221  case kCSC:
222  return _csc.keywire;
223  case kRPC:
224  return -1;
225  default:
226  throw cms::Exception("Invalid Subsytem")
227  << "The specified subsystem for this track stub is out of range"
228  << std::endl;
229  }
230  return -1;
231 }
232 
234  switch(_subsystem) {
235  case kDT:
236  return -1;
237  case kCSC:
238  return _csc.pattern;
239  case kRPC:
240  return -1;
241  default:
242  throw cms::Exception("Invalid Subsytem")
243  << "The specified subsystem for this track stub is out of range"
244  << std::endl;
245  }
246  return -1;
247 }
248 const int MuonTriggerPrimitive::Id() const {
249  switch(_subsystem) {
250  case kDT:
251  return -1;
252  case kCSC:
253  return _csc.cscID;
254  case kRPC:
255  return -1;
256  default:
257  throw cms::Exception("Invalid Subsytem")
258  << "The specified subsystem for this track stub is out of range"
259  << std::endl;
260  }
261  return -1;
262 }
263 
265  unsigned& global_sector,
266  unsigned& subsector ) {
267 }
268 
270  unsigned& global_sector,
271  unsigned& subsector ) {
272 }
273 
275  unsigned& global_sector,
276  unsigned& subsector ) {
277 }
278 
279 void MuonTriggerPrimitive::print(std::ostream& out) const {
280  unsigned idx = (unsigned) _subsystem;
281  out << subsystem_names[idx] << " Trigger Primitive" << std::endl;
282  out << "eta: " << _eta << " phi: " << _phi
283  << " bend: " << _theta << std::endl;
284  switch(_subsystem) {
285  case kDT:
286  out << detId<DTChamberId>() << std::endl;
287  out << "Local BX : " << _dt.bx << std::endl;
288  out << "Segment Nmb : " << _dt.segment_number << std::endl;
289  out << "Packed Phi : " << _dt.radialAngle << std::endl;
290  out << "Packed Bend : " << _dt.bendingAngle << std::endl;
291  out << "Quality Code : " << _dt.qualityCode << std::endl;
292  out << "Ts2Tag Code : " << _dt.Ts2TagCode << std::endl;
293  out << "BXCnt Code : " << _dt.BxCntCode << std::endl;
294  out << "Theta BTI Grp : " << _dt.theta_bti_group << std::endl;
295  out << "Theta Code : " << _dt.theta_code << std::endl;
296  out << "Theta Quality : " << _dt.theta_quality << std::endl;
297  break;
298  case kCSC:
299  out << detId<CSCDetId>() << std::endl;
300  out << "Local BX : " << _csc.bx << std::endl;
301  out << "Segment Nmb : " << _csc.trknmb << std::endl;
302  out << "Segment Valid : " << _csc.valid << std::endl;
303  out << "Quality Code : " << _csc.quality << std::endl;
304  out << "Key Wire Grp : " << _csc.keywire << std::endl;
305  out << "Half-Strip : " << _csc.strip << std::endl;
306  out << "CLCT Pattern : " << _csc.pattern << std::endl;
307  out << "Packed Bend : " << _csc.bend << std::endl;
308  out << "MPC Link : " << _csc.mpclink << std::endl;
309  out << "BX0 : " << _csc.bx0 << std::endl;
310  out << "Sync Error : " << _csc.syncErr << std::endl;
311  out << "CSCID : " << _csc.cscID << std::endl;
312  break;
313  case kRPC:
314  out << detId<RPCDetId>() << std::endl;
315  out << "Local BX : " << _rpc.bx << std::endl;
316  out << "Strip : " << _rpc.strip << std::endl;
317  out << "Layer : " << _rpc.layer << std::endl;
318  break;
319  default:
320  throw cms::Exception("Invalid Subsytem")
321  << "The specified subsystem for this track stub is out of range"
322  << std::endl;
323  }
324 }
int getStrip() const
return the key halfstrip from 0,159
uint16_t getSyncErr() const
void calculateRPCGlobalSector(const RPCDetId &chid, unsigned &global_sector, unsigned &subsector)
int getQuality() const
return the 4 bit Correlated LCT Quality
int getBend() const
return bend
int quality(const int i) const
int position(const int i) const
uint16_t getCSCID() const
void calculateDTGlobalSector(const DTChamberId &chid, unsigned &global_sector, unsigned &subsector)
int getTrknmb() const
return track number
int getBX() const
return BX
uint16_t getBX0() const
tuple out
Definition: dbtoconf.py:99
MuonTriggerPrimitive & operator=(const MuonTriggerPrimitive &tp)
tuple idx
DEBUGGING if hasattr(process,&quot;trackMonIterativeTracking2012&quot;): print &quot;trackMonIterativeTracking2012 D...
int code(const int i) const
bool operator==(const MuonTriggerPrimitive &tp) const
int getMPCLink() const
return MPC link number, 0 means not sorted, 1-3 give MPC sorting rank
bool isValid() const
return valid pattern bit
int getPattern() const
return pattern
void print(std::ostream &) const
void calculateCSCGlobalSector(const CSCDetId &chid, unsigned &global_sector, unsigned &subsector)
int getKeyWG() const
return the key wire group