CMS 3D CMS Logo

PackerHelp.h
Go to the documentation of this file.
1 #ifndef EventFilter_HcalRawToDigi_PackerHelp_h
2 #define EventFilter_HcalRawToDigi_PackerHelp_h
3 
11 
12 #include <iostream>
13 #include <cstdio>
14 #include <vector>
15 #include <map>
16 #include <cmath>
17 
18 namespace CDFHeaderSpec{
19  static const int OFFSET_H = 0;
20  static const int MASK_H = 0x8;
21  static const int OFFSET_FOV = 4;
22  static const int MASK_FOV = 0xF;
23  static const int OFFSET_SOURCE_ID = 8;
24  static const int MASK_SOURCE_ID = 0xFFF;
25  static const int OFFSET_BX_ID = 20;
26  static const int MASK_BX_ID = 0xFFF;
27  static const uint64_t OFFSET_LV1_ID = 32;
28  static const int MASK_LV1_ID = 0xFFFFFF;
29  static const int OFFSET_EVT_TY = 56;
30  static const int MASK_EVT_TY = 0xF;
31  static const int OFFSET_FIXED_MSB = 60;
32  static const int MASK_FIXED_MSB = 0xF;
33  static const uint64_t FIXED_MSB = 0x5;
34 }
35 
36 namespace AMC13HeaderSpec{
37  static const int OFFSET_FIXED_LSB = 0;
38  static const int MASK_FIXED_LSB = 0xF;
39  static const int FIXED_LSB = 0x0;
40  static const int OFFSET_ORN = 4;
41  static const int MASK_ORN = 0xFFFFFFFF;
42  static const int OFFSET_RESERVED = 36;
43  static const int MASK_RESERVED = 0xFFFF;
44  static const int OFFSET_NAMC = 52;
45  static const int MASK_NAMC = 0xF;
46  static const int OFFSET_RES = 56;
47  static const int MASK_RES = 0xF;
48  static const int OFFSET_UFOV = 60;
49  static const int MASK_UFOV = 0xF;
50 }
51 
52 namespace AMCHeaderSpec{
53  static const int OFFSET_CRATE_ID = 0;
54  static const int MASK_CRATE_ID = 0xFF;
55  static const int OFFSET_SLOT_ID = 8;
56  static const int MASK_SLOT_ID = 0xF;
57  static const int OFFSET_PRESAMPLES = 12;
58  static const int MASK_PRESAMPLES = 0xF;
59  static const int OFFSET_AMC_NO = 16;
60  static const int MASK_AMC_NO = 0xF;
61  static const int OFFSET_BLK_NO = 20;
62  static const int MASK_BLK_NO = 0xFF;
63  static const int OFFSET_FIXED = 28;
64  static const int MASK_FIXED = 0xF;
65  static const int OFFSET_AMCN_SIZE = 32;
66  static const int MASK_AMCN_SIZE = 0xFFFFFF;
67  static const int OFFSET_C = 56;
68  static const int MASK_C = 0x1;
69  static const int OFFSET_V = 57;
70  static const int MASK_V = 0x1;
71  static const int OFFSET_P = 58;
72  static const int MASK_P = 0x1;
73  static const int OFFSET_E = 59;
74  static const int MASK_E = 0x1;
75  static const int OFFSET_S = 60;
76  static const int MASK_S = 0x1;
77  static const int OFFSET_M = 61;
78  static const int MASK_M = 0x1;
79  static const int OFFSET_L = 62;
80  static const int MASK_L = 0x1;
81 }
82 
83 namespace QIE8HeaderSpec{
84  static const int OFFSET_FIBERCHAN = 0;
85  static const int MASK_FIBERCHAN = 0x3;
86  static const int OFFSET_FIBER = 2;
87  static const int MASK_FIBER = 0x1F;
88  static const int OFFSET_CAPID = 8;
89  static const int MASK_CAPID = 0x3;
90  static const int OFFSET_FIBERERR = 10;
91  static const int MASK_FIBERERR = 0x3;
92  static const int OFFSET_FLAVOR = 12;
93  static const int MASK_FLAVOR = 0x7;
94  static const int OFFSET_HEADER_BIT = 15;
95  static const int MASK_HEADER_BIT = 0x1;
96  static const int OFFSET_TECHNICAL_DATA_TYPE = 8;
97  static const int MASK_TECHNICAL_DATA_TYPE = 0xF;
98 }
99 
100 namespace QIE10HeaderSpec{
101  static const int OFFSET_FIBERCHAN = 0;
102  static const int MASK_FIBERCHAN = 0x7;
103  static const int OFFSET_FIBER = 3;
104  static const int MASK_FIBER = 0x1F;
105  static const int OFFSET_MP = 8; // mark-and-pass
106  static const int MASK_MP = 0x1;
107  static const int OFFSET_RESERV = 9; // reserved
108  static const int MASK_RESERV = 0x3;
109  static const int OFFSET_LE = 11; // link error
110  static const int MASK_LE = 0x1;
111  static const int OFFSET_FLAVOR = 12;
112  static const int MASK_FLAVOR = 0x7;
113  static const int OFFSET_HEADER_BIT = 15;
114  static const int MASK_HEADER_BIT = 0x1;
115 }
116 
117 namespace QIE11HeaderSpec{
118  static const int OFFSET_FIBERCHAN = 0;
119  static const int MASK_FIBERCHAN = 0x7;
120  static const int OFFSET_FIBER = 3;
121  static const int MASK_FIBER = 0x1F;
122  static const int OFFSET_CAPID = 8;
123  static const int MASK_CAPID = 0x3;
124  static const int OFFSET_FIBERERR = 10;
125  static const int MASK_FIBERERR = 0x3;
126  static const int OFFSET_FLAVOR = 12;
127  static const int MASK_FLAVOR = 0x7;
128  static const int OFFSET_HEADER_BIT = 15;
129  static const int MASK_HEADER_BIT = 0x1;
130 }
131 
132 namespace TPHeaderSpec{
133  static const int OFFSET_TOWER = 0;
134  static const int MASK_TOWER = 0xF;
135  static const int OFFSET_LINK = 4;
136  static const int MASK_LINK = 0xF;
137  static const int OFFSET_CHANID = 0;
138  static const int MASK_CHANID = 0xFF;
139  static const int OFFSET_RESV = 8;
140  static const int MASK_RESV = 0x3;
141  static const int OFFSET_TPERR = 10;
142  static const int MASK_TPERR = 0x3;
143  static const int OFFSET_FLAVOR = 12;
144  static const int MASK_FLAVOR = 0x7;
145  static const int OFFSET_HEADER_BIT = 15;
146  static const int MASK_HEADER_BIT = 0x1;
147  static const int OFFSET_SOI_BIT = 14;
148  static const int MASK_SOI_BIT = 0x1;
149 }
150 
151 namespace QIE8SampleSpec{
152  static const int OFFSET_ADC = 0;
153  static const int MASK_ADC = 0x7F;
154  static const int OFFSET_CAPID = 8;
155  static const int MASK_CAPID = 0x3;
156  static const int OFFSET_DV = 10;
157  static const int MASK_DV = 0x1;
158  static const int OFFSET_ER = 11;
159  static const int MASK_ER = 0x1;
160 }
161 
162 class HCalFED{
163 
164 public:
165 
166  typedef std::vector<uint16_t> uhtrData;
167 
168  std::vector<unsigned char> fedData;
169  std::vector<uint64_t> AMCHeaders;
170  std::vector<uhtrData> uhtrs;
171  int fedId;
172  uint64_t AMC13Header,cdfHeader;
177 
178  unsigned char cdfh[8];
180 
181  HCalFED(int fedId_ , uint64_t EventNum_ = 9999 , uint64_t OrbitNum_=999 , uint64_t BxNum_ = 99 ){
182  fedId = fedId_;
183  OrbitNum = OrbitNum_;
184  EventNum = EventNum_;
185  BxNum = BxNum_;
186  Crate = fedId - FEDNumbering::MINHCALuTCAFEDID;
187 
188  setCDFHeader();
189  setAMC13Header();
190 
191  };
192 
193  inline void split64bitTo8bit(std::vector<unsigned char> &outVec, const uint64_t &var64bit){
194  for(int is=0; is<8; is++){ // 64/8 = 8
195  outVec.push_back( (var64bit>> (is*8) ) & 0xFF);
196  }
197  }
198 
199  void setCDFHeader(){
200 
201  cdfHeader = 0 ;
204  cdfHeader |= ((fedId)&CDFHeaderSpec::MASK_SOURCE_ID)<<CDFHeaderSpec::OFFSET_SOURCE_ID; // needs to be configurable
205  cdfHeader |= (BxNum&CDFHeaderSpec::MASK_BX_ID)<<CDFHeaderSpec::OFFSET_BX_ID; // needs to be configurable
209 
210  }
211 
213 
214  AMC13Header = 0;
216  AMC13Header |= ((OrbitNum+1)&AMC13HeaderSpec::MASK_ORN)<<AMC13HeaderSpec::OFFSET_ORN;
221 
222  }
223 
224  void setNAMC(uint64_t NAMC){
226  }
227 
228  void addAMCHeader( uint64_t crate , uint64_t slot , uint64_t AMCsize , uint64_t presamples = 10 , uint64_t blockNum = 0 ){
229 
230  uint64_t header = 0 ;
234  header |= (slot&AMCHeaderSpec::MASK_AMC_NO)<<AMCHeaderSpec::OFFSET_AMC_NO ; // AMC no.
235  header |= (blockNum&AMCHeaderSpec::MASK_BLK_NO)<<AMCHeaderSpec::OFFSET_BLK_NO ; // Block No.
236  header |= (AMCsize&AMCHeaderSpec::MASK_AMCN_SIZE)<<AMCHeaderSpec::OFFSET_AMCN_SIZE ; // size
237  header |= uint64_t(0x1)<<AMCHeaderSpec::OFFSET_C ; // CRC is valid
238  header |= uint64_t(0x1)<<AMCHeaderSpec::OFFSET_V ; // EvN, BcN match
239  header |= uint64_t(0x1)<<AMCHeaderSpec::OFFSET_P ; // Present, header is only made if data is present
240  header |= uint64_t(0x1)<<AMCHeaderSpec::OFFSET_E ; // Enabled, header is only made if AMC is enabled
241  header |= uint64_t(0x0)<<AMCHeaderSpec::OFFSET_S ; // Segmented, always zero for unsegmented data
242  header |= uint64_t(0x0)<<AMCHeaderSpec::OFFSET_M ; // More data
243  header |= uint64_t(0x0)<<AMCHeaderSpec::OFFSET_L ; // Indicates length error
244 
245  AMCHeaders.push_back( header );
246 
247  }
248 
249  void addUHTR( uhtrData uhtr , uint64_t crate , uint64_t slot ){
250  // push uhtr data into FED container
251  uhtrs.push_back(uhtr);
252  // create the corresponding AMC header
253  addAMCHeader( crate , slot , uhtr.size()/4 );
254  };
255 
256  // does not include HEADER and TRAILER
257  void formatFEDdata(FEDRawData& rawData){
258 
259  //std::vector<unsigned char> output;
260  if( uhtrs.size() != AMCHeaders.size() ){
261  return;
262  }
263 
264  // put common data format header in fed container
265  split64bitTo8bit(fedData, cdfHeader);
266 
267  // set the number of AMCs in the AMC13 header
268  setNAMC(uhtrs.size());
269  // put the AMC13 header into the fed container
270  split64bitTo8bit(fedData, AMC13Header);
271 
272  // fill fedData with AMC headers
273  for( unsigned int iAMC = 0 ; iAMC < AMCHeaders.size() ; ++iAMC ){
274  // adjust the AMCsize bits to match uhtr header
275  //AMCHeaders[iAMC] |= uint64_t(uhtrs[iAMC][1]&0xF)<<51 ;
276  //AMCHeaders[iAMC] |= uint64_t(uhtrs[iAMC][0]&0xFFFF)<<47 ;
277  split64bitTo8bit(fedData, AMCHeaders[iAMC]);
278  }
279 
280  // fill fedData with AMC data
281  for( unsigned int iAMC = 0 ; iAMC<uhtrs.size() ; ++iAMC ){
282 
283  unsigned int nWords16 = uhtrs[iAMC].size();
284  for( unsigned int amcWord = 0 ; amcWord<nWords16 ; ++amcWord ){
285  fedData.push_back((uhtrs[iAMC][amcWord]>>0 )&0xFF); // split 16-bit words into 8-bit
286  fedData.push_back((uhtrs[iAMC][amcWord]>>8 )&0xFF);
287  }// end loop over uhtr words
288  }// end loop over uhtrs
289 
290  // fedData should be a integer number of 64 bit words
291  while( fedData.size()%8 != 0 )
292  fedData.push_back(0);
293 
294  // convert to the correct format
295  rawData.resize(fedData.size());
296  unsigned char* words = reinterpret_cast<unsigned char*>(rawData.data());
297 
298  for( unsigned int i = 0 ; i < fedData.size() ; ++i ){
299  *words = fedData[i];
300  words++;
301  }
302 
303  };
304 
305 };
306 
308 
309 public:
310 
311  typedef std::vector<uint16_t> uhtrData;
312  typedef std::map<int,uhtrData> UHTRMap; // the int here is intended to be the raw electronics ID
313 
314  UHTRMap uhtrs;
315 
316  // FIRST WORD
317  static const int OFFSET_DATA_LENGTH = 0;
318  static const int MASK_DATA_LENGTH = 0xFFFFF;
319  static const int OFFSET_BCN = 20;
320  static const int MASK_BCN = 0xFFF;
321  static const int OFFSET_EVN = 32;
322  static const int MASK_EVN = 0xFFFFFF;
323  static const int OFFSET_FILED_BY_AMC13 = 56;
324  static const int MASK_FILED_BY_AMC13 = 0xFF;
325  // SECOND WORD
326  static const int OFFSET_CRATE_ID = 0;
327  static const int MASK_CRATE_ID = 0xFFFFFF;
328  static const int OFFSET_SLOT_ID = 8;
329  static const int MASK_SLOT_ID = 0xF;
330  static const int OFFSET_PRESAMPLES = 12;
331  static const int MASK_PRESAMPLES = 0xF;
332  static const int OFFSET_ORN = 16;
333  static const int MASK_ORN = 0xFFFF;
334  static const int OFFSET_FW_FLAVOR = 32;
335  static const int MASK_FW_FLAVOR = 0xFF;
336  static const int OFFSET_EVENT_TYPE = 40;
337  static const int MASK_EVENT_TYPE = 0xF;
338  static const int OFFSET_PAYLOAD_FORMAT = 44;
339  static const int MASK_PAYLOAD_FORMAT = 0xF;
340  static const int OFFSET_FW_VERSION = 48;
341  static const int MASK_FW_VERSION = 0xFFFF;
342 
344 
345  bool exist( int uhtrIndex ){
346  return uhtrs.count(uhtrIndex) != 0 ;
347  };
348 
349  // flavor should be 5, or 7 (only for premixing in sim)
350  uint16_t packQIE8header(const HcalQIESample &qieSample, const HcalElectronicsId &eid, int flavor){
351  uint16_t header =0;
352 
353  int fiber = eid.fiberIndex()+1;
354  int fiberchan = eid.fiberChanId();
355  int fiberErr = qieSample.er();
356  int capid0 = qieSample.capid();
357 
360  if(flavor==7){
362  }
363  else {
366  }
367  header |= (flavor & QIE8HeaderSpec::MASK_FLAVOR)<<QIE8HeaderSpec::OFFSET_FLAVOR; //flavor
369 
370  return header;
371  }
372 
373  uint16_t packQIE8sample(const HcalQIESample &qieSample){
374  uint16_t sample = 0;
375 
376  int adc = qieSample.adc();
377  int capid = qieSample.capid();
378  int dv = qieSample.dv();
379  int er = qieSample.er();
380 
385 
386  return sample;
387  }
388 
389  uint16_t packTPheader(const HcalTriggerPrimitiveSample &tpSample, int channelid){
390  uint16_t header =0;
391 
395  header |= (0x4 & TPHeaderSpec::MASK_FLAVOR)<<TPHeaderSpec::OFFSET_FLAVOR; //flavor
397 
398  return header;
399  }
400 
402  uint16_t header =0;
403 
404  int fiber = eid.fiberIndex();
405  int fiberchan = eid.fiberChanId();
406 
414 
415  return header;
416  }
417 
418  uint16_t packQIE11header(const QIE11DataFrame &qiedf, const HcalElectronicsId &eid){
419  uint16_t header =0;
420 
421  int fiber = eid.fiberIndex();
422  int fiberchan = eid.fiberChanId();
423  int capid0 = qiedf.samples() == 0? 0 : qiedf[0].capid(); // capacitor id for the first sample
424 
431 
432  return header;
433  }
434 
435  uhtrData* newUHTR( int uhtrIndex , int ps = 0, int orn = 0 , int bcn = 0 , uint64_t evt = 0 ){
436 
437  // initialize vector of 16-bit words
438  uhtrs[uhtrIndex] = uhtrData(8);
439  // build header -- some information will be updated at the end
440 
441  uint64_t presamples = std::max(ps,0);
442  uint64_t uhtrCrate = uhtrIndex&0xFF;
443  uint64_t uhtrSlot = (uhtrIndex&0xF00)>>8;
444 // From Jeremy:
445 // Set the firmware to zero, the firmware flavor to 0, the payload format to 1, and the event type to 1.
446  uint64_t fwFlavor = 0;
447  uint64_t eventType = 1;
448  uint64_t payloadFormat = 1;
449  uint64_t fwVersion = 0;
450 
451  uint64_t uhtrHeader1 = 0;
452  uhtrHeader1 |= (uint64_t(0x0)&MASK_DATA_LENGTH)<<OFFSET_DATA_LENGTH;
453  uhtrHeader1 |= (bcn&MASK_BCN)<<OFFSET_BCN;
454  uhtrHeader1 |= (evt&MASK_EVN)<<OFFSET_EVN;
455  uhtrHeader1 |= (uint64_t(0x0)&MASK_FILED_BY_AMC13)<<OFFSET_FILED_BY_AMC13;
456 
457  uint64_t uhtrHeader2 = 0;
458  uhtrHeader2 |= (uhtrCrate&MASK_CRATE_ID)<<OFFSET_CRATE_ID;
459  uhtrHeader2 |= (uhtrSlot&MASK_SLOT_ID)<<OFFSET_SLOT_ID;
460  uhtrHeader2 |= (presamples&MASK_PRESAMPLES)<<OFFSET_PRESAMPLES;
461  uhtrHeader2 |= (orn&MASK_ORN)<<OFFSET_ORN;
462  uhtrHeader2 |= (fwFlavor&MASK_FW_FLAVOR)<<OFFSET_FW_FLAVOR;
463  uhtrHeader2 |= (eventType&MASK_EVENT_TYPE)<<OFFSET_EVENT_TYPE;
464  uhtrHeader2 |= (payloadFormat&MASK_PAYLOAD_FORMAT)<<OFFSET_PAYLOAD_FORMAT;
465  uhtrHeader2 |= (fwVersion&MASK_FW_VERSION)<<OFFSET_FW_VERSION;
466 
467  // push header into vector of 16-bit words
468  for (unsigned int i = 0; i< 4; ++i){
469  uhtrs[uhtrIndex][i] = ( uhtrHeader1>>(i*16) )&0xFFFF ;
470  uhtrs[uhtrIndex][i+4] = ( uhtrHeader2>>(i*16) )&0xFFFF ;
471  }
472 
473  return &(uhtrs[uhtrIndex]);
474  };
475 
476  void finalizeHeadTail(uhtrData* uhtr , bool verbosity){
477 
478  uint64_t uhtr_size = uhtr->size()-8;
479 
480  // adjust the size bits
481  uhtr->at(0) = uhtr_size&0xFFFF ;
482  uhtr->at(1) |= (uhtr_size>>16)&0xF ;
483 
484  unsigned int toAdd = 4-uhtr->size()%4;
485  for(unsigned int ia=0; ia<toAdd; ia++){
486  uhtr->push_back(0xD07F);
487  }
488 
489  // add trailer
490  uhtr->push_back( uhtr_size&0xFFFF );
491  uhtr->push_back( (uhtr_size>>16)&0xF );
492  // this is ignoring the event number... I am not sure what this should be
493 
494  // adding some blank stuff for the CRC bits
495  uhtr->push_back( 0 );
496  uhtr->push_back( 0 );
497  };
498 
499  void addChannel( int uhtrIndex , edm::SortedCollection<HFDataFrame>::const_iterator& qiedf , const HcalElectronicsMap* readoutMap, bool premix, int verbosity = 0 ){
500  if( qiedf->size() == 0 ) return;
501  DetId detid = qiedf->id();
502  HcalElectronicsId eid(readoutMap->lookup(detid));
503  uint16_t header = packQIE8header(qiedf->sample(0), eid, premix ? 7 : 5);
504  uhtrs[uhtrIndex].push_back(header);
505  // loop over words in dataframe
506  if(premix){
507  for(int iTS = 0; iTS < qiedf->size(); ++iTS){
508  uhtrs[uhtrIndex].push_back(packQIE8sample(qiedf->sample(iTS)));
509  }
510  }
511  else {
512  for(int iTS = 0; iTS < qiedf->size(); iTS +=2 ){
513  uint16_t cont =0;
514  int adc0 = qiedf->sample(iTS).adc();
515  int adc1 = qiedf->sample(iTS+1).adc();
516  cont |= adc0&0xFF;
517  cont |= (adc1&0xFF)<<8;
518  uhtrs[uhtrIndex].push_back(cont);
519  }
520  }// end loop over dataframe words
521  };
522 
523  void addChannel( int uhtrIndex , edm::SortedCollection<HBHEDataFrame>::const_iterator qiedf , const HcalElectronicsMap* readoutMap, bool premix, int verbosity = 0 ){
524  if( qiedf->size() == 0 ) return;
525  DetId detid = qiedf->id();
526  HcalElectronicsId eid(readoutMap->lookup(detid));
527  uint16_t header = packQIE8header(qiedf->sample(0), eid, premix ? 7 : 5);
528  uhtrs[uhtrIndex].push_back(header);
529  // loop over words in dataframe
530  if(premix){
531  for(int iTS = 0; iTS < qiedf->size(); ++iTS){
532  uhtrs[uhtrIndex].push_back(packQIE8sample(qiedf->sample(iTS)));
533  }
534  }
535  else {
536  for(int iTS = 0; iTS < qiedf->size(); iTS +=2 ){
537  uint16_t cont =0;
538  int adc0 = qiedf->sample(iTS).adc();
539  int adc1 = qiedf->sample(iTS+1).adc();
540  cont |= adc0&0xFF;
541  cont |= (adc1&0xFF)<<8;
542  uhtrs[uhtrIndex].push_back(cont);
543  }
544  }// end loop over dataframe words
545  };
546 
547  void addChannel( int uhtrIndex , edm::SortedCollection<HcalTriggerPrimitiveDigi>::const_iterator qiedf, int channelid, int verbosity = 0 ){
548  if( qiedf->size() ==0 ) return;
549  uint16_t header = packTPheader(qiedf->sample(0), channelid);
550  uhtrs[uhtrIndex].push_back(header);
551  // loop over words in dataframe
552  for( int iTS = 0 ; iTS < qiedf->size() ; iTS++ ){
553  // push data into uhtr data container
554  auto raw = qiedf->sample(iTS).raw();
555  // Add SOI information
556  if (iTS == qiedf->presamples())
558  uhtrs[uhtrIndex].push_back(raw);
559  }// end loop over dataframe words
560  };
561 
562  void addChannel( int uhtrIndex , QIE11DataFrame qiedf , const HcalElectronicsMap* readoutMap, int verbosity = 0 ){
563  DetId detid = qiedf.detid();
564  HcalElectronicsId eid(readoutMap->lookup(detid));
565  // loop over words in dataframe
566  for(edm::DataFrame::iterator dfi=qiedf.begin() ; dfi!=qiedf.end(); ++dfi){
567  if( dfi >= qiedf.end()-QIE11DataFrame::FLAG_WORDS ){
568  continue;
569  }
570  if( dfi == qiedf.begin() && QIE11DataFrame::HEADER_WORDS == 1 ){
571  uint16_t header = packQIE11header(qiedf, eid);
572  uhtrs[uhtrIndex].push_back(header);
573  continue;
574  }
575  // push data into uhtr data container
576  uhtrs[uhtrIndex].push_back(dfi[0]);
577  }// end loop over dataframe words
578  };
579 
580  void addChannel( int uhtrIndex , QIE10DataFrame qiedf , const HcalElectronicsMap* readoutMap, int verbosity = 0 ){
581  DetId detid = qiedf.detid();
582  HcalElectronicsId eid(readoutMap->lookup(detid));
583  // loop over words in dataframe
584  for(edm::DataFrame::iterator dfi=qiedf.begin() ; dfi!=qiedf.end(); ++dfi){
585  if( dfi >= qiedf.end()-QIE10DataFrame::FLAG_WORDS ){
586  continue;
587  }
588  if( dfi == qiedf.begin() && QIE10DataFrame::HEADER_WORDS == 1 ){
589  uint16_t header = packQIE10header(eid);
590  uhtrs[uhtrIndex].push_back(header);
591  continue;
592  }
593  // push data into uhtr data container
594  uhtrs[uhtrIndex].push_back(dfi[0]);
595  }// end loop over dataframe words
596  };
597 
598 };
599 
600 #endif
DetId detid() const
Get the detector id.
std::vector< uhtrData > uhtrs
Definition: PackerHelp.h:170
static const int OFFSET_TPERR
Definition: PackerHelp.h:141
static const int MASK_L
Definition: PackerHelp.h:80
void setCDFHeader()
Definition: PackerHelp.h:199
static const int MASK_CAPID
Definition: PackerHelp.h:123
static const int FLAG_WORDS
static const int MASK_FIBERERR
Definition: PackerHelp.h:125
static const int MASK_H
Definition: PackerHelp.h:20
static const int OFFSET_FLAVOR
Definition: PackerHelp.h:111
static const int MASK_BLK_NO
Definition: PackerHelp.h:62
edm::DataFrame::iterator begin()
iterators
void addChannel(int uhtrIndex, QIE11DataFrame qiedf, const HcalElectronicsMap *readoutMap, int verbosity=0)
Definition: PackerHelp.h:562
static const int MASK_FIBER
Definition: PackerHelp.h:121
static const uint64_t OFFSET_LV1_ID
Definition: PackerHelp.h:27
static const int OFFSET_CRATE_ID
Definition: PackerHelp.h:53
static const int MASK_RESERVED
Definition: PackerHelp.h:43
static const int MASK_FOV
Definition: PackerHelp.h:22
std::vector< unsigned char > fedData
Definition: PackerHelp.h:168
void addUHTR(uhtrData uhtr, uint64_t crate, uint64_t slot)
Definition: PackerHelp.h:249
void finalizeHeadTail(uhtrData *uhtr, bool verbosity)
Definition: PackerHelp.h:476
static const int MASK_FIXED_MSB
Definition: PackerHelp.h:32
static const int OFFSET_CAPID
Definition: PackerHelp.h:154
static const int MASK_SOURCE_ID
Definition: PackerHelp.h:24
constexpr bool er() const
is the error bit set?
Definition: HcalQIESample.h:69
uint16_t packQIE8header(const HcalQIESample &qieSample, const HcalElectronicsId &eid, int flavor)
Definition: PackerHelp.h:350
uint64_t cdfHeader
Definition: PackerHelp.h:172
static const int MASK_HEADER_BIT
Definition: PackerHelp.h:95
static const int MASK_RESERV
Definition: PackerHelp.h:108
static const int MASK_FLAVOR
Definition: PackerHelp.h:127
void setNAMC(uint64_t NAMC)
Definition: PackerHelp.h:224
static const int OFFSET_BLK_NO
Definition: PackerHelp.h:61
std::map< int, uhtrData > UHTRMap
Definition: PackerHelp.h:312
static const int OFFSET_FIXED
Definition: PackerHelp.h:63
static const int HEADER_WORDS
static const int MASK_DV
Definition: PackerHelp.h:157
static const int MASK_HEADER_BIT
Definition: PackerHelp.h:129
static const int FIXED_LSB
Definition: PackerHelp.h:39
static const int MASK_FIBER
Definition: PackerHelp.h:87
static const int OFFSET_SOURCE_ID
Definition: PackerHelp.h:23
static const int OFFSET_FLAVOR
Definition: PackerHelp.h:143
static const int MASK_TPERR
Definition: PackerHelp.h:142
uhtrData * newUHTR(int uhtrIndex, int ps=0, int orn=0, int bcn=0, uint64_t evt=0)
Definition: PackerHelp.h:435
static const int OFFSET_PRESAMPLES
Definition: PackerHelp.h:57
static const int OFFSET_CHANID
Definition: PackerHelp.h:137
std::vector< T >::const_iterator const_iterator
static const int OFFSET_FIBER
Definition: PackerHelp.h:120
static const int OFFSET_HEADER_BIT
Definition: PackerHelp.h:113
void push_back(T const &t)
static const int OFFSET_RESERVED
Definition: PackerHelp.h:42
static const int OFFSET_FOV
Definition: PackerHelp.h:21
uint64_t OrbitNum
Definition: PackerHelp.h:173
static const int MASK_MP
Definition: PackerHelp.h:106
static const int MASK_ORN
Definition: PackerHelp.h:41
static const int OFFSET_ADC
Definition: PackerHelp.h:152
static const int MASK_ER
Definition: PackerHelp.h:159
static const int MASK_SOI_BIT
Definition: PackerHelp.h:148
static const int MASK_FIBER
Definition: PackerHelp.h:104
static const int MASK_FIBERCHAN
Definition: PackerHelp.h:102
void addAMCHeader(uint64_t crate, uint64_t slot, uint64_t AMCsize, uint64_t presamples=10, uint64_t blockNum=0)
Definition: PackerHelp.h:228
std::vector< uint16_t > uhtrData
Definition: PackerHelp.h:166
static const int OFFSET_CAPID
Definition: PackerHelp.h:122
static const int OFFSET_FIBER
Definition: PackerHelp.h:86
static const int MASK_CRATE_ID
Definition: PackerHelp.h:54
static const int MASK_FLAVOR
Definition: PackerHelp.h:144
static const int OFFSET_RES
Definition: PackerHelp.h:46
static const int OFFSET_FIXED_MSB
Definition: PackerHelp.h:31
static const int MASK_PRESAMPLES
Definition: PackerHelp.h:58
static const int MASK_FIBERCHAN
Definition: PackerHelp.h:119
std::vector< uint64_t > AMCHeaders
Definition: PackerHelp.h:169
static const int MASK_M
Definition: PackerHelp.h:78
static const int OFFSET_M
Definition: PackerHelp.h:77
void addChannel(int uhtrIndex, edm::SortedCollection< HcalTriggerPrimitiveDigi >::const_iterator qiedf, int channelid, int verbosity=0)
Definition: PackerHelp.h:547
uint16_t packQIE11header(const QIE11DataFrame &qiedf, const HcalElectronicsId &eid)
Definition: PackerHelp.h:418
static const int MASK_LINK
Definition: PackerHelp.h:136
static const int OFFSET_C
Definition: PackerHelp.h:67
static const int OFFSET_DV
Definition: PackerHelp.h:156
uint16_t packQIE10header(const HcalElectronicsId &eid)
Definition: PackerHelp.h:401
static const int MASK_FIBERERR
Definition: PackerHelp.h:91
int fedId
Definition: PackerHelp.h:171
static const int MASK_CHANID
Definition: PackerHelp.h:138
static const int OFFSET_FIXED_LSB
Definition: PackerHelp.h:37
static const int OFFSET_HEADER_BIT
Definition: PackerHelp.h:128
static const int MASK_V
Definition: PackerHelp.h:70
static const int MASK_FIXED
Definition: PackerHelp.h:64
void resize(size_t newsize)
Definition: FEDRawData.cc:32
static const int MASK_FIXED_LSB
Definition: PackerHelp.h:38
static const int OFFSET_E
Definition: PackerHelp.h:73
static const int MASK_FLAVOR
Definition: PackerHelp.h:93
static const int OFFSET_AMCN_SIZE
Definition: PackerHelp.h:65
static const int MASK_TECHNICAL_DATA_TYPE
Definition: PackerHelp.h:97
std::vector< uint16_t > uhtrData
Definition: PackerHelp.h:311
static const int MASK_CAPID
Definition: PackerHelp.h:89
static const int OFFSET_LE
Definition: PackerHelp.h:109
static const int OFFSET_EVT_TY
Definition: PackerHelp.h:29
void addChannel(int uhtrIndex, edm::SortedCollection< HBHEDataFrame >::const_iterator qiedf, const HcalElectronicsMap *readoutMap, bool premix, int verbosity=0)
Definition: PackerHelp.h:523
DetId detid() const
Get the detector id.
uint16_t packTPheader(const HcalTriggerPrimitiveSample &tpSample, int channelid)
Definition: PackerHelp.h:389
static const int MASK_C
Definition: PackerHelp.h:68
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
static const int OFFSET_RESERV
Definition: PackerHelp.h:107
static const int OFFSET_RESV
Definition: PackerHelp.h:139
edm::DataFrame::iterator end()
static const int OFFSET_FIBERCHAN
Definition: PackerHelp.h:118
static const int OFFSET_AMC_NO
Definition: PackerHelp.h:59
void addChannel(int uhtrIndex, QIE10DataFrame qiedf, const HcalElectronicsMap *readoutMap, int verbosity=0)
Definition: PackerHelp.h:580
static const int MASK_E
Definition: PackerHelp.h:74
static const int MASK_AMC_NO
Definition: PackerHelp.h:60
void split64bitTo8bit(std::vector< unsigned char > &outVec, const uint64_t &var64bit)
Definition: PackerHelp.h:193
constexpr int adc() const
get the ADC sample
Definition: HcalQIESample.h:59
static const int OFFSET_LINK
Definition: PackerHelp.h:135
static const uint64_t FIXED_MSB
Definition: PackerHelp.h:33
UHTRMap uhtrs
Definition: PackerHelp.h:314
Definition: DetId.h:18
constexpr int fiberIndex() const
get the fiber index. For VME 1-8 (which of eight fibers carried by a spigot), for uTCA fibers are zer...
static const int MASK_HEADER_BIT
Definition: PackerHelp.h:114
static const int OFFSET_TECHNICAL_DATA_TYPE
Definition: PackerHelp.h:96
static const int OFFSET_FLAVOR
Definition: PackerHelp.h:126
static const int MASK_CAPID
Definition: PackerHelp.h:155
static const int OFFSET_FLAVOR
Definition: PackerHelp.h:92
static const int MASK_S
Definition: PackerHelp.h:76
static const int MASK_BX_ID
Definition: PackerHelp.h:26
unsigned long long uint64_t
Definition: Time.h:15
static const int FLAG_WORDS
static const int MASK_RES
Definition: PackerHelp.h:47
static const int HEADER_WORDS
static const int OFFSET_TOWER
Definition: PackerHelp.h:133
uint16_t packQIE8sample(const HcalQIESample &qieSample)
Definition: PackerHelp.h:373
static const int OFFSET_HEADER_BIT
Definition: PackerHelp.h:94
constexpr bool dv() const
is the Data Valid bit set?
Definition: HcalQIESample.h:67
static const int OFFSET_FIBERCHAN
Definition: PackerHelp.h:84
static const int OFFSET_ORN
Definition: PackerHelp.h:40
static const int OFFSET_V
Definition: PackerHelp.h:69
void addChannel(int uhtrIndex, edm::SortedCollection< HFDataFrame >::const_iterator &qiedf, const HcalElectronicsMap *readoutMap, bool premix, int verbosity=0)
Definition: PackerHelp.h:499
static const int MASK_UFOV
Definition: PackerHelp.h:49
FEDHeader * rawFEDHeader
Definition: PackerHelp.h:179
static const int MASK_SLOT_ID
Definition: PackerHelp.h:56
static const int MASK_RESV
Definition: PackerHelp.h:140
static const int OFFSET_CAPID
Definition: PackerHelp.h:88
static const int OFFSET_ER
Definition: PackerHelp.h:158
static const int MASK_EVT_TY
Definition: PackerHelp.h:30
bool exist(int uhtrIndex)
Definition: PackerHelp.h:345
static const int OFFSET_S
Definition: PackerHelp.h:75
constexpr int capid() const
get the Capacitor id
Definition: HcalQIESample.h:65
data_type * iterator
Definition: DataFrame.h:21
static const int OFFSET_HEADER_BIT
Definition: PackerHelp.h:145
size_type size() const
static const int OFFSET_P
Definition: PackerHelp.h:71
uint64_t Crate
Definition: PackerHelp.h:176
static const int OFFSET_FIBERERR
Definition: PackerHelp.h:90
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
edm::DataFrame::iterator begin()
iterators
uint64_t BxNum
Definition: PackerHelp.h:175
static const int MASK_HEADER_BIT
Definition: PackerHelp.h:146
void formatFEDdata(FEDRawData &rawData)
Definition: PackerHelp.h:257
static const int OFFSET_L
Definition: PackerHelp.h:79
constexpr int fiberChanId() const
get the fiber channel id (which of channels on a fiber)
static const int OFFSET_SLOT_ID
Definition: PackerHelp.h:55
static const int OFFSET_NAMC
Definition: PackerHelp.h:44
static const int MASK_LV1_ID
Definition: PackerHelp.h:28
static const int OFFSET_FIBERERR
Definition: PackerHelp.h:124
uint64_t EventNum
Definition: PackerHelp.h:174
edm::DataFrame::iterator end()
static const int OFFSET_H
Definition: PackerHelp.h:19
static const int MASK_LE
Definition: PackerHelp.h:110
int samples() const
total number of samples in the digi
static const int MASK_P
Definition: PackerHelp.h:72
static const int OFFSET_MP
Definition: PackerHelp.h:105
static const int MASK_FLAVOR
Definition: PackerHelp.h:112
static const int MASK_FIBERCHAN
Definition: PackerHelp.h:85
static const int MASK_AMCN_SIZE
Definition: PackerHelp.h:66
HCalFED(int fedId_, uint64_t EventNum_=9999, uint64_t OrbitNum_=999, uint64_t BxNum_=99)
Definition: PackerHelp.h:181
Readout chain identification for Hcal.
const DetId lookup(HcalElectronicsId fId) const
lookup the logical detid associated with the given electronics id
static const int OFFSET_FIBERCHAN
Definition: PackerHelp.h:101
void setAMC13Header()
Definition: PackerHelp.h:212
static const int OFFSET_BX_ID
Definition: PackerHelp.h:25
static const int OFFSET_FIBER
Definition: PackerHelp.h:103
static const int OFFSET_UFOV
Definition: PackerHelp.h:48
static const int MASK_NAMC
Definition: PackerHelp.h:45
static const int MASK_TOWER
Definition: PackerHelp.h:134
static const int MASK_ADC
Definition: PackerHelp.h:153
static const int OFFSET_SOI_BIT
Definition: PackerHelp.h:147