10 #include "GaudiKernel/EventContext.h"
11 #include "GaudiKernel/ISvcLocator.h"
14 #include "Acts/Propagator/MaterialInteractor.hpp"
15 #include "Acts/Propagator/detail/SteppingLogger.hpp"
16 #include "Acts/Surfaces/PerigeeSurface.hpp"
17 #include "Acts/Utilities/Helpers.hpp"
18 #include "Acts/Definitions/Units.hpp"
19 #include "Acts/Utilities/Logger.hpp"
30 #include "CLHEP/Random/RandomEngine.h"
36 using namespace Acts::UnitLiterals;
43 std::pair<std::pair<Acts::Vector3, Acts::Vector3>, RecordedMaterial>;
52 ATH_CHECK(m_extrapolationTool.retrieve());
53 ATH_CHECK(m_propStepWriterSvc.retrieve());
54 ATH_CHECK(m_trackingGeometryTool.retrieve());
55 if (m_writeMaterialTracks) {
56 ATH_CHECK( m_materialTrackWriterSvc.retrieve() );
59 return StatusCode::SUCCESS;
68 CLHEP::HepRandomEngine *rngEngine = rngWrapper->
getEngine(ctx);
70 ATH_MSG_VERBOSE(
"Extrapolating " << m_nParticlePerEvent <<
" particles");
72 for (
size_t i = 0;
i < m_nParticlePerEvent;
i++) {
75 double phi = rngEngine->flat() * 2 *
M_PI -
M_PI;
76 std::vector<double>
etaRange = m_etaRange;
81 std::vector<double> ptRange = m_ptRange;
82 double ptMin = ptRange.at(0) * 1_GeV;
83 double ptMax = ptRange.at(1) * 1_GeV;
85 double pt = rngEngine->flat() * std::abs(ptMax - ptMin) + ptMin;
92 double charge = rngEngine->flat() > 0.5 ? -1 : 1;
96 std::shared_ptr<Acts::PerigeeSurface> surface =
97 Acts::Surface::makeShared<Acts::PerigeeSurface>(
98 Acts::Vector3(0, 0, 0));
103 Acts::BoundVector
pars;
106 std::optional<Acts::BoundSquareMatrix>
cov = std::nullopt;
114 output = m_extrapolationTool->propagationSteps(ctx, startParameters);
115 if(output.first.size() == 0) {
118 if (m_writePropStep) {
119 m_propStepWriterSvc->write(output.first);
122 if(m_writeMaterialTracks){
124 track.first.first = Acts::Vector3(0,0,0);
126 track.second = std::move(output.second);
127 m_materialTrackWriterSvc->write(
track);
134 return StatusCode::SUCCESS;
139 const std::vector<Acts::detail::Step>&
steps)
const {
141 std::lock_guard<std::mutex>
lock(m_writeMutex);
144 std::stringstream lstr;
147 const auto &
pos =
step.position;
148 out <<
"v " <<
pos.x() <<
" " <<
pos.y() <<
" " <<
pos.z() << std::endl;
149 lstr <<
" " << m_objVtxCount;
155 out << lstr.str() << std::endl;