5 #define TRUTHTOTRACK_IMP
11 #include "GaudiKernel/IPartPropSvc.h"
21 #include "HepPDT/ParticleDataTable.hh"
29 , m_particleDataTable(nullptr)
30 , m_extrapolator(
"Trk::Extrapolator/AtlasExtrapolator")
32 declareInterface<ITruthToTrack>(
this);
39 IPartPropSvc* partPropSvc =
nullptr;
40 StatusCode sc = service(
"PartPropSvc", partPropSvc,
true);
42 ATH_MSG_ERROR(
"Could not initialize Particle Properties Service");
43 return StatusCode::FAILURE;
45 m_particleDataTable = partPropSvc->PDT();
47 if ( m_extrapolator.retrieve().isFailure() ) {
49 return StatusCode::FAILURE;
52 return StatusCode::SUCCESS;
61 if(
part &&
part->production_vertex() && m_particleDataTable) {
62 HepMC::FourVector tv =
part->production_vertex()->position();
66 const HepMC::FourVector& fv =
part->momentum();
70 int id =
part->pdg_id();
72 const HepPDT::ParticleData* pd = m_particleDataTable->particle(std::abs(
id));
76 double charge = (
id>0) ? pd->charge() : -pd->charge();
95 if(
part &&
part->hasProdVtx() && m_particleDataTable) {
102 int id =
part->pdgId();
104 const HepPDT::ParticleData* pd = m_particleDataTable->particle(std::abs(
id));
108 double charge = (
id>0) ? pd->charge() : -pd->charge();
128 if(
part &&
part->production_vertex() && m_particleDataTable && m_extrapolator) {
130 std::unique_ptr<const Trk::TrackParameters> productionVertexTrackParams( makeProdVertexParameters(
part) );
131 if(productionVertexTrackParams) {
135 generatedTrackPerigee = m_extrapolator->extrapolateDirectly(
136 Gaudi::Hive::currentContext(),
137 *productionVertexTrackParams,
145 return generatedTrackPerigee;
154 if(
part &&
part->hasProdVtx() && m_particleDataTable && m_extrapolator) {
156 std::unique_ptr<const Trk::TrackParameters> productionVertexTrackParams( makeProdVertexParameters(
part) );
157 if(productionVertexTrackParams) {
161 generatedTrackPerigee = m_extrapolator->extrapolateDirectly(
162 Gaudi::Hive::currentContext(),
163 *productionVertexTrackParams,
171 return generatedTrackPerigee;