File indexing completed on 2025-12-20 09:11:32
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Units.hpp"
0012 #include "Acts/EventData/ParticleHypothesis.hpp"
0013 #include "Acts/Utilities/Logger.hpp"
0014 #include "ActsExamples/EventData/SimParticle.hpp"
0015 #include "ActsExamples/EventData/Track.hpp"
0016 #include "ActsExamples/Framework/DataHandle.hpp"
0017 #include "ActsExamples/Framework/IAlgorithm.hpp"
0018 #include "ActsExamples/Framework/ProcessCode.hpp"
0019 #include "ActsExamples/Framework/RandomNumbers.hpp"
0020
0021 #include <array>
0022 #include <limits>
0023 #include <memory>
0024 #include <optional>
0025 #include <string>
0026
0027 namespace ActsExamples {
0028 class RandomNumbers;
0029 struct AlgorithmContext;
0030
0031
0032
0033
0034
0035
0036
0037 class ParticleSmearing final : public IAlgorithm {
0038 public:
0039 struct Config {
0040
0041 std::string inputParticles;
0042
0043 std::string outputTrackParameters;
0044
0045 double sigmaD0 = 20 * Acts::UnitConstants::um;
0046
0047 double sigmaD0PtA = 30 * Acts::UnitConstants::um;
0048 double sigmaD0PtB = 0.3 / Acts::UnitConstants::GeV;
0049
0050 double sigmaZ0 = 20 * Acts::UnitConstants::um;
0051
0052 double sigmaZ0PtA = 30 * Acts::UnitConstants::um;
0053 double sigmaZ0PtB = 0.3 / Acts::UnitConstants::GeV;
0054
0055 double sigmaT0 = 1 * Acts::UnitConstants::ns;
0056
0057 double sigmaPhi = 1 * Acts::UnitConstants::degree;
0058
0059 double sigmaTheta = 1 * Acts::UnitConstants::degree;
0060
0061 double sigmaPRel = 0.05;
0062
0063
0064 std::optional<std::array<double, 6>> initialSigmas = std::array<double, 6>{
0065 1 * Acts::UnitConstants::mm, 1 * Acts::UnitConstants::mm,
0066 1 * Acts::UnitConstants::degree, 1 * Acts::UnitConstants::degree,
0067 0.1 / Acts::UnitConstants::GeV, 1 * Acts::UnitConstants::ns};
0068
0069 std::array<double, 6> initialVarInflation = {1., 1., 1., 1., 1., 1.};
0070
0071 std::shared_ptr<const RandomNumbers> randomNumbers = nullptr;
0072
0073 std::optional<Acts::ParticleHypothesis> particleHypothesis = std::nullopt;
0074 };
0075
0076 ParticleSmearing(const Config& config, Acts::Logging::Level level);
0077
0078 ProcessCode execute(const AlgorithmContext& ctx) const override;
0079
0080
0081 const Config& config() const { return m_cfg; }
0082
0083 private:
0084 Config m_cfg;
0085
0086 ReadDataHandle<SimParticleContainer> m_inputParticles{this, "InputParticles"};
0087
0088 WriteDataHandle<TrackParametersContainer> m_outputTrackParameters{
0089 this, "OutputTrackParameters"};
0090 };
0091
0092 }