CMS 3D CMS Logo

CSCTMBHeader2020_GEM.cc
Go to the documentation of this file.
4 
5 const std::vector<std::pair<unsigned, unsigned> >
6  run3_pattern_lookup_tbl = {{0, 0}, {0, 1}, {0, 2}, {0, 3}, {0, 4},
7  {0, 0}, {0, 1}, {0, 2}, {0, 3}, {0, 4}, {1, 0}, {1, 1}, {1, 2}, {1, 3},
8  {1, 4}, {2, 0}, {2, 1}, {2, 2}, {2, 3}, {2, 4}, {3, 0}, {3, 1}, {3, 2},
9  {3, 3}, {3, 4}, {4, 0}, {4, 1}, {4, 2}, {4, 3}, {4, 4}};
10 
11 const unsigned run2_pattern_lookup_tbl[2][16] = {{10, 10, 10, 8, 8, 8, 6, 6, 6, 4, 4, 4, 2, 2, 2, 2},
12  {10, 10, 10, 9, 9, 9, 7, 7, 7, 5, 5, 5, 3, 3, 3, 3}};
13 
15  bzero(data(), sizeInWords() * 2);
16  bits.nHeaderFrames = 42;
17  bits.e0bline = 0x6E0B;
18  bits.b0cline = 0xDB0C;
19  bits.firmRevCode = 0x601;
20  bits.nTBins = 12;
21  bits.nCFEBs = 7;
24  bits.fifo_tbins_gem_ = 12;
25  bits.gem_enabled_fibers_ = 0xf;
26 }
27 
28 CSCTMBHeader2020_GEM::CSCTMBHeader2020_GEM(const unsigned short* buf) { memcpy(data(), buf, sizeInWords() * 2); }
29 
31  bits.cscID = dmbHeader.dmbID();
32  bits.l1aNumber = dmbHeader.l1a();
33  bits.bxnCount = dmbHeader.bxn();
34 }
35 
37 std::vector<CSCCLCTDigi> CSCTMBHeader2020_GEM::CLCTDigis(uint32_t idlayer) {
38  std::vector<CSCCLCTDigi> result;
39  unsigned halfstrip = bits.clct0_key_low + (bits.clct0_key_high << 7);
40  unsigned strip = halfstrip % 32;
41  // CLCT0 1/4 strip bit
42  bool quartstrip = (bits.clct0_xky >> 1) & 0x1;
43  // CLCT1 1/8 strip bit
44  bool eighthstrip = bits.clct0_xky & 0x1;
45  unsigned cfeb = halfstrip / 32;
46 
48  unsigned run3_pattern = bits.clct0_shape & 0x7; // 3-bit Run3 CLCT PatternID
49  unsigned bend = bits.clct0_LR_bend;
50  unsigned slope = bits.clct0_slope;
51  unsigned run2_pattern = run2_pattern_lookup_tbl[bend][slope];
52 
53  CSCCLCTDigi digi0(bits.clct0_valid,
54  bits.clct0_quality,
55  run2_pattern,
56  1,
57  bend,
58  strip,
59  cfeb,
60  bits.clct_bxn,
61  1,
62  bits.bxnPreTrigger,
63  bits.clct0_comparator_code,
65  quartstrip,
66  eighthstrip,
67  run3_pattern,
68  slope);
69 
70  halfstrip = bits.clct1_key_low + (bits.clct1_key_high << 7);
71  strip = halfstrip % 32;
72  // CLCT0 1/4 strip bit
73  quartstrip = (bits.clct1_xky >> 1) & 0x1;
74  // CLCT1 1/8 strip bit
75  eighthstrip = bits.clct1_xky & 0x1;
76  cfeb = halfstrip / 32;
77 
78  // CLCT LR bend and slope are from dedicated header fields
79  run3_pattern = bits.clct1_shape & 0x7; // 3-bit Run3 CLCT PatternID
80  bend = bits.clct1_LR_bend;
81  slope = bits.clct1_slope;
82  run2_pattern = run2_pattern_lookup_tbl[bend][slope];
83 
84  CSCCLCTDigi digi1(bits.clct1_valid,
85  bits.clct1_quality,
86  run2_pattern,
87  1,
88  bend,
89  strip,
90  cfeb,
91  bits.clct_bxn,
92  2,
93  bits.bxnPreTrigger,
94  bits.clct1_comparator_code,
96  quartstrip,
97  eighthstrip,
98  run3_pattern,
99  slope);
100 
101  result.push_back(digi0);
102  result.push_back(digi1);
103  return result;
104 }
105 
107 std::vector<CSCCorrelatedLCTDigi> CSCTMBHeader2020_GEM::CorrelatedLCTDigis(uint32_t idlayer) const {
108  std::vector<CSCCorrelatedLCTDigi> result;
110  unsigned strip = bits.MPC_Muon0_clct_key_halfstrip; //this goes from 0-223
111  unsigned slope = (bits.MPC_Muon0_clct_bend_low & 0x7) | (bits.MPC_Muon0_clct_bend_bit4 << 3);
112  unsigned hmt = bits.MPC_Muon_HMT_bit0 | (bits.MPC_Muon_HMT_high << 1); // HighMultiplicityTrigger
113  unsigned clct_pattern_id = bits.MPC_Muon_clct_pattern_low | (bits.MPC_Muon_clct_pattern_bit5 << 4);
114 
115  std::pair<unsigned, unsigned> run3_pattern_pair = run3_pattern_lookup_tbl[clct_pattern_id % 30];
116  unsigned run2_pattern = run2_pattern_lookup_tbl[bits.MPC_Muon0_clct_LR][slope];
117  unsigned run3_pattern = run3_pattern_pair.second & 0x7;
118 
119  CSCCorrelatedLCTDigi digi(1,
120  bits.MPC_Muon0_lct_vpf,
121  bits.MPC_Muon0_lct_quality,
122  bits.MPC_Muon0_alct_key_wire,
123  strip,
124  run2_pattern,
125  bits.MPC_Muon0_clct_LR,
126  bits.MPC_Muon_alct_bxn,
127  0,
128  bits.MPC_Muon0_clct_bx0,
129  0,
130  0,
132  bits.MPC_Muon0_clct_QuarterStrip,
133  bits.MPC_Muon0_clct_EighthStrip,
134  run3_pattern,
135  slope);
136  digi.setHMT(hmt);
137  result.push_back(digi);
139  strip = bits.MPC_Muon1_clct_key_halfstrip; //this goes from 0-223
140  slope = (bits.MPC_Muon1_clct_bend_low & 0x7) | (bits.MPC_Muon1_clct_bend_bit4 << 3);
141  run2_pattern = run2_pattern_lookup_tbl[bits.MPC_Muon1_clct_LR][slope];
142  run3_pattern = run3_pattern_pair.first & 0x7;
143 
144  digi = CSCCorrelatedLCTDigi(2,
145  bits.MPC_Muon1_lct_vpf,
146  bits.MPC_Muon1_lct_quality,
147  bits.MPC_Muon1_alct_key_wire,
148  strip,
149  run2_pattern,
150  bits.MPC_Muon1_clct_LR,
151  bits.MPC_Muon_alct_bxn,
152  0,
153  bits.MPC_Muon1_clct_bx0,
154  0,
155  0,
157  bits.MPC_Muon1_clct_QuarterStrip,
158  bits.MPC_Muon1_clct_EighthStrip,
159  run3_pattern,
160  slope);
161  digi.setHMT(hmt);
162  result.push_back(digi);
163  return result;
164 }
165 
167  unsigned hmt_bits = bits.MPC_Muon_HMT_bit0 | (bits.MPC_Muon_HMT_high << 1); // HighMultiplicityTrigger bits
168  uint16_t cscid = 0; // ??? What is 4-bits CSC Id in CSshowerDigi
169  CSCShowerDigi result(hmt_bits & 0x3, (hmt_bits >> 2) & 0x3, cscid); // 2-bits intime, 2-bits out of time
170  return result;
171 }
172 
174  uint16_t cscid = 0;
175  CSCShowerDigi result(bits.anode_hmt & 0x3, 0, cscid); // 2-bits intime, no out of time
176  return result;
177 }
178 
180  uint16_t cscid = 0;
181  CSCShowerDigi result(bits.cathode_hmt & 0x3, 0, cscid); // 2-bits intime, no out of time
182  return result;
183 }
184 
186  throw cms::Exception("In CSC TMBHeaderFormat 2007, ALCTs belong in ALCT header");
187 }
188 
190  throw cms::Exception("In CSC TMBHeaderFormat 2007, ALCTs belong in ALCT header");
191 }
192 
194  unsigned halfStrip = digi.getKeyStrip();
195  unsigned pattern = digi.getRun3Pattern();
196  bits.clct0_valid = digi.isValid();
197  bits.clct0_quality = digi.getQuality();
198  bits.clct0_shape = pattern;
199  // first 7 bits of halfstrip
200  bits.clct0_key_low = halfStrip & (0x7F);
201  // most-significant (8th) bit
202  bits.clct0_key_high = (halfStrip >> 7) & (0x1);
203  bits.clct_bxn = digi.getBX();
204  bits.bxnPreTrigger = digi.getFullBX();
205  bits.clct0_comparator_code = digi.getCompCode();
206  bits.clct0_xky = (digi.getEighthStripBit() & 0x1) + ((digi.getQuartStripBit() & 0x1) << 1);
207  bits.clct0_LR_bend = digi.getBend();
208  bits.clct0_slope = digi.getSlope();
209 }
210 
212  unsigned halfStrip = digi.getKeyStrip();
213  unsigned pattern = digi.getRun3Pattern();
214  bits.clct1_valid = digi.isValid();
215  bits.clct1_quality = digi.getQuality();
216  bits.clct1_shape = pattern;
217  // first 7 bits of halfstrip
218  bits.clct1_key_low = halfStrip & (0x7F);
219  // most-significant (8th) bit
220  bits.clct1_key_high = (halfStrip >> 7) & (0x1);
221  // There is just one BX field common for CLCT0 and CLCT1 (since both
222  // are latched at the same BX); set it in addCLCT0().
223  bits.bxnPreTrigger = digi.getFullBX();
224  bits.clct1_comparator_code = digi.getCompCode();
225  bits.clct1_xky = (digi.getEighthStripBit() & 0x1) + ((digi.getQuartStripBit() & 0x1) << 1);
226  bits.clct1_LR_bend = digi.getBend();
227  bits.clct1_slope = digi.getSlope();
228 }
229 
231  bits.MPC_Muon0_lct_vpf = digi.isValid();
232  bits.MPC_Muon0_alct_key_wire = digi.getKeyWG();
233  bits.MPC_Muon0_clct_key_halfstrip = digi.getStrip(2) & 0xFF;
234  bits.MPC_Muon0_clct_QuarterStrip = digi.getQuartStripBit() & 0x1;
235  bits.MPC_Muon0_clct_EighthStrip = digi.getEighthStripBit() & 0x1;
236  bits.MPC_Muon0_lct_quality = digi.getQuality() & 0x7;
237 
238  // To restore 5-bits Run3 CLCT Pattern ID first assume and set pattern ID = LCT0 Run3 pattern
239  uint16_t run3_pattern = digi.getRun3Pattern();
240  bits.MPC_Muon_clct_pattern_low = run3_pattern & 0xF;
241  bits.MPC_Muon_clct_pattern_bit5 = (run3_pattern >> 4) & 0x1;
242  bits.MPC_Muon0_clct_bend_low = digi.getSlope() & 0x7;
243  bits.MPC_Muon0_clct_bend_bit4 = (digi.getSlope() >> 3) & 0x1;
244  bits.MPC_Muon0_clct_LR = digi.getBend() & 0x1;
245  bits.MPC_Muon_HMT_bit0 = digi.getHMT() & 0x1;
246  bits.MPC_Muon_HMT_high = (digi.getHMT() >> 1) & 0x7;
247  bits.MPC_Muon_alct_bxn = digi.getBX();
248  bits.MPC_Muon0_clct_bx0 = digi.getBX0();
249 }
250 
252  bits.MPC_Muon1_lct_vpf = digi.isValid();
253  bits.MPC_Muon1_alct_key_wire = digi.getKeyWG();
254  bits.MPC_Muon1_clct_key_halfstrip = digi.getStrip(2) & 0xFF;
255  bits.MPC_Muon1_clct_QuarterStrip = digi.getQuartStripBit() & 0x1;
256  bits.MPC_Muon1_clct_EighthStrip = digi.getEighthStripBit() & 0x1;
257  bits.MPC_Muon1_lct_quality = digi.getQuality() & 0x7;
258 
259  // To restore 5-bits Run3 CLCT Pattern ID assume that LCT0 pattern ID is already processed
260  // and combine LCT1 Run3 pattern to set final 5-bit pattern ID
261  if (digi.isValid()) {
262  uint16_t clct_pattern_id = bits.MPC_Muon_clct_pattern_low | (bits.MPC_Muon_clct_pattern_bit5 << 4);
263  uint16_t run3_pattern = digi.getRun3Pattern();
264  clct_pattern_id = (clct_pattern_id + (run3_pattern + 1) * 5) % 30;
265  bits.MPC_Muon_clct_pattern_low = clct_pattern_id & 0xF;
266  bits.MPC_Muon_clct_pattern_bit5 = (clct_pattern_id >> 4) & 0x1;
267  }
268  bits.MPC_Muon1_clct_bend_low = digi.getSlope() & 0x7;
269  bits.MPC_Muon1_clct_bend_bit4 = (digi.getSlope() >> 3) & 0x1;
270  bits.MPC_Muon1_clct_LR = digi.getBend() & 0x1;
271  bits.MPC_Muon_HMT_bit0 = digi.getHMT() & 0x1;
272  bits.MPC_Muon_HMT_high = (digi.getHMT() >> 1) & 0x7;
273  bits.MPC_Muon_alct_bxn = digi.getBX();
274  bits.MPC_Muon1_clct_bx0 = digi.getBX0();
275 }
276 
278  uint16_t hmt_bits = (digi.bitsInTime() & 0x3) + ((digi.bitsOutOfTime() & 0x3) << 2);
279  bits.MPC_Muon_HMT_bit0 = hmt_bits & 0x1;
280  bits.MPC_Muon_HMT_high = (hmt_bits >> 1) & 0x7;
281 }
282 
284  uint16_t hmt_bits = digi.bitsInTime() & 0x3;
285  bits.anode_hmt = hmt_bits;
286 }
287 
289  uint16_t hmt_bits = digi.bitsInTime() & 0x3;
290  bits.cathode_hmt = hmt_bits;
291 }
292 
293 void CSCTMBHeader2020_GEM::print(std::ostream& os) const {
294  os << "...............(O)TMB2020 ME11 GEM/CCLUT/HMT Header.................."
295  << "\n";
296  os << std::hex << "BOC LINE " << bits.b0cline << " EOB " << bits.e0bline << "\n";
297  os << std::hex << "FW revision: 0x" << bits.firmRevCode << "\n";
298  os << std::dec << "fifoMode = " << bits.fifoMode << ", nTBins = " << bits.nTBins << "\n";
299  os << "boardID = " << bits.boardID << ", cscID = " << bits.cscID << "\n";
300  os << "l1aNumber = " << bits.l1aNumber << ", bxnCount = " << bits.bxnCount << "\n";
301  os << "trigSourceVect = " << bits.trigSourceVect << ", run3_trig_df = " << bits.run3_trig_df
302  << ", gem_enable = " << bits.gem_enable << ", gem_csc_bend_enable = " << bits.gem_csc_bend_enable
303  << ", activeCFEBs = 0x" << std::hex << (bits.activeCFEBs | (bits.activeCFEBs_2 << 5)) << ", readCFEBs = 0x"
304  << std::hex << (bits.readCFEBs | (bits.readCFEBs_2 << 5)) << std::dec << "\n";
305  os << "bxnPreTrigger = " << bits.bxnPreTrigger << "\n";
306  os << "tmbMatch = " << bits.tmbMatch << " alctOnly = " << bits.alctOnly << " clctOnly = " << bits.clctOnly << "\n";
307 
308  os << "readoutCounter: " << std::dec << bits.readoutCounter << ", buf_q_ovf: " << bits.stackOvf
309  << ", sync_err: " << bits.syncError << ", has_buf: " << bits.hasBuf << ", buf_stalled: " << bits.bufFull << "\n";
310  os << "r_wr_buf_adr: 0x" << std::hex << bits.r_wr_buf_adr << ", r_wr_buf_ready: " << bits.r_wr_buf_ready
311  << ", wr_buf_ready: " << bits.wr_buf_ready << ", buf_q_full: " << bits.buf_q_full
312  << ", buf_q_empty: " << bits.buf_q_empty << ",\nr_buf_fence_dist: 0x" << bits.r_buf_fence_dist
313  << ", buf_q_ovf_err: " << bits.buf_q_ovf_err << ", buf_q_udf_err: " << bits.buf_q_udf_err
314  << ", buf_q_adr_err: " << bits.buf_q_adr_err << ", buf_stalled: " << bits.buf_stalled << ",\nbuf_fence_cnt: 0x"
315  << bits.buf_fence_cnt << ", reverse_hs_csc: " << bits.reverse_hs_csc
316  << ", reverse_hs_me1a: " << bits.reverse_hs_me1a << ", reverse_hs_me1b: " << bits.reverse_hs_me1b << std::dec
317  << "\n";
318  os << "CLCT Words:\n"
319  << " bits.clct0_valid = " << bits.clct0_valid << " bits.clct0_shape = " << bits.clct0_shape
320  << " bits.clct0_quality = " << bits.clct0_quality
321  << " halfstrip = " << (bits.clct0_key_low + (bits.clct0_key_high << 7)) << "\n";
322  os << " bits.clct0_xky = " << bits.clct0_xky << " bits.clct0_comparator_code = " << bits.clct0_comparator_code
323  << " bits.clct0_LR_bend = " << bits.clct0_LR_bend << " bits.clct0_slope = " << bits.clct0_slope << "\n";
324 
325  os << " bits.clct1_valid = " << bits.clct1_valid << " bits.clct1_shape = " << bits.clct1_shape
326  << " bits.clct1_quality = " << bits.clct1_quality
327  << " halfstrip = " << (bits.clct1_key_low + (bits.clct1_key_high << 7)) << "\n";
328  os << " bits.clct1_xky = " << bits.clct1_xky << " bits.clct1_comparator_code = " << bits.clct1_comparator_code
329  << " bits.clct1_LR_bend = " << bits.clct1_LR_bend << " bits.clct1_slope = " << bits.clct1_slope << "\n";
330 
331  os << "MPC Words:\n"
332  << " LCT0 valid = " << bits.MPC_Muon0_lct_vpf << " key WG = " << bits.MPC_Muon0_alct_key_wire
333  << " key halfstrip = " << bits.MPC_Muon0_clct_key_halfstrip
334  << " 1/4strip flag = " << bits.MPC_Muon0_clct_QuarterStrip
335  << " 1/8strip flag = " << bits.MPC_Muon0_clct_EighthStrip << "\n"
336  << " quality = " << bits.MPC_Muon0_lct_quality
337  << " slope/bend = " << ((bits.MPC_Muon0_clct_bend_low & 0x7) | (bits.MPC_Muon0_clct_bend_bit4 << 3))
338  << " L/R bend = " << bits.MPC_Muon0_clct_LR << "\n";
339 
340  os << " LCT1 valid = " << bits.MPC_Muon1_lct_vpf << " key WG = " << bits.MPC_Muon1_alct_key_wire
341  << " key halfstrip = " << bits.MPC_Muon1_clct_key_halfstrip
342  << " 1/4strip flag = " << bits.MPC_Muon1_clct_QuarterStrip
343  << " 1/8strip flag = " << bits.MPC_Muon1_clct_EighthStrip << "\n"
344  << " quality = " << bits.MPC_Muon1_lct_quality
345  << " slope/bend = " << ((bits.MPC_Muon1_clct_bend_low & 0x7) | (bits.MPC_Muon1_clct_bend_bit4 << 3))
346  << " L/R bend = " << bits.MPC_Muon1_clct_LR << "\n";
347 
348  os << " clct_5bit_pattern_id = " << (bits.MPC_Muon_clct_pattern_low | (bits.MPC_Muon_clct_pattern_bit5 << 4))
349  << " HMT = " << (bits.MPC_Muon_HMT_bit0 | (bits.MPC_Muon_HMT_high << 1)) << ", alctHMT = " << bits.anode_hmt
350  << ", clctHMT = " << bits.cathode_hmt << "\n";
351 
352  // os << "..................CLCT....................." << "\n";
353  os << "GEM Data:\n"
354  << " gem_enabled_fibers = 0x" << std::hex << gem_enabled_fibers() << std::dec
355  << " gem_fifo_tbins = " << gem_fifo_tbins() << " gem_fifo_pretrig = " << gem_fifo_pretrig()
356  << " gem_zero_suppress = " << gem_zero_suppress() << " gem_csc_bend_enable = " << bits.gem_csc_bend_enable
357  << " gem_sync_dataword = 0x" << std::hex << gem_sync_dataword() << " gem_timing_dataword = 0x" << std::hex
358  << gem_timing_dataword() << std::dec << "\n";
359  os << " gem num_copad: " << bits.num_copad << ", gem_delay: " << bits.gem_delay
360  << ", gem_clct_win: " << bits.gem_clct_win << ", alct_gem_win: " << bits.alct_gem_win << "\n";
361 }
std::vector< CSCCorrelatedLCTDigi > CorrelatedLCTDigis(uint32_t idlayer) const override
returns CorrelatedLCT digis
uint16_t gem_enabled_fibers() const override
unsigned short int sizeInWords() const override
CSCShowerDigi cathodeShowerDigi(uint32_t idlayer) const override
returns cathode HMT Shower digi
unsigned bxn() const
Definition: CSCDMBHeader.h:37
uint16_t gem_sync_dataword() const override
void setHMT(const uint16_t h)
set high-multiplicity bits
uint16_t getSlope() const
return the slope
void addALCT1(const CSCALCTDigi &digi) override
CSCShowerDigi showerDigi(uint32_t idlayer) const override
returns lct HMT Shower digi
static const double slope[3]
uint16_t getQuality() const
return quality of a pattern (number of layers hit!)
Definition: CSCCLCTDigi.h:56
uint16_t getKeyStrip(const uint16_t n=2) const
Definition: CSCCLCTDigi.cc:107
bool getEighthStripBit() const
get single eighth strip bit
Definition: CSCCLCTDigi.h:114
uint16_t bitsOutOfTime() const
Definition: CSCShowerDigi.h:33
void addALCT0(const CSCALCTDigi &digi) override
int16_t getCompCode() const
Definition: CSCCLCTDigi.h:171
void setEventInformation(const CSCDMBHeader &dmbHeader) override
void addCorrelatedLCT0(const CSCCorrelatedLCTDigi &digi) override
bool getQuartStripBit() const
get single quart strip bit
Definition: CSCCLCTDigi.h:108
uint16_t getFullBX() const
return 12-bit full BX.
Definition: CSCCLCTDigi.h:165
void addCLCT0(const CSCCLCTDigi &digi) override
for data packing
const std::vector< std::pair< unsigned, unsigned > > run3_pattern_lookup_tbl
void addCLCT1(const CSCCLCTDigi &digi) override
uint16_t getBX() const
return BX
uint16_t getBend() const
Definition: CSCCLCTDigi.h:93
uint16_t gem_zero_suppress() const override
bool isValid() const
return valid pattern bit
struct CSCTMBHeader2020_GEM::@498 bits
bool getEighthStripBit() const
get single eighth strip bit
bool isValid() const
check CLCT validity (1 - valid CLCT)
Definition: CSCCLCTDigi.h:50
unsigned l1a() const
Definition: CSCDMBHeader.h:39
void addCorrelatedLCT1(const CSCCorrelatedLCTDigi &digi) override
const unsigned run2_pattern_lookup_tbl[2][16]
pattern IDs 30,31 are reserved
uint16_t getQuality() const
return the Quality
void print(std::ostream &os) const override
unsigned dmbID() const
Definition: CSCDMBHeader.h:36
uint16_t getStrip(uint16_t n=2) const
return the key halfstrip from 0,159
bool getQuartStripBit() const
get single quart strip bit
uint16_t getBX() const
return BX
Definition: CSCCLCTDigi.h:123
uint16_t getKeyWG() const
return the key wire group. counts from 0.
uint16_t bitsInTime() const
Definition: CSCShowerDigi.h:32
uint16_t gem_fifo_tbins() const override
uint16_t getSlope() const
return the slope
Definition: CSCCLCTDigi.h:74
std::vector< CSCCLCTDigi > CLCTDigis(uint32_t idlayer) override
returns CLCT digis
uint16_t gem_fifo_pretrig() const override
uint16_t getRun3Pattern() const
return pattern
Definition: CSCCLCTDigi.h:68
void addCathodeShower(const CSCShowerDigi &digi) override
uint16_t gem_timing_dataword() const override
unsigned short * data() override
returns the first data word
CSCShowerDigi anodeShowerDigi(uint32_t idlayer) const override
returns anode HMT Shower digi
void addAnodeShower(const CSCShowerDigi &digi) override
void addShower(const CSCShowerDigi &digi) override
uint16_t getRun3Pattern() const
return the Run-3 pattern ID