ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtMCFitter.h
Go to the documentation of this file.
1 #ifndef ATMCFITTER_H
2 #define ATMCFITTER_H
3 
4 #include "AtEvent.h"
5 #include "AtMCResult.h" // for AtMCResult
6 #include "AtRawEvent.h"
7 
8 #include <TClonesArray.h> // for TClonesArray
9 
10 #include <functional> // for function
11 #include <map> // for map
12 #include <memory> // for shared_ptr
13 #include <mutex> // for mutex
14 #include <set> // for set
15 #include <string> // for string
16 #include <utility> // for pair
17 #include <vector> // for vector
18 
19 class AtBaseEvent; // lines 13-13
20 class AtClusterize; // lines 15-15
21 class AtMap; // lines 18-18
22 class AtPatternEvent; // lines 12-12
23 class AtPulse; // lines 16-16
24 class AtSimpleSimulation; // lines 14-14
25 class AtDigiPar;
26 class AtPSA;
27 
28 namespace MCFitter {
29 class AtParameterDistribution;
30 
31 class AtMCFitter {
32 protected:
33  using ParamPtr = std::shared_ptr<AtParameterDistribution>;
34  using SimPtr = std::shared_ptr<AtSimpleSimulation>;
35 
36  using ClusterPtr = std::shared_ptr<AtClusterize>;
37  using PulsePtr = std::shared_ptr<AtPulse>;
38  using MapPtr = std::shared_ptr<AtMap>;
39  using PsaPtr = std::shared_ptr<AtPSA>;
40  using ObjPair = std::pair<int, double>; //< Iteration number and objective function value
41 
42  std::map<std::string, ParamPtr> fParameters;
43 
48  PsaPtr fPSA{nullptr};
49 
50  int fNumIter{1};
51  int fNumRounds{1};
53  bool fTimeEvent{false};
54  int fNumThreads{1};
55 
56  // Things used by threads excecuting that are either expensive to create and delete
57  // or unaccessable due to FairRoot design choices
58  const AtPatternEvent *fCurrentEvent{nullptr};
59  std::vector<PulsePtr> fThPulse; //< Cached because it is expensive to create and delete.
60  const AtDigiPar *fPar{nullptr}; //<Tracked sepretly because FairRun::Instance is thread local.
61 
62  // These are not locked by the mutex since we ensure no realloc of the vector is happening and
63  // each thread is accessing a discrete subset of the elements of these vectors
64  std::vector<AtRawEvent> fRawEventArray;
65  std::vector<AtEvent> fEventArray;
66 
68  std::mutex fResultMutex;
70  std::set<AtMCResult, std::function<bool(AtMCResult, AtMCResult)>> fResults;
71 
72 public:
74  virtual ~AtMCFitter() = default;
75 
76  void Init();
77  void SetPSA(PsaPtr psa) { fPSA = psa; }
78  void Exec(const AtPatternEvent &event);
79 
80  ParamPtr GetParameter(const std::string &name) const;
81  void FillResultArrays(TClonesArray &resultArray, TClonesArray &simEvent, TClonesArray &simRawEvent);
82  void SetNumIter(int iter) { fNumIter = iter; }
83 
85  void SetNumRounds(int rounds) { fNumRounds = rounds; }
86  void SetTimeEvent(bool val) { fTimeEvent = val; }
87  void SetNumEventsToSave(int num) { fNumEventsToSave = num; }
88  void SetNumThreads(int num);
89 
90 protected:
91  void RunRound();
92  void RunIterRange(int startIter, int numIter, AtPulse *pulse);
93 
97  virtual void CreateParamDistros() = 0;
98 
102  virtual void SetParamDistributions(const AtPatternEvent &event) = 0;
103 
107  virtual double ObjectiveFunction(const AtBaseEvent &expEvent, int SimEventID, AtMCResult &definition) = 0;
108 
113  virtual TClonesArray SimulateEvent(AtMCResult &definition) = 0;
114 
120  virtual AtMCResult DefineEvent();
121 
125  virtual void RecenterParamDistributions();
126 
131  int DigitizeEvent(const TClonesArray &points, int idx, AtPulse *pulse);
132 };
133 
134 } // namespace MCFitter
135 
136 #endif // ATMCFITTER_H
AtMap
Definition: AtMap.h:33
MCFitter::AtMCFitter::fMap
MapPtr fMap
Definition: AtMCFitter.h:44
AtRawEvent.h
MCFitter::AtMCFitter::SetNumIter
void SetNumIter(int iter)
Definition: AtMCFitter.h:82
AtPatternEvent
Definition: AtPatternEvent.h:19
AtEvent.h
MCFitter::AtMCFitter::PsaPtr
std::shared_ptr< AtPSA > PsaPtr
Definition: AtMCFitter.h:39
MCFitter::AtMCFitter::AtMCFitter
AtMCFitter(SimPtr sim, ClusterPtr cluster, PulsePtr pulse)
Definition: AtMCFitter.cxx:31
MCFitter::AtMCFitter::fPSA
PsaPtr fPSA
Definition: AtMCFitter.h:48
MCFitter::AtMCFitter::fResultMutex
std::mutex fResultMutex
Store the iteration number sorted by lowest objective funtion.
Definition: AtMCFitter.h:69
MCFitter::AtMCFitter::MapPtr
std::shared_ptr< AtMap > MapPtr
Definition: AtMCFitter.h:38
AtMCResult.h
MCFitter::AtMCFitter::FillResultArrays
void FillResultArrays(TClonesArray &resultArray, TClonesArray &simEvent, TClonesArray &simRawEvent)
Definition: AtMCFitter.cxx:177
MCFitter::AtMCFitter::fPar
const AtDigiPar * fPar
Definition: AtMCFitter.h:60
MCFitter::AtMCFitter::fNumRounds
int fNumRounds
Definition: AtMCFitter.h:51
MCFitter::AtMCFitter::SetNumRounds
void SetNumRounds(int rounds)
Set number of times to run fNumIter iterations and then re-center and truncate the parameter space.
Definition: AtMCFitter.h:85
MCFitter::AtMCFitter::fNumEventsToSave
int fNumEventsToSave
Definition: AtMCFitter.h:52
MCFitter::AtMCFitter::Init
void Init()
Definition: AtMCFitter.cxx:52
MCFitter::AtMCFitter::ObjectiveFunction
virtual double ObjectiveFunction(const AtBaseEvent &expEvent, int SimEventID, AtMCResult &definition)=0
This is the thing we are minimizing between events (SimEventID is index in TClonesArray)
hc::cluster
std::vector< size_t > cluster
Definition: hc.h:25
MCFitter::AtMCFitter::DigitizeEvent
int DigitizeEvent(const TClonesArray &points, int idx, AtPulse *pulse)
Definition: AtMCFitter.cxx:158
MCFitter::AtMCFitter::PulsePtr
std::shared_ptr< AtPulse > PulsePtr
Definition: AtMCFitter.h:37
MCFitter::AtMCFitter::DefineEvent
virtual AtMCResult DefineEvent()
Definition: AtMCFitter.cxx:200
MCFitter::AtMCFitter
Definition: AtMCFitter.h:31
MCFitter::AtMCFitter::RunRound
void RunRound()
Definition: AtMCFitter.cxx:117
MCFitter::AtMCFitter::fRawEventArray
std::vector< AtRawEvent > fRawEventArray
Definition: AtMCFitter.h:64
MCFitter::AtMCFitter::fClusterize
ClusterPtr fClusterize
Definition: AtMCFitter.h:46
MCFitter::AtMCFitter::~AtMCFitter
virtual ~AtMCFitter()=default
MCFitter::AtMCFitter::ClusterPtr
std::shared_ptr< AtClusterize > ClusterPtr
Definition: AtMCFitter.h:36
MCFitter::AtMCFitter::fSim
SimPtr fSim
Definition: AtMCFitter.h:45
MCFitter::AtMCResult
Definition: AtMCResult.h:18
MCFitter::AtMCFitter::fNumIter
int fNumIter
Definition: AtMCFitter.h:50
MCFitter::AtMCFitter::CreateParamDistros
virtual void CreateParamDistros()=0
Create the parameter distributions to use for the fit.
AtBaseEvent
Base class for all event types in ATTPCROOT.
Definition: AtBaseEvent.h:20
AtDigiPar
Definition: AtDigiPar.h:14
AtSimpleSimulation
Definition: AtSimpleSimulation.h:29
MCFitter::AtMCFitter::ParamPtr
std::shared_ptr< AtParameterDistribution > ParamPtr
Definition: AtMCFitter.h:33
MCFitter::AtMCFitter::SetTimeEvent
void SetTimeEvent(bool val)
Definition: AtMCFitter.h:86
MCFitter::AtMCFitter::SimulateEvent
virtual TClonesArray SimulateEvent(AtMCResult &definition)=0
MCFitter::AtMCFitter::fPulse
PulsePtr fPulse
Definition: AtMCFitter.h:47
MCFitter::AtMCFitter::SetNumThreads
void SetNumThreads(int num)
Definition: AtMCFitter.cxx:45
MCFitter::AtMCFitter::SetNumEventsToSave
void SetNumEventsToSave(int num)
Definition: AtMCFitter.h:87
MCFitter::AtMCFitter::SetParamDistributions
virtual void SetParamDistributions(const AtPatternEvent &event)=0
Set parameter distributions (mean/spread) from the event.
MCFitter::AtMCFitter::GetParameter
ParamPtr GetParameter(const std::string &name) const
Definition: AtMCFitter.cxx:37
MCFitter::AtMCFitter::fTimeEvent
bool fTimeEvent
Definition: AtMCFitter.h:53
AtClusterize
Definition: AtClusterize.h:24
MCFitter::AtMCFitter::Exec
void Exec(const AtPatternEvent &event)
Definition: AtMCFitter.cxx:97
MCFitter::AtMCFitter::fParameters
std::map< std::string, ParamPtr > fParameters
Definition: AtMCFitter.h:42
MCFitter::AtMCFitter::SimPtr
std::shared_ptr< AtSimpleSimulation > SimPtr
Definition: AtMCFitter.h:34
MCFitter::AtMCFitter::RecenterParamDistributions
virtual void RecenterParamDistributions()
Definition: AtMCFitter.cxx:207
MCFitter::AtMCFitter::fEventArray
std::vector< AtEvent > fEventArray
Definition: AtMCFitter.h:65
AtPSA
Definition: AtPSA.h:27
AtPulse
Definition: AtPulse.h:22
MCFitter::AtMCFitter::ObjPair
std::pair< int, double > ObjPair
Definition: AtMCFitter.h:40
MCFitter::AtMCFitter::fThPulse
std::vector< PulsePtr > fThPulse
Definition: AtMCFitter.h:59
MCFitter::AtMCFitter::fCurrentEvent
const AtPatternEvent * fCurrentEvent
Definition: AtMCFitter.h:58
MCFitter::AtMCFitter::fNumThreads
int fNumThreads
Definition: AtMCFitter.h:54
MCFitter::AtMCFitter::SetPSA
void SetPSA(PsaPtr psa)
Definition: AtMCFitter.h:77
MCFitter::AtMCFitter::RunIterRange
void RunIterRange(int startIter, int numIter, AtPulse *pulse)
Definition: AtMCFitter.cxx:72
MCFitter::AtMCFitter::fResults
std::set< AtMCResult, std::function< bool(AtMCResult, AtMCResult)> > fResults
Definition: AtMCFitter.h:70
MCFitter
Definition: AtMCResult.cxx:5