PandaRoot
BSEmcAbsWaveformSimulator.h
Go to the documentation of this file.
1 #ifndef BSEMCABSWAVEFORMSIMULATOR_HH
2 #define BSEMCABSWAVEFORMSIMULATOR_HH
3 
4 #include "TClonesArray.h"
5 #include "TList.h"
6 #include "TMath.h"
7 #include "TObject.h"
8 #include "TROOT.h"
9 
11 
12 class TClonesArray;
13 class BSEmcWaveform;
14 class BSEmcWaveformData;
15 
22 class BSEmcAbsWaveformSimulator : public TObject {
23  public:
27  virtual BSEmcWaveform *Simulate(BSEmcWaveformData *t_wfData, TClonesArray *t_arrayToStore = nullptr) { return CallModifiers(MakeWaveform(t_wfData, t_arrayToStore)); }
28 
30  virtual BSEmcWaveform *
31  SimulateSinglePulse(Double_t t_hitEnergy, Double_t t_hitTime, TClonesArray *t_arrayToStore = nullptr, Int_t t_detId = -1, Int_t t_trackId = -1, Int_t t_hitIndex = -1)
32  {
33  return CallModifiers(MakeSingleWaveform(t_hitEnergy, t_hitTime, t_arrayToStore, t_detId, t_trackId, t_hitIndex));
34  }
35 
39  virtual BSEmcWaveform *Get1GevWaveform() = 0;
40 
44  virtual void GetAbsoluteTimeInterval(BSEmcWaveformData *t_wfData, Double_t &t_startTime, Double_t &t_activeTime) = 0; // in ns
45 
49  virtual Double_t GetTimeBeforeFirstHit(BSEmcWaveformData * /*unused*/) { return 0; } // in ns // wfData //[R.K.03/2017] unused variable(s)
50 
52  virtual Double_t GetScale() = 0;
53 
55  virtual Double_t GetTotalScale()
56  {
57  Double_t totalScale = GetScale();
58 
59  TIter iterModifiers(&fListOfWaveformModifiers);
60  while (BSEmcAbsWaveformModifier *wfmod = dynamic_cast<BSEmcAbsWaveformModifier *>(iterModifiers())) {
61  totalScale *= wfmod->GetScale();
62  }
63 
64  return totalScale;
65  }
66 
67  virtual Double_t GetSampleRate() { return fSampleRate; }
68 
69  virtual void AddModifier(BSEmcAbsWaveformModifier *t_wfModifier) { fListOfWaveformModifiers.Add(t_wfModifier); }
70 
71  void SetHitBranchName(const TString &t_branchname) { fHitBranchName = t_branchname; }
72 
73  protected:
75  BSEmcAbsWaveformSimulator(Double_t sampleRate) : fSampleRate(sampleRate){};
76 
77  virtual BSEmcWaveform *MakeWaveform(BSEmcWaveformData *t_wfData, TClonesArray *t_arrayToStore = nullptr) = 0;
78  virtual BSEmcWaveform *
79  MakeSingleWaveform(Double_t t_hitEnergy, Double_t t_hitTime, TClonesArray *t_arrayToStore = nullptr, Int_t t_detId = -1, Int_t t_trackId = -1, Int_t t_hitIndex = -1) = 0;
80 
81  /* sync adc clock with absolute time */
82  inline void SyncWithADCClock(Double_t &t_time) { t_time = TMath::Floor(t_time * fSampleRate) / fSampleRate; };
83 
85  {
86  TIter iterModifiers(&fListOfWaveformModifiers);
87  while (BSEmcAbsWaveformModifier *wfmod = dynamic_cast<BSEmcAbsWaveformModifier *>(iterModifiers())) {
88  wfmod->Modify(t_wf);
89  }
90  return t_wf;
91  }
92 
94  Double_t fSampleRate{-1};
95 
96  TString fHitBranchName{""};
98 };
99 
100 #endif /*BSEMCABSWAVEFORMSIMULATOR_HH*/
virtual BSEmcWaveform * Simulate(BSEmcWaveformData *t_wfData, TClonesArray *t_arrayToStore=nullptr)
represents a simulated waveform in an emc crystal
Definition: BSEmcWaveform.h:63
virtual BSEmcWaveform * MakeWaveform(BSEmcWaveformData *t_wfData, TClonesArray *t_arrayToStore=nullptr)=0
void SetHitBranchName(const TString &t_branchname)
virtual void GetAbsoluteTimeInterval(BSEmcWaveformData *t_wfData, Double_t &t_startTime, Double_t &t_activeTime)=0
virtual BSEmcWaveform * MakeSingleWaveform(Double_t t_hitEnergy, Double_t t_hitTime, TClonesArray *t_arrayToStore=nullptr, Int_t t_detId=-1, Int_t t_trackId=-1, Int_t t_hitIndex=-1)=0
virtual Double_t GetScale()=0
Double_t fSampleRate
sampling rate of SADC. In 1/ns
BSEmcAbsWaveformSimulator(Double_t sampleRate)
interface for waveform modifiers
ClassDef(BSEmcAbsWaveformSimulator, 3)
Abstract base class for waveform simulator.
virtual BSEmcWaveform * SimulateSinglePulse(Double_t t_hitEnergy, Double_t t_hitTime, TClonesArray *t_arrayToStore=nullptr, Int_t t_detId=-1, Int_t t_trackId=-1, Int_t t_hitIndex=-1)
virtual void AddModifier(BSEmcAbsWaveformModifier *t_wfModifier)
virtual BSEmcWaveform * Get1GevWaveform()=0
represents a simulated waveform in an emc crystal, used by BSEmcFwEndcapTimebasedWaveforms ...
void SyncWithADCClock(Double_t &t_time)
virtual Double_t GetTimeBeforeFirstHit(BSEmcWaveformData *)
virtual BSEmcWaveform * CallModifiers(BSEmcWaveform *t_wf)