Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-17 08:07:25

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2023  - 2025 Joe Osborn, Dmitry Romanov, Wouter Deconinck// Created by Dmitry Romanov
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 } // namespace eicrecon