PandaRoot
PndProcessHandler.h
Go to the documentation of this file.
1 #ifndef PNDPROCESSORHANDLER_HH
2 #define PNDPROCESSORHANDLER_HH
3 
4 #include <memory>
5 #include <string>
6 
7 #include "PndParameterRegister.h"
8 #include "PndProcess.h"
9 
17 template <class DataStruct>
19  public:
20  PndProcessHandler(const std::string &t_detectorname = "") : fDetectorName(t_detectorname){};
21  virtual ~PndProcessHandler();
22 
27  void AddProcess(PndProcess<DataStruct> * /*t_process*/);
28 
33  void CallProcesses();
34 
39  void SetupProcesses();
40 
41  const std::vector<PndProcess<DataStruct> *> &GetProcesses() { return fProcesses; }
42  const DataStruct *GetCopyOfData() const { return fData.get(); }
43  DataStruct *GetPtrToData() { return fData.get(); }
46  const std::string &GetDetectorName() const { return fDetectorName; }
47 
48  protected:
49  virtual void SetupProcess(PndProcess<DataStruct> *t_process);
50 
51  std::vector<PndProcess<DataStruct> *> fProcesses{};
52  std::unique_ptr<DataStruct> fData{new DataStruct};
53  std::unique_ptr<PndParameterRegister> fParameterRegister{new PndParameterRegister};
54  std::string fDetectorName{""};
55 };
56 
57 template <class DataStruct>
59 {
60  for (PndProcess<DataStruct> *process : this->fProcesses) {
61  delete process;
62  }
63  this->fProcesses.clear();
64 }
65 
66 template <class DataStruct>
68 {
69  t_process->SetDetectorName(fDetectorName);
70  fParameterRegister->AddRequestList(t_process->GetListOfRequiredParameters());
71  this->fProcesses.push_back(t_process);
72 }
73 
74 template <class DataStruct>
76 {
77  for (PndProcess<DataStruct> *process : this->fProcesses) {
78  process->SetData(fData.get());
79  this->SetupProcess(process);
80  }
81 }
82 
83 template <class DataStruct>
85 {
86  t_process->SetupParameters(this->fParameterRegister.get());
87 }
88 
89 template <class DataStruct>
91 {
92  for (PndProcess<DataStruct> *process : this->fProcesses) {
93  process->PreProcess();
94  process->Process();
95  process->PostProcess();
96  }
97 }
98 
99 #endif /*PNDPROCESSORHANDLER_HH*/
Base Process class.
Definition: PndProcess.h:24
PndProcessHandler(const std::string &t_detectorname="")
std::unique_ptr< DataStruct > fData
PndParameterRegister * GetParameterRegister()
virtual void SetupProcess(PndProcess< DataStruct > *t_process)
virtual ~PndProcessHandler()
void AddProcess(PndProcess< DataStruct > *)
Add a PndProcess of appropriate type to the list of PndProcesses to be managed.
std::unique_ptr< PndParameterRegister > fParameterRegister
void SetupProcesses()
Call for each PndProcess the SetData and SetupParameter.
const std::string & GetDetectorName() const
const std::vector< PndProcess< DataStruct > * > & GetProcesses()
const PndParameterRegister * GetParameterRegister() const
virtual void SetDetectorName(const std::string &t_detectorname)
Set the Detector name. Important, as most EmcParameter need to know for which detector they need to b...
Definition: PndProcess.h:35
void CallProcesses()
Call for all PndProcesses the PreProcess/Process/PosProcess functions.
std::string fDetectorName
DataStruct * GetPtrToData()
const std::vector< std::string > & GetListOfRequiredParameters() const
Get the List Of Required Parameters.
Definition: PndProcess.h:42
Helper class to indirect the Parameter fetching via the FairRuntimeDb.
std::vector< PndProcess< DataStruct > * > fProcesses
Base class for classes handling a set of PndProcesses.
virtual void SetupParameters(const PndParameterRegister *t_parameter)=0
Fetch all parameters from the PndParameterRegister.
const DataStruct * GetCopyOfData() const