PandaRoot
BSEmcMCHitToTimebasedWaveforms< ParSet > Class Template Referenceabstract

Taks to create waveforms from hits. More...

#include <BSEmcMCHitToTimebasedWaveforms.h>

Inheritance diagram for BSEmcMCHitToTimebasedWaveforms< ParSet >:
PndPersistencyTask

Public Member Functions

 BSEmcMCHitToTimebasedWaveforms (const std::string &t_detectorname, Bool_t t_storewaves=kTRUE)
 
virtual ~BSEmcMCHitToTimebasedWaveforms ()
 
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 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 (BSEmcMCHitToTimebasedWaveforms, 2)
 

Protected Attributes

TString fDetectorName {""}
 
TString fHitBranchName {""}
 
TString fWaveformBranchName {""}
 
TString fWaveformDataBranchName {""}
 
PndTCAInputContainer< BSEmcMCHitfHitArray {}
 
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 BSEmcMCHitToTimebasedWaveforms< ParSet >

Taks to create waveforms from hits.

This is an alternative to BSEmcHitsToWaveform, 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 50 of file BSEmcMCHitToTimebasedWaveforms.h.

Constructor & Destructor Documentation

◆ BSEmcMCHitToTimebasedWaveforms()

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

Definition at line 53 of file BSEmcMCHitToTimebasedWaveforms.h.

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

◆ ~BSEmcMCHitToTimebasedWaveforms()

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

Definition at line 60 of file BSEmcMCHitToTimebasedWaveforms.h.

60 {};

Member Function Documentation

◆ ClassDef()

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

◆ Exec()

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

Runs the task.

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

Parameters
optunused
Returns
void

Definition at line 137 of file BSEmcMCHitToTimebasedWaveforms.h.

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

◆ Init()

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

Init Task.

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

Returns
InitStatus
Return values
kSUCCESSsuccess

Definition at line 71 of file BSEmcMCHitToTimebasedWaveforms.h.

72  {
73 
75  if (fWaveformBranchName == "") {
77  }
78  if (fWaveformDataBranchName == "") {
80  }
82 
83  if (fSimulator == nullptr) {
84  LOG(debug) << "BSEmcMCHitToTimebasedWaveforms for " << fHitBranchName << " has no Simulator set. Calling SetupSimulator!";
87  }
88  if (fSimulator == nullptr) {
89  LOG(error) << "BSEmcMCHitToTimebasedWaveforms for " << fHitBranchName << " has no Simulator set. Aborting!";
90  exit(-1);
91  }
92 
93  // Get RootManager
94  FairRootManager *ioman = FairRootManager::Instance();
95  if (ioman == nullptr) {
96  LOG(error) << "BSEmcMCHitToTimebasedWaveforms<ParSet>::Init: "
97  << "RootManager not instantiated!";
98  return kFATAL;
99  }
100 
101  // Create and activiate output Buffer....choose between BSEmcWaveform and BSEmcMultiWaveform
102  fWaveformBuffer = new BSEmcWaveformBuffer(fWaveformBranchName, "BSEmcMultiWaveform", "Emc", GetPersistency());
103  LOG(debug) << "Using BSEmcMultiWaveform in WaveformBuffer.";
104 
105  fWaveformBuffer = (BSEmcWaveformBuffer *)ioman->RegisterWriteoutBuffer(fWaveformBranchName, fWaveformBuffer);
106  fWaveformBuffer->ActivateBuffering(fActivateBuffering);
107 
108  if (fStoreDataClass) {
110  }
111 
113 
114  if (fUse_photon_statistic) {
115  LOG(debug) << "BSEmcMCHitToTimebasedWaveforms: " << fDetectorName << " using photon statistic";
119  } else {
121  fExcessNoiseFactor = 1;
122  }
124  LOG(debug) << "BSEmcMCHitToTimebasedWaveforms::Init() for " << fHitBranchName << " done.";
125  return kSUCCESS;
126  }
Int_t GetUseDigiEffectiveSmearingMode() const
Definition: BSEmcDigiPar.h:30
const std::string fgMultiWaveformBranchName
void SetHitBranchName(const TString &t_branchname)
Double_t GetRearCrystalSurfaceArea() const
Definition: BSEmcDigiPar.h:37
virtual void SetupSimulator()=0
virtual void StoreWaveformData(TString t_branchName, TString t_folderName, Bool_t t_persistance)
Double_t GetOverlapTime() const
Definition: BSEmcDigiPar.h:40
virtual Bool_t Init(const TString &t_branchname) final
Fetch the data t_branchname in form of TClonesArray * from the FairRootManager.
buffer for waveforms, used by BSEmcFwEndcapTimebasedWaveforms
const std::string fgWaveformDataBranchName
Double_t GetQuantumEfficiency() const
Definition: BSEmcDigiPar.h:34
Double_t GetSensitiveArea() const
Definition: BSEmcDigiPar.h:33
const std::string fgMCHitBranchName
PndTCAInputContainer< BSEmcMCHit > fHitArray
Double_t GetDetectedPhotonsPerMeV() const
Definition: BSEmcDigiPar.h:32
Double_t GetExcessNoiseFactor() const
Definition: BSEmcDigiPar.h:35

◆ RunTimebased()

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

Definition at line 187 of file BSEmcMCHitToTimebasedWaveforms.h.

◆ SetParContainers()

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

Get parameter containers

Definition at line 199 of file BSEmcMCHitToTimebasedWaveforms.h.

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

◆ SetPhotonStatisticParName()

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

Definition at line 194 of file BSEmcMCHitToTimebasedWaveforms.h.

194 { fPhotonStatisticParName = t_photonStatParName; }

◆ SetSimulator()

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

Definition at line 188 of file BSEmcMCHitToTimebasedWaveforms.h.

188 { fSimulator = t_simulator; }

◆ SetStorageOfData()

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

Definition at line 189 of file BSEmcMCHitToTimebasedWaveforms.h.

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

◆ SetupSimulator()

◆ SetWaveformBranchName()

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

Definition at line 192 of file BSEmcMCHitToTimebasedWaveforms.h.

◆ SetWaveformDataBranchName()

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

Definition at line 193 of file BSEmcMCHitToTimebasedWaveforms.h.

◆ SetWaveformGenParName()

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

Definition at line 195 of file BSEmcMCHitToTimebasedWaveforms.h.

195 { fWaveformGenParName = t_waveformGenParName; }

◆ StoreDataClass()

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

Method to specify whether waveforms are stored or not.

Definition at line 190 of file BSEmcMCHitToTimebasedWaveforms.h.

Member Data Documentation

◆ fActivateBuffering

◆ fDetectorName

◆ fDigiPar

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

Digitisation parameter container.

Definition at line 238 of file BSEmcMCHitToTimebasedWaveforms.h.

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

◆ fExcessNoiseFactor

template<class ParSet>
Double_t BSEmcMCHitToTimebasedWaveforms< ParSet >::fExcessNoiseFactor {0}
protected

◆ fHitArray

◆ fHitBranchName

template<class ParSet>
TString BSEmcMCHitToTimebasedWaveforms< ParSet >::fHitBranchName {""}
protected

◆ fNPhotoElectronsPerMeV

template<class ParSet>
Double_t BSEmcMCHitToTimebasedWaveforms< ParSet >::fNPhotoElectronsPerMeV {0}
protected

◆ fOverlapTime

◆ fPhotonStatisticPar

◆ fPhotonStatisticParName

◆ fSimulator

◆ fStoreDataClass

◆ fUse_photon_statistic

template<class ParSet>
Bool_t BSEmcMCHitToTimebasedWaveforms< ParSet >::fUse_photon_statistic {kFALSE}
protected

◆ fWaveformBranchName

◆ fWaveformBuffer

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

◆ fWaveformDataBranchName

◆ fWaveformGenParName


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