File indexing completed on 2026-07-26 08:22:06
0001
0002
0003
0004
0005
0006
0007
0008 #pragma once
0009
0010
0011 #include "traccc/device/global_index.hpp"
0012 #include "traccc/fitting/device/fit_payload.hpp"
0013 #include "traccc/fitting/status_codes.hpp"
0014
0015
0016 #include "traccc/edm/track_container.hpp"
0017 #include "traccc/edm/track_state_helpers.hpp"
0018
0019
0020 #include <vecmem/containers/data/vector_view.hpp>
0021
0022 namespace traccc::device {
0023
0024
0025 struct fit_prelude_payload {
0026
0027 vecmem::data::vector_view<const unsigned int> track_indices;
0028
0029 edm::track_container<default_algebra>::const_view input_tracks;
0030
0031 edm::track_container<default_algebra>::view output_tracks;
0032
0033 vecmem::data::vector_view<unsigned int> track_liveness;
0034
0035 };
0036
0037
0038 TRACCC_HOST_DEVICE inline void fit_prelude(const global_index_t globalIndex,
0039 const fit_prelude_payload& payload) {
0040 edm::track_collection<default_algebra>::device tracks(
0041 payload.output_tracks.tracks);
0042
0043 if (globalIndex >= tracks.size()) {
0044 return;
0045 }
0046
0047 edm::track_state_collection<default_algebra>::device track_states(
0048 payload.output_tracks.states);
0049
0050 vecmem::device_vector<const unsigned int> track_indices(
0051 payload.track_indices);
0052 vecmem::device_vector<unsigned int> track_liveness(payload.track_liveness);
0053
0054 const unsigned int param_id = track_indices.at(globalIndex);
0055
0056 edm::track track = tracks.at(param_id);
0057
0058 const edm::track_collection<default_algebra>::const_device track_candidates{
0059 payload.input_tracks.tracks};
0060 const edm::track track_candidate = track_candidates.at(param_id);
0061 const auto track_candidate_constituent_links =
0062 track_candidate.constituent_links();
0063 const edm::measurement_collection::const_device measurements{
0064 payload.input_tracks.measurements};
0065 for (const edm::track_constituent_link& link :
0066 track_candidate_constituent_links) {
0067 assert(link.type == edm::track_constituent_link::measurement);
0068 const unsigned int track_state_index = track_states.push_back(
0069 edm::make_track_state<default_algebra>(measurements, link.index));
0070 track.constituent_links().push_back(
0071 {edm::track_constituent_link::track_state, track_state_index});
0072 }
0073
0074
0075 track.params() = track_candidate.params();
0076 track_liveness.at(param_id) = 1u;
0077 }
0078 }