ATLAS Offline Software
Loading...
Searching...
No Matches
LArRodBlockCalibrationV1.h
Go to the documentation of this file.
1//Dear emacs, this is -*- c++ -*-
2
3/*
4 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
5*/
6
7#ifndef LARBYTESTREAM_LARRODBLOCKCALIBRATIONV1_H
8#define LARBYTESTREAM_LARRODBLOCKCALIBRATIONV1_H
9
17
20
22{
23public:
24 // ----------------- Header words indexes -----------------
25 enum {
26 NWTot, // First words: DSP event header
30 FEB_SN, // FEB serial number
31 FEB_SN_h, // FEB serial number
32 ResultsOff1, // Size of results (Calibration averages in DSP)
33 ResultsDim1, // Offset to results
34 ResultsOff2, // Size of times (in physics)
35 ResultsDim2, // Offset to times (in physics)
37 RawDataBlkDim, // Raw FEB event offset
38 EventStatus, // Bits describing the event
44 InFPGAFormat, // added 08.09.2005 - wrong 28.09.2005?
46 };
47 enum{
70 endtag //This tag needs to be an odd number, see *) for constructor
71 };
72 // constructor
74
75 // ------ Identify RodBlockStructure -------
76 std::string BlockType() { return std::string("RodBlockCalibrationV1");}
77 public:
78 //void dumpFragment() { dumpFragment(m_FebBlock); }
79 // ----------------- Encoding methods -----------------
80 // Never to be used while decoding!
81 // ----------------- Decoding methods -----------------
82 // Never to be used while encoding!
83 // set full ROD fragment before trying to get anything!
84 // in case there is more than 1 FEB in 1 fragment, jump to next FEB
85 virtual uint8_t getTDCPhase() const;
86 virtual int getNextRawData(int& channelNumber, std::vector<short>& samples, uint32_t& gain);
88 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);
89 virtual uint32_t getNumberOfSamples() const;
90 virtual uint32_t getNumberOfGains() const;
91 virtual uint32_t getRadd(uint32_t adc, uint32_t sample) const;
92 virtual uint16_t getCtrl1(uint32_t adc) const;
93 virtual uint16_t getCtrl2(uint32_t adc) const;
94 virtual uint16_t getCtrl3(uint32_t adc) const;
95 virtual uint32_t getStatus() const;
96
97 virtual inline uint32_t hasCalibBlock() const {return getHeader16(ResultsOff1);} ;
98 virtual inline uint32_t hasPhysicsBlock() const {return getHeader16(ResultsOff2);} ;
99 virtual inline uint32_t hasRawDataBlock() const {return getHeader16(RawDataBlkOff);} ;
100 virtual inline uint32_t hasControlWords() const {return getHeader16(RawDataBlkOff);} ;
101
102 // ----------------- Printing methods -----------------
103 // print the full ROD fragment
104 //virtual void dumpFragment();
105private:
106 void clearBlocks();
107 virtual void resetPointers();
108 //Separated blocks for encoding
109
110 // One raw data block per gain to start with
111 std::vector<uint32_t> m_RawDataBlock;
112 //Counter for channels inside of a FEB
119 //For fixed gain mode
121 //FIXME, very ugly hack! See explanation in LArRodDecoder.h
122public:
123 inline uint16_t getNTrigger() const;
124 inline uint16_t getDAC() const;
125 inline uint16_t getDelay() const;
126 inline uint32_t getFebConfig() const;
127 inline bool getPulsed(const unsigned channelNumber) const;
128
129 virtual bool canSetCalibration() {return false;}
130};
131
132
134{
135 return getHeader32(FebConfig);
136}
137
138inline bool LArRodBlockCalibrationV1::getPulsed(const unsigned channelNumber) const
139{
141 //std::cout << " ===> in getPulsed " << std::hex << (m_FebBlock[index+IsPulsed/2]) << " " << (m_FebBlock[index+(IsPulsed/2+1)]) << " " << (m_FebBlock[index+(IsPulsed/2+2)]) << " " << (m_FebBlock[index+(IsPulsed/2+3)]) << " " << std::dec << channelNumber << " i=" << i << " ii=" << ii << std::endl;
142 return getBit(m_FebBlock+index+IsPulsed/2,channelNumber);
143}
144
145
146
147#endif
virtual uint32_t hasControlWords() 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 uint32_t hasPhysicsBlock() const
std::vector< uint32_t > m_RawDataBlock
virtual uint16_t getCtrl3(uint32_t adc) const
virtual uint32_t hasCalibBlock() const
virtual uint32_t getRadd(uint32_t adc, uint32_t sample) const
bool getPulsed(const unsigned channelNumber) 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
virtual uint16_t getCtrl2(uint32_t adc) const
virtual uint32_t getNumberOfSamples() const
virtual uint16_t getCtrl1(uint32_t adc) const
virtual uint32_t hasRawDataBlock() const
int getBit(const uint32_t *const p, const unsigned chan) 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)
uint32_t getHeader32(const unsigned n) const
Definition index.py:1