CMS 3D CMS Logo

Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes

HcalHTRData Class Reference

#include <HcalHTRData.h>

List of all members.

Public Member Functions

void adoptData (const unsigned short *data, int length)
void allocate (int version_to_create=0)
bool check () const
 Check for a good event Requires a minimum length, matching wordcount and length, not an empty event.
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.
unsigned int getBunchNumber () const
 Get the HTR bunch number.
unsigned int getDLLunlock () const
 Get DLLunlock bits.
unsigned int getErrorsWord () const
 Get the errors word.
unsigned int getExtHdr1 () const
 Get the HTR Ext Header words.
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.
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 getFibOrbMsgBCN (int fiber) const
 Get the BCN of the Fiber Orbit Messages.
int getFirmwareFlavor () const
 Get the HTR firmware flavor.
unsigned int getFirmwareRevision () const
 Get the HTR firmware version.
int getFormatVersion () const
 Get the version number of this event.
void getHistogramFibers (int &a, int &b) const
 Get the fiber numbers for the data present in this event (only in histogram mode!)
unsigned int getL1ANumber () const
 Get the HTR event number.
int getNDD () const
 Get the number of daq data samples per channel when not zero-suppressed.
int getNPrecisionWords () const
 Get the total number of precision data 16-bit words.
int getNPS () const
 Get the number of presamples in daq data.
int getNTP () const
 Get the number of trigger data samples when not zero-suppressed (not available after FW 4)
unsigned int getOrbitNumber () const
 Get the HTR orbit number.
unsigned int getPipelineLength () const
 Get the pipeline length used for this event.
const unsigned short * getRawData () const
 Get a pointer to the raw data.
const int getRawLength () const
 Get the length of the raw data.
unsigned int getSubmodule () const
 Get the HTR submodule number.
unsigned int getTTCready () const
 Get TTCready bit.
 HcalHTRData (const unsigned short *data, int length)
 HcalHTRData (const HcalHTRData &)
 HcalHTRData ()
 HcalHTRData (int version_to_create)
unsigned int htrSlot () const
 HcalElectronicsId-style HTR slot.
unsigned int htrTopBottom () const
 HcalElectronicsId-style HTR top/bottom (1=top/0=bottom)
bool isCalibrationStream () const
 Is this event a calibration-stream event?
bool isHistogramEvent () const
 Is this event a histogram event? (do not call standard unpack in this case!!!!!)
bool isPatternRAMEvent () const
 Is this event a pattern-ram event?
bool isUnsuppressed () const
 Is this event an unsuppresed event?
HcalHTRDataoperator= (const HcalHTRData &)
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.
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)
void packUnsuppressed (const bool *mp)
 pack trailer with Mark and Pass bits
unsigned int readoutVMECrateId () const
 HcalElectronicsId-style VME crate number.
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.
bool unpackHistogram (int fiber, int fiberchan, int capid, unsigned short *histogram) const
 Unpack special histogramming mode data.
bool wasHistogramError (int ifiber) const
 Was there an error on the given fiber for this event (only in histogram mode!)
bool wasMarkAndPassZS (int fiber, int fiberchan) const
 Was this channel passed as part of Mark&Pass ZS?
bool wasMarkAndPassZSTP (int slb, int slbchan) const
 Was this channel passed as part of Mark&Pass ZS?
uint32_t zsBunchMask () const
 ZS Bunch Mask (if available)
 ~HcalHTRData ()

Static Public Attributes

static const int CHANNELS_PER_SPIGOT = 24
static const int MAXIMUM_SAMPLES_PER_CHANNEL = 20

Protected Member Functions

void determineSectionLengths (int &tpWords, int &daqWords, int &headerWords, int &trailerWords) const
void determineStaticLengths (int &headerWords, int &trailerWords) const

Protected Attributes

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

Detailed Description

Interpretive class for HcalHTRData 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.

Date:
2009/11/05 21:51:15
Revision:
1.16
Author:
J. Mans - UMD

Definition at line 18 of file HcalHTRData.h.


Constructor & Destructor Documentation

HcalHTRData::HcalHTRData ( )

Definition at line 17 of file HcalHTRData.cc.

HcalHTRData::~HcalHTRData ( ) [inline]

Definition at line 24 of file HcalHTRData.h.

References m_ownData.

{ if (m_ownData!=0) delete [] m_ownData; }
HcalHTRData::HcalHTRData ( int  version_to_create)

Definition at line 24 of file HcalHTRData.cc.

References allocate().

                                              : m_formatVersion(version_to_create) {
  allocate(version_to_create);
}
HcalHTRData::HcalHTRData ( const unsigned short *  data,
int  length 
)

Definition at line 18 of file HcalHTRData.cc.

References adoptData(), and m_ownData.

                                                               {
  adoptData(data,length);
  m_ownData=0;
}
HcalHTRData::HcalHTRData ( const HcalHTRData hd)

Member Function Documentation

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

Definition at line 49 of file HcalHTRData.cc.

References AlCaHLTBitMon_QueryRunRegistry::data, m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalDCCHeader::getSpigotData(), and HcalHTRData().

                                                                  {
  m_rawLength=length;
  m_rawConst=data;
  if (m_rawLength<5) {
    m_formatVersion=-2; // invalid!
  } else {
    // determine format version
    if ((m_rawConst[2]&0x8000)==0) m_formatVersion=-1; // original format before versions
    else m_formatVersion=(m_rawConst[4]>>12)&0xF;
  }
}
void HcalHTRData::allocate ( int  version_to_create = 0)

Definition at line 28 of file HcalHTRData.cc.

References m_formatVersion, m_ownData, m_rawConst, and m_rawLength.

Referenced by HcalHTRData(), HcalPacker::pack(), and CastorPacker::pack().

                                                {
  m_formatVersion=version_to_create;
  // the needed space is for the biggest possible event...
  const int needed=0x200;
  // create a buffer big enough...
  m_ownData=new unsigned short[needed];
  // clear isn't really necessary, but it makes valgrind happy
  memset(m_ownData,0,sizeof(unsigned short)*needed);
  m_rawLength=0;
  m_rawConst=m_ownData;
}
bool HcalHTRData::check ( void  ) const

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

Definition at line 64 of file HcalHTRData.cc.

References determineSectionLengths(), MultipleCompare::header, isHistogramEvent(), m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalMonitorModule::CheckSubdetectorStatus(), HcalTriggerPrimitiveAlgo::runFEFormatError(), HcalRawDataMonitor::unpack(), CastorUnpacker::unpack(), CastorDataIntegrityMonitor::unpack(), and HcalUnpacker::unpack().

                              {
  if (m_formatVersion==-1) {
    // length checks
    //  minimum length
    if (m_rawLength<6+12) return false;
    //  matches wordcount
    if (m_rawLength!=m_rawConst[m_rawLength-3]) return false;
    // empty event check
    if (m_rawConst[2]&0x20) return false;
  } else {
    // length checks
    //  minimum length
    if (m_rawLength<8+4) return false;
    if (m_formatVersion<=3) {
      //  matches wordcount
      if (m_rawLength!=m_rawConst[m_rawLength-3]) {
        if (isHistogramEvent() && m_rawConst[m_rawLength-3]==786) {
          // known bug!
        } else
          return false;
      }
    } else { 
      // eventually add CRC check
    }
    // empty event check (redundant...)
    if (m_rawConst[2]&0x4) return false;
  }

  if (!isHistogramEvent()) {
    // daq/tp length check
    int tp, daq, header, trailer;
    determineSectionLengths(tp,daq,header,trailer);
    if (tp+daq+header+trailer>m_rawLength) return false;
  }

  return true;
}
void HcalHTRData::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.

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 data

Definition at line 130 of file HcalHTRData.cc.

References determineSectionLengths(), and m_rawConst.

Referenced by HcalRawDataMonitor::unpack(), HcalTTPUnpacker::unpack(), CastorUnpacker::unpack(), and HcalUnpacker::unpack().

                                                                     {
  int tp_words_total, daq_words_total, headerLen, trailerLen;
  determineSectionLengths(tp_words_total,daq_words_total,headerLen,trailerLen);

  *tp_first=m_rawConst+headerLen;
  *tp_last=*tp_first+(tp_words_total-1);
  *daq_first=*tp_last+1;
  *daq_last=*daq_first+(daq_words_total-1);
}
void HcalHTRData::determineSectionLengths ( int &  tpWords,
int &  daqWords,
int &  headerWords,
int &  trailerWords 
) const [protected]

Definition at line 102 of file HcalHTRData.cc.

References CHANNELS_PER_SPIGOT, m_formatVersion, m_rawConst, and m_rawLength.

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

                                                                                                                {
  if (m_formatVersion==-1) {
    tpWords=m_rawConst[5]>>8;
    daqWords=CHANNELS_PER_SPIGOT*(m_rawConst[m_rawLength-4]>>8); // always 24 channels, no zero suppresion
    headerWords=6;
    trailerWords=12;
  } else {
    tpWords=m_rawConst[5]>>8;
    if (m_rawLength>4) 
      daqWords=m_rawConst[m_rawLength-4]&0x7FF; // zero suppression supported
    headerWords=8;
    trailerWords=4; // minimum, may be more...
  }
}
void HcalHTRData::determineStaticLengths ( int &  headerWords,
int &  trailerWords 
) const [protected]

Definition at line 117 of file HcalHTRData.cc.

References m_formatVersion.

Referenced by pack().

                                                                                  {
  if (m_formatVersion==-1) {
    headerWords=6;
    trailerWords=12;
  } else if (m_formatVersion<5) {
    headerWords=8;
    trailerWords=4; // minimum, may be more...
  } else {
    headerWords=8;
    trailerWords=12; // minimum, may be more...
  }
}
unsigned int HcalHTRData::getBunchNumber ( ) const [inline]

Get the HTR bunch number.

Definition at line 102 of file HcalHTRData.h.

References m_rawConst.

Referenced by HcalRawDataMonitor::HTRPrint(), and HcalRawDataMonitor::unpack().

                                             { 
    return (m_rawConst[4]&0xFFF); 
  }
unsigned int HcalHTRData::getDLLunlock ( ) const [inline]

Get DLLunlock bits.

Definition at line 157 of file HcalHTRData.h.

References m_rawConst.

                                           { 
    return (m_rawConst[5]>>1)&0x3; }
unsigned int HcalHTRData::getErrorsWord ( ) const [inline]

Get the errors word.

Definition at line 144 of file HcalHTRData.h.

References m_rawConst.

Referenced by HcalDCCHeader::copySpigotData(), HcalRawDataMonitor::HTRPrint(), HcalTriggerPrimitiveAlgo::runFEFormatError(), and HcalRawDataMonitor::unpack().

                                            { 
    return m_rawConst[2]&0xFFFF; }
unsigned int HcalHTRData::getExtHdr1 ( ) const [inline]

Get the HTR Ext Header words.

Definition at line 204 of file HcalHTRData.h.

References m_rawConst.

                                         { 
    return (m_rawConst[0]);}
unsigned int HcalHTRData::getExtHdr2 ( ) const [inline]

Definition at line 206 of file HcalHTRData.h.

References m_rawConst.

                                         { 
    return (m_rawConst[1]); }
unsigned int HcalHTRData::getExtHdr3 ( ) const [inline]

Definition at line 208 of file HcalHTRData.h.

References m_rawConst.

                                         { 
    return (m_rawConst[2]);} 
unsigned int HcalHTRData::getExtHdr4 ( ) const [inline]

Definition at line 210 of file HcalHTRData.h.

References m_rawConst.

                                         { 
    return (m_rawConst[3]); }
unsigned int HcalHTRData::getExtHdr5 ( ) const [inline]

Definition at line 212 of file HcalHTRData.h.

References m_rawConst.

                                         { 
    return (m_rawConst[4]);} 
unsigned int HcalHTRData::getExtHdr6 ( ) const [inline]

Definition at line 214 of file HcalHTRData.h.

References m_rawConst.

Referenced by HcalRawDataMonitor::unpack(), and HcalEEUSMonitor::unpack().

                                         { 
    return (m_rawConst[5]);} 
unsigned int HcalHTRData::getExtHdr7 ( ) const [inline]

Definition at line 216 of file HcalHTRData.h.

References m_rawConst.

Referenced by HcalRawDataMonitor::unpack().

                                         { 
    return (m_rawConst[6]);} 
unsigned int HcalHTRData::getExtHdr8 ( ) const [inline]

Definition at line 218 of file HcalHTRData.h.

References m_rawConst.

                                         { 
    return (m_rawConst[7]);}  
unsigned int HcalHTRData::getFib1OrbMsgBCN ( ) const [inline]

Get the BCN of the Fiber Orbit Messages.

Definition at line 170 of file HcalHTRData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalRawDataMonitor::HTRPrint(), and HcalRawDataMonitor::unpack().

                                               {
  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-12]&0xFFF);
}
unsigned int HcalHTRData::getFib2OrbMsgBCN ( ) const [inline]

Definition at line 173 of file HcalHTRData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalRawDataMonitor::HTRPrint(), and HcalRawDataMonitor::unpack().

                                               {
  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-11]&0xFFF);
}
unsigned int HcalHTRData::getFib3OrbMsgBCN ( ) const [inline]

Definition at line 177 of file HcalHTRData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalRawDataMonitor::HTRPrint(), and HcalRawDataMonitor::unpack().

                                               {
  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-10]&0xFFF);
}
unsigned int HcalHTRData::getFib4OrbMsgBCN ( ) const [inline]

Definition at line 181 of file HcalHTRData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalRawDataMonitor::HTRPrint(), and HcalRawDataMonitor::unpack().

                                               {
  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-9]&0xFFF);
}
unsigned int HcalHTRData::getFib5OrbMsgBCN ( ) const [inline]

Definition at line 185 of file HcalHTRData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalRawDataMonitor::HTRPrint(), and HcalRawDataMonitor::unpack().

                                               {
  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-8]&0xFFF);
}
unsigned int HcalHTRData::getFib6OrbMsgBCN ( ) const [inline]

Definition at line 189 of file HcalHTRData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalRawDataMonitor::HTRPrint(), and HcalRawDataMonitor::unpack().

                                               {
  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-7]&0xFFF);
}
unsigned int HcalHTRData::getFib7OrbMsgBCN ( ) const [inline]

Definition at line 193 of file HcalHTRData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalRawDataMonitor::HTRPrint(), and HcalRawDataMonitor::unpack().

                                               {
  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-6]&0xFFF);
}
unsigned int HcalHTRData::getFib8OrbMsgBCN ( ) const [inline]

Definition at line 197 of file HcalHTRData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalRawDataMonitor::HTRPrint(), and HcalRawDataMonitor::unpack().

                                               {
  return (m_formatVersion==-1)?(0):(m_rawConst[m_rawLength-5]&0xFFF);
}
unsigned int HcalHTRData::getFibOrbMsgBCN ( int  fiber) const [inline]

Get the BCN of the Fiber Orbit Messages.

Definition at line 165 of file HcalHTRData.h.

References m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalUnpacker_impl::unpack(), and CastorUnpacker_impl::unpack().

                                                       {
    return (m_formatVersion==-1 || fiber<1 || fiber>8)?(0):(m_rawConst[m_rawLength-12+(fiber-1)]&0xFFF);
  }
int HcalHTRData::getFirmwareFlavor ( ) const

Get the HTR firmware flavor.

Definition at line 386 of file HcalHTRData.cc.

References m_formatVersion, and m_rawConst.

Referenced by HLTHcalNZSFilter::filter(), CastorUnpacker::unpack(), HcalTTPUnpacker::unpack(), and HcalUnpacker::unpack().

                                         {
  return (m_formatVersion<2)?(-1):((m_rawConst[7]>>8)&0xFF);
}
unsigned int HcalHTRData::getFirmwareRevision ( ) const

Get the HTR firmware version.

Definition at line 383 of file HcalHTRData.cc.

References m_formatVersion, and m_rawConst.

Referenced by HcalRawDataMonitor::unpack(), and HcalTTPUnpacker::unpack().

                                                    {
  return (m_formatVersion==-1)?(0):((m_rawConst[6]&0x1FFF)+((m_rawConst[6]&0xE000)<<3));
}
int HcalHTRData::getFormatVersion ( ) const [inline]

Get the version number of this event.

Definition at line 34 of file HcalHTRData.h.

References m_formatVersion.

Referenced by CastorUnpacker::unpack(), and HcalUnpacker::unpack().

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

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

Definition at line 390 of file HcalHTRData.cc.

References m_formatVersion, and m_rawConst.

Referenced by HcalUnpacker::unpack(), and unpackHistogram().

                                                         {
  a=-1;
  b=-1;
  if (m_formatVersion==-1) {
    a=((m_rawConst[2]&0x0F00)>>8);
    b=((m_rawConst[2]&0xF000)>>12);
  } else {
    a=((m_rawConst[5]&0x0F00)>>8);
    b=((m_rawConst[5]&0xF000)>>12);
  }
}
unsigned int HcalHTRData::getL1ANumber ( ) const [inline]

Get the HTR event number.

Definition at line 98 of file HcalHTRData.h.

References m_rawConst.

Referenced by HcalRawDataMonitor::HTRPrint(), and HcalRawDataMonitor::unpack().

                                           { 
    return (m_rawConst[0]&0xFF)+(m_rawConst[1]<<8); 
  }
int HcalHTRData::getNDD ( ) const

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

Definition at line 365 of file HcalHTRData.cc.

References m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalRawDataMonitor::unpack(), and HcalTTPUnpacker::unpack().

                              {
  return (m_formatVersion==-1)?(m_rawConst[m_rawLength-4]>>8):(m_rawConst[m_rawLength-4]>>11);
}
int HcalHTRData::getNPrecisionWords ( ) const

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

Definition at line 374 of file HcalHTRData.cc.

References m_formatVersion, m_rawConst, and m_rawLength.

                                          {
  return (m_formatVersion==-1)?(m_rawConst[m_rawLength-4]&0xFF):(m_rawConst[m_rawLength-4]&0x7FF);
}
int HcalHTRData::getNPS ( ) const

Get the number of presamples in daq data.

Definition at line 377 of file HcalHTRData.cc.

References m_formatVersion, and m_rawConst.

Referenced by HcalTTPUnpacker::unpack(), CastorUnpacker::unpack(), and HcalUnpacker::unpack().

                              {
  return (m_formatVersion==-1)?(0):((m_rawConst[5]>>3)&0x1F);
}
int HcalHTRData::getNTP ( ) const

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

Definition at line 368 of file HcalHTRData.cc.

References m_formatVersion, m_rawConst, and m_rawLength.

                              {
  int retval=-1;
  if (m_formatVersion==-1) retval=m_rawConst[m_rawLength-4]&0xFF;
  else if (m_formatVersion<3) retval=m_rawConst[m_rawLength-4]>>11;
  return retval;
}
unsigned int HcalHTRData::getOrbitNumber ( ) const

Get the HTR orbit number.

Definition at line 301 of file HcalHTRData.cc.

References m_formatVersion, and m_rawConst.

Referenced by HcalRawDataMonitor::unpack().

                                               { 
  switch (m_formatVersion) {
  case (-1) : return (m_rawConst[3]>>8);
  case (0) : return (m_rawConst[3]>>10);
  default : return (m_rawConst[3]>>11);
  }
}
unsigned int HcalHTRData::getPipelineLength ( ) const

Get the pipeline length used for this event.

Definition at line 380 of file HcalHTRData.cc.

References m_formatVersion, and m_rawConst.

Referenced by HcalTTPUnpacker::unpack().

                                                  {
  return (m_formatVersion==-1)?(m_rawConst[2]>>8):(m_rawConst[7]&0xFF);
}
const unsigned short* HcalHTRData::getRawData ( ) const [inline]

Get a pointer to the raw data.

Definition at line 37 of file HcalHTRData.h.

References m_rawConst.

Referenced by HcalDCCHeader::copySpigotData(), HcalRawDataMonitor::unpack(), and HcalEEUSMonitor::unpack().

{ return m_rawConst; }
const int HcalHTRData::getRawLength ( ) const [inline]

Get the length of the raw data.

Definition at line 40 of file HcalHTRData.h.

References m_rawLength.

Referenced by HcalDCCHeader::copySpigotData(), HcalPacker::pack(), CastorPacker::pack(), HcalRawDataMonitor::unpack(), and HcalEEUSMonitor::unpack().

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

Get the HTR submodule number.

Definition at line 308 of file HcalHTRData.cc.

References m_formatVersion, and m_rawConst.

Referenced by htrSlot(), htrTopBottom(), readoutVMECrateId(), HcalTTPUnpacker::unpack(), CastorUnpacker::unpack(), and HcalUnpacker::unpack().

                                             {
  switch (m_formatVersion) {
  case (-1) : return (m_rawConst[3]&0xFF);
  case (0) : return (m_rawConst[3]&0x3FF);
  default : return (m_rawConst[3]&0x7FF);
  }
}
unsigned int HcalHTRData::getTTCready ( ) const [inline]

Get TTCready bit.

Definition at line 161 of file HcalHTRData.h.

References m_rawConst.

                                          { 
    return m_rawConst[5]&0x1; }
unsigned int HcalHTRData::htrSlot ( ) const

HcalElectronicsId-style HTR slot.

Definition at line 315 of file HcalHTRData.cc.

References getSubmodule().

Referenced by HcalMonitorModule::CheckSubdetectorStatus(), HcalRawDataMonitor::HTRPrint(), HcalTriggerPrimitiveAlgo::runFEFormatError(), and HcalRawDataMonitor::unpack().

                                       {
  const unsigned int smid = getSubmodule();
  return ((smid>>1)&0x1F);
} 
unsigned int HcalHTRData::htrTopBottom ( ) const

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

Definition at line 319 of file HcalHTRData.cc.

References getSubmodule().

Referenced by HcalMonitorModule::CheckSubdetectorStatus(), HcalRawDataMonitor::HTRPrint(), HcalTriggerPrimitiveAlgo::runFEFormatError(), and HcalRawDataMonitor::unpack().

                                            {
  const unsigned int smid = getSubmodule();
  return (smid&0x01);
} 
bool HcalHTRData::isCalibrationStream ( ) const

Is this event a calibration-stream event?

Definition at line 327 of file HcalHTRData.cc.

References m_formatVersion, and m_rawConst.

                                            {
  return (m_formatVersion==-1)?(false):(m_rawConst[2]&0x4000);
}
bool HcalHTRData::isHistogramEvent ( ) const
bool HcalHTRData::isPatternRAMEvent ( ) const

Is this event a pattern-ram event?

Definition at line 359 of file HcalHTRData.cc.

References m_formatVersion, and m_rawConst.

                                          {
  return (m_formatVersion==-1)?(false):(m_rawConst[2]&0x1000);
}
bool HcalHTRData::isUnsuppressed ( ) const
HcalHTRData & HcalHTRData::operator= ( const HcalHTRData hd)

Definition at line 40 of file HcalHTRData.cc.

References m_formatVersion, m_ownData, m_rawConst, and m_rawLength.

void HcalHTRData::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 201 of file HcalHTRData.cc.

References CHANNELS_PER_SPIGOT, determineStaticLengths(), i, m_formatVersion, m_ownData, m_rawLength, and MAXIMUM_SAMPLES_PER_CHANNEL.

Referenced by HcalPacker::pack(), and CastorPacker::pack().

                                                                                             {
  
  int tp_words_total=0, daq_words_total=0, headerLen, trailerLen;
  determineStaticLengths(headerLen,trailerLen);

  tp_words_total=0;
  daq_words_total=0;
  int ichan,isample;

  // trigger primitive words
  unsigned short* ptr=m_ownData+headerLen;
  if (tp_samples!=0 && tp_lengths!=0) {
    for (ichan=0; ichan<24; ichan++) {
      unsigned short chanid=((ichan%3)+((ichan/3)<<2))<<11;
      for (isample=0; isample<tp_lengths[ichan] && isample<MAXIMUM_SAMPLES_PER_CHANNEL; isample++) {
        ptr[tp_words_total]=chanid|(tp_samples[ichan*MAXIMUM_SAMPLES_PER_CHANNEL+isample]&0x3FF);
        tp_words_total++;
      }
    }
  }

  // daq words
  ptr=m_ownData+headerLen+tp_words_total;
  for (ichan=0; ichan<24; ichan++) {
    unsigned short chanid=((ichan%3)+((ichan/3)<<2))<<11;
    for (isample=0; isample<daq_lengths[ichan] && isample<MAXIMUM_SAMPLES_PER_CHANNEL; isample++) {
      unsigned short basedata=daq_samples[ichan*MAXIMUM_SAMPLES_PER_CHANNEL+isample]&0x3FF;
      if (do_capid) basedata=(basedata&0x7F)|(0x200)|((isample%4)<<7);
      ptr[daq_words_total]=chanid|basedata;
      daq_words_total++;
    }
  }
  unsigned short totalLen;
  if (m_formatVersion==-1) {
    m_ownData[5]=(tp_words_total<<8)|0x1;
    totalLen=headerLen+tp_words_total+daq_words_total+trailerLen;
    m_rawLength=totalLen;
    m_ownData[totalLen-3]=totalLen;
    m_ownData[totalLen-4]=(tp_words_total/CHANNELS_PER_SPIGOT)|((daq_words_total/CHANNELS_PER_SPIGOT)<<8);
  } else {
    m_ownData[5]=(tp_words_total<<8)|0x1;
    totalLen=headerLen+tp_words_total+daq_words_total+trailerLen;
    if ((totalLen%2)==1) {
      m_ownData[totalLen-4]=0xFFFF; // parity word
      totalLen++; // round to even number of 16-bit words
    }
    m_rawLength=totalLen;
    m_ownData[totalLen-2]=totalLen/2; // 32-bit words
    m_ownData[totalLen-3]=totalLen;
    m_ownData[totalLen-4]=daq_words_total;
  }
  if (trailerLen==12) { // initialize extra trailer words if present
    for (int i=12; i>4; i--)
      m_ownData[totalLen-i]=0;
  }

}
void HcalHTRData::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 260 of file HcalHTRData.cc.

References m_formatVersion, m_ownData, and m_rawLength.

Referenced by HcalPacker::pack(), and CastorPacker::pack().

                                                                                                                                      {
  m_ownData[0]=L1Anumber&0xFF;
  m_ownData[1]=(L1Anumber&0xFFFF00)>>8;
  if (m_formatVersion==-1) {
    m_ownData[2]=((pipeline&0x7F)<<8); // no error bits
    m_ownData[3]=((orbitn&0xFF)<<8)|(submodule&0xFF);
    m_ownData[4]=bcn&0xFFF;
    //    m_ownData[5]&=0xFF01;
  } else {
    m_ownData[2]=0x8000; // Version is valid, no error bits
    if (m_formatVersion==0) 
      m_ownData[3]=((orbitn&0x3F)<<10)|(submodule&0x3FF);
    else 
      m_ownData[3]=((orbitn&0x1F)<<11)|(submodule&0x7FF);
    m_ownData[4]=((m_formatVersion&0xF)<<12)|(bcn&0xFFF);
    m_ownData[5]|=((nps&0x1F)<<3)|0x1;
    m_ownData[6]=((firmwareRev&0x70000)>>3)|(firmwareRev&0x1FFF);
    m_ownData[7]=pipeline&0xFF;
    m_ownData[m_rawLength-4]&=0x7FF;
    m_ownData[m_rawLength-4]|=(ndd&0x1F)<<11;
  }
  m_ownData[m_rawLength-2]=m_rawLength/2; // 32-bit words
  m_ownData[m_rawLength-1]=(L1Anumber&0xFF)<<8;
}
void HcalHTRData::packUnsuppressed ( const bool *  mp)

pack trailer with Mark and Pass bits

Definition at line 285 of file HcalHTRData.cc.

References m_formatVersion, m_ownData, and m_rawLength.

Referenced by HcalPacker::pack().

                                                 {
  if (m_formatVersion<4) return;

  for (int fiber=1; fiber<=8; fiber++) {
    for (int fiberchan=0; fiberchan<=2; fiberchan++) {
      int linchan=(fiber-1)*3+fiberchan;

      unsigned short& val=m_ownData[m_rawLength-12+(linchan/8)];
      if (mp[linchan]) val|=1<<(linchan%8);
    }
  }
  
  // set the unsupressed bit
  m_ownData[6]|=0x8000;
}
unsigned int HcalHTRData::readoutVMECrateId ( ) const

HcalElectronicsId-style VME crate number.

Definition at line 323 of file HcalHTRData.cc.

References getSubmodule().

Referenced by HcalMonitorModule::CheckSubdetectorStatus(), HcalRawDataMonitor::HTRPrint(), HcalTriggerPrimitiveAlgo::runFEFormatError(), and HcalRawDataMonitor::unpack().

                                                 {
  const unsigned int smid = getSubmodule();
  return ((smid>>6)&0x1F);
} 
void HcalHTRData::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.

Parameters:
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 149 of file HcalHTRData.cc.

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

                                                                                      {

  if (daq_lengths!=0) memset(daq_lengths,0,CHANNELS_PER_SPIGOT);
  if (tp_lengths!=0) memset(tp_lengths,0,CHANNELS_PER_SPIGOT);

  // currently, the major differences between the versions are
  //  -1 : 6 word header, no zero suppression, trailer setup
  //   0 : 8 word header, zero suppression, 

  int tp_words_total, daq_words_total, headerLen, trailerLen;
  determineSectionLengths(tp_words_total,daq_words_total,headerLen,trailerLen);

  //  printf("%d %d %d %d\n",tp_words_total,daq_words_total,headerLen,trailerLen);
  int wordPtr;
  const unsigned short* tpBase=m_rawConst+headerLen;
  // process the trigger primitive words
  if (tp_lengths!=0) {
    for (wordPtr=0; wordPtr<tp_words_total; wordPtr++) {
      int ichan=channelDecoder[tpBase[wordPtr]>>11];
      if (ichan>=24) continue;
      tp_samples[ichan*MAXIMUM_SAMPLES_PER_CHANNEL+tp_lengths[ichan]]=tpBase[wordPtr]&0x3ff;
      tp_lengths[ichan]++;
    }
  }
 
  const unsigned short* daqBase=m_rawConst+headerLen+tp_words_total;
  // process the DAQ words [ assumes that data from one channel will always be together ]
  int lastChan=-1;
  int lastCapid=0;
  if (daq_lengths!=0) {
    for (wordPtr=0; wordPtr<daq_words_total; wordPtr++) {
      int ichan=channelDecoder[daqBase[wordPtr]>>11];
      if (ichan>=24) continue;
      int capid=(daqBase[wordPtr]&0x180)>>7;
      int erdv=(daqBase[wordPtr]&0x600)>>9;
      if (erdv!=0x1 || 
          (lastChan==ichan && (capid!=((lastCapid+1)%4)))) {
        daq_lengths[ichan]|=0x80;
      } 
      lastChan=ichan;
      lastCapid=capid;

      int useLength=daq_lengths[ichan]&0x1F;
      //     printf("%d %d\n",ichan,useLength);
      daq_samples[ichan*MAXIMUM_SAMPLES_PER_CHANNEL+useLength]=daqBase[wordPtr]&0x3ff;
      daq_lengths[ichan]=(useLength+1)|(daq_lengths[ichan]&0xE0); // keep the error bits
    }
  }

}
bool HcalHTRData::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 410 of file HcalHTRData.cc.

References getHistogramFibers(), i, isHistogramEvent(), m_formatVersion, m_rawConst, and evf::evtn::offset().

Referenced by HcalUnpacker::unpack().

                                                                                                   {
  // check for histogram mode
  if (!isHistogramEvent()) return false;

  int fiber1, fiber2;
  getHistogramFibers(fiber1,fiber2);
  if (fiber1!=myfiber && fiber2!=myfiber) return false;

  if (m_formatVersion==-1) {
    int offset=6+mysc*4*32+capid*32;
    if (myfiber==fiber2) offset+=3*4*32; // skip to the second half...
    for (int i=0; i<32; i++)
      histogram[i]=m_rawConst[offset+i];
    return true;
  } else {
    int offset=8+mysc*4*32+capid*32;
    if (myfiber==fiber2) offset+=3*4*32; // skip to the second half...
    for (int i=0; i<32; i++)
      histogram[i]=m_rawConst[offset+i];
    return true;
  }
}
bool HcalHTRData::wasHistogramError ( int  ifiber) const

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

Definition at line 402 of file HcalHTRData.cc.

References isHistogramEvent(), and m_rawConst.

                                                    {
  bool retval=!isHistogramEvent();
  if (!retval) {
    retval=((m_rawConst[7])&(1<<ifiber))!=0;
  }
  return retval;
}
bool HcalHTRData::wasMarkAndPassZS ( int  fiber,
int  fiberchan 
) const

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

Definition at line 333 of file HcalHTRData.cc.

References isUnsuppressed(), m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalUnpacker_impl::unpack(), and CastorUnpacker_impl::unpack().

                                                                 {
  if (fiber<1 || fiber>8 || fiberchan<0 || fiberchan>2) return false;
  if (!isUnsuppressed() || m_formatVersion<5) return false;
  int linchan=(fiber-1)*3+fiberchan;

  unsigned short val=m_rawConst[m_rawLength-12+(linchan/8)];
  return ((val>>(linchan%8))&0x1)!=0;
} 
bool HcalHTRData::wasMarkAndPassZSTP ( int  slb,
int  slbchan 
) const

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

Definition at line 341 of file HcalHTRData.cc.

References isUnsuppressed(), m_formatVersion, m_rawConst, and m_rawLength.

Referenced by CastorUnpacker::unpack(), and HcalUnpacker::unpack().

                                                               {
  if (slb<1 || slb>6 || slbchan<0 || slbchan>3) return false;
  if (!isUnsuppressed() || m_formatVersion<5) return false;
  int linchan=(slb-1)*4+slbchan;

  unsigned short val=m_rawConst[m_rawLength-12+(linchan/8)];
  return ((val>>(linchan%8))&0x100)!=0;
} 
uint32_t HcalHTRData::zsBunchMask ( ) const

ZS Bunch Mask (if available)

Definition at line 350 of file HcalHTRData.cc.

References isUnsuppressed(), m_formatVersion, m_rawConst, and m_rawLength.

Referenced by HcalUnpacker_impl::unpack(), and CastorUnpacker_impl::unpack().

                                        {
  uint32_t mask=0;
  if (isUnsuppressed() && m_formatVersion>=5) {
    mask=m_rawConst[m_rawLength-5]|
      ((m_rawConst[m_rawLength-6]&0xF000)<<4);
  }
  return mask;
}

Member Data Documentation

const int HcalHTRData::CHANNELS_PER_SPIGOT = 24 [static]
unsigned short* HcalHTRData::m_ownData [protected]
const unsigned short* HcalHTRData::m_rawConst [protected]
int HcalHTRData::m_rawLength [protected]

Definition at line 21 of file HcalHTRData.h.

Referenced by HcalPacker::pack(), pack(), CastorPacker::pack(), and unpack().