ATLAS Offline Software
Loading...
Searching...
No Matches
LArRodBlockCalibrationV3.h
Go to the documentation of this file.
1//Dear emacs, this is -*- c++ -*-
2
3/*
4 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
5*/
6
7#ifndef LARBYTESTREAM_LARRODBLOCKCALIBRATIONV3_H
8#define LARBYTESTREAM_LARRODBLOCKCALIBRATIONV3_H
9
19
22
24{
25public:
26 // ----------------- Header words indexes -----------------
27 enum {
28 NWTot, // First words: DSP event header
32 FEB_SN, // FEB serial number
33 FEB_SN_h, // FEB serial number
34 ResultsOff1, // Size of results (Calibration averages in DSP)
35 ResultsDim1, // Offset to results
36 ResultsOff2, // Size of times (in physics)
37 ResultsDim2, // Offset to times (in physics)
39 RawDataBlkDim, // Raw FEB event offset
40 EventStatus, // Bits describing the event
46 InFPGAFormat, // added 08.09.2005 - wrong 28.09.2005?
48 endtag //This tag needs to be an odd number, see *) for constructor
49 };
50 enum{
75 };
76 // constructor
77 LArRodBlockCalibrationV3(IMessageSvc* msgSvc);
78
79 // ------ Identify RodBlockStructure -------
80 static std::string BlockType() { return std::string("RodBlockCalibrationV3");}
81 public:
82 //void dumpFragment() { dumpFragment(m_FebBlock); }
83 // ----------------- Encoding methods -----------------
84 // Never to be used while decoding!
85 // ----------------- Decoding methods -----------------
86 // Never to be used while encoding!
87 // set full ROD fragment before trying to get anything!
88 // in case there is more than 1 FEB in 1 fragment, jump to next FEB
89 virtual uint8_t getTDCPhase() const;
90 virtual int getNextRawData(int& channelNumber, std::vector<short>& samples, uint32_t& gain);
91 virtual int getNextAccumulatedCalibDigit(int& channelNumber, std::vector < uint64_t >& samplesSum, std::vector < uint64_t >& samples2Sum, uint32_t& iStepTrigger, uint32_t& gain);
92 virtual uint32_t getNumberOfSamples() const;
93 virtual uint32_t getNumberOfGains() const;
94 virtual uint32_t getRadd(uint32_t adc, uint32_t sample) const;
95 virtual uint16_t getResults1Size() const;
96 virtual uint16_t getResults2Size() const;
97 virtual uint16_t getRawDataSize() const;
98 virtual uint16_t getCtrl1(uint32_t adc) const;
99 virtual uint16_t getCtrl2(uint32_t adc) const;
100 virtual uint16_t getCtrl3(uint32_t adc) const;
101 virtual uint32_t getStatus() const;
102
103 virtual inline int setGain(const int GainValue); // ---------------- Define gain for decoding
104 virtual inline uint32_t hasCalibBlock() const {return getHeader16(ResultsOff1);} ;
105 virtual inline uint32_t hasRawDataBlock() const {return getHeader16(RawDataBlkOff);} ;
106 virtual inline uint32_t hasControlWords() const {return getHeader16(RawDataBlkOff);} ;
107
108private:
109 void clearBlocks();
110 virtual void resetPointers();
111 //Separated blocks for encoding
112
113 // One raw data block per gain to start with
114 std::vector<uint32_t> m_RawDataBlock;
115 //Counter for channels inside of a FEB
122 //For fixed gain mode
123 unsigned m_fixedGain;
124 //FIXME, very ugly hack! See explanation in LArRodDecoder.h
125public:
126 inline uint16_t getNTrigger() const;
127 inline uint16_t getStepIndex() const;
128 inline uint16_t getNStep() const;
129 inline uint16_t getDAC() const;
130 inline uint16_t getDelay() const;
131 inline uint16_t getFebConfig() const;
132 inline uint16_t getFirstSampleIndex() const;
133
134 inline bool getPulsed(const unsigned channelNumber) const;
135
136 virtual bool canSetCalibration() {return false;}
137};
138
139
140inline int LArRodBlockCalibrationV3::setGain(const int GainValue)
141{//This RodBlockStructure allows only predefined gains
142 if (GainValue<0 || GainValue>3)
143 return 0;
144 m_fixedGain=GainValue;
145 return 1;
146}
147
149{
150 return getHeader16(FebConfig);
151}
152
157
158inline bool LArRodBlockCalibrationV3::getPulsed(const unsigned channelNumber) const
159{
161 return getBit(m_FebBlock+index+IsPulsed/2,channelNumber);
162}
163
164
165
166#endif
virtual uint32_t hasCalibBlock() const
virtual uint8_t getTDCPhase() const
virtual uint32_t hasControlWords() const
LArRodBlockCalibrationV3(IMessageSvc *msgSvc)
virtual uint32_t getRadd(uint32_t adc, uint32_t sample) const
virtual uint16_t getResults1Size() const
virtual uint16_t getRawDataSize() const
virtual uint32_t hasRawDataBlock() const
virtual int getNextAccumulatedCalibDigit(int &channelNumber, std::vector< uint64_t > &samplesSum, std::vector< uint64_t > &samples2Sum, uint32_t &iStepTrigger, uint32_t &gain)
virtual uint32_t getStatus() const
virtual uint32_t getNumberOfSamples() const
bool getPulsed(const unsigned channelNumber) const
virtual int setGain(const int GainValue)
virtual uint16_t getCtrl1(uint32_t adc) const
virtual int getNextRawData(int &channelNumber, std::vector< short > &samples, uint32_t &gain)
virtual uint32_t getNumberOfGains() const
virtual uint16_t getCtrl2(uint32_t adc) const
virtual uint16_t getResults2Size() const
std::vector< uint32_t > m_RawDataBlock
virtual uint16_t getCtrl3(uint32_t adc) const
int getBit(const uint32_t *const p, const unsigned chan) const
uint16_t getHeader16(const unsigned n) const
LArRodBlockStructure(IMessageSvc *msgSvc, const std::string &blockType)
Definition index.py:1