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

#include <LArRodBlockPhysicsV5.h>

Inheritance diagram for LArRodBlockPhysicsV5:
Collaboration diagram for LArRodBlockPhysicsV5:

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

 LArRodBlockPhysicsV5 (IMessageSvc *msgSvc)
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 uint32_t getVROBFebId ()
virtual int32_t getVROBEx () const
virtual int32_t getVROBEy () const
virtual int32_t getVROBEz () 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)
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 void setSumE (double)
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 int32_t getSumE () const
virtual int32_t getVROBSumE () 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

Static Public Member Functions

static std::string BlockType ()

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
MsgStream m_logstr

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 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 25 of file LArRodBlockPhysicsV5.h.

Member Typedef Documentation

◆ FEBMAPTYPE

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

Definition at line 227 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 29 of file LArRodBlockPhysicsV5.h.

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

◆ anonymous enum

anonymous enum
protectedinherited
Enumerator
NWTot 
NWTot_h 
FEBID 
FEBID_h 
FEBSN 
FEBSN_h 
endtag 

Definition at line 50 of file LArRodBlockStructure.h.

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

Constructor & Destructor Documentation

◆ LArRodBlockPhysicsV5()

LArRodBlockPhysicsV5::LArRodBlockPhysicsV5 ( IMessageSvc * msgSvc)

Definition at line 28 of file LArRodBlockPhysicsV5.cxx.

30 m_onlineHelper(nullptr)
31{
32 m_iHeadBlockSize=endtag/2; // The implicit cast rounds down to the right size
38 m_OffTimeCut=0; //FIXME: Nowhere set to a sensible value ???
40 // retrieve onlineHelper
41 SmartIF<StoreGateSvc> detStore{Gaudi::svcLocator()->service("DetectorStore")};
42 if (!detStore) {
43 m_logstr << MSG::ERROR << "Unable to locate DetectorStore" << endmsg;
44 std::abort();
45 }
46 StatusCode sc = detStore->retrieve(m_onlineHelper, "LArOnlineID");
47 if (sc.isFailure()) {
48 m_logstr << MSG::ERROR << "Could not get LArOnlineID helper !" << endmsg;
49 std::abort();
50 }
51}
#define endmsg
static Double_t sc
const LArOnlineID * m_onlineHelper
unsigned short m_requiredNSamples
static std::string BlockType()
LArRodBlockStructure(IMessageSvc *msgSvc, const std::string &blockType)
@ LARNGAIN
Definition CaloGain.h:19
::StatusCode StatusCode
StatusCode definition for legacy code.

Member Function Documentation

◆ BlockType()

std::string LArRodBlockPhysicsV5::BlockType ( )
inlinestatic

Definition at line 56 of file LArRodBlockPhysicsV5.h.

56{ return std::string("RodBlockPhysicsV5");}

◆ canIncludeRawData()

bool LArRodBlockPhysicsV5::canIncludeRawData ( )
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 168 of file LArRodBlockPhysicsV5.h.

168{ return true;}

◆ canSetCalibration()

virtual bool LArRodBlockPhysicsV5::canSetCalibration ( )
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 165 of file LArRodBlockPhysicsV5.h.

165{return false;}

◆ canSetEnergy()

bool LArRodBlockPhysicsV5::canSetEnergy ( )
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 166 of file LArRodBlockPhysicsV5.h.

166{ return true;}

◆ canSetNTrigger()

virtual bool LArRodBlockStructure::canSetNTrigger ( )
inlinevirtualinherited

Definition at line 99 of file LArRodBlockStructure.h.

99{return false;}

◆ canSetRawData()

bool LArRodBlockPhysicsV5::canSetRawData ( )
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 167 of file LArRodBlockPhysicsV5.h.

167{ return false;}

◆ canSetRawDataFixed()

virtual bool LArRodBlockStructure::canSetRawDataFixed ( )
inlinevirtualinherited

Reimplemented in LArRodBlockTransparentV0< DSPHEADER >.

Definition at line 97 of file LArRodBlockStructure.h.

97{return false;}

◆ concatinateFEBs()

void LArRodBlockPhysicsV5::concatinateFEBs ( )
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 838 of file LArRodBlockPhysicsV5.cxx.

839{
840 FEBMAPTYPE::const_iterator feb_it_b=m_mFebBlocks.begin();
841 FEBMAPTYPE::const_iterator feb_it_e=m_mFebBlocks.end();
842 FEBMAPTYPE::const_iterator feb_it;
843 for (feb_it=feb_it_b;feb_it!=feb_it_e;++feb_it) {
844 if (feb_it!=feb_it_b) //Not first Feb
846
847 //Add feb data to rod data block
848 m_pRODblock->insert (m_pRODblock->end(),
849 feb_it->second.begin(), feb_it->second.end());
850 } //end for feb_it
851
852 m_mFebBlocks.clear();
853}
std::vector< uint32_t > * m_pRODblock

◆ dumpFragment()

void LArRodBlockStructure::dumpFragment ( )
virtualinherited

Definition at line 159 of file LArRodBlockStructure.cxx.

160{
161 m_logstr << MSG::ERROR << "Error: Function dumpFragment() not implemented in this instance of LArRodBlockStructure!" << endmsg;
162}

◆ FebToRodChannel()

int LArRodBlockPhysicsV5::FebToRodChannel ( int ch) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 307 of file LArRodBlockPhysicsV5.h.

308{
309 return ( (ch&0x7) << 4) | ( (ch&0x38) >>2 ) | ((ch&0x40)>>6);
310}

◆ finalizeFEB()

void LArRodBlockPhysicsV5::finalizeFEB ( )
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 710 of file LArRodBlockPhysicsV5.cxx.

711{
712 //Complete non-complete Energy block
714 setNextEnergy((uint16_t)0,(int16_t)32767,(int32_t)-32767,(uint32_t)0);//E=0,t=32767,q=-32767,G=0
715
716 uint16_t n;
718 // checkSum value
719 uint32_t sum=0;
720
721 // Will Hardcode here for the moment FIXME. Minimal 1 sample
723 setHeader16(NSamples,nsamples);
724 // These will never be used form MC. Nice to put in here thought
725 setHeader16(FEB_SN,0xfefe);
726 setHeader16(FEB_SN_h,0xdede);
729
730 // Gain block...
731 n = m_GainBlock.size();
732 //Check if Gain-Block exists and is not yet part of the fragment
733 if (n)
734 {
735 for(unsigned int i=0;i<n;i++){
736 m_vFragment->push_back(m_GainBlock[i]);
737 sum+=m_GainBlock[i];
738 }
739 }
740
741 // Cells above energy threshold E1
742 n = m_SumBlkBlockE1.size();
743 //Check if Summary Block exists and is not yet part of the fragment
744 if (n)
745 {
746 for (unsigned i=0;i<n;i++){
747 m_vFragment->push_back(m_SumBlkBlockE1[i]);
749 }
750 }
751
752 // Cells above energy threshold E2 (not included so far)
753 n = m_SumBlkBlockE2.size();
754 //Check if Summary Block exists and is not yet part of the fragment
755 if (n)
756 {
757 for (unsigned i=0;i<n;i++){
758 m_vFragment->push_back(m_SumBlkBlockE2[i]);
760 }
761 }
762
763 // fill info from counters
764 // for moment just include 1 fake words (32 bits) to put radd
765 uint32_t radd_nANC=0x0;
766 // Second threshold missing (FIXME)
767 radd_nANC = ((m_numberHotCell<<8))+(m_DigitsEncode.size()/nsamples);
768 radd_nANC = (radd_nANC<<16);
769 m_vFragment->push_back(radd_nANC);
770 sum+=radd_nANC;
771 // Need to include radd nsamples-1
772 // No need to include in sum's for now
773 for( int i=0; i < (nsamples-1)/2; i++)
774 m_vFragment->push_back(0x0);
775
776 // Energy block...
777 n = 128 ; // Fixed size m_EnergyBlock.size();
778 // Block also include time, whenever necessary
779 int size_of_block=80+(nsamples+1)/2+(m_TimeQualityBlock.size())/2;
780 //Check if Energy-Block exists and is not yet part of the fragment
781 if (n)
782 {
784 setHeader16(ResultsDim1,size_of_block);
785 for(unsigned int i=0;i<n/2;i++) {
786 // WARNING which one should be >>16 2*i or 2*i+1? To be tested
787 uint32_t Encode = m_EnergyBlockEncode[2*i]+(m_EnergyBlockEncode[2*i+1]<<16);
788 m_vFragment->push_back(Encode);
789 sum+=Encode;
790 }
791 }
792
793 // Magic numbers (3 or 6) for Ex, Ey and Ez
794 n = m_TimeQualityBlock.size();
795 //Check if Time and Quality Block exists and is not yet part of the fragment
796 if (n)
797 {
798 unsigned int imax = n/2;
799 for(unsigned int i=0;i<imax;i++){
800 ShortLong to_push{};
801 to_push.s[0] = m_TimeQualityBlock[i*2];
802 to_push.s[1] = m_TimeQualityBlock[i*2+1];
803 m_vFragment->push_back(to_push.l);
804 sum+=to_push.l;
805 }
806 }
807 // Now include digits
808 n = m_DigitsEncode.size();
809 if ( n ) {
810 // First make sure it is not and odd number to store
811 if ( m_DigitsEncode.size() & 0x1 ) m_DigitsEncode.push_back(0x0);
812 unsigned int imax=m_DigitsEncode.size()/2;
813 for(unsigned int i=0;i<imax;i++){
814 // Better by-swap
815 ShortLong to_push{};
816 to_push.s[1]=m_DigitsEncode[i*2];
817 to_push.s[0]=m_DigitsEncode[i*2+1];
818 m_vFragment->push_back(to_push.l);
819 sum+=to_push.l;
820 }
822 setHeader16(ResultsOff2,18+size_of_block);
823 } // End of check for format
824
825 // Need to add header to check sum
826 for(size_t ii=0;ii<endtag/2;ii++){
827 sum+=((*m_vFragment)[ii]);
828 }
829 // Three final magic words
830 m_vFragment->push_back(0x0); // For the moment
831 m_vFragment->push_back(0x12345678); // For the moment
832 m_vFragment->push_back(sum& 0x7fffffff);
833
835}
int imax(int i, int j)
std::vector< uint16_t > m_EnergyBlockEncode
std::vector< uint32_t > m_SumBlkBlockE1
std::vector< uint32_t > m_SumBlkBlockE2
std::vector< uint32_t > m_GainBlock
void setNextEnergy(const int channel, const int32_t energy, const int32_t time, const int32_t quality, const uint32_t gain)
std::vector< uint16_t > m_DigitsEncode
std::vector< uint16_t > m_TimeQualityBlock
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 422 of file LArRodBlockStructure.h.

423{// chan = (0,127)
424 // int a = chan/32;
425 // int r = chan%32;
426 int a = chan>>5;
427 int r = chan&0x1f;
428 // a = (0,3), r = ( 0, 31 )
429 return (*(p+a)>>r) & 0x1;
430}
static Double_t a
int r
Definition globals.cxx:22

◆ getCtrl1()

uint16_t LArRodBlockPhysicsV5::getCtrl1 ( uint32_t adc) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 515 of file LArRodBlockPhysicsV5.cxx.

516{
517 if(!m_RawDataPointer) return 0;
518 int index=5;
520 return x;
521}
#define x
const uint16_t * m_RawDataPointer
str index
Definition DeMoScan.py:362

◆ getCtrl2()

uint16_t LArRodBlockPhysicsV5::getCtrl2 ( uint32_t adc) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 523 of file LArRodBlockPhysicsV5.cxx.

524{
525 if(!m_RawDataPointer) return 0;
526 int index=4;
528 return x;
529}

◆ getCtrl3()

uint16_t LArRodBlockPhysicsV5::getCtrl3 ( uint32_t adc) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 531 of file LArRodBlockPhysicsV5.cxx.

532{
533 if(!m_RawDataPointer) return 0;
534 int index=7;
536 return x;
537}

◆ getDAC()

uint16_t LArRodBlockStructure::getDAC ( ) const
inlinevirtualinherited

◆ getDelay()

uint16_t LArRodBlockStructure::getDelay ( ) const
inlinevirtualinherited

◆ getDspCodeVersion()

uint32_t LArRodBlockStructure::getDspCodeVersion ( ) const
virtualinherited

Definition at line 234 of file LArRodBlockStructure.cxx.

235{
236 int i=getNumberOfWords()-2;
237 return m_FebBlock[i];
238}
uint32_t getNumberOfWords() const

◆ getDspEventCounter()

int32_t LArRodBlockStructure::getDspEventCounter ( ) const
virtualinherited

Definition at line 240 of file LArRodBlockStructure.cxx.

241{
242 int i=getNumberOfWords()-1;
243 return m_FebBlock[i];
244}

◆ getEx()

int32_t LArRodBlockPhysicsV5::getEx ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 257 of file LArRodBlockPhysicsV5.h.

258{
259 if(m_SumPointer) return (m_SumPointer[0]>>9);
260 return 0;
261}

◆ getEy()

int32_t LArRodBlockPhysicsV5::getEy ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 263 of file LArRodBlockPhysicsV5.h.

264{
265 if(m_SumPointer) return (m_SumPointer[1]>>9);
266 return 0;
267}

◆ getEz()

int32_t LArRodBlockPhysicsV5::getEz ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 269 of file LArRodBlockPhysicsV5.h.

270{
271 if(m_SumPointer) return (m_SumPointer[2]>>9);
272 return 0;
273}

◆ getFebConfig()

uint16_t LArRodBlockPhysicsV5::getFebConfig ( ) const
inline

Definition at line 171 of file LArRodBlockPhysicsV5.h.

172{
173 return getHeader16(FebConfig);
174}
uint16_t getHeader16(const unsigned n) const

◆ getFEBID()

uint32_t LArRodBlockStructure::getFEBID ( ) const
inlineinherited

Definition at line 293 of file LArRodBlockStructure.h.

294{
295 return getHeader32(FEBID);
296}
uint32_t getHeader32(const unsigned n) const

◆ getFEBSN()

uint32_t LArRodBlockStructure::getFEBSN ( ) const
inlineinherited

Definition at line 298 of file LArRodBlockStructure.h.

299{
300 return getHeader32(FEBSN);
301}

◆ getFirstSampleIndex()

uint16_t LArRodBlockPhysicsV5::getFirstSampleIndex ( ) const
inline

Definition at line 176 of file LArRodBlockPhysicsV5.h.

177{
179}

◆ getHeader16()

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

Definition at line 345 of file LArRodBlockStructure.h.

346{
347 if (n&0x1) //n is an odd number
348 return m_FebBlock[n>>1] & 0xffff; //1,3,5... are fetched from lower bits
349 else //n is a even number
350 return m_FebBlock[n>>1] >> 16; //0,2,4... are fetched from higher bits
351}

◆ getHeader32()

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

Definition at line 353 of file LArRodBlockStructure.h.

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

◆ getNbSweetCells1()

uint16_t LArRodBlockPhysicsV5::getNbSweetCells1 ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 442 of file LArRodBlockPhysicsV5.cxx.

443{
444 if(!m_RaddPointer) return 0;
445 return m_RaddPointer[1]>>8;
446}
const uint16_t * m_RaddPointer

◆ getNbSweetCells1FromMask()

uint16_t LArRodBlockPhysicsV5::getNbSweetCells1FromMask ( ) const
private

Definition at line 454 of file LArRodBlockPhysicsV5.cxx.

455{
456 if(!m_MaskTimeQualityPointer) return 0;
457 int n=0;
458 for(int i=0;i<4;i++)
459 for(int j=0;j<32;j++)
460 if((m_MaskTimeQualityPointer[i] >> j) &0x1) n++;
461 return n;
462}
const uint32_t * m_MaskTimeQualityPointer
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)

◆ getNbSweetCells2()

uint16_t LArRodBlockPhysicsV5::getNbSweetCells2 ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 448 of file LArRodBlockPhysicsV5.cxx.

449{
450 if(!m_RaddPointer) return 0;
451 return m_RaddPointer[1] & 0xff;
452}

◆ getNbSweetCells2FromMask()

uint16_t LArRodBlockPhysicsV5::getNbSweetCells2FromMask ( ) const
private

Definition at line 464 of file LArRodBlockPhysicsV5.cxx.

465{
466 if(!m_MaskDigitsPointer) return 0;
467 int n=0;
468 for(int i=0;i<4;i++)
469 for(int j=0;j<32;j++)
470 if((m_MaskDigitsPointer[i] >> j) &0x1) n++;
471 return n;
472}
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 86 of file LArRodBlockStructure.cxx.

87{
88 m_logstr << MSG::ERROR << "Error: Function getNextAccumulatedCalibDigit not implemented in this instance of LArRodBlockStructure!" << endmsg;
89 return 0;
90}

◆ 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 92 of file LArRodBlockStructure.cxx.

93{
94 m_logstr << MSG::ERROR << "Error: Function getNextAccumulatedDigit not implemented in this instance of LArRodBlockStructure!" << endmsg;
95 return 0;
96}

◆ getNextDigits()

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

Definition at line 328 of file LArRodBlockPhysicsV5.cxx.

329{
330#ifdef LARBSDBGOUTPUT
331 //Debug output
332 m_logstr << MSG::DEBUG << "Let s go in getNextDigits..." << endmsg;
333 m_logstr << MSG::DEBUG << "GetNextDigits for FEB 0x" << MSG::hex << (uint32_t)getHeader32(FEBID) << MSG::dec << endmsg;
334 m_logstr << MSG::DEBUG << "m_DigitsPointer=" << m_DigitsPointer << " m_DigitsIndex="<< m_DigitsIndex
335 << " m_DigitsChannel="<< m_DigitsChannel
336 << " m_channelsPerFEB=" << m_channelsPerFEB << endmsg;
337#endif
338
339 if (m_DigitsChannel>=m_channelsPerFEB) { //Already beyond maximal number of channels
340#ifdef LARBSDBGOUTPUT
341 m_logstr << MSG::DEBUG << "Maximum number of channels reached" << endmsg;
342#endif
343 return 0;
344 }
345 if (!m_DigitsPointer) { //Block does not exist
346#ifdef LARBSDBGOUTPUT
347 m_logstr << MSG::DEBUG << "No Digits Block in this FEB" << endmsg;
348#endif
349 return 0;
350 }
351 if (!m_MaskDigitsPointer) { //Block does not exist
352#ifdef LARBSDBGOUTPUT
353 m_logstr << MSG::DEBUG << "No Mask Digits Block in this FEB" << endmsg;
354#endif
355 return 0;
356 }
357
358 // Get Digits if the information is present according to summary block
359 uint32_t hasDigits;
360
361 hasDigits = (uint32_t) ((m_MaskDigitsPointer[m_DigitsChannel>>5] >> (m_DigitsChannel&0x1f)) &0x1);
362 // Increment channel number until digits are found
363 while(hasDigits==0) {
365 if (m_DigitsChannel>=m_channelsPerFEB) { //Already beyond maximal number of channels
366#ifdef LARBSDBGOUTPUT
367 m_logstr << MSG::DEBUG << "Maximum number of channels reached" << endmsg;
368#endif
369 return 0;
370 }
371 hasDigits = (uint32_t) ((m_MaskDigitsPointer[m_DigitsChannel>>5] >> (m_DigitsChannel&0x1f)) &0x1);
372 }
373
374 // Get next channel
375 unsigned rodChannelNumber=m_DigitsChannel; // Index of Channel in ROD-Block
376 channelNumber=((rodChannelNumber&0xe)<<2) + ((rodChannelNumber&0x1)<<6) + (rodChannelNumber>>4); //channel number of the FEB
377 const unsigned int nsamples = getHeader16(NSamples) & 0xff;
378
379 // gain in 2 bits of a 32 bits word
380 if(m_GainPointer) {
381 gain = (uint32_t) ((m_GainPointer[m_DigitsChannel>>4] >> (m_DigitsChannel&0xf)*2) & 0x3);
383 } else gain=0xffffffff;
384
385#ifdef LARBSDBGOUTPUT
386 m_logstr << MSG::DEBUG << "This FEB has " << nsamples << " samples" << endmsg;
387#endif
388
389 if(nsamples==0) return 0;
390 int s_size = nsamples;
391 int index;
392 index = s_size*m_DigitsIndex;
393 if(m_DigitsIndex&0x1) {
394 samples.push_back(m_DigitsPointer[index-1]>>2);
395 samples.push_back(m_DigitsPointer[index+2]>>2);
396 samples.push_back(m_DigitsPointer[index+1]>>2);
397 samples.push_back(m_DigitsPointer[index+4]>>2);
398 samples.push_back(m_DigitsPointer[index+3]>>2);
399 if(nsamples==7) {
400 samples.push_back(m_DigitsPointer[index+6]>>2);
401 samples.push_back(m_DigitsPointer[index+5]>>2);
402 }
403 } else {
404 samples.push_back(m_DigitsPointer[index+1]>>2);
405 samples.push_back(m_DigitsPointer[index+0]>>2);
406 samples.push_back(m_DigitsPointer[index+3]>>2);
407 samples.push_back(m_DigitsPointer[index+2]>>2);
408 samples.push_back(m_DigitsPointer[index+5]>>2);
409 if(nsamples==7) {
410 samples.push_back(m_DigitsPointer[index+4]>>2);
411 samples.push_back(m_DigitsPointer[index+7]>>2);
412 }
413 }
414
415#ifdef LARBSDBGOUTPUT
416 m_logstr << MSG::DEBUG << " ===> ROD Channel = " << m_DigitsChannel << endmsg;
417 m_logstr << MSG::DEBUG << " ===> FEB Channel = " << channelNumber << endmsg;
418 m_logstr << MSG::DEBUG << " ===> Gain = " << gain << endmsg;
419 for(int i=0;i<nsamples;i++)
420 m_logstr << MSG::DEBUG << " ===> sample " << i << " = " << samples[i] << endmsg;
421#endif
424 unsigned rearrangeFirstSample=0;
426 rearrangeFirstSample=m_rearrangeFirstSample; //Overwrite by jobOptions
427 else
428 rearrangeFirstSample=getFirstSampleIndex();
429 if (rearrangeFirstSample && rearrangeFirstSample<samples.size()) //FIXME: Very ugly hack! See explanation in LArRodDecoder.h file
430 {//Change e.g. 3 0 1 2 4 to 0 1 2 3 4
431 short movedSample=samples[0];
432 for (unsigned i=1;i<=rearrangeFirstSample;i++)
433 samples[i-1]=samples[i];
434 samples[rearrangeFirstSample]=movedSample;
435 }
436#ifdef LARBSDBGOUTPUT
437 m_logstr << MSG::DEBUG << "GetNextDigits for FEB finished 0x" << MSG::hex << (uint32_t)getHeader32(FEBID) << MSG::dec << endmsg;
438#endif
439 return 1;
440}
const uint32_t * m_GainPointer
const uint16_t * m_DigitsPointer
uint16_t getFirstSampleIndex() const
uint32_t RawToOfflineGain(const uint32_t gain) const

◆ getNextEnergy()

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

Reimplemented from LArRodBlockStructure.

Definition at line 181 of file LArRodBlockPhysicsV5.h.

182{
183 m_logstr << MSG::DEBUG << "in LArRodBlockPhysicsV5::getNextEnergy." << endmsg;
184 m_logstr << MSG::DEBUG << "m_channelsPerFEB=" << m_channelsPerFEB << endmsg;
185 if (m_EnergyIndex>=m_channelsPerFEB) // Already beyond maximal number of channels
186 return 0;
187 if (!m_EnergyPointer) // No data block present
188 return 0;
189
190 unsigned rodChannelNumber=m_EnergyIndex; // Index of Channel in ROD-Block
191 channelNumber=((rodChannelNumber&0xe)<<2) + ((rodChannelNumber&0x1)<<6) + (rodChannelNumber>>4); //channel number of the FEB
192
193 // get information available for all cells
194 // Energy on a 16 bit word and decode ranges
195 uint16_t encodedEnergy; // 16 bits Encoded Energy word
196 int32_t aux;
197 uint16_t range; // 2 bits range
199
200 m_logstr << MSG::DEBUG << "-------->>>> in LArRodBlockPhysicsV5::getNextEnergy : decode energy....." << "\n";
201 // decode energy
202 if(m_EnergyIndex & 0x1) encodedEnergy = m_EnergyPointer[m_EnergyIndex-1]; // Big/Little Endien stuff
203 else encodedEnergy = m_EnergyPointer[m_EnergyIndex+1]; // Big/Little Endien stuff
204
205 aux = (int32_t) (encodedEnergy&0x1fff);
206 range = (encodedEnergy & 0xc000) >> 14;
207 if(aux==0 && range>0) aux=0x2000;
208 sign = encodedEnergy & 0x2000;
209 aux <<= 3*range;
210 if(sign) aux = -aux;
211 energy = aux;
212
213 // gain in 2 bits of a 32 bits word
214 if(m_GainPointer) {
215 gain = (uint32_t) ((m_GainPointer[m_EnergyIndex>>4] >> ((m_EnergyIndex&0xf)<<1)) & 0x3);
217 } else gain=0xffffffff;
218
219 // Get Time and Quality if the information is present according to summary block
220 uint32_t hasTQ;
222 hasTQ = (uint32_t) ((m_MaskTimeQualityPointer[m_EnergyIndex>>5] >> (m_EnergyIndex&0x1f)) &0x1);
223 else
224 hasTQ = 0;
226 if (m_TimeQualityPointer && hasTQ) // Data has Time and Quality information
227 {
228 //Time is in 10 ps in ByteStream, hence the factor 10 to convert to ps
229 time = 10*(reinterpret_cast<const int16_t *>(m_TimeQualityPointer))[m_TimeQualityIndex++];
231
232#ifdef LARBSDBGOUTPUT
233 m_logstr << MSG::DEBUG <<"This cell has time and Quality information "<<endmsg;
234#endif
235 }
236 else // Data has no Time and Quality information
237 {
238 time=0;
239 quality=-1;
240 }
241
242
243#ifdef LARBSDBGOUTPUT
244 m_logstr << MSG::DEBUG <<"Range = "<<range<<endmsg;
245 m_logstr << MSG::DEBUG <<"Sign = "<<sign<<endmsg;
246 m_logstr << MSG::DEBUG <<" Encoded Energy ="<< MSG::hex << encodedEnergy << MSG::dec << " E=" << energy
247 << " t=" << time
248 << " Q=" << quality
249 << " G=" << gain
250 << " channel Number=" << channelNumber
251 << endmsg;
252#endif
253
254 return 1;
255}
int sign(int a)
const uint16_t * m_TimeQualityPointer
const uint16_t * m_EnergyPointer
time(flags, cells_name, *args, **kw)
setScaleOne setStatusOne setSaturated int16_t

◆ getNextRawData()

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

Reimplemented from LArRodBlockStructure.

Definition at line 223 of file LArRodBlockPhysicsV5.cxx.

224{
225#ifdef LARBSDBGOUTPUT
226 //Debug output
227 m_logstr << MSG::DEBUG << "Let s go in getNextRawData..." << endmsg;
228 m_logstr << MSG::DEBUG << "GetNextRawData for FEB 0x" << MSG::hex << (uint32_t)getHeader32(FEBID) << MSG::dec << endmsg;
229 m_logstr << MSG::DEBUG << "m_RawDataPointer=" << m_RawDataPointer << " m_RawDataIndex="<< m_RawDataIndex
230 << " m_channelsPerFEB=" << m_channelsPerFEB << endmsg;
231#endif
232
233 if (m_RawDataIndex>=m_channelsPerFEB) { //Already beyond maximal number of channels
234#ifdef LARBSDBGOUTPUT
235 m_logstr << MSG::DEBUG << "Maximum number of channels reached" << endmsg;
236#endif
237 return 0;
238 }
239 if (!m_RawDataPointer) { //Block does not exist
240 // Try to get samples and gain from getNextDigits
241 return getNextDigits(channelNumber,samples,gain);
242 }
243
244 // Get next channel
245 unsigned rodChannelNumber=m_RawDataIndex; // Index of Channel in ROD-Block
246 channelNumber=((rodChannelNumber&0xe)<<2) + ((rodChannelNumber&0x1)<<6) + (rodChannelNumber>>4); //channel number of the FEB
247 uint32_t febgain;
248 const unsigned int nsamples = getHeader16(NSamples) & 0xff;
249 const unsigned int ngains = getHeader16(NGains);
250
251#ifdef LARBSDBGOUTPUT
252 m_logstr << MSG::DEBUG << "This FEB has " << nsamples << " samples" << endmsg;
253 m_logstr << MSG::DEBUG << "This FEB has " << ngains << " gains" << endmsg;
254#endif
255
256 if(ngains==0 || nsamples==0) return 0;
257 int s_size = nsamples+1;
258 int offset = (10+nsamples)&0xfffc;
259 int index;
260 index = s_size*m_RawDataIndex + offset;
261 uint16_t s[2];
262 if((nsamples+1)&0x7) {
263 s[0] = m_RawDataPointer[index++]>>2;
264 febgain = m_RawDataPointer[index++];
265 samples.push_back(s[0]);
266 for(unsigned int i=0;i<nsamples/2;i++) {
267 s[1] = m_RawDataPointer[index++]>>2;
268 s[0] = m_RawDataPointer[index++]>>2;
269 samples.push_back(s[0]);
270 samples.push_back(s[1]);
271 }
272 } // End of check for 5 samples
273 else {
274 if (!(m_RawDataIndex%2)) {
275 s[0] = m_RawDataPointer[index++]>>2;
276 febgain = m_RawDataPointer[index++];
277 samples.push_back(s[0]);
278 for(unsigned int i=0;i<nsamples/2;i++) {
279 s[1] = m_RawDataPointer[index++]>>2;
280 s[0] = m_RawDataPointer[index++]>>2;
281 samples.push_back(s[0]);
282 samples.push_back(s[1]);
283 }
284 } else {
285 for(unsigned int i=0;i<nsamples/2;i++) {
286 s[1] = m_RawDataPointer[index++]>>2;
287 s[0] = m_RawDataPointer[index++]>>2;
288 samples.push_back(s[0]);
289 samples.push_back(s[1]);
290 }
291 febgain = m_RawDataPointer[index++];
292 s[0] = m_RawDataPointer[index++]>>2;
293 samples.push_back(s[0]);
294 }
295 } // End of >5 check
296 gain=RawToOfflineGain(febgain);
297
298#ifdef LARBSDBGOUTPUT
299 m_logstr << MSG::DEBUG << " ===> ROD Channel = " << m_RawDataIndex << endmsg;
300 m_logstr << MSG::DEBUG << " ===> FEB Channel = " << channelNumber << endmsg;
301 m_logstr << MSG::DEBUG << " ===> Gain = " << gain << endmsg;
302 for(int i=0;i<nsamples;i++)
303 m_logstr << MSG::DEBUG << " ===> sample " << i << " = " << samples[i] << endmsg;
304 int n = m_RawDataIndex;
305 int32_t e,t,q;
306 uint32_t g;
308#endif
310 unsigned rearrangeFirstSample=0;
312 rearrangeFirstSample=m_rearrangeFirstSample; //Overwrite by jobOptions
313 else
314 rearrangeFirstSample=getFirstSampleIndex();
315 if (rearrangeFirstSample && rearrangeFirstSample<samples.size()) //FIXME: Very ugly hack! See explanation in LArRodDecoder.h file
316 {//Change e.g. 3 0 1 2 4 to 0 1 2 3 4
317 short movedSample=samples[0];
318 for (unsigned i=1;i<=rearrangeFirstSample;i++)
319 samples[i-1]=samples[i];
320 samples[rearrangeFirstSample]=movedSample;
321 }
322#ifdef LARBSDBGOUTPUT
323 m_logstr << MSG::DEBUG << "GetNextRawData for FEB finished 0x" << MSG::hex << (uint32_t)getHeader32(FEBID) << MSG::dec << endmsg;
324#endif
325 return 1;
326}
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 475 of file LArRodBlockStructure.h.

476{
477 return 0;
478}

◆ getNTrigger()

uint16_t LArRodBlockStructure::getNTrigger ( ) const
inlinevirtualinherited

Reimplemented in LArRodBlockAccumulatedV3, LArRodBlockCalibrationV1, LArRodBlockCalibrationV2, and LArRodBlockCalibrationV3.

Definition at line 466 of file LArRodBlockStructure.h.

467{
468 return 0;
469}

◆ getNumberOfGains()

uint32_t LArRodBlockPhysicsV5::getNumberOfGains ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 479 of file LArRodBlockPhysicsV5.cxx.

480{
481 return getHeader16(NGains);
482}

◆ getNumberOfSamples()

uint32_t LArRodBlockPhysicsV5::getNumberOfSamples ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 474 of file LArRodBlockPhysicsV5.cxx.

475{
476 return getHeader16(NSamples);
477}

◆ getNumberOfWords()

uint32_t LArRodBlockStructure::getNumberOfWords ( ) const
inlineinherited

Definition at line 417 of file LArRodBlockStructure.h.

418{
419 return getHeader32(NWTot);
420}

◆ getPulsed()

bool LArRodBlockStructure::getPulsed ( unsigned channelNumber) const
inlinevirtualinherited

◆ getRadd()

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

Reimplemented from LArRodBlockStructure.

Definition at line 499 of file LArRodBlockPhysicsV5.cxx.

500{
501 if(!m_RawDataPointer) {
502 if(!m_RaddPointer) return 0;
503 if(sample%2) sample+=2;
504 return m_RaddPointer[sample];
505 }
506 int index;
507 if(sample==0) index=6;
508 else if(sample & 0x1) index=7+sample-1;
509 else index=7+sample+1;
511 if(adc>=8) return x>>8;
512 return x&0xff;
513}

◆ getRawDataSize()

uint16_t LArRodBlockPhysicsV5::getRawDataSize ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 494 of file LArRodBlockPhysicsV5.cxx.

495{
497}

◆ getResults1Size()

uint16_t LArRodBlockPhysicsV5::getResults1Size ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 484 of file LArRodBlockPhysicsV5.cxx.

485{
486 return getHeader16(ResultsDim1);
487}

◆ getResults2Size()

uint16_t LArRodBlockPhysicsV5::getResults2Size ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 489 of file LArRodBlockPhysicsV5.cxx.

490{
491 return getHeader16(ResultsDim2);
492}

◆ getStatus()

uint32_t LArRodBlockPhysicsV5::getStatus ( ) const
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 539 of file LArRodBlockPhysicsV5.cxx.

540{
541 if(getNumberOfWords()<EventStatus/2) return 0;
543 return x;
544}

◆ getStepIndex()

uint16_t LArRodBlockStructure::getStepIndex ( ) const
inlinevirtualinherited

Reimplemented in LArRodBlockAccumulatedV3, and LArRodBlockCalibrationV3.

Definition at line 471 of file LArRodBlockStructure.h.

472{
473 return 0;
474}

◆ getSumE()

int32_t LArRodBlockStructure::getSumE ( ) const
inlinevirtualinherited

Reimplemented in LArRodBlockPhysicsV6.

Definition at line 315 of file LArRodBlockStructure.h.

315 {
316 return 0;
317}

◆ getTDCPhase()

uint8_t LArRodBlockStructure::getTDCPhase ( ) const
virtualinherited

◆ getVectorHeader16()

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

Definition at line 356 of file LArRodBlockStructure.h.

357{
358 if (n&0x1) //n is an odd number
359 return (std::as_const(*m_vFragment).at(n>>1) & 0xffff);
360 else //n is a even number
361 return (std::as_const(*m_vFragment).at(n>>1) >> 16);
362}

◆ getVectorHeader32()

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

Definition at line 364 of file LArRodBlockStructure.h.

365{
366 return (*m_vFragment)[n>>1];
367}

◆ getVROBEx()

int32_t LArRodBlockPhysicsV5::getVROBEx ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 286 of file LArRodBlockPhysicsV5.h.

287{
288 const int32_t* p = reinterpret_cast<const int32_t*>(m_virtualROBPointerLocal);
289 if(p) return (p[1]>>9);
290 return 0;
291}
const uint32_t * m_virtualROBPointerLocal

◆ getVROBEy()

int32_t LArRodBlockPhysicsV5::getVROBEy ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 293 of file LArRodBlockPhysicsV5.h.

294{
295 const int32_t* p = reinterpret_cast<const int32_t*>(m_virtualROBPointerLocal);
296 if(p) return (p[2]>>9);
297 return 0;
298}

◆ getVROBEz()

int32_t LArRodBlockPhysicsV5::getVROBEz ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 300 of file LArRodBlockPhysicsV5.h.

301{
302 const int32_t* p = reinterpret_cast<const int32_t*>(m_virtualROBPointerLocal);
303 if(p) return (p[3]>>9);
304 return 0;
305}

◆ getVROBFebId()

uint32_t LArRodBlockPhysicsV5::getVROBFebId ( )
inlinevirtual

◆ getVROBSumE()

int32_t LArRodBlockStructure::getVROBSumE ( ) const
inlinevirtualinherited

Reimplemented in LArRodBlockPhysicsV6.

Definition at line 335 of file LArRodBlockStructure.h.

335 {
336 return 0;
337}

◆ hasAccumBlock()

virtual uint32_t LArRodBlockStructure::hasAccumBlock ( ) const
inlinevirtualinherited

Reimplemented in LArRodBlockAccumulatedV3.

Definition at line 121 of file LArRodBlockStructure.h.

121{return 0;} ;

◆ hasCalibBlock()

virtual uint32_t LArRodBlockPhysicsV5::hasCalibBlock ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 78 of file LArRodBlockPhysicsV5.h.

78{return 0;} ;

◆ hasControlWords()

virtual uint32_t LArRodBlockPhysicsV5::hasControlWords ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 81 of file LArRodBlockPhysicsV5.h.

81{return getHeader16(RawDataBlkOff);} ;

◆ hasPhysicsBlock()

virtual uint32_t LArRodBlockPhysicsV5::hasPhysicsBlock ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 79 of file LArRodBlockPhysicsV5.h.

79{return getHeader16(ResultsOff1);} ;

◆ hasRawDataBlock()

virtual uint32_t LArRodBlockPhysicsV5::hasRawDataBlock ( ) const
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 80 of file LArRodBlockPhysicsV5.h.

◆ initializeFEB()

void LArRodBlockPhysicsV5::initializeFEB ( const uint32_t id)
virtual

Reimplemented from LArRodBlockStructure.

Definition at line 570 of file LArRodBlockPhysicsV5.cxx.

571{
573 if (m_vFragment->size()<m_iHeadBlockSize) //Got empty or spoiled fragment
574 {
575 m_vFragment->resize(m_iHeadBlockSize,0); //Initialize FEB-Header
576 setHeader32(FEBID,id); //Set Feb ID
577 // At least 10 (head) + 16 (gain/sumblks) + 64 (energies)
578 m_vFragment->reserve(90);
579 }
580
581 m_SumBlkBlockE1.resize(4);
582 for(unsigned int i=0;i<4;i++) m_SumBlkBlockE1[i]=0x0;
583 m_SumBlkBlockE2.resize(4);
584 for(unsigned int i=0;i<4;i++) m_SumBlkBlockE2[i]=0x0;
585 m_GainBlock.resize(8);
586 for(unsigned int i=0;i<8;i++) m_GainBlock[i]=0x0;
587 m_TimeQualityBlock.resize(6);
588 for(unsigned int i=0;i<6;i++) m_TimeQualityBlock[i]=0x0;
589 m_EnergyBlockEncode.resize(128);
590 for(unsigned int i=0;i<128;i++) m_EnergyBlockEncode[i]=0x0;
591 m_DigitsEncode.clear();
592
594}

◆ initializeFragment()

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

Reimplemented from LArRodBlockStructure.

Definition at line 547 of file LArRodBlockPhysicsV5.cxx.

547 {
548 m_pRODblock=&fragment; //remember pointer to fragment
549 if (fragment.size()>m_iHeadBlockSize) { //Got filled fragment
550 unsigned int sizeRead=0;
551 //Store existing data in the FEB-Map
552 while (sizeRead<fragment.size()) {
553 std::vector<uint32_t>::iterator FebIter;
554 FebIter=fragment.begin()+sizeRead; //Store pointer to current Feb-Header
555 m_FebBlock=&(*FebIter); //Set m_FebBlock in order to use getHeader-functions.
556 uint32_t currFEBid=getHeader32(FEBID); //Get this FEB-ID
557 uint16_t currFebSize=getNumberOfWords(); //Size of this FEB-Block
558 if (FebIter+currFebSize>fragment.end()) {
559 fragment.clear(); //Clear existing vector
560 return;
561 }
562 m_mFebBlocks[currFEBid].assign(FebIter,FebIter+currFebSize); //Copy data from ROD-fragment into FEB-Block
563 sizeRead+=currFebSize+m_MiddleHeaderSize; //6 is the middle header size
564 } // end while
565 }
566 fragment.clear(); //Clear existing vector
567}

◆ LE_getHeader16()

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

Definition at line 394 of file LArRodBlockStructure.h.

395{
396 return (reinterpret_cast<const uint16_t*>(m_FebBlock))[n];
397}

◆ LE_getVectorHeader16()

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

Definition at line 399 of file LArRodBlockStructure.h.

400{
401 const uint32_t* data32 = std::as_const(*m_vFragment).data();
402 const uint16_t* data16 = reinterpret_cast<const uint16_t*> (data32);
403 return data16[n];
404}

◆ LE_setHeader16()

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

Definition at line 406 of file LArRodBlockStructure.h.

407{
408#ifdef LARBYTESTREAMRODBLOCK_CHCKBOUNDARIES
409 if ((unsigned)n>=m_vFragment->size()*2) {
410 m_logstr << MSG::ERROR << "LArRodBlockStructure::LE_setHeader16 Error: WRITE BEYOND ARRAY BOUNDARY!" << endmsg;
411 std::abort();
412 }
413#endif
414 reinterpret_cast<uint16_t*>(m_vFragment->data())[n] = w;
415}

◆ nextFEB()

bool LArRodBlockStructure::nextFEB ( )
inlineinherited

Definition at line 480 of file LArRodBlockStructure.h.

481{
483
484 const int32_t FebOffset = m_FebBlockSize+m_MiddleHeaderSize;
485 const int32_t LeftSize = m_RodBlockSize-FebOffset+m_RodBlock-m_FebBlock;
486 if ( LeftSize<=0 ) return false; //No next feb
487
488 m_FebBlock += FebOffset; //Jump to the next FEB fragment
489 const int32_t BlockSize = getNumberOfWords();
490 if (BlockSize>LeftSize) {
491 m_logstr << MSG::ERROR << "Error while decoding LArByteStream: Found FEB block of size " << BlockSize << " in a ROD block of size " << LeftSize << endmsg;
492 m_error_next_feb = true;
493 return false;
494 }
495
496 m_FebBlockSize=BlockSize;
497
498 setPointers();
499 return true;
500}

◆ offlineCheckSum()

uint32_t LArRodBlockStructure::offlineCheckSum ( ) const
virtualinherited

Reimplemented in LArRodBlockPhysicsV4.

Definition at line 147 of file LArRodBlockStructure.cxx.

148{
149 int end = getNumberOfWords()-3;
150 int start = 1;
151 uint32_t sum = 0;
153 for(int i=start;i<end;i++) {
154 sum += m_FebBlock[i];
155 }
156 return sum & 0x7fffffff;
157}

◆ OfflineToRawGain()

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

Definition at line 342 of file LArRodBlockStructure.h.

343{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 139 of file LArRodBlockStructure.cxx.

140{
141 int offset = getNumberOfWords()-1;
142 if(offset>=m_FebBlockSize) return 0;
143 if(offset<0) return 0;
144 return m_FebBlock[offset];
145}

◆ operator()()

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

Definition at line 857 of file LArRodBlockPhysicsV5.cxx.

859{
860 HWIdentifier id1 = ch1->channelID();
861 HWIdentifier id2 = ch2->channelID();
862
863 HWIdentifier febId1= m_onlineHelper->feb_Id(id1);
864 HWIdentifier febId2= m_onlineHelper->feb_Id(id2);
865
866 if(febId1 == febId2 ){
867 int cId1 = m_onlineHelper->channel(id1);
868 int cId2 = m_onlineHelper->channel(id2);
869 return FebToRodChannel(cId1) < FebToRodChannel(cId2);
870 }
871
872 return febId1 < febId2 ;
873}
virtual int FebToRodChannel(int ch) const

◆ RawToOfflineGain()

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

Definition at line 339 of file LArRodBlockStructure.h.

340{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 173 of file LArRodBlockStructure.h.

173{ return m_error_next_feb;}

◆ resetPointers()

void LArRodBlockPhysicsV5::resetPointers ( )
privatevirtual

◆ setBit()

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

Definition at line 433 of file LArRodBlockStructure.h.

434{
435 // chan = (0,127)
436 // int a = chan/32;
437 // int r = chan%32;
438 int a = chan>>5;
439 int r = chan&0x1f;
440 // a = (0,3), r = ( 0, 31 )
441 *(p+a) |= (1<<r) ;
442 return;
443}

◆ setDAC()

void LArRodBlockStructure::setDAC ( const uint16_t DACValue)
virtualinherited

Reimplemented in LArRodBlockCalibrationV0< DSPHEADER >.

Definition at line 54 of file LArRodBlockStructure.cxx.

55{
56 m_logstr << MSG::ERROR << "Error: Function setDAC not implemented in this instance of LArRodBlockStructure!" << endmsg;
57}

◆ setDelay()

void LArRodBlockStructure::setDelay ( const uint16_t DelayValue)
virtualinherited

Reimplemented in LArRodBlockCalibrationV0< DSPHEADER >.

Definition at line 59 of file LArRodBlockStructure.cxx.

60{
61 m_logstr << MSG::ERROR << "Error: Function setDelay not implemented in this instance of LArRodBlockStructure!" << endmsg;
62}

◆ setE()

void LArRodBlockPhysicsV5::setE ( unsigned index,
double E )
inlineprivate

Definition at line 312 of file LArRodBlockPhysicsV5.h.

312 {
313
314 union {
315 int32_t i;
316 uint16_t us[2];
317 } conv;
318 conv.i = static_cast<int32_t>(E);
319 // Write as multiplication, not as left shift, since left-shifting
320 // a negative number is undefined in C++.
321 // Compiles to the same code on x86_64.
322 conv.i *= (1<<9);
323 if ( m_TimeQualityBlock.size()>=6 ){
326 }
327}

◆ 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 110 of file LArRodBlockStructure.cxx.

111{
112 m_logstr << MSG::ERROR << "Error: Function setEtQ not implemented in this instance of LArRodBlockStructure!" << endmsg;
113}

◆ setEx()

void LArRodBlockPhysicsV5::setEx ( double Ex)
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 330 of file LArRodBlockPhysicsV5.h.

330 {
331 setE (0, Ex);
332}
void setE(unsigned index, double E)

◆ setEy()

void LArRodBlockPhysicsV5::setEy ( double Ey)
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 335 of file LArRodBlockPhysicsV5.h.

335 {
336 setE (2, Ey);
337}

◆ setEz()

void LArRodBlockPhysicsV5::setEz ( double Ez)
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 340 of file LArRodBlockPhysicsV5.h.

340 {
341 setE (4, Ez);
342}

◆ setFirstSample()

void LArRodBlockStructure::setFirstSample ( const int rearrangeFirstSample)
inlineinherited

Definition at line 166 of file LArRodBlockStructure.h.

167 {m_rearrangeFirstSample=rearrangeFirstSample;}

◆ setFragment()

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

Definition at line 248 of file LArRodBlockStructure.h.

249{
251 m_FebBlock = p;
254 uint32_t BlockSize = 0;
255
256 if (n==0) {
257 m_logstr << MSG::ERROR << "Error while decoding LArByteStream: Got Rod block size 0" << endmsg;
258 return false;
259 }
260
261 BlockSize = getNumberOfWords();
262 if (BlockSize>n) {
263 m_logstr << MSG::ERROR << "Error while decoding LArByteStream: Found FEB block of size " << BlockSize << " in a ROD block of size " << n << endmsg;
264 return false;
265 }
266 m_FebBlockSize = BlockSize;
267
268 m_error_next_feb = false;
269
270 return setPointers();
271}

◆ setFragmentVirtualROB()

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

Definition at line 275 of file LArRodBlockStructure.h.

277{
282 if ( n<2 ) { m_logstr << MSG::ERROR << "Error" << endmsg; return 0;}
283 m_virtualROBJump = ((*p)>>16)>>1; // Divide by two (two FEBs-1ROB)
284 m_ROB_to_decode = ( (*p) & 0xFFFF )<<1; // Multiply by two
285 if ( (n - m_virtualROBJump*m_ROB_to_decode-1) ){
286 m_logstr << MSG::ERROR << "Error AGAIN" << endmsg;
287 return 0;
288 }
290 return m_ROB_to_decode;
291}

◆ setGain()

virtual int LArRodBlockPhysicsV5::setGain ( const int )
inlinevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 93 of file LArRodBlockPhysicsV5.h.

93{ return 1; };

◆ setHeader16()

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

Definition at line 369 of file LArRodBlockStructure.h.

370{
371#ifdef LARBYTESTREAMRODBLOCK_CHCKBOUNDARIES
372 if ((unsigned)n>=m_vFragment->size()*2) {
373 m_logstr << MSG::ERROR << "Error WRITE BEYOND ARRAY BOUNDARY!" << endmsg;
374 std::abort();
375 }
376#endif
377 if (n&0x1) // n is an odd number
378 m_vFragment->at(n>>1)=((m_vFragment->at(n>>1) & 0xffff0000) | w);
379 else
380 m_vFragment->at(n>>1)=((m_vFragment->at(n>>1) & 0xffff) | (w << 16));
381}

◆ setHeader32()

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

Definition at line 383 of file LArRodBlockStructure.h.

384{
385#ifdef LARBYTESTREAMRODBLOCK_CHCKBOUNDARIES
386 if ((unsigned)n>=m_vFragment->size()*2) {
387 m_logstr << MSG::ERROR << "Error WRITE BEYOND ARRAY BOUNDARY!" << endmsg
388 std::abort();
389 }
390#endif
391 m_vFragment->at(n>>1) = w;
392}

◆ setNextEnergy() [1/2]

void LArRodBlockPhysicsV5::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 596 of file LArRodBlockPhysicsV5.cxx.

598{
599 int rcNb=FebToRodChannel(channel);
600 //rcNb is supposed to be equal or bigger than m_EIndex.
601 //In the latter case, we fill up the missing channels with zero
602 if (rcNb<m_EnergyIndex) {
603 return;
604 }
605
606 //Fill up missing channels with zeros:
607 while (m_EnergyIndex<rcNb)
608 setNextEnergy((int16_t)0,(int16_t)32767,(int16_t)-32767,(uint32_t)0);
609
610 // transform 32 bits data into 16 bits data
611
612 uint16_t theenergy;
613 uint32_t abse,EncodedE;
614 int16_t thetime,thequality;
615 int32_t sign;
616
617 //Time is in 10 ps in ByteStream, hence the factor 10 to convert from ps
618 thetime = (int16_t) time/10;
619 thequality = (int16_t) quality;
620
621 sign=(energy>=0?1:-1); // get sign of energy
622 abse=(uint32_t)abs(energy);
623
624 EncodedE=abse; // range 0
625
626 if ((abse>8192)&&(abse<65536))
627 {
628 EncodedE=((abse>>3)|0x4000); // range 1 : drop last 3 bits and put range bits (bits 14 and 13 = 01)
629 }
630 else if ((abse>65535)&&(abse<524288))
631 {
632 EncodedE=((abse>>6)|0x8000); // range 2 : drop last 6 bits and put range bits (bits 14 and 13 = 10)
633 }
634 else if ((abse>524288))
635 {
636 EncodedE=((abse>>9)|0xc000); // range 3 : drop last 9 bits and put range bits (bits 14 and 13 = 11)
637 }
638
639 // treat sign now :
640
641 if (sign<0) EncodedE |= 0x2000;
642 theenergy = (uint16_t) EncodedE;
643
644 // Add data...
645
646 if (abse> m_EnergyThreshold1)
647 {
648 setNextEnergy(theenergy,thetime,thequality,gain);
649 }
650 else
651 {
652 setNextEnergy(theenergy,(int16_t)32767,(int16_t)-32767,gain);
653 }
654}

◆ setNextEnergy() [2/2]

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

Definition at line 657 of file LArRodBlockPhysicsV5.cxx.

658{
659 if (m_EnergyIndex>=m_channelsPerFEB) //Use m_EIndex to count total number of channels
660 {
661 return;
662 }
663
664 // Energy
665 int endianindex;
666 if (m_EnergyIndex & 0x1) endianindex = m_EnergyIndex-1;
667 else endianindex = m_EnergyIndex+1;
668 m_EnergyBlockEncode[endianindex] = energy;
669
670 // Find correct position
671
672 // update summary block
673 // Gain is composed of two bits per cell
674 uint16_t gain_idx=m_EnergyIndex>>4;
675 uint16_t gain_bit=(m_EnergyIndex&0xf)*2;
677 m_GainBlock[gain_idx] |= (gain1 << gain_bit);
678
679 // write Time and Chi2 for cells above HighEnergyCellCut threshold
680
681 if (quality!=-32767) // Do write Time and Chi2 information
682 {
683 // count the number of hot cells
685 // count the number of cells offtime
686 if (abs(time)>m_OffTimeCut) m_numberHotCellOffTime++;
687 uint16_t mask_idx=m_EnergyIndex>>5;
688 uint16_t mask_bit=(m_EnergyIndex&0x1f);
689 m_SumBlkBlockE1[mask_idx] |= (0x1 << mask_bit);
690
691 m_TimeQualityBlock.push_back(*((uint16_t*)&time));
692 m_TimeQualityBlock.push_back(*((uint16_t*)&quality));
693 }
694 m_EnergyIndex++; //Use m_EIndex to count the channels put in the Energy block
695
696}
uint32_t OfflineToRawGain(const uint32_t gain) const

◆ setNTrigger()

void LArRodBlockStructure::setNTrigger ( const uint16_t NTrigger)
virtualinherited

Definition at line 69 of file LArRodBlockStructure.cxx.

70{
71 m_logstr << MSG::ERROR << "Error: Function setNTrigger not implemented in this instance of LArRodBlockStructure!" << endmsg;
72}

◆ setNumberOfGains()

void LArRodBlockStructure::setNumberOfGains ( const uint8_t n)
virtualinherited

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

Definition at line 125 of file LArRodBlockStructure.cxx.

126{
127 m_logstr << MSG::ERROR << "Error: Function setNumberOfGains not implemented in this instance of LArRodBlockStructure!" << endmsg;
128}

◆ setNumberOfSamples()

void LArRodBlockStructure::setNumberOfSamples ( const uint8_t n)
virtualinherited

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

Definition at line 120 of file LArRodBlockStructure.cxx.

121{
122 m_logstr << MSG::ERROR << "Error: Function setNumberOfSamples not implemented in this instance of LArRodBlockStructure!" << endmsg;
123}

◆ setPointers()

bool LArRodBlockPhysicsV5::setPointers ( )
privatevirtual

Reimplemented from LArRodBlockStructure.

Definition at line 74 of file LArRodBlockPhysicsV5.cxx.

75{
77 {
78 int off = -8;
79 int ns = getHeader16(NSamples) & 0xff;
80 if (m_requiredNSamples > 0 && m_requiredNSamples != ns) return false;
81 int radd = (ns+1)/2;
82 int dim1 = getHeader16(ResultsDim1);
83 int off1 = getHeader16(ResultsOff1);
84 int off2 = getHeader16(ResultsOff2);
85 int dim2 = getHeader16(ResultsDim2);
86 int off3 = getHeader16(RawDataBlkOff);
87 int dim3 = getHeader16(RawDataBlkDim);
88
89 if (off1 && dim1+off1+off<m_FebBlockSize) {
90 off1 += off;
91 if (dim1>=8)
92 m_GainPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+off1);
93 if (dim1>=12)
94 m_MaskTimeQualityPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+off1+8);
95 if (dim1>=16)
96 m_MaskDigitsPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+off1+12);
97 if (dim1>=16+radd)
98 m_RaddPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off1+16);
99 if (dim1>=80+radd)
100 m_EnergyPointer=reinterpret_cast<const uint16_t*> (m_FebBlock+off1+16+radd);
101 if (dim1>=83+radd)
102 m_SumPointer=reinterpret_cast<const int32_t*>(m_FebBlock+off1+80+radd);
103 if (dim1>83+radd)
104 m_TimeQualityPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off1+83+radd);
105 off1 -= off;
106 }
107 if (off2 && dim2+off2+off<m_FebBlockSize) {
108 m_DigitsPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off2+off);
109 }
110 if (off3 && dim3+off3+off<m_FebBlockSize) {
111 m_RawDataPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off3+off);
112 }
113
114 // Check for offsets problems
115 uint32_t problem = 0;
116 int n1, n2;
117 int n1_tmp, n2_tmp;
118 int off1_tmp, dim1_tmp;
119 int off2_tmp, dim2_tmp;
120 int off3_tmp, dim3_tmp;
121 if(off1==0) {
122 n1 = n2 = 0;
123 n1_tmp = n2_tmp =0;
124 off1_tmp = dim1_tmp = 0;
125 off2_tmp = dim2_tmp = 0;
126 off3_tmp = dim3_tmp = 0;
127 }
128 else {
129 m_RaddPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+26);
130 m_MaskTimeQualityPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+18);
131 m_MaskDigitsPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+22);
132 n1 = getNbSweetCells1();
133 n2 = getNbSweetCells2();
134 n1_tmp = getNbSweetCells1FromMask();
135 n2_tmp = getNbSweetCells2FromMask();
136 off1_tmp = 10-off;
137 dim1_tmp = 83+(ns+1)/2+n1;
138 if ( m_requiredNSamples > 0 )
139 dim1_tmp = 83 +(m_requiredNSamples+1)/2+n1;
140 off2_tmp = off1_tmp+dim1_tmp;
141 dim2_tmp = (n2*ns+1)/2;
142 off3_tmp = off2_tmp+dim2_tmp;
143 dim3_tmp = getNumberOfWords()-3-off3_tmp-off;
144 if(dim2_tmp==0) off2_tmp = 0;
145 if(dim3_tmp==0) off3_tmp = 0;
146 }
147
148 if(off1 != off1_tmp) problem=1;
149 if(dim1 != dim1_tmp) problem=2;
150 if(off2 != off2_tmp) problem=3;
151 if(dim2 != dim2_tmp) problem=4;
152 if(off3 != off3_tmp) problem=5;
153 if(dim3 != dim3_tmp) problem=6;
154 if(n1 != n1_tmp) problem=7;
155 if(n2 != n2_tmp) problem=8;
156 if (m_requiredNSamples > 0 &&
157 getHeader32(NGains) != (uint32_t)0x10000 + m_requiredNSamples) problem=9;
158 if(problem) { // Try to recompute offsets
159 m_logstr << MSG::ERROR << "LArByteStreamProblem " << problem << endmsg;
160 m_logstr << MSG::ERROR << "NSamples = " << std::dec << ns << endmsg;
161 m_logstr << MSG::ERROR << "getHeader32(NGains) = " << std::hex << getHeader32(NGains) << endmsg;
162 m_logstr << MSG::ERROR << "NWTot: " << std::hex << getNumberOfWords() << " n1=" << n1 << " (" << n1_tmp << ") n2=" << n2 << " (" << n2_tmp << ")" << endmsg;
163 m_logstr << MSG::ERROR << "Found 1: " << off1 << " " << dim1 << endmsg;
164 m_logstr << MSG::ERROR << "Found 2: " << off2 << " " << dim2 << endmsg;
165 m_logstr << MSG::ERROR << "Found 3: " << off3 << " " << dim3 << std::dec << endmsg;
166
167 if(n1==n1_tmp && n2==n2_tmp) { // Check consistency of cells above threshold
168 off1 = off1_tmp;
169 dim1 = dim1_tmp;
170 off2 = off2_tmp;
171 dim2 = dim2_tmp;
172 off3 = off3_tmp;
173 dim3 = dim3_tmp;
174 m_logstr << MSG::ERROR << "Recomputed 1: " << std::hex << off1 << " " << dim1 << endmsg;
175 m_logstr << MSG::ERROR << "Recomputed 2: " << off2 << " " << dim2 << endmsg;
176 m_logstr << MSG::ERROR << "Recomputed 3: " << off3 << " " << dim3 << std::dec << endmsg;
177
178 if (off1 && dim1+off1+off<m_FebBlockSize) {
179 off1 += off;
180 if (dim1>=8)
181 m_GainPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+off1);
182 if (dim1>=12)
183 m_MaskTimeQualityPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+off1+8);
184 if (dim1>=16)
185 m_MaskDigitsPointer=reinterpret_cast<const uint32_t*>(m_FebBlock+off1+12);
186 if (dim1>=16+radd)
187 m_RaddPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off1+16);
188 if (dim1>=80+radd)
189 m_EnergyPointer=reinterpret_cast<const uint16_t*> (m_FebBlock+off1+16+radd);
190 if (dim1>=83+radd)
191 m_SumPointer=reinterpret_cast<const int32_t*>(m_FebBlock+off1+80+radd);
192 if (dim1>83+radd)
193 m_TimeQualityPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off1+83+radd);
194 }
195 if (off2 && dim2+off2+off<m_FebBlockSize) {
196 m_DigitsPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off2+off);
197 }
198 if (off3 && dim3+off3+off<m_FebBlockSize) {
199 m_RawDataPointer=reinterpret_cast<const uint16_t*>(m_FebBlock+off3+off);
200 }
201 }
202 }
203
204 problem=0;
205 // Recheck offsets
206 if(off1< off2 && off1 + dim1 > off2) problem = 1;
207 if(off1< off3 && off1 + dim1 > off3) problem = 2;
208 if(off2< off1 && off2 + dim2 > off1) problem = 3;
209 if(off2< off3 && off2 + dim2 > off3) problem = 4;
210 if(off3< off1 && off3 + dim3 > off1) problem = 5;
211 if(off3< off2 && off3 + dim3 > off2) problem = 6;
212
213 if(problem) {
215 m_logstr << MSG::ERROR << "LArByteStreamProblem " << problem << endmsg;
216 m_logstr << MSG::ERROR << "Unrecoverable problem" << endmsg;
217 }
218 }
219
220 return true;
221}
virtual uint16_t getNbSweetCells2() const
uint16_t getNbSweetCells1FromMask() const
uint16_t getNbSweetCells2FromMask() const
virtual uint16_t getNbSweetCells1() const

◆ setPulsed()

void LArRodBlockStructure::setPulsed ( const unsigned channelNumber)
virtualinherited

Reimplemented in LArRodBlockCalibrationV0< DSPHEADER >.

Definition at line 64 of file LArRodBlockStructure.cxx.

65{
66 m_logstr << MSG::ERROR << "Error: Function setPulsed not implemented in this instance of LArRodBlockStructure!" << endmsg;
67}

◆ setRawData()

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

Reimplemented from LArRodBlockStructure.

Definition at line 698 of file LArRodBlockPhysicsV5.cxx.

698 {
699
700 // First of all, set the bits
701 int cchIdx = FebToRodChannel(chIdx);
702 uint16_t mask_idx=cchIdx>>5;
703 uint16_t mask_bit=(cchIdx&0x1f);
704 m_SumBlkBlockE2[mask_idx] |= (0x1 << mask_bit);
705 for(std::vector<short>::const_iterator i=samples.begin();i!=samples.end();++i){
706 m_DigitsEncode.push_back((*i)<<2);
707 }
708}

◆ setRawDataFixed()

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

Reimplemented in LArRodBlockTransparentV0< DSPHEADER >.

Definition at line 115 of file LArRodBlockStructure.cxx.

116{
117 m_logstr << MSG::ERROR << "Error: Function setRawDataFixed not implemented in this instance of LArRodBlockStructure!" << endmsg;
118}

◆ setRequiredNSamples()

void LArRodBlockPhysicsV5::setRequiredNSamples ( unsigned short ns)
inline

Definition at line 107 of file LArRodBlockPhysicsV5.h.

◆ setSumE()

void LArRodBlockStructure::setSumE ( double )
virtualinherited

Reimplemented in LArRodBlockPhysicsV6.

Definition at line 195 of file LArRodBlockStructure.cxx.

196{
197 // Do not set anything
198}

◆ setTDCPhase()

void LArRodBlockStructure::setTDCPhase ( const uint8_t n)
virtualinherited

Reimplemented in LArRodBlockTransparentV0< DSPHEADER >.

Definition at line 130 of file LArRodBlockStructure.cxx.

131{
132 m_logstr << MSG::ERROR << "Error: Function setTDCPhase not implemented in this instance of LArRodBlockStructure!" << endmsg;
133}

◆ sortDataVector() [1/5]

Reimplemented from LArRodBlockStructure.

Definition at line 90 of file LArRodBlockStructure.cxx.

216{}

◆ sortDataVector() [2/5]

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

Reimplemented from LArRodBlockStructure.

Definition at line 91 of file LArRodBlockStructure.cxx.

219{}

◆ sortDataVector() [3/5]

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

Reimplemented from LArRodBlockStructure.

Definition at line 89 of file LArRodBlockStructure.cxx.

213{}

◆ sortDataVector() [4/5]

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

Reimplemented from LArRodBlockStructure.

Definition at line 113 of file LArRodBlockPhysicsV5.h.

114 {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.

207{}

Member Data Documentation

◆ m_channelsPerFEB

int LArRodBlockStructure::m_channelsPerFEB
protectedinherited

Definition at line 219 of file LArRodBlockStructure.h.

◆ m_DigitsChannel

int LArRodBlockPhysicsV5::m_DigitsChannel = 0
private

Definition at line 137 of file LArRodBlockPhysicsV5.h.

◆ m_DigitsEncode

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

Definition at line 132 of file LArRodBlockPhysicsV5.h.

◆ m_DigitsIndex

int LArRodBlockPhysicsV5::m_DigitsIndex = 0
private

Definition at line 136 of file LArRodBlockPhysicsV5.h.

◆ m_DigitsPointer

const uint16_t* LArRodBlockPhysicsV5::m_DigitsPointer = nullptr
private

Definition at line 146 of file LArRodBlockPhysicsV5.h.

◆ m_EnergyBlockEncode

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

Definition at line 131 of file LArRodBlockPhysicsV5.h.

◆ m_EnergyIndex

int LArRodBlockPhysicsV5::m_EnergyIndex = 0
private

Definition at line 134 of file LArRodBlockPhysicsV5.h.

◆ m_EnergyPointer

const uint16_t* LArRodBlockPhysicsV5::m_EnergyPointer = nullptr
private

Definition at line 143 of file LArRodBlockPhysicsV5.h.

◆ m_EnergyThreshold1

uint16_t LArRodBlockPhysicsV5::m_EnergyThreshold1
private

Definition at line 154 of file LArRodBlockPhysicsV5.h.

◆ m_EnergyThreshold2

uint16_t LArRodBlockPhysicsV5::m_EnergyThreshold2
private

Definition at line 155 of file LArRodBlockPhysicsV5.h.

◆ m_error_next_feb

bool LArRodBlockStructure::m_error_next_feb
protectedinherited

Definition at line 237 of file LArRodBlockStructure.h.

◆ m_Ex

int32_t LArRodBlockStructure::m_Ex
protectedinherited

Definition at line 203 of file LArRodBlockStructure.h.

◆ m_Ey

int32_t LArRodBlockStructure::m_Ey
protectedinherited

Definition at line 204 of file LArRodBlockStructure.h.

◆ m_Ez

int32_t LArRodBlockStructure::m_Ez
protectedinherited

Definition at line 205 of file LArRodBlockStructure.h.

◆ m_FebBlock

const uint32_t* LArRodBlockStructure::m_FebBlock
protectedinherited

Definition at line 221 of file LArRodBlockStructure.h.

◆ m_FebBlockSize

int32_t LArRodBlockStructure::m_FebBlockSize
protectedinherited

Definition at line 223 of file LArRodBlockStructure.h.

◆ m_FebInfoBlock

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

Definition at line 128 of file LArRodBlockPhysicsV5.h.

◆ m_fixedGain

int LArRodBlockPhysicsV5::m_fixedGain
private

Definition at line 150 of file LArRodBlockPhysicsV5.h.

◆ m_GainBlock

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

Definition at line 127 of file LArRodBlockPhysicsV5.h.

◆ m_GainPointer

const uint32_t* LArRodBlockPhysicsV5::m_GainPointer = nullptr
private

Definition at line 139 of file LArRodBlockPhysicsV5.h.

◆ m_iHeadBlockSize

unsigned short LArRodBlockStructure::m_iHeadBlockSize
protectedinherited

Definition at line 217 of file LArRodBlockStructure.h.

◆ m_logstr

MsgStream LArRodBlockStructure::m_logstr
protectedinherited

Definition at line 244 of file LArRodBlockStructure.h.

◆ m_MaskDigitsPointer

const uint32_t* LArRodBlockPhysicsV5::m_MaskDigitsPointer = nullptr
private

Definition at line 141 of file LArRodBlockPhysicsV5.h.

◆ m_MaskTimeQualityPointer

const uint32_t* LArRodBlockPhysicsV5::m_MaskTimeQualityPointer = nullptr
private

Definition at line 140 of file LArRodBlockPhysicsV5.h.

◆ m_mFebBlocks

FEBMAPTYPE LArRodBlockStructure::m_mFebBlocks
protectedinherited

Definition at line 228 of file LArRodBlockStructure.h.

◆ m_MiddleHeaderSize

int32_t LArRodBlockStructure::m_MiddleHeaderSize
protectedinherited

Definition at line 233 of file LArRodBlockStructure.h.

◆ m_numberHotCell

uint16_t LArRodBlockPhysicsV5::m_numberHotCell = 0U
private

Definition at line 151 of file LArRodBlockPhysicsV5.h.

◆ m_numberHotCellOffTime

uint16_t LArRodBlockPhysicsV5::m_numberHotCellOffTime
private

Definition at line 152 of file LArRodBlockPhysicsV5.h.

◆ m_numberOfEx

uint32_t LArRodBlockStructure::m_numberOfEx
protectedinherited

Definition at line 210 of file LArRodBlockStructure.h.

◆ m_numberOfEy

uint32_t LArRodBlockStructure::m_numberOfEy
protectedinherited

Definition at line 211 of file LArRodBlockStructure.h.

◆ m_numberOfEz

uint32_t LArRodBlockStructure::m_numberOfEz
protectedinherited

Definition at line 212 of file LArRodBlockStructure.h.

◆ m_numberOfSumE

uint32_t LArRodBlockStructure::m_numberOfSumE
protectedinherited

Definition at line 213 of file LArRodBlockStructure.h.

◆ m_OfflineToRawGainMap

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

Definition at line 17 of file LArRodBlockStructure.h.

◆ m_OffTimeCut

int16_t LArRodBlockPhysicsV5::m_OffTimeCut
private

Definition at line 156 of file LArRodBlockPhysicsV5.h.

◆ m_onlineHelper

const LArOnlineID* LArRodBlockPhysicsV5::m_onlineHelper
private

Definition at line 159 of file LArRodBlockPhysicsV5.h.

◆ m_pRODblock

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

Definition at line 226 of file LArRodBlockStructure.h.

◆ m_RaddPointer

const uint16_t* LArRodBlockPhysicsV5::m_RaddPointer = nullptr
private

Definition at line 142 of file LArRodBlockPhysicsV5.h.

◆ m_RawDataBlock

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

Definition at line 130 of file LArRodBlockPhysicsV5.h.

◆ m_RawDataIndex

int LArRodBlockPhysicsV5::m_RawDataIndex = 0
private

Definition at line 138 of file LArRodBlockPhysicsV5.h.

◆ m_RawDataPointer

const uint16_t* LArRodBlockPhysicsV5::m_RawDataPointer = nullptr
private

Definition at line 147 of file LArRodBlockPhysicsV5.h.

◆ m_RawToOfflineGainMap

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

Definition at line 16 of file LArRodBlockStructure.h.

◆ m_rearrangeFirstSample

unsigned int LArRodBlockStructure::m_rearrangeFirstSample
protectedinherited

Definition at line 235 of file LArRodBlockStructure.h.

◆ m_requiredNSamples

unsigned short LArRodBlockPhysicsV5::m_requiredNSamples
private

Definition at line 158 of file LArRodBlockPhysicsV5.h.

◆ m_ROB_to_decode

int32_t LArRodBlockStructure::m_ROB_to_decode
protectedinherited

Definition at line 240 of file LArRodBlockStructure.h.

◆ m_RodBlock

const uint32_t* LArRodBlockStructure::m_RodBlock
protectedinherited

Definition at line 222 of file LArRodBlockStructure.h.

◆ m_RodBlockSize

int32_t LArRodBlockStructure::m_RodBlockSize
protectedinherited

Definition at line 224 of file LArRodBlockStructure.h.

◆ m_SumBlkBlockE1

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

Definition at line 125 of file LArRodBlockPhysicsV5.h.

◆ m_SumBlkBlockE2

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

Definition at line 126 of file LArRodBlockPhysicsV5.h.

◆ m_SumE

int32_t LArRodBlockStructure::m_SumE
protectedinherited

Definition at line 206 of file LArRodBlockStructure.h.

◆ m_SumPointer

const int32_t* LArRodBlockPhysicsV5::m_SumPointer = nullptr
private

Definition at line 144 of file LArRodBlockPhysicsV5.h.

◆ m_TimeQualityBlock

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

Definition at line 129 of file LArRodBlockPhysicsV5.h.

◆ m_TimeQualityIndex

int LArRodBlockPhysicsV5::m_TimeQualityIndex = 0
private

Definition at line 135 of file LArRodBlockPhysicsV5.h.

◆ m_TimeQualityPointer

const uint16_t* LArRodBlockPhysicsV5::m_TimeQualityPointer = nullptr
private

Definition at line 145 of file LArRodBlockPhysicsV5.h.

◆ m_vFragment

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

Definition at line 225 of file LArRodBlockStructure.h.

◆ m_virtualROBJump

uint32_t LArRodBlockStructure::m_virtualROBJump
protectedinherited

Definition at line 239 of file LArRodBlockStructure.h.

◆ m_virtualROBPointer

const uint32_t* LArRodBlockStructure::m_virtualROBPointer
protectedinherited

Definition at line 241 of file LArRodBlockStructure.h.

◆ m_virtualROBPointerLocal

const uint32_t* LArRodBlockStructure::m_virtualROBPointerLocal
protectedinherited

Definition at line 242 of file LArRodBlockStructure.h.


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