ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtMCFission.h
Go to the documentation of this file.
1 #ifndef ATMCFISSION_H
2 #define ATMCFISSION_H
3 #include "AtBaseEvent.h" // for AtBaseEvent
4 #include "AtMCFitter.h" // for AtMCFitter, AtMCFitter::ClusterPtr
5 #include "AtMCResult.h"
6 #include "AtPatternEvent.h" // for AtPatternEvent
7 
8 #include <Math/Point3D.h> // for PositionVector3D
9 #include <Math/Point3Dfwd.h> // for XYZPoint
10 #include <Math/Vector3D.h> // for DisplacementVector3D
11 #include <Math/Vector3Dfwd.h> // for XYZVector
12 #include <Math/Vector4D.h> // for LorentzVector
13 #include <Math/Vector4Dfwd.h> // for PxPyPzEVector
14 #include <TClonesArray.h> // for TClonesArray
15 
16 #include <array> // for array
17 #include <functional> // for function
18 #include <vector> // for vector
19 class AtFissionEvent;
20 namespace MCFitter {
21 struct Ion {
22  int Z;
23  int A;
24 };
25 
26 class AtMCFission : public AtMCFitter {
27 protected:
32  std::function<double(const std::vector<double> &exp, const std::vector<double> &sim, const double *par)>;
33  Ion fCN{85, 204};
34 
35  // Range of valid guesses for Z (not inclusive)
36  int fZmin = 26;
37  int fZmax = 59;
38 
41  XYZVector fNominalBeamDir{11.464, 3.754, 1000};
42 
45 
46  float fAmp = 1;
47  bool fFitAmp = true;
48 
49 public:
51  virtual ~AtMCFission() = default;
52  void SetCN(Ion cn) { fCN = cn; }
54  void SetAmp(float amp);
55  void SetZRange(int Zmin, int Zmax)
56  {
57  fZmin = Zmin;
58  fZmax = Zmax;
59  }
60 
61  // Old static functinos used to test different objective functions in early analysis
62  static double ObjectiveChargeChi2(const std::vector<double> &exp, const std::vector<double> &sim, const double *par);
63  static double
64  ObjectiveChargeChi2Norm(const std::vector<double> &exp, const std::vector<double> &sim, const double *par);
65  static double
66  ObjectiveChargeDiff2(const std::vector<double> &exp, const std::vector<double> &sim, const double *par);
67 
68 protected:
69  virtual void CreateParamDistros() override;
70  virtual void SetParamDistributions(const AtPatternEvent &event) override;
71  virtual double ObjectiveFunction(const AtBaseEvent &expEvent, int SimEventID, AtMCResult &definition) override;
72  virtual TClonesArray SimulateEvent(AtMCResult &definition) override;
73  virtual AtMCResult DefineEvent() override;
74 
75 protected:
76  // Actual objective functions used (position is just for diagnostics, not used in minimization)
77  double ObjectiveCharge(const AtFissionEvent &expEvent, int SimEventID, AtMCResult &def);
78  double ObjectiveCharge(const std::array<std::vector<double>, 2> &exp, const std::array<std::vector<double>, 2> &sim,
79  AtMCResult &definition);
80  double ObjectivePositionPads(const AtFissionEvent &expEvent, int SimEventID);
81 
82  // Objective functions not in use
83  double ObjectivePosition(const AtFissionEvent &expEvent, int SimEventID);
84  double ObjectiveChargePads(const AtFissionEvent &expEvent, int SimEventID, AtMCResult &def);
85 
87  std::array<Ion, 2> GetFragmentSpecies(AtMCResult &, const Ion &CN);
88 
89  XYZVector GetBeamDir(AtMCResult &, const std::array<XYZVector, 2> &ffDir, double pTrans);
90  XYZVector GetBeamDirSample(AtMCResult &, const std::array<XYZVector, 2> &ffDir);
91  XYZVector GetBeamDirSameV(AtMCResult &, const std::array<XYZVector, 2> &ffDir);
92  std::array<XYZVector, 2> GetMomDirLab(AtMCResult &);
93 
94  void SetMomMagnitude(std::array<XYZVector, 2> &mom, double pTrans);
95 
96  double ObjectivePosition(double uE, double sE, double uO, double sO);
97  double ObjectivePosition4(double uE, double sE, double uO, double sO);
98  double ObjectivePosition3(double uE, double sE, double uO, double sO);
99  double ObjectivePosition2(double uE, double sE, double uO, double sO);
100 
101  // Returns the average total kinetic energy from viola systematics in MeV
102  static double violaEn(int A, int Z) { return 0.1189 * Z * Z / std::pow(A, 1.0 / 3.0) + 7.3; }
103 };
104 
105 } // namespace MCFitter
106 
107 #endif // ATMCFISSION_H
MCFitter::AtMCFission::ObjectivePosition
double ObjectivePosition(const AtFissionEvent &expEvent, int SimEventID)
Definition: AtMCFission.cxx:318
MCFitter::AtMCFission::GetBeamDirSample
XYZVector GetBeamDirSample(AtMCResult &, const std::array< XYZVector, 2 > &ffDir)
Definition: AtMCFission.cxx:496
MCFitter::Ion
Definition: AtMCFission.h:21
MCFitter::AtMCFission::fZmax
int fZmax
Definition: AtMCFission.h:37
MCFitter::AtMCFission::CreateParamDistros
virtual void CreateParamDistros() override
Create the parameter distributions to use for the fit.
Definition: AtMCFission.cxx:56
MCFitter::AtMCFission::SetCN
void SetCN(Ion cn)
Definition: AtMCFission.h:52
AtBaseEvent.h
AtPatternEvent
Definition: AtPatternEvent.h:19
MCFitter::AtMCFission::ObjectiveChargePads
double ObjectiveChargePads(const AtFissionEvent &expEvent, int SimEventID, AtMCResult &def)
Definition: AtMCFission.cxx:129
MCFitter::AtMCFission::SetAmp
void SetAmp(float amp)
Definition: AtMCFission.cxx:50
MCFitter::AtMCFission::XYZEVector
ROOT::Math::PxPyPzEVector XYZEVector
Definition: AtMCFission.h:30
MCFitter::AtMCFission::SimulateEvent
virtual TClonesArray SimulateEvent(AtMCResult &definition) override
Definition: AtMCFission.cxx:572
XYZVector
ROOT::Math::XYZVector XYZVector
Definition: AtFindVertex.h:20
MCFitter::AtMCFission::SetMomMagnitude
void SetMomMagnitude(std::array< XYZVector, 2 > &mom, double pTrans)
Definition: AtMCFission.cxx:562
MCFitter::AtMCFission::fObjCharge
ObjectiveFuncCharge fObjCharge
Objective function to minimize the difference between A*sim and exp charge curves.
Definition: AtMCFission.h:44
AtMCFitter.h
AtMCResult.h
MCFitter::AtMCFission::ObjectiveChargeChi2
static double ObjectiveChargeChi2(const std::vector< double > &exp, const std::vector< double > &sim, const double *par)
Definition: AtMCFission.cxx:224
MCFitter::AtMCFission::SetChargeObjective
void SetChargeObjective(ObjectiveFuncCharge obj)
Definition: AtMCFission.h:53
MCFitter::AtMCFission::ObjectivePosition3
double ObjectivePosition3(double uE, double sE, double uO, double sO)
Definition: AtMCFission.cxx:415
MCFitter::Ion::A
int A
Definition: AtMCFission.h:23
MCFitter::AtMCFission::ObjectiveChargeDiff2
static double ObjectiveChargeDiff2(const std::vector< double > &exp, const std::vector< double > &sim, const double *par)
Definition: AtMCFission.cxx:256
XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtPatternCircle2D.h:18
MCFitter::AtMCFission::ObjectivePosition2
double ObjectivePosition2(double uE, double sE, double uO, double sO)
Definition: AtMCFission.cxx:376
MCFitter::AtMCFission::SetZRange
void SetZRange(int Zmin, int Zmax)
Definition: AtMCFission.h:55
hc::cluster
std::vector< size_t > cluster
Definition: hc.h:25
MCFitter::AtMCFitter::PulsePtr
std::shared_ptr< AtPulse > PulsePtr
Definition: AtMCFitter.h:37
MCFitter::AtMCFitter
Definition: AtMCFitter.h:31
MCFitter::AtMCFission::fZmin
int fZmin
Definition: AtMCFission.h:36
MCFitter::AtMCFitter::ClusterPtr
std::shared_ptr< AtClusterize > ClusterPtr
Definition: AtMCFitter.h:36
PxPyPzEVector
ROOT::Math::PxPyPzEVector PxPyPzEVector
Definition: AtMCFission.cxx:48
MCFitter::AtMCFission::fAmp
float fAmp
Definition: AtMCFission.h:46
MCFitter::AtMCFission::GetVertex
XYZPoint GetVertex(AtMCResult &)
Definition: AtMCFission.cxx:422
MCFitter::AtMCResult
Definition: AtMCResult.h:18
MCFitter::AtMCFission::ObjectiveFuncCharge
std::function< double(const std::vector< double > &exp, const std::vector< double > &sim, const double *par)> ObjectiveFuncCharge
Definition: AtMCFission.h:32
AtBaseEvent
Base class for all event types in ATTPCROOT.
Definition: AtBaseEvent.h:20
AtPatternEvent.h
MCFitter::AtMCFission::ObjectivePositionPads
double ObjectivePositionPads(const AtFissionEvent &expEvent, int SimEventID)
Definition: AtMCFission.cxx:189
MCFitter::AtMCFission::AtMCFission
AtMCFission(SimPtr sim, ClusterPtr cluster, PulsePtr pulse)
Definition: AtMCFission.h:50
MCFitter::AtMCFission::ObjectiveFunction
virtual double ObjectiveFunction(const AtBaseEvent &expEvent, int SimEventID, AtMCResult &definition) override
This is the thing we are minimizing between events (SimEventID is index in TClonesArray)
Definition: AtMCFission.cxx:108
MCFitter::AtMCFission::XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtMCFission.h:28
MCFitter::Ion::Z
int Z
Definition: AtMCFission.h:22
MCFitter::AtMCFission::fCN
Ion fCN
Definition: AtMCFission.h:33
MCFitter::AtMCFission::ObjectiveChargeChi2Norm
static double ObjectiveChargeChi2Norm(const std::vector< double > &exp, const std::vector< double > &sim, const double *par)
Definition: AtMCFission.cxx:239
MCFitter::AtMCFission::GetFragmentSpecies
std::array< Ion, 2 > GetFragmentSpecies(AtMCResult &, const Ion &CN)
Definition: AtMCFission.cxx:428
MCFitter::AtMCFission::GetBeamDir
XYZVector GetBeamDir(AtMCResult &, const std::array< XYZVector, 2 > &ffDir, double pTrans)
Definition: AtMCFission.cxx:454
MCFitter::AtMCFission
Definition: AtMCFission.h:26
MCFitter::AtMCFission::fFitAmp
bool fFitAmp
Definition: AtMCFission.h:47
MCFitter::AtMCFitter::SimPtr
std::shared_ptr< AtSimpleSimulation > SimPtr
Definition: AtMCFitter.h:34
MCFitter::AtMCFission::DefineEvent
virtual AtMCResult DefineEvent() override
Definition: AtMCFission.cxx:533
MCFitter::AtMCFission::~AtMCFission
virtual ~AtMCFission()=default
AtFissionEvent
Definition: AtFissionEvent.h:29
MCFitter::AtMCFission::GetMomDirLab
std::array< XYZVector, 2 > GetMomDirLab(AtMCResult &)
Definition: AtMCFission.cxx:526
MCFitter::AtMCFission::XYZVector
ROOT::Math::XYZVector XYZVector
Definition: AtMCFission.h:29
MCFitter::AtMCFission::ObjectiveCharge
double ObjectiveCharge(const AtFissionEvent &expEvent, int SimEventID, AtMCResult &def)
Definition: AtMCFission.cxx:207
MCFitter::AtMCFission::ObjectivePosition4
double ObjectivePosition4(double uE, double sE, double uO, double sO)
Definition: AtMCFission.cxx:389
MCFitter::AtMCFission::fNominalBeamDir
XYZVector fNominalBeamDir
Definition: AtMCFission.h:41
MCFitter::AtMCFission::SetParamDistributions
virtual void SetParamDistributions(const AtPatternEvent &event) override
Set parameter distributions (mean/spread) from the event.
Definition: AtMCFission.cxx:73
MCFitter::AtMCFission::violaEn
static double violaEn(int A, int Z)
Definition: AtMCFission.h:102
MCFitter::AtMCFission::GetBeamDirSameV
XYZVector GetBeamDirSameV(AtMCResult &, const std::array< XYZVector, 2 > &ffDir)
Definition: AtMCFission.cxx:439
MCFitter
Definition: AtMCResult.cxx:5