ATLAS Offline Software
Loading...
Searching...
No Matches
LArRodBlockTransparentV0.h
Go to the documentation of this file.
1//Dear emacs, this is -*- c++ -*-
2
3/*
4 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
5*/
6
7#ifndef LARBYTESTREAM_LARRODBLOCKTRANSPARENTV0_H
8#define LARBYTESTREAM_LARRODBLOCKTRANSPARENTV0_H
9
15
16
27
28
29#include <stdint.h>
30#include <vector>
32
34{ // ----------------- Header words indexes -----------------
35public:
36 enum {
37 NWTot, // First words: DSP event header
41 FEB_SN, // FEB serial number
43 RawDataBlkOffset, // Raw FEB event offset
48 };
49};
50
51template<class DSPHEADER>
53{
54public:
55 // constructor
57 // ------ Identify RodBlockStructure -------
58 std::string BlockType() { return std::string("RodBlockTransparentV0");}
59 // ----------------- Encoding methods -----------------
60 // Never to be used while decoding!
61 virtual void initializeFragment(std::vector<uint32_t>& fragment);
62 virtual void initializeFEB(const uint32_t id);
63 virtual void setNumberOfSamples(const uint8_t n);
64 virtual void setNumberOfGains(const uint8_t n);
65 virtual void setTDCPhase(const uint8_t n); //useful only TB SW validation
66 virtual void setRawDataFixed(const int channel, const std::vector<short>& samples, const uint32_t gain);
67 virtual void finalizeFEB();
68 // build full ROD fragment
69 virtual void concatinateFEBs( );
70 // declare capabilities of this Rod Block Structure
71
72 virtual bool canSetRawDataFixed() {return true;}
73 // ----------------- Decoding methods -----------------
74 // Never to be used while encoding!
75 // set full ROD fragment before trying to get anything!
76 // in case there is more than 1 FEB in 1 fragment, jump to next FEB
77 virtual uint8_t getTDCPhase() const;
78 virtual int getNextRawData(int& channelNumber, std::vector<short>& samples, uint32_t& gain);
79 virtual inline int setGain(const int GainValue); // ---------------- Define gain for decoding
80 virtual uint32_t getNumberOfSamples() const;
81 virtual uint32_t getNumberOfGains() const;
82 virtual uint32_t getRadd(uint32_t adc, uint32_t sample) const;
83 virtual uint16_t getCtrl1(uint32_t adc) const;
84 virtual uint16_t getCtrl2(uint32_t adc) const;
85 virtual uint16_t getCtrl3(uint32_t adc) const;
86 virtual uint32_t getStatus() const;
87
88 // ----------------- Printing methods -----------------
89 // print the full ROD fragment
90 //virtual void dumpFragment();
91 virtual inline uint32_t hasRawDataBlock() const {return m_FebBlock[3];} ;
92 virtual inline uint32_t hasControlWords() const {return m_FebBlock[3];} ;
93
94 private:
96 virtual void resetPointers();
97 //Separated blocks for encoding
98
99 // One raw data block per gain to start with
100 std::vector<uint32_t> m_RawDataBlock;
101 //Counter for channels inside of a FEB
104 unsigned m_BlkOffset; //Offset taken from enum
105 //For fixed gain mode
107 //FIXME, very ugly hack! See explanation in LArRodDecoder.h
108public:
109};
110
111
112template<class DSPHEADER>
113inline int LArRodBlockTransparentV0<DSPHEADER>::setGain(const int GainValue)
114{//This RodBlockStructure allows only predefined gains
115 /*
116 std::cout << " Set fixed gain Value " << GainValue << std::endl;
117 std::cout << " Number of words in Gain Block " << std::endl;
118 std::cout << "\tHigh (1): " << getHeader16(NWRawData1) << std::endl;
119 std::cout << "\tMedium (2): " << getHeader16(NWRawData2) << std::endl;
120 std::cout << "\tLow (3): " << getHeader16(NWRawData3) << std::endl;
121 */
122 if (GainValue<0 || GainValue>3)
123 return 0;
124 m_fixedGain=GainValue;
125 return 1;
126}
127
129
130#endif
This class provides decoding/encoding from/to ROD format.
virtual uint16_t getCtrl2(uint32_t adc) const
virtual uint32_t hasRawDataBlock() const
virtual void concatinateFEBs()
virtual uint16_t getCtrl3(uint32_t adc) const
std::vector< uint32_t > m_RawDataBlock
virtual uint32_t getNumberOfGains() const
virtual void resetPointers()
virtual int setGain(const int GainValue)
virtual void setTDCPhase(const uint8_t n)
virtual uint32_t getStatus() const
virtual void setRawDataFixed(const int channel, const std::vector< short > &samples, const uint32_t gain)
virtual void initializeFEB(const uint32_t id)
virtual uint16_t getCtrl1(uint32_t adc) const
virtual uint32_t getRadd(uint32_t adc, uint32_t sample) const
virtual void setNumberOfGains(const uint8_t n)
virtual int getNextRawData(int &channelNumber, std::vector< short > &samples, uint32_t &gain)
virtual void initializeFragment(std::vector< uint32_t > &fragment)
virtual void finalizeFEB()
virtual uint32_t hasControlWords() const
virtual void setNumberOfSamples(const uint8_t n)
virtual uint32_t getNumberOfSamples() const
virtual uint8_t getTDCPhase() const