7#ifndef LARBYTESTREAM_LARRODBLOCKPHYSICSV5_H
8#define LARBYTESTREAM_LARRODBLOCKPHYSICSV5_H
20#include "GaudiKernel/ISvcLocator.h"
57 static std::string
BlockType() {
return std::string(
"RodBlockPhysicsV5");}
63 virtual inline int getNextEnergy(
int& channelNumber, int32_t& energy, int32_t& time,int32_t& quality,uint32_t& gain);
64 virtual int getNextRawData(
int& channelNumber, std::vector<short>& samples, uint32_t& gain);
65 int getNextDigits(
int& channelNumber, std::vector<short>& samples, uint32_t& gain);
73 virtual uint32_t
getRadd(uint32_t adc, uint32_t sample)
const;
74 virtual uint16_t
getCtrl1(uint32_t adc)
const;
75 virtual uint16_t
getCtrl2(uint32_t adc)
const;
76 virtual uint16_t
getCtrl3(uint32_t adc)
const;
86 virtual inline int32_t
getEx()
const;
87 virtual inline int32_t
getEy()
const;
88 virtual inline int32_t
getEz()
const;
94 virtual inline int setGain(
const int ) {
return 1; };
99 void setNextEnergy(
const int channel,
const int32_t energy,
const int32_t time,
const int32_t quality,
const uint32_t gain);
100 void setRawData(
const int ,
const std::vector<short>& ,
const uint32_t);
104 virtual inline void setEx(
double);
105 virtual inline void setEy(
double);
106 virtual inline void setEz(
double);
111 template<
class RAWDATA>
112 bool operator () (
const RAWDATA* ch1,
const RAWDATA* ch2)
const;
115 {
std::sort(vDigit.begin(),vDigit.end(),*
this); }
119 inline void setE(
unsigned index,
double E);
122 void setNextEnergy(
const uint16_t energy,
const int16_t time,
const int16_t quality,
const uint32_t gain);
184 m_logstr << MSG::DEBUG <<
"in LArRodBlockPhysicsV5::getNextEnergy." <<
endmsg;
192 channelNumber=((rodChannelNumber&0xe)<<2) + ((rodChannelNumber&0x1)<<6) + (rodChannelNumber>>4);
196 uint16_t encodedEnergy;
201 m_logstr << MSG::DEBUG <<
"-------->>>> in LArRodBlockPhysicsV5::getNextEnergy : decode energy....." <<
"\n";
206 aux = (int32_t) (encodedEnergy&0x1fff);
207 range = (encodedEnergy & 0xc000) >> 14;
208 if(aux==0 && range>0) aux=0x2000;
209 sign = encodedEnergy & 0x2000;
218 }
else gain=0xffffffff;
234 m_logstr << MSG::DEBUG <<
"This cell has time and Quality information "<<
endmsg;
247 m_logstr << MSG::DEBUG <<
" Encoded Energy ="<< MSG::hex << encodedEnergy << MSG::dec <<
" E=" << energy
251 <<
" channel Number=" << channelNumber
290 if(p)
return (p[1]>>9);
297 if(p)
return (p[2]>>9);
304 if(p)
return (p[3]>>9);
310 return ( (ch&0x7) << 4) | ( (ch&0x38) >>2 ) | ((ch&0x40)>>6);
318 const auto scaled =
static_cast<std::int32_t
>(E) * (1 << 9);
319 const auto bits =
static_cast<std::uint32_t
>(scaled);
virtual int32_t getEx() const
virtual uint16_t getRawDataSize() const
void setE(unsigned index, double E)
std::vector< uint32_t > m_FebInfoBlock
virtual void setEy(double)
const LArOnlineID * m_onlineHelper
const uint32_t * m_GainPointer
virtual int32_t getEz() const
virtual uint32_t hasControlWords() const
std::vector< uint16_t > m_EnergyBlockEncode
virtual int32_t getVROBEx() const
virtual uint32_t hasPhysicsBlock() const
unsigned short m_requiredNSamples
virtual uint16_t getResults2Size() const
virtual int getNextRawData(int &channelNumber, std::vector< short > &samples, uint32_t &gain)
virtual int FebToRodChannel(int ch) const
virtual int32_t getEy() const
virtual uint32_t hasCalibBlock() const
uint16_t m_EnergyThreshold2
const int32_t * m_SumPointer
void initializeFragment(std::vector< uint32_t > &fragment)
virtual uint16_t getCtrl2(uint32_t adc) const
virtual uint16_t getNbSweetCells2() const
virtual uint32_t hasRawDataBlock() const
uint16_t m_EnergyThreshold1
virtual uint16_t getCtrl1(uint32_t adc) const
uint16_t getFebConfig() const
virtual uint32_t getNumberOfSamples() const
std::vector< uint32_t > m_SumBlkBlockE1
virtual int32_t getVROBEz() const
LArRodBlockPhysicsV5(IMessageSvc *msgSvc)
bool operator()(const RAWDATA *ch1, const RAWDATA *ch2) const
uint16_t getNbSweetCells1FromMask() const
std::vector< uint32_t > m_SumBlkBlockE2
const uint16_t * m_RawDataPointer
const uint16_t * m_DigitsPointer
void sortDataVector(std::vector< const LArDigit * > &vDigit)
virtual void setEz(double)
const uint32_t * m_MaskDigitsPointer
virtual uint32_t getRadd(uint32_t adc, uint32_t sample) const
virtual uint16_t getResults1Size() const
int getNextDigits(int &channelNumber, std::vector< short > &samples, uint32_t &gain)
uint16_t getNbSweetCells2FromMask() const
uint16_t getFirstSampleIndex() const
std::vector< uint32_t > m_RawDataBlock
virtual void resetPointers()
std::vector< uint32_t > m_GainBlock
virtual int32_t getVROBEy() const
uint16_t m_numberHotCellOffTime
virtual bool canSetCalibration()
const uint32_t * m_MaskTimeQualityPointer
const uint16_t * m_TimeQualityPointer
virtual uint32_t getVROBFebId()
virtual uint16_t getCtrl3(uint32_t adc) const
virtual int setGain(const int)
virtual uint16_t getNbSweetCells1() const
virtual uint32_t getStatus() const
void initializeFEB(const uint32_t id)
static std::string BlockType()
virtual bool setPointers()
const uint16_t * m_RaddPointer
void setNextEnergy(const int channel, const int32_t energy, const int32_t time, const int32_t quality, const uint32_t gain)
void setRawData(const int, const std::vector< short > &, const uint32_t)
const uint16_t * m_EnergyPointer
virtual uint32_t getNumberOfGains() const
virtual void setEx(double)
std::vector< uint16_t > m_DigitsEncode
virtual int getNextEnergy(int &channelNumber, int32_t &energy, int32_t &time, int32_t &quality, uint32_t &gain)
void setRequiredNSamples(unsigned short ns)
std::vector< uint16_t > m_TimeQualityBlock
virtual void sortDataVector(std::vector< const LArRawChannel * > &)
uint32_t m_virtualROBJump
const uint32_t * m_virtualROBPointerLocal
uint16_t getHeader16(const unsigned n) const
const uint32_t * m_virtualROBPointer
LArRodBlockStructure(IMessageSvc *msgSvc, const std::string &blockType)
uint32_t RawToOfflineGain(const uint32_t gain) const
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.