PandaRoot
BSEmcAbsWaveformSimulator.h
Go to the documentation of this file.
1 //****************************************************************************
2 //* This file is part of PandaRoot. *
3 //* *
4 //* PandaRoot is distributed under the terms of the *
5 //* GNU General Public License (GPL) version 3, *
6 //* copied verbatim in the file "LICENSE". *
7 //* *
8 //* Copyright (C) 2006 - 2024 FAIR GmbH and copyright holders of PandaRoot *
9 //* The copyright holders are listed in the file "COPYRIGHTHOLDERS". *
10 //* The authors are listed in the file "AUTHORS". *
11 //****************************************************************************
12 
13 #ifndef BSEMCABSWAVEFORMSIMULATOR_HH
14 #define BSEMCABSWAVEFORMSIMULATOR_HH
15 
16 #include "TClonesArray.h"
17 #include "TList.h"
18 #include "TMath.h"
19 #include "TObject.h"
20 #include "TROOT.h"
21 
23 
24 class TClonesArray;
25 class BSEmcWaveform;
26 class BSEmcWaveformData;
27 
34 class BSEmcAbsWaveformSimulator : public TObject {
35  public:
39  virtual BSEmcWaveform *Simulate(BSEmcWaveformData *t_wfData, TClonesArray *t_arrayToStore = nullptr) { return CallModifiers(MakeWaveform(t_wfData, t_arrayToStore)); }
40 
42  virtual BSEmcWaveform *
43  SimulateSinglePulse(Double_t t_depositEnergy, Double_t t_depositTime, TClonesArray *t_arrayToStore = nullptr, Int_t t_detId = -1, Int_t t_trackId = -1, Int_t t_depositIndex = -1)
44  {
45  return CallModifiers(MakeSingleWaveform(t_depositEnergy, t_depositTime, t_arrayToStore, t_detId, t_trackId, t_depositIndex));
46  }
47 
51  virtual BSEmcWaveform *Get1GevWaveform() = 0;
52 
56  virtual void GetAbsoluteTimeInterval(BSEmcWaveformData *t_wfData, Double_t &t_startTime, Double_t &t_activeTime) = 0; // in ns
57 
61  virtual Double_t GetTimeBeforeFirstDeposit(BSEmcWaveformData * /*unused*/) { return 0; } // in ns // wfData //[R.K.03/2017] unused variable(s)
62 
64  virtual Double_t GetScale() = 0;
65 
67  virtual Double_t GetTotalScale()
68  {
69  Double_t totalScale = GetScale();
70 
71  TIter iterModifiers(&fListOfWaveformModifiers);
72  while (BSEmcAbsWaveformModifier *wfmod = dynamic_cast<BSEmcAbsWaveformModifier *>(iterModifiers())) {
73  totalScale *= wfmod->GetScale();
74  }
75 
76  return totalScale;
77  }
78 
79  virtual Double_t GetSampleRate() { return fSampleRate; }
80 
81  virtual void AddModifier(BSEmcAbsWaveformModifier *t_wfModifier) { fListOfWaveformModifiers.Add(t_wfModifier); }
82 
83  void SetMCDepositBranchName(const TString &t_branchname) { fMCDepositBranchName = t_branchname; }
84 
85  protected:
87  BSEmcAbsWaveformSimulator(Double_t sampleRate) : fSampleRate(sampleRate){};
88 
89  virtual BSEmcWaveform *MakeWaveform(BSEmcWaveformData *t_wfData, TClonesArray *t_arrayToStore = nullptr) = 0;
90  virtual BSEmcWaveform *MakeSingleWaveform(Double_t t_depositEnergy, Double_t t_depositTime, TClonesArray *t_arrayToStore = nullptr, Int_t t_detId = -1, Int_t t_trackId = -1,
91  Int_t t_depositIndex = -1) = 0;
92 
93  /* sync adc clock with absolute time */
94  inline void SyncWithADCClock(Double_t &t_time) { t_time = TMath::Floor(t_time * fSampleRate) / fSampleRate; };
95 
97  {
98  TIter iterModifiers(&fListOfWaveformModifiers);
99  while (BSEmcAbsWaveformModifier *wfmod = dynamic_cast<BSEmcAbsWaveformModifier *>(iterModifiers())) {
100  wfmod->Modify(t_wf);
101  }
102  return t_wf;
103  }
104 
106  Double_t fSampleRate{-1};
107 
108  TString fMCDepositBranchName{""};
110 };
111 
112 #endif /*BSEMCABSWAVEFORMSIMULATOR_HH*/
virtual BSEmcWaveform * Simulate(BSEmcWaveformData *t_wfData, TClonesArray *t_arrayToStore=nullptr)
virtual BSEmcWaveform * MakeSingleWaveform(Double_t t_depositEnergy, Double_t t_depositTime, TClonesArray *t_arrayToStore=nullptr, Int_t t_detId=-1, Int_t t_trackId=-1, Int_t t_depositIndex=-1)=0
represents a simulated waveform in an emc crystal
Definition: BSEmcWaveform.h:75
virtual BSEmcWaveform * MakeWaveform(BSEmcWaveformData *t_wfData, TClonesArray *t_arrayToStore=nullptr)=0
virtual void GetAbsoluteTimeInterval(BSEmcWaveformData *t_wfData, Double_t &t_startTime, Double_t &t_activeTime)=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)
void SetMCDepositBranchName(const TString &t_branchname)
Abstract base class for waveform simulator.
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 BSEmcWaveform * CallModifiers(BSEmcWaveform *t_wf)
virtual Double_t GetTimeBeforeFirstDeposit(BSEmcWaveformData *)
virtual BSEmcWaveform * SimulateSinglePulse(Double_t t_depositEnergy, Double_t t_depositTime, TClonesArray *t_arrayToStore=nullptr, Int_t t_detId=-1, Int_t t_trackId=-1, Int_t t_depositIndex=-1)