PandaRoot
BSEmcMCDepositToTimebasedWaveforms< ParSet > Class Template Referenceabstract

Taks to create waveforms from deposits. More...

#include <BSEmcMCDepositToTimebasedWaveforms.h>

Inheritance diagram for BSEmcMCDepositToTimebasedWaveforms< ParSet >:
PndPersistencyTask

Public Member Functions

 BSEmcMCDepositToTimebasedWaveforms (const std::string &t_detectorname, Bool_t t_storewaves=kTRUE)
 
virtual ~BSEmcMCDepositToTimebasedWaveforms ()
 
virtual InitStatus Init ()
 Init Task. More...
 
virtual void Exec (Option_t *)
 Runs the task. More...
 
void RunTimebased (Bool_t t_timebased=kTRUE)
 
void SetSimulator (BSEmcAbsWaveformSimulator *t_simulator)
 
void SetStorageOfData (Bool_t t_storeWaves=kTRUE)
 
void StoreDataClass (Bool_t t_storeData=kTRUE)
 Method to specify whether waveforms are stored or not. More...
 
void SetMCDepositBranchName (const TString &t_branchName)
 
void SetWaveformBranchName (const TString &t_branchName)
 
void SetWaveformDataBranchName (const TString &t_branchName)
 
void SetPhotonStatisticParName (const std::string &t_photonStatParName)
 
void SetWaveformGenParName (const std::string &t_waveformGenParName)
 
- Public Member Functions inherited from PndPersistencyTask
 PndPersistencyTask ()
 
 PndPersistencyTask (const char *name, Int_t iVerbose=1)
 
virtual ~PndPersistencyTask ()
 
void SetPersistency (Bool_t val=kTRUE)
 
Bool_t GetPersistency ()
 

Protected Member Functions

virtual void SetParContainers ()
 
virtual void SetupSimulator ()=0
 
 ClassDef (BSEmcMCDepositToTimebasedWaveforms, 2)
 

Protected Attributes

TString fDetectorName {""}
 
TString fMCDepositBranchName {""}
 
TString fWaveformBranchName {""}
 
TString fWaveformDataBranchName {""}
 
PndTCAConstContainer< BSEmcMCDepositfMCDepositArray {}
 
BSEmcWaveformBufferfWaveformBuffer {nullptr}
 
Bool_t fStoreDataClass {kFALSE}
 
Bool_t fActivateBuffering {kFALSE}
 
std::string fPhotonStatisticParName {""}
 
BSEmcDigiParfPhotonStatisticPar {nullptr}
 
std::string fWaveformGenParName {""}
 
ParSet * fDigiPar {nullptr}
 Digitisation parameter container. More...
 
Bool_t fUse_photon_statistic {kFALSE}
 
Double_t fNPhotoElectronsPerMeV {0}
 
Double_t fExcessNoiseFactor {0}
 
Double_t fOverlapTime {0}
 
BSEmcAbsWaveformSimulatorfSimulator {nullptr}
 

Detailed Description

template<class ParSet>
class BSEmcMCDepositToTimebasedWaveforms< ParSet >

Taks to create waveforms from deposits.

This is an alternative to PndEmcDepositsToWaveform, which despite its name could be used for all the EMC, not just FwEndcap.

Author
Dima Melnichuk - adaption for PANDA
Philipp Mahlberg mahlb.nosp@m.erg@.nosp@m.hiskp.nosp@m..uni.nosp@m.-bonn.nosp@m..de - integration in timebased simulation concept

Definition at line 49 of file BSEmcMCDepositToTimebasedWaveforms.h.

Constructor & Destructor Documentation

◆ BSEmcMCDepositToTimebasedWaveforms()

template<class ParSet>
BSEmcMCDepositToTimebasedWaveforms< ParSet >::BSEmcMCDepositToTimebasedWaveforms ( const std::string &  t_detectorname,
Bool_t  t_storewaves = kTRUE 
)
inline

Definition at line 52 of file BSEmcMCDepositToTimebasedWaveforms.h.

53  : PndPersistencyTask("BSEmcMCDepositToTimebasedWaveforms"), fDetectorName(t_detectorname)
54  {
55  SetPersistency(t_storewaves);
56  }
void SetPersistency(Bool_t val=kTRUE)

◆ ~BSEmcMCDepositToTimebasedWaveforms()

template<class ParSet>
virtual BSEmcMCDepositToTimebasedWaveforms< ParSet >::~BSEmcMCDepositToTimebasedWaveforms ( )
inlinevirtual

Definition at line 59 of file BSEmcMCDepositToTimebasedWaveforms.h.

59 {};

Member Function Documentation

◆ ClassDef()

template<class ParSet>
BSEmcMCDepositToTimebasedWaveforms< ParSet >::ClassDef ( BSEmcMCDepositToTimebasedWaveforms< ParSet >  ,
 
)
protected

◆ Exec()

template<class ParSet>
virtual void BSEmcMCDepositToTimebasedWaveforms< ParSet >::Exec ( Option_t *  )
inlinevirtual

Runs the task.

Uses the waveform simulator (BSEmcAbsWaveformSimulator) to generate a waveform from the deposit and fill the buffer (BSEmcWaveformBuffer).

Parameters
optunused
Returns
void

Definition at line 139 of file BSEmcMCDepositToTimebasedWaveforms.h.

140  {
141  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms<ParSet> " << fDetectorName << " Exec() ";
142  FairRootManager *ioman = FairRootManager::Instance();
143 
144  TStopwatch timer;
145  timer.Start();
146 
147  const BSEmcMCDeposit *theDeposit = nullptr;
148 
149  Int_t nDeposits = fMCDepositArray.GetSize();
150  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms<ParSet> " << fDetectorName << " Deposit array contains " << nDeposits << " deposits";
151 
152  for (Int_t iDeposit = 0; iDeposit < nDeposits; iDeposit++) {
153 
154  theDeposit = fMCDepositArray.GetConstElementPtr(iDeposit);
155  Double_t energy = theDeposit->GetEnergy();
156  if (energy == 0) {
157  continue;
158  }
159  LOG(debug3) << "deposit energy : " << energy;
160  if (fUse_photon_statistic) {
161  Double_t crystalPhotonsMeV = 1.0e3 * energy * fNPhotoElectronsPerMeV;
162  Double_t photonStatFactor = gRandom->Gaus(1, sqrt(fExcessNoiseFactor / crystalPhotonsMeV));
163  LOG(debug3) << "photonStatFactor: " << photonStatFactor;
164  energy *= photonStatFactor;
165  LOG(debug3) << "energy now: " << energy;
166  // energy *= 1e3;
167  LOG(debug3) << "energy now in MeV: " << energy;
168  }
169  // construct corresponding waveform data Object
170  BSEmcWaveformData wfData(theDeposit->GetDetectorID(), fSimulator);
172  // register deposit...timebased framework uses ns, whereas emc deals with seconds as time unit
173  FairLink linkToDeposit(-1, ioman->GetEntryNr(), fMCDepositBranchName, iDeposit, 1.0);
174  if (fActivateBuffering) {
175  wfData.AddDeposit(linkToDeposit, ioman->GetEventTime() + theDeposit->GetTime() * 1.0e9, energy);
176  } else {
177  wfData.AddDeposit(linkToDeposit, theDeposit->GetTime() * 1.0e9, energy);
178  }
179  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms " << fDetectorName << " adding deposit with event time " << ioman->GetEventTime()
180  << " and deposit time: " << theDeposit->GetTime() * 1.0e9 << " and energy: " << energy;
181  fWaveformBuffer->FillNewData(&wfData);
182  }
183  timer.Stop();
184  Double_t rtime = timer.RealTime();
185  Double_t ctime = timer.CpuTime();
186  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms, Real time " << rtime << " s, CPU time " << ctime << " s";
187  }
virtual T const * GetConstElementPtr(Int_t t_index) const
Get the Element object at t_index.
Int_t GetDetectorID() const
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28
represents the deposited energy of one emc crystal from simulation
virtual ssize_t GetSize() const final
Get the number of elements.
virtual void FillNewData(BSEmcWaveformData *)
virtual Double_t GetTime() const
represents a simulated waveform in an emc crystal, used by BSEmcFwEndcapTimebasedWaveforms ...
PndTCAConstContainer< BSEmcMCDeposit > fMCDepositArray
virtual Double_t GetEnergy() const
void SetOverlapTime(const Double_t t_overlap)

◆ Init()

template<class ParSet>
virtual InitStatus BSEmcMCDepositToTimebasedWaveforms< ParSet >::Init ( )
inlinevirtual

Init Task.

Prepares the TClonesArray of BSEmcMCDeposit for reading and BSEmcMultiWaveform for writing. Also reads the EMC parameters.

Returns
InitStatus
Return values
kSUCCESSsuccess

Definition at line 71 of file BSEmcMCDepositToTimebasedWaveforms.h.

72  {
73  if (fMCDepositBranchName == "") {
75  }
76 
77  if (fWaveformBranchName == "") {
79  }
80  if (fWaveformDataBranchName == "") {
82  }
83 
84  if (fSimulator == nullptr) {
85  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms for " << fMCDepositBranchName << " has no Simulator set. Calling SetupSimulator!";
88  }
89  if (fSimulator == nullptr) {
90  LOG(error) << "BSEmcMCDepositToTimebasedWaveforms for " << fMCDepositBranchName << " has no Simulator set. Aborting!";
91  exit(-1);
92  }
93 
94  // Get RootManager
95  FairRootManager *ioman = FairRootManager::Instance();
96  if (ioman == nullptr) {
97  LOG(error) << "BSEmcMCDepositToTimebasedWaveforms<ParSet>::Init: "
98  << "RootManager not instantiated!";
99  return kFATAL;
100  }
102  fMCDepositArray.SetTCA(dynamic_cast<TClonesArray *>(ioman->GetObject(fMCDepositBranchName)));
103  // Create and activiate output Buffer....choose between BSEmcWaveform and BSEmcMultiWaveform
104  fWaveformBuffer = new BSEmcWaveformBuffer(fWaveformBranchName, "BSEmcMultiWaveform", "Emc", GetPersistency());
105  LOG(debug) << "Using BSEmcMultiWaveform in WaveformBuffer.";
106 
107  fWaveformBuffer = (BSEmcWaveformBuffer *)ioman->RegisterWriteoutBuffer(fWaveformBranchName, fWaveformBuffer);
108  fWaveformBuffer->ActivateBuffering(fActivateBuffering);
109 
110  if (fStoreDataClass) {
112  }
113 
115 
116  if (fUse_photon_statistic) {
117  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms: " << fDetectorName << " using photon statistic";
121  } else {
123  fExcessNoiseFactor = 1;
124  }
126  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms::Init() for " << fMCDepositBranchName << " done.";
127  return kSUCCESS;
128  }
Int_t GetUseDigiEffectiveSmearingMode() const
Definition: BSEmcDigiPar.h:31
const std::string fgMultiWaveformBranchName
void SetTCA(TClonesArray *t_tca)
Set the TClonesArray address.
Double_t GetRearCrystalSurfaceArea() const
Definition: BSEmcDigiPar.h:38
virtual void StoreWaveformData(TString t_branchName, TString t_folderName, Bool_t t_persistance)
Double_t GetOverlapTime() const
Definition: BSEmcDigiPar.h:41
void SetMCDepositBranchName(const TString &t_branchname)
buffer for waveforms, used by BSEmcFwEndcapTimebasedWaveforms
const std::string fgWaveformDataBranchName
Double_t GetQuantumEfficiency() const
Definition: BSEmcDigiPar.h:35
Double_t GetSensitiveArea() const
Definition: BSEmcDigiPar.h:34
void SetBranchName(const TString &t_branchname)
Set the Branch Name.
PndTCAConstContainer< BSEmcMCDeposit > fMCDepositArray
const std::string fgMCDepositBranchName
Double_t GetDetectedPhotonsPerMeV() const
Definition: BSEmcDigiPar.h:33
Double_t GetExcessNoiseFactor() const
Definition: BSEmcDigiPar.h:36

◆ RunTimebased()

template<class ParSet>
void BSEmcMCDepositToTimebasedWaveforms< ParSet >::RunTimebased ( Bool_t  t_timebased = kTRUE)
inline

◆ SetMCDepositBranchName()

template<class ParSet>
void BSEmcMCDepositToTimebasedWaveforms< ParSet >::SetMCDepositBranchName ( const TString &  t_branchName)
inline

◆ SetParContainers()

template<class ParSet>
virtual void BSEmcMCDepositToTimebasedWaveforms< ParSet >::SetParContainers ( )
inlineprotectedvirtual

Get parameter containers

Definition at line 202 of file BSEmcMCDepositToTimebasedWaveforms.h.

203  {
204  // Get run and runtime database
205  FairRun *run = FairRun::Instance();
206  if (run == nullptr) {
207  Fatal("SetParContainers", "No analysis run");
208  }
209  FairRuntimeDb *db = run->GetRuntimeDb();
210  if (db == nullptr) {
211  Fatal("SetParContainers", "No runtime database");
212  }
213  // Get Emc digitisation parameter container
214  if (fWaveformGenParName == "") {
215  fWaveformGenParName = ParSet::fgParameterName;
216  }
217  fDigiPar = dynamic_cast<ParSet *>(db->getContainer(fWaveformGenParName.c_str()));
218 
219  if (fPhotonStatisticParName == "") {
221  }
222  fPhotonStatisticPar = dynamic_cast<BSEmcDigiPar *>(db->getContainer(fPhotonStatisticParName.c_str()));
223  }
static const std::string fgParameterName
Definition: BSEmcDigiPar.h:26
ParSet * fDigiPar
Digitisation parameter container.
Container for runtime parameters that are required for the transformation from BSEmcMCDeposits to BSE...
Definition: BSEmcDigiPar.h:24

◆ SetPhotonStatisticParName()

template<class ParSet>
void BSEmcMCDepositToTimebasedWaveforms< ParSet >::SetPhotonStatisticParName ( const std::string &  t_photonStatParName)
inline

Definition at line 197 of file BSEmcMCDepositToTimebasedWaveforms.h.

◆ SetSimulator()

template<class ParSet>
void BSEmcMCDepositToTimebasedWaveforms< ParSet >::SetSimulator ( BSEmcAbsWaveformSimulator t_simulator)
inline

Definition at line 190 of file BSEmcMCDepositToTimebasedWaveforms.h.

190 { fSimulator = t_simulator; }

◆ SetStorageOfData()

template<class ParSet>
void BSEmcMCDepositToTimebasedWaveforms< ParSet >::SetStorageOfData ( Bool_t  t_storeWaves = kTRUE)
inline

Definition at line 191 of file BSEmcMCDepositToTimebasedWaveforms.h.

191 { SetPersistency(t_storeWaves); };
void SetPersistency(Bool_t val=kTRUE)

◆ SetupSimulator()

◆ SetWaveformBranchName()

template<class ParSet>
void BSEmcMCDepositToTimebasedWaveforms< ParSet >::SetWaveformBranchName ( const TString &  t_branchName)
inline

◆ SetWaveformDataBranchName()

template<class ParSet>
void BSEmcMCDepositToTimebasedWaveforms< ParSet >::SetWaveformDataBranchName ( const TString &  t_branchName)
inline

◆ SetWaveformGenParName()

template<class ParSet>
void BSEmcMCDepositToTimebasedWaveforms< ParSet >::SetWaveformGenParName ( const std::string &  t_waveformGenParName)
inline

Definition at line 198 of file BSEmcMCDepositToTimebasedWaveforms.h.

198 { fWaveformGenParName = t_waveformGenParName; }

◆ StoreDataClass()

template<class ParSet>
void BSEmcMCDepositToTimebasedWaveforms< ParSet >::StoreDataClass ( Bool_t  t_storeData = kTRUE)
inline

Method to specify whether waveforms are stored or not.

Definition at line 192 of file BSEmcMCDepositToTimebasedWaveforms.h.

Member Data Documentation

◆ fActivateBuffering

◆ fDetectorName

◆ fDigiPar

template<class ParSet>
ParSet* BSEmcMCDepositToTimebasedWaveforms< ParSet >::fDigiPar {nullptr}
protected

Digitisation parameter container.

Definition at line 241 of file BSEmcMCDepositToTimebasedWaveforms.h.

Referenced by BSEmcMCDepositToTimebasedWaveforms< BSEmcBwEndcapDigiPar >::SetParContainers().

◆ fExcessNoiseFactor

◆ fMCDepositArray

◆ fMCDepositBranchName

◆ fNPhotoElectronsPerMeV

◆ fOverlapTime

◆ fPhotonStatisticPar

◆ fPhotonStatisticParName

◆ fSimulator

◆ fStoreDataClass

◆ fUse_photon_statistic

◆ fWaveformBranchName

◆ fWaveformBuffer

template<class ParSet>
BSEmcWaveformBuffer* BSEmcMCDepositToTimebasedWaveforms< ParSet >::fWaveformBuffer {nullptr}
protected

◆ fWaveformDataBranchName

◆ fWaveformGenParName


The documentation for this class was generated from the following file: