Hall A ROOT/C++ Analyzer (podd)
Loading...
Searching...
No Matches
THaScintillator.h
Go to the documentation of this file.
1#ifndef Podd_THaScintillator_h_
2#define Podd_THaScintillator_h_
3
5// //
6// THaScintillator //
7// //
9
11#include "DetectorData.h"
12#include <vector>
13#include <set>
14
15class TClonesArray;
16
18
19public:
20 explicit THaScintillator( const char* name, const char* description = "",
21 THaApparatus* a = nullptr );
23 virtual ~THaScintillator();
24
25 enum ESide { kNone = -1, kRight = 0, kLeft = 1 };
26 using Idx_t = std::pair<ESide,Int_t>;
27
28 class HitData_t {
29 public:
30 // A "hit" is defined as a paddle with TDC hits on both sides
32 : pad(-1), time(kBig), dtime(kBig), yt(kBig), ya(kBig), ampl(kBig) {}
35 void clear() { time = dtime = yt = ampl = ya = kBig; }
36 bool operator<( const HitData_t& rhs ) const { return time < rhs.time; }
37 Int_t pad; // Paddle number
38 Data_t time; // Average of corrected TDC times (tdc_c) (s)
39 Data_t dtime; // Uncertainty of average time (s)
40 Data_t yt; // Transverse track position from TDC time difference (m)
41 Data_t ya; // Transverse track position from ADC amplitude ratio (m)
42 Data_t ampl; // Estimated energy deposition dE/dx (a.u.)
43 };
44
45 virtual void Clear( Option_t* opt="" );
46 virtual Int_t Decode( const THaEvData& );
47 virtual Int_t CoarseProcess( TClonesArray& tracks );
48 virtual Int_t FineProcess( TClonesArray& tracks );
49
50 Int_t GetNHits() const { return static_cast<Int_t>(fHits.size()); }
51 const HitData_t& GetHit( Int_t i ) { return fHits[i]; }
52 const HitData_t& GetPad( Int_t i ) { return fPadData[i]; }
53
54protected:
55
56 // Calibration
57 Data_t fCn; // speed of light in material (m/s)
58 Data_t fAttenuation; // attenuation length of material (1/m)
59 Data_t fResolution; // average time resolution per PMT (s)
60
61 // Per-event data
62 Podd::PMTData* fRightPMTs; // Raw PMT data (right side)
63 Podd::PMTData* fLeftPMTs; // Raw PMT data (left side)
64 std::set<Idx_t> fHitIdx; // Indices of PMTs with data
65 std::vector<HitData_t> fHits; // Calculated hit data, per hit
66 // fPadData duplicates the info in fHits for direct access via paddle number
67 std::vector<HitData_t> fPadData; // Calculated hit data, per paddle
68
69 virtual Int_t StoreHit( const DigitizerHitInfo_t& hitinfo, UInt_t data );
70 virtual void PrintDecodedData( const THaEvData& evdata ) const;
71
72 virtual Int_t ApplyCorrections();
73 virtual Data_t TimeWalkCorrection( Idx_t idx, Data_t adc );
74 virtual Int_t FindPaddleHits();
75
76 virtual Int_t ReadDatabase( const TDatime& date );
77 virtual Int_t DefineVariables( EMode mode = kDefine );
78
79 ClassDef(THaScintillator,1) // Generic scintillator class
80};
81
83
84#endif
#define kDefine
Definition BdataLoc.cxx:38
int Int_t
unsigned int UInt_t
Double_t Data_t
Definition DataType.h:13
const Data_t kBig
Definition DataType.h:15
const char Option_t
#define ClassDef(name, id)
char name[80]
bool operator<(const HitData_t &rhs) const
HitData_t(Int_t pad, Data_t time, Data_t dtime, Data_t yt, Data_t ya, Data_t ampl)
const HitData_t & GetHit(Int_t i)
virtual Int_t Decode(const THaEvData &)
std::vector< HitData_t > fHits
Podd::PMTData * fRightPMTs
virtual Int_t DefineVariables(EMode mode=kDefine)
virtual Int_t StoreHit(const DigitizerHitInfo_t &hitinfo, UInt_t data)
virtual Data_t TimeWalkCorrection(Idx_t idx, Data_t adc)
virtual Int_t FineProcess(TClonesArray &tracks)
Int_t GetNHits() const
virtual void Clear(Option_t *opt="")
virtual Int_t FindPaddleHits()
Podd::PMTData * fLeftPMTs
const HitData_t & GetPad(Int_t i)
virtual Int_t ReadDatabase(const TDatime &date)
std::set< Idx_t > fHitIdx
std::pair< ESide, Int_t > Idx_t
virtual void PrintDecodedData(const THaEvData &evdata) const
std::vector< HitData_t > fPadData
virtual Int_t ApplyCorrections()
virtual Int_t CoarseProcess(TClonesArray &tracks)
TArc a