19#include "BDSBunchSixTrackLink.hh"
21#include "BDSException.hh"
22#include "BDSIonDefinition.hh"
23#include "BDSParticleDefinition.hh"
26#include "G4IonTable.hh"
27#include "G4ParticleDefinition.hh"
28#include "G4ParticleTable.hh"
33BDSBunchSixTrackLink::BDSBunchSixTrackLink():
36 currentExternalParticleID(0),
37 currentExternalParentID(0),
38 currentParticleDefinition(nullptr),
42BDSBunchSixTrackLink::~BDSBunchSixTrackLink()
47 if (currentIndex >=
size)
49 G4cout << __METHOD_NAME__ <<
"looping to start of bunch" << G4endl;
53 G4int ci = currentIndex;
56 auto particle = particles[ci];
57 currentParticleDefinition = particle->particleDefinition;
62 currentExternalParticleID = particle->externalParticleID;
63 currentExternalParentID = particle->externalParentID;
65 return particle->coords;
70 int externalParticleID,
73 particles.emplace_back(
new BDSParticleExternal(particleDefinitionIn, coordsIn, externalParticleID, externalParentID));
74 size = (G4int)particles.size();
81 for (
auto p : particles)
88 G4ParticleDefinition* newParticleDefinition =
nullptr;
91 G4ParticleTable::G4PTblEncodingDictionary* encoding = G4ParticleTable::fEncodingDictionary;
92 auto search = encoding->find(pdgID);
93 if (search != encoding->end())
94 {newParticleDefinition = search->second;}
96 {
throw BDSException(__METHOD_NAME__,
"PDG ID \"" + std::to_string(pdgID) +
"not found in particle table");}
100 G4IonTable* ionTable = G4ParticleTable::GetParticleTable()->GetIonTable();
102 newParticleDefinition = ionTable->GetIon(ionDefinition->
Z(),
112#if G4VERSION_NUMBER > 1049
121 if (!currentParticleDefinition->
IsAnIon())
124 G4IonTable* ionTable = G4ParticleTable::GetParticleTable()->GetIonTable();
126 G4ParticleDefinition* ionParticleDef = ionTable->GetIon(ionDefinition->
Z(),
135#if G4VERSION_NUMBER > 1049
void UpdateGeant4ParticleDefinition(G4int pdgID)
TBC.
void AddParticle(BDSParticleDefinition *particleDefinitionIn, const BDSParticleCoordsFull &coordsIn, int externalParticleID, int externalParentID)
Append particle to the bunch for tracking.
virtual BDSParticleCoordsFull GetNextParticleLocal()
Get the next particle.
virtual void UpdateIonDefinition()
Override method in BDSBunch to use our local currentParticleDefinition member.
void ClearParticles()
Delete all particle objects in the bunch and clear the vector.
G4int size
Number of particles (1 counting).
The base class for bunch distribution generators.
G4bool particleDefinitionHasBeenUpdated
BDSParticleDefinition * particleDefinition
Particle definition for bunch - this class owns it.
General exception with possible name of object and message.
Class to parse an ion particle definition.
G4double ExcitationEnergy() const
Accessor.
A set of particle coordinates including energy and weight.
Wrapper for particle definition.
BDSIonDefinition * IonDefinition() const
Accessor.
G4bool IsAnIon() const
Accessor.
void UpdateG4ParticleDefinition(G4ParticleDefinition *particleIn)
A set of particle coordinates from an external interface.
void FixGeant105ThreshholdsForParticle(const G4ParticleDefinition *particleDefinition)