Hall A ROOT/C++ Analyzer (podd)
Loading...
Searching...
No Matches
Fadc250Module.h
Go to the documentation of this file.
1#ifndef Podd_Fadc250Module_h_
2#define Podd_Fadc250Module_h_
5//
6// Fadc250Module
7// JLab FADC 250 Module
8//
12#include <vector>
13#include <cstdint>
14#include <cstring> // for memset
16namespace Decoder {
20 public:
23 Fadc250Module( UInt_t crate, UInt_t slot );
24 virtual ~Fadc250Module();
29 virtual void Clear( Option_t *opt="" );
30 virtual void Init();
31 virtual void CheckDecoderStatus() const;
32 virtual UInt_t GetPulseIntegralData( UInt_t chan, UInt_t ievent ) const;
34 virtual UInt_t GetPulseTimeData( UInt_t chan, UInt_t ievent ) const;
35 virtual UInt_t GetPulseCoarseTimeData( UInt_t chan, UInt_t ievent ) const;
36 virtual UInt_t GetPulseFineTimeData( UInt_t chan, UInt_t ievent ) const;
37 virtual UInt_t GetPulsePeakData( UInt_t chan, UInt_t ievent ) const;
38 virtual UInt_t GetPulsePedestalData( UInt_t chan, UInt_t ievent ) const;
39 virtual UInt_t GetPulseSamplesData( UInt_t chan, UInt_t ievent ) const;
40 virtual UInt_t GetPedestalQuality( UInt_t chan, UInt_t ievent ) const;
41 virtual UInt_t GetOverflowBit( UInt_t chan, UInt_t ievent ) const;
42 virtual UInt_t GetUnderflowBit( UInt_t chan, UInt_t ievent ) const;
43 virtual std::vector<uint32_t> GetPulseSamplesVector( UInt_t chan ) const;
44 virtual Int_t GetFadcMode() const;
45 virtual Int_t GetMode() const { return GetFadcMode(); };
46 virtual UInt_t GetNumFadcEvents( UInt_t chan ) const;
47 virtual UInt_t GetNumFadcSamples( UInt_t chan, UInt_t ievent ) const;
48 virtual UInt_t LoadSlot( THaSlotData* sldat, const UInt_t* evbuffer, const UInt_t* pstop );
49 virtual UInt_t LoadSlot( THaSlotData* sldat, const UInt_t* evbuffer, UInt_t pos, UInt_t len );
50 virtual Int_t Decode( const UInt_t* data );
51 virtual Bool_t IsMultiFunction() { return true; }
53 virtual UInt_t GetData( Decoder::EModuleType mtype, UInt_t chan, UInt_t ievent ) const;
54 virtual UInt_t GetNumEvents( Decoder::EModuleType mtype, UInt_t ichan ) const;
55 virtual UInt_t GetNumEvents() const { return GetNumEvents(0); } ;
56 virtual UInt_t GetNumEvents( UInt_t ichan) const { return GetNumFadcEvents(ichan); } ;
57 virtual UInt_t GetNumSamples( UInt_t ichan) const { return GetNumFadcSamples(ichan, 0);};
58 virtual UInt_t GetTriggerTime() const;
59
60 private:
61
62 static const size_t NADCCHAN = 16;
63
65 // Header data objects
66 uint32_t slot_blk_hdr, mod_id, iblock_num, nblock_events; // Block header objects
67 uint32_t PL, NSA, NSB; // Block header objects cont.
68 uint32_t slot_blk_trl, nwords_inblock; // Block trailer objects
69 uint32_t slot_evt_hdr, evt_num; // Event header objects (pre 0x0C00)
70 uint32_t eh_trig_time, trig_num; // Event header objects (post 0x0C00)
71 uint32_t trig_time_w1, trig_time_w2; // Trigger time objects
72 uint64_t trig_time; // Trigger time objects cont.
73 // Window raw data objects
74 uint32_t chan, win_width; // FADC channel, window width
75 uint32_t samples; // FADC raw data samples
76 bool overflow, invalid_samples; // True if any sample's "overflow" or "not valid" bit set, respectively
77 // Pulse raw data objects
78 uint32_t pulse_num, sample_num_tc; // FADC pulse number, sample number of threshold crossing
79 // Pulse integral data objects
80 uint32_t qual_factor, pulse_integral; // FADC quality factor, pulse integral
81 // Pulse time data objects
82 uint32_t coarse_pulse_time, fine_pulse_time, time; // FADC pulse coarse time, pulse fine time, pulse time
83 // Pulse pedestal data objects
84 uint32_t pedestal, pulse_peak, pedestal_sum; // FADC pedestal, pulse peak value
85 // Scaler data objects
86 uint32_t scaler_words; // FADC scaler words
87 // Event block objects
88 uint32_t evnt_of_blk; // FADC event block information
89 // Integral word objects
90 uint32_t nsa_ext, sample_sum; // FADC pulse parameters
91 uint32_t samp_overflow, samp_underflow, samp_over_thresh; // FADC pulse parameters
92 // Time word object
93 uint32_t peak_beyond_nsa, peak_not_found, peak_above_maxped; // FADC pulse parameters
94 void clear() { memset(this, 0, sizeof(fadc_data_struct)); }
95 } __attribute__((aligned(128))) fadc_data; // fadc_data_struct
96
98 std::vector<uint32_t> integral, time, peak, pedestal;
99 std::vector<uint32_t> samples, coarse_time, fine_time;
100 std::vector<uint32_t> pedestal_quality, overflow, underflow;
101 void clear() {
102 integral.clear(); time.clear(); peak.clear(); pedestal.clear();
103 samples.clear(); coarse_time.clear(); fine_time.clear();
104 pedestal_quality.clear(); overflow.clear(); underflow.clear();
105 }
106 } __attribute__((aligned(128)));
107 std::vector<fadc_pulse_data> fPulseData; // Pulse data for each channel
108
111
112 void ClearDataVectors();
113 void PopulateDataVector( std::vector<uint32_t>& data_vector, uint32_t data ) const;
114 static uint32_t SumVectorElements( const std::vector<uint32_t>& data_vector );
115 void LoadTHaSlotDataObj( THaSlotData* sldat );
116 void PrintDataType() const;
117
118 void DecodeBlockHeader( UInt_t pdat, uint32_t data_type_id );
119 void DecodeBlockTrailer( UInt_t pdat );
120 void DecodeEventHeader( UInt_t pdat );
121 void DecodeTriggerTime( UInt_t pdat, uint32_t data_type_id );
122 void DecodeWindowRawData( UInt_t pdat, uint32_t data_type_id );
123 void DecodePulseRawData( UInt_t pdat, uint32_t data_type_id );
124 void DecodePulseIntegral( UInt_t pdat );
125 void DecodePulseTime( UInt_t pdat );
126 void DecodePulseParameters( UInt_t pdat, uint32_t data_type_id );
127 void DecodePulsePedestal( UInt_t pdat );
128 void DecodeScalerHeader( UInt_t pdat );
129 void UnsupportedType( UInt_t pdat, uint32_t data_type_id );
130
132
133 ClassDef(Fadc250Module,0) // JLab FADC 250 Module
134 }; // Fadc250Module class
135
136} // Decoder namespace
137
138#endif
int Int_t
unsigned int UInt_t
DAQInfoExtra __attribute__
std::vector< uint32_t > coarse_time
std::vector< uint32_t > underflow
std::vector< uint32_t > peak
std::vector< uint32_t > pedestal_quality
bool overflow
std::vector< uint32_t > fine_time
uint32_t samples
uint32_t pedestal
std::vector< uint32_t > integral
uint32_t time
uint32_t chan
bool Bool_t
const char Option_t
#define ClassDef(name, id)
virtual UInt_t GetData(Decoder::EModuleType mtype, UInt_t chan, UInt_t ievent) const
void DecodeWindowRawData(UInt_t pdat, uint32_t data_type_id)
void DecodePulseParameters(UInt_t pdat, uint32_t data_type_id)
std::vector< fadc_pulse_data > fPulseData
virtual UInt_t GetPulseCoarseTimeData(UInt_t chan, UInt_t ievent) const
virtual void CheckDecoderStatus() const
virtual Int_t GetFadcMode() const
virtual UInt_t GetNumFadcEvents(UInt_t chan) const
virtual UInt_t GetEmulatedPulseIntegralData(UInt_t chan) const
virtual std::vector< uint32_t > GetPulseSamplesVector(UInt_t chan) const
virtual UInt_t GetNumSamples(UInt_t ichan) const
void DecodeEventHeader(UInt_t pdat)
void DecodeTriggerTime(UInt_t pdat, uint32_t data_type_id)
virtual void Clear(Option_t *opt="")
void DecodePulseTime(UInt_t pdat)
void DecodeBlockHeader(UInt_t pdat, uint32_t data_type_id)
virtual UInt_t GetPulsePedestalData(UInt_t chan, UInt_t ievent) const
virtual Bool_t IsMultiFunction()
virtual UInt_t GetOverflowBit(UInt_t chan, UInt_t ievent) const
void LoadTHaSlotDataObj(THaSlotData *sldat)
virtual UInt_t GetNumFadcSamples(UInt_t chan, UInt_t ievent) const
void PopulateDataVector(std::vector< uint32_t > &data_vector, uint32_t data) const
void DecodeBlockTrailer(UInt_t pdat)
virtual Int_t Decode(const UInt_t *data)
static const size_t NADCCHAN
void DecodePulseIntegral(UInt_t pdat)
virtual UInt_t GetNumEvents(UInt_t ichan) const
virtual UInt_t GetNumEvents() const
void DecodePulsePedestal(UInt_t pdat)
void DecodeScalerHeader(UInt_t pdat)
virtual UInt_t GetPulseSamplesData(UInt_t chan, UInt_t ievent) const
virtual UInt_t GetPulseFineTimeData(UInt_t chan, UInt_t ievent) const
virtual UInt_t LoadSlot(THaSlotData *sldat, const UInt_t *evbuffer, const UInt_t *pstop)
virtual UInt_t GetPulseIntegralData(UInt_t chan, UInt_t ievent) const
static uint32_t SumVectorElements(const std::vector< uint32_t > &data_vector)
void DecodePulseRawData(UInt_t pdat, uint32_t data_type_id)
virtual Bool_t HasCapability(Decoder::EModuleType type)
void UnsupportedType(UInt_t pdat, uint32_t data_type_id)
virtual UInt_t GetTriggerTime() const
virtual UInt_t GetPedestalQuality(UInt_t chan, UInt_t ievent) const
virtual UInt_t GetPulseTimeData(UInt_t chan, UInt_t ievent) const
virtual UInt_t GetPulsePeakData(UInt_t chan, UInt_t ievent) const
virtual Int_t GetMode() const
static TypeIter_t fgThisType
virtual UInt_t GetUnderflowBit(UInt_t chan, UInt_t ievent) const
virtual void Init()
Definition Module.cxx:51
TypeSet_t::iterator TypeIter_t
Definition Module.h:40
virtual UInt_t GetData(UInt_t) const
Definition Module.h:51
EModuleType
Definition Decoder.h:57