Skip to content

Commit

Permalink
Merge branch 'acts-project:main' into ROOT-performance-documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
SylvainJoube authored Apr 11, 2024
2 parents 1722fae + b51d395 commit d5dd921
Show file tree
Hide file tree
Showing 79 changed files with 2,877 additions and 2,345 deletions.
3 changes: 3 additions & 0 deletions core/include/traccc/finding/candidate_link.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ struct candidate_link {

// Index to the initial seed
unsigned int seed_idx;

// How many times it skipped a surface
unsigned int n_skipped;
};

} // namespace traccc
120 changes: 114 additions & 6 deletions core/include/traccc/finding/finding_algorithm.ipp
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,11 @@ finding_algorithm<stepper_t, navigator_t>::operator()(
? in_param_id
: links[step - 1][param_to_link[step - 1][in_param_id]]
.seed_idx);
unsigned int skip_counter =
(step == 0
? 0
: links[step - 1][param_to_link[step - 1][in_param_id]]
.n_skipped);

/*************************
* Material interaction
Expand Down Expand Up @@ -169,7 +174,8 @@ finding_algorithm<stepper_t, navigator_t>::operator()(
range.second = upper_bounds[bcd_id];
}
} else {
continue;
range.first = 0u;
range.second = 0u;
}

unsigned int n_branches = 0;
Expand Down Expand Up @@ -209,8 +215,10 @@ finding_algorithm<stepper_t, navigator_t>::operator()(
n_branches++;
n_trks_per_seed[orig_param_id]++;

links[step].push_back(
{{previous_step, in_param_id}, item_id, orig_param_id});
links[step].push_back({{previous_step, in_param_id},
item_id,
orig_param_id,
skip_counter});

/*********************************
* Propagate to the next surface
Expand Down Expand Up @@ -245,6 +253,7 @@ finding_algorithm<stepper_t, navigator_t>::operator()(
propagator.propagate_sync(propagation,
std::tie(s0, s1, s2, s3, s4, s5));
*/

// If a surface found, add the parameter for the next
// step
if (s4.success) {
Expand All @@ -258,6 +267,88 @@ finding_algorithm<stepper_t, navigator_t>::operator()(
step >= m_cfg.min_track_candidates_per_track - 1) {
tips.push_back({step, cur_link_id});
}

// If no more CKF step is expected, current candidate is
// kept as a tip
if (s4.success &&
step == m_cfg.max_track_candidates_per_track - 1) {
tips.push_back({step, cur_link_id});
}
}
}
// After the loop over the measurements

if (n_branches == 0) {
// let's skip this CKF step for the current track candidate
if (n_trks_per_seed[orig_param_id] >=
m_cfg.max_num_branches_per_initial_seed) {

continue;
}

bound_track_parameters bound_param(in_param.surface_link(),
in_param.vector(),
in_param.covariance());

measurement dummy_meas;

dummy_meas.local = in_param.bound_local();
dummy_meas.variance = dummy_meas.variance + point2{10., 10.};
dummy_meas.surface_link = in_param.surface_link();

track_state<transform3_type> trk_state(dummy_meas);

// Run the Kalman update
sf.template visit_mask<gain_matrix_updater<transform3_type>>(
trk_state, bound_param);

unsigned int cur_link_id =
static_cast<unsigned int>(links[step].size());

links[step].push_back({{previous_step, in_param_id},
std::numeric_limits<unsigned int>::max(),
orig_param_id,
skip_counter + 1});

if (skip_counter + 1 > m_cfg.max_num_skipping_per_cand) {
tips.push_back({step, cur_link_id});
continue;
// exit from param_id loop
}

// Create propagator state
typename propagator_type::state propagation(
trk_state.filtered(), field, det);
propagation._stepping.template set_constraint<
detray::step::constraint::e_accuracy>(
m_cfg.propagation.stepping.step_constraint);

typename detray::pathlimit_aborter::state s0;
typename detray::parameter_transporter<transform3_type>::state
s1;
typename interactor::state s3;
typename interaction_register<interactor>::state s2{s3};
typename detray::next_surface_aborter::state s4{
m_cfg.min_step_length_for_surface_aborter};

propagation._navigation.set_volume(
trk_state.filtered().surface_link().volume());

// Propagate to the next surface
propagator.propagate_sync(propagation,
std::tie(s0, s1, s2, s3, s4));

// If a surface found, add the parameter for the next
// step
if (s4.success) {
out_params.push_back(propagation._stepping._bound_params);
param_to_link[step].push_back(cur_link_id);
}
// Unless the track found a surface, it is considered a
// tip
else if (!s4.success &&
step >= m_cfg.min_track_candidates_per_track - 1) {
tips.push_back({step, cur_link_id});
}
}
}
Expand All @@ -280,16 +371,33 @@ finding_algorithm<stepper_t, navigator_t>::operator()(
continue;
}

vecmem::vector<track_candidate> cands_per_track;
cands_per_track.resize(tip.first + 1);

// Get the link corresponding to tip
auto L = links[tip.first][tip.second];

// Skip if the number of tracks candidates is too small
if (tip.first + 1 - L.n_skipped <
m_cfg.min_track_candidates_per_track) {
continue;
}

vecmem::vector<track_candidate> cands_per_track;
cands_per_track.resize(tip.first + 1 - L.n_skipped);

// Reversely iterate to fill the track candidates
for (auto it = cands_per_track.rbegin(); it != cands_per_track.rend();
it++) {

while (L.meas_idx > measurements.size()) {

if (L.previous.first > tip.first + 1)
break; // should not happen.

const auto link_pos =
param_to_link[L.previous.first][L.previous.second];

L = links[L.previous.first][link_pos];
}

auto& cand = *it;

cand = measurements.at(L.meas_idx);
Expand Down
3 changes: 3 additions & 0 deletions core/include/traccc/finding/finding_config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ struct finding_config {
unsigned int max_num_branches_per_initial_seed =
std::numeric_limits<unsigned int>::max();

/// Maximum allowed number of skipped steps per candidate
unsigned int max_num_skipping_per_cand = 3;

/// Minimum step length that track should make to reach the next surface. It
/// should be set higher than the overstep tolerance not to make it stay on
/// the same surface
Expand Down
85 changes: 39 additions & 46 deletions examples/io/create_binaries.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,96 +12,89 @@
#include "traccc/io/read_measurements.hpp"
#include "traccc/io/read_spacepoints.hpp"
#include "traccc/io/write.hpp"
#include "traccc/options/common_options.hpp"
#include "traccc/options/handle_argument_errors.hpp"
#include "traccc/options/detector.hpp"
#include "traccc/options/input_data.hpp"
#include "traccc/options/output_data.hpp"
#include "traccc/options/program_options.hpp"

// VecMem include(s).
#include <vecmem/memory/host_memory_resource.hpp>

namespace po = boost::program_options;
// System include(s).
#include <cstdlib>

int create_binaries(const std::string& detector_file,
const std::string& digi_config_file,
const traccc::common_options& common_opts) {
int create_binaries(const traccc::opts::detector& detector_opts,
const traccc::opts::input_data& input_opts,
const traccc::opts::output_data& output_opts) {

// Read the surface transforms
auto [surface_transforms, _] = traccc::io::read_geometry(detector_file);
auto [surface_transforms, _] =
traccc::io::read_geometry(detector_opts.detector_file);

// Read the digitization configuration file
auto digi_cfg = traccc::io::read_digitization_config(digi_config_file);
auto digi_cfg =
traccc::io::read_digitization_config(detector_opts.digitization_file);

// Memory resource used by the EDM.
vecmem::host_memory_resource host_mr;

// Loop over events
for (unsigned int event = common_opts.skip;
event < common_opts.events + common_opts.skip; ++event) {
for (unsigned int event = input_opts.skip;
event < input_opts.events + input_opts.skip; ++event) {

// Read the cells from the relevant event file
traccc::io::cell_reader_output cells_csv(&host_mr);
traccc::io::read_cells(cells_csv, event, common_opts.input_directory,
common_opts.input_data_format,
&surface_transforms, &digi_cfg);
traccc::io::read_cells(cells_csv, event, input_opts.directory,
input_opts.format, &surface_transforms,
&digi_cfg);

// Write binary file
traccc::io::write(event, common_opts.input_directory,
traccc::io::write(event, output_opts.directory,
traccc::data_format::binary,
vecmem::get_data(cells_csv.cells),
vecmem::get_data(cells_csv.modules));

// Read the hits from the relevant event file
traccc::io::spacepoint_reader_output spacepoints_csv(&host_mr);
traccc::io::read_spacepoints(
spacepoints_csv, event, common_opts.input_directory,
surface_transforms, common_opts.input_data_format);
traccc::io::read_spacepoints(spacepoints_csv, event,
input_opts.directory, surface_transforms,
input_opts.format);

// Write binary file
traccc::io::write(event, common_opts.input_directory,
traccc::io::write(event, output_opts.directory,
traccc::data_format::binary,
vecmem::get_data(spacepoints_csv.spacepoints),
vecmem::get_data(spacepoints_csv.modules));

// Read the measurements from the relevant event file
traccc::io::measurement_reader_output measurements_csv(&host_mr);
traccc::io::read_measurements(measurements_csv, event,
common_opts.input_directory,
common_opts.input_data_format);
input_opts.directory, input_opts.format);

// Write binary file
traccc::io::write(event, common_opts.input_directory,
traccc::io::write(event, output_opts.directory,
traccc::data_format::binary,
vecmem::get_data(measurements_csv.measurements),
vecmem::get_data(measurements_csv.modules));
}

return 0;
return EXIT_SUCCESS;
}

// The main routine
//
int main(int argc, char* argv[]) {
// Set up the program options
po::options_description desc("Allowed options");

// Add options
desc.add_options()("help,h", "Give some help with the program's options");
desc.add_options()("detector_file", po::value<std::string>()->required(),
"specify detector file");
desc.add_options()("digitization_config_file",
po::value<std::string>()->required(),
"specify digitization configuration file");
traccc::common_options common_opts(desc);

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);

// Check errors
traccc::handle_argument_errors(vm, desc);

// Read options
auto detector_file = vm["detector_file"].as<std::string>();
auto digi_config_file = vm["digitization_config_file"].as<std::string>();
common_opts.read(vm);

return create_binaries(detector_file, digi_config_file, common_opts);

// Program options.
traccc::opts::detector detector_opts;
traccc::opts::input_data input_opts;
traccc::opts::output_data output_opts;
traccc::opts::program_options program_opts{
"Binary File Creation",
{detector_opts, input_opts, output_opts},
argc,
argv};

// Run the application.
return create_binaries(detector_opts, input_opts, output_opts);
}
66 changes: 42 additions & 24 deletions examples/options/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,48 @@
# Set up the "build" of the traccc::option library.
traccc_add_library( traccc_options options TYPE SHARED
# header files
"include/traccc/options/common_options.hpp"
"include/traccc/options/detector_input_options.hpp"
"include/traccc/options/finding_input_options.hpp"
"include/traccc/options/full_tracking_input_options.hpp"
"include/traccc/options/details/interface.hpp"
"include/traccc/options/details/value_array.hpp"
"include/traccc/options/details/value_array.ipp"
"include/traccc/options/accelerator.hpp"
"include/traccc/options/clusterization.hpp"
"include/traccc/options/detector.hpp"
"include/traccc/options/generation.hpp"
"include/traccc/options/handle_argument_errors.hpp"
"include/traccc/options/mt_options.hpp"
"include/traccc/options/options.hpp"
"include/traccc/options/particle_gen_options.hpp"
"include/traccc/options/propagation_options.hpp"
"include/traccc/options/seeding_input_options.hpp"
"include/traccc/options/telescope_detector_options.hpp"
"include/traccc/options/throughput_options.hpp"
"include/traccc/options/input_data.hpp"
"include/traccc/options/output_data.hpp"
"include/traccc/options/performance.hpp"
"include/traccc/options/program_options.hpp"
"include/traccc/options/telescope_detector.hpp"
"include/traccc/options/threading.hpp"
"include/traccc/options/throughput.hpp"
"include/traccc/options/track_finding.hpp"
"include/traccc/options/track_propagation.hpp"
"include/traccc/options/track_resolution.hpp"
"include/traccc/options/track_seeding.hpp"
# source files
"src/options/common_options.cpp"
"src/options/detector_input_options.cpp"
"src/options/finding_input_options.cpp"
"src/options/full_tracking_input_options.cpp"
"src/options/handle_argument_errors.cpp"
"src/options/mt_options.cpp"
"src/options/particle_gen_options.cpp"
"src/options/propagation_options.cpp"
"src/options/seeding_input_options.cpp"
"src/options/telescope_detector_options.cpp"
"src/options/throughput_options.cpp"
"src/details/interface.cpp"
"src/accelerator.cpp"
"src/clusterization.cpp"
"src/detector.cpp"
"src/generation.cpp"
"src/handle_argument_errors.cpp"
"src/input_data.cpp"
"src/output_data.cpp"
"src/performance.cpp"
"src/program_options.cpp"
"src/telescope_detector.cpp"
"src/threading.cpp"
"src/throughput.cpp"
"src/track_finding.cpp"
"src/track_propagation.cpp"
"src/track_resolution.cpp"
"src/track_seeding.cpp"
)
target_link_libraries( traccc_options PUBLIC traccc::io
traccc::performance Boost::program_options)
target_link_libraries( traccc_options
PUBLIC
Boost::program_options
traccc::io
PRIVATE
traccc::performance
)
Loading

0 comments on commit d5dd921

Please sign in to comment.