11#include "GaudiKernel/MsgStream.h"
19#define LARBSDBG(text) logstr<<MSG::DEBUG<<text<<endmsg
54 LARBSDBG(
"Maximum number of channels reached");
59 LARBSDBG(
"No Raw Data Block in this FEB");
69 if(ngains==0 || nsamples==0)
return 0;
71 unsigned int this_gain=0;
75 offset=block + 8 + ((channelNumber&0x3F)>>3) + ((channelNumber & 0x7)<<3);
76 for(this_gain=0;this_gain<ngains;this_gain++) {
77 int index = offset + 64*this_gain;
80 x = (
x & 0x3000) >> 12;
82 x = (
x & 0x30000000) >> 28;
87 if (this_gain<ngains) {
88 int s_size = 8 + 64 * ngains;
89 offset = block + 8 + ((channelNumber&0x3F)>>3) + ((channelNumber & 0x7)<<3) + 64*this_gain;
92 if(channelNumber>=64) {
94 febgain = (
x & 0x3000) >> 12;
96 for(
unsigned int s=0;s<nsamples;s++) {
97 index = offset + s*s_size;
99 samples.push_back((
short) (
x & 0x0fff));
103 febgain = (
x & 0x30000000) >> 28;
105 for(
unsigned int s=0;s<nsamples;s++) {
106 index = offset + s*s_size;
108 samples.push_back((
short) (
x & 0x0fff));
114 unsigned rearrangeFirstSample=0;
119 if (rearrangeFirstSample && rearrangeFirstSample<samples.size())
121 short movedSample=samples[0];
122 for (
unsigned i=1;i<=rearrangeFirstSample;i++)
123 samples[i-1]=samples[i];
124 samples[rearrangeFirstSample]=movedSample;
131 std::vector < uint64_t >& corr2Sum, uint32_t& gain )
141 LARBSDBG(
"Maximum number of channels reached");
148 LARBSDBG(
"No Accumulated Digit Block in this FEB");
162 if(ngains==0 || nsamples==0)
return 0;
169 LARBSDBG(
"Suspicious FebConfig valud" <<
FebConfig <<
", don't know what to do for Accumulated Calib Digit - return 0");
184 offset=block + 2 + (channelNumber&0x7F)*(nsamples*2);
185 if(offset+2*nsamples>size-3)
return 0;
186 if((channelNumber&0x7F)*nsamples*2>bsize)
return 0;
189 samplesSum.resize(nsamples);
190 corr2Sum.resize(nsamples);
192 for (
unsigned int i=0;i<nsamples;i++)
198 for (
unsigned int i=0;i<nsamples;i++)
262 if(
index<=0)
return 0;
263 index+=(8+64*ngain)*sample+adc/2;
265 if(adc&0x1)
return x>>16;
293 int offset=nsamples*(8+64*ngains)+adc/2;
#define LARBSDBG(text)
This class provides decoding/encoding from/to ROD format.
virtual uint8_t getTDCPhase() const
virtual uint16_t getCtrl2(uint32_t adc) const
virtual uint32_t getRadd(uint32_t adc, uint32_t sample) const
uint16_t getFirstSampleIndex() const
virtual int getNextAccumulatedDigit(int &channelNumber, std::vector< uint64_t > &SamplesSum, std::vector< uint64_t > &corr2Sum, uint32_t &gain)
virtual uint32_t getNumberOfGains() const
virtual void resetPointers()
virtual uint16_t getResults1Size() const
virtual uint16_t getRawDataSize() const
virtual uint32_t getStatus() const
static std::string BlockType()
uint16_t getFebConfig() const
virtual int getNextRawData(int &channelNumber, std::vector< short > &samples, uint32_t &gain)
virtual uint16_t getCtrl3(uint32_t adc) const
uint16_t getNStep() const
uint16_t getNTrigger() const
LArRodBlockAccumulatedV3(IMessageSvc *msgSvc)
virtual uint16_t getCtrl1(uint32_t adc) const
uint16_t getStepIndex() const
virtual uint16_t getResults2Size() const
virtual uint32_t getNumberOfSamples() const
unsigned int m_rearrangeFirstSample
uint16_t getHeader16(const unsigned n) const
uint32_t getHeader32(const unsigned n) const
const uint32_t * m_FebBlock
unsigned short m_iHeadBlockSize
LArRodBlockStructure(IMessageSvc *msgSvc, const std::string &blockType)
uint32_t RawToOfflineGain(const uint32_t gain) const
uint32_t getNumberOfWords() const
singleton-like access to IMessageSvc via open function and helper
IMessageSvc * getMessageSvc(bool quiet=false)