ATLAS Offline Software
Loading...
Searching...
No Matches
iGeant4::Geant4TruthIncident Class Reference

ISF_Geant4 specific implementation of the ISF::ITruthIncident. More...

#include <Geant4TruthIncident.h>

Inheritance diagram for iGeant4::Geant4TruthIncident:
Collaboration diagram for iGeant4::Geant4TruthIncident:

Public Member Functions

 Geant4TruthIncident (const G4Step *, const ISF::ISFParticle &baseISP, AtlasDetDescr::AtlasRegion geoID, AtlasG4EventUserInfo *atlasG4EvtUserInfo)
virtual ~Geant4TruthIncident ()
const HepMC::FourVector & position () const override final
 Return HepMC position of the truth vertex.
int physicsProcessCategory () const override final
 Return category of the physics process represented by the truth incident (eg hadronic, em, ..)
int physicsProcessCode () const override final
 Return specific physics process code of the truth incident (eg ionisation, bremsstrahlung, ..)
double parentP2 () const override final
 Return p^2 of the parent particle.
double parentPt2 () const override final
 Return pT^2 of the parent particle.
double parentEkin () const override final
 Return Ekin of the parent particle.
int parentPdgCode () const override final
 Return the PDG Code of the parent particle.
int parentBarcode () override final
 Return the barcode of the parent particle.
int parentUniqueID () override final
 Return the unique ID of the parent particle.
int parentStatus () override final
 Return the status of the parent particle.
bool parentSurvivesIncident () const override final
 Return a boolean whether or not the parent particle survives the incident.
HepMC::GenParticlePtr parentParticleAfterIncident (int newBC) override final
 Return the parent particle after the TruthIncident vertex (and give it a new barcode)
const G4ThreeVector childP (unsigned short index) const
 Return p of the i-th child particle.
double childP2 (unsigned short index) const override final
 Return p^2 of the i-th child particle.
double childPt2 (unsigned short index) const override final
 Return pT^2 of the i-th child particle.
double childEkin (unsigned short index) const override final
 Return Ekin of the i-th child particle.
int childPdgCode (unsigned short index) const override final
 Return the PDG Code of the i-th child particle.
int childBarcode (unsigned short index) const override final
 Return the barcode of the i-th child particle (if defined as part of the TruthIncident) otherwise return 0.
ISF::InteractionClass_t interactionClassification () const override final
 The interaction classifications are described as follows: STD_VTX: interaction of a particle without a pre-defined decay; QS_SURV_VTX: a particle with a pre-defined decay under-going a non-destructive interaction; QS_DEST_VTX: a particle with a pre-defined decay under-going a destructive interaction other than its pre-defined decay; QS_PREDEF_VTX: a particle under-going its pre-defined decay.
HepMC::GenParticlePtr parentParticle () override final
 Return the parent particle as a HepMC particle type.
HepMC::GenParticlePtr childParticle (unsigned short index, int bc) override final
 Return the i-th child as a HepMC particle type and assign the given Barcode to the simulator particle.
AtlasDetDescr::AtlasRegion geoID ()
 Return the SimGeoID corresponding to the vertex of the truth incident.
unsigned short numberOfChildren () const
 Return total number of child particles.
bool childrenP2Pass (double p2cut)
 Return true if at least one child particle passes the given p^2 cut (= at least one child with p^2 >= pt2cut)
bool childrenPt2Pass (double pt2cut)
 Return true if at least one child particle passes the given pT^2 cut (= at least one child with pT^2 >= pt2cut)
bool childrenEkinPass (double ekincut)
 Return true if at least one child particle passes the given Ekin cut (= at least one child with Ekin >= ekincut)
void setChildPassedFilters (unsigned short index)
 Record that a particular child passed a check.
bool childPassedFilters (unsigned short index) const
 Should a particular child be written out to the GenEvent.
void setPassWholeVertices (bool passWholeVertex)
 Set whether this TruthIncident should pass the vertex as a whole or individual children.

Protected Attributes

int m_numChildren
bool m_passWholeVertex
std::vector< bool > m_childPassedFilters

Private Member Functions

 Geant4TruthIncident ()
void prepareChildren ()
 prepare the child particles
bool particleAlive (const G4Track *track) const
 check if the given G4Track represents a particle that is alive in ISF or ISF-G4
HepMC::GenParticlePtr convert (const G4Track *particle, const int barcode, const bool secondary) const

Private Attributes

bool m_positionSet
HepMC::FourVector m_position
const G4Step * m_step {}
const ISF::ISFParticlem_baseISP
AtlasG4EventUserInfo *m_atlasG4EvtUserInfo ATLAS_THREAD_SAFE {}
std::vector< const G4Track * > m_children
HepMC::GenParticlePtr m_parentParticleAfterIncident {}
AtlasDetDescr::AtlasRegion m_geoID
 region that the TruthIncident is located in

Detailed Description

ISF_Geant4 specific implementation of the ISF::ITruthIncident.

Author
Andre.nosp@m.as.S.nosp@m.chael.nosp@m.icke.nosp@m.@cern.nosp@m..ch

Definition at line 44 of file Geant4TruthIncident.h.

Constructor & Destructor Documentation

◆ Geant4TruthIncident() [1/2]

iGeant4::Geant4TruthIncident::Geant4TruthIncident ( const G4Step * step,
const ISF::ISFParticle & baseISP,
AtlasDetDescr::AtlasRegion geoID,
AtlasG4EventUserInfo * atlasG4EvtUserInfo )

Definition at line 61 of file Geant4TruthIncident.cxx.

64 :
65 ITruthIncident(geoID, step->GetSecondaryInCurrentStep()->size()), // switch to G4Step::GetNumberOfSecondariesInCurrentStep() once we're using G4 10.2 or later
66 m_positionSet(false),
67 m_position(),
68 m_step(step),
69 m_baseISP(baseISP),
70 m_atlasG4EvtUserInfo(atlasG4EvtUserInfo)
71{
72 // prepare children:
74
75 // calculate position:
76 const G4StepPoint *postStepPoint = m_step->GetPostStepPoint();
77 const G4ThreeVector &pos = postStepPoint->GetPosition();
78 const G4double time = postStepPoint->GetGlobalTime()*Gaudi::Units::c_light;
79 m_position.set( pos.x(), pos.y(), pos.z(), time );
80}
AtlasDetDescr::AtlasRegion geoID()
Return the SimGeoID corresponding to the vertex of the truth incident.
ITruthIncident(AtlasDetDescr::AtlasRegion geoID, unsigned short numChildren)
const ISF::ISFParticle & m_baseISP
void prepareChildren()
prepare the child particles
time(flags, cells_name, *args, **kw)

◆ ~Geant4TruthIncident()

virtual iGeant4::Geant4TruthIncident::~Geant4TruthIncident ( )
inlinevirtual

Definition at line 50 of file Geant4TruthIncident.h.

50{};

◆ Geant4TruthIncident() [2/2]

iGeant4::Geant4TruthIncident::Geant4TruthIncident ( )
private

Member Function Documentation

◆ childBarcode()

int iGeant4::Geant4TruthIncident::childBarcode ( unsigned short index) const
finaloverridevirtual

Return the barcode of the i-th child particle (if defined as part of the TruthIncident) otherwise return 0.

Implements ISF::ITruthIncident.

Definition at line 211 of file Geant4TruthIncident.cxx.

211 {
212 // the G4Track instance for the current child particle
213 const G4Track* track = m_children[index];
214 // This should be a *secondary* track. If it has a primary, it was a decay and
215 // we are running with quasi-stable particle simulation. Note that if the primary
216 // track is passed in as a secondary that survived the interaction, then this was
217 // *not* a decay and we should not treat it in this way
218 if (track->GetDynamicParticle() &&
219 track->GetDynamicParticle()->GetPrimaryParticle() &&
220 track->GetDynamicParticle()->GetPrimaryParticle()->GetUserInformation()){
221 // Then the new particle should use the same barcode as the old one!!
222 PrimaryParticleInformation* primaryPartInfo = dynamic_cast<PrimaryParticleInformation*>( track->GetDynamicParticle()->GetPrimaryParticle()->GetUserInformation() );
223 return primaryPartInfo->GetParticleBarcode();
224 }
225 return 0;
226}
std::vector< const G4Track * > m_children
str index
Definition DeMoScan.py:362

◆ childEkin()

double iGeant4::Geant4TruthIncident::childEkin ( unsigned short index) const
finaloverridevirtual

Return Ekin of the i-th child particle.

Implements ISF::ITruthIncident.

Definition at line 203 of file Geant4TruthIncident.cxx.

203 {
204 return (m_children[i]->GetKineticEnergy()/CLHEP::MeV);
205}

◆ childP()

const G4ThreeVector iGeant4::Geant4TruthIncident::childP ( unsigned short index) const

Return p of the i-th child particle.

Definition at line 193 of file Geant4TruthIncident.cxx.

193 {
194 const G4ThreeVector & mom= m_children[i]->GetMomentum();
195 return mom;
196}

◆ childP2()

double iGeant4::Geant4TruthIncident::childP2 ( unsigned short index) const
finaloverridevirtual

Return p^2 of the i-th child particle.

Implements ISF::ITruthIncident.

Definition at line 188 of file Geant4TruthIncident.cxx.

188 {
189 const G4ThreeVector & mom= m_children[i]->GetMomentum();
190 return mom.mag2();
191}

◆ childParticle()

HepMC::GenParticlePtr iGeant4::Geant4TruthIncident::childParticle ( unsigned short index,
int bc )
finaloverridevirtual

Return the i-th child as a HepMC particle type and assign the given Barcode to the simulator particle.

Implements ISF::ITruthIncident.

Definition at line 228 of file Geant4TruthIncident.cxx.

229 {
230 // the G4Track instance for the current child particle
231 const G4Track* thisChildTrack = m_children[i];
232
233 // NB: NOT checking if secondary is actually alive. Even with zero momentum,
234 // secondary could decay right away and create further particles which pass the
235 // truth strategies.
236
237 HepMC::GenParticlePtr hepParticle = convert( thisChildTrack, newBarcode, true );
238 TrackHelper tHelper(thisChildTrack);
239 TrackInformation *trackInfo = tHelper.GetTrackInformation();
240
241 // needed to make AtlasG4 work with ISF TruthService
242 if (trackInfo==nullptr) {
243 trackInfo = new TrackInformation( hepParticle );
244 thisChildTrack->SetUserInformation( trackInfo );
245 }
246
247 trackInfo->SetCurrentGenParticle(hepParticle);
249 trackInfo->SetRegenerationNr(0);
250
251 return hepParticle;
252}
void SetRegenerationNr(int i)
update the number of times the particle represented by the G4Track has undergone a non-destructive in...
virtual void SetCurrentGenParticle(HepMC::GenParticlePtr) override
set m_currentGenParticle, the pointer to the GenParticle corresponding to the current G4Track.
void SetClassification(TrackClassification tc)
update the classification of the currently tracked particle, usually called when a new G4Track is cre...
HepMC::GenParticlePtr convert(const G4Track *particle, const int barcode, const bool secondary) const
GenParticle * GenParticlePtr
Definition GenParticle.h:37

◆ childPassedFilters()

bool ISF::ITruthIncident::childPassedFilters ( unsigned short index) const
inlineinherited

Should a particular child be written out to the GenEvent.

Definition at line 186 of file ITruthIncident.h.

186 {
188 }
std::vector< bool > m_childPassedFilters

◆ childPdgCode()

int iGeant4::Geant4TruthIncident::childPdgCode ( unsigned short index) const
finaloverridevirtual

Return the PDG Code of the i-th child particle.

Implements ISF::ITruthIncident.

Definition at line 207 of file Geant4TruthIncident.cxx.

207 {
208 return m_children[i]->GetDefinition()->GetPDGEncoding();
209}

◆ childPt2()

double iGeant4::Geant4TruthIncident::childPt2 ( unsigned short index) const
finaloverridevirtual

Return pT^2 of the i-th child particle.

Implements ISF::ITruthIncident.

Definition at line 198 of file Geant4TruthIncident.cxx.

198 {
199 const G4ThreeVector & mom= m_children[i]->GetMomentum();
200 return mom.perp2();
201}

◆ childrenEkinPass()

bool ISF::ITruthIncident::childrenEkinPass ( double ekincut)
inlineinherited

Return true if at least one child particle passes the given Ekin cut (= at least one child with Ekin >= ekincut)

Definition at line 170 of file ITruthIncident.h.

170 {
171 bool pass = false; // true if cut passed
172 // as soon as at a particle passes the cut -> end loop and return true
173 for ( unsigned short i=0; !(pass && m_passWholeVertex) && (i<m_numChildren); ++i) {
174 bool thispassed = (childEkin(i) >= ekincut);
175 if(thispassed) { setChildPassedFilters(i); }
176 pass |= thispassed;
177 }
178 return pass;
179 }
void setChildPassedFilters(unsigned short index)
Record that a particular child passed a check.
virtual double childEkin(unsigned short index) const =0
Return Ekin of the i-th child particle.

◆ childrenP2Pass()

bool ISF::ITruthIncident::childrenP2Pass ( double p2cut)
inlineinherited

Return true if at least one child particle passes the given p^2 cut (= at least one child with p^2 >= pt2cut)

Definition at line 146 of file ITruthIncident.h.

146 {
147 bool pass = false; // true if cut passed
148 // as soon as at a particle passes the cut -> end loop and return true
149 for ( unsigned short i=0; !(pass && m_passWholeVertex) && (i<m_numChildren); ++i) {
150 bool thispassed = (childP2(i) >= p2cut);
151 if(thispassed) { setChildPassedFilters(i); }
152 pass |= thispassed;
153 }
154 return pass;
155 }
virtual double childP2(unsigned short index) const =0
Return p^2 of the i-th child particle.

◆ childrenPt2Pass()

bool ISF::ITruthIncident::childrenPt2Pass ( double pt2cut)
inlineinherited

Return true if at least one child particle passes the given pT^2 cut (= at least one child with pT^2 >= pt2cut)

Definition at line 158 of file ITruthIncident.h.

158 {
159 bool pass = false; // true if cut passed
160 // as soon as at a particle passes the cut -> end loop and return true
161 for ( unsigned short i=0; !(pass && m_passWholeVertex) && (i<m_numChildren); ++i) {
162 bool thispassed = (childPt2(i) >= pt2cut);
163 if(thispassed) { setChildPassedFilters(i); }
164 pass |= thispassed;
165 }
166 return pass;
167 }
virtual double childPt2(unsigned short index) const =0
Return pT^2 of the i-th child particle.

◆ convert()

HepMC::GenParticlePtr iGeant4::Geant4TruthIncident::convert ( const G4Track * particle,
const int barcode,
const bool secondary ) const
private

Definition at line 276 of file Geant4TruthIncident.cxx.

276 {
277#endif
278
279 const G4ThreeVector & mom = track->GetMomentum();
280 const double energy = track->GetTotalEnergy();
281 const int pdgCode = track->GetDefinition()->GetPDGEncoding();
282 const HepMC::FourVector fourMomentum( mom.x(), mom.y(), mom.z(), energy);
283
284 const HepMC::GenParticlePtr parent = m_atlasG4EvtUserInfo->GetCurrentGenParticle();
285 int status = (secondary) ? 1 + HepMC::SIM_STATUS_THRESHOLD : parent->status() + HepMC::SIM_STATUS_INCREMENT;
286 // Treat child particles of pre-defined decays differently
288 const G4DynamicParticle* dynPart = track->GetDynamicParticle();
289 bool hasPredefinedDecay = (dynPart && (nullptr!=(dynPart->GetPreAssignedDecayProducts())));
290 status = (hasPredefinedDecay)? 2 : 1;
291 }
292 // Treat particles with a pre-defined decay which have survived an
293 // interaction differently for now.
296 // Such particles were previously assigned barcodes below
297 // HepMC::SIM_BARCODE_OFFSET and therefore
298 // HepMC::is_simulation_particle(barcode) would return false. Not
299 // applying HepMC::SIM_STATUS_INCREMENT means that
300 // HepMC::is_simulation_particle(status) will also return false.
301 // TODO This should be revisited in the future should we decide
302 // that we want to be able to easily identify such particles.
303 }
304 HepMC::GenParticlePtr newParticle = HepMC::newGenParticlePtr(fourMomentum, pdgCode, status);
305
306#ifndef HEPMC3
307 // This should be a *secondary* track. If it has a primary, it was a decay and
308 // we are running with quasi-stable particle simulation. Note that if the primary
309 // track is passed in as a secondary that survived the interaction, then this was
310 // *not* a decay and we should not treat it in this way
311 if (secondary &&
312 track->GetDynamicParticle() &&
313 track->GetDynamicParticle()->GetPrimaryParticle() &&
314 track->GetDynamicParticle()->GetPrimaryParticle()->GetUserInformation()){
315 // Then the new particle should use the same barcode as the old one!!
316 PrimaryParticleInformation* primaryPartInfo = dynamic_cast<PrimaryParticleInformation*>( track->GetDynamicParticle()->GetPrimaryParticle()->GetUserInformation() );
317 HepMC::suggest_barcode( newParticle, primaryPartInfo->GetParticleBarcode() );
318 } else {
319 HepMC::suggest_barcode( newParticle, barcode );
320 }
321#endif
322
323 return newParticle;
324}
ISF::InteractionClass_t interactionClassification() const override final
The interaction classifications are described as follows: STD_VTX: interaction of a particle without ...
constexpr int SIM_STATUS_INCREMENT
Constant defining the barcode threshold for regenerated particles, i.e. particles surviving an intera...
constexpr int SIM_STATUS_THRESHOLD
Constant definiting the status threshold for simulated particles, eg. can be used to separate generat...
bool suggest_barcode(T &p, int i)
Definition GenEvent.h:672
GenParticlePtr newGenParticlePtr(const HepMC::FourVector &mom=HepMC::FourVector(0.0, 0.0, 0.0, 0.0), int pid=0, int status=0)
Definition GenParticle.h:39
@ QS_SURV_VTX
@ QS_PREDEF_VTX
status
Definition merge.py:16

◆ geoID()

AtlasDetDescr::AtlasRegion ISF::ITruthIncident::geoID ( )
inlineinherited

Return the SimGeoID corresponding to the vertex of the truth incident.

Definition at line 53 of file ITruthIncident.h.

53{ return m_geoID; };
AtlasDetDescr::AtlasRegion m_geoID
region that the TruthIncident is located in

◆ interactionClassification()

ISF::InteractionClass_t iGeant4::Geant4TruthIncident::interactionClassification ( ) const
finaloverridevirtual

The interaction classifications are described as follows: STD_VTX: interaction of a particle without a pre-defined decay; QS_SURV_VTX: a particle with a pre-defined decay under-going a non-destructive interaction; QS_DEST_VTX: a particle with a pre-defined decay under-going a destructive interaction other than its pre-defined decay; QS_PREDEF_VTX: a particle under-going its pre-defined decay.

Reimplemented from ISF::ITruthIncident.

Definition at line 344 of file Geant4TruthIncident.cxx.

344 {
345 G4Track* track=m_step->GetTrack();
346 const G4DynamicParticle* dynPart = track->GetDynamicParticle();
347 const double preAsgnDecPropTime = dynPart->GetPreAssignedDecayProperTime();
348 const double trackPropTime = track->GetProperTime();
349 bool parentIsQuasiStable = (nullptr!=(dynPart->GetPreAssignedDecayProducts()));
350 const G4VProcess *process = m_step->GetPostStepPoint()->GetProcessDefinedStep();
351 const int processType = process->GetProcessType();
353 if(parentIsQuasiStable) {
354 if(this->parentSurvivesIncident()) {
355 classification = ISF::QS_SURV_VTX;
356 }
357 else if(processType==6 && (trackPropTime-preAsgnDecPropTime) < -std::numeric_limits<double>::epsilon()) {
358 // Particle decayed before its expected pre-defined decay time
359 classification = ISF::QS_DEST_VTX;
360 }
361 else {
362 classification = ISF::QS_PREDEF_VTX;
363 }
364 }
365 return classification;
366 // end of code to determine interaction type
367}
bool parentSurvivesIncident() const override final
Return a boolean whether or not the parent particle survives the incident.
const std::string process
InteractionClass_t
The interaction classifications are described as follows: STD_VTX: interaction of a particle without ...
@ QS_DEST_VTX

◆ numberOfChildren()

unsigned short ISF::ITruthIncident::numberOfChildren ( ) const
inlineinherited

Return total number of child particles.

Definition at line 139 of file ITruthIncident.h.

139 {
140 return m_numChildren;
141 }

◆ parentBarcode()

int iGeant4::Geant4TruthIncident::parentBarcode ( )
finaloverridevirtual

Return the barcode of the parent particle.

Implements ISF::ITruthIncident.

Definition at line 116 of file Geant4TruthIncident.cxx.

116 { // TODO Remove this method
117 auto parent = parentParticle();
118
119 return (parent) ? HepMC::barcode(parent) : HepMC::UNDEFINED_ID;
120}
HepMC::GenParticlePtr parentParticle() override final
Return the parent particle as a HepMC particle type.
int barcode(const T *p)
Definition Barcode.h:16
constexpr int UNDEFINED_ID

◆ parentEkin()

double iGeant4::Geant4TruthIncident::parentEkin ( ) const
finaloverridevirtual

Return Ekin of the parent particle.

Implements ISF::ITruthIncident.

Definition at line 108 of file Geant4TruthIncident.cxx.

108 {
109 return (m_step->GetPreStepPoint()->GetKineticEnergy()/CLHEP::MeV);
110}

◆ parentP2()

double iGeant4::Geant4TruthIncident::parentP2 ( ) const
finaloverridevirtual

Return p^2 of the parent particle.

Implements ISF::ITruthIncident.

Definition at line 98 of file Geant4TruthIncident.cxx.

98 {
99 const G4ThreeVector & mom= m_step->GetPreStepPoint()->GetMomentum();
100 return mom.mag2();
101}

◆ parentParticle()

HepMC::GenParticlePtr iGeant4::Geant4TruthIncident::parentParticle ( )
finaloverridevirtual

Return the parent particle as a HepMC particle type.

Implements ISF::ITruthIncident.

Definition at line 134 of file Geant4TruthIncident.cxx.

134 {
135 return m_atlasG4EvtUserInfo->GetCurrentGenParticle();
136}

◆ parentParticleAfterIncident()

HepMC::GenParticlePtr iGeant4::Geant4TruthIncident::parentParticleAfterIncident ( int newBC)
finaloverridevirtual

Return the parent particle after the TruthIncident vertex (and give it a new barcode)

Implements ISF::ITruthIncident.

Definition at line 149 of file Geant4TruthIncident.cxx.

149 {
150 const G4Track *track = m_step->GetTrack();
151
152 // check if particle is a alive in G4 or in ISF
153 if ( !parentSurvivesIncident() ) {
154 return nullptr;
155 }
156
157 // internally cache the HepMC representation of the parent particle
158 // (to allow multiple calls to this method on the same instance)
160 // create new HepMC particle, using momentum and energy
161 // from G4DynamicParticle (which should be equivalent to postStep)
162 m_parentParticleAfterIncident = convert(track, newBarcode, false);
163
164 m_atlasG4EvtUserInfo->SetCurrentGenParticle( m_parentParticleAfterIncident );
165
166 // store (new) hepmc particle in track's UserInformation
167 TrackHelper tHelper(track);
168 TrackInformation *tInfo = tHelper.GetTrackInformation();
169 if (tInfo) {
170 // do NOT update the TrackInformation for regenerated particles!
171 // (most recent truth info is kept in AtlasG4EventUserInfo)
172 //tInfo->SetCurrentGenParticle( m_parentParticleAfterIncident );
173 int regenerationNr = tInfo->GetRegenerationNr();
174 regenerationNr++;
175 tInfo->SetRegenerationNr(regenerationNr);
176 if ( tHelper.IsPrimary() ) {
178 }
179 }
180
181 } // <-- end if m_parentParticleAfterIncident is not filled
182
183
184 // return the HepMC particle representation of the parent
186}
int GetRegenerationNr() const
return the number of times the particle represented by the G4Track has undergone a non-destructive in...
HepMC::GenParticlePtr m_parentParticleAfterIncident

◆ parentPdgCode()

int iGeant4::Geant4TruthIncident::parentPdgCode ( ) const
finaloverridevirtual

Return the PDG Code of the parent particle.

Implements ISF::ITruthIncident.

Definition at line 112 of file Geant4TruthIncident.cxx.

112 {
113 return m_step->GetTrack()->GetDefinition()->GetPDGEncoding();
114}

◆ parentPt2()

double iGeant4::Geant4TruthIncident::parentPt2 ( ) const
finaloverridevirtual

Return pT^2 of the parent particle.

Implements ISF::ITruthIncident.

Definition at line 103 of file Geant4TruthIncident.cxx.

103 {
104 const G4ThreeVector & mom= m_step->GetPreStepPoint()->GetMomentum();
105 return mom.perp2();
106}

◆ parentStatus()

int iGeant4::Geant4TruthIncident::parentStatus ( )
finaloverridevirtual

Return the status of the parent particle.

Implements ISF::ITruthIncident.

Definition at line 128 of file Geant4TruthIncident.cxx.

128 {
129 auto parent = parentParticle();
130
131 return (parent) ? parent->status() : 0;
132}

◆ parentSurvivesIncident()

bool iGeant4::Geant4TruthIncident::parentSurvivesIncident ( ) const
finaloverridevirtual

Return a boolean whether or not the parent particle survives the incident.

Implements ISF::ITruthIncident.

Definition at line 138 of file Geant4TruthIncident.cxx.

138 {
139 const G4Track *track = m_step->GetTrack();
140
141 // check if particle is a alive in G4 or in ISF
142 if ( particleAlive(track) ) {
143 return true;
144 } else {
145 return false;
146 }
147}
bool particleAlive(const G4Track *track) const
check if the given G4Track represents a particle that is alive in ISF or ISF-G4

◆ parentUniqueID()

int iGeant4::Geant4TruthIncident::parentUniqueID ( )
finaloverridevirtual

Return the unique ID of the parent particle.

Implements ISF::ITruthIncident.

Definition at line 122 of file Geant4TruthIncident.cxx.

122 {
123 auto parent = parentParticle();
124
125 return (parent) ? HepMC::uniqueID(parent) : HepMC::UNDEFINED_ID;
126}
int uniqueID(const T &p)

◆ particleAlive()

bool iGeant4::Geant4TruthIncident::particleAlive ( const G4Track * track) const
inlineprivate

check if the given G4Track represents a particle that is alive in ISF or ISF-G4

Definition at line 255 of file Geant4TruthIncident.cxx.

255 {
256 G4TrackStatus trackStatus = track->GetTrackStatus();
257
258 if ( trackStatus != fAlive && trackStatus != fStopButAlive ) {
259 // parent does not exist in G4 anymore after this step
260
261 // check whether the particle was returned to ISF
262 auto* trackInfo = ISFG4Helper::getISFTrackInfo( *track );
263 bool returnedToISF = trackInfo ? trackInfo->GetReturnedToISF() : false;
264 if ( !returnedToISF ) {
265 // particle was not sent to ISF either
266 return false;
267 }
268 }
269
270 return true;
271}
static VTrackInformation * getISFTrackInfo(const G4Track &aTrack)
return a valid UserInformation object of the G4Track for use within the ISF

◆ physicsProcessCategory()

int iGeant4::Geant4TruthIncident::physicsProcessCategory ( ) const
finaloverridevirtual

Return category of the physics process represented by the truth incident (eg hadronic, em, ..)

Implements ISF::ITruthIncident.

Definition at line 86 of file Geant4TruthIncident.cxx.

86 {
87 const G4VProcess *process = m_step->GetPostStepPoint()->GetProcessDefinedStep();
88 // TODO: need to check that G4ProcessSubTypes Match int
89 return process->GetProcessType();
90}

◆ physicsProcessCode()

int iGeant4::Geant4TruthIncident::physicsProcessCode ( ) const
finaloverridevirtual

Return specific physics process code of the truth incident (eg ionisation, bremsstrahlung, ..)

Implements ISF::ITruthIncident.

Definition at line 92 of file Geant4TruthIncident.cxx.

92 {
93 const G4VProcess *process = m_step->GetPostStepPoint()->GetProcessDefinedStep();
94 // TODO: need to check that G4ProcessSubTypes Match int
95 return process->GetProcessSubType();
96}

◆ position()

const HepMC::FourVector & iGeant4::Geant4TruthIncident::position ( ) const
finaloverridevirtual

Return HepMC position of the truth vertex.

Implements ISF::ITruthIncident.

Definition at line 82 of file Geant4TruthIncident.cxx.

82 {
83 return m_position;
84}

◆ prepareChildren()

void iGeant4::Geant4TruthIncident::prepareChildren ( )
inlineprivate

prepare the child particles

Definition at line 327 of file Geant4TruthIncident.cxx.

327 {
328
329 const std::vector<const G4Track*>* tracks = m_step->GetSecondaryInCurrentStep();
330 const int iSize = tracks->size();
331 const int iLast = iSize - numberOfChildren() - 1; //NB can be -1.
332 for(int i=iSize-1;i>iLast;i--) {
333 m_children.push_back((*tracks)[i]);
334 }
335}
unsigned short numberOfChildren() const
Return total number of child particles.

◆ setChildPassedFilters()

void ISF::ITruthIncident::setChildPassedFilters ( unsigned short index)
inlineinherited

Record that a particular child passed a check.

Definition at line 181 of file ITruthIncident.h.

181 {
183 return;
184 }

◆ setPassWholeVertices()

void ISF::ITruthIncident::setPassWholeVertices ( bool passWholeVertex)
inlineinherited

Set whether this TruthIncident should pass the vertex as a whole or individual children.

Definition at line 190 of file ITruthIncident.h.

190 {
191 m_passWholeVertex=passWholeVertex;
192 }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

AtlasG4EventUserInfo* m_atlasG4EvtUserInfo iGeant4::Geant4TruthIncident::ATLAS_THREAD_SAFE {}
private

Definition at line 125 of file Geant4TruthIncident.h.

125{};

◆ m_baseISP

const ISF::ISFParticle& iGeant4::Geant4TruthIncident::m_baseISP
private

Definition at line 123 of file Geant4TruthIncident.h.

◆ m_childPassedFilters

std::vector<bool> ISF::ITruthIncident::m_childPassedFilters
protectedinherited

Definition at line 131 of file ITruthIncident.h.

◆ m_children

std::vector<const G4Track*> iGeant4::Geant4TruthIncident::m_children
private

Definition at line 126 of file Geant4TruthIncident.h.

◆ m_geoID

AtlasDetDescr::AtlasRegion ISF::ITruthIncident::m_geoID
privateinherited

region that the TruthIncident is located in

Definition at line 127 of file ITruthIncident.h.

◆ m_numChildren

int ISF::ITruthIncident::m_numChildren
protectedinherited

Definition at line 129 of file ITruthIncident.h.

◆ m_parentParticleAfterIncident

HepMC::GenParticlePtr iGeant4::Geant4TruthIncident::m_parentParticleAfterIncident {}
private

Definition at line 128 of file Geant4TruthIncident.h.

128{};

◆ m_passWholeVertex

bool ISF::ITruthIncident::m_passWholeVertex
protectedinherited

Definition at line 130 of file ITruthIncident.h.

◆ m_position

HepMC::FourVector iGeant4::Geant4TruthIncident::m_position
private

Definition at line 121 of file Geant4TruthIncident.h.

◆ m_positionSet

bool iGeant4::Geant4TruthIncident::m_positionSet
private

Definition at line 120 of file Geant4TruthIncident.h.

◆ m_step

const G4Step* iGeant4::Geant4TruthIncident::m_step {}
private

Definition at line 122 of file Geant4TruthIncident.h.

122{};

The documentation for this class was generated from the following files: