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 unsigned int nStepTriggers = 1;
166 if(ngains==0 || nsamples==0)
return 0;
170 samplesSum.resize(nStepTriggers);
171 samples2Sum.resize(nStepTriggers);
179 LARBSDBG(
"free gain - dont know what to do Accumulated Calib Digit - return 0");
188 LARBSDBG(
"two gains - dont know what to do yet in Accumulated Calib Digit - return 0");
193 LARBSDBG(
"three gains - dont know what to do yet in Accumulated Calib Digit - return 0");
204 offset=block + 12 + (channelNumber&0x7F)*(nsamples*2);
205 uint32_t
index=offset;
207 for (
unsigned int i=0;i<nsamples;i++)
212 samplesSum[iStepTriggers].push_back(
x);
213 samples2Sum[iStepTriggers].push_back(x2);
260 if(
index<=0)
return 0;
261 index+=(8+64*ngain)*sample+adc/2;
263 if(adc&0x1)
return x>>16;
291 int offset=nsamples*(8+64*ngains)+adc/2;
305 int offset = nsamples*(8+64*ngains)+8;
#define LARBSDBG(text)
This class provides decoding/encoding from/to ROD format.
uint16_t getNTrigger() const
virtual uint32_t getNumberOfSamples() const
virtual uint32_t getNumberOfGains() const
virtual int getNextRawData(int &channelNumber, std::vector< short > &samples, uint32_t &gain)
uint32_t getFebConfig() const
static std::string BlockType()
virtual uint16_t getCtrl3(uint32_t adc) const
virtual uint16_t getCtrl2(uint32_t adc) const
virtual void resetPointers()
virtual uint32_t getStatus() const
std::vector< uint32_t > m_RawDataBlock
virtual uint8_t getTDCPhase() const
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 uint16_t getCtrl1(uint32_t adc) const
uint16_t getDelay() const
LArRodBlockCalibrationV2(IMessageSvc *msgSvc)
virtual uint32_t getRadd(uint32_t adc, uint32_t sample) 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)