44 const Acts::GeometryContext tgContext =
m_ctxProvider.getGeometryContext(ctx);
46 const std::string outDir = std::format(
"{:}/Event_{:}/",
m_outPath.value(),
47 ctx.eventID().event_number());
49 Acts::ObjVisualization3D visualHelper{};
50 std::unordered_set<std::shared_ptr<const Acts::Surface>> passedSurfaces{};
54 passedSurfaces.clear();
57 std::optional<Acts::BoundTrackParameters> startPars{};
59 startPars = track->createParametersAtReference();
60 for (
const auto& state : track->trackStates()) {
61 Acts::GeometryView3D::drawSurface(visualHelper, state.referenceSurface(),
62 tgContext, Acts::Transform3::Identity(),
63 Acts::s_viewSensitive);
64 passedSurfaces.insert(state.referenceSurface().getSharedPtr());
67 auto startSurf = Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Transform3::Identity());
68 Acts::BoundVector pars{Acts::BoundVector::Zero()};
69 pars[Acts::eBoundLoc0] = particle->d0();
70 pars[Acts::eBoundLoc1] = particle->z0();
71 pars[Acts::eBoundLoc1] = particle->phi();
72 pars[Acts::eBoundTheta] = particle->theta();
73 pars[Acts::eBoundQOverP] = particle->charge() /
energyToActs(particle->pt() * std::cosh(particle->eta()));
74 startPars = Acts::BoundTrackParameters{startSurf, pars, std::nullopt,
77 auto steps =
m_extrapolationTool->propagationSteps(ctx, *startPars, Acts::Direction::Forward(), 50._m);
83 for (
const auto& step : steps->first) {
84 if (step.surface && passedSurfaces.insert(step.surface).second) {
85 Acts::GeometryView3D::drawSurface(visualHelper, *step.surface,
86 tgContext, Acts::Transform3::Identity(),
90 visualHelper.write(std::format(
"{:}/Track_{:}_pt_{:}_eta_{:}_phi_{:}.obj", outDir,
91 particle->index(),
toString(particle->pt() / 1.e3),
95 return StatusCode::SUCCESS;
xAOD::ParticleHypothesis convert(Acts::ParticleHypothesis h)
void drawPropagation(const std::vector< Acts::detail::Step > &steps, Acts::ObjVisualization3D &visualHelper, const Acts::ViewConfig &viewConfig=Acts::s_viewLine)
Draws the recorded propagation steps as a polygon line.