CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HcalHTRData.cc
Go to the documentation of this file.
1 //#include "Utilities/Configuration/interface/Architecture.h"
2 /*
3  * $Date: 2012/06/04 11:26:22 $
4  * $Revision: 1.20 $
5  * \author J. Mans -- UMD
6  */
7 #ifndef HTBDAQ_DATA_STANDALONE
9 #else
10 #include "HcalHTRData.h"
13 #endif
14 #include <string.h>
15 #include <stdio.h>
16 
17 HcalHTRData::HcalHTRData() : m_formatVersion(-2), m_rawLength(0), m_rawConst(0), m_ownData(0) { }
18 HcalHTRData::HcalHTRData(const unsigned short* data, int length) {
19  adoptData(data,length);
20  m_ownData=0;
21 }
22 HcalHTRData::HcalHTRData(const HcalHTRData& hd) : m_formatVersion(hd.m_formatVersion), m_rawLength(hd.m_rawLength), m_rawConst(hd.m_rawConst), m_ownData(0) { }
23 
24 HcalHTRData::HcalHTRData(int version_to_create) : m_formatVersion(version_to_create) {
25  allocate(version_to_create);
26 }
27 
28 void HcalHTRData::allocate(int version_to_create) {
29  m_formatVersion=version_to_create;
30  // the needed space is for the biggest possible event...
31  const int needed=0x200;
32  // create a buffer big enough...
33  m_ownData=new unsigned short[needed];
34  // clear isn't really necessary, but it makes valgrind happy
35  memset(m_ownData,0,sizeof(unsigned short)*needed);
36  m_rawLength=0;
38 }
39 
41  if (m_ownData==0) {
45  }
46  return (*this);
47 }
48 
49 void HcalHTRData::adoptData(const unsigned short* data, int length) {
50  m_rawLength=length;
52  if (m_rawLength<5) {
53  m_formatVersion=-2; // invalid!
54  } else {
55  // determine format version
56  if ((m_rawConst[2]&0x8000)==0) m_formatVersion=-1; // original format before versions
57  else m_formatVersion=(m_rawConst[4]>>12)&0xF;
58  }
59 }
60 
61 // check :: not EE, length is reasonable, length matches wordcount
62 // length required for tp+daq is correct
63 
64 bool HcalHTRData::check() const {
65  if (m_formatVersion==-1) {
66  // length checks
67  // minimum length
68  if (m_rawLength<6+12) return false;
69  // matches wordcount
70  if (m_rawLength!=m_rawConst[m_rawLength-3]) return false;
71  // empty event check
72  if (m_rawConst[2]&0x20) return false;
73  } else {
74  // length checks
75  // minimum length
76  if (m_rawLength<8+4) return false;
77  if (m_formatVersion<=3) {
78  // matches wordcount
80  if (isHistogramEvent() && m_rawConst[m_rawLength-3]==786) {
81  // known bug!
82  } else
83  return false;
84  }
85  } else {
86  // eventually add CRC check
87  }
88  // empty event check (redundant...)
89  if (m_rawConst[2]&0x4) return false;
90  }
91 
92  if (!isHistogramEvent()) {
93  // daq/tp length check
94  int tp, daq, header, trailer;
95  determineSectionLengths(tp,daq,header,trailer);
96  if (tp+daq+header+trailer>m_rawLength) return false;
97  }
98 
99  return true;
100 }
101 
103  if (m_formatVersion==-1) {
104  return (m_rawConst[2]&0x20)!=0;
105  } else {
106  return (m_rawConst[2]&0x4)!=0;
107  }
108 }
109 
110 
112  if (m_formatVersion==-1) {
113  return false; // too old to care.
114  } else {
115  return (m_rawConst[2]&0x1)!=0;
116  }
117 }
118 
119 bool HcalHTRData::isBusy() const {
120  if (m_formatVersion==-1) {
121  return false; // too old to care.
122  } else {
123  return (m_rawConst[2]&0x2)!=0;
124  }
125 }
126 
127 void HcalHTRData::determineSectionLengths(int& tpWords, int& daqWords, int& headerWords, int& trailerWords) const {
128  if (m_formatVersion==-1) {
129  tpWords=m_rawConst[5]>>8;
130  daqWords=CHANNELS_PER_SPIGOT*(m_rawConst[m_rawLength-4]>>8); // always 24 channels, no zero suppresion
131  headerWords=6;
132  trailerWords=12;
133  } else {
134  tpWords=m_rawConst[5]>>8;
135  if (m_rawLength>4)
136  daqWords=m_rawConst[m_rawLength-4]&0x7FF; // zero suppression supported
137  headerWords=8;
138  trailerWords=4; // minimum, may be more...
139  }
140 }
141 
142 void HcalHTRData::determineStaticLengths(int& headerWords, int& trailerWords) const {
143  if (m_formatVersion==-1) {
144  headerWords=6;
145  trailerWords=12;
146  } else if (m_formatVersion<5) {
147  headerWords=8;
148  trailerWords=4; // minimum, may be more...
149  } else {
150  headerWords=8;
151  trailerWords=12; // minimum, may be more...
152  }
153 }
154 
155 void HcalHTRData::dataPointers(const unsigned short** daq_first,
156  const unsigned short** daq_last,
157  const unsigned short** tp_first,
158  const unsigned short** tp_last) const {
159  int tp_words_total, daq_words_total, headerLen, trailerLen;
160  determineSectionLengths(tp_words_total,daq_words_total,headerLen,trailerLen);
161 
162  *tp_first=m_rawConst+headerLen;
163  *tp_last=*tp_first+(tp_words_total-1);
164  *daq_first=*tp_last+1;
165  *daq_last=*daq_first+(daq_words_total-1);
166 }
167 
168 /* using FiberAd[2:0] ChanId[1:0] */
169 static const int channelDecoder[32] = { 0, 1, 2, 99, 3, 4, 5, 99,
170  6, 7, 8, 99, 9,10,11, 99,
171  12,13,14,99,15,16,17, 99,
172  18,19,20,99,21,22,23, 99};
173 
174 void HcalHTRData::unpack(unsigned char* daq_lengths, unsigned short* daq_samples,
175  unsigned char* tp_lengths, unsigned short* tp_samples) const {
176 
177  if (daq_lengths!=0) memset(daq_lengths,0,CHANNELS_PER_SPIGOT);
178  if (tp_lengths!=0) memset(tp_lengths,0,CHANNELS_PER_SPIGOT);
179 
180  // currently, the major differences between the versions are
181  // -1 : 6 word header, no zero suppression, trailer setup
182  // 0 : 8 word header, zero suppression,
183 
184  int tp_words_total, daq_words_total, headerLen, trailerLen;
185  determineSectionLengths(tp_words_total,daq_words_total,headerLen,trailerLen);
186 
187  // printf("%d %d %d %d\n",tp_words_total,daq_words_total,headerLen,trailerLen);
188  int wordPtr;
189  const unsigned short* tpBase=m_rawConst+headerLen;
190  // process the trigger primitive words
191  if (tp_lengths!=0) {
192  for (wordPtr=0; wordPtr<tp_words_total; wordPtr++) {
193  int ichan=channelDecoder[tpBase[wordPtr]>>11];
194  if (ichan>=24) continue;
195  tp_samples[ichan*MAXIMUM_SAMPLES_PER_CHANNEL+tp_lengths[ichan]]=tpBase[wordPtr]&0x3ff;
196  tp_lengths[ichan]++;
197  }
198  }
199 
200  const unsigned short* daqBase=m_rawConst+headerLen+tp_words_total;
201  // process the DAQ words [ assumes that data from one channel will always be together ]
202  int lastChan=-1;
203  int lastCapid=0;
204  if (daq_lengths!=0) {
205  for (wordPtr=0; wordPtr<daq_words_total; wordPtr++) {
206  int ichan=channelDecoder[daqBase[wordPtr]>>11];
207  if (ichan>=24) continue;
208  int capid=(daqBase[wordPtr]&0x180)>>7;
209  int erdv=(daqBase[wordPtr]&0x600)>>9;
210  if (erdv!=0x1 ||
211  (lastChan==ichan && (capid!=((lastCapid+1)%4)))) {
212  daq_lengths[ichan]|=0x80;
213  }
214  lastChan=ichan;
215  lastCapid=capid;
216 
217  int useLength=daq_lengths[ichan]&0x1F;
218  // printf("%d %d\n",ichan,useLength);
219  daq_samples[ichan*MAXIMUM_SAMPLES_PER_CHANNEL+useLength]=daqBase[wordPtr]&0x3ff;
220  daq_lengths[ichan]=(useLength+1)|(daq_lengths[ichan]&0xE0); // keep the error bits
221  }
222  }
223 
224 }
225 
226 void HcalHTRData::pack(unsigned char* daq_lengths, unsigned short* daq_samples,
227  unsigned char* tp_lengths, unsigned short* tp_samples, bool do_capid) {
228 
229  int tp_words_total=0, daq_words_total=0, headerLen, trailerLen;
230  determineStaticLengths(headerLen,trailerLen);
231 
232  tp_words_total=0;
233  daq_words_total=0;
234  int ichan,isample;
235 
236  // trigger primitive words
237  unsigned short* ptr=m_ownData+headerLen;
238  if (tp_samples!=0 && tp_lengths!=0) {
239  for (ichan=0; ichan<24; ichan++) {
240  unsigned short chanid=((ichan%3)+((ichan/3)<<2))<<11;
241  for (isample=0; isample<tp_lengths[ichan] && isample<MAXIMUM_SAMPLES_PER_CHANNEL; isample++) {
242  ptr[tp_words_total]=chanid|(tp_samples[ichan*MAXIMUM_SAMPLES_PER_CHANNEL+isample]&0x3FF);
243  tp_words_total++;
244  }
245  }
246  }
247 
248  // daq words
249  ptr=m_ownData+headerLen+tp_words_total;
250  for (ichan=0; ichan<24; ichan++) {
251  unsigned short chanid=((ichan%3)+((ichan/3)<<2))<<11;
252  for (isample=0; isample<daq_lengths[ichan] && isample<MAXIMUM_SAMPLES_PER_CHANNEL; isample++) {
253  unsigned short basedata=daq_samples[ichan*MAXIMUM_SAMPLES_PER_CHANNEL+isample]&0x3FF;
254  if (do_capid) basedata=(basedata&0x7F)|(0x200)|((isample%4)<<7);
255  ptr[daq_words_total]=chanid|basedata;
256  daq_words_total++;
257  }
258  }
259  unsigned short totalLen;
260  if (m_formatVersion==-1) {
261  m_ownData[5]=(tp_words_total<<8)|0x1;
262  totalLen=headerLen+tp_words_total+daq_words_total+trailerLen;
263  m_rawLength=totalLen;
264  m_ownData[totalLen-3]=totalLen;
265  m_ownData[totalLen-4]=(tp_words_total/CHANNELS_PER_SPIGOT)|((daq_words_total/CHANNELS_PER_SPIGOT)<<8);
266  } else {
267  m_ownData[5]=(tp_words_total<<8)|0x1;
268  totalLen=headerLen+tp_words_total+daq_words_total+trailerLen;
269  if ((totalLen%2)==1) {
270  m_ownData[totalLen-4]=0xFFFF; // parity word
271  totalLen++; // round to even number of 16-bit words
272  }
273  m_rawLength=totalLen;
274  m_ownData[totalLen-2]=totalLen/2; // 32-bit words
275  m_ownData[totalLen-3]=totalLen;
276  m_ownData[totalLen-4]=daq_words_total;
277  }
278  if (trailerLen==12) { // initialize extra trailer words if present
279  for (int i=12; i>4; i--)
280  m_ownData[totalLen-i]=0;
281  }
282 
283 }
284 
285 void HcalHTRData::packHeaderTrailer(int L1Anumber, int bcn, int submodule, int orbitn, int pipeline, int ndd, int nps, int firmwareRev) {
286  m_ownData[0]=L1Anumber&0xFF;
287  m_ownData[1]=(L1Anumber&0xFFFF00)>>8;
288  if (m_formatVersion==-1) {
289  m_ownData[2]=((pipeline&0x7F)<<8); // no error bits
290  m_ownData[3]=((orbitn&0xFF)<<8)|(submodule&0xFF);
291  m_ownData[4]=bcn&0xFFF;
292  // m_ownData[5]&=0xFF01;
293  } else {
294  m_ownData[2]=0x8000; // Version is valid, no error bits
295  if (m_formatVersion==0)
296  m_ownData[3]=((orbitn&0x3F)<<10)|(submodule&0x3FF);
297  else
298  m_ownData[3]=((orbitn&0x1F)<<11)|(submodule&0x7FF);
299  m_ownData[4]=((m_formatVersion&0xF)<<12)|(bcn&0xFFF);
300  m_ownData[5]|=((nps&0x1F)<<3)|0x1;
301  m_ownData[6]=((firmwareRev&0x70000)>>3)|(firmwareRev&0x1FFF);
302  m_ownData[7]=pipeline&0xFF;
303  m_ownData[m_rawLength-4]&=0x7FF;
304  m_ownData[m_rawLength-4]|=(ndd&0x1F)<<11;
305  }
306  m_ownData[m_rawLength-2]=m_rawLength/2; // 32-bit words
307  m_ownData[m_rawLength-1]=(L1Anumber&0xFF)<<8;
308 }
309 
310 void HcalHTRData::packUnsuppressed(const bool* mp) {
311  if (m_formatVersion<4) return;
312 
313  for (int fiber=1; fiber<=8; fiber++) {
314  for (int fiberchan=0; fiberchan<=2; fiberchan++) {
315  int linchan=(fiber-1)*3+fiberchan;
316 
317  unsigned short& val=m_ownData[m_rawLength-12+(linchan/8)];
318  if (mp[linchan]) val|=1<<(linchan%8);
319  }
320  }
321 
322  // set the unsupressed bit
323  m_ownData[6]|=0x8000;
324 }
325 
326 unsigned int HcalHTRData::getOrbitNumber() const {
327  switch (m_formatVersion) {
328  case (-1) : return (m_rawConst[3]>>8);
329  case (0) : return (m_rawConst[3]>>10);
330  default : return (m_rawConst[3]>>11);
331  }
332 }
333 unsigned int HcalHTRData::getSubmodule() const {
334  switch (m_formatVersion) {
335  case (-1) : return (m_rawConst[3]&0xFF);
336  case (0) : return (m_rawConst[3]&0x3FF);
337  default : return (m_rawConst[3]&0x7FF);
338  }
339 }
340 unsigned int HcalHTRData::htrSlot() const{
341  const unsigned int smid = getSubmodule();
342  return ((smid>>1)&0x1F);
343 }
344 unsigned int HcalHTRData::htrTopBottom() const{
345  const unsigned int smid = getSubmodule();
346  return (smid&0x01);
347 }
348 unsigned int HcalHTRData::readoutVMECrateId() const{
349  const unsigned int smid = getSubmodule();
350  return ((smid>>6)&0x1F);
351 }
353  return (m_formatVersion==-1)?(false):(m_rawConst[2]&0x4000);
354 }
356  return (m_formatVersion<4)?(false):(m_rawConst[6]&0x8000);
357 }
358 bool HcalHTRData::wasMarkAndPassZS(int fiber, int fiberchan) const {
359  if (fiber<1 || fiber>8 || fiberchan<0 || fiberchan>2) return false;
360  if (!isUnsuppressed() || m_formatVersion<5) return false;
361  int linchan=(fiber-1)*3+fiberchan;
362 
363  unsigned short val=m_rawConst[m_rawLength-12+(linchan/8)];
364  return ((val>>(linchan%8))&0x1)!=0;
365 }
366 bool HcalHTRData::wasMarkAndPassZSTP(int slb, int slbchan) const {
367  if (slb<1 || slb>6 || slbchan<0 || slbchan>3) return false;
368  if (!isUnsuppressed() || m_formatVersion<5) return false;
369  int linchan=(slb-1)*4+slbchan;
370 
371  unsigned short val=m_rawConst[m_rawLength-12+(linchan/8)];
372  return ((val>>(linchan%8))&0x100)!=0;
373 }
374 
375 uint32_t HcalHTRData::zsBunchMask() const {
376  uint32_t mask=0;
377  if (isUnsuppressed() && m_formatVersion>=5) {
378  mask=m_rawConst[m_rawLength-5]|
379  ((m_rawConst[m_rawLength-6]&0xF000)<<4);
380  }
381  return mask;
382 }
383 
385  return (m_formatVersion==-1)?(false):(m_rawConst[2]&0x1000);
386 }
388  return (m_formatVersion==-1)?(m_rawConst[2]&0x2):(m_rawConst[2]&0x2000);
389 }
390 int HcalHTRData::getNDD() const {
391  return (m_formatVersion==-1)?(m_rawConst[m_rawLength-4]>>8):(m_rawConst[m_rawLength-4]>>11);
392 }
393 int HcalHTRData::getNTP() const {
394  int retval=-1;
395  if (m_formatVersion==-1) retval=m_rawConst[m_rawLength-4]&0xFF;
396  else if (m_formatVersion<3) retval=m_rawConst[m_rawLength-4]>>11;
397  return retval;
398 }
400  return (m_formatVersion==-1)?(m_rawConst[m_rawLength-4]&0xFF):(m_rawConst[m_rawLength-4]&0x7FF);
401 }
402 int HcalHTRData::getNPS() const {
403  return (m_formatVersion==-1)?(0):((m_rawConst[5]>>3)&0x1F);
404 }
405 unsigned int HcalHTRData::getPipelineLength() const {
406  return (m_formatVersion==-1)?(m_rawConst[2]>>8):(m_rawConst[7]&0xFF);
407 }
408 unsigned int HcalHTRData::getFirmwareRevision() const {
409  return (m_formatVersion==-1)?(0):((m_rawConst[6]&0x1FFF)+((m_rawConst[6]&0xE000)<<3));
410 }
412  return (m_formatVersion<2)?(-1):((m_rawConst[7]>>8)&0xFF);
413 }
414 
415 void HcalHTRData::getHistogramFibers(int& a, int& b) const {
416  a=-1;
417  b=-1;
418  if (m_formatVersion==-1) {
419  a=((m_rawConst[2]&0x0F00)>>8);
420  b=((m_rawConst[2]&0xF000)>>12);
421  } else {
422  a=((m_rawConst[5]&0x0F00)>>8);
423  b=((m_rawConst[5]&0xF000)>>12);
424  }
425 }
426 
427 bool HcalHTRData::wasHistogramError(int ifiber) const {
428  bool retval=!isHistogramEvent();
429  if (!retval) {
430  retval=((m_rawConst[7])&(1<<ifiber))!=0;
431  }
432  return retval;
433 }
434 
435 bool HcalHTRData::unpack_per_channel_header(unsigned short header, int& flav, int& error_flags, int& capid0, int& channelid) {
436  flav=(header>>12)&0x7;
437  error_flags=(header>>10)&0x3;
438  capid0=(header>>8)&0x3;
439  channelid=(header)&0xFF;
440  return (header&0x8000)!=0;
441 }
442 
443 bool HcalHTRData::unpackHistogram(int myfiber, int mysc, int capid, unsigned short* histogram) const {
444  // check for histogram mode
445  if (!isHistogramEvent()) return false;
446 
447  int fiber1, fiber2;
448  getHistogramFibers(fiber1,fiber2);
449  if (fiber1!=myfiber && fiber2!=myfiber) return false;
450 
451  if (m_formatVersion==-1) {
452  int offset=6+mysc*4*32+capid*32;
453  if (myfiber==fiber2) offset+=3*4*32; // skip to the second half...
454  for (int i=0; i<32; i++)
455  histogram[i]=m_rawConst[offset+i];
456  return true;
457  } else {
458  int offset=8+mysc*4*32+capid*32;
459  if (myfiber==fiber2) offset+=3*4*32; // skip to the second half...
460  for (int i=0; i<32; i++)
461  histogram[i]=m_rawConst[offset+i];
462  return true;
463  }
464 }
unsigned short * m_ownData
Definition: HcalHTRData.h:256
int i
Definition: DBlmapReader.cc:9
int getNDD() const
Get the number of daq data samples per channel when not zero-suppressed.
Definition: HcalHTRData.cc:390
bool check() const
Check for a good event Requires a minimum length, matching wordcount and length, not an empty event...
Definition: HcalHTRData.cc:64
int m_formatVersion
Definition: HcalHTRData.h:253
unsigned int htrTopBottom() const
HcalElectronicsId-style HTR top/bottom (1=top/0=bottom)
Definition: HcalHTRData.cc:344
void packUnsuppressed(const bool *mp)
pack trailer with Mark and Pass bits
Definition: HcalHTRData.cc:310
bool isPatternRAMEvent() const
Is this event a pattern-ram event?
Definition: HcalHTRData.cc:384
const unsigned short * m_rawConst
Definition: HcalHTRData.h:255
void determineStaticLengths(int &headerWords, int &trailerWords) const
Definition: HcalHTRData.cc:142
bool wasMarkAndPassZS(int fiber, int fiberchan) const
Was this channel passed as part of Mark&amp;Pass ZS?
Definition: HcalHTRData.cc:358
bool wasHistogramError(int ifiber) const
Was there an error on the given fiber for this event (only in histogram mode!)
Definition: HcalHTRData.cc:427
static const int CHANNELS_PER_SPIGOT
Definition: HcalHTRData.h:20
static bool unpack_per_channel_header(unsigned short, int &flav, int &error_flags, int &capid0, int &channelid)
Unpack a per-channel header word (compact format)
Definition: HcalHTRData.cc:435
static const int MAXIMUM_SAMPLES_PER_CHANNEL
Definition: HcalHTRData.h:21
void getHistogramFibers(int &a, int &b) const
Get the fiber numbers for the data present in this event (only in histogram mode!) ...
Definition: HcalHTRData.cc:415
unsigned int getOrbitNumber() const
Get the HTR orbit number.
Definition: HcalHTRData.cc:326
HcalHTRData & operator=(const HcalHTRData &)
Definition: HcalHTRData.cc:40
int getNPrecisionWords() const
Get the total number of precision data 16-bit words.
Definition: HcalHTRData.cc:399
bool isCalibrationStream() const
Is this event a calibration-stream event?
Definition: HcalHTRData.cc:352
bool isUnsuppressed() const
Is this event an unsuppresed event?
Definition: HcalHTRData.cc:355
void allocate(int version_to_create=0)
Definition: HcalHTRData.cc:28
unsigned int getPipelineLength() const
Get the pipeline length used for this event.
Definition: HcalHTRData.cc:405
bool isOverflowWarning() const
Definition: HcalHTRData.cc:111
unsigned int htrSlot() const
HcalElectronicsId-style HTR slot.
Definition: HcalHTRData.cc:340
void unpack(unsigned char *daq_lengths, unsigned short *daq_samples, unsigned char *tp_lengths, unsigned short *tp_samples) const
Unpack the HTR data into TP and DAQ data sorted by channel.
Definition: HcalHTRData.cc:174
bool unpackHistogram(int fiber, int fiberchan, int capid, unsigned short *histogram) const
Unpack special histogramming mode data.
Definition: HcalHTRData.cc:443
int getNTP() const
Get the number of trigger data samples when not zero-suppressed (not available after FW 4) ...
Definition: HcalHTRData.cc:393
bool isEmptyEvent() const
Definition: HcalHTRData.cc:102
unsigned int offset(bool)
void pack(unsigned char *daq_lengths, unsigned short *daq_samples, unsigned char *tp_lengths, unsigned short *tp_samples, bool do_capid=false)
Unpack the HTR data into TP and DAQ data sorted by channel.
Definition: HcalHTRData.cc:226
void dataPointers(const unsigned short **daq_first, const unsigned short **daq_last, const unsigned short **tp_first, const unsigned short **tp_last) const
Obtain the starting and ending pointers for external unpacking of the data.
Definition: HcalHTRData.cc:155
static const int channelDecoder[32]
Definition: HcalHTRData.cc:169
double b
Definition: hdecay.h:120
int getNPS() const
Get the number of presamples in daq data.
Definition: HcalHTRData.cc:402
int getFirmwareFlavor() const
Get the HTR firmware flavor.
Definition: HcalHTRData.cc:411
unsigned int readoutVMECrateId() const
HcalElectronicsId-style VME crate number.
Definition: HcalHTRData.cc:348
void adoptData(const unsigned short *data, int length)
Definition: HcalHTRData.cc:49
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
bool wasMarkAndPassZSTP(int slb, int slbchan) const
Was this channel passed as part of Mark&amp;Pass ZS?
Definition: HcalHTRData.cc:366
void packHeaderTrailer(int L1Anumber, int bcn, int submodule, int orbitn, int pipeline, int ndd, int nps, int firmwareRev=0)
pack header and trailer (call after pack)
Definition: HcalHTRData.cc:285
double a
Definition: hdecay.h:121
uint32_t zsBunchMask() const
ZS Bunch Mask (if available)
Definition: HcalHTRData.cc:375
unsigned int getSubmodule() const
Get the HTR submodule number.
Definition: HcalHTRData.cc:333
bool isBusy() const
Definition: HcalHTRData.cc:119
unsigned int getFirmwareRevision() const
Get the HTR firmware version.
Definition: HcalHTRData.cc:408
bool isHistogramEvent() const
Is this event a histogram event? (do not call standard unpack in this case!!!!!)
Definition: HcalHTRData.cc:387
void determineSectionLengths(int &tpWords, int &daqWords, int &headerWords, int &trailerWords) const
Definition: HcalHTRData.cc:127