ATLAS Offline Software
Loading...
Searching...
No Matches
LArRodBlockPhysicsV6 Class Reference

#include <LArRodBlockPhysicsV6.h>

Inheritance diagram for LArRodBlockPhysicsV6:
Collaboration diagram for LArRodBlockPhysicsV6:

Public Types

enum  {
  NWTot , NWTot_h , FEBID , FEBID_h ,
  FEB_SN , FEB_SN_h , ResultsOff1 , ResultsDim1 ,
  ResultsOff2 , ResultsDim2 , RawDataBlkOff , RawDataBlkDim ,
  EventStatus , EventStatus_h , NGains , NSamples ,
  FirstSampleIndex , FebConfig , InFPGAFormat , InFPGAFormat_h ,
  endtag
}

Public Member Functions

 LArRodBlockPhysicsV6 ()
std::string BlockType ()
virtual int getNextEnergy (int &channelNumber, int32_t &energy, int32_t &time, int32_t &quality, uint32_t &gain)
virtual int getNextRawData (int &channelNumber, std::vector< short > &samples, uint32_t &gain)
int getNextDigits (int &channelNumber, std::vector< short > &samples, uint32_t &gain)
virtual uint16_t getResults1Size () const
virtual uint16_t getResults2Size () const
virtual uint16_t getRawDataSize () const
virtual uint16_t getNbSweetCells1 () const
virtual uint16_t getNbSweetCells2 () const
virtual uint32_t getNumberOfSamples () const
virtual uint32_t getNumberOfGains () const
virtual uint32_t getRadd (uint32_t adc, uint32_t sample) const
virtual uint16_t getCtrl1 (uint32_t adc) const
virtual uint16_t getCtrl2 (uint32_t adc) const
virtual uint16_t getCtrl3 (uint32_t adc) const
virtual uint32_t getStatus () const
virtual uint32_t hasCalibBlock () const
virtual uint32_t hasPhysicsBlock () const
virtual uint32_t hasRawDataBlock () const
virtual uint32_t hasControlWords () const
virtual int FebToRodChannel (int ch) const
virtual int32_t getEx () const
virtual int32_t getEy () const
virtual int32_t getEz () const
virtual int32_t getSumE () const
virtual uint32_t getVROBFebId ()
virtual int32_t getVROBEx () const
virtual int32_t getVROBEy () const
virtual int32_t getVROBEz () const
virtual int32_t getVROBSumE () const
virtual int setGain (const int)
void initializeFragment (std::vector< uint32_t > &fragment)
void initializeFEB (const uint32_t id)
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)
void finalizeFEB ()
void concatinateFEBs ()
virtual void setEx (double)
virtual void setEy (double)
virtual void setEz (double)
virtual void setSumE (double)
void setRequiredNSamples (unsigned short ns)
template<class RAWDATA>
bool operator() (const RAWDATA *ch1, const RAWDATA *ch2) const
void sortDataVector (std::vector< const LArDigit * > &vDigit)
uint16_t getFebConfig () const
uint16_t getFirstSampleIndex () const
virtual bool canSetCalibration ()
bool canSetEnergy ()
bool canSetRawData ()
bool canIncludeRawData ()
virtual void sortDataVector (std::vector< const LArRawChannel * > &)
virtual void sortDataVector (std::vector< const LArCalibDigit * > &)
virtual void sortDataVector (std::vector< const LArAccumulatedCalibDigit * > &)
virtual void sortDataVector (std::vector< const LArAccumulatedDigit * > &)
virtual void setNumberOfSamples (const uint8_t n)
virtual void setNumberOfGains (const uint8_t n)
virtual void setTDCPhase (const uint8_t n)
virtual void setRawDataFixed (const int channel, const std::vector< short > &samples, const uint32_t gain)
virtual void setEtQ (const int channel, const int32_t energy, const int32_t time, const int32_t quality, const uint32_t gain)
virtual void setDAC (const uint16_t DACValue)
virtual void setDelay (const uint16_t DelayValue)
virtual void setPulsed (const unsigned channelNumber)
virtual void setNTrigger (const uint16_t NTrigger)
virtual bool canSetRawDataFixed ()
virtual bool canSetNTrigger ()
bool setFragment (const uint32_t *p, uint32_t n)
bool nextFEB ()
uint32_t getNumberOfWords () const
uint32_t getFEBID () const
uint32_t getFEBSN () const
virtual uint32_t hasAccumBlock () const
virtual int getNextAccumulatedCalibDigit (int &channelNumber, std::vector< uint64_t > &SamplesSum, std::vector< uint64_t > &Samples2Sum, uint32_t &nStepTriggers, uint32_t &gain)
virtual int getNextAccumulatedDigit (int &channelNumber, std::vector< uint64_t > &SamplesSum, std::vector< uint64_t > &corr2Sum, uint32_t &gain)
virtual bool getPulsed (unsigned channelNumber) const
virtual uint16_t getDAC () const
virtual uint16_t getDelay () const
virtual uint16_t getNTrigger () const
virtual uint16_t getStepIndex () const
virtual uint16_t getNStep () const
virtual uint8_t getTDCPhase () const
virtual uint32_t getDspCodeVersion () const
virtual int32_t getDspEventCounter () const
virtual uint32_t onlineCheckSum () const
virtual uint32_t offlineCheckSum () const
virtual int setFragmentVirtualROB (const uint32_t *p, uint32_t n)
virtual void dumpFragment ()
void setFirstSample (const int rearrangeFirstSample)
uint32_t RawToOfflineGain (const uint32_t gain) const
uint32_t OfflineToRawGain (const uint32_t gain) const
bool report_error (void) const

Protected Types

enum  {
  NWTot , NWTot_h , FEBID , FEBID_h ,
  FEBSN , FEBSN_h , endtag
}
typedef std::map< uint32_t, std::vector< uint32_t > > FEBMAPTYPE

Protected Member Functions

void setHeader16 (const unsigned n, const uint16_t w)
void setHeader32 (const unsigned n, const uint32_t w)
uint16_t getVectorHeader16 (const unsigned n) const
uint32_t getVectorHeader32 (const unsigned n) const
uint16_t getHeader16 (const unsigned n) const
uint32_t getHeader32 (const unsigned n) const
uint16_t LE_getHeader16 (const unsigned n) const
void LE_setHeader16 (const unsigned n, const uint16_t w)
uint16_t LE_getVectorHeader16 (const unsigned n) const
void setBit (uint32_t *const p, const unsigned chan)
int getBit (const uint32_t *const p, const unsigned chan) const

Protected Attributes

int32_t m_Ex
int32_t m_Ey
int32_t m_Ez
int32_t m_SumE
uint32_t m_numberOfEx
uint32_t m_numberOfEy
uint32_t m_numberOfEz
uint32_t m_numberOfSumE
unsigned short m_iHeadBlockSize
int m_channelsPerFEB
const uint32_t * m_FebBlock
const uint32_t * m_RodBlock
int32_t m_FebBlockSize
int32_t m_RodBlockSize
std::vector< uint32_t > * m_vFragment
std::vector< uint32_t > * m_pRODblock
FEBMAPTYPE m_mFebBlocks
int32_t m_MiddleHeaderSize
unsigned int m_rearrangeFirstSample
bool m_error_next_feb
uint32_t m_virtualROBJump
int32_t m_ROB_to_decode
const uint32_t * m_virtualROBPointer
const uint32_t * m_virtualROBPointerLocal

Static Protected Attributes

static const uint32_t m_RawToOfflineGainMap [4] ={0, 2, 1,0}
static const uint32_t m_OfflineToRawGainMap [3] ={3,2,1}

Private Member Functions

void setE (unsigned int index, double E)
virtual void resetPointers ()
virtual bool setPointers ()
void setNextEnergy (const uint16_t energy, const int16_t time, const int16_t quality, const uint32_t gain)
uint16_t getNbSweetCells1FromMask () const
uint16_t getNbSweetCells2FromMask () const

Private Attributes

std::vector< uint32_t > m_SumBlkBlockE1
std::vector< uint32_t > m_SumBlkBlockE2
std::vector< uint32_t > m_GainBlock
std::vector< uint32_t > m_FebInfoBlock
std::vector< uint16_t > m_TimeQualityBlock
std::vector< uint32_t > m_RawDataBlock
std::vector< uint16_t > m_EnergyBlockEncode
std::vector< uint16_t > m_DigitsEncode
int m_EnergyIndex = 0
int m_TimeQualityIndex = 0
int m_DigitsIndex = 0
int m_DigitsChannel = 0
int m_RawDataIndex = 0
const uint32_t * m_GainPointer = nullptr
const uint32_t * m_MaskTimeQualityPointer = nullptr
const uint32_t * m_MaskDigitsPointer = nullptr
const uint16_t * m_RaddPointer = nullptr
const uint16_t * m_EnergyPointer = nullptr
const int32_t * m_SumPointer = nullptr
const uint16_t * m_TimeQualityPointer = nullptr
const uint16_t * m_DigitsPointer = nullptr
const uint16_t * m_RawDataPointer = nullptr
int m_fixedGain
uint16_t m_numberHotCell = 0U
uint16_t m_numberHotCellOffTime
uint16_t m_EnergyThreshold1
uint16_t m_EnergyThreshold2
int16_t m_OffTimeCut
unsigned short m_requiredNSamples
const LArOnlineIDm_onlineHelper

Detailed Description

Definition at line 31 of file LArRodBlockPhysicsV6.h.

Member Typedef Documentation

◆ FEBMAPTYPE

typedef std::map<uint32_t, std::vector<uint32_t> > LArRodBlockStructure::FEBMAPTYPE
protectedinherited

Definition at line 233 of file LArRodBlockStructure.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
NWTot 
NWTot_h 
FEBID 
FEBID_h 
FEB_SN 
FEB_SN_h 
ResultsOff1 
ResultsDim1 
ResultsOff2 
ResultsDim2 
RawDataBlkOff 
RawDataBlkDim 
EventStatus 
EventStatus_h 
NGains 
NSamples 
FirstSampleIndex 
FebConfig 
InFPGAFormat 
InFPGAFormat_h 
endtag 

Definition at line 35 of file LArRodBlockPhysicsV6.h.

35 {
36 NWTot, // First words: DSP event header
37 NWTot_h,
38 FEBID,
39 FEBID_h,
40 FEB_SN, // FEB serial number
41 FEB_SN_h, // FEB serial number
42 ResultsOff1, // Size of results (Physics averages in DSP)
43 ResultsDim1, // Offset to results
44 ResultsOff2, // Size of times (in physics)
45 ResultsDim2, // Offset to times (in physics)
47 RawDataBlkDim, // Raw FEB event offset
48 EventStatus, // Bits describing the event
50 NGains,
51 NSamples,
54 InFPGAFormat, // added 08.09.2005 - wrong 28.09.2005?
56 endtag //This tag needs to be an odd number, see *) for constructor
57 };

◆ anonymous enum

anonymous enum
protectedinherited
Enumerator
NWTot 
NWTot_h 
FEBID 
FEBID_h 
FEBSN 
FEBSN_h 
endtag 

Definition at line 51 of file LArRodBlockStructure.h.

51 {
52 NWTot, // Number of words in DSP block
53 NWTot_h,
54 FEBID, // FEB ID
55 FEBID_h,
56 FEBSN, // FEB Serial Number
57 FEBSN_h,
58 endtag // This tag needs to be an odd number, see *) for constructor
59 };

Constructor & Destructor Documentation

◆ LArRodBlockPhysicsV6()

LArRodBlockPhysicsV6::LArRodBlockPhysicsV6 ( )

Definition at line 39 of file LArRodBlockPhysicsV6.cxx.

41 m_onlineHelper(nullptr)
42{
43 m_iHeadBlockSize=endtag/2; // The implicit cast rounds down to the right size
49 m_OffTimeCut=0; //FIXME: Nowhere set to a sensible value ???
51 // retrieve onlineHelper
52 SmartIF<StoreGateSvc> detStore{Gaudi::svcLocator()->service("DetectorStore")};
53 if (!detStore) {
54 std::cout << "Unable to locate DetectorStore" << std::endl;
55 std::abort();
56 }
57 StatusCode sc = detStore->retrieve(m_onlineHelper, "LArOnlineID");
58 if (sc.isFailure()) {
59 std::cout << "Could not get LArOnlineID helper !" << std::endl;
60 std::abort();
61 }
62}
static Double_t sc
const LArOnlineID * m_onlineHelper
unsigned short m_requiredNSamples
@ LARNGAIN
Definition CaloGain.h:19
::StatusCode StatusCode
StatusCode definition for legacy code.

Member Function Documentation

◆ BlockType()

std::string LArRodBlockPhysicsV6::BlockType ( )
inline

Definition at line 62 of file LArRodBlockPhysicsV6.h.

62{ return std::string("RodBlockPhysicsV6");}

◆ canIncludeRawData()

bool LArRodBlockPhysicsV6::canIncludeRawData ( )
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 182 of file LArRodBlockPhysicsV6.h.

182{ return true;}

◆ canSetCalibration()

virtual bool LArRodBlockPhysicsV6::canSetCalibration ( )
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 179 of file LArRodBlockPhysicsV6.h.

179{return false;}

◆ canSetEnergy()

bool LArRodBlockPhysicsV6::canSetEnergy ( )
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 180 of file LArRodBlockPhysicsV6.h.

180{ return true;}

◆ canSetNTrigger()

virtual bool LArRodBlockStructure::canSetNTrigger ( )
inlinevirtualinherited

Definition at line 100 of file LArRodBlockStructure.h.

100{return false;}

◆ canSetRawData()

bool LArRodBlockPhysicsV6::canSetRawData ( )
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 181 of file LArRodBlockPhysicsV6.h.

181{ return false;}

◆ canSetRawDataFixed()

virtual bool LArRodBlockStructure::canSetRawDataFixed ( )
inlinevirtualinherited

Reimplemented in LArRodBlockTransparentV0< DSPHEADER >.

Definition at line 98 of file LArRodBlockStructure.h.

98{return false;}

◆ concatinateFEBs()

void LArRodBlockPhysicsV6::concatinateFEBs ( )
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 1013 of file LArRodBlockPhysicsV6.cxx.

1014{
1015 FEBMAPTYPE::const_iterator feb_it_b=m_mFebBlocks.begin();
1016 FEBMAPTYPE::const_iterator feb_it_e=m_mFebBlocks.end();
1017 FEBMAPTYPE::const_iterator feb_it;
1018 for (feb_it=feb_it_b;feb_it!=feb_it_e;++feb_it) {
1019 if (feb_it!=feb_it_b) //Not first Feb
1020 m_pRODblock->resize( m_pRODblock->size()+m_MiddleHeaderSize);
1021
1022 //Add feb data to rod data block
1023 m_pRODblock->insert (m_pRODblock->end(),
1024 feb_it->second.begin(), feb_it->second.end());
1025 } //end for feb_it
1026
1027 m_mFebBlocks.clear();
1028 return;
1029}
std::vector< uint32_t > * m_pRODblock

◆ dumpFragment()

void LArRodBlockStructure::dumpFragment ( )
virtualinherited

Definition at line 175 of file LArRodBlockStructure.cxx.

176{
177 std::cout << "Error: Function dumpFragment() not implemented in this instance of LArRodBlockStructure!\n";
178 return;
179}

◆ FebToRodChannel()

int LArRodBlockPhysicsV6::FebToRodChannel ( int ch) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 379 of file LArRodBlockPhysicsV6.h.

380{
381return ( (ch&0x7) << 4) | ( (ch&0x38) >>2 ) | ((ch&0x40)>>6);
382
383}

◆ finalizeFEB()

void LArRodBlockPhysicsV6::finalizeFEB ( )
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 869 of file LArRodBlockPhysicsV6.cxx.

870{
871//Complete non-complete Energy block
873 setNextEnergy((uint16_t)0,(int16_t)32767,(int32_t)-32767,(uint32_t)0);//E=0,t=32767,q=-32767,G=0
874
875uint16_t n;
876//uint16_t BlockOffset;
878// checkSum value
879uint32_t sum=0;
880
881// Will Hardcode here for the moment FIXME. Minimal 1 sample
883setHeader16(NSamples,nsamples);
884// These will never be used form MC. Nice to put in here thought
885setHeader16(FEB_SN,0xfefe);
886setHeader16(FEB_SN_h,0xdede);
889
890// Gain block...
891n = m_GainBlock.size();
892//BlockOffset=0;
893//LARBSDBG("Checking Gain Block n=" << n << "BlockOffset=" << BlockOffset);
894//Check if Gain-Block exists and is not yet part of the fragment
895if (n)
896 {
897 //LARBSDBG(MSG::DEBUG << "In finalyseFEB-------------------->>>>> " << "Checking for Gain Block : length= " << n << " BlockOffset=" << BlockOffset);
898 for(unsigned int i=0;i<n;i++){
899 m_vFragment->push_back(m_GainBlock[i]);
900 sum+=m_GainBlock[i];
901 }
902 }
903
904 // Cells above energy threshold E1
905 n = m_SumBlkBlockE1.size();
906 //Check if Summary Block exists and is not yet part of the fragment
907 if (n)
908 {
909 //LARBSDBG("In finalizeFEB-------------------->>>>> " << "Checking for Summary Block : length= " << n << " BlockOffset=" << BlockOffset);
910 for (unsigned i=0;i<n;i++){
911 m_vFragment->push_back(m_SumBlkBlockE1[i]);
913 }
914 }
915
916 // Cells above energy threshold E2 (not included so far)
917 n = m_SumBlkBlockE2.size();
918 //Check if Summary Block exists and is not yet part of the fragment
919 //LARBSDBG("Checking for Summary Block n=" << n << "BlockOffset=" << BlockOffset);
920 if (n)
921 {
922 //LARBSDBG("In finalizeFEB-------------------->>>>> " << "Checking for Summary Block : length= " << n << " BlockOffset=" << BlockOffset);
923 for (unsigned i=0;i<n;i++){
924 m_vFragment->push_back(m_SumBlkBlockE2[i]);
926 }
927 }
928
929 // fill info from counters
930 // for moment just include 1 fake words (32 bits) to put radd
931 uint32_t radd_nANC=0x0;
932 // Second threshold missing (FIXME)
933 radd_nANC = ((m_numberHotCell<<8))+(m_DigitsEncode.size()/nsamples);
934 radd_nANC = (radd_nANC<<16);
935 m_vFragment->push_back(radd_nANC);
936 sum+=radd_nANC;
937 // Need to include radd nsamples-1
938 // No need to include in sum's for now
939 for( int i=0; i < (nsamples-1)/2; i++)
940 m_vFragment->push_back(0x0);
941
942
943 // Energy block...
944 n = 128 ; // Fixed size m_EnergyBlock.size();
945 // BlockOffset=getVectorHeader16(ResultsOff1); xxx
946 // Block also include time, whenever necessary
947 int size_of_block=80+(nsamples+1)/2+(m_TimeQualityBlock.size())/2;
948 //LARBSDBG("Checking Energy Block n=" << n << "BlockOffset=" << BlockOffset);
949 //Check if Energy-Block exists and is not yet part of the fragment
950 if (n)
951 {
953 setHeader16(ResultsDim1,size_of_block);
954 //LARBSDBG("In finalyseFEB-------------------->>>>> " << "Checking for Energy Block : length= " << n << " BlockOffset=" << BlockOffset);
955 for(unsigned int i=0;i<n/2;i++) {
956 // WARNING witch one should be >>16 2*i or 2*i+1? To be tested
957 uint32_t Encode = m_EnergyBlockEncode[2*i]+(m_EnergyBlockEncode[2*i+1]<<16);
958 m_vFragment->push_back(Encode);
959 sum+=Encode;
960 }
961 }
962
963 // Magic numbers (4 or 8) for Ex, Ey and Ez
964 n = m_TimeQualityBlock.size();
965 //LARBSDBG("Checking Time and Quality Block n=" << n << "BlockOffset=" << BlockOffset);
966 //Check if Time and Quality Block exists and is not yet part of the fragment
967 if (n)
968 {
969 unsigned int imax = n/2;
970 for(unsigned int i=0;i<imax;i++){
971 ShortLong to_push{};
972 to_push.s[0] = m_TimeQualityBlock[i*2];
973 to_push.s[1] = m_TimeQualityBlock[i*2+1];
974 m_vFragment->push_back(to_push.l);
975 sum+=to_push.l;
976 }
977 }
978 // Now include digits
979 n = m_DigitsEncode.size();
980 if ( n ) {
981 // First make sure it is not and odd number to store
982 if ( m_DigitsEncode.size() & 0x1 ) m_DigitsEncode.push_back(0x0);
983 unsigned int imax=m_DigitsEncode.size()/2;
984 for(unsigned int i=0;i<imax;i++){
985 // Better by-swap
986 ShortLong to_push{};
987 to_push.s[1]=m_DigitsEncode[i*2];
988 to_push.s[0]=m_DigitsEncode[i*2+1];
989 m_vFragment->push_back(to_push.l);
990 sum+=to_push.l;
991 }
993 setHeader16(ResultsOff2,18+size_of_block);
994 } // End of check for format
995
996 // Need to add header to check sum
997 for(size_t ii=0;ii<endtag/2;ii++){
998 sum+=((*m_vFragment)[ii]);
999 }
1000 // Three final magic words
1001 m_vFragment->push_back(0x0); // For the moment
1002 m_vFragment->push_back(0x12345678); // For the moment
1003 //sum+=0x12345678;
1004 sum+=m_vFragment->size()+1;
1005 m_vFragment->push_back(sum& 0x7fffffff);
1006
1007 setHeader32(NWTot,m_vFragment->size());
1008 return;
1009
1010}
int imax(int i, int j)
std::vector< uint16_t > m_TimeQualityBlock
std::vector< uint32_t > m_SumBlkBlockE2
void setNextEnergy(const int channel, const int32_t energy, const int32_t time, const int32_t quality, const uint32_t gain)
std::vector< uint32_t > m_GainBlock
std::vector< uint32_t > m_SumBlkBlockE1
std::vector< uint16_t > m_DigitsEncode
std::vector< uint16_t > m_EnergyBlockEncode
void setHeader32(const unsigned n, const uint32_t w)
void setHeader16(const unsigned n, const uint16_t w)
std::vector< uint32_t > * m_vFragment
setWord1 uint16_t
setEventNumber uint32_t

◆ getBit()

int LArRodBlockStructure::getBit ( const uint32_t *const p,
const unsigned chan ) const
inlineprotectedinherited

Definition at line 433 of file LArRodBlockStructure.h.

434{// chan = (0,127)
435 // int a = chan/32;
436 // int r = chan%32;
437 int a = chan>>5;
438 int r = chan&0x1f;
439 // a = (0,3), r = ( 0, 31 )
440 return (*(p+a)>>r) & 0x1;
441}
static Double_t a
int r
Definition globals.cxx:22

◆ getCtrl1()

uint16_t LArRodBlockPhysicsV6::getCtrl1 ( uint32_t adc) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 626 of file LArRodBlockPhysicsV6.cxx.

627{
628 if(!m_RawDataPointer) return 0;
629 int index=5;
631 return x;
632}
#define x
const uint16_t * m_RawDataPointer
str index
Definition DeMoScan.py:362

◆ getCtrl2()

uint16_t LArRodBlockPhysicsV6::getCtrl2 ( uint32_t adc) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 634 of file LArRodBlockPhysicsV6.cxx.

635{
636 if(!m_RawDataPointer) return 0;
637 int index=4;
639 return x;
640}

◆ getCtrl3()

uint16_t LArRodBlockPhysicsV6::getCtrl3 ( uint32_t adc) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 642 of file LArRodBlockPhysicsV6.cxx.

643{
644 if(!m_RawDataPointer) return 0;
645 int index=7;
647 return x;
648}

◆ getDAC()

uint16_t LArRodBlockStructure::getDAC ( ) const
inlinevirtualinherited

Reimplemented in LArRodBlockCalibrationV0< DSPHEADER >, LArRodBlockCalibrationV1, LArRodBlockCalibrationV2, and LArRodBlockCalibrationV3.

Definition at line 468 of file LArRodBlockStructure.h.

469{
470 std::cout << "Error: Function getDAC not implemented in this instance of LArRodBlockStructure!\n";
471 return 0;
472}

◆ getDelay()

uint16_t LArRodBlockStructure::getDelay ( ) const
inlinevirtualinherited

Reimplemented in LArRodBlockCalibrationV0< DSPHEADER >, LArRodBlockCalibrationV1, LArRodBlockCalibrationV2, and LArRodBlockCalibrationV3.

Definition at line 474 of file LArRodBlockStructure.h.

475{
476 std::cout << "Error: Function getDelay not implemented in this instance of LArRodBlockStructure!\n";
477 return 0;
478}

◆ getDspCodeVersion()

uint32_t LArRodBlockStructure::getDspCodeVersion ( ) const
virtualinherited

Definition at line 258 of file LArRodBlockStructure.cxx.

259{
260 int i=getNumberOfWords()-2;
261 return m_FebBlock[i];
262}
uint32_t getNumberOfWords() const

◆ getDspEventCounter()

int32_t LArRodBlockStructure::getDspEventCounter ( ) const
virtualinherited

Definition at line 264 of file LArRodBlockStructure.cxx.

265{
266 int i=getNumberOfWords()-1;
267 return m_FebBlock[i];
268}

◆ getEx()

int32_t LArRodBlockPhysicsV6::getEx ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 317 of file LArRodBlockPhysicsV6.h.

318{
319 if(m_SumPointer) return (m_SumPointer[0]>>9);
320 return 0;
321}

◆ getEy()

int32_t LArRodBlockPhysicsV6::getEy ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 323 of file LArRodBlockPhysicsV6.h.

324{
325 if(m_SumPointer) return (m_SumPointer[1]>>9);
326 return 0;
327}

◆ getEz()

int32_t LArRodBlockPhysicsV6::getEz ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 329 of file LArRodBlockPhysicsV6.h.

330{
331 if(m_SumPointer) return (m_SumPointer[2]>>9);
332 return 0;
333}

◆ getFebConfig()

uint16_t LArRodBlockPhysicsV6::getFebConfig ( ) const
inline

Definition at line 185 of file LArRodBlockPhysicsV6.h.

186{
187 return getHeader16(FebConfig);
188}
uint16_t getHeader16(const unsigned n) const

◆ getFEBID()

uint32_t LArRodBlockStructure::getFEBID ( ) const
inlineinherited

Definition at line 297 of file LArRodBlockStructure.h.

298{return getHeader32(FEBID);}
uint32_t getHeader32(const unsigned n) const

◆ getFEBSN()

uint32_t LArRodBlockStructure::getFEBSN ( ) const
inlineinherited

Definition at line 300 of file LArRodBlockStructure.h.

301{return getHeader32(FEBSN);}

◆ getFirstSampleIndex()

uint16_t LArRodBlockPhysicsV6::getFirstSampleIndex ( ) const
inline

Definition at line 190 of file LArRodBlockPhysicsV6.h.

191{
193}

◆ getHeader16()

uint16_t LArRodBlockStructure::getHeader16 ( const unsigned n) const
inlineprotectedinherited

Definition at line 355 of file LArRodBlockStructure.h.

356{
357 // std::cout << "getHeader16: " << m_FebBlock << " " << m_FebBlock[5] << " "
358 // << n << " " << (n>>1) << " " << (m_FebBlock[5]&0xffff) << std::endl;
359 if (n&0x1) //n is a odd number
360 return m_FebBlock[n>>1] & 0xffff; //1,3,5... are fetched from lower bits
361 else //n is a even number
362 return m_FebBlock[n>>1] >> 16; //0,2,4... are fetched from higher bits
363}

◆ getHeader32()

uint32_t LArRodBlockStructure::getHeader32 ( const unsigned n) const
inlineprotectedinherited

Definition at line 365 of file LArRodBlockStructure.h.

366{return m_FebBlock[n>>1];}

◆ getNbSweetCells1()

uint16_t LArRodBlockPhysicsV6::getNbSweetCells1 ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 553 of file LArRodBlockPhysicsV6.cxx.

554{
555 if(!m_RaddPointer) return 0;
556 return m_RaddPointer[1]>>8;
557}
const uint16_t * m_RaddPointer

◆ getNbSweetCells1FromMask()

uint16_t LArRodBlockPhysicsV6::getNbSweetCells1FromMask ( ) const
private

Definition at line 565 of file LArRodBlockPhysicsV6.cxx.

566{
567 if(!m_MaskTimeQualityPointer) return 0;
568 int n=0;
569 for(int i=0;i<4;i++)
570 for(int j=0;j<32;j++)
571 if((m_MaskTimeQualityPointer[i] >> j) &0x1) n++;
572 return n;
573}
const uint32_t * m_MaskTimeQualityPointer

◆ getNbSweetCells2()

uint16_t LArRodBlockPhysicsV6::getNbSweetCells2 ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 559 of file LArRodBlockPhysicsV6.cxx.

560{
561 if(!m_RaddPointer) return 0;
562 return m_RaddPointer[1] & 0xff;
563}

◆ getNbSweetCells2FromMask()

uint16_t LArRodBlockPhysicsV6::getNbSweetCells2FromMask ( ) const
private

Definition at line 575 of file LArRodBlockPhysicsV6.cxx.

576{
577 if(!m_MaskDigitsPointer) return 0;
578 int n=0;
579 for(int i=0;i<4;i++)
580 for(int j=0;j<32;j++)
581 if((m_MaskDigitsPointer[i] >> j) &0x1) n++;
582 return n;
583}
const uint32_t * m_MaskDigitsPointer

◆ getNextAccumulatedCalibDigit()

int LArRodBlockStructure::getNextAccumulatedCalibDigit ( int & channelNumber,
std::vector< uint64_t > & SamplesSum,
std::vector< uint64_t > & Samples2Sum,
uint32_t & nStepTriggers,
uint32_t & gain )
virtualinherited

Reimplemented in LArRodBlockCalibrationV1, LArRodBlockCalibrationV2, and LArRodBlockCalibrationV3.

Definition at line 94 of file LArRodBlockStructure.cxx.

95{
96 std::cout << "Error: Function getNextAccumulatedCalibDigit not implemented in this instance of LArRodBlockStructure!\n";
97 return 0;
98}

◆ getNextAccumulatedDigit()

int LArRodBlockStructure::getNextAccumulatedDigit ( int & channelNumber,
std::vector< uint64_t > & SamplesSum,
std::vector< uint64_t > & corr2Sum,
uint32_t & gain )
virtualinherited

Reimplemented in LArRodBlockAccumulatedV3.

Definition at line 100 of file LArRodBlockStructure.cxx.

101{
102 std::cout << "Error: Function getNextAccumulatedDigit not implemented in this instance of LArRodBlockStructure!\n";
103 return 0;
104}

◆ getNextDigits()

int LArRodBlockPhysicsV6::getNextDigits ( int & channelNumber,
std::vector< short > & samples,
uint32_t & gain )

Definition at line 414 of file LArRodBlockPhysicsV6.cxx.

415{
416 //std::cout << " I am here !!!!!!!!!!!!!!!!!!!!!! " << std::endl;
417#ifdef LARBSDBGOUTPUT
418 MsgStream logstr(Athena::getMessageSvc(), BlockType());
419 //Debug output
420 logstr << MYLEVEL << "Let s go in getNextDigits..." << endmsg;
421 logstr << MYLEVEL << "GetNextDigits for FEB 0x" << MSG::hex << (uint32_t)getHeader32(FEBID) << MSG::dec << endmsg;
422 logstr << MYLEVEL << "m_DigitsPointer=" << m_DigitsPointer << " m_DigitsIndex="<< m_DigitsIndex
423 << " m_DigitsChannel="<< m_DigitsChannel
424 << " m_channelsPerFEB=" << m_channelsPerFEB << endmsg;
425#endif
426
427 if (m_DigitsChannel>=m_channelsPerFEB) { //Already beyond maximal number of channels
428#ifdef LARBSDBGOUTPUT
429 logstr << MYLEVEL << "Maximum number of channels reached" << endmsg;
430#endif
431 return 0;
432 }
433 //const uint16_t block = getHeader16(m_DigitsOff);//Position of the raw FEB data block
434 if (!m_DigitsPointer) { //Block does not exist
435#ifdef LARBSDBGOUTPUT
436 logstr << MYLEVEL << "No Digits Block in this FEB" << endmsg;
437#endif
438 return 0;
439 }
440 if (!m_MaskDigitsPointer) { //Block does not exist
441#ifdef LARBSDBGOUTPUT
442 logstr << MYLEVEL << "No Mask Digits Block in this FEB" << endmsg;
443#endif
444 return 0;
445 }
446
447 // Get Digits if the information is present according to summary block
448 uint32_t hasDigits;
449
450 hasDigits = (uint32_t) ((m_MaskDigitsPointer[m_DigitsChannel>>5] >> (m_DigitsChannel&0x1f)) &0x1);
451 // Increment channel number until digits are found
452 while(hasDigits==0) {
454 if (m_DigitsChannel>=m_channelsPerFEB) { //Already beyond maximal number of channels
455#ifdef LARBSDBGOUTPUT
456 logstr << MYLEVEL << "Maximum number of channels reached" << endmsg;
457#endif
458 return 0;
459 }
460 hasDigits = (uint32_t) ((m_MaskDigitsPointer[m_DigitsChannel>>5] >> (m_DigitsChannel&0x1f)) &0x1);
461 }
462
463 // Get next channel
464 unsigned rodChannelNumber=m_DigitsChannel; // Index of Channel in ROD-Block
465 channelNumber=((rodChannelNumber&0xe)<<2) + ((rodChannelNumber&0x1)<<6) + (rodChannelNumber>>4); //channel number of the FEB
466 //channelNumber=(rodChannelNumber>>4) + ((rodChannelNumber&0xf)<<3); //channel number of the FEB
467 const unsigned int nsamples = getHeader16(NSamples) & 0xff;
468
469 // gain in 2 bits of a 32 bits word
470 if(m_GainPointer) {
471 gain = (uint32_t) ((m_GainPointer[m_DigitsChannel>>4] >> (m_DigitsChannel&0xf)*2) & 0x3);
473 } else gain=0xffffffff;
474
475#ifdef LARBSDBGOUTPUT
476 logstr << MYLEVEL << "This FEB has " << nsamples << " samples" << endmsg;
477#endif
478
479 if(nsamples==0) return 0;
480 int s_size = nsamples;
481 int index;
482 index = s_size*m_DigitsIndex;
483 //uint16_t s;
484 //for(unsigned int i=0;i<nsamples;i++) {
485 // s = m_DigitsPointer[index++]>>2;
486 // samples.push_back(s);
487 //}
488 //int ok=1;
489 //for(unsigned int i=0;i<nsamples;i++) {
490 // if(m_DigitsPointer[index+i]>>14 && m_DigitsIndex<getNbSweetCells2()-1) {
491 // std::cout << "Trying to decode strange digits value: " << std::hex << m_DigitsPointer[index+i] << std::dec << std::endl;
492 // ok=0;
493 // }
494 //}
495 if( nsamples&0x1){
496 if(m_DigitsIndex&0x1) {
497 samples.push_back(m_DigitsPointer[index-1]>>2);
498 samples.push_back(m_DigitsPointer[index+2]>>2);
499 samples.push_back(m_DigitsPointer[index+1]>>2);
500 samples.push_back(m_DigitsPointer[index+4]>>2);
501 samples.push_back(m_DigitsPointer[index+3]>>2);
502 if(nsamples==7) {
503 samples.push_back(m_DigitsPointer[index+6]>>2);
504 samples.push_back(m_DigitsPointer[index+5]>>2);
505 }
506 } else {
507 samples.push_back(m_DigitsPointer[index+1]>>2);
508 samples.push_back(m_DigitsPointer[index+0]>>2);
509 samples.push_back(m_DigitsPointer[index+3]>>2);
510 samples.push_back(m_DigitsPointer[index+2]>>2);
511 samples.push_back(m_DigitsPointer[index+5]>>2);
512 if(nsamples==7) {
513 samples.push_back(m_DigitsPointer[index+4]>>2);
514 samples.push_back(m_DigitsPointer[index+7]>>2);
515 }
516 }
517 } else {
518 samples.push_back(m_DigitsPointer[index+1]>>2);
519 samples.push_back(m_DigitsPointer[index+0]>>2);
520 samples.push_back(m_DigitsPointer[index+3]>>2);
521 samples.push_back(m_DigitsPointer[index+2]>>2);
522 }
523
524#ifdef LARBSDBGOUTPUT
525 logstr << MYLEVEL << " ===> ROD Channel = " << m_DigitsChannel << endmsg;
526 logstr << MYLEVEL << " ===> FEB Channel = " << channelNumber << endmsg;
527 logstr << MYLEVEL << " ===> Gain = " << gain << endmsg;
528 for(int i=0;i<nsamples;i++)
529 logstr << MYLEVEL << " ===> sample " << i << " = " << samples[i] << endmsg;
530#endif
531 //std::cout << "Gain= " << gain << " Febgain=" << febgain << std::endl;
534 unsigned rearrangeFirstSample=0;
536 rearrangeFirstSample=m_rearrangeFirstSample; //Overwrite by jobOptions
537 else
538 rearrangeFirstSample=getFirstSampleIndex();
539 //std::cout << "FebConfig: "<< getFebConfig() << " FirstSampleIndex " << getFirstSampleIndex() <<std::endl;
540 if (rearrangeFirstSample && rearrangeFirstSample<samples.size()) //FIXME: Very ugly hack! See explanation in LArRodDecoder.h file
541 {//Change e.g. 3 0 1 2 4 to 0 1 2 3 4
542 short movedSample=samples[0];
543 for (unsigned i=1;i<=rearrangeFirstSample;i++)
544 samples[i-1]=samples[i];
545 samples[rearrangeFirstSample]=movedSample;
546 }
547#ifdef LARBSDBGOUTPUT
548 logstr << MYLEVEL << "GetNextDigits for FEB finished 0x" << MSG::hex << (uint32_t)getHeader32(FEBID) << MSG::dec << endmsg;
549#endif
550 return 1;
551}
#define endmsg
#define MYLEVEL
uint16_t getFirstSampleIndex() const
const uint16_t * m_DigitsPointer
const uint32_t * m_GainPointer
uint32_t RawToOfflineGain(const uint32_t gain) const
IMessageSvc * getMessageSvc(bool quiet=false)

◆ getNextEnergy()

int LArRodBlockPhysicsV6::getNextEnergy ( int & channelNumber,
int32_t & energy,
int32_t & time,
int32_t & quality,
uint32_t & gain )
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 195 of file LArRodBlockPhysicsV6.h.

196{
197 #ifdef LARBSDBGOUTPUT
198 MsgStream logstr(Athena::getMessageSvc(), BlockType());
199 #endif
200
201 LARBSDBG("in LArRodBlockPhysicsV6::getNextEnergy.");
202 LARBSDBG("m_channelsPerFEB=" << m_channelsPerFEB);
203 if (m_EnergyIndex>=m_channelsPerFEB) // Already beyond maximal number of channels
204 return 0;
205 if (!m_EnergyPointer) // No data block present
206 return 0;
207
208 unsigned rodChannelNumber=m_EnergyIndex; // Index of Channel in ROD-Block
209 channelNumber=((rodChannelNumber&0xe)<<2) + ((rodChannelNumber&0x1)<<6) + (rodChannelNumber>>4); //channel number of the FEB
210 //channelNumber=(rodChannelNumber>>4) + ((rodChannelNumber&0xf)<<3); //channel number of the FEB
211
212// if(channelNumber==0) {
213// int size = getNumberOfWords();
214// int off1 = getHeader16(ResultsOff1)-8;
215// int dim1 = getHeader16(ResultsDim1);
216// int off2 = getHeader16(ResultsOff2)-8;
217// int dim2 = getHeader16(ResultsDim2);
218// int off3 = getHeader16(RawDataBlkOff)-8;
219// int dim3 = getHeader16(RawDataBlkDim);
220//
221// for(int i=0;i<size;i++) {
222// if(i==0)
223// std::cout << std::hex << i << " : NWTot " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
224// else if(i==1)
225// std::cout << std::hex << i << " : FEBid " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
226// else if(i==2)
227// std::cout << std::hex << i << " : FEBsn " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
228// else if(i==3)
229// std::cout << std::hex << i << " : Block1 " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
230// else if(i==4)
231// std::cout << std::hex << i << " : Block2 " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
232// else if(i==5)
233// std::cout << std::hex << i << " : Block3 " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
234// else if(i==6)
235// std::cout << std::hex << i << " : Status " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
236// else if(i==7)
237// std::cout << std::hex << i << " : Gain/Sample " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
238// else if(i==8)
239// std::cout << std::hex << i << " : 1st/FebConf " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
240// else if(i==9)
241// std::cout << std::hex << i << " : InFPGA " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
242// else if (i>=off1 && i<off1+dim1)
243// std::cout << std::hex << i << " : results1 " << i-off1 << " " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
244// else if (i>=off2 && i<off2+dim2)
245// std::cout << std::hex << i << " : results2 " << i-off2 << " " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
246// else if (i>=off3 && i<off3+dim3)
247// std::cout << std::hex << i << " : raw data " << i-off3 << " " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
248// else
249// std::cout << std::hex << i << " " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
250// }
251// }
252
253 // get information available for all cells
254 // Energy on a 16 bit word and decode ranges
255 uint16_t encodedEnergy; // 16 bits Encoded Energy word
256 int32_t aux;
257 uint16_t range; // 2 bits range
259
260 LARBSDBG("-------->>>> in LArRodBlockPhysicsV6::getNextEnergy : decode energy.....");
261 // decode energy
262 if(m_EnergyIndex & 0x1) encodedEnergy = m_EnergyPointer[m_EnergyIndex-1]; // Big/Little Endien stuff
263 else encodedEnergy = m_EnergyPointer[m_EnergyIndex+1]; // Big/Little Endien stuff
264
265 aux = (int32_t) (encodedEnergy&0x1fff);
266 range = (encodedEnergy & 0xc000) >> 14;
267 if(aux==0 && range>0) aux=0x2000;
268 sign = encodedEnergy & 0x2000;
269 aux <<= 3*range;
270 if(sign) aux = -aux;
271 energy = aux;
272
273 // gain in 2 bits of a 32 bits word
274 if(m_GainPointer) {
275 gain = (uint32_t) ((m_GainPointer[m_EnergyIndex>>4] >> ((m_EnergyIndex&0xf)<<1)) & 0x3);
277 } else gain=0xffffffff;
278
279 // Get Time and Quality if the information is present according to summary block
280 uint32_t hasTQ;
282 hasTQ = (uint32_t) ((m_MaskTimeQualityPointer[m_EnergyIndex>>5] >> (m_EnergyIndex&0x1f)) &0x1);
283 else
284 hasTQ = 0;
286 if (m_TimeQualityPointer && hasTQ) // Data has Time and Quality information
287 {
288 //Time is in 10 ps in ByteStream, hence the factor 10 to convert to ps
289 time = 10*(reinterpret_cast<const int16_t *>(m_TimeQualityPointer))[m_TimeQualityIndex++];
291
292#ifdef LARBSDBGOUTPUT
293 logstr << MYLEVEL <<"This cell has time and Quality information "<<endmsg;
294#endif
295 }
296 else // Data has no Time and Quality information
297 {
298 time=0;
299 quality=-1;
300 }
301
302
303#ifdef LARBSDBGOUTPUT
304 logstr << MYLEVEL <<"Range = "<<range<<endmsg;
305 logstr << MYLEVEL <<"Sign = "<<sign<<endmsg;
306 logstr << MYLEVEL <<" Encoded Energy ="<< MSG::hex << encodedEnergy << MSG::dec << " E=" << energy
307 << " t=" << time
308 << " Q=" << quality
309 << " G=" << gain
310 << " channel Number=" << channelNumber
311 << endmsg;
312#endif
313
314 return 1;
315}
#define LARBSDBG(text)
This class provides decoding/encoding from/to ROD format.
int sign(int a)
const uint16_t * m_EnergyPointer
const uint16_t * m_TimeQualityPointer
time(flags, cells_name, *args, **kw)
setScaleOne setStatusOne setSaturated int16_t

◆ getNextRawData()

int LArRodBlockPhysicsV6::getNextRawData ( int & channelNumber,
std::vector< short > & samples,
uint32_t & gain )
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 299 of file LArRodBlockPhysicsV6.cxx.

300{
301#ifdef LARBSDBGOUTPUT
302 MsgStream logstr(Athena::getMessageSvc(), BlockType());
303 //Debug output
304 logstr << MYLEVEL << "Let s go in getNextRawData..." << endmsg;
305 logstr << MYLEVEL << "GetNextRawData for FEB 0x" << MSG::hex << (uint32_t)getHeader32(FEBID) << MSG::dec << endmsg;
306 logstr << MYLEVEL << "m_RawDataPointer=" << m_RawDataPointer << " m_RawDataIndex="<< m_RawDataIndex
307 << " m_channelsPerFEB=" << m_channelsPerFEB << endmsg;
308#endif
309
310 if (m_RawDataIndex>=m_channelsPerFEB) { //Already beyond maximal number of channels
311#ifdef LARBSDBGOUTPUT
312 logstr << MYLEVEL << "Maximum number of channels reached" << endmsg;
313#endif
314 return 0;
315 }
316 //const uint16_t block = getHeader16(m_RawDataOff);//Position of the raw FEB data block
317 if (!m_RawDataPointer) { //Block does not exist
318 // Try to get samples and gain from getNextDigits
319 return getNextDigits(channelNumber,samples,gain);
320 }
321
322 // Get next channel
323 unsigned rodChannelNumber=m_RawDataIndex; // Index of Channel in ROD-Block
324 channelNumber=((rodChannelNumber&0xe)<<2) + ((rodChannelNumber&0x1)<<6) + (rodChannelNumber>>4); //channel number of the FEB
325 //channelNumber=(rodChannelNumber>>4) + ((rodChannelNumber&0xf)<<3); //channel number of the FEB
326 uint32_t febgain;
327 const unsigned int nsamples = getHeader16(NSamples) & 0xff;
328 const unsigned int ngains = getHeader16(NGains);
329
330#ifdef LARBSDBGOUTPUT
331 logstr << MYLEVEL << "This FEB has " << nsamples << " samples" << endmsg;
332 logstr << MYLEVEL << "This FEB has " << ngains << " gains" << endmsg;
333#endif
334
335 if(ngains==0 || nsamples==0) return 0;
336 int s_size = nsamples+1;
337 int offset = (10+nsamples)&0xfffc;
338 int index;
339 index = s_size*m_RawDataIndex + offset;
340 uint16_t s[2];
341 //for(unsigned int i=0;i<nsamples+1;i++) {
342 // if(m_RawDataPointer[index+i]>>14) {
343 // std::cout << "Trying to decode strange raw data value: " << std::hex << m_RawDataPointer[index+i] << std::dec << std::endl;
344 // }
345 //}
346 if((nsamples+1)&0x7) {
347 s[0] = m_RawDataPointer[index++]>>2;
348 febgain = m_RawDataPointer[index++];
349 samples.push_back(s[0]);
350 for(unsigned int i=0;i<nsamples/2;i++) {
351 s[1] = m_RawDataPointer[index++]>>2;
352 s[0] = m_RawDataPointer[index++]>>2;
353 samples.push_back(s[0]);
354 samples.push_back(s[1]);
355 }
356 } // End of check for 5 samples
357 else {
358 if (!(m_RawDataIndex%2)) {
359 s[0] = m_RawDataPointer[index++]>>2;
360 febgain = m_RawDataPointer[index++];
361 samples.push_back(s[0]);
362 for(unsigned int i=0;i<nsamples/2;i++) {
363 s[1] = m_RawDataPointer[index++]>>2;
364 s[0] = m_RawDataPointer[index++]>>2;
365 samples.push_back(s[0]);
366 samples.push_back(s[1]);
367 }
368 } else {
369 for(unsigned int i=0;i<nsamples/2;i++) {
370 s[1] = m_RawDataPointer[index++]>>2;
371 s[0] = m_RawDataPointer[index++]>>2;
372 samples.push_back(s[0]);
373 samples.push_back(s[1]);
374 }
375 febgain = m_RawDataPointer[index++];
376 s[0] = m_RawDataPointer[index++]>>2;
377 samples.push_back(s[0]);
378 }
379 } // End of >5 check
380 gain=RawToOfflineGain(febgain);
381
382#ifdef LARBSDBGOUTPUT
383 logstr << MYLEVEL << " ===> ROD Channel = " << m_RawDataIndex << endmsg;
384 logstr << MYLEVEL << " ===> FEB Channel = " << channelNumber << endmsg;
385 logstr << MYLEVEL << " ===> Gain = " << gain << endmsg;
386 for(int i=0;i<nsamples;i++)
387 logstr << MYLEVEL << " ===> sample " << i << " = " << samples[i] << endmsg;
388 int n = m_RawDataIndex;
389 int32_t e,t,q;
390 uint32_t g;
392#endif
393 //std::cout << "Gain= " << gain << " Febgain=" << febgain << std::endl;
395 unsigned rearrangeFirstSample=0;
397 rearrangeFirstSample=m_rearrangeFirstSample; //Overwrite by jobOptions
398 else
399 rearrangeFirstSample=getFirstSampleIndex();
400 //std::cout << "FebConfig: "<< getFebConfig() << " FirstSampleIndex " << rearrangeFirstSample <<std::endl;
401 if (rearrangeFirstSample && rearrangeFirstSample<samples.size()) //FIXME: Very ugly hack! See explanation in LArRodDecoder.h file
402 {//Change e.g. 3 0 1 2 4 to 0 1 2 3 4
403 short movedSample=samples[0];
404 for (unsigned i=1;i<=rearrangeFirstSample;i++)
405 samples[i-1]=samples[i];
406 samples[rearrangeFirstSample]=movedSample;
407 }
408#ifdef LARBSDBGOUTPUT
409 logstr << MYLEVEL << "GetNextRawData for FEB finished 0x" << MSG::hex << (uint32_t)getHeader32(FEBID) << MSG::dec << endmsg;
410#endif
411 return 1;
412}
int getNextDigits(int &channelNumber, std::vector< short > &samples, uint32_t &gain)
virtual int getNextEnergy(int &channelNumber, int32_t &energy, int32_t &time, int32_t &quality, uint32_t &gain)

◆ getNStep()

uint16_t LArRodBlockStructure::getNStep ( ) const
inlinevirtualinherited

Reimplemented in LArRodBlockAccumulatedV3, and LArRodBlockCalibrationV3.

Definition at line 491 of file LArRodBlockStructure.h.

492{
493 std::cout << "Error: Function getNStep not implemented in this instance of LArRodBlockStructure!\n";
494 return 0;
495}

◆ getNTrigger()

uint16_t LArRodBlockStructure::getNTrigger ( ) const
inlinevirtualinherited

Reimplemented in LArRodBlockAccumulatedV3, LArRodBlockCalibrationV1, LArRodBlockCalibrationV2, and LArRodBlockCalibrationV3.

Definition at line 480 of file LArRodBlockStructure.h.

481{
482 std::cout << "Error: Function getNTrigger not implemented in this instance of LArRodBlockStructure!\n";
483 return 0;
484}

◆ getNumberOfGains()

uint32_t LArRodBlockPhysicsV6::getNumberOfGains ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 590 of file LArRodBlockPhysicsV6.cxx.

591{
592 return getHeader16(NGains);
593}

◆ getNumberOfSamples()

uint32_t LArRodBlockPhysicsV6::getNumberOfSamples ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 585 of file LArRodBlockPhysicsV6.cxx.

586{
587 return getHeader16(NSamples);
588}

◆ getNumberOfWords()

uint32_t LArRodBlockStructure::getNumberOfWords ( ) const
inlineinherited

Definition at line 428 of file LArRodBlockStructure.h.

429{
430 return getHeader32(NWTot);
431}

◆ getPulsed()

bool LArRodBlockStructure::getPulsed ( unsigned channelNumber) const
inlinevirtualinherited

Reimplemented in LArRodBlockCalibrationV0< DSPHEADER >, LArRodBlockCalibrationV1, LArRodBlockCalibrationV2, and LArRodBlockCalibrationV3.

Definition at line 462 of file LArRodBlockStructure.h.

463{
464 std::cout << "Error: Function getPulsed not implemented in this instance of LArRodBlockStructure!\n";
465 return 0;
466}

◆ getRadd()

uint32_t LArRodBlockPhysicsV6::getRadd ( uint32_t adc,
uint32_t sample ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 610 of file LArRodBlockPhysicsV6.cxx.

611{
612 if(!m_RawDataPointer) {
613 if(!m_RaddPointer) return 0;
614 if(sample%2) sample+=2;
615 return m_RaddPointer[sample];
616 }
617 int index;
618 if(sample==0) index=6;
619 else if(sample & 0x1) index=7+sample-1;
620 else index=7+sample+1;
622 if(adc>=8) return x>>8;
623 return x&0xff;
624}

◆ getRawDataSize()

uint16_t LArRodBlockPhysicsV6::getRawDataSize ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 605 of file LArRodBlockPhysicsV6.cxx.

606{
608}

◆ getResults1Size()

uint16_t LArRodBlockPhysicsV6::getResults1Size ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 595 of file LArRodBlockPhysicsV6.cxx.

596{
597 return getHeader16(ResultsDim1);
598}

◆ getResults2Size()

uint16_t LArRodBlockPhysicsV6::getResults2Size ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 600 of file LArRodBlockPhysicsV6.cxx.

601{
602 return getHeader16(ResultsDim2);
603}

◆ getStatus()

uint32_t LArRodBlockPhysicsV6::getStatus ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 650 of file LArRodBlockPhysicsV6.cxx.

651{
652 if(getNumberOfWords()<EventStatus/2) return 0;
654 return x;
655}

◆ getStepIndex()

uint16_t LArRodBlockStructure::getStepIndex ( ) const
inlinevirtualinherited

Reimplemented in LArRodBlockAccumulatedV3, and LArRodBlockCalibrationV3.

Definition at line 486 of file LArRodBlockStructure.h.

487{
488 std::cout << "Error: Function getStepIndex not implemented in this instance of LArRodBlockStructure!\n";
489 return 0;
490}

◆ getSumE()

int32_t LArRodBlockPhysicsV6::getSumE ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 334 of file LArRodBlockPhysicsV6.h.

335{
336 if(m_SumPointer) return (m_SumPointer[3]>>9);
337 return 0;
338}

◆ getTDCPhase()

uint8_t LArRodBlockStructure::getTDCPhase ( ) const
virtualinherited

Reimplemented in LArRodBlockAccumulatedV3, LArRodBlockCalibrationV1, LArRodBlockCalibrationV2, LArRodBlockCalibrationV3, and LArRodBlockTransparentV0< DSPHEADER >.

Definition at line 149 of file LArRodBlockStructure.cxx.

150{
151 std::cout << "Error: Function getTDCPhase not implemented in this instance of LArRodBlockStructure!\n";
152 return 0;
153}

◆ getVectorHeader16()

uint16_t LArRodBlockStructure::getVectorHeader16 ( const unsigned n) const
inlineprotectedinherited

Definition at line 368 of file LArRodBlockStructure.h.

369{ if (n&0x1) //n is a odd number
370 return (std::as_const(*m_vFragment).at(n>>1) & 0xffff);
371 else //n is a even number
372 return (std::as_const(*m_vFragment).at(n>>1) >> 16);
373}

◆ getVectorHeader32()

uint32_t LArRodBlockStructure::getVectorHeader32 ( const unsigned n) const
inlineprotectedinherited

Definition at line 375 of file LArRodBlockStructure.h.

376{
377 return (*m_vFragment)[n>>1];
378}

◆ getVROBEx()

int32_t LArRodBlockPhysicsV6::getVROBEx ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 351 of file LArRodBlockPhysicsV6.h.

352{
353 const int32_t* p = reinterpret_cast<const int32_t*>(m_virtualROBPointerLocal);
354 if(p) return (p[1]>>9);
355 return 0;
356}
const uint32_t * m_virtualROBPointerLocal

◆ getVROBEy()

int32_t LArRodBlockPhysicsV6::getVROBEy ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 358 of file LArRodBlockPhysicsV6.h.

359{
360 const int32_t* p = reinterpret_cast<const int32_t*>(m_virtualROBPointerLocal);
361 if(p) return (p[2]>>9);
362 return 0;
363}

◆ getVROBEz()

int32_t LArRodBlockPhysicsV6::getVROBEz ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 365 of file LArRodBlockPhysicsV6.h.

366{
367 const int32_t* p = reinterpret_cast<const int32_t*>(m_virtualROBPointerLocal);
368 if(p) return (p[3]>>9);
369 return 0;
370}

◆ getVROBFebId()

uint32_t LArRodBlockPhysicsV6::getVROBFebId ( )
inlinevirtual

◆ getVROBSumE()

int32_t LArRodBlockPhysicsV6::getVROBSumE ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 372 of file LArRodBlockPhysicsV6.h.

373{
374 const int32_t* p = reinterpret_cast<const int32_t*>(m_virtualROBPointerLocal);
375 if(p) return (p[4]>>9);
376 return 0;
377}

◆ hasAccumBlock()

virtual uint32_t LArRodBlockStructure::hasAccumBlock ( ) const
inlinevirtualinherited

Reimplemented in LArRodBlockAccumulatedV3.

Definition at line 123 of file LArRodBlockStructure.h.

123{return 0;} ;

◆ hasCalibBlock()

virtual uint32_t LArRodBlockPhysicsV6::hasCalibBlock ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 87 of file LArRodBlockPhysicsV6.h.

87{return 0;} ;

◆ hasControlWords()

virtual uint32_t LArRodBlockPhysicsV6::hasControlWords ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 90 of file LArRodBlockPhysicsV6.h.

90{return getHeader16(RawDataBlkOff);} ;

◆ hasPhysicsBlock()

virtual uint32_t LArRodBlockPhysicsV6::hasPhysicsBlock ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 88 of file LArRodBlockPhysicsV6.h.

88{return getHeader16(ResultsOff1);} ;

◆ hasRawDataBlock()

virtual uint32_t LArRodBlockPhysicsV6::hasRawDataBlock ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 89 of file LArRodBlockPhysicsV6.h.

◆ initializeFEB()

void LArRodBlockPhysicsV6::initializeFEB ( const uint32_t id)
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 711 of file LArRodBlockPhysicsV6.cxx.

712{
714 if (m_vFragment->size()<m_iHeadBlockSize) //Got empty or spoiled fragment
715 {
716 m_vFragment->resize(m_iHeadBlockSize,0); //Initialize FEB-Header
717 setHeader32(FEBID,id); //Set Feb ID
718 // At least 10 (head) + 16 (gain/sumblks) + 64 (energies)
719 m_vFragment->reserve(90);
720 }
721
722 m_SumBlkBlockE1.resize(4);
723 for(unsigned int i=0;i<4;i++) m_SumBlkBlockE1[i]=0x0;
724 m_SumBlkBlockE2.resize(4);
725 for(unsigned int i=0;i<4;i++) m_SumBlkBlockE2[i]=0x0;
726 m_GainBlock.resize(8);
727 for(unsigned int i=0;i<8;i++) m_GainBlock[i]=0x0;
728// m_RawDataBlock.resize(0);
729 m_TimeQualityBlock.resize(8);
730 for(unsigned int i=0;i<8;i++) m_TimeQualityBlock[i]=0x0;
731 m_EnergyBlockEncode.resize(128);
732 for(unsigned int i=0;i<128;i++) m_EnergyBlockEncode[i]=0x0;
733 m_DigitsEncode.clear();
734
736
737}

◆ initializeFragment()

void LArRodBlockPhysicsV6::initializeFragment ( std::vector< uint32_t > & fragment)
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 684 of file LArRodBlockPhysicsV6.cxx.

684 {
685 m_pRODblock=&fragment; //remember pointer to fragment
686 if (fragment.size()>m_iHeadBlockSize) { //Got filled fragment
687 unsigned int sizeRead=0;
688 //Store existing data in the FEB-Map
689 while (sizeRead<fragment.size()) {
690 std::vector<uint32_t>::iterator FebIter;
691 FebIter=fragment.begin()+sizeRead; //Store pointer to current Feb-Header
692 m_FebBlock=&(*FebIter); //Set m_FebBlock in order to use getHeader-functions.
693 uint32_t currFEBid=getHeader32(FEBID); //Get this FEB-ID
694 uint16_t currFebSize=getNumberOfWords(); //Size of this FEB-Block
695 if (FebIter+currFebSize>fragment.end()) {
696 fragment.clear(); //Clear existing vector
697 //*m_logstr << MSG::ERROR << "Got inconsistent ROD-Fragment!" << endmsg;
698 return;
699 }
700 m_mFebBlocks[currFEBid].assign(FebIter,FebIter+currFebSize); //Copy data from ROD-fragment into FEB-Block
701 sizeRead+=currFebSize+m_MiddleHeaderSize; //6 is the middle header size
702 //LARBSDBG("Found FEB-id " << currFEBid << " in existing ROD-Fragment");
703 } // end while
704 }
705 fragment.clear(); //Clear existing vector
706 return;
707
708}

◆ LE_getHeader16()

uint16_t LArRodBlockStructure::LE_getHeader16 ( const unsigned n) const
inlineprotectedinherited

Definition at line 405 of file LArRodBlockStructure.h.

406{
407 return (reinterpret_cast<const uint16_t*>(m_FebBlock))[n];
408}

◆ LE_getVectorHeader16()

uint16_t LArRodBlockStructure::LE_getVectorHeader16 ( const unsigned n) const
inlineprotectedinherited

Definition at line 410 of file LArRodBlockStructure.h.

411{
412 const uint32_t* data32 = std::as_const(*m_vFragment).data();
413 const uint16_t* data16 = reinterpret_cast<const uint16_t*> (data32);
414 return data16[n];
415}

◆ LE_setHeader16()

void LArRodBlockStructure::LE_setHeader16 ( const unsigned n,
const uint16_t w )
inlineprotectedinherited

Definition at line 417 of file LArRodBlockStructure.h.

418{
419#ifdef LARBYTESTREAMRODBLOCK_CHCKBOUNDARIES
420 if ((unsigned)n>=m_vFragment->size()*2) {
421 std::cout << "LArRodBlockStructure::LE_setHeader16 Error: WRITE BEYOND ARRAY BONDARY!" << std::endl;
422 std::abort();
423 }
424#endif
425 reinterpret_cast<uint16_t*>(m_vFragment->data())[n] = w;
426}

◆ nextFEB()

bool LArRodBlockStructure::nextFEB ( )
inlineinherited

Definition at line 497 of file LArRodBlockStructure.h.

498{
500
501 const int32_t FebOffset = m_FebBlockSize+m_MiddleHeaderSize;
502 const int32_t LeftSize = m_RodBlockSize-FebOffset+m_RodBlock-m_FebBlock;
503 if ( LeftSize<=0 ) return false; //No next feb
504
505 m_FebBlock += FebOffset; //Jump to the next FEB fragment
506 const int32_t BlockSize = getNumberOfWords();
507 //std::cout << "LeftSize=" << LeftSize << " BlockSize=" << BlockSize << std::endl;
508 if (BlockSize>LeftSize) {
509 std::cout << "Error while decoding LArByteStream: Found FEB block of size " << BlockSize << " in a ROD block of size " << LeftSize << std::endl;
510 m_error_next_feb = true;
511 return false;
512 }
513 //std::cout << "Second FEB ok, size= " << LeftSize <<std::endl;
514
515 //m_FebBlockSize = LeftSize; //should be =BlockSize;
516 m_FebBlockSize=BlockSize;
517
518 //std::cout << "2: FEB found with size " << m_FebBlockSize << std::endl;
519 setPointers();
520 return true;
521}

◆ offlineCheckSum()

uint32_t LArRodBlockStructure::offlineCheckSum ( ) const
virtualinherited

Reimplemented in LArRodBlockPhysicsV4.

Definition at line 163 of file LArRodBlockStructure.cxx.

164{
165 int end = getNumberOfWords()-3;
166 int start = 1;
167 uint32_t sum = 0;
169 for(int i=start;i<end;i++) {
170 sum += m_FebBlock[i];
171 }
172 return sum & 0x7fffffff;
173}

◆ OfflineToRawGain()

uint32_t LArRodBlockStructure::OfflineToRawGain ( const uint32_t gain) const
inlineinherited

Definition at line 352 of file LArRodBlockStructure.h.

353{return m_OfflineToRawGainMap[gain];} //For efficency, don't check range
static const uint32_t m_OfflineToRawGainMap[3]

◆ onlineCheckSum()

uint32_t LArRodBlockStructure::onlineCheckSum ( ) const
virtualinherited

Reimplemented in LArRodBlockPhysicsV4.

Definition at line 155 of file LArRodBlockStructure.cxx.

156{
157 int offset = getNumberOfWords()-1;
158 if(offset>=m_FebBlockSize) return 0;
159 if(offset<0) return 0;
160 return m_FebBlock[offset];
161}

◆ operator()()

template<class RAWDATA>
bool LArRodBlockPhysicsV6::operator() ( const RAWDATA * ch1,
const RAWDATA * ch2 ) const

Definition at line 1033 of file LArRodBlockPhysicsV6.cxx.

1035{
1036 HWIdentifier id1 = ch1->channelID();
1037 HWIdentifier id2 = ch2->channelID();
1038
1039 HWIdentifier febId1= m_onlineHelper->feb_Id(id1);
1040 HWIdentifier febId2= m_onlineHelper->feb_Id(id2);
1041
1042 if(febId1 == febId2 ){
1043 int cId1 = m_onlineHelper->channel(id1);
1044 int cId2 = m_onlineHelper->channel(id2);
1045 return FebToRodChannel(cId1) < FebToRodChannel(cId2);
1046 }
1047
1048 return febId1 < febId2 ;
1049}
HWIdentifier febId1
HWIdentifier febId2
HWIdentifier id2
virtual int FebToRodChannel(int ch) const

◆ RawToOfflineGain()

uint32_t LArRodBlockStructure::RawToOfflineGain ( const uint32_t gain) const
inlineinherited

Definition at line 349 of file LArRodBlockStructure.h.

350{return m_RawToOfflineGainMap[gain];} //For efficency, don't check range
static const uint32_t m_RawToOfflineGainMap[4]

◆ report_error()

bool LArRodBlockStructure::report_error ( void ) const
inlineinherited

Definition at line 177 of file LArRodBlockStructure.h.

177{ return m_error_next_feb;}

◆ resetPointers()

void LArRodBlockPhysicsV6::resetPointers ( )
privatevirtual

◆ setBit()

void LArRodBlockStructure::setBit ( uint32_t *const p,
const unsigned chan )
inlineprotectedinherited

Definition at line 444 of file LArRodBlockStructure.h.

445{
446 // chan = (0,127)
447 // int a = chan/32;
448 // int r = chan%32;
449 int a = chan>>5;
450 int r = chan&0x1f;
451 // a = (0,3), r = ( 0, 31 )
452 *(p+a) |= (1<<r) ;
453 return;
454}

◆ setDAC()

void LArRodBlockStructure::setDAC ( const uint16_t DACValue)
virtualinherited

Reimplemented in LArRodBlockCalibrationV0< DSPHEADER >.

Definition at line 57 of file LArRodBlockStructure.cxx.

58{
59 std::cout << "Error: Function setDAC not implemented in this instance of LArRodBlockStructure!\n";
60 return;
61}

◆ setDelay()

void LArRodBlockStructure::setDelay ( const uint16_t DelayValue)
virtualinherited

Reimplemented in LArRodBlockCalibrationV0< DSPHEADER >.

Definition at line 63 of file LArRodBlockStructure.cxx.

64{
65 std::cout << "Error: Function setDelay not implemented in this instance of LArRodBlockStructure!\n";
66 return;
67}

◆ setE()

void LArRodBlockPhysicsV6::setE ( unsigned int index,
double E )
inlineprivate

Definition at line 385 of file LArRodBlockPhysicsV6.h.

385 {
386
387 union {
388 int32_t i;
389 uint16_t us[2];
390 } conv;
391 conv.i = static_cast<int32_t>(E);
392 // Write as multiplication, not as left shift, since left-shifting
393 // a negative number is undefined in C++.
394 // Compiles to the same code on x86_64.
395 conv.i *= (1<<9);
396 if ( m_TimeQualityBlock.size()>=8 ){
399 }
400}

◆ setEtQ()

void LArRodBlockStructure::setEtQ ( const int channel,
const int32_t energy,
const int32_t time,
const int32_t quality,
const uint32_t gain )
virtualinherited

Definition at line 120 of file LArRodBlockStructure.cxx.

121{
122 std::cout << "Error: Function setEtQ not implemented in this instance of LArRodBlockStructure!\n";
123 return;
124}

◆ setEx()

void LArRodBlockPhysicsV6::setEx ( double Ex)
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 403 of file LArRodBlockPhysicsV6.h.

403 {
404 setE (0, Ex);
405}
void setE(unsigned int index, double E)

◆ setEy()

void LArRodBlockPhysicsV6::setEy ( double Ey)
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 408 of file LArRodBlockPhysicsV6.h.

408 {
409 setE (2, Ey);
410}

◆ setEz()

void LArRodBlockPhysicsV6::setEz ( double Ez)
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 413 of file LArRodBlockPhysicsV6.h.

413 {
414 setE (4, Ez);
415}

◆ setFirstSample()

void LArRodBlockStructure::setFirstSample ( const int rearrangeFirstSample)
inlineinherited

Definition at line 168 of file LArRodBlockStructure.h.

169 {m_rearrangeFirstSample=rearrangeFirstSample;}

◆ setFragment()

bool LArRodBlockStructure::setFragment ( const uint32_t * p,
uint32_t n )
inlineinherited

Definition at line 252 of file LArRodBlockStructure.h.

253{
255 m_FebBlock = p;
258 uint32_t BlockSize = 0;
259
260 if (n==0) {
261 std::cout << "Error while decoding LArByteStream: Got Rod block size 0" << std::endl;
262 return false;
263 }
264
265 BlockSize = getNumberOfWords();
266 if (BlockSize>n) {
267 std::cout << "Error while decoding LArByteStream: Found FEB block of size " << BlockSize << " in a ROD block of size " << n << std::endl;
268 return false;
269 }
270 m_FebBlockSize = BlockSize;
271
272 m_error_next_feb = false;
273 //std::cout << "1: FEB found with size " << m_FebBlockSize << std::endl;
274
275 return setPointers();
276}

◆ setFragmentVirtualROB()

int LArRodBlockStructure::setFragmentVirtualROB ( const uint32_t * p,
uint32_t n )
inlinevirtualinherited

Definition at line 280 of file LArRodBlockStructure.h.

281 {
286 if ( n<2 ) { std::cout << "Error" << std::endl; return 0;}
287 m_virtualROBJump = ((*p)>>16)>>1; // Divide by two (two FEBs-1ROB)
288 m_ROB_to_decode = ( (*p) & 0xFFFF )<<1; // Multiply by two
289 if ( (n - m_virtualROBJump*m_ROB_to_decode-1) ){
290 std::cout << "Error AGAIN" << std::endl;
291 return 0;
292 }
294 return m_ROB_to_decode;
295}

◆ setGain()

virtual int LArRodBlockPhysicsV6::setGain ( const int )
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 104 of file LArRodBlockPhysicsV6.h.

104{ return 1; };

◆ setHeader16()

void LArRodBlockStructure::setHeader16 ( const unsigned n,
const uint16_t w )
inlineprotectedinherited

Definition at line 380 of file LArRodBlockStructure.h.

381{
382#ifdef LARBYTESTREAMRODBLOCK_CHCKBOUNDARIES
383 if ((unsigned)n>=m_vFragment->size()*2) {
384 std::cout << "Error WRITE BEYOND ARRAY BONDARY!" << std::endl;
385 std::abort();
386 }
387#endif
388 if (n&0x1) // n is a odd number
389 m_vFragment->at(n>>1)=((m_vFragment->at(n>>1) & 0xffff0000) | w);
390 else
391 m_vFragment->at(n>>1)=((m_vFragment->at(n>>1) & 0xffff) | (w << 16));
392}

◆ setHeader32()

void LArRodBlockStructure::setHeader32 ( const unsigned n,
const uint32_t w )
inlineprotectedinherited

Definition at line 394 of file LArRodBlockStructure.h.

395{
396#ifdef LARBYTESTREAMRODBLOCK_CHCKBOUNDARIES
397 if ((unsigned)n>=m_vFragment->size()*2) {
398 std::cout << "Error WRITE BEYOND ARRAY BONDARY!" << std::endl;
399 std::abort();
400 }
401#endif
402 m_vFragment->at(n>>1) = w;
403}

◆ setNextEnergy() [1/2]

void LArRodBlockPhysicsV6::setNextEnergy ( const int channel,
const int32_t energy,
const int32_t time,
const int32_t quality,
const uint32_t gain )
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 739 of file LArRodBlockPhysicsV6.cxx.

741{
742 //LARBSDBG("setNextEnergy-------------------->>>>>********************** format V4 ***********");
743 //LARBSDBG("Channel=" << channel << " energy =" << energy);
744 int rcNb=FebToRodChannel(channel);
745 //int rcNb=(channel);
746 //rcNb ist supposed to equal or bigger than m_EIndex.
747 //In the latter case, we fill up the missing channels with zero
748 if (rcNb<m_EnergyIndex) {
749 //*m_logstr << MSG::ERROR << "LArRODBlockStructure Error: Internal error. Channels not ordered correctly. rcNb=" << rcNb
750 // << " m_EnergyIndex=" << m_EnergyIndex << endmsg;
751 return;
752 }
753
754 //Fill up missing channels with zeros:
755 while (m_EnergyIndex<rcNb)
756 setNextEnergy((int16_t)0,(int16_t)32767,(int16_t)-32767,(uint32_t)0);
757
758 // transform 32 bits data into 16 bits data
759
760 uint16_t theenergy;
761 uint32_t abse,EncodedE;
762 int16_t thetime,thequality;
763 int32_t sign;
764
765 //Time is in 10 ps in ByteStream, hence the factor 10 to convert from ps
766 thetime = (int16_t) time/10;
767 thequality = (int16_t) quality;
768
769 sign=(energy>=0?1:-1); // get sign of energy
770 abse=(uint32_t)abs(energy);
771
772 EncodedE=abse; // range 0
773
774 if ((abse>8192)&&(abse<65536))
775 {
776 EncodedE=((abse>>3)|0x4000); // range 1 : drop last 3 bits and put range bits (bits 14 and 13 = 01)
777 }
778 else if ((abse>65535)&&(abse<524288))
779 {
780 EncodedE=((abse>>6)|0x8000); // range 2 : drop last 6 bits and put range bits (bits 14 and 13 = 10)
781 }
782 else if ((abse>524288))
783 {
784 EncodedE=((abse>>9)|0xc000); // range 3 : drop last 9 bits and put range bits (bits 14 and 13 = 11)
785 }
786
787 // treat sign now :
788
789 if (sign<0) EncodedE |= 0x2000;
790 theenergy = (uint16_t) EncodedE;
791
792
793 // Add data...
794
795 //LARBSDBG("setNextEnergy-------------------->>>>> Energy = "<< energy << " Encoded Energy =" << theenergy);
796
797 if (abse> m_EnergyThreshold1)
798 {
799 setNextEnergy(theenergy,thetime,thequality,gain);
800 }
801 else
802 {
803 setNextEnergy(theenergy,(int16_t)32767,(int16_t)-32767,gain);
804 }
805 return;
806}

◆ setNextEnergy() [2/2]

void LArRodBlockPhysicsV6::setNextEnergy ( const uint16_t energy,
const int16_t time,
const int16_t quality,
const uint32_t gain )
private

Definition at line 809 of file LArRodBlockPhysicsV6.cxx.

810{
811 if (m_EnergyIndex>=m_channelsPerFEB) //Use m_EIndex to count total number of channels
812 {//*m_logstr << MSG::ERROR << "LArRodBlockStructure Error: Attempt to write Energy for channel "
813 // << m_EnergyIndex << " channels into a FEB!" <<endmsg;
814 return;
815 }
816 //LARBSDBG("LArRodBlockStructure: Setting Energy for channel " << m_EnergyIndex << ". E=" << energy);
817
818 //LARBSDBG("In setNextEnergy-------------------->>>>> time = " << time << " quality=" << quality);
819
820 // Energy
821 int endianindex;
822 if (m_EnergyIndex & 0x1) endianindex = m_EnergyIndex-1;
823 else endianindex = m_EnergyIndex+1;
824 m_EnergyBlockEncode[endianindex] = energy;
825
826 // Find correct position
827
828 //LARBSDBG("Writing Raw data to E block. E=" << energy);
829
830 // update summary block
831 // Gain is composed of two bits per cell
832 uint16_t gain_idx=m_EnergyIndex>>4;
833 uint16_t gain_bit=(m_EnergyIndex&0xf)*2;
835 m_GainBlock[gain_idx] |= (gain1 << gain_bit);
836
837 // write Time and Chi2 for cells above HighEnergyCellCut threshold
838
839 if (quality!=-32767) // Do write Time and Chi2 information
840 {
841 // count the number of hot cells
843 // count the number of cells offtime
844 if (abs(time)>m_OffTimeCut) m_numberHotCellOffTime++;
845 uint16_t mask_idx=m_EnergyIndex>>5;
846 uint16_t mask_bit=(m_EnergyIndex&0x1f);
847 m_SumBlkBlockE1[mask_idx] |= (0x1 << mask_bit);
848
849 m_TimeQualityBlock.push_back(*((uint16_t*)&time));
850 m_TimeQualityBlock.push_back(*((uint16_t*)&quality));
851 }
852 m_EnergyIndex++; //Use m_EIndex to count the channels put in the Energy block
853
854}
uint32_t OfflineToRawGain(const uint32_t gain) const

◆ setNTrigger()

void LArRodBlockStructure::setNTrigger ( const uint16_t NTrigger)
virtualinherited

Definition at line 75 of file LArRodBlockStructure.cxx.

76{
77 std::cout << "Error: Function setNTrigger not implemented in this instance of LArRodBlockStructure!\n";
78 return;
79}

◆ setNumberOfGains()

void LArRodBlockStructure::setNumberOfGains ( const uint8_t n)
virtualinherited

Reimplemented in LArRodBlockPhysicsV0, LArRodBlockPhysicsV1, LArRodBlockPhysicsV2, LArRodBlockPhysicsV3, and LArRodBlockTransparentV0< DSPHEADER >.

Definition at line 138 of file LArRodBlockStructure.cxx.

139{
140 std::cout << "Error: Function setNumberOfGains not implemented in this instance of LArRodBlockStructure!\n";
141 return;
142}

◆ setNumberOfSamples()

void LArRodBlockStructure::setNumberOfSamples ( const uint8_t n)
virtualinherited

Reimplemented in LArRodBlockPhysicsV0, LArRodBlockPhysicsV1, LArRodBlockPhysicsV2, LArRodBlockPhysicsV3, and LArRodBlockTransparentV0< DSPHEADER >.

Definition at line 132 of file LArRodBlockStructure.cxx.

133{
134 std::cout << "Error: Function setNumberOfSamples not implemented in this instance of LArRodBlockStructure!\n";
135 return;
136}

◆ setPointers()

bool LArRodBlockPhysicsV6::setPointers ( )
privatevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 85 of file LArRodBlockPhysicsV6.cxx.

86{
88 {
89 int off = -8;
90 int ns = getHeader16(NSamples) & 0xff;
91 if (m_requiredNSamples > 0 && m_requiredNSamples != ns) return false;
92 int radd = (ns+1)/2;
93 int dim1 = getHeader16(ResultsDim1);
94 int off1 = getHeader16(ResultsOff1);
95 int off2 = getHeader16(ResultsOff2);
96 int dim2 = getHeader16(ResultsDim2);
97 int off3 = getHeader16(RawDataBlkOff);
98 int dim3 = getHeader16(RawDataBlkDim);
99 if ( !(ns&0x1) ) radd++;
100
101 if (off1 && dim1+off1+off<m_FebBlockSize) {
102 off1 += off;
103 if (dim1>=8)
104 m_GainPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+off1);
105 if (dim1>=12)
106 m_MaskTimeQualityPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+off1+8);
107 if (dim1>=16)
108 m_MaskDigitsPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+off1+12);
109 if (dim1>=16+radd)
110 m_RaddPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off1+16);
111 if (dim1>=80+radd)
112 m_EnergyPointer=reinterpret_cast<const uint16_t*> (m_FebBlock+off1+16+radd);
113 if (dim1>=84+radd)
114 m_SumPointer=reinterpret_cast<const int32_t*>(m_FebBlock+off1+80+radd);
115 if (dim1>84+radd)
116 m_TimeQualityPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off1+84+radd);
117 off1 -= off;
118 }
119 if (off2 && dim2+off2+off<m_FebBlockSize) {
120 m_DigitsPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off2+off);
121 }
122 if (off3 && dim3+off3+off<m_FebBlockSize) {
123 m_RawDataPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off3+off);
124 }
125
126 // Check for offsets problems
127 uint32_t problem = 0;
128 int n1, n2;
129 int n1_tmp, n2_tmp;
130 int off1_tmp, dim1_tmp;
131 int off2_tmp, dim2_tmp;
132 int off3_tmp, dim3_tmp;
133 if(off1==0) {
134 n1 = n2 = 0;
135 n1_tmp = n2_tmp =0;
136 off1_tmp = dim1_tmp = 0;
137 off2_tmp = dim2_tmp = 0;
138 off3_tmp = dim3_tmp = 0;
139 }
140 else {
141 m_RaddPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+26);
142 m_MaskTimeQualityPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+18);
143 m_MaskDigitsPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+22);
144 n1 = getNbSweetCells1();
145 n2 = getNbSweetCells2();
146 n1_tmp = getNbSweetCells1FromMask();
147 n2_tmp = getNbSweetCells2FromMask();
148 off1_tmp = 10-off;
149 dim1_tmp = 84+(ns+1)/2+n1;
150 if ( !(ns&0x1) ) dim1_tmp++;
151 if ( m_requiredNSamples > 0 ){
152 dim1_tmp = 84 +(m_requiredNSamples+1)/2+n1;
153 if ( !(m_requiredNSamples&0x1) ) dim1_tmp++;
154 }
155 off2_tmp = off1_tmp+dim1_tmp;
156 dim2_tmp = (n2*ns+1)/2;
157 off3_tmp = off2_tmp+dim2_tmp;
158 dim3_tmp = getNumberOfWords()-3-off3_tmp-off;
159 if(dim2_tmp==0) off2_tmp = 0;
160 if(dim3_tmp==0) off3_tmp = 0;
161 }
162
163 if(off1 != off1_tmp) problem=1;
164 if(dim1 != dim1_tmp) problem=2;
165 if(off2 != off2_tmp) problem=3;
166 if(dim2 != dim2_tmp) problem=4;
167 if(off3 != off3_tmp) problem=5;
168 if(dim3 != dim3_tmp) problem=6;
169 if(n1 != n1_tmp) problem=7;
170 if(n2 != n2_tmp) problem=8;
171 if (m_requiredNSamples > 0 &&
172 getHeader32(NGains) != (uint32_t)0x10000 + m_requiredNSamples) problem=9;
173 //if(getHeader32(NGains)!=0x10000 + (unsigned int)ns) problem=9;
174 //if(getHeader32(InFPGAFormat)!=1) problem=10;
175 //if(m_FebBlock[getNumberOfWords()-2]!=0x12345678) problem=11;
176
177 if(problem) { // Try to recompute offsets
178 std::cout << "LArByteStreamProblem " << problem << std::endl;
179 std::cout << "NSamples = " << std::dec << ns << std::endl;
180 std::cout << "getHeader32(NGains) = " << std::hex << getHeader32(NGains) << std::endl;
181 std::cout << "NWTot: " << std::hex << getNumberOfWords() << " n1=" << n1 << " (" << n1_tmp << ") n2=" << n2 << " (" << n2_tmp << ")" << std::endl;
182 std::cout << "Found 1: " << off1 << " " << dim1 << std::endl;
183 std::cout << "Found 2: " << off2 << " " << dim2 << std::endl;
184 std::cout << "Found 3: " << off3 << " " << dim3 << std::dec << std::endl;
185
186 if(n1==n1_tmp && n2==n2_tmp) { // Check consistency of cells above threshold
187 off1 = off1_tmp;
188 dim1 = dim1_tmp;
189 off2 = off2_tmp;
190 dim2 = dim2_tmp;
191 off3 = off3_tmp;
192 dim3 = dim3_tmp;
193 std::cout << "Recomputed 1: " << std::hex << off1 << " " << dim1 << std::endl;
194 std::cout << "Recomputed 2: " << off2 << " " << dim2 << std::endl;
195 std::cout << "Recomputed 3: " << off3 << " " << dim3 << std::dec << std::endl;
196
197 if (off1 && dim1+off1+off<m_FebBlockSize) {
198 off1 += off;
199 if (dim1>=8)
200 m_GainPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+off1);
201 if (dim1>=12)
202 m_MaskTimeQualityPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+off1+8);
203 if (dim1>=16)
204 m_MaskDigitsPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+off1+12);
205 if (dim1>=16+radd)
206 m_RaddPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off1+16);
207 if (dim1>=80+radd)
208 m_EnergyPointer=reinterpret_cast<const uint16_t*> (m_FebBlock+off1+16+radd);
209 if (dim1>=84+radd)
210 m_SumPointer=reinterpret_cast<const int32_t*>(m_FebBlock+off1+80+radd);
211 if (dim1>84+radd)
212 m_TimeQualityPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off1+84+radd);
213 }
214 if (off2 && dim2+off2+off<m_FebBlockSize) {
215 m_DigitsPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off2+off);
216 }
217 if (off3 && dim3+off3+off<m_FebBlockSize) {
218 m_RawDataPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off3+off);
219 }
220 }
221 }
222
223 problem=0;
224 // Recheck offsets
225 if(off1< off2 && off1 + dim1 > off2) problem = 1;
226 if(off1< off3 && off1 + dim1 > off3) problem = 2;
227 if(off2< off1 && off2 + dim2 > off1) problem = 3;
228 if(off2< off3 && off2 + dim2 > off3) problem = 4;
229 if(off3< off1 && off3 + dim3 > off1) problem = 5;
230 if(off3< off2 && off3 + dim3 > off2) problem = 6;
231
232 if(problem) {
234 std::cout << "LArByteStreamProblem " << problem << std::endl;
235 std::cout << "Unrecoverable problem" << std::endl;
236 }
237
238 //uint32_t febId = getHeader32(FEBID);
239 //uint32_t onCheck = onlineCheckSum();
240 //uint32_t offCheck = offlineCheckSum();
241 //
242 //mycheck_tot++;
243 //if(onCheck!=offCheck)
244 //{
245 // mycheck_err++;
246 // std::cout << "FebID checksum " << std::hex << febId << std::endl;
247 // std::cout << "Online checksum " << std::hex << onCheck << " Offline checksum " << offCheck << std::dec << std::endl;
248 // std::cout << "Diff1 checksum " << std::hex << onCheck-offCheck << " Diff2 checksum " << offCheck-onCheck << std::dec << std::endl;
249 // double x=mycheck_err/((double) mycheck_tot)*100.0;
250 // std::cout << "Number of FEB in error: " << mycheck_err << " / " << mycheck_tot << " = " << x << " %" << std::endl;
251 //}
252
253 //
254 //if(febId==0x3b1b8000 || febId==0x398b0000 || febId==0x3a988000) {
255 //if(onCheck!=offCheck) {
256 // std::cout << "***********************************************************************"<< std::endl;
257 // std::cout << "Problem :" << problem << std::endl;
258 // std::cout << "Header values :"<< std::endl;
259 // std::cout << "************************************************************************"<< std::endl;
260 // std::cout << "FebBlockSize = " << m_FebBlockSize << std::endl;
261 // std::cout << "EnergyIndex = " << m_EnergyIndex << std::endl;
262 // std::cout << "TimeQualityIndex = " << m_TimeQualityIndex << std::endl;
263 // std::cout << "DigitsIndex = " << m_DigitsIndex << std::endl;
264 // std::cout << "DigitsChannel = " << m_DigitsChannel << std::endl;
265 // std::cout << "RawDataIndex = " << m_RawDataIndex << std::endl;
266 // std::cout << "GainPointer = " << m_GainPointer << std::endl;
267 // std::cout << "MaskTimeQualityPointer = " << m_MaskTimeQualityPointer << std::endl;
268 // std::cout << "MaskDigitsPointer = " << m_MaskDigitsPointer << std::endl;
269 // std::cout << "RaddPointer = " << m_RaddPointer << std::endl;
270 // std::cout << "EnergyPointer = " << m_EnergyPointer << std::endl;
271 // std::cout << "SumPointer = " << m_SumPointer << std::endl;
272 // std::cout << "TimeQualityPointer = " << m_TimeQualityPointer << std::endl;
273 // std::cout << "DigitsPointer = " << m_DigitsPointer << std::endl;
274 // std::cout << "RawDataPointer = " << m_RawDataPointer << std::endl;
275 // std::cout << "numberHotCell = " << std::dec << getNbSweetCells1() << " " << getNbSweetCells2() << std::endl;
276 // std::cout << "Fragment @ = 0x" << std::hex << m_FebBlock << std::endl;
277 // std::cout << "NWTot = " << std::dec << getNumberOfWords() << std::endl;
278 // std::cout << "FebID = 0x" << std::hex << getHeader32(FEBID) << std::endl;
279 // std::cout << "FebSN = 0x" << std::hex << getHeader32(FEB_SN) << std::endl;
280 // std::cout << "ResultsOff1 = 0x" << std::hex << getHeader16(ResultsOff1) << std::endl;
281 // std::cout << "ResultsDim1 = 0x" << std::hex << getHeader16(ResultsDim1) << std::endl;
282 // std::cout << "ResultsOff2 = 0x" << std::hex << getHeader16(ResultsOff2) << std::endl;
283 // std::cout << "ResultsDim2 = 0x" << std::hex << getHeader16(ResultsDim2) << std::endl;
284 // std::cout << "RawDataBlkOff = 0x" << std::hex << getHeader16(RawDataBlkOff) << std::endl;
285 // std::cout << "RawDataBlkDim = 0x" << std::hex << getHeader16(RawDataBlkDim) << std::endl;
286 // std::cout << "Event status = 0x" << std::hex << getStatus() << std::dec << std::endl;
287 // std::cout << "************************************************************************"<< std::dec << std::endl;
288 // int size = getNumberOfWords();
289 // for(int i=0;i<size;i++) {
290 // std::cout << std::hex << i << " : " << std::hex << m_FebBlock+i << " : " << std::hex << m_FebBlock[i] << std::endl;
291 // }
292 //}
293
294 }
295
296 return true;
297}
uint16_t getNbSweetCells2FromMask() const
uint16_t getNbSweetCells1FromMask() const
virtual uint16_t getNbSweetCells1() const
virtual uint16_t getNbSweetCells2() const

◆ setPulsed()

void LArRodBlockStructure::setPulsed ( const unsigned channelNumber)
virtualinherited

Reimplemented in LArRodBlockCalibrationV0< DSPHEADER >.

Definition at line 69 of file LArRodBlockStructure.cxx.

70{
71 std::cout << "Error: Function setPulsed not implemented in this instance of LArRodBlockStructure!\n";
72 return;
73}

◆ setRawData()

void LArRodBlockPhysicsV6::setRawData ( const int chIdx,
const std::vector< short > & samples,
const uint32_t  )
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 856 of file LArRodBlockPhysicsV6.cxx.

856 {
857
858 // First of all, set the bits
859 int cchIdx = FebToRodChannel(chIdx);
860 uint16_t mask_idx=cchIdx>>5;
861 uint16_t mask_bit=(cchIdx&0x1f);
862 m_SumBlkBlockE2[mask_idx] |= (0x1 << mask_bit);
863 for(std::vector<short>::const_iterator i=samples.begin();i!=samples.end();++i){
864 m_DigitsEncode.push_back((*i)<<2);
865 }
866
867}

◆ setRawDataFixed()

void LArRodBlockStructure::setRawDataFixed ( const int channel,
const std::vector< short > & samples,
const uint32_t gain )
virtualinherited

Reimplemented in LArRodBlockTransparentV0< DSPHEADER >.

Definition at line 126 of file LArRodBlockStructure.cxx.

127{
128 std::cout << "Error: Function setRawDataFixed not implemented in this instance of LArRodBlockStructure!\n";
129 return;
130}

◆ setRequiredNSamples()

void LArRodBlockPhysicsV6::setRequiredNSamples ( unsigned short ns)
inline

Definition at line 119 of file LArRodBlockPhysicsV6.h.

◆ setSumE()

void LArRodBlockPhysicsV6::setSumE ( double SumE)
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 417 of file LArRodBlockPhysicsV6.h.

417 {
418 setE (6, SumE);
419}

◆ setTDCPhase()

void LArRodBlockStructure::setTDCPhase ( const uint8_t n)
virtualinherited

Reimplemented in LArRodBlockTransparentV0< DSPHEADER >.

Definition at line 144 of file LArRodBlockStructure.cxx.

145{
146 std::cout << "Error: Function setTDCPhase not implemented in this instance of LArRodBlockStructure!\n";
147 return;
148}

◆ sortDataVector() [1/5]

void LArRodBlockStructure::sortDataVector ( std::vector< const LArAccumulatedCalibDigit * > & )
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 90 of file LArRodBlockStructure.cxx.

240{return;}

◆ sortDataVector() [2/5]

void LArRodBlockStructure::sortDataVector ( std::vector< const LArAccumulatedDigit * > & )
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 91 of file LArRodBlockStructure.cxx.

243{return;}

◆ sortDataVector() [3/5]

void LArRodBlockStructure::sortDataVector ( std::vector< const LArCalibDigit * > & )
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 89 of file LArRodBlockStructure.cxx.

237{return;}

◆ sortDataVector() [4/5]

void LArRodBlockPhysicsV6::sortDataVector ( std::vector< const LArDigit * > & vDigit)
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 125 of file LArRodBlockPhysicsV6.h.

126 {std::sort(vDigit.begin(),vDigit.end(),*this); }
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.

◆ sortDataVector() [5/5]

void LArRodBlockStructure::sortDataVector ( std::vector< const LArRawChannel * > & )
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 87 of file LArRodBlockStructure.cxx.

231{return;}

Member Data Documentation

◆ m_channelsPerFEB

int LArRodBlockStructure::m_channelsPerFEB
protectedinherited

Definition at line 225 of file LArRodBlockStructure.h.

◆ m_DigitsChannel

int LArRodBlockPhysicsV6::m_DigitsChannel = 0
private

Definition at line 149 of file LArRodBlockPhysicsV6.h.

◆ m_DigitsEncode

std::vector<uint16_t> LArRodBlockPhysicsV6::m_DigitsEncode
private

Definition at line 144 of file LArRodBlockPhysicsV6.h.

◆ m_DigitsIndex

int LArRodBlockPhysicsV6::m_DigitsIndex = 0
private

Definition at line 148 of file LArRodBlockPhysicsV6.h.

◆ m_DigitsPointer

const uint16_t* LArRodBlockPhysicsV6::m_DigitsPointer = nullptr
private

Definition at line 158 of file LArRodBlockPhysicsV6.h.

◆ m_EnergyBlockEncode

std::vector<uint16_t> LArRodBlockPhysicsV6::m_EnergyBlockEncode
private

Definition at line 143 of file LArRodBlockPhysicsV6.h.

◆ m_EnergyIndex

int LArRodBlockPhysicsV6::m_EnergyIndex = 0
private

Definition at line 146 of file LArRodBlockPhysicsV6.h.

◆ m_EnergyPointer

const uint16_t* LArRodBlockPhysicsV6::m_EnergyPointer = nullptr
private

Definition at line 155 of file LArRodBlockPhysicsV6.h.

◆ m_EnergyThreshold1

uint16_t LArRodBlockPhysicsV6::m_EnergyThreshold1
private

Definition at line 168 of file LArRodBlockPhysicsV6.h.

◆ m_EnergyThreshold2

uint16_t LArRodBlockPhysicsV6::m_EnergyThreshold2
private

Definition at line 169 of file LArRodBlockPhysicsV6.h.

◆ m_error_next_feb

bool LArRodBlockStructure::m_error_next_feb
protectedinherited

Definition at line 243 of file LArRodBlockStructure.h.

◆ m_Ex

int32_t LArRodBlockStructure::m_Ex
protectedinherited

Definition at line 207 of file LArRodBlockStructure.h.

◆ m_Ey

int32_t LArRodBlockStructure::m_Ey
protectedinherited

Definition at line 208 of file LArRodBlockStructure.h.

◆ m_Ez

int32_t LArRodBlockStructure::m_Ez
protectedinherited

Definition at line 209 of file LArRodBlockStructure.h.

◆ m_FebBlock

const uint32_t* LArRodBlockStructure::m_FebBlock
protectedinherited

Definition at line 227 of file LArRodBlockStructure.h.

◆ m_FebBlockSize

int32_t LArRodBlockStructure::m_FebBlockSize
protectedinherited

Definition at line 229 of file LArRodBlockStructure.h.

◆ m_FebInfoBlock

std::vector<uint32_t> LArRodBlockPhysicsV6::m_FebInfoBlock
private

Definition at line 140 of file LArRodBlockPhysicsV6.h.

◆ m_fixedGain

int LArRodBlockPhysicsV6::m_fixedGain
private

Definition at line 162 of file LArRodBlockPhysicsV6.h.

◆ m_GainBlock

std::vector<uint32_t> LArRodBlockPhysicsV6::m_GainBlock
private

Definition at line 139 of file LArRodBlockPhysicsV6.h.

◆ m_GainPointer

const uint32_t* LArRodBlockPhysicsV6::m_GainPointer = nullptr
private

Definition at line 151 of file LArRodBlockPhysicsV6.h.

◆ m_iHeadBlockSize

unsigned short LArRodBlockStructure::m_iHeadBlockSize
protectedinherited

Definition at line 221 of file LArRodBlockStructure.h.

◆ m_MaskDigitsPointer

const uint32_t* LArRodBlockPhysicsV6::m_MaskDigitsPointer = nullptr
private

Definition at line 153 of file LArRodBlockPhysicsV6.h.

◆ m_MaskTimeQualityPointer

const uint32_t* LArRodBlockPhysicsV6::m_MaskTimeQualityPointer = nullptr
private

Definition at line 152 of file LArRodBlockPhysicsV6.h.

◆ m_mFebBlocks

FEBMAPTYPE LArRodBlockStructure::m_mFebBlocks
protectedinherited

Definition at line 234 of file LArRodBlockStructure.h.

◆ m_MiddleHeaderSize

int32_t LArRodBlockStructure::m_MiddleHeaderSize
protectedinherited

Definition at line 239 of file LArRodBlockStructure.h.

◆ m_numberHotCell

uint16_t LArRodBlockPhysicsV6::m_numberHotCell = 0U
private

Definition at line 165 of file LArRodBlockPhysicsV6.h.

◆ m_numberHotCellOffTime

uint16_t LArRodBlockPhysicsV6::m_numberHotCellOffTime
private

Definition at line 166 of file LArRodBlockPhysicsV6.h.

◆ m_numberOfEx

uint32_t LArRodBlockStructure::m_numberOfEx
protectedinherited

Definition at line 214 of file LArRodBlockStructure.h.

◆ m_numberOfEy

uint32_t LArRodBlockStructure::m_numberOfEy
protectedinherited

Definition at line 215 of file LArRodBlockStructure.h.

◆ m_numberOfEz

uint32_t LArRodBlockStructure::m_numberOfEz
protectedinherited

Definition at line 216 of file LArRodBlockStructure.h.

◆ m_numberOfSumE

uint32_t LArRodBlockStructure::m_numberOfSumE
protectedinherited

Definition at line 217 of file LArRodBlockStructure.h.

◆ m_OfflineToRawGainMap

const uint32_t LArRodBlockStructure::m_OfflineToRawGainMap ={3,2,1}
staticprotectedinherited

Definition at line 21 of file LArRodBlockStructure.h.

◆ m_OffTimeCut

int16_t LArRodBlockPhysicsV6::m_OffTimeCut
private

Definition at line 170 of file LArRodBlockPhysicsV6.h.

◆ m_onlineHelper

const LArOnlineID* LArRodBlockPhysicsV6::m_onlineHelper
private

Definition at line 173 of file LArRodBlockPhysicsV6.h.

◆ m_pRODblock

std::vector<uint32_t>* LArRodBlockStructure::m_pRODblock
protectedinherited

Definition at line 232 of file LArRodBlockStructure.h.

◆ m_RaddPointer

const uint16_t* LArRodBlockPhysicsV6::m_RaddPointer = nullptr
private

Definition at line 154 of file LArRodBlockPhysicsV6.h.

◆ m_RawDataBlock

std::vector<uint32_t> LArRodBlockPhysicsV6::m_RawDataBlock
private

Definition at line 142 of file LArRodBlockPhysicsV6.h.

◆ m_RawDataIndex

int LArRodBlockPhysicsV6::m_RawDataIndex = 0
private

Definition at line 150 of file LArRodBlockPhysicsV6.h.

◆ m_RawDataPointer

const uint16_t* LArRodBlockPhysicsV6::m_RawDataPointer = nullptr
private

Definition at line 159 of file LArRodBlockPhysicsV6.h.

◆ m_RawToOfflineGainMap

const uint32_t LArRodBlockStructure::m_RawToOfflineGainMap ={0, 2, 1,0}
staticprotectedinherited

Definition at line 20 of file LArRodBlockStructure.h.

◆ m_rearrangeFirstSample

unsigned int LArRodBlockStructure::m_rearrangeFirstSample
protectedinherited

Definition at line 241 of file LArRodBlockStructure.h.

◆ m_requiredNSamples

unsigned short LArRodBlockPhysicsV6::m_requiredNSamples
private

Definition at line 172 of file LArRodBlockPhysicsV6.h.

◆ m_ROB_to_decode

int32_t LArRodBlockStructure::m_ROB_to_decode
protectedinherited

Definition at line 246 of file LArRodBlockStructure.h.

◆ m_RodBlock

const uint32_t* LArRodBlockStructure::m_RodBlock
protectedinherited

Definition at line 228 of file LArRodBlockStructure.h.

◆ m_RodBlockSize

int32_t LArRodBlockStructure::m_RodBlockSize
protectedinherited

Definition at line 230 of file LArRodBlockStructure.h.

◆ m_SumBlkBlockE1

std::vector<uint32_t> LArRodBlockPhysicsV6::m_SumBlkBlockE1
private

Definition at line 137 of file LArRodBlockPhysicsV6.h.

◆ m_SumBlkBlockE2

std::vector<uint32_t> LArRodBlockPhysicsV6::m_SumBlkBlockE2
private

Definition at line 138 of file LArRodBlockPhysicsV6.h.

◆ m_SumE

int32_t LArRodBlockStructure::m_SumE
protectedinherited

Definition at line 210 of file LArRodBlockStructure.h.

◆ m_SumPointer

const int32_t* LArRodBlockPhysicsV6::m_SumPointer = nullptr
private

Definition at line 156 of file LArRodBlockPhysicsV6.h.

◆ m_TimeQualityBlock

std::vector<uint16_t> LArRodBlockPhysicsV6::m_TimeQualityBlock
private

Definition at line 141 of file LArRodBlockPhysicsV6.h.

◆ m_TimeQualityIndex

int LArRodBlockPhysicsV6::m_TimeQualityIndex = 0
private

Definition at line 147 of file LArRodBlockPhysicsV6.h.

◆ m_TimeQualityPointer

const uint16_t* LArRodBlockPhysicsV6::m_TimeQualityPointer = nullptr
private

Definition at line 157 of file LArRodBlockPhysicsV6.h.

◆ m_vFragment

std::vector<uint32_t>* LArRodBlockStructure::m_vFragment
protectedinherited

Definition at line 231 of file LArRodBlockStructure.h.

◆ m_virtualROBJump

uint32_t LArRodBlockStructure::m_virtualROBJump
protectedinherited

Definition at line 245 of file LArRodBlockStructure.h.

◆ m_virtualROBPointer

const uint32_t* LArRodBlockStructure::m_virtualROBPointer
protectedinherited

Definition at line 247 of file LArRodBlockStructure.h.

◆ m_virtualROBPointerLocal

const uint32_t* LArRodBlockStructure::m_virtualROBPointerLocal
protectedinherited

Definition at line 248 of file LArRodBlockStructure.h.


The documentation for this class was generated from the following files: