ATLAS Offline Software
Loading...
Searching...
No Matches
ISFG4Helper.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5// class header
7
8// Geant4 includes
9#include "G4Track.hh"
10#include "G4ThreeVector.hh"
11#include "G4EventManager.hh"
12#include "G4Event.hh"
13
16
17// G4Atlas includes
20
21// ISF includes
23
24
25// ATLAS GeoPrimitves (Amg::Vector3D etc)
27
28
32 const ISF::ISFParticle& parent,
33 ISF::TruthBinding* truth)
34{
35 const G4ThreeVector& g4pos = aTrack.GetPosition();
36 const double gTime = aTrack.GetGlobalTime();
37 const Amg::Vector3D position(g4pos.x(),g4pos.y(),g4pos.z());
38
39 const G4ThreeVector& g4mom = aTrack.GetMomentum();
40 const Amg::Vector3D momentum(g4mom.x(),g4mom.y(),g4mom.z());
41
42 const G4ParticleDefinition &particleDefinition = *aTrack.GetDefinition();
43 double mass = particleDefinition.GetPDGMass();
44 double charge = particleDefinition.GetPDGCharge();
45 int pdgID = particleDefinition.GetPDGEncoding();
46
47 int barcode = (truth && truth->getCurrentGenParticle() ) ? HepMC::barcode(truth->getCurrentGenParticle()) : HepMC::UNDEFINED_ID; // FIXME barcode-based
48 const int id = (truth && truth->getCurrentGenParticle() ) ? HepMC::uniqueID(truth->getCurrentGenParticle()) : HepMC::UNDEFINED_ID;
49 const int status = (truth && truth->getCurrentGenParticle() ) ? truth->getCurrentGenParticle()->status() : 1;
50 ISF::ISFParticle *isp = new ISF::ISFParticle( position,
51 momentum,
52 mass,
53 charge,
54 pdgID,
55 status,
56 gTime,
57 parent,
58 id,
59 barcode, // FIXME barcode-based
60 truth
61 );
62
63 return isp;
64}
65
66
70{
71 VTrackInformation* trackInfo = static_cast<VTrackInformation*>(aTrack.GetUserInformation());
72 return trackInfo;
73}
74
75
79 ISF::ISFParticle& baseIsp,
81 HepMC::GenParticlePtr generationZeroGenParticle)
82{
83 if ( aTrack.GetUserInformation() ) {
84 G4ExceptionDescription description;
85 description << G4String("ISFG4Helper::attachTrackInfoToNewG4Track: ")
86 << "Trying to attach new TrackInformation object to G4Track which already has a TrackUserInformation attached (trackID: "
87 << aTrack.GetTrackID() << ", track pos: "<<aTrack.GetPosition() << ", mom: "<<aTrack.GetMomentum()
88 << ", parentID " << aTrack.GetParentID() << ")";
89 G4Exception("ISFG4Helper::attachTrackInfoToNewG4Track", "TrackUserInformationAlreadyExists", FatalException, description);
90 return nullptr;
91 }
92
93 auto* truthBinding = baseIsp.getTruthBinding();
94 if ( !truthBinding ) {
95 G4ExceptionDescription description;
96 description << G4String("ISFG4Helper::attachTrackInfoToNewG4Track: ")
97 << "No TruthBinding present in base ISFParticle (trackID: "
98 << aTrack.GetTrackID() << ", track pos: "<<aTrack.GetPosition() << ", mom: "<<aTrack.GetMomentum()
99 << ", parentID " << aTrack.GetParentID() << ", ISFParticle: "<<baseIsp<<")";
100 G4Exception("ISFG4Helper::attachTrackInfoToNewG4Track", "NoISFTruthBinding", FatalException, description);
101 return nullptr;
102 }
103
104 TrackInformation *trackInfo = new TrackInformation( generationZeroGenParticle, &baseIsp );
105 trackInfo->SetPrimaryGenParticle( truthBinding->getPrimaryGenParticle() );
106 trackInfo->SetClassification( classification );
107 aTrack.SetUserInformation( trackInfo );
108
109 return trackInfo;
110}
111
115{
116 return ( static_cast<AtlasG4EventUserInfo*> (G4EventManager::GetEventManager()->GetConstCurrentEvent()->GetUserInformation()) );
117}
double charge(const T &p)
Definition AtlasPID.h:997
This class is attached to G4Event objects as UserInformation.
The generic ISF particle definition,.
Definition ISFParticle.h:42
const TruthBinding * getTruthBinding() const
pointer to the simulation truth - optional, can be 0
HepMC::GenParticlePtr getCurrentGenParticle()
pointer to the particle in the simulation truth
Implementation of VTrackInformation.
Instances of classes derived from this class are attached as UserInformation to G4Tracks.
static VTrackInformation * getISFTrackInfo(const G4Track &aTrack)
return a valid UserInformation object of the G4Track for use within the ISF
static AtlasG4EventUserInfo * getAtlasG4EventUserInfo()
return pointer to current AtlasG4EventUserInfo
static ISF::ISFParticle * convertG4TrackToISFParticle(const G4Track &aTrack, const ISF::ISFParticle &parent, ISF::TruthBinding *truth=nullptr)
convert the given G4Track into an ISFParticle
static TrackInformation * attachTrackInfoToNewG4Track(G4Track &aTrack, ISF::ISFParticle &baseIsp, VTrackInformation::TrackClassification classification, HepMC::GenParticlePtr generationZeroGenParticle=nullptr)
attach a new TrackInformation object to the given new (!) G4Track (the G4Track must not have a UserIn...
std::string description
glabal timer - how long have I taken so far?
Definition hcg.cxx:91
Eigen::Matrix< double, 3, 1 > Vector3D
int barcode(const T *p)
Definition Barcode.h:16
int uniqueID(const T &p)
constexpr int UNDEFINED_ID
GenParticle * GenParticlePtr
Definition GenParticle.h:37