11#include "GaudiKernel/MsgStream.h"
19#define LARBSDBG(text) logstr<<MSG::DEBUG<<text<<endmsg
65 LARBSDBG(
"Maximum number of channels reached");
70 LARBSDBG(
"No Raw Data Block in this FEB");
80 if(ngains==0 || nsamples==0)
return 0;
82 unsigned int this_gain=0;
86 offset=block + 8 + ((channelNumber&0x3F)>>3) + ((channelNumber & 0x7)<<3);
87 for(this_gain=0;this_gain<ngains;this_gain++) {
88 int index = offset + 64*this_gain;
91 x = (
x & 0x3000) >> 12;
93 x = (
x & 0x30000000) >> 28;
98 if (this_gain<ngains) {
99 int s_size = 8 + 64 * ngains;
100 offset = block + 8 + ((channelNumber&0x3F)>>3) + ((channelNumber & 0x7)<<3) + 64*this_gain;
103 if(channelNumber>=64) {
105 febgain = (
x & 0x3000) >> 12;
107 for(
unsigned int s=0;s<nsamples;s++) {
108 index = offset + s*s_size;
110 samples.push_back((
short) (
x & 0x0fff));
114 febgain = (
x & 0x30000000) >> 28;
116 for(
unsigned int s=0;s<nsamples;s++) {
117 index = offset + s*s_size;
119 samples.push_back((
short) (
x & 0x0fff));
127 short movedSample=samples[0];
129 samples[i-1]=samples[i];
141 LARBSDBG(
"GetAccumulatedCalibDigits for FEB 0x" << MSG::hex <<
142 (uint32_t)
getHeader32(
FEBID) << MSG::dec <<
"iStepTriggers=" << iStepTriggers);
147 LARBSDBG(
"Maximum number of channels reached");
152 LARBSDBG(
"No Accumulated Calib Digit Block in this FEB");
164 const unsigned int ntriggers = (int)
getNTrigger();
165 const unsigned int dac = (int)
getDAC();
167 unsigned int nStepTriggers = 1;
169 LARBSDBG(
"This FEB has " << nsamples <<
" samples");
170 LARBSDBG(
"This FEB has " << ngains <<
" gains");
171 LARBSDBG(
"This FEB has " << ntriggers <<
" ntriggers");
172 LARBSDBG(
"This FEB has " << dac <<
" dac");
175 if(ngains==0 || nsamples==0)
return 0;
179 samplesSum.resize(nStepTriggers);
180 samples2Sum.resize(nStepTriggers);
188 LARBSDBG(
"free gain - dont know what to do Accumulated Calib Digit - return 0");
197 LARBSDBG(
"two gains - dont know what to do yet in Accumulated Calib Digit - return 0");
202 LARBSDBG(
"three gains - dont know what to do yet in Accumulated Calib Digit - return 0");
213 offset=block + 11 + (channelNumber&0x7F)*(nsamples*2);
214 uint32_t
index=offset;
216 for (
unsigned int i=0;i<nsamples;i++)
221 samplesSum[iStepTriggers].push_back(
x);
222 samples2Sum[iStepTriggers].push_back(x2);
269 if(
index<=0)
return 0;
270 index+=(8+64*ngain)*sample+adc/2;
272 if(adc&0x1)
return x>>16;
300 int offset=nsamples*(8+64*ngains)+adc/2;
314 int offset = nsamples*(8+64*ngains)+8;
double delay(std::size_t d)
#define LARBSDBG(text)
This class provides decoding/encoding from/to ROD format.
virtual int getNextAccumulatedCalibDigit(int &channelNumber, std::vector< std::vector< uint32_t > > &samplesSum, std::vector< std::vector< uint32_t > > &samples2Sum, uint32_t &iStepTrigger, uint32_t &gain)
virtual void resetPointers()
std::vector< uint32_t > m_RawDataBlock
uint16_t getDelay() const
virtual uint16_t getCtrl3(uint32_t adc) const
virtual uint32_t getRadd(uint32_t adc, uint32_t sample) const
virtual uint32_t getNumberOfGains() const
virtual int getNextRawData(int &channelNumber, std::vector< short > &samples, uint32_t &gain)
virtual uint8_t getTDCPhase() const
virtual uint32_t getStatus() const
uint32_t getFebConfig() const
virtual uint16_t getCtrl2(uint32_t adc) const
static std::string BlockType()
virtual uint32_t getNumberOfSamples() const
virtual uint16_t getCtrl1(uint32_t adc) const
LArRodBlockCalibrationV1(IMessageSvc *msgSvc)
uint16_t getNTrigger() 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
singleton-like access to IMessageSvc via open function and helper
IMessageSvc * getMessageSvc(bool quiet=false)