CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes
CastorCORData Class Reference

#include <CastorCORData.h>

Public Member Functions

void adoptData (const unsigned short *data, int length)
 
void allocate (int version_to_create=0)
 
 CastorCORData ()
 
 CastorCORData (int version_to_create)
 
 CastorCORData (const unsigned short *data, int length)
 
 CastorCORData (const CastorCORData &)
 
bool check () const
 Check for a good event Requires a minimum length, matching wordcount and length, not an empty event. More...
 
unsigned int getBunchNumber () const
 Get the HTR bunch number. More...
 
unsigned int getDLLunlock () const
 Get DLLunlock bits. More...
 
unsigned int getErrorsWord () const
 Get the errors word. More...
 
unsigned int getExtHdr1 () const
 Get the COR Ext Header words. More...
 
unsigned int getExtHdr2 () const
 
unsigned int getExtHdr3 () const
 
unsigned int getExtHdr4 () const
 
unsigned int getExtHdr5 () const
 
unsigned int getExtHdr6 () const
 
unsigned int getExtHdr7 () const
 
unsigned int getExtHdr8 () const
 
unsigned int getFib1OrbMsgBCN () const
 Get the BCN of the Fiber Orbit Messages. More...
 
unsigned int getFib2OrbMsgBCN () const
 
unsigned int getFib3OrbMsgBCN () const
 
unsigned int getFib4OrbMsgBCN () const
 
unsigned int getFib5OrbMsgBCN () const
 
unsigned int getFib6OrbMsgBCN () const
 
unsigned int getFib7OrbMsgBCN () const
 
unsigned int getFib8OrbMsgBCN () const
 
unsigned int getFirmwareRevision () const
 Get the COR firmware version. More...
 
int getFormatVersion () const
 Get the version number of this event. More...
 
void getHistogramFibers (int &a, int &b) const
 Get the fiber numbers for the data present in this event (only in histogram mode!) More...
 
unsigned int getL1ANumber () const
 Get the HTR event number. More...
 
int getNDD () const
 Get the number of daq data samples per channel when not zero-suppressed. More...
 
int getNPrecisionWords () const
 Get the total number of precision data 16-bit words. More...
 
int getNPS () const
 Get the number of presamples in daq data. More...
 
int getNTP () const
 Get the number of trigger data samples when not zero-suppressed (not available after FW 4) More...
 
unsigned int getOrbitNumber () const
 Get the HTR orbit number. More...
 
unsigned int getPipelineLength () const
 Get the pipeline length used for this event. More...
 
const unsigned short * getRawData () const
 Get a pointer to the raw data. More...
 
const int getRawLength () const
 Get the length of the raw data. More...
 
unsigned int getSubmodule () const
 Get the HTR submodule number. More...
 
unsigned int getTTCready () const
 Get TTCready bits. More...
 
unsigned int htrSlot () const
 HcalElectronicsId-style HTR slot. More...
 
unsigned int htrTopBottom () const
 HcalElectronicsId-style HTR top/bottom (1=top/0=bottom) More...
 
bool isCalibrationStream () const
 Is this event a calibration-stream event? More...
 
bool isHistogramEvent () const
 Is this event a histogram event? (do not call standard unpack in this case!!!!!) More...
 
bool isPatternRAMEvent () const
 Is this event a pattern-ram event? More...
 
bool isUnsuppressed () const
 Is this event an unsuppresed event? More...
 
CastorCORDataoperator= (const CastorCORData &)
 
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. More...
 
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) More...
 
unsigned int readoutVMECrateId () const
 HcalElectronicsId-style VME crate number. More...
 
void unpack (unsigned char *daq_lengths, unsigned short *daq_samples, unsigned char *tp_lengths, unsigned short *tp_samples) const
 Obtain the starting and ending pointers for external unpacking of the data. More...
 
bool unpackHistogram (int fiber, int fiberchan, int capid, unsigned short *histogram) const
 Unpack special histogramming mode data. More...
 
bool wasMarkAndPassZS (int fiber, int fiberchan) const
 Was this channel passed as part of Mark&Pass ZS? More...
 
 ~CastorCORData ()
 

Static Public Attributes

static const int CHANNELS_PER_SPIGOT = 36
 
static const int MAXIMUM_SAMPLES_PER_CHANNEL = 20
 

Protected Member Functions

void determineSectionLengths (int &tpWords, int &daqWords, int &headerWords, int &trailerWords, int &triggerWords) const
 Was there an error on the given fiber for this event (only in histogram mode!) More...
 
void determineStaticLengths (int &headerWords, int &trailerWords, int &triggerWords) const
 

Protected Attributes

int m_formatVersion
 
unsigned short * m_ownData
 
const unsigned short * m_rawConst
 
int m_rawLength
 
unsigned short * m_unpackedData
 

Detailed Description

Interpretive class for CastorCORDat Since this class requires external specification of the length of the data, it is implemented as an interpreter, rather than a cast-able header class.

Author
A. Campbell - DESY

Definition at line 14 of file CastorCORData.h.

Constructor & Destructor Documentation

CastorCORData::CastorCORData ( )

Definition at line 20 of file CastorCORData.cc.

Referenced by ~CastorCORData().

20 : m_formatVersion(-2), m_rawLength(0), m_rawConst(nullptr), m_ownData(nullptr) { }
unsigned short * m_ownData
const unsigned short * m_rawConst
CastorCORData::~CastorCORData ( )
inline

Definition at line 20 of file CastorCORData.h.

References adoptData(), allocate(), CastorCORData(), data, m_ownData, and operator=().

20 { if (m_ownData!=nullptr) delete [] m_ownData; }
unsigned short * m_ownData
CastorCORData::CastorCORData ( int  version_to_create)

Definition at line 27 of file CastorCORData.cc.

References allocate().

27  : m_formatVersion(version_to_create) {
28  allocate(version_to_create);
29 }
void allocate(int version_to_create=0)
CastorCORData::CastorCORData ( const unsigned short *  data,
int  length 
)

Definition at line 21 of file CastorCORData.cc.

References adoptData(), and m_ownData.

21  {
22  adoptData(data,length);
23  m_ownData=nullptr;
24 }
void adoptData(const unsigned short *data, int length)
unsigned short * m_ownData
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
CastorCORData::CastorCORData ( const CastorCORData hd)

Definition at line 25 of file CastorCORData.cc.

unsigned short * m_ownData
const unsigned short * m_rawConst

Member Function Documentation

void CastorCORData::adoptData ( const unsigned short *  data,
int  length 
)

Definition at line 50 of file CastorCORData.cc.

References data, m_formatVersion, m_rawConst, and m_rawLength.

Referenced by CastorCORData(), CastorCTDCHeader::getSpigotData(), and ~CastorCORData().

50  {
51  m_rawLength=length;
53  if (m_rawLength<5) {
54  m_formatVersion=-2; // invalid!
55  } else {
56  m_formatVersion=(m_rawConst[4]>>12)&0xF;
57  }
58 }
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
const unsigned short * m_rawConst
void CastorCORData::allocate ( int  version_to_create = 0)

Definition at line 31 of file CastorCORData.cc.

References m_formatVersion, m_ownData, m_rawConst, and m_rawLength.

Referenced by CastorCORData(), CastorCtdcPacker::pack(), and ~CastorCORData().

31  {
32  m_formatVersion=version_to_create;
33  // the needed space is for the biggest possible event...
34  const int needed=0x200;
35  // create a buffer big enough...
36  m_ownData=new unsigned short[needed];
37  m_rawLength=0;
39 }
unsigned short * m_ownData
const unsigned short * m_rawConst
bool CastorCORData::check ( ) const

Check for a good event Requires a minimum length, matching wordcount and length, not an empty event.

Definition at line 63 of file CastorCORData.cc.

References determineSectionLengths(), RecoTauValidation_cfi::header, m_rawConst, and m_rawLength.

Referenced by getRawLength(), and CastorCtdcUnpacker::unpack().

63  {
64  // length checks
65  // minimum length
66  if (m_rawLength<6+12) return false;
67  // matches wordcount
68  if (m_rawLength!=m_rawConst[m_rawLength-3]) return false;
69 
70  // daq/tp length check
71  int tp, daq, header, trailer, trigger;
72  determineSectionLengths(tp,daq,header,trailer,trigger);
73  if (trigger+daq+header+trailer>m_rawLength) return false;
74 
75  return true;
76 }
const unsigned short * m_rawConst
void determineSectionLengths(int &tpWords, int &daqWords, int &headerWords, int &trailerWords, int &triggerWords) const
Was there an error on the given fiber for this event (only in histogram mode!)
void CastorCORData::determineSectionLengths ( int &  tpWords,
int &  daqWords,
int &  headerWords,
int &  trailerWords,
int &  triggerWords 
) const
protected

Was there an error on the given fiber for this event (only in histogram mode!)

Definition at line 78 of file CastorCORData.cc.

References m_rawConst, and m_rawLength.

Referenced by check(), getExtHdr8(), and unpack().

78  {
79 
80  tpWords=m_rawConst[5]>>8; // should be 8 but could be up to 12
81  if (m_rawLength>4)
82  daqWords=m_rawConst[m_rawLength-4]&0x7FF; // no zero suppression supported
83  // there are 24 16bit words per time sample
84  // these contain the data from 36 channels
85  // daqWords is number of 16 bit words of qie data
86  // hence #qie data values id daqWords*3/2
87  headerWords=8;
88  triggerLen=12; // total space reserved for trigger information
89  trailerWords=12; // minimum, may be more...
90 }
const unsigned short * m_rawConst
void CastorCORData::determineStaticLengths ( int &  headerWords,
int &  trailerWords,
int &  triggerWords 
) const
protected

Definition at line 92 of file CastorCORData.cc.

Referenced by getExtHdr8(), and pack().

92  {
93  headerWords=8;
94  triggerLen=12; // total space reserved for trigger information
95  trailerWords=12; // minimum, may be more...
96 
97 }
unsigned int CastorCORData::getBunchNumber ( ) const
inline
unsigned int CastorCORData::getDLLunlock ( ) const
inline

Get DLLunlock bits.

Definition at line 143 of file CastorCORData.h.

References m_rawConst.

143  {
144  return (m_rawConst[5]>>2)&0x3; }
const unsigned short * m_rawConst
unsigned int CastorCORData::getErrorsWord ( ) const
inline

Get the errors word.

Definition at line 130 of file CastorCORData.h.

References getNDD(), getNPrecisionWords(), getNPS(), getNTP(), and m_rawConst.

Referenced by CastorCTDCHeader::copySpigotData().

130  {
131  return m_rawConst[2]&0xFFFF; }
const unsigned short * m_rawConst
unsigned int CastorCORData::getExtHdr1 ( ) const
inline

Get the COR Ext Header words.

Definition at line 185 of file CastorCORData.h.

References m_rawConst.

185  {
186  return (m_rawConst[0]);}
const unsigned short * m_rawConst
unsigned int CastorCORData::getExtHdr2 ( ) const
inline

Definition at line 187 of file CastorCORData.h.

References m_rawConst.

187  {
188  return (m_rawConst[1]); }
const unsigned short * m_rawConst
unsigned int CastorCORData::getExtHdr3 ( ) const
inline

Definition at line 189 of file CastorCORData.h.

References m_rawConst.

189  {
190  return (m_rawConst[2]);}
const unsigned short * m_rawConst
unsigned int CastorCORData::getExtHdr4 ( ) const
inline

Definition at line 191 of file CastorCORData.h.

References m_rawConst.

191  {
192  return (m_rawConst[3]); }
const unsigned short * m_rawConst
unsigned int CastorCORData::getExtHdr5 ( ) const
inline

Definition at line 193 of file CastorCORData.h.

References m_rawConst.

193  {
194  return (m_rawConst[4]);}
const unsigned short * m_rawConst
unsigned int CastorCORData::getExtHdr6 ( ) const
inline

Definition at line 195 of file CastorCORData.h.

References m_rawConst.

195  {
196  return (m_rawConst[5]);}
const unsigned short * m_rawConst
unsigned int CastorCORData::getExtHdr7 ( ) const
inline

Definition at line 197 of file CastorCORData.h.

References m_rawConst.

197  {
198  return (m_rawConst[6]);}
const unsigned short * m_rawConst
unsigned int CastorCORData::getExtHdr8 ( ) const
inline

Definition at line 199 of file CastorCORData.h.

References determineSectionLengths(), determineStaticLengths(), and m_rawConst.

199  {
200  return (m_rawConst[7]);}
const unsigned short * m_rawConst
unsigned int CastorCORData::getFib1OrbMsgBCN ( ) const
inline

Get the BCN of the Fiber Orbit Messages.

Definition at line 151 of file CastorCORData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

151  {
152  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-12]&0xFFF);
153 }
const unsigned short * m_rawConst
unsigned int CastorCORData::getFib2OrbMsgBCN ( ) const
inline

Definition at line 154 of file CastorCORData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

154  {
155  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-11]&0xFFF);
156 }
const unsigned short * m_rawConst
unsigned int CastorCORData::getFib3OrbMsgBCN ( ) const
inline

Definition at line 158 of file CastorCORData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

158  {
159  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-10]&0xFFF);
160 }
const unsigned short * m_rawConst
unsigned int CastorCORData::getFib4OrbMsgBCN ( ) const
inline

Definition at line 162 of file CastorCORData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

162  {
163  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-9]&0xFFF);
164 }
const unsigned short * m_rawConst
unsigned int CastorCORData::getFib5OrbMsgBCN ( ) const
inline

Definition at line 166 of file CastorCORData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

166  {
167  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-8]&0xFFF);
168 }
const unsigned short * m_rawConst
unsigned int CastorCORData::getFib6OrbMsgBCN ( ) const
inline

Definition at line 170 of file CastorCORData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

170  {
171  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-7]&0xFFF);
172 }
const unsigned short * m_rawConst
unsigned int CastorCORData::getFib7OrbMsgBCN ( ) const
inline

Definition at line 174 of file CastorCORData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

174  {
175  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-6]&0xFFF);
176 }
const unsigned short * m_rawConst
unsigned int CastorCORData::getFib8OrbMsgBCN ( ) const
inline

Definition at line 178 of file CastorCORData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

178  {
179  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-5]&0xFFF);
180 }
const unsigned short * m_rawConst
unsigned int CastorCORData::getFirmwareRevision ( ) const

Get the COR firmware version.

Definition at line 316 of file CastorCORData.cc.

References m_rawConst.

Referenced by getBunchNumber().

316  {
317  return (m_rawConst[6]);
318 }
const unsigned short * m_rawConst
int CastorCORData::getFormatVersion ( ) const
inline

Get the version number of this event.

Definition at line 30 of file CastorCORData.h.

References m_formatVersion.

30 { return m_formatVersion; }
void CastorCORData::getHistogramFibers ( int &  a,
int &  b 
) const

Get the fiber numbers for the data present in this event (only in histogram mode!)

Definition at line 320 of file CastorCORData.cc.

References m_formatVersion, and m_rawConst.

Referenced by getBunchNumber(), and unpackHistogram().

320  {
321  a=-1;
322  b=-1;
323  if (m_formatVersion==-1) {
324  a=((m_rawConst[2]&0x0F00)>>8);
325  b=((m_rawConst[2]&0xF000)>>12);
326  } else {
327  a=((m_rawConst[5]&0x0F00)>>8);
328  b=((m_rawConst[5]&0xF000)>>12);
329  }
330 }
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
const unsigned short * m_rawConst
unsigned int CastorCORData::getL1ANumber ( ) const
inline

Get the HTR event number.

Definition at line 90 of file CastorCORData.h.

References m_rawConst.

90  {
91  return (m_rawConst[0]&0xFF)+(m_rawConst[1]<<8);
92  }
const unsigned short * m_rawConst
int CastorCORData::getNDD ( ) const

Get the number of daq data samples per channel when not zero-suppressed.

Definition at line 298 of file CastorCORData.cc.

References m_formatVersion, m_rawConst, and m_rawLength.

Referenced by getErrorsWord().

298  {
299  return (m_formatVersion==-1)?(m_rawConst[m_rawLength-4]>>8):(m_rawConst[m_rawLength-4]>>11);
300 }
const unsigned short * m_rawConst
int CastorCORData::getNPrecisionWords ( ) const

Get the total number of precision data 16-bit words.

Definition at line 307 of file CastorCORData.cc.

References m_formatVersion, m_rawConst, and m_rawLength.

Referenced by getErrorsWord().

307  {
308  return (m_formatVersion==-1)?(m_rawConst[m_rawLength-4]&0xFF):(m_rawConst[m_rawLength-4]&0x7FF);
309 }
const unsigned short * m_rawConst
int CastorCORData::getNPS ( ) const

Get the number of presamples in daq data.

Definition at line 310 of file CastorCORData.cc.

References m_formatVersion, and m_rawConst.

Referenced by getErrorsWord(), and CastorCtdcUnpacker::unpack().

310  {
311  return (m_formatVersion==-1)?(0):((m_rawConst[5]>>4)&0xF);
312 }
const unsigned short * m_rawConst
int CastorCORData::getNTP ( ) const

Get the number of trigger data samples when not zero-suppressed (not available after FW 4)

Definition at line 301 of file CastorCORData.cc.

References m_formatVersion, m_rawConst, and m_rawLength.

Referenced by getErrorsWord().

301  {
302  int retval=-1;
303  if (m_formatVersion==-1) retval=m_rawConst[m_rawLength-4]&0xFF;
304  else if (m_formatVersion<3) retval=m_rawConst[m_rawLength-4]>>11;
305  return retval;
306 }
const unsigned short * m_rawConst
unsigned int CastorCORData::getOrbitNumber ( ) const

Get the HTR orbit number.

Definition at line 260 of file CastorCORData.cc.

References m_rawConst.

Referenced by getBunchNumber().

260  {
261  return (m_rawConst[3]>>11);
262 }
const unsigned short * m_rawConst
unsigned int CastorCORData::getPipelineLength ( ) const

Get the pipeline length used for this event.

Definition at line 313 of file CastorCORData.cc.

References m_rawConst.

Referenced by getBunchNumber().

313  {
314  return (m_rawConst[7]&0xFF);
315 }
const unsigned short * m_rawConst
const unsigned short* CastorCORData::getRawData ( ) const
inline

Get a pointer to the raw data.

Definition at line 33 of file CastorCORData.h.

References m_rawConst.

Referenced by CastorCTDCHeader::copySpigotData().

33 { return m_rawConst; }
const unsigned short * m_rawConst
const int CastorCORData::getRawLength ( ) const
inline

Get the length of the raw data.

Definition at line 36 of file CastorCORData.h.

References check(), m_rawLength, pack(), packHeaderTrailer(), unpack(), and unpackHistogram().

Referenced by CastorCTDCHeader::copySpigotData(), and CastorCtdcPacker::pack().

36 { return m_rawLength; }
unsigned int CastorCORData::getSubmodule ( ) const

Get the HTR submodule number.

Definition at line 263 of file CastorCORData.cc.

References m_rawConst.

Referenced by getBunchNumber(), htrSlot(), htrTopBottom(), and readoutVMECrateId().

263  {
264  return (m_rawConst[3]&0x7FF);
265 }
const unsigned short * m_rawConst
unsigned int CastorCORData::getTTCready ( ) const
inline

Get TTCready bits.

Definition at line 147 of file CastorCORData.h.

References m_rawConst.

147  {
148  return m_rawConst[5]&0x3; }
const unsigned short * m_rawConst
unsigned int CastorCORData::htrSlot ( ) const

HcalElectronicsId-style HTR slot.

Definition at line 266 of file CastorCORData.cc.

References getSubmodule().

Referenced by getBunchNumber().

266  {
267  const unsigned int smid = getSubmodule();
268  return ((smid>>1)&0x1F);
269 }
unsigned int getSubmodule() const
Get the HTR submodule number.
unsigned int CastorCORData::htrTopBottom ( ) const

HcalElectronicsId-style HTR top/bottom (1=top/0=bottom)

Definition at line 270 of file CastorCORData.cc.

References getSubmodule().

Referenced by getBunchNumber().

270  {
271  const unsigned int smid = getSubmodule();
272  return (smid&0x01);
273 }
unsigned int getSubmodule() const
Get the HTR submodule number.
bool CastorCORData::isCalibrationStream ( ) const

Is this event a calibration-stream event?

Definition at line 278 of file CastorCORData.cc.

References m_formatVersion, and m_rawConst.

Referenced by getBunchNumber().

278  {
279  return (m_formatVersion==-1)?(false):(m_rawConst[2]&0x4000);
280 }
const unsigned short * m_rawConst
bool CastorCORData::isHistogramEvent ( ) const

Is this event a histogram event? (do not call standard unpack in this case!!!!!)

Definition at line 295 of file CastorCORData.cc.

References m_formatVersion, and m_rawConst.

Referenced by getBunchNumber(), CastorCtdcUnpacker::unpack(), and unpackHistogram().

295  {
296  return (m_formatVersion==-1)?(m_rawConst[2]&0x2):(m_rawConst[2]&0x2000);
297 }
const unsigned short * m_rawConst
bool CastorCORData::isPatternRAMEvent ( ) const

Is this event a pattern-ram event?

Definition at line 292 of file CastorCORData.cc.

References m_formatVersion, and m_rawConst.

Referenced by getBunchNumber().

292  {
293  return (m_formatVersion==-1)?(false):(m_rawConst[2]&0x1000);
294 }
const unsigned short * m_rawConst
bool CastorCORData::isUnsuppressed ( ) const

Is this event an unsuppresed event?

Definition at line 281 of file CastorCORData.cc.

References m_formatVersion, and m_rawConst.

Referenced by getBunchNumber(), and wasMarkAndPassZS().

281  {
282  return (m_formatVersion<4)?(false):(m_rawConst[6]&0x8000);
283 }
const unsigned short * m_rawConst
CastorCORData & CastorCORData::operator= ( const CastorCORData hd)

Definition at line 41 of file CastorCORData.cc.

References m_formatVersion, m_ownData, m_rawConst, and m_rawLength.

Referenced by ~CastorCORData().

41  {
42  if (m_ownData==nullptr) {
46  }
47  return (*this);
48 }
unsigned short * m_ownData
const unsigned short * m_rawConst
void CastorCORData::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.

Parameters
daq_lengthsunsigned char[24] of lengths
daq_samplesunsigned short [24*20] of data
tp_lengthsunsigned char[24] of lengths
tp_samplesunsigned short [24*20] of data

Definition at line 155 of file CastorCORData.cc.

References determineStaticLengths(), m_ownData, m_rawLength, MAXIMUM_SAMPLES_PER_CHANNEL, min(), indexGen::s2, and globals_cff::x1.

Referenced by pyrootRender.interactiveRender::draw(), getRawLength(), and CastorCtdcPacker::pack().

156  {
157 
158  int tp_words_total=0, daq_words_total=0, headerLen, trailerLen, triggerLen;
159  determineStaticLengths(headerLen,trailerLen,triggerLen);
160 
161  tp_words_total=0;
162  daq_words_total=0;
163  int isample;
164 
165  // trigger words
166  unsigned short* ptr=m_ownData+headerLen;
167  if (tp_samples!=nullptr && tp_lengths!=nullptr) {
168  for (isample=0; isample<tp_lengths[0] && isample<12; isample++) {
169  ptr[tp_words_total]=tp_samples[isample];
170  tp_words_total++;
171  }
172  }
173 
174  // daq words
175  ptr=m_ownData+headerLen+triggerLen;
176  int timesamples = std::min (daq_lengths[0]&0x3f,MAXIMUM_SAMPLES_PER_CHANNEL) ;
177  int ts, capid, j;
178  unsigned long dat;
179  unsigned short s1,s2,s3;
180  bool somevalid;
181 
182  for (ts=0; ts<timesamples; ts++){
183  capid = ts%4;
184  for (j=0; j<12 ; j++) {
185  somevalid = false;
186  if ( daq_lengths[j*3] == 0 || ( daq_lengths[j*3] & 0xc0 ) ) {
187  s1 = 0x400; // ER !DV
188  } else {
189  s1 = daq_samples[(j*3 )*MAXIMUM_SAMPLES_PER_CHANNEL+ts];
190  somevalid = true;
191  }
192  if ( daq_lengths[j*3+1] == 0 || ( daq_lengths[j*3+1] & 0xc0 ) ) {
193  s2 = 0x400; // ER !DV
194  } else {
195  s2 = daq_samples[(j*3+1)*MAXIMUM_SAMPLES_PER_CHANNEL+ts];
196  somevalid = true;
197  }
198  if ( daq_lengths[j*3+2] == 0 || ( daq_lengths[j*3+2] & 0xc0 ) ) {
199  s3 = 0x400; // ER !DV
200  } else {
201  s3 = daq_samples[(j*3+2)*MAXIMUM_SAMPLES_PER_CHANNEL+ts];
202  somevalid = true;
203  }
204  //dat = 0x80000001 // msb is dv for the fibre
208  //| ( daq_samples[(j*3 )*MAXIMUM_SAMPLES_PER_CHANNEL+ts] & 0x1ff ) << 21
209  //| ( daq_samples[(j*3+1)*MAXIMUM_SAMPLES_PER_CHANNEL+ts] & 0x1ff ) << 11
210  //| ( daq_samples[(j*3+2)*MAXIMUM_SAMPLES_PER_CHANNEL+ts] & 0x1ff ) << 1
211  //| ( daq_samples[(j*3 )*MAXIMUM_SAMPLES_PER_CHANNEL+ts] & 0x400 ) << 20
212  //| ( daq_samples[(j*3+1)*MAXIMUM_SAMPLES_PER_CHANNEL+ts] & 0x400 ) << 10
213  //| ( daq_samples[(j*3+2)*MAXIMUM_SAMPLES_PER_CHANNEL+ts] & 0x400 ) ;
214  dat = 0x00000001 // msb is dv for the fibre
215  // sample data is ER(1)+CAPID(2)+EXP(2)+Mantissa(5)
216  // daq_samples has ER(1)+DV(1)+CAPID(2)+EXP(2)+Mantissa(5)
217  // should check daq_lengths for the 3 channels here ??
218  | ( s1 & 0x1ff ) << 21
219  | ( s2 & 0x1ff ) << 11
220  | ( s3 & 0x1ff ) << 1
221  | ( s1 & 0x400 ) << 20
222  | ( s2 & 0x400 ) << 10
223  | ( s3 & 0x400 ) ;
224  if ( somevalid ) dat |= 0x80000000;
225  // should we set dv from daq_samples ??
226  if (do_capid) dat = ( dat & 0xcff3fcff ) | capid << 28 | capid << 18 | capid << 8;
227  ptr[daq_words_total++] = dat >> 16;
228  ptr[daq_words_total++] = dat & 0xffff;
229 
230  }
231  }
232 
233  m_ownData[5]=(tp_words_total<<8)|0x1;
234  unsigned short totalLen=headerLen+12+daq_words_total+trailerLen;
235 
236  m_rawLength=totalLen;
237  m_ownData[totalLen-2]=totalLen/2; // 32-bit words
238  m_ownData[totalLen-3]=totalLen;
239  m_ownData[totalLen-4]=daq_words_total;
240 
241 }
static const int MAXIMUM_SAMPLES_PER_CHANNEL
Definition: CastorCORData.h:17
T min(T a, T b)
Definition: MathUtil.h:58
unsigned short * m_ownData
void determineStaticLengths(int &headerWords, int &trailerWords, int &triggerWords) const
void CastorCORData::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 at line 243 of file CastorCORData.cc.

References m_formatVersion, m_ownData, and m_rawLength.

Referenced by getRawLength(), and CastorCtdcPacker::pack().

243  {
244  m_ownData[0]=L1Anumber&0xFF;
245  m_ownData[1]=(L1Anumber&0xFFFF00)>>8;
246 
247  m_ownData[2]=0x8000; // Version is valid, no error bits - status bits need definition
248  m_ownData[3]=((orbitn&0x1F)<<11)|(submodule&0x7FF);
249  m_ownData[4]=((m_formatVersion&0xF)<<12)|(bcn&0xFFF);
250  m_ownData[5]|=((nps&0xF)<<4)|0x1;
251  m_ownData[6]=((firmwareRev&0x70000)>>3)|(firmwareRev&0x1FFF);
252  m_ownData[7]=(pipeline&0xFF) | ((ndd&0x1F)<<8);
253  m_ownData[m_rawLength-4]&=0x7FF;
254  m_ownData[m_rawLength-4]|=(ndd&0x1F)<<11;
255 
256  m_ownData[m_rawLength-2]=m_rawLength/2; // 32-bit words
257  m_ownData[m_rawLength-1]=(L1Anumber&0xFF)<<8;
258 }
unsigned short * m_ownData
unsigned int CastorCORData::readoutVMECrateId ( ) const

HcalElectronicsId-style VME crate number.

Definition at line 274 of file CastorCORData.cc.

References getSubmodule().

Referenced by getBunchNumber().

274  {
275  const unsigned int smid = getSubmodule();
276  return ((smid>>6)&0x1F);
277 }
unsigned int getSubmodule() const
Get the HTR submodule number.
void CastorCORData::unpack ( unsigned char *  daq_lengths,
unsigned short *  daq_samples,
unsigned char *  tp_lengths,
unsigned short *  tp_samples 
) const

Obtain the starting and ending pointers for external unpacking of the data.

Parameters
daq_firstPointer to a pointer to the start of the DAQ data
daq_lastPointer to a pointer to the end of the DAQ data
tp_firstPointer to a pointer to the start of the TP data
tp_lastPointer to a pointer to the end of the TP dataUnpack the HTR data into TP and DAQ data sorted by channel
daq_lengthsunsigned char[24] of lengths. High bit set indicates error with this channel
daq_samplesunsigned short [24*20] of data
tp_lengthsunsigned char[24] of lengths
tp_samplesunsigned short [24*20] of data

Definition at line 100 of file CastorCORData.cc.

References CHANNELS_PER_SPIGOT, determineSectionLengths(), m_rawConst, and MAXIMUM_SAMPLES_PER_CHANNEL.

Referenced by getRawLength(), and CastorCtdcUnpacker::unpack().

101  {
102 
103  if (daq_lengths!=nullptr) memset(daq_lengths,0,CHANNELS_PER_SPIGOT);
104  if (tp_lengths!=nullptr) memset(tp_lengths,0,1);
105 
106  int tp_words_total = 0;
107  int daq_words_total = 0;
108  int headerLen = 0;
109  int trailerLen = 0;
110  int triggerLen = 0;
111  determineSectionLengths(tp_words_total,daq_words_total,headerLen,trailerLen,triggerLen);
112 
113  int wordPtr;
114  const unsigned short* tpBase=m_rawConst+headerLen;
115  // process the trigger primitive words
116  if (tp_lengths!=nullptr) {
117  for (wordPtr=0; wordPtr<tp_words_total; wordPtr++) {
118  tp_samples[tp_lengths[0]]=tpBase[wordPtr];
119  tp_lengths[0]++;
120  }
121  }
122 
123  const unsigned short* daqBase=m_rawConst+headerLen+triggerLen;
124  unsigned long dat;
125  // process the DAQ words
126  int lastCapid=0;
127  int ts,dv;
128  int tsamples = daq_words_total/24;
129  if (daq_lengths!=nullptr) {
130  for ( ts = 0; ts < tsamples; ts++ ) {
131  for (int j=0; j<12 ; j++) {
132  dat = daqBase[(ts*12+j)*2]<<16 | daqBase[(ts*12+j)*2+1];
133  dv = ( dat & 0x80000000 ) >> 31;
134  daq_samples[(j*3) *MAXIMUM_SAMPLES_PER_CHANNEL+ts]= (( dat & 0x40000000 ) >> 20 ) | (( dat & 0x3fe00000 ) >> 21 ) | ( dv << 9 );
135  daq_samples[(j*3+1)*MAXIMUM_SAMPLES_PER_CHANNEL+ts]= (( dat & 0x00100000 ) >> 10 ) | (( dat & 0x000ff800 ) >> 11 ) | ( dv << 9 );
136  daq_samples[(j*3+2)*MAXIMUM_SAMPLES_PER_CHANNEL+ts]= (( dat & 0x00000400 ) ) | (( dat & 0x000003fe ) >> 1 ) | ( dv << 9 );
137  }
138  }
139  // now loop over channels - set daq_lengths with error bits
140  int ichan;
141  for ( ichan = 0; ichan<CHANNELS_PER_SPIGOT; ichan++) {
142  daq_lengths[ichan]=tsamples;
143  for ( ts = 0; ts < tsamples; ts++ ) {
144  int erdv =(daq_samples[ichan*MAXIMUM_SAMPLES_PER_CHANNEL+ts] & 0x600 ) >> 9;
145  int capid=(daq_samples[ichan*MAXIMUM_SAMPLES_PER_CHANNEL+ts] & 0x180 ) >> 7;
146  if ( erdv!=1 || ( ts!=0 && (capid!=((lastCapid+1)%4)))) {
147  daq_lengths[ichan]|=0x80;
148  }
149  lastCapid=capid;
150  }
151  }
152  }
153 }
static const int CHANNELS_PER_SPIGOT
Definition: CastorCORData.h:16
static const int MAXIMUM_SAMPLES_PER_CHANNEL
Definition: CastorCORData.h:17
const unsigned short * m_rawConst
void determineSectionLengths(int &tpWords, int &daqWords, int &headerWords, int &trailerWords, int &triggerWords) const
Was there an error on the given fiber for this event (only in histogram mode!)
bool CastorCORData::unpackHistogram ( int  fiber,
int  fiberchan,
int  capid,
unsigned short *  histogram 
) const

Unpack special histogramming mode data.

Parameters
fiber
fiberchan
capidCapacitor id for which to extract a histogram
histogramunsigned int[32] into which the data should be deposited

Definition at line 332 of file CastorCORData.cc.

References getHistogramFibers(), mps_fire::i, isHistogramEvent(), m_formatVersion, m_rawConst, and PFRecoTauDiscriminationByIsolation_cfi::offset.

Referenced by getRawLength().

332  {
333  // check for histogram mode
334  if (!isHistogramEvent()) return false;
335 
336  int fiber1, fiber2;
337  getHistogramFibers(fiber1,fiber2);
338  if (fiber1!=myfiber && fiber2!=myfiber) return false;
339 
340  if (m_formatVersion==-1) {
341  int offset=6+mysc*4*32+capid*32;
342  if (myfiber==fiber2) offset+=3*4*32; // skip to the second half...
343  for (int i=0; i<32; i++)
344  histogram[i]=m_rawConst[offset+i];
345  return true;
346  } else {
347  int offset=8+mysc*4*32+capid*32;
348  if (myfiber==fiber2) offset+=3*4*32; // skip to the second half...
349  for (int i=0; i<32; i++)
350  histogram[i]=m_rawConst[offset+i];
351  return true;
352  }
353 }
void getHistogramFibers(int &a, int &b) const
Get the fiber numbers for the data present in this event (only in histogram mode!) ...
bool isHistogramEvent() const
Is this event a histogram event? (do not call standard unpack in this case!!!!!)
const unsigned short * m_rawConst
bool CastorCORData::wasMarkAndPassZS ( int  fiber,
int  fiberchan 
) const

Was this channel passed as part of Mark&Pass ZS?

Definition at line 284 of file CastorCORData.cc.

References isUnsuppressed(), m_formatVersion, m_rawConst, m_rawLength, edm::shift, and heppy_batch::val.

Referenced by getBunchNumber().

284  {
285  if (fiber<1 || fiber>8 || fiberchan<0 || fiberchan>2) return false;
286  if (!isUnsuppressed() || m_formatVersion<5) return false;
287  unsigned short val=(fiber<5)?(m_rawConst[m_rawLength-12]):(m_rawConst[m_rawLength-11]);
288  int shift=(((fiber-1)%4)*3)+fiberchan;
289  return ((val>>shift)&0x1)!=0;
290 }
bool isUnsuppressed() const
Is this event an unsuppresed event?
static unsigned int const shift
const unsigned short * m_rawConst

Member Data Documentation

const int CastorCORData::CHANNELS_PER_SPIGOT = 36
static

Definition at line 16 of file CastorCORData.h.

Referenced by CastorCtdcPacker::pack(), CastorCtdcUnpacker::unpack(), and unpack().

int CastorCORData::m_formatVersion
protected
unsigned short* CastorCORData::m_ownData
protected
const unsigned short* CastorCORData::m_rawConst
protected
int CastorCORData::m_rawLength
protected
unsigned short* CastorCORData::m_unpackedData
protected

Definition at line 224 of file CastorCORData.h.

const int CastorCORData::MAXIMUM_SAMPLES_PER_CHANNEL = 20
static

Definition at line 17 of file CastorCORData.h.

Referenced by CastorCtdcPacker::pack(), pack(), CastorCtdcUnpacker::unpack(), and unpack().