BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Loading...
Searching...
No Matches
BDSLinkTrackerInterface.hh
1#ifndef BDSLINKTRACKERINTERFACE_H
2#define BDSLINKTRACKERINTERFACE_H
3
4#include <string>
5
6class G4ParticleTable;
7class G4IonTable;
8class BDSLinkBunch;
9class BDSIMLink;
11
13public:
14 void SetNoNeutralParticles(bool val) { noNeutralParticles = val; }
15 bool GetNoNeutralParticles() const { return noNeutralParticles; }
16
17 void ClearXtrackData();
18
19 ~BDSLinkTrackerInterface() = default;
20
21 static BDSLinkTrackerInterface* GetInstance(std::string bdsimConfigFileIn,
22 int referenceParticlePDGIn = 11,
23 double referenceKineticEnergyIn = 100,
24 double relativeEnergyCutIn = 0.01,
25 int seedIn = 1234,
26 int referenceIonChargeIn = 1,
27 bool batchModeIn = true);
28 static BDSLinkTrackerInterface* GetInstance();
29
30 std::string GetBDSIMConfigFile() {return bdsimConfigFile;}
31 int GetReferenceParticlePDG() {return referenceParticlePDG;}
32 double GetReferenceParticleKineticEnergy() {return referenceKineticEnergy;}
33 double GetRelativeEnergyCut() {return relativeEnergyCut;}
34 int GetSeed() {return seed;}
35 int GetReferenceIonCharge() {return referenceIonCharge;}
36 bool GetBatchMode() {return batchMode;}
37 double GetMinimumKineticEnergy() {return minimumKineticEnergy;}
38
39 BDSLinkBunch* GetBunchLink() {return linkBunch;}
40 BDSIMLink* GetBDSIMLink() {return linkBDSIM;}
41
42 BDSParticleDefinition* GetReferenceParticleDefinition() const;
43 void SetReferenceParticleDefinition(BDSParticleDefinition *rpd) {referenceParticleDefinition = rpd;}
44
45 BDSParticleDefinition* prepareBDSParticleDefition(int pdg,
46 double momentum,
47 double kineticEnergy,
48 int ionCharge);
49 void AddParticle(double x, double y, double px, double py,
50 double ct, double deltap, double chi,
51 double chargeRatio, double s,
52 int trackid, int pdgid);
53 void AddParticle(double x, double y, double px, double py,
54 double ct, double pc, double s,
55 int trackid, int pdgid);
56 void AddParticles(std::vector<double> x, std::vector<double> y,
57 std::vector<double> px, std::vector<double> py,
58 std::vector<double> ct, std::vector<double> deltap,
59 std::vector<double> chi, std::vector<double> chargeRatio,
60 std::vector<double> s, std::vector<int> trackid,
61 std::vector<int> pdgid);
62
63 // TODO is this needed?
64 std::vector<bool>& GetParticleActiveState() { return particleActiveState; }
65
66protected:
67 bool noNeutralParticles = true; // default value
68 // singleton pointer
69 static BDSLinkTrackerInterface* singleton;
70
71 // singleton pattern
72 BDSLinkTrackerInterface() = default;
74 BDSLinkTrackerInterface& operator=(const BDSLinkTrackerInterface&) = delete;
75
76 // singleton private constructor
77 BDSLinkTrackerInterface(std::string bdsimConfigFileIn = "trackerInterface.gmad",
78 int referenceParticlePDGIn = 11,
79 double referenceKineticEnergyIn = 100,
80 double relativeEnergyCutIn = 0.01,
81 int seedIn = 1234,
82 int referenceIonChargeIn = 1,
83 bool batchModeIn = true);
84
85 // configuration parameters
86 std::string bdsimConfigFile;
87 int referenceParticlePDG;
88 double referenceKineticEnergy;
89 double relativeEnergyCut;
90 int seed;
91 int referenceIonCharge;
92 bool batchMode;
93
94 // derived parmeters
95 double minimumKineticEnergy;
96
97 // Handy G4 objects
98 G4ParticleTable *g4particle_table;
99 G4IonTable *g4ion_table;
100
101 // link objects
102 BDSLinkBunch *linkBunch;
103 BDSIMLink *linkBDSIM;
104
105 // reference particle
106 BDSParticleDefinition* referenceParticleDefinition;
107
108 // todo, what is this for?
109 std::vector<bool> particleActiveState;
110};
111
112#endif
A bunch distribution that holds a bunch from a Link.
Wrapper for particle definition.