File indexing completed on 2025-09-17 08:07:25
0001
0002
0003
0004 #pragma once
0005
0006 #if Acts_VERSION_MAJOR >= 37
0007 #include <Acts/EventData/SpacePointContainer.hpp>
0008 #endif
0009 #include <Acts/Seeding/SeedFilterConfig.hpp>
0010 #include <Acts/Seeding/SeedFinderConfig.hpp>
0011 #include <Acts/Seeding/SeedFinderOrthogonalConfig.hpp>
0012 #include <Acts/Utilities/Holders.hpp>
0013 #if Acts_VERSION_MAJOR >= 37
0014 #include <ActsExamples/EventData/SpacePointContainer.hpp>
0015 #endif
0016 #include <algorithms/algorithm.h>
0017 #include <edm4eic/TrackParametersCollection.h>
0018 #include <edm4eic/TrackerHitCollection.h>
0019 #include <cmath>
0020 #include <iterator>
0021 #include <memory>
0022 #include <string>
0023 #include <string_view>
0024 #include <tuple>
0025 #include <utility>
0026 #include <variant>
0027 #include <vector>
0028
0029 #include "ActsGeometryProvider.h"
0030 #include "OrthogonalTrackSeedingConfig.h"
0031 #include "SpacePoint.h"
0032 #include "algorithms/interfaces/ActsSvc.h"
0033 #include "algorithms/interfaces/WithPodConfig.h"
0034
0035 namespace eicrecon {
0036
0037 using TrackSeedingAlgorithm =
0038 algorithms::Algorithm<algorithms::Input<edm4eic::TrackerHitCollection>,
0039 algorithms::Output<edm4eic::TrackParametersCollection>>;
0040
0041 class TrackSeeding : public TrackSeedingAlgorithm,
0042 public WithPodConfig<OrthogonalTrackSeedingConfig> {
0043 public:
0044 #if Acts_VERSION_MAJOR >= 37
0045 using proxy_type = typename Acts::SpacePointContainer<
0046 ActsExamples::SpacePointContainer<std::vector<const SpacePoint*>>,
0047 Acts::detail::RefHolder>::SpacePointProxyType;
0048 #endif
0049
0050 TrackSeeding(std::string_view name)
0051 : TrackSeedingAlgorithm{name,
0052 {"inputTrackerHits"},
0053 {"outputTrackParameters"},
0054 "create track seeds from tracker hits"} {}
0055
0056 void init() final;
0057 void process(const Input&, const Output&) const final;
0058
0059 private:
0060 const algorithms::ActsSvc& m_actsSvc{algorithms::ActsSvc::instance()};
0061 const std::shared_ptr<const ActsGeometryProvider> m_geoSvc{m_actsSvc.acts_geometry_provider()};
0062
0063 Acts::SeedFilterConfig m_seedFilterConfig;
0064 Acts::SeedFinderOptions m_seedFinderOptions;
0065 #if Acts_VERSION_MAJOR >= 37
0066 Acts::SeedFinderOrthogonalConfig<proxy_type> m_seedFinderConfig;
0067 #else
0068 Acts::SeedFinderOrthogonalConfig<SpacePoint> m_seedFinderConfig;
0069 #endif
0070
0071 static int determineCharge(std::vector<std::pair<float, float>>& positions,
0072 const std::pair<float, float>& PCA,
0073 std::tuple<float, float, float>& RX0Y0);
0074 static std::pair<float, float> findPCA(std::tuple<float, float, float>& circleParams);
0075 static std::vector<const eicrecon::SpacePoint*>
0076 getSpacePoints(const edm4eic::TrackerHitCollection& trk_hits);
0077 void addToTrackParams(edm4eic::TrackParametersCollection& trackparams,
0078 SeedContainer& seeds) const;
0079
0080 static std::tuple<float, float, float> circleFit(std::vector<std::pair<float, float>>& positions);
0081 static std::tuple<float, float> lineFit(std::vector<std::pair<float, float>>& positions);
0082 };
0083 }