ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtSimpleSimulation.h
Go to the documentation of this file.
1 #ifndef AT_SIMPLE_SIMULATION_H
2 #define AT_SIMPLE_SIMULATION_H
3 
4 #include "AtMCPoint.h"
5 
6 #include <Math/Point3D.h>
7 #include <Math/Point3Dfwd.h> // for XYZPoint
8 #include <Math/Vector3D.h>
9 #include <Math/Vector3Dfwd.h> // for XYZVector
10 #include <Math/Vector4D.h>
11 #include <Math/Vector4Dfwd.h> // for PxPyPzEVector
12 #include <TClonesArray.h>
13 #include <TObject.h>
14 
15 #include <map>
16 #include <memory>
17 #include <mutex>
18 #include <string> // for string
19 namespace AtTools {
20 class AtELossModel;
21 }
22 class TGeoVolume;
23 class AtSpaceChargeModel;
24 
30 protected:
31  struct ParticleID {
32  int A;
33  int Z;
34 
35  bool operator<(const ParticleID &other) const;
36  };
37  using SpaceChargeModel = std::shared_ptr<AtSpaceChargeModel>;
38  using ModelPtr = std::shared_ptr<AtTools::AtELossModel>;
42 
43  std::map<ParticleID, ModelPtr> fModels;
45  double fDistStep{1.}; // Distance step in mm for particles
46  std::mutex fGeoMutex;
47 
48  // Variables to across an entire event
49  static thread_local int fTrackID;
50  static thread_local TClonesArray fMCPoints;
51 
52 public:
56  AtSimpleSimulation(std::string geoFile);
58  AtSimpleSimulation(const AtSimpleSimulation &other) = default;
59  ~AtSimpleSimulation() = default;
60 
61  void RegisterBranch(std::string branchName = "AtTpcPoint", bool pers = true);
62  void AddModel(int Z, int A, ModelPtr model);
64  void SetDistanceStep(double step) { fDistStep = step; } //<In mm
65 
66  void NewEvent();
67  void SimulateParticle(int Z, int A, const XYZPoint &iniPos, const PxPyPzEVector &iniMom);
68 
69  AtMCPoint &GetMcPoint(int i) { return dynamic_cast<AtMCPoint &>(*fMCPoints.At(i)); }
70  int GetNumPoints() { return fMCPoints.GetEntries(); }
71  TClonesArray &GetPointsArray() { return fMCPoints; }
73 
74 protected:
75  bool IsInVolume(const std::string &volName, const XYZPoint &point);
76  std::string GetVolumeName(const XYZPoint &point);
77 
78  void SimulateParticle(ModelPtr model, const XYZPoint &iniPos, const PxPyPzEVector &iniMom);
79  void AddHit(double ELoss, const XYZPoint &pos, const PxPyPzEVector &mom, double length);
80  TGeoVolume *GetVolume(const XYZPoint &pos);
81 };
82 
83 #endif // AT_SIMPLE_SIMULATION_H
AtSimpleSimulation::RegisterBranch
void RegisterBranch(std::string branchName="AtTpcPoint", bool pers=true)
Definition: AtSimpleSimulation.cxx:175
AtSimpleSimulation::XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtSimpleSimulation.h:39
AtSimpleSimulation::fTrackID
static thread_local int fTrackID
Definition: AtSimpleSimulation.h:49
AtSimpleSimulation::ParticleID::A
int A
Definition: AtSimpleSimulation.h:32
AtSimpleSimulation::~AtSimpleSimulation
~AtSimpleSimulation()=default
AtSimpleSimulation::SimulateParticle
void SimulateParticle(int Z, int A, const XYZPoint &iniPos, const PxPyPzEVector &iniMom)
Definition: AtSimpleSimulation.cxx:92
XYZVector
ROOT::Math::XYZVector XYZVector
Definition: AtFindVertex.h:20
AtSimpleSimulation::GetVolume
TGeoVolume * GetVolume(const XYZPoint &pos)
Takes position in mm.
Definition: AtSimpleSimulation.cxx:49
AtSimpleSimulation::AddModel
void AddModel(int Z, int A, ModelPtr model)
Definition: AtSimpleSimulation.cxx:82
AtSimpleSimulation::ParticleID::Z
int Z
Definition: AtSimpleSimulation.h:33
AtSimpleSimulation::NewEvent
void NewEvent()
Definition: AtSimpleSimulation.cxx:141
XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtPatternCircle2D.h:18
AtSimpleSimulation::GetNumPoints
int GetNumPoints()
Definition: AtSimpleSimulation.h:70
PxPyPzEVector
ROOT::Math::PxPyPzEVector PxPyPzEVector
Definition: AtMCFission.cxx:48
AtSimpleSimulation::GetVolumeName
std::string GetVolumeName(const XYZPoint &point)
Definition: AtSimpleSimulation.cxx:73
AtSimpleSimulation::SetDistanceStep
void SetDistanceStep(double step)
Definition: AtSimpleSimulation.h:64
AtSimpleSimulation::AtSimpleSimulation
AtSimpleSimulation()
Definition: AtSimpleSimulation.cxx:31
AtSimpleSimulation::SetSpaceChargeModel
void SetSpaceChargeModel(SpaceChargeModel model)
Definition: AtSimpleSimulation.h:63
AtSimpleSimulation::GetSpaceChargeModel
SpaceChargeModel GetSpaceChargeModel()
Definition: AtSimpleSimulation.h:72
AtSimpleSimulation::ParticleID::operator<
bool operator<(const ParticleID &other) const
Definition: AtSimpleSimulation.cxx:37
AtSpaceChargeModel
Definition: AtSpaceChargeModel.h:9
AtSimpleSimulation
Definition: AtSimpleSimulation.h:29
AtTools
Definition: AtSimpleSimulation.h:19
AtSimpleSimulation::GetPointsArray
TClonesArray & GetPointsArray()
Definition: AtSimpleSimulation.h:71
AtSimpleSimulation::fSCModel
SpaceChargeModel fSCModel
Definition: AtSimpleSimulation.h:44
AtMCPoint.h
AtSimpleSimulation::fGeoMutex
std::mutex fGeoMutex
Definition: AtSimpleSimulation.h:46
AtMCPoint
Definition: AtMCPoint.h:26
AtSimpleSimulation::ModelPtr
std::shared_ptr< AtTools::AtELossModel > ModelPtr
Definition: AtSimpleSimulation.h:38
AtSimpleSimulation::PxPyPzEVector
ROOT::Math::PxPyPzEVector PxPyPzEVector
Definition: AtSimpleSimulation.h:41
AtSimpleSimulation::GetMcPoint
AtMCPoint & GetMcPoint(int i)
Definition: AtSimpleSimulation.h:69
AtSimpleSimulation::SpaceChargeModel
std::shared_ptr< AtSpaceChargeModel > SpaceChargeModel
Definition: AtSimpleSimulation.h:37
AtSimpleSimulation::XYZVector
ROOT::Math::XYZVector XYZVector
Definition: AtSimpleSimulation.h:40
AtSimpleSimulation::ParticleID
Definition: AtSimpleSimulation.h:31
AtSimpleSimulation::fDistStep
double fDistStep
Definition: AtSimpleSimulation.h:45
AtSimpleSimulation::AtSimpleSimulation
AtSimpleSimulation(const AtSimpleSimulation &other)=default
AtSimpleSimulation::IsInVolume
bool IsInVolume(const std::string &volName, const XYZPoint &point)
Definition: AtSimpleSimulation.cxx:62
AtSimpleSimulation::fMCPoints
static thread_local TClonesArray fMCPoints
Definition: AtSimpleSimulation.h:50
AtTools::AtELossModel
Definition: AtELossModel.h:15
AtSimpleSimulation::AddHit
void AddHit(double ELoss, const XYZPoint &pos, const PxPyPzEVector &mom, double length)
Definition: AtSimpleSimulation.cxx:150
AtSimpleSimulation::fModels
std::map< ParticleID, ModelPtr > fModels
Definition: AtSimpleSimulation.h:43