BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
BDSParticleDefinition.hh
1/*
2Beam Delivery Simulation (BDSIM) Copyright (C) Royal Holloway,
3University of London 2001 - 2022.
4
5This file is part of BDSIM.
6
7BDSIM is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published
9by the Free Software Foundation version 3 of the License.
10
11BDSIM is distributed in the hope that it will be useful, but
12WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with BDSIM. If not, see <http://www.gnu.org/licenses/>.
18*/
19#ifndef BDSPARTICLEDEFINITION_H
20#define BDSPARTICLEDEFINITION_H
21#include "BDSIonDefinition.hh"
22
23#include "globals.hh"
24
25#include <ostream>
26
27class G4ParticleDefinition;
28
41{
42public:
49 BDSParticleDefinition(G4ParticleDefinition* particleIn,
50 G4double totalEnergyIn,
51 G4double kineticEnergyIn,
52 G4double momentumIn,
53 G4double ffact,
54 BDSIonDefinition* ionDefinitionIn = nullptr,
55 G4int ionPDGID = 0);
56
62 BDSParticleDefinition(const G4String& nameIn,
63 G4double massIn,
64 G4double chargeIn,
65 G4double totalEnergyIn,
66 G4double kineticEnergyIn,
67 G4double momentumIn,
68 G4double ffact,
69 BDSIonDefinition* ionDefinitionIn = nullptr,
70 G4int ionPDGID = 0);
71
77
79
83 void SetEnergies(G4double totalEnergyIn,
84 G4double kineticEnergyIn,
85 G4double momentumIn);
86
89 void UpdateG4ParticleDefinition(G4ParticleDefinition* particleIn) {particle = particleIn;}
90
92 inline G4ParticleDefinition* ParticleDefinition() const {return particle;}
94 inline G4String Name() const {return name;}
95 inline G4double Mass() const {return mass;}
96 inline G4double Charge() const {return charge;}
97 inline G4double TotalEnergy() const {return totalEnergy;}
98 inline G4double KineticEnergy() const {return kineticEnergy;}
99 inline G4double Momentum() const {return momentum;}
100 inline G4double Gamma() const {return gamma;}
101 inline G4double Beta() const {return beta;}
102 inline G4double BRho() const {return brho;}
103 inline G4double FFact() const {return ffact;}
104 inline G4bool IsAnIon() const {return ionDefinition != nullptr;}
105 inline G4bool NElectrons() const {return ionDefinition != nullptr ? ionDefinition->NElectrons() : 0;}
107
111 G4int PDGID() const;
112
114 friend std::ostream& operator<< (std::ostream& out, BDSParticleDefinition const& def);
115
116private:
119
121 void CalculateMomentum();
122
124 void CalculateRigidity(const G4double& ffactIn);
125
128
129 G4ParticleDefinition* particle;
131 G4int ionPDGID;
132
133 G4String name;
134 G4double mass;
135 G4double charge;
136 G4double totalEnergy;
137 G4double kineticEnergy;
138 G4double momentum;
139 G4double gamma;
140 G4double beta;
141 G4double brho;
142 G4double ffact;
143};
144
145#endif
Class to parse an ion particle definition.
G4int NElectrons() const
Accessor.
Wrapper for particle definition.
void CalculateRigidity(const G4double &ffactIn)
Calculate and set rigidity based on charge and momentum.
G4String Name() const
Accessor.
G4double Mass() const
Accessor.
G4bool NElectrons() const
Accessor.
G4double beta
Relativistic beta.
G4double Momentum() const
Accessor.
G4double Charge() const
Accessor.
G4double totalEnergy
Particle total energy.
G4double KineticEnergy() const
Accessor.
G4ParticleDefinition * ParticleDefinition() const
Accessor.
G4double FFact() const
Accessor.
G4double BRho() const
Accessor.
void CalculateLorentzFactors()
Calculate and set lorentz factors.
G4double gamma
Relativistic gamma.
void SetEnergies(G4double totalEnergyIn, G4double kineticEnergyIn, G4double momentumIn)
G4double momentum
Particle momentum.
G4double Beta() const
Accessor.
BDSIonDefinition * ionDefinition
Optional ion definition. Does own.
G4double charge
Particle charge.
BDSParticleDefinition()=delete
No default constructor.
friend std::ostream & operator<<(std::ostream &out, BDSParticleDefinition const &def)
Output stream operator implementation.
G4double ffact
Flip factor.
G4double mass
Particle mass.
BDSParticleDefinition & operator=(BDSParticleDefinition &&other) noexcept
Copy, move and assignment constructors specified as we have to copy the ionDefinition if it exists.
G4String name
Particle name.
G4double Gamma() const
Accessor.
BDSIonDefinition * IonDefinition() const
Accessor.
G4double brho
Particle rigidity.
G4int ionPDGID
Cache this for ions only.
G4double TotalEnergy() const
Accessor.
G4ParticleDefinition * particle
Does not own.
void CalculateMomentum()
Calculate and set momentum based on totalEnergy and mass.
G4double kineticEnergy
Particle kinetic energy.
G4bool IsAnIon() const
Accessor.
void UpdateG4ParticleDefinition(G4ParticleDefinition *particleIn)