FairRoot/PandaRoot
PndEmcAbsWaveformSimulator.h
Go to the documentation of this file.
1 #pragma once
2 
3 #ifndef PNDEMCABSWAVEFORMSIMULATOR_H_
4 #define PNDEMCABSWAVEFORMSIMULATOR_H_
5 
6 #include "TObject.h"
7 #include "TMath.h"
8 #include "TList.h"
10 
11 
12 class TClonesArray;
13 class PndEmcWaveform;
14 class PndEmcWaveformData;
15 
16 #include "TROOT.h"
17 #include "TClonesArray.h"
18 
25 class PndEmcAbsWaveformSimulator : public TObject
26 {
27  public:
31  virtual PndEmcWaveform* Simulate(PndEmcWaveformData* wfData, TClonesArray* arrayToStore=NULL) { return CallModifiers(MakeWaveform(wfData, arrayToStore)); }
32 
34  virtual PndEmcWaveform* SimulateSinglePulse(Double_t hitEnergy, Double_t hitTime, TClonesArray* arrayToStore=NULL, Int_t detId=-1, Int_t trackId=-1, Int_t hitIndex=-1) { return CallModifiers(MakeSingleWaveform(hitEnergy, hitTime, arrayToStore, detId, trackId, hitIndex)); }
35 
39  virtual PndEmcWaveform* Get1GevWaveform() = 0;
40 
44  virtual void GetAbsoluteTimeInterval(PndEmcWaveformData* wfData, Double_t& startTime, Double_t& activeTime) = 0; // in ns
45 
49  virtual Double_t GetTimeBeforeFirstHit(PndEmcWaveformData* ) { 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  Double_t totalScale = GetScale();
57 
58  TIter iterModifiers(&fListOfWaveformModifiers);
59  while(PndEmcAbsWaveformModifier* wfmod = (PndEmcAbsWaveformModifier*) iterModifiers()) {
60  totalScale *= wfmod->GetScale();
61  }
62 
63  return totalScale;
64  }
65 
66  virtual Double_t GetSampleRate() { return fSampleRate; }
67 
68  virtual void AddModifier(PndEmcAbsWaveformModifier* wfModifier) { fListOfWaveformModifiers.Add(wfModifier); }
69 
70  protected:
72  PndEmcAbsWaveformSimulator(Double_t sampleRate) : fSampleRate(sampleRate) {};
73 
74  virtual PndEmcWaveform* MakeWaveform(PndEmcWaveformData* wfData, TClonesArray* arrayToStore=NULL) = 0;
75  virtual PndEmcWaveform* MakeSingleWaveform(Double_t hitEnergy, Double_t hitTime, TClonesArray* arrayToStore=NULL, Int_t detId=-1, Int_t trackId=-1, Int_t hitIndex=-1) = 0;
76 
77  /* sync adc clock with absolute time */
78  inline void SyncWithADCClock(Double_t& time) {
79  time = TMath::Floor(time * fSampleRate) / fSampleRate;
80  };
81 
83  TIter iterModifiers(&fListOfWaveformModifiers);
84  while(PndEmcAbsWaveformModifier* wfmod = (PndEmcAbsWaveformModifier*) iterModifiers()) {
85  wfmod->Modify(wf);
86  }
87  return wf;
88  }
89 
92 
94 };
95 
96 #endif
interface for waveform modifiers
virtual Double_t GetTimeBeforeFirstHit(PndEmcWaveformData *)
virtual void AddModifier(PndEmcAbsWaveformModifier *wfModifier)
virtual PndEmcWaveform * Get1GevWaveform()=0
virtual PndEmcWaveform * MakeWaveform(PndEmcWaveformData *wfData, TClonesArray *arrayToStore=NULL)=0
virtual PndEmcWaveform * Simulate(PndEmcWaveformData *wfData, TClonesArray *arrayToStore=NULL)
Double_t fSampleRate
sampling rate of SADC. In 1/ns
ClassDef(PndEmcAbsWaveformSimulator, 3)
Abstract base class for waveform simulator.
virtual PndEmcWaveform * SimulateSinglePulse(Double_t hitEnergy, Double_t hitTime, TClonesArray *arrayToStore=NULL, Int_t detId=-1, Int_t trackId=-1, Int_t hitIndex=-1)
Double_t
virtual void GetAbsoluteTimeInterval(PndEmcWaveformData *wfData, Double_t &startTime, Double_t &activeTime)=0
represents a simulated waveform in an emc crystal
represents a simulated waveform in an emc crystal, used by PndEmcFWEndcapTimebasedWaveforms ...
virtual PndEmcWaveform * CallModifiers(PndEmcWaveform *wf)
PndEmcAbsWaveformSimulator(Double_t sampleRate)
virtual PndEmcWaveform * MakeSingleWaveform(Double_t hitEnergy, Double_t hitTime, TClonesArray *arrayToStore=NULL, Int_t detId=-1, Int_t trackId=-1, Int_t hitIndex=-1)=0
virtual Double_t GetScale()=0