EICrecon
JANA based reconstruction for the EPIC detector
Loading...
Searching...
No Matches
TrackSeeding.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-3.0-or-later
2// Copyright (C) 2023 - 2025 Joe Osborn, Dmitry Romanov, Wouter Deconinck// Created by Dmitry Romanov
3
4#pragma once
5
6#include <Acts/EventData/Seed.hpp>
7#include <Acts/EventData/SpacePointContainer.hpp>
8#include <Acts/Seeding/SeedFilterConfig.hpp>
9#include <Acts/Seeding/SeedFinderConfig.hpp>
10#include <Acts/Seeding/SeedFinderOrthogonalConfig.hpp>
11#include <Acts/Utilities/HashedString.hpp>
12#include <Acts/Utilities/Holders.hpp>
13#if __has_include(<ActsExamples/EventData/SpacePointContainer.hpp>)
14#include <ActsExamples/EventData/SpacePointContainer.hpp>
15#else
16#include <any>
17#include <stdexcept>
18#endif
19#include <algorithms/algorithm.h>
20#include <edm4eic/TrackParametersCollection.h>
21#include <edm4eic/TrackSeedCollection.h>
22#include <edm4eic/TrackerHitCollection.h>
23#include <cmath>
24#include <iterator>
25#include <memory>
26#include <optional>
27#include <string>
28#include <string_view>
29#include <tuple>
30#include <utility>
31#include <variant>
32#include <vector>
33
36#include "SpacePoint.h"
39
40namespace eicrecon {
41
42#if !__has_include(<ActsExamples/EventData/SpacePointContainer.hpp>)
46template <typename collection_t> class SpacePointContainerAdapter {
47public:
48 using CollectionType = collection_t;
49 using ValueType = typename CollectionType::value_type;
50
51 friend class Acts::SpacePointContainer<SpacePointContainerAdapter<collection_t>,
52 Acts::detail::RefHolder>;
53
55 explicit SpacePointContainerAdapter(CollectionType& container) : m_storage(container) {}
56
57private:
58 std::size_t size_impl() const { return storage().size(); }
59 float x_impl(std::size_t idx) const { return storage()[idx]->x(); }
60 float y_impl(std::size_t idx) const { return storage()[idx]->y(); }
61 float z_impl(std::size_t idx) const { return storage()[idx]->z(); }
62 float varianceR_impl(std::size_t idx) const { return storage()[idx]->varianceR(); }
63 float varianceZ_impl(std::size_t idx) const { return storage()[idx]->varianceZ(); }
64 const ValueType& get_impl(std::size_t idx) const { return storage()[idx]; }
65 std::any component_impl(Acts::HashedString /*key*/, std::size_t /*n*/) const {
66 throw std::runtime_error(
67 "SpacePointContainerAdapter does not support detailed double measurement "
68 "information (useDetailedDoubleMeasurementInfo). Use Acts::SpacePointContainer2 "
69 "if this feature is required.");
70 }
71
72 const CollectionType& storage() const { return *m_storage; }
73
74 Acts::detail::RefHolder<CollectionType> m_storage;
75};
76#endif
77
78using TrackSeedingAlgorithm = algorithms::Algorithm<
79 algorithms::Input<edm4eic::TrackerHitCollection>,
80 algorithms::Output<edm4eic::TrackSeedCollection, edm4eic::TrackParametersCollection>>;
81
83 public WithPodConfig<OrthogonalTrackSeedingConfig> {
84public:
85#if __has_include(<ActsExamples/EventData/SpacePointContainer.hpp>)
86 using SpacePointContainerType = ActsExamples::SpacePointContainer<std::vector<const SpacePoint*>>;
87#else
89#endif
90 using proxy_type =
91 typename Acts::SpacePointContainer<SpacePointContainerType,
92 Acts::detail::RefHolder>::SpacePointProxyType;
93
94 TrackSeeding(std::string_view name)
96 {"inputTrackerHits"},
97 {"outputTrackParameters"},
98 "create track seeds from tracker hits"} {}
99
100 void init() final;
101 void process(const Input&, const Output&) const final;
102
103private:
104 const algorithms::ActsSvc& m_actsSvc{algorithms::ActsSvc::instance()};
105 const std::shared_ptr<const ActsGeometryProvider> m_geoSvc{m_actsSvc.acts_geometry_provider()};
106
107 Acts::SeedFilterConfig m_seedFilterConfig;
108 Acts::SeedFinderOptions m_seedFinderOptions;
109 Acts::SeedFinderOrthogonalConfig<proxy_type> m_seedFinderConfig;
110
111 static int determineCharge(std::vector<std::pair<float, float>>& positions,
112 const std::pair<float, float>& PCA,
113 std::tuple<float, float, float>& RX0Y0);
114 static std::pair<float, float> findPCA(std::tuple<float, float, float>& circleParams);
115 static std::vector<const eicrecon::SpacePoint*>
116 getSpacePoints(const edm4eic::TrackerHitCollection& trk_hits);
117 std::optional<edm4eic::MutableTrackParameters>
118 estimateTrackParamsFromSeed(const Acts::Seed<SpacePoint>& seed) const;
119
120 static std::tuple<float, float, float> circleFit(std::vector<std::pair<float, float>>& positions);
121 static std::tuple<float, float> lineFit(std::vector<std::pair<float, float>>& positions);
122};
123} // namespace eicrecon
Definition TrackSeeding.h:46
collection_t CollectionType
Definition TrackSeeding.h:48
typename CollectionType::value_type ValueType
Definition TrackSeeding.h:49
Definition TrackSeeding.h:83
TrackSeeding(std::string_view name)
Definition TrackSeeding.h:94
SpacePointContainerAdapter< std::vector< const SpacePoint * > > SpacePointContainerType
Definition TrackSeeding.h:88
typename Acts::SpacePointContainer< SpacePointContainerType, Acts::detail::RefHolder >::SpacePointProxyType proxy_type
Definition TrackSeeding.h:92
Definition WithPodConfig.h:22
Definition ActsSvc.h:11
-client
Definition CalorimeterClusterRecoCoG.cc:37
algorithms::Algorithm< algorithms::Input< edm4eic::TrackerHitCollection >, algorithms::Output< edm4eic::TrackSeedCollection, edm4eic::TrackParametersCollection > > TrackSeedingAlgorithm
Definition TrackSeeding.h:80