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 61 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 64 of file BSEmcMCDepositToTimebasedWaveforms.h.

65  : PndPersistencyTask("BSEmcMCDepositToTimebasedWaveforms"), fDetectorName(t_detectorname)
66  {
67  SetPersistency(t_storewaves);
68  }
void SetPersistency(Bool_t val=kTRUE)

◆ ~BSEmcMCDepositToTimebasedWaveforms()

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

Definition at line 71 of file BSEmcMCDepositToTimebasedWaveforms.h.

71 {};

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 151 of file BSEmcMCDepositToTimebasedWaveforms.h.

152  {
153  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms<ParSet> " << fDetectorName << " Exec() ";
154  FairRootManager *ioman = FairRootManager::Instance();
155 
156  TStopwatch timer;
157  timer.Start();
158 
159  const BSEmcMCDeposit *theDeposit = nullptr;
160 
161  Int_t nDeposits = fMCDepositArray.GetSize();
162  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms<ParSet> " << fDetectorName << " Deposit array contains " << nDeposits << " deposits";
163 
164  for (Int_t iDeposit = 0; iDeposit < nDeposits; iDeposit++) {
165 
166  theDeposit = fMCDepositArray.GetConstElementPtr(iDeposit);
167  Double_t energy = theDeposit->GetEnergy();
168  if (energy == 0) {
169  continue;
170  }
171  LOG(debug3) << "deposit energy : " << energy;
172  if (fUse_photon_statistic) {
173  Double_t crystalPhotonsMeV = 1.0e3 * energy * fNPhotoElectronsPerMeV;
174  Double_t photonStatFactor = gRandom->Gaus(1, sqrt(fExcessNoiseFactor / crystalPhotonsMeV));
175  LOG(debug3) << "photonStatFactor: " << photonStatFactor;
176  energy *= photonStatFactor;
177  LOG(debug3) << "energy now: " << energy;
178  // energy *= 1e3;
179  LOG(debug3) << "energy now in MeV: " << energy;
180  }
181  // construct corresponding waveform data Object
182  BSEmcWaveformData wfData(theDeposit->GetDetectorID(), fSimulator);
184  // register deposit...timebased framework uses ns, whereas emc deals with seconds as time unit
185  FairLink linkToDeposit(-1, ioman->GetEntryNr(), fMCDepositBranchName, iDeposit, 1.0);
186  if (fActivateBuffering) {
187  wfData.AddDeposit(linkToDeposit, ioman->GetEventTime() + theDeposit->GetTime() * 1.0e9, energy);
188  } else {
189  wfData.AddDeposit(linkToDeposit, theDeposit->GetTime() * 1.0e9, energy);
190  }
191  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms " << fDetectorName << " adding deposit with event time " << ioman->GetEventTime()
192  << " and deposit time: " << theDeposit->GetTime() * 1.0e9 << " and energy: " << energy;
193  fWaveformBuffer->FillNewData(&wfData);
194  }
195  timer.Stop();
196  Double_t rtime = timer.RealTime();
197  Double_t ctime = timer.CpuTime();
198  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms, Real time " << rtime << " s, CPU time " << ctime << " s";
199  }
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:40
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 83 of file BSEmcMCDepositToTimebasedWaveforms.h.

84  {
85  if (fMCDepositBranchName == "") {
87  }
88 
89  if (fWaveformBranchName == "") {
91  }
92  if (fWaveformDataBranchName == "") {
94  }
95 
96  if (fSimulator == nullptr) {
97  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms for " << fMCDepositBranchName << " has no Simulator set. Calling SetupSimulator!";
100  }
101  if (fSimulator == nullptr) {
102  LOG(error) << "BSEmcMCDepositToTimebasedWaveforms for " << fMCDepositBranchName << " has no Simulator set. Aborting!";
103  exit(-1);
104  }
105 
106  // Get RootManager
107  FairRootManager *ioman = FairRootManager::Instance();
108  if (ioman == nullptr) {
109  LOG(error) << "BSEmcMCDepositToTimebasedWaveforms<ParSet>::Init: "
110  << "RootManager not instantiated!";
111  return kFATAL;
112  }
114  fMCDepositArray.SetTCA(dynamic_cast<TClonesArray *>(ioman->GetObject(fMCDepositBranchName)));
115  // Create and activiate output Buffer....choose between BSEmcWaveform and BSEmcMultiWaveform
116  fWaveformBuffer = new BSEmcWaveformBuffer(fWaveformBranchName, "BSEmcMultiWaveform", "Emc", GetPersistency());
117  LOG(debug) << "Using BSEmcMultiWaveform in WaveformBuffer.";
118 
119  fWaveformBuffer = (BSEmcWaveformBuffer *)ioman->RegisterWriteoutBuffer(fWaveformBranchName, fWaveformBuffer);
120  fWaveformBuffer->ActivateBuffering(fActivateBuffering);
121 
122  if (fStoreDataClass) {
124  }
125 
127 
128  if (fUse_photon_statistic) {
129  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms: " << fDetectorName << " using photon statistic";
133  } else {
135  fExcessNoiseFactor = 1;
136  }
138  LOG(debug) << "BSEmcMCDepositToTimebasedWaveforms::Init() for " << fMCDepositBranchName << " done.";
139  return kSUCCESS;
140  }
Int_t GetUseDigiEffectiveSmearingMode() const
Definition: BSEmcDigiPar.h:43
const std::string fgMultiWaveformBranchName
void SetTCA(TClonesArray *t_tca)
Set the TClonesArray address.
Double_t GetRearCrystalSurfaceArea() const
Definition: BSEmcDigiPar.h:50
virtual void StoreWaveformData(TString t_branchName, TString t_folderName, Bool_t t_persistance)
Double_t GetOverlapTime() const
Definition: BSEmcDigiPar.h:53
void SetMCDepositBranchName(const TString &t_branchname)
buffer for waveforms, used by BSEmcFwEndcapTimebasedWaveforms
const std::string fgWaveformDataBranchName
Double_t GetQuantumEfficiency() const
Definition: BSEmcDigiPar.h:47
Double_t GetSensitiveArea() const
Definition: BSEmcDigiPar.h:46
void SetBranchName(const TString &t_branchname)
Set the Branch Name.
PndTCAConstContainer< BSEmcMCDeposit > fMCDepositArray
const std::string fgMCDepositBranchName
Double_t GetDetectedPhotonsPerMeV() const
Definition: BSEmcDigiPar.h:45
Double_t GetExcessNoiseFactor() const
Definition: BSEmcDigiPar.h:48

◆ 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 214 of file BSEmcMCDepositToTimebasedWaveforms.h.

215  {
216  // Get run and runtime database
217  FairRun *run = FairRun::Instance();
218  if (run == nullptr) {
219  Fatal("SetParContainers", "No analysis run");
220  }
221  FairRuntimeDb *db = run->GetRuntimeDb();
222  if (db == nullptr) {
223  Fatal("SetParContainers", "No runtime database");
224  }
225  // Get Emc digitisation parameter container
226  if (fWaveformGenParName == "") {
227  fWaveformGenParName = ParSet::fgParameterName;
228  }
229  fDigiPar = dynamic_cast<ParSet *>(db->getContainer(fWaveformGenParName.c_str()));
230 
231  if (fPhotonStatisticParName == "") {
233  }
234  fPhotonStatisticPar = dynamic_cast<BSEmcDigiPar *>(db->getContainer(fPhotonStatisticParName.c_str()));
235  }
static const std::string fgParameterName
Definition: BSEmcDigiPar.h:38
ParSet * fDigiPar
Digitisation parameter container.
Container for runtime parameters that are required for the transformation from BSEmcMCDeposits to BSE...
Definition: BSEmcDigiPar.h:36

◆ SetPhotonStatisticParName()

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

Definition at line 209 of file BSEmcMCDepositToTimebasedWaveforms.h.

◆ SetSimulator()

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

Definition at line 202 of file BSEmcMCDepositToTimebasedWaveforms.h.

202 { fSimulator = t_simulator; }

◆ SetStorageOfData()

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

Definition at line 203 of file BSEmcMCDepositToTimebasedWaveforms.h.

203 { 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 210 of file BSEmcMCDepositToTimebasedWaveforms.h.

210 { 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 204 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 253 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: