Hall A ROOT/C++ Analyzer (podd)
Fadc250Module.h
Go to the documentation of this file.
1 #ifndef Podd_Fadc250Module_h_
2 #define Podd_Fadc250Module_h_
3 
5 //
6 // Fadc250Module
7 // JLab FADC 250 Module
8 //
10 
11 #include "PipeliningModule.h"
12 #include <vector>
13 #include <cstdint>
14 
15 namespace Decoder {
16 
18 
19  public:
20 
21  Fadc250Module();
22  Fadc250Module( UInt_t crate, UInt_t slot );
23  virtual ~Fadc250Module();
24 
25  using Module::GetData;
26 
27  virtual void Clear( Option_t *opt="" );
28  virtual void Init();
29  virtual void CheckDecoderStatus() const;
30  virtual UInt_t GetPulseIntegralData( UInt_t chan, UInt_t ievent ) const;
31  virtual UInt_t GetEmulatedPulseIntegralData( UInt_t chan ) const;
32  virtual UInt_t GetPulseTimeData( UInt_t chan, UInt_t ievent ) const;
33  virtual UInt_t GetPulseCoarseTimeData( UInt_t chan, UInt_t ievent ) const;
34  virtual UInt_t GetPulseFineTimeData( UInt_t chan, UInt_t ievent ) const;
35  virtual UInt_t GetPulsePeakData( UInt_t chan, UInt_t ievent ) const;
36  virtual UInt_t GetPulsePedestalData( UInt_t chan, UInt_t ievent ) const;
37  virtual UInt_t GetPulseSamplesData( UInt_t chan, UInt_t ievent ) const;
38  virtual UInt_t GetPedestalQuality( UInt_t chan, UInt_t ievent ) const;
39  virtual UInt_t GetOverflowBit( UInt_t chan, UInt_t ievent ) const;
40  virtual UInt_t GetUnderflowBit( UInt_t chan, UInt_t ievent ) const;
41  virtual std::vector<uint32_t> GetPulseSamplesVector( UInt_t chan ) const;
42  virtual Int_t GetFadcMode() const;
43  virtual Int_t GetMode() const { return GetFadcMode(); };
44  virtual UInt_t GetNumFadcEvents( UInt_t chan ) const;
45  virtual UInt_t GetNumFadcSamples( UInt_t chan, UInt_t ievent ) const;
46  virtual UInt_t LoadSlot( THaSlotData *sldat, const UInt_t* evbuffer, const UInt_t *pstop );
47  virtual UInt_t LoadSlot( THaSlotData *sldat, const UInt_t* evbuffer, UInt_t pos, UInt_t len );
48  virtual UInt_t DecodeOneWord( UInt_t pdat);
49  virtual Int_t Decode( const UInt_t* ) { return 0; }
50  virtual Bool_t IsMultiFunction() { return true; }
51  virtual Bool_t HasCapability( Decoder::EModuleType type );
52  virtual UInt_t LoadNextEvBuffer( THaSlotData *sldat );
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 
64  struct fadc_data_struct {
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  } fadc_data; // fadc_data_struct
95 
96  struct fadc_pulse_data {
97  std::vector<uint32_t> integral, time, peak, pedestal;
98  std::vector<uint32_t> samples, coarse_time, fine_time;
99  std::vector<uint32_t> pedestal_quality, overflow, underflow;
100  void clear() {
101  integral.clear(); time.clear(); peak.clear(); pedestal.clear();
102  samples.clear(); coarse_time.clear(); fine_time.clear();
103  pedestal_quality.clear(); overflow.clear(); underflow.clear();
104  }
105  };
106  std::vector<fadc_pulse_data> fPulseData; // Pulse data for each channel
107 
108  Bool_t data_type_4, data_type_6, data_type_7, data_type_8, data_type_9, data_type_10;
109  Bool_t block_header_found, block_trailer_found, event_header_found, slots_match;
110 
111  void ClearDataVectors();
112  void PopulateDataVector( std::vector<uint32_t>& data_vector, uint32_t data );
113  static uint32_t SumVectorElements( const std::vector<uint32_t>& data_vector );
114  void LoadTHaSlotDataObj( THaSlotData* sldat );
115  UInt_t LoadThisBlock( THaSlotData *sldat, const std::vector<UInt_t>& evb );
116  void PrintDataType() const;
117 
118  static TypeIter_t fgThisType;
119  ClassDef(Fadc250Module,0) // JLab FADC 250 Module
120 
121  }; // Fadc250Module class
122 
123 } // Decoder namespace
124 
125 #endif
virtual UInt_t GetNumEvents() const
Definition: Fadc250Module.h:55
virtual UInt_t GetPulseSamplesData(UInt_t chan, UInt_t ievent) const
Definition: Fadc250Module.cxx:447
virtual UInt_t GetPedestalQuality(UInt_t chan, UInt_t ievent) const
Definition: Fadc250Module.cxx:373
Definition: Fadc250Module.h:17
virtual UInt_t GetEmulatedPulseIntegralData(UInt_t chan) const
Definition: Fadc250Module.cxx:236
virtual UInt_t GetUnderflowBit(UInt_t chan, UInt_t ievent) const
Definition: Fadc250Module.cxx:415
virtual Int_t GetFadcMode() const
Definition: Fadc250Module.cxx:498
virtual Int_t GetMode() const
Definition: Fadc250Module.h:43
TypeSet_t::iterator TypeIter_t
Definition: Module.h:39
virtual Bool_t IsMultiFunction()
Definition: Fadc250Module.h:50
virtual UInt_t GetNumSamples(UInt_t ichan) const
Definition: Fadc250Module.h:57
virtual UInt_t GetPulsePeakData(UInt_t chan, UInt_t ievent) const
Definition: Fadc250Module.cxx:316
EModuleType
Definition: Decoder.h:53
virtual UInt_t GetNumFadcSamples(UInt_t chan, UInt_t ievent) const
Definition: Fadc250Module.cxx:574
virtual UInt_t DecodeOneWord(UInt_t pdat)
Definition: Fadc250Module.cxx:662
virtual UInt_t GetData(Decoder::EModuleType mtype, UInt_t chan, UInt_t ievent) const
Definition: Fadc250Module.cxx:195
virtual Int_t Decode(const UInt_t *)
Definition: Fadc250Module.h:49
Definition: THaSlotData.h:37
virtual UInt_t GetPulseTimeData(UInt_t chan, UInt_t ievent) const
Definition: Fadc250Module.cxx:253
virtual UInt_t GetOverflowBit(UInt_t chan, UInt_t ievent) const
Definition: Fadc250Module.cxx:394
virtual Bool_t HasCapability(Decoder::EModuleType type)
Definition: Fadc250Module.cxx:106
virtual void CheckDecoderStatus() const
Definition: Fadc250Module.cxx:156
virtual UInt_t GetNumEvents(UInt_t ichan) const
Definition: Fadc250Module.h:56
virtual UInt_t GetPulseIntegralData(UInt_t chan, UInt_t ievent) const
Definition: Fadc250Module.cxx:215
Fadc250Module()
Definition: Fadc250Module.cxx:79
virtual void Clear(Option_t *opt="")
Definition: Fadc250Module.cxx:133
virtual void Init()
Definition: Fadc250Module.cxx:144
virtual UInt_t GetPulsePedestalData(UInt_t chan, UInt_t ievent) const
Definition: Fadc250Module.cxx:337
virtual UInt_t GetPulseCoarseTimeData(UInt_t chan, UInt_t ievent) const
Definition: Fadc250Module.cxx:274
virtual UInt_t GetTriggerTime() const
Definition: Fadc250Module.cxx:436
virtual std::vector< uint32_t > GetPulseSamplesVector(UInt_t chan) const
Definition: Fadc250Module.cxx:468
virtual UInt_t GetPulseFineTimeData(UInt_t chan, UInt_t ievent) const
Definition: Fadc250Module.cxx:295
Definition: Caen1190Module.cxx:20
virtual UInt_t LoadSlot(THaSlotData *sldat, const UInt_t *evbuffer, const UInt_t *pstop)
Definition: Fadc250Module.cxx:602
Definition: PipeliningModule.h:35
virtual UInt_t GetData(UInt_t) const
Definition: Module.h:50
virtual UInt_t LoadNextEvBuffer(THaSlotData *sldat)
Definition: Fadc250Module.cxx:641
virtual UInt_t GetNumFadcEvents(UInt_t chan) const
Definition: Fadc250Module.cxx:519