CMS 3D CMS Logo

CSCTFPacker.cc
Go to the documentation of this file.
3 
4 #include <strings.h>
5 #include <cerrno>
6 #include <iostream>
7 #include <cstdio>
8 
21 
22 CSCTFPacker::CSCTFPacker(const edm::ParameterSet& conf) : edm::one::EDProducer<>() {
23  // "Readout" configuration
24  zeroSuppression = conf.getParameter<bool>("zeroSuppression");
25  nTBINs = conf.getParameter<int>("nTBINs");
26  activeSectors = conf.getParameter<int>("activeSectors");
27 
28  // Configuration that controls CMSSW specific stuff
29  putBufferToEvent = conf.getParameter<bool>("putBufferToEvent");
30  std::string outputFile = conf.getParameter<std::string>("outputFile");
31  lctProducer = conf.getParameter<edm::InputTag>("lctProducer");
32  mbProducer = conf.getParameter<edm::InputTag>("mbProducer");
33  trackProducer = conf.getParameter<edm::InputTag>("trackProducer");
34 
35  // Swap: if(swapME1strips && me1b && !zplus) strip = 65 - strip; // 1-64 -> 64-1 :
36  swapME1strips = conf.getParameter<bool>("swapME1strips");
37 
38  file = nullptr;
39  if (outputFile.length() && (file = fopen(outputFile.c_str(), "wt")) == nullptr)
40  throw cms::Exception("OutputFile ") << "CSCTFPacker: cannot open output file (errno=" << errno
41  << "). Try outputFile=\"\"";
42 
43  // BX window bounds in CMSSW:
44  m_minBX = conf.getParameter<int>("MinBX"); //3
45  m_maxBX = conf.getParameter<int>("MaxBX"); //9
46 
47  // Finds central LCT BX
48  // assumes window is odd number of bins
49  central_lct_bx = (m_maxBX + m_minBX) / 2;
50  // Find central SP BX
51  // assumes window is odd number of bins
52  central_sp_bx = int(nTBINs / 2);
53 
54  produces<FEDRawDataCollection>("CSCTFRawData");
55 
56  CSCTC_Tok =
57  consumes<CSCTriggerContainer<csctf::TrackStub> >(edm::InputTag(mbProducer.label(), mbProducer.instance()));
58  CSCCDC_Tok = consumes<CSCCorrelatedLCTDigiCollection>(edm::InputTag(lctProducer.label(), lctProducer.instance()));
59  L1CSCTr_Tok = consumes<L1CSCTrackCollection>(edm::InputTag(trackProducer.label(), trackProducer.instance()));
60 }
61 
63  if (file)
64  fclose(file);
65 }
66 
69  e.getByToken(CSCCDC_Tok, corrlcts);
70 
71  CSCSP_MEblock meDataRecord[12][7][5][9][2]; // LCT in sector X, tbin Y, station Z, csc W, and lct I
72  bzero(&meDataRecord, sizeof(meDataRecord));
73  CSCSPRecord meDataHeader[12][7]; // Data Block Header for sector X and tbin Y
74  bzero(&meDataHeader, sizeof(meDataHeader));
75 
77  csc != corrlcts.product()->end();
78  csc++) {
79  CSCCorrelatedLCTDigiCollection::Range range1 = corrlcts.product()->get((*csc).first);
80  int lctId = 0;
81  for (CSCCorrelatedLCTDigiCollection::const_iterator lct = range1.first; lct != range1.second; lct++, lctId++) {
82  int station = (*csc).first.station() - 1;
83  int cscId = (*csc).first.triggerCscId() - 1;
84  int sector = (*csc).first.triggerSector() - 1 + ((*csc).first.endcap() == 1 ? 0 : 6);
85  int subSector = CSCTriggerNumbering::triggerSubSectorFromLabels((*csc).first);
86  int tbin = lct->getBX() - (central_lct_bx - central_sp_bx); // Shift back to hardware BX window definition
87  if (tbin > 6 || tbin < 0) {
88  edm::LogError("CSCTFPacker|produce") << " LCT's BX=" << tbin << " is out of 0-6 window";
89  continue;
90  }
91  int fpga = (subSector ? subSector - 1 : station + 1);
93 
94  // If Det Id is within range
95  if (sector < 0 || sector > 11 || station < 0 || station > 3 || cscId < 0 || cscId > 8 || lctId < 0 || lctId > 1) {
96  edm::LogInfo("CSCTFPacker: CSC digi are out of range: ")
97  << "sector=" << sector << ", station=" << station << ", cscId=" << cscId << ", lctId=" << lctId;
98  continue;
99  }
100 
101  meDataRecord[sector][tbin][fpga][cscId][lctId].clct_pattern_number = lct->getPattern();
102  meDataRecord[sector][tbin][fpga][cscId][lctId].quality_ = lct->getQuality();
103  meDataRecord[sector][tbin][fpga][cscId][lctId].wire_group_id = lct->getKeyWG();
104 
105  meDataRecord[sector][tbin][fpga][cscId][lctId].clct_pattern_id =
106  (swapME1strips && cscId < 3 && station == 0 && (*csc).first.endcap() == 2 && lct->getStrip() < 65
107  ? 65 - lct->getStrip()
108  : lct->getStrip());
109  meDataRecord[sector][tbin][fpga][cscId][lctId].csc_id = (*csc).first.triggerCscId();
110  meDataRecord[sector][tbin][fpga][cscId][lctId].left_right = lct->getBend();
111  meDataRecord[sector][tbin][fpga][cscId][lctId].bx0_ = 0; //?;
112  meDataRecord[sector][tbin][fpga][cscId][lctId].bc0_ = 0; //?;
113 
114  meDataRecord[sector][tbin][fpga][cscId][lctId].me_bxn = 0; //?
115  meDataRecord[sector][tbin][fpga][cscId][lctId].receiver_status_er1 = 0; // dummy
116  meDataRecord[sector][tbin][fpga][cscId][lctId].receiver_status_dv1 = 0; // dummy
117  meDataRecord[sector][tbin][fpga][cscId][lctId].aligment_fifo_full = 0; // dummy
118 
119  meDataRecord[sector][tbin][fpga][cscId][lctId].link_id = lct->getMPCLink();
120  meDataRecord[sector][tbin][fpga][cscId][lctId].mpc_id = 0; // Join with above?
121  meDataRecord[sector][tbin][fpga][cscId][lctId].err_prop_cnt = 0; // dummy
122  meDataRecord[sector][tbin][fpga][cscId][lctId].receiver_status_er2 = 0; // dummy
123  meDataRecord[sector][tbin][fpga][cscId][lctId].receiver_status_dv2 = 0; // dummy
124  meDataRecord[sector][tbin][fpga][cscId][lctId].aligment_fifo_empty = 0; // dummy
125 
126  if (lct->isValid()) {
127  switch ((meDataHeader[sector][tbin].vp_bits >> (fpga * 3)) & 0x7) {
128  case 0x0:
129  meDataHeader[sector][tbin].vp_bits |= (0x1 << (fpga * 3));
130  break;
131  case 0x1:
132  meDataHeader[sector][tbin].vp_bits |= (0x3 << (fpga * 3));
133  break;
134  case 0x3:
135  meDataHeader[sector][tbin].vp_bits |= (0x7 << (fpga * 3));
136  break;
137  default:
138  edm::LogInfo("CSCTFPacker: more than 3 LCTs from a single MPC in one BX!!!");
139  continue;
140  break;
141  }
142  meDataRecord[sector][tbin][fpga][cscId][lctId].valid_pattern = 1; // for later use
143  }
144  meDataHeader[sector][tbin].vq_a = 0; // no digi yet?
145  meDataHeader[sector][tbin].vq_b = 0; // no digi yet?
146  meDataHeader[sector][tbin].se_bits = 0; // dummy
147  meDataHeader[sector][tbin].sm_bits = 0; // dummy
148  meDataHeader[sector][tbin].af_bits = 0; // dummy
149  meDataHeader[sector][tbin].bx_bits = 0; //(lct->getBX()&??<< (fpga*3));
150 
151  meDataHeader[sector][tbin].spare_1 = 0; // for later use
152  }
153  }
154 
155  CSCSP_MBblock mbDataRecord[12][2][7]; // LCT in sector X, subsector Z, tbin Y
156  bzero(&mbDataRecord, sizeof(mbDataRecord));
158  if (mbProducer.label() != "null") {
159  e.getByToken(CSCTC_Tok, barrelStubs);
160  if (barrelStubs.isValid()) {
161  std::vector<csctf::TrackStub> stubs = barrelStubs.product()->get();
162  for (std::vector<csctf::TrackStub>::const_iterator dt = stubs.begin(); dt != stubs.end(); dt++) {
163  int sector = dt->sector() - 1 + (dt->endcap() == 1 ? 0 : 6);
164  int subSector = dt->subsector() - 1;
165  int tbin = dt->getBX() - (central_lct_bx - central_sp_bx); // Shift back to hardware BX window definition
166  if (tbin < 0 || tbin > 6 || sector < 0 || sector > 11 || subSector < 0 || subSector > 11) {
167  edm::LogInfo("CSCTFPacker: CSC DT digi are out of range: ")
168  << " sector=" << sector << " subSector=" << subSector << " tbin=" << tbin;
169  continue;
170  }
171  mbDataRecord[sector][subSector][tbin].quality_ = dt->getQuality();
172  mbDataRecord[sector][subSector][tbin].phi_bend_ = dt->getBend();
173  mbDataRecord[sector][subSector][tbin].flag_ = dt->getStrip();
174  mbDataRecord[sector][subSector][tbin].cal_ = dt->getKeyWG();
175  mbDataRecord[sector][subSector][tbin].phi_ = dt->phiPacked();
176  mbDataRecord[sector][subSector][tbin].bxn1_ = (dt->getBX0() >> 1) & 0x1;
177  mbDataRecord[sector][subSector][tbin].bxn0_ = dt->getBX0() & 0x1;
178  mbDataRecord[sector][subSector][tbin].bc0_ = dt->getPattern();
179  mbDataRecord[sector][subSector][tbin].mb_bxn_ = dt->getCSCID();
180  switch (subSector) {
181  case 0:
182  meDataHeader[sector][tbin].vq_a = 1;
183  break;
184  case 1:
185  meDataHeader[sector][tbin].vq_b = 1;
186  break;
187  default:
188  edm::LogInfo("CSCTFPacker: subSector=") << subSector;
189  break;
190  }
191  mbDataRecord[sector][subSector][tbin].id_ = dt->getMPCLink(); // for later use
192  }
193  }
194  }
195 
196  CSCSP_SPblock spDataRecord[12][7][3]; // Up to 3 tracks in sector X and tbin Y
197  bzero(&spDataRecord, sizeof(spDataRecord));
198  int nTrk[12][7];
199  bzero(&nTrk, sizeof(nTrk));
200 
202  if (trackProducer.label() != "null") {
203  e.getByToken(L1CSCTr_Tok, tracks);
204 
205  for (L1CSCTrackCollection::const_iterator trk = tracks->begin(); trk != tracks->end(); trk++) {
206  int sector = 6 * (trk->first.endcap() - 1) + trk->first.sector() - 1;
207  int tbin = trk->first.BX() + central_sp_bx; // Shift back to hardware BX window definition
208  //std::cout<<"Track["<<nTrk[sector][tbin]<<"] sector: "<<sector<<" tbin: "<<tbin<<std::endl;
209  if (tbin > 6 || tbin < 0) {
210  edm::LogError("CSCTFPacker|analyze") << " Track's BX=" << tbin << " is out of 0-6 window";
211  continue;
212  }
213  if (sector < 0 || sector > 11) {
214  edm::LogError("CSCTFPacker|analyze") << " Track's sector=" << sector << " is out of range";
215  continue;
216  }
217  spDataRecord[sector][tbin][nTrk[sector][tbin]].phi_ = trk->first.localPhi();
218  spDataRecord[sector][tbin][nTrk[sector][tbin]].sign_ = (trk->first.ptLUTAddress() >> 20) & 0x1;
219  spDataRecord[sector][tbin][nTrk[sector][tbin]].front_rear = trk->first.front_rear();
220  spDataRecord[sector][tbin][nTrk[sector][tbin]].charge_ = trk->first.charge_packed(); //
221  spDataRecord[sector][tbin][nTrk[sector][tbin]].eta_ = trk->first.eta_packed();
222 
223  spDataRecord[sector][tbin][nTrk[sector][tbin]].halo_ = trk->first.finehalo_packed();
224  spDataRecord[sector][tbin][nTrk[sector][tbin]].se = 0; // dummy
225  spDataRecord[sector][tbin][nTrk[sector][tbin]].deltaPhi12_ = trk->first.ptLUTAddress() & 0xFF;
226  spDataRecord[sector][tbin][nTrk[sector][tbin]].deltaPhi23_ = (trk->first.ptLUTAddress() >> 8) & 0xF;
227  spDataRecord[sector][tbin][nTrk[sector][tbin]].bxn0_ = 0; //dummy
228  spDataRecord[sector][tbin][nTrk[sector][tbin]].bc0_ = 0; //dummy
229 
230  spDataRecord[sector][tbin][nTrk[sector][tbin]].me1_id = trk->first.me1ID();
231  spDataRecord[sector][tbin][nTrk[sector][tbin]].me2_id = trk->first.me2ID();
232  spDataRecord[sector][tbin][nTrk[sector][tbin]].me3_id = trk->first.me3ID();
233  spDataRecord[sector][tbin][nTrk[sector][tbin]].me4_id = trk->first.me4ID();
234  spDataRecord[sector][tbin][nTrk[sector][tbin]].mb_id = trk->first.mb1ID();
235  spDataRecord[sector][tbin][nTrk[sector][tbin]].ms_id = 0; // don't care winner()
236 
237  // Warning, digi copying was broken for <= CMSSW_3_8_x! The 5 lines of code below will give problems there:
238  spDataRecord[sector][tbin][nTrk[sector][tbin]].me1_tbin = trk->first.me1Tbin();
239  spDataRecord[sector][tbin][nTrk[sector][tbin]].me2_tbin = trk->first.me2Tbin();
240  spDataRecord[sector][tbin][nTrk[sector][tbin]].me3_tbin = trk->first.me3Tbin();
241  spDataRecord[sector][tbin][nTrk[sector][tbin]].me4_tbin = trk->first.me4Tbin();
242  spDataRecord[sector][tbin][nTrk[sector][tbin]].mb_tbin = trk->first.mb1Tbin();
243  // As the MB stubs are not saved in simulation, we want to introduce an artificial ids
244  if (trk->first.mb1ID()) {
245  int subSector = (trk->first.mb1ID() - 1) % 2;
246  int MBtbin = tbin - spDataRecord[sector][tbin][nTrk[sector][tbin]].mb_tbin;
247  if (subSector < 0 || subSector > 1 || MBtbin < 0 || MBtbin > 7 || !mbDataRecord[sector][subSector][MBtbin].id_)
248  spDataRecord[sector][tbin][nTrk[sector][tbin]].mb_id = (subSector ? 6 : 5);
249  }
250  spDataRecord[sector][tbin][nTrk[sector][tbin]].id_ = nTrk[sector][tbin] + 1; // for later use
251 
252  nTrk[sector][tbin]++;
253  switch (nTrk[sector][tbin]) {
254  case 1:
255  meDataHeader[sector][tbin].mode1 = (trk->first.ptLUTAddress() >> 16) & 0xF;
256  break;
257  case 2:
258  meDataHeader[sector][tbin].mode2 = (trk->first.ptLUTAddress() >> 16) & 0xF;
259  break;
260  case 3:
261  meDataHeader[sector][tbin].mode3 = (trk->first.ptLUTAddress() >> 16) & 0xF;
262  break;
263  default:
264  edm::LogInfo("More than 3 tracks from one SP in the BX");
265  continue;
266  break;
267  }
268  }
269  }
270 
272  bzero(&header, sizeof(header));
273 
274  header.header_mark_1 = 0x9;
275  header.header_mark_2 = 0x9;
276  header.header_mark_3 = 0x9;
277  header.header_mark_4 = 0x9;
278 
279  header.header_mark_5 = 0xA;
280  header.header_mark_6 = 0xA;
281  header.header_mark_7 = 0xA;
282  header.header_mark_8 = 0xA;
283 
284  header.csr_dfc = nTBINs;
285  header.csr_dfc |= (zeroSuppression ? 0x8 : 0x0);
286  header.csr_dfc |= 0x7F0; // All FPGAs are active
287  header.skip = 0;
288  header.sp_ersv = 2; // Format version with block of counters
289 
290  CSCSPCounters counters;
291  bzero(&counters, sizeof(counters));
292 
293  CSCSPTrailer trailer;
294  bzero(&trailer, sizeof(trailer));
295 
296  trailer.trailer_mark_1 = 0xF;
297  trailer.trailer_mark_2 = 0xF;
298  trailer.trailer_mark_3 = 0x7;
299  trailer.trailer_mark_4 = 0xF;
300  trailer.trailer_mark_5 = 0xF;
301  trailer.trailer_mark_6 = 0xF;
302  trailer.trailer_mark_7 = 0xE;
303  trailer.trailer_mark_8 = 0xE;
304  trailer.trailer_mark_9 = 0xE;
305  trailer.trailer_mark_10 = 0xE;
306 
307  unsigned short spDDUrecord[700 * 12], *pos = spDDUrecord; // max length
308  bzero(&spDDUrecord, sizeof(spDDUrecord));
309  int eventNumber = e.id().event();
310  *pos++ = 0x0000;
311  *pos++ = 0x0000;
312  *pos++ = 0xFFFF & eventNumber;
313  *pos++ = 0x5000 | (eventNumber >> 16);
314  *pos++ = 0x0000;
315  *pos++ = 0x8000;
316  *pos++ = 0x0001;
317  *pos++ = 0x8000;
318  *pos++ = 0x0000;
319  *pos++ = 0x0000;
320  *pos++ = 0x0000;
321  *pos++ = 0x0000;
322 
323  for (int sector = 0; sector < 12; sector++) {
324  if (!(activeSectors & (1 << sector)))
325  continue;
326  header.sp_trigger_sector = sector + 1;
327  memcpy(pos, &header, 16);
328  pos += 8;
329  memcpy(pos, &counters, 8);
330  pos += 4;
331 
332  for (int tbin = 0; tbin < nTBINs; tbin++) {
333  memcpy(pos, &meDataHeader[sector][tbin], 16);
334  pos += 8;
335  for (int fpga = 0; fpga < 5; fpga++) {
336  int nLCTs = 0;
337  for (int link = 0; link < 3; link++) {
338  for (int cscId = 0; cscId < 9; cscId++)
339  for (int lctId = 0; lctId < 2; lctId++)
340  // Only 3 LCT per BX from the same fpga are allowed (to be valid):
341  if (meDataRecord[sector][tbin][fpga][cscId][lctId].valid_pattern &&
342  meDataRecord[sector][tbin][fpga][cscId][lctId].link_id == link + 1) {
343  memcpy(pos, &meDataRecord[sector][tbin][fpga][cscId][lctId], 8);
344  pos += 4;
345  nLCTs++;
346  }
347  }
348  if (!zeroSuppression)
349  pos += 4 * (3 - nLCTs);
350  }
351  for (int subSector = 0; subSector < 2; subSector++)
352  if (!zeroSuppression || (subSector == 0 && meDataHeader[sector][tbin].vq_a) ||
353  (subSector == 1 && meDataHeader[sector][tbin].vq_b)) {
354  memcpy(pos, &mbDataRecord[sector][subSector][tbin], 8);
355  pos += 4;
356  }
357  for (int trk = 0; trk < 3; trk++) {
358  if (!zeroSuppression || spDataRecord[sector][tbin][trk].id_) {
359  memcpy(pos, &spDataRecord[sector][tbin][trk], 8);
360  pos += 4;
361  }
362  }
363  }
364  memcpy(pos, &trailer, 16);
365  pos += 8;
366  }
367 
368  *pos++ = 0x8000;
369  *pos++ = 0x8000;
370  *pos++ = 0xFFFF;
371  *pos++ = 0x8000;
372  *pos++ = 0x0000;
373  *pos++ = 0x0000;
374  *pos++ = 0x0000;
375  *pos++ = 0x0000;
376  *pos++ = 0x0000;
377  *pos++ = 0x0000;
378  *pos++ = 0x0000;
379  *pos++ = 0x0000;
380 
381  if (putBufferToEvent) {
382  auto data = std::make_unique<FEDRawDataCollection>();
383  FEDRawData& fedRawData = data->FEDData((unsigned int)FEDNumbering::MINCSCTFFEDID);
384  fedRawData.resize((pos - spDDUrecord) * sizeof(unsigned short));
385  std::copy((unsigned char*)spDDUrecord, (unsigned char*)pos, fedRawData.data());
386  FEDHeader csctfFEDHeader(fedRawData.data());
387  csctfFEDHeader.set(fedRawData.data(), 0, e.id().event(), 0, FEDNumbering::MINCSCTFFEDID);
388  FEDTrailer csctfFEDTrailer(fedRawData.data() + (fedRawData.size() - 8));
389  csctfFEDTrailer.set(fedRawData.data() + (fedRawData.size() - 8),
390  fedRawData.size() / 8,
391  evf::compute_crc(fedRawData.data(), fedRawData.size()),
392  0,
393  0);
394  e.put(std::move(data), "CSCTFRawData");
395  }
396 
397  if (file)
398  fwrite(spDDUrecord, 2, pos - spDDUrecord, file);
399 }
unsigned header_mark_8
Definition: CSCSPHeader.h:64
unsigned sp_trigger_sector
Definition: CSCSPHeader.h:28
unsigned me1_id
Definition: CSCSP_SPblock.h:28
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:40
unsigned bx_bits
Definition: CSCSPRecord.h:34
unsigned phi_
Definition: CSCSP_MBblock.h:17
float dt
Definition: AMPTWrapper.h:136
unsigned deltaPhi23_
Definition: CSCSP_SPblock.h:22
unsigned eta_
Definition: CSCSP_SPblock.h:15
unsigned trailer_mark_10
Definition: CSCSPTrailer.h:43
unsigned me_bxn
Definition: CSCSP_MEblock.h:23
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
unsigned mb_tbin
Definition: CSCSP_SPblock.h:40
unsigned front_rear
Definition: CSCSP_SPblock.h:13
unsigned trailer_mark_2
Definition: CSCSPTrailer.h:13
unsigned trailer_mark_4
Definition: CSCSPTrailer.h:17
unsigned aligment_fifo_empty
Definition: CSCSP_MEblock.h:36
unsigned spare_1
Definition: CSCSPRecord.h:21
unsigned skip
Definition: CSCSPHeader.h:63
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
unsigned trailer_mark_6
Definition: CSCSPTrailer.h:28
unsigned clct_pattern_number
Definition: CSCSP_MEblock.h:10
unsigned mb_id
Definition: CSCSP_SPblock.h:32
unsigned me3_tbin
Definition: CSCSP_SPblock.h:38
unsigned bx0_
Definition: CSCSP_MEblock.h:19
unsigned aligment_fifo_full
Definition: CSCSP_MEblock.h:27
unsigned trailer_mark_3
Definition: CSCSPTrailer.h:14
unsigned trailer_mark_7
Definition: CSCSPTrailer.h:32
CSCTFPacker(const edm::ParameterSet &conf)
Definition: CSCTFPacker.cc:22
unsigned af_bits
Definition: CSCSPRecord.h:31
unsigned sign_
Definition: CSCSP_SPblock.h:12
unsigned me2_id
Definition: CSCSP_SPblock.h:29
unsigned bc0_
Definition: CSCSP_MBblock.h:20
unsigned csc_id
Definition: CSCSP_MEblock.h:17
unsigned left_right
Definition: CSCSP_MEblock.h:18
unsigned deltaPhi12_
Definition: CSCSP_SPblock.h:21
edm::EDGetTokenT< CSCTriggerContainer< csctf::TrackStub > > CSCTC_Tok
Definition: CSCTFPacker.h:34
unsigned mode2
Definition: CSCSPRecord.h:17
unsigned cal_
Definition: CSCSP_MBblock.h:14
~CSCTFPacker(void) override
Definition: CSCTFPacker.cc:62
unsigned flag_
Definition: CSCSP_MBblock.h:13
unsigned header_mark_7
Definition: CSCSPHeader.h:45
unsigned bxn1_
Definition: CSCSP_MBblock.h:18
unsigned me2_tbin
Definition: CSCSP_SPblock.h:37
unsigned header_mark_6
Definition: CSCSPHeader.h:30
unsigned clct_pattern_id
Definition: CSCSP_MEblock.h:16
unsigned halo_
Definition: CSCSP_SPblock.h:16
static void set(unsigned char *trailer, uint32_t lenght, uint16_t crc, uint8_t evt_stat, uint8_t tts, bool moreTrailers=false)
Set all fields in the trailer.
Definition: FEDTrailer.cc:31
unsigned header_mark_1
Definition: CSCSPHeader.h:10
unsigned receiver_status_dv2
Definition: CSCSP_MEblock.h:34
edm::InputTag trackProducer
Definition: CSCTFPacker.h:20
unsigned receiver_status_dv1
Definition: CSCSP_MEblock.h:25
unsigned header_mark_2
Definition: CSCSPHeader.h:13
unsigned trailer_mark_1
Definition: CSCSPTrailer.h:11
unsigned short compute_crc(unsigned char *buffer, unsigned int bufSize)
Definition: CRC16.h:46
void produce(edm::Event &e, const edm::EventSetup &c) override
Definition: CSCTFPacker.cc:67
unsigned receiver_status_er2
Definition: CSCSP_MEblock.h:33
unsigned sp_ersv
Definition: CSCSPHeader.h:26
unsigned phi_bend_
Definition: CSCSP_MBblock.h:11
unsigned int id_
Definition: CSCSP_MBblock.h:39
unsigned trailer_mark_8
Definition: CSCSPTrailer.h:35
unsigned bc0_
Definition: CSCSP_MEblock.h:20
unsigned receiver_status_er1
Definition: CSCSP_MEblock.h:24
bool isValid() const
Definition: HandleBase.h:70
unsigned header_mark_4
Definition: CSCSPHeader.h:19
Definition: L1Track.h:19
unsigned me3_id
Definition: CSCSP_SPblock.h:30
unsigned header_mark_5
Definition: CSCSPHeader.h:23
unsigned int id_
Definition: CSCSP_SPblock.h:57
unsigned charge_
Definition: CSCSP_SPblock.h:14
bool putBufferToEvent
Definition: CSCTFPacker.h:25
unsigned short activeSectors
Definition: CSCTFPacker.h:24
unsigned trailer_mark_5
Definition: CSCSPTrailer.h:25
bool zeroSuppression
Definition: CSCTFPacker.h:22
T const * product() const
Definition: Handle.h:69
unsigned csr_dfc
Definition: CSCSPHeader.h:62
unsigned mode3
Definition: CSCSPRecord.h:18
std::pair< const_iterator, const_iterator > Range
edm::InputTag lctProducer
Definition: CSCTFPacker.h:20
unsigned header_mark_3
Definition: CSCSPHeader.h:16
bool swapME1strips
Definition: CSCTFPacker.h:27
std::vector< DigiType >::const_iterator const_iterator
static int triggerSubSectorFromLabels(int station, int chamber)
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollection > CSCCDC_Tok
Definition: CSCTFPacker.h:33
std::string const & label() const
Definition: InputTag.h:36
edm::InputTag mbProducer
Definition: CSCTFPacker.h:20
edm::EventID id() const
Definition: EventBase.h:59
int central_sp_bx
Definition: CSCTFPacker.h:31
unsigned mode1
Definition: CSCSPRecord.h:16
HLT enums.
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
int central_lct_bx
Definition: CSCTFPacker.h:31
unsigned quality_
Definition: CSCSP_MEblock.h:11
unsigned wire_group_id
Definition: CSCSP_MEblock.h:12
unsigned vq_a
Definition: CSCSPRecord.h:19
unsigned mpc_id
Definition: CSCSP_MEblock.h:31
unsigned me4_tbin
Definition: CSCSP_SPblock.h:39
unsigned bxn0_
Definition: CSCSP_MBblock.h:19
unsigned err_prop_cnt
Definition: CSCSP_MEblock.h:32
unsigned se_bits
Definition: CSCSPRecord.h:24
static void set(unsigned char *header, uint8_t triggerType, uint32_t lvl1ID, uint16_t bxID, uint16_t sourceID, uint8_t version=0, bool moreHeaders=false)
Set all fields in the header.
Definition: FEDHeader.cc:25
FILE * file
Definition: CSCTFPacker.h:29
unsigned vq_b
Definition: CSCSPRecord.h:20
unsigned mb_bxn_
Definition: CSCSP_MBblock.h:23
unsigned trailer_mark_9
Definition: CSCSPTrailer.h:39
unsigned short nTBINs
Definition: CSCTFPacker.h:23
unsigned bc0_
Definition: CSCSP_SPblock.h:25
std::string const & instance() const
Definition: InputTag.h:37
unsigned int valid_pattern
Definition: CSCSP_MEblock.h:52
unsigned bxn0_
Definition: CSCSP_SPblock.h:24
unsigned phi_
Definition: CSCSP_SPblock.h:11
def move(src, dest)
Definition: eostools.py:511
unsigned link_id
Definition: CSCSP_MEblock.h:30
unsigned ms_id
Definition: CSCSP_SPblock.h:33
unsigned me1_tbin
Definition: CSCSP_SPblock.h:36
unsigned sm_bits
Definition: CSCSPRecord.h:28
unsigned quality_
Definition: CSCSP_MBblock.h:9
edm::EDGetTokenT< L1CSCTrackCollection > L1CSCTr_Tok
Definition: CSCTFPacker.h:35
unsigned vp_bits
Definition: CSCSPRecord.h:13
unsigned me4_id
Definition: CSCSP_SPblock.h:31