8#ifndef LARBYTESTREAM_LARRODBLOCKSTRUCTURE_H
9#define LARBYTESTREAM_LARRODBLOCKSTRUCTURE_H
30#include "GaudiKernel/MsgStream.h"
63 const std::string& blockType);
73 virtual void setNextEnergy(
const int channel,
const int32_t energy,
const int32_t time,
const int32_t quality,
const uint32_t gain);
74 virtual void setRawData(
const int channel,
const std::vector<short>& samples,
const uint32_t gain);
75 virtual void setRawDataFixed(
const int channel,
const std::vector<short>& samples,
const uint32_t gain);
76 virtual void setEtQ(
const int channel,
const int32_t energy,
const int32_t time,
const int32_t quality,
const uint32_t gain);
77 virtual void setDAC(
const uint16_t DACValue);
78 virtual void setDelay(
const uint16_t DelayValue);
79 virtual void setPulsed (
const unsigned channelNumber);
82 virtual void setEx(
double);
83 virtual void setEy(
double);
84 virtual void setEz(
double);
90 virtual void sortDataVector( std::vector<const LArAccumulatedCalibDigit*>& );
91 virtual void sortDataVector( std::vector<const LArAccumulatedDigit*>& );
105 inline bool setFragment(
const uint32_t* p, uint32_t n);
111 virtual inline int32_t
getEx()
const;
112 virtual inline int32_t
getEy()
const;
113 virtual inline int32_t
getEz()
const;
114 virtual inline int32_t
getSumE()
const;
116 virtual inline int32_t
getVROBEx()
const;
117 virtual inline int32_t
getVROBEy()
const;
118 virtual inline int32_t
getVROBEz()
const;
126 virtual inline int getNextEnergy(
int& channelNumber, int32_t& energy, int32_t& time,int32_t& quality,uint32_t& gain);
127 virtual int getNextRawData(
int& channelNumber, std::vector<short>& samples, uint32_t& gain);
128 virtual int getNextAccumulatedCalibDigit(
int& channelNumber, std::vector < uint64_t >& SamplesSum, std::vector < uint64_t >& Samples2Sum, uint32_t& nStepTriggers, uint32_t& gain);
129 virtual int getNextAccumulatedDigit(
int& channelNumber, std::vector<uint64_t>& SamplesSum, std::vector < uint64_t >& corr2Sum, uint32_t& gain);
132 virtual inline bool getPulsed(
unsigned channelNumber)
const;
133 virtual inline uint16_t
getDAC()
const;
134 virtual inline uint16_t
getDelay()
const;
137 virtual inline uint16_t
getNStep()
const;
140 virtual int setGain(
const int GainValue);
151 virtual uint32_t
getRadd(uint32_t adc, uint32_t sample)
const;
152 virtual uint16_t
getCtrl1(uint32_t adc)
const;
153 virtual uint16_t
getCtrl2(uint32_t adc)
const;
154 virtual uint16_t
getCtrl3(uint32_t adc)
const;
172 {
return (ch>>3) + ((ch&0x7)<<4); };
178 inline void setHeader16(
const unsigned n,
const uint16_t w);
179 inline void setHeader32(
const unsigned n,
const uint32_t w);
190 inline uint16_t
getHeader16(
const unsigned n)
const;
191 inline uint32_t
getHeader32(
const unsigned n)
const;
198 inline void setBit(uint32_t *
const p,
const unsigned chan);
199 inline int getBit(
const uint32_t *
const p,
const unsigned chan)
const;
227 typedef std::map<uint32_t, std::vector<uint32_t> >
FEBMAPTYPE;
254 uint32_t BlockSize = 0;
257 m_logstr << MSG::ERROR <<
"Error while decoding LArByteStream: Got Rod block size 0" <<
endmsg;
263 m_logstr << MSG::ERROR <<
"Error while decoding LArByteStream: Found FEB block of size " << BlockSize <<
" in a ROD block of size " << n <<
endmsg;
282 if ( n<2 ) {
m_logstr << MSG::ERROR <<
"Error" <<
endmsg;
return 0;}
359 return (std::as_const(*m_vFragment).at(n>>1) & 0xffff);
361 return (std::as_const(*m_vFragment).at(n>>1) >> 16);
371#ifdef LARBYTESTREAMRODBLOCK_CHCKBOUNDARIES
373 m_logstr << MSG::ERROR <<
"Error WRITE BEYOND ARRAY BOUNDARY!" <<
endmsg;
385#ifdef LARBYTESTREAMRODBLOCK_CHCKBOUNDARIES
387 m_logstr << MSG::ERROR <<
"Error WRITE BEYOND ARRAY BOUNDARY!" <<
endmsg
396 return (
reinterpret_cast<const uint16_t*
>(
m_FebBlock))[n];
401 const uint32_t* data32 = std::as_const(*m_vFragment).data();
402 const uint16_t* data16 =
reinterpret_cast<const uint16_t*
> (data32);
408#ifdef LARBYTESTREAMRODBLOCK_CHCKBOUNDARIES
410 m_logstr << MSG::ERROR <<
"LArRodBlockStructure::LE_setHeader16 Error: WRITE BEYOND ARRAY BOUNDARY!" <<
endmsg;
414 reinterpret_cast<uint16_t*
>(
m_vFragment->data())[n] = w;
429 return (*(p+
a)>>
r) & 0x1;
447 m_logstr << MSG::ERROR <<
"Error: Function getNextEnergy not implemented in this instance of LArRodBlockStructure!" <<
endmsg;
486 if ( LeftSize<=0 )
return false;
490 if (BlockSize>LeftSize) {
491 m_logstr << MSG::ERROR <<
"Error while decoding LArByteStream: Found FEB block of size " << BlockSize <<
" in a ROD block of size " << LeftSize <<
endmsg;
Data class for calibration ADC samples preprocessed by the DSP.
Data class for ADC samples and autocorr preprocessed by the DSP.
Base class for LArDigits taken during calibration runs.
Liquid Argon digit base class.
Liquid Argon ROD output object base class.
virtual void sortDataVector(std::vector< const LArRawChannel * > &)
virtual bool canSetRawData()
virtual uint16_t getCtrl1(uint32_t adc) const
bool setFragment(const uint32_t *p, uint32_t n)
virtual uint32_t hasPhysicsBlock() const
virtual void dumpFragment()
virtual bool canSetRawDataFixed()
virtual uint16_t getNStep() const
virtual bool canSetEnergy()
virtual int32_t getEz() const
uint32_t m_virtualROBJump
virtual int32_t getVROBEx() const
unsigned int m_rearrangeFirstSample
virtual uint32_t hasCalibBlock() const
virtual void setRawDataFixed(const int channel, const std::vector< short > &samples, const uint32_t gain)
virtual void setSumE(double)
virtual void setEy(double)
uint16_t getVectorHeader16(const unsigned n) const
virtual int32_t getVROBEy() const
virtual void setEtQ(const int channel, const int32_t energy, const int32_t time, const int32_t quality, const uint32_t gain)
virtual int32_t getVROBEz() const
virtual void setDAC(const uint16_t DACValue)
virtual uint16_t getDelay() const
const uint32_t * m_virtualROBPointerLocal
virtual int32_t getEy() const
virtual uint16_t getCtrl3(uint32_t adc) const
virtual uint16_t getResults1Size() const
virtual bool getPulsed(unsigned channelNumber) const
int getBit(const uint32_t *const p, const unsigned chan) const
virtual void setTDCPhase(const uint8_t n)
virtual ~LArRodBlockStructure()
virtual uint16_t getDAC() const
virtual int getNextEnergy(int &channelNumber, int32_t &energy, int32_t &time, int32_t &quality, uint32_t &gain)
bool report_error(void) const
virtual uint16_t getRawDataSize() const
virtual bool canSetNTrigger()
virtual uint32_t hasAccumBlock() const
uint16_t getHeader16(const unsigned n) const
virtual int getNextAccumulatedCalibDigit(int &channelNumber, std::vector< uint64_t > &SamplesSum, std::vector< uint64_t > &Samples2Sum, uint32_t &nStepTriggers, uint32_t &gain)
virtual uint32_t getNumberOfGains() const
void setHeader32(const unsigned n, const uint32_t w)
virtual void setEx(double)
virtual uint32_t hasRawDataBlock() const
virtual bool canSetCalibration()
virtual void resetPointers()
virtual int32_t getVROBSumE() const
uint16_t LE_getVectorHeader16(const unsigned n) const
virtual uint32_t getVROBFebId()
virtual void initializeFragment(std::vector< uint32_t > &fragment)
const uint32_t * m_virtualROBPointer
virtual void setNTrigger(const uint16_t NTrigger)
virtual uint32_t getDspCodeVersion() const
virtual void finalizeFEB()
void LE_setHeader16(const unsigned n, const uint16_t w)
virtual int FebToRodChannel(int ch) const
const uint32_t * m_RodBlock
virtual uint16_t getCtrl2(uint32_t adc) const
std::map< uint32_t, std::vector< uint32_t > > FEBMAPTYPE
virtual uint8_t getTDCPhase() const
uint32_t getFEBSN() const
uint32_t getHeader32(const unsigned n) const
virtual uint32_t getRadd(uint32_t adc, uint32_t sample) const
virtual void setPulsed(const unsigned channelNumber)
virtual bool setPointers()
const uint32_t * m_FebBlock
uint32_t getFEBID() const
virtual uint16_t getStepIndex() const
virtual bool canIncludeRawData()
virtual int32_t getSumE() const
virtual int32_t getEx() const
virtual uint16_t getNTrigger() const
void setBit(uint32_t *const p, const unsigned chan)
void setHeader16(const unsigned n, const uint16_t w)
uint32_t getVectorHeader32(const unsigned n) const
virtual void initializeFEB(const uint32_t id)
std::vector< uint32_t > * m_pRODblock
unsigned short m_iHeadBlockSize
virtual int setGain(const int GainValue)
virtual void setDelay(const uint16_t DelayValue)
LArRodBlockStructure(IMessageSvc *msgSvc, const std::string &blockType)
virtual uint32_t offlineCheckSum() const
static const uint32_t m_OfflineToRawGainMap[3]
uint32_t OfflineToRawGain(const uint32_t gain) const
void setFirstSample(const int rearrangeFirstSample)
virtual void setNumberOfSamples(const uint8_t n)
std::vector< uint32_t > * m_vFragment
static const uint32_t m_RawToOfflineGainMap[4]
virtual uint16_t getNbSweetCells2() const
virtual void setRawData(const int channel, const std::vector< short > &samples, const uint32_t gain)
int32_t m_MiddleHeaderSize
virtual uint32_t getNumberOfSamples() const
virtual void setNumberOfGains(const uint8_t n)
virtual uint32_t hasControlWords() const
virtual int getNextRawData(int &channelNumber, std::vector< short > &samples, uint32_t &gain)
virtual void setEz(double)
virtual int setFragmentVirtualROB(const uint32_t *p, uint32_t n)
virtual uint32_t getStatus() const
uint16_t LE_getHeader16(const unsigned n) const
uint32_t RawToOfflineGain(const uint32_t gain) const
virtual void setNextEnergy(const int channel, const int32_t energy, const int32_t time, const int32_t quality, const uint32_t gain)
virtual void concatinateFEBs()
uint32_t getNumberOfWords() const
virtual uint16_t getResults2Size() const
virtual uint16_t getNbSweetCells1() const
virtual int32_t getDspEventCounter() const
virtual uint32_t onlineCheckSum() const
virtual int getNextAccumulatedDigit(int &channelNumber, std::vector< uint64_t > &SamplesSum, std::vector< uint64_t > &corr2Sum, uint32_t &gain)