24 throw std::invalid_argument(
"Missing input truth particles collection");
27 throw std::invalid_argument(
"Missing output tracks parameters collection");
33 namespace vh = Acts::VectorHelpers;
36 const auto& particles =
39 parameters.reserve(particles.size());
42 auto rng = m_cfg.randomNumbers->spawnGenerator(ctx);
43 std::normal_distribution<double> stdNormal(0.0, 1.0);
45 for (
const auto&
particle : particles) {
54 m_cfg.sigmaD0PtA * std::exp(-1.0 *
std::abs(m_cfg.sigmaD0PtB) *
pt);
57 m_cfg.sigmaZ0PtA * std::exp(-1.0 *
std::abs(m_cfg.sigmaZ0PtB) *
pt);
58 const auto sigmaP = m_cfg.sigmaPRel *
p;
60 const auto sigmaQOverP = sigmaP / (
p *
p);
62 const auto sigmaT0 = m_cfg.sigmaT0;
63 const auto sigmaPhi = m_cfg.sigmaPhi;
64 const auto sigmaTheta = m_cfg.sigmaTheta;
67 const auto sigmaU = sigmaD0;
69 const auto sigmaV = sigmaZ0 * std::sin(
theta);
72 const auto deltaD0 = sigmaD0 * stdNormal(rng);
73 const auto deltaZ0 = sigmaZ0 * stdNormal(rng);
74 const auto deltaT0 = sigmaT0 * stdNormal(rng);
75 const auto deltaPhi = sigmaPhi * stdNormal(rng);
76 const auto deltaTheta = sigmaTheta * stdNormal(rng);
77 const auto deltaP = sigmaP * stdNormal(rng);
82 deltaD0 * -std::cos(phi), deltaZ0);
90 std::sin(angles.second) * std::sin(angles.first),
91 std::cos(angles.second));
104 parameters.emplace_back(std::make_optional(std::move(cov)), pos, mom,
108 ctx.
eventStore.
add(m_cfg.outputTrackParameters, std::move(parameters));