ATLAS Offline Software
Loading...
Searching...
No Matches
LArRodBlockCalibrationV0.h
Go to the documentation of this file.
1//Dear emacs, this is -*- c++ -*-
2
3/*
4 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
5*/
6
7#ifndef LARBYTESTREAM_LARRODBLOCKCALIBRATIONV0_H
8#define LARBYTESTREAM_LARRODBLOCKCALIBRATIONV0_H
9
19
21
23{
24 public:
25 // ----------------- Header words indexes -----------------
26 enum {
27 NWTot, // First words: DSP event header
31 FEB_SN, // FEB serial number
32 FEB_SN_h, // FEB serial number
33 RawDataBlkOffset, // Raw FEB event offset
47 endtag //This tag needs to be an odd number, see *) for constructor
48 };
49};
50
51template<class DSPHEADER>
53{
54public:
55 // constructor
58
59 public:
60 //void dumpFragment() { dumpFragment(m_FebBlock); }
61 // ----------------- Encoding methods -----------------
62 virtual void setDAC(const uint16_t DacValue);
63 virtual void setDelay(const uint16_t delayValue);
64 virtual void setPulsed(const unsigned channelNumber);
65 // ----------------- Decoding methods -----------------
66 inline uint16_t getDAC() const;
67 inline uint16_t getDelay() const;
68 inline bool getPulsed(const unsigned channelNumber) const;
69
70 virtual inline uint32_t hasRawDataBlock() const {return 1;}
71
72 virtual bool canSetCalibration() {return true;}
73};
74
75template<class DSPHEADER>
77{
78 return this->getHeader16(DSPHEADER::Dac);
79}
80
81template<class DSPHEADER>
83{
84 return this->getHeader16(DSPHEADER::Delay);
85}
86
87template<class DSPHEADER>
88inline bool LArRodBlockCalibrationV0<DSPHEADER>::getPulsed(const unsigned channelNumber) const
89{return this->getBit(this->m_FebBlock+(DSPHEADER::IsPulsed/2),channelNumber);}
90
91
92template<class DSPHEADER>
93inline void LArRodBlockCalibrationV0<DSPHEADER>::setDelay(const uint16_t delayValue)
94{this->setHeader16(DSPHEADER::Delay,delayValue);}
95
96template<class DSPHEADER>
97inline void LArRodBlockCalibrationV0<DSPHEADER>::setDAC(const uint16_t dacValue)
98{this->setHeader16(DSPHEADER::Dac,dacValue);
99//std::cout << "Set DAC-Value to " << dacValue << std::endl;
100}
101
102
103template<class DSPHEADER>
104inline void LArRodBlockCalibrationV0<DSPHEADER>::setPulsed(const unsigned channelNumber)
105{
106#ifdef LARBYTESTREAMRODBLOCK_CHCKBOUNDARIES
107 if (channelNumber>=128) {
108 std::cout << "Error WRITE BEYOND ARRAY BONDARY!" << std::endl;
109 std::abort();
110 }
111#endif
112 this->setBit((uint32_t*) (&(this->m_vFragment->front())+(DSPHEADER::IsPulsed/2)),channelNumber);
113}
114
115#endif
static void setBit(unsigned char &field, unsigned num, bool val)
static bool getBit(unsigned char field, unsigned num)
bool getPulsed(const unsigned channelNumber) const
virtual void setDAC(const uint16_t DacValue)
virtual uint32_t hasRawDataBlock() const
virtual void setDelay(const uint16_t delayValue)
virtual void setPulsed(const unsigned channelNumber)
This class provides decoding/encoding from/to ROD format.
uint16_t getHeader16(const unsigned n) const
void setHeader16(const unsigned n, const uint16_t w)
std::vector< uint32_t > * m_vFragment