EICrecon
JANA based reconstruction for the EPIC detector
Loading...
Searching...
No Matches
TrackPropagation.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-3.0-or-later
2// Copyright (C) 2022 - 2024, Dmitry Romanov, Wouter Deconinck
3
4#pragma once
5
6#if Acts_VERSION_MAJOR >= 46
7#include <Acts/EventData/BoundTrackParameters.hpp>
8#else
9#include <Acts/EventData/TrackParameters.hpp>
10#endif
11#include <Acts/EventData/TrackProxy.hpp>
12#include <Acts/EventData/VectorMultiTrajectory.hpp>
13#include <Acts/EventData/VectorTrackContainer.hpp>
14#include <Acts/Geometry/GeometryIdentifier.hpp>
15#include <Acts/Surfaces/Surface.hpp>
16#include <Acts/Utilities/Result.hpp>
17#include <ActsExamples/EventData/Track.hpp>
18#include <DD4hep/Detector.h>
19#include <algorithms/algorithm.h>
20#include <algorithms/geo.h>
21#include <edm4eic/TrackCollection.h>
22#include <edm4eic/TrackPoint.h>
23#include <edm4eic/TrackSegmentCollection.h>
24#include <cstddef>
25#include <gsl/pointers>
26#include <memory>
27#include <string>
28#include <string_view>
29#include <tuple>
30#include <vector>
31
36
37namespace eicrecon {
38
39using ActsTrackPropagationResult = Acts::Result<std::unique_ptr<const Acts::BoundTrackParameters>>;
40
41using TrackPropagationAlgorithm = algorithms::Algorithm<
42 algorithms::Input<edm4eic::TrackCollection, Acts::ConstVectorMultiTrajectory,
43 Acts::ConstVectorTrackContainer>,
44 algorithms::Output<edm4eic::TrackSegmentCollection>>;
45
51 public WithPodConfig<TrackPropagationConfig> {
52
53public:
54 TrackPropagation(std::string_view name)
56 {"inputTracks", "inputActsTrackStates", "inputActsTracks"},
57 {"outputTrackSegments"},
58 "Track propagation to surfaces"} {}
59
61 void init() final;
62
63 void process(const Input& input, const Output& output) const final {
64 const auto [tracks, track_states, tracks_acts] = input;
65 auto [propagated_tracks] = output;
66
67 // Construct ConstTrackContainer from underlying containers
68 auto trackStateContainer = std::make_shared<Acts::ConstVectorMultiTrajectory>(*track_states);
69 auto trackContainer = std::make_shared<Acts::ConstVectorTrackContainer>(*tracks_acts);
70 ActsExamples::ConstTrackContainer constTracks(trackContainer, trackStateContainer);
71
72 std::size_t i = 0;
73 for (const auto& track : constTracks) {
74 auto this_propagated_track = propagated_tracks->create();
75 if (tracks->size() == constTracks.size()) {
76 trace("track segment connected to track {}", i);
77 this_propagated_track.setTrack((*tracks)[i]);
78 }
79 for (auto& surf : m_target_surfaces) {
80 auto prop_point =
81 propagate(tracks->size() == constTracks.size() ? (*tracks)[i] : edm4eic::Track{}, track,
82 constTracks, surf);
83 if (!prop_point)
84 continue;
85 prop_point->surface = surf->geometryId().layer();
86 prop_point->system = surf->geometryId().extra();
87 this_propagated_track.addToPoints(*prop_point);
88 }
89 ++i;
90 }
91 }
92
94 std::unique_ptr<edm4eic::TrackPoint>
95 propagate(const edm4eic::Track&, const ActsExamples::ConstTrackProxy&,
96 const ActsExamples::ConstTrackContainer&,
97 const std::shared_ptr<const Acts::Surface>& targetSurf) const;
98
103 void propagateToSurfaceList(const Input& input, const Output& output) const;
104
105private:
106 std::shared_ptr<const ActsGeometryProvider> m_geoSvc{
107 algorithms::ActsSvc::instance().acts_geometry_provider()};
108 const dd4hep::Detector* m_detector{algorithms::GeoSvc::instance().detector()};
109
110 std::vector<std::shared_ptr<Acts::Surface>> m_filter_surfaces;
111 std::vector<std::shared_ptr<Acts::Surface>> m_target_surfaces;
112};
113} // namespace eicrecon
Definition TrackPropagation.h:51
TrackPropagation(std::string_view name)
Definition TrackPropagation.h:54
Definition WithPodConfig.h:22
-client
Definition CalorimeterClusterRecoCoG.cc:37
Acts::Result< std::unique_ptr< const Acts::BoundTrackParameters > > ActsTrackPropagationResult
Definition TrackPropagation.h:39
algorithms::Algorithm< algorithms::Input< edm4eic::TrackCollection, Acts::ConstVectorMultiTrajectory, Acts::ConstVectorTrackContainer >, algorithms::Output< edm4eic::TrackSegmentCollection > > TrackPropagationAlgorithm
Definition TrackPropagation.h:44