Skip to content

Commit 82225b3

Browse files
authored
Merge pull request #1077 from stephenswat/feat/truth_finding_output
Add truth finding cuts and efficiency output
2 parents bc2115f + f471b12 commit 82225b3

File tree

11 files changed

+189
-38
lines changed

11 files changed

+189
-38
lines changed

examples/options/include/traccc/options/truth_finding.hpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,30 @@
77

88
#pragma once
99

10+
#include <boost/program_options.hpp>
11+
1012
#include "traccc/definitions/common.hpp"
13+
#include "traccc/options/details/config_provider.hpp"
1114
#include "traccc/options/details/interface.hpp"
15+
#include "traccc/utils/truth_matching_config.hpp"
1216

1317
namespace traccc::opts {
14-
class truth_finding : public interface {
18+
class truth_finding : public interface,
19+
public config_provider<truth_matching_config> {
1520

1621
public:
17-
float m_min_pt = 0.5f * unit<float>::GeV;
22+
float m_pT_min = 0.5f * unit<float>::GeV;
23+
float m_z_min = -500.f * unit<float>::mm;
24+
float m_z_max = 500.f * unit<float>::mm;
25+
float m_r_max = 200.f * unit<float>::mm;
26+
float m_matching_ratio = 0.5f;
27+
unsigned int m_min_track_candidates = 3;
28+
bool m_double_matching = true;
1829

1930
truth_finding();
2031

32+
operator truth_matching_config() const override;
33+
2134
void read(const boost::program_options::variables_map &) override;
2235

2336
std::unique_ptr<configuration_printable> as_printable() const override;

examples/options/src/truth_finding.cpp

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,68 @@ namespace traccc::opts {
1717
truth_finding::truth_finding() : interface("Truth Track Finding Options") {
1818
m_desc.add_options()(
1919
"truth-finding-min-pt",
20-
boost::program_options::value(&m_min_pt)->default_value(m_min_pt),
21-
"Candidate particule pT cut [GeV]");
20+
boost::program_options::value(&m_pT_min)->default_value(m_pT_min),
21+
"Candidate particle pT cut [GeV]");
22+
m_desc.add_options()(
23+
"truth-finding-min-z",
24+
boost::program_options::value(&m_z_min)->default_value(m_z_min),
25+
"Candidate particle min z cut [mm]");
26+
m_desc.add_options()(
27+
"truth-finding-max-z",
28+
boost::program_options::value(&m_z_max)->default_value(m_z_max),
29+
"Candidate particle max z cut [mm]");
30+
m_desc.add_options()(
31+
"truth-finding-max-r",
32+
boost::program_options::value(&m_r_max)->default_value(m_r_max),
33+
"Candidate particle max r cut [mm]");
34+
m_desc.add_options()("truth-finding-matching-ratio",
35+
boost::program_options::value(&m_matching_ratio)
36+
->default_value(m_matching_ratio),
37+
"Minimum track state matching ratio");
38+
m_desc.add_options()("truth-finding-min-track-candidates",
39+
boost::program_options::value(&m_min_track_candidates)
40+
->default_value(m_min_track_candidates),
41+
"Minimum track candidates on track");
42+
m_desc.add_options()("truth-finding-double-matching",
43+
boost::program_options::bool_switch(&m_double_matching)
44+
->default_value(m_double_matching),
45+
"Enable double truth-reco matching");
2246
}
2347

2448
void truth_finding::read(const boost::program_options::variables_map &) {
25-
m_min_pt *= unit<float>::GeV;
49+
m_pT_min *= unit<float>::GeV;
50+
m_z_min *= unit<float>::mm;
51+
m_z_max *= unit<float>::mm;
52+
m_r_max *= unit<float>::mm;
53+
}
54+
55+
truth_finding::operator truth_matching_config() const {
56+
return truth_matching_config{.pT_min = m_pT_min,
57+
.z_min = m_z_min,
58+
.z_max = m_z_max,
59+
.r_max = m_r_max,
60+
.matching_ratio = m_matching_ratio,
61+
.min_track_candidates = m_min_track_candidates,
62+
.double_matching = m_double_matching};
2663
}
2764

2865
std::unique_ptr<configuration_printable> truth_finding::as_printable() const {
2966
auto cat = std::make_unique<configuration_category>(m_description);
3067

3168
cat->add_child(std::make_unique<configuration_kv_pair>(
32-
"Minimum pT", std::format("{} GeV", m_min_pt / unit<float>::GeV)));
69+
"Minimum pT", std::format("{} GeV", m_pT_min / unit<float>::GeV)));
70+
cat->add_child(std::make_unique<configuration_kv_pair>(
71+
"Minimum z", std::format("{} mm", m_z_min / unit<float>::mm)));
72+
cat->add_child(std::make_unique<configuration_kv_pair>(
73+
"Maximum z", std::format("{} mm", m_z_max / unit<float>::mm)));
74+
cat->add_child(std::make_unique<configuration_kv_pair>(
75+
"Maximum r", std::format("{} mm", m_r_max / unit<float>::mm)));
76+
cat->add_child(std::make_unique<configuration_kv_pair>(
77+
"Matching ratio", std::format("{}", m_matching_ratio)));
78+
cat->add_child(std::make_unique<configuration_kv_pair>(
79+
"Minimum track candidates", std::format("{}", m_min_track_candidates)));
80+
cat->add_child(std::make_unique<configuration_kv_pair>(
81+
"Double matching", std::format("{}", m_double_matching)));
3382

3483
return cat;
3584
}

examples/run/alpaka/seeding_example_alpaka.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "traccc/options/track_fitting.hpp"
3939
#include "traccc/options/track_propagation.hpp"
4040
#include "traccc/options/track_seeding.hpp"
41+
#include "traccc/options/truth_finding.hpp"
4142
#include "traccc/performance/collection_comparator.hpp"
4243
#include "traccc/performance/soa_comparator.hpp"
4344
#include "traccc/performance/timer.hpp"
@@ -63,6 +64,7 @@ int seq_run(const traccc::opts::track_seeding& seeding_opts,
6364
const traccc::opts::magnetic_field& bfield_opts,
6465
const traccc::opts::performance& performance_opts,
6566
const traccc::opts::accelerator& accelerator_opts,
67+
const traccc::opts::truth_finding& truth_finding_opts,
6668
[[maybe_unused]] std::unique_ptr<const traccc::Logger> ilogger) {
6769
TRACCC_LOCAL_LOGGER(std::move(ilogger));
6870

@@ -80,7 +82,8 @@ int seq_run(const traccc::opts::track_seeding& seeding_opts,
8082
traccc::seeding_performance_writer::config{},
8183
logger().clone("SeedingPerformanceWriter"));
8284
traccc::finding_performance_writer find_performance_writer(
83-
traccc::finding_performance_writer::config{},
85+
traccc::finding_performance_writer::config{.truth_config =
86+
truth_finding_opts},
8487
logger().clone("FindingPerformanceWriter"));
8588
traccc::fitting_performance_writer fit_performance_writer(
8689
traccc::fitting_performance_writer::config{},
@@ -452,16 +455,18 @@ int main(int argc, char* argv[]) {
452455
traccc::opts::track_fitting fitting_opts;
453456
traccc::opts::performance performance_opts;
454457
traccc::opts::accelerator accelerator_opts;
458+
traccc::opts::truth_finding truth_finding_opts;
455459
traccc::opts::program_options program_opts{
456460
"Full Tracking Chain Using Alpaka (without clusterization)",
457461
{detector_opts, bfield_opts, input_opts, seeding_opts, finding_opts,
458-
propagation_opts, fitting_opts, performance_opts, accelerator_opts},
462+
propagation_opts, fitting_opts, performance_opts, accelerator_opts,
463+
truth_finding_opts},
459464
argc,
460465
argv,
461466
logger->cloneWithSuffix("Options")};
462467

463468
// Run the application.
464469
return seq_run(seeding_opts, finding_opts, propagation_opts, fitting_opts,
465470
input_opts, detector_opts, bfield_opts, performance_opts,
466-
accelerator_opts, logger->clone());
471+
accelerator_opts, truth_finding_opts, logger->clone());
467472
}

examples/run/cpu/seeding_example.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
#include "traccc/options/track_propagation.hpp"
4444
#include "traccc/options/track_resolution.hpp"
4545
#include "traccc/options/track_seeding.hpp"
46+
#include "traccc/options/truth_finding.hpp"
4647

4748
// VecMem include(s).
4849
#include <vecmem/memory/host_memory_resource.hpp>
@@ -64,6 +65,7 @@ int seq_run(const traccc::opts::track_seeding& seeding_opts,
6465
const traccc::opts::detector& detector_opts,
6566
const traccc::opts::magnetic_field& bfield_opts,
6667
const traccc::opts::performance& performance_opts,
68+
const traccc::opts::truth_finding& truth_finding_opts,
6769
std::unique_ptr<const traccc::Logger> ilogger) {
6870
TRACCC_LOCAL_LOGGER(std::move(ilogger));
6971

@@ -78,7 +80,8 @@ int seq_run(const traccc::opts::track_seeding& seeding_opts,
7880
traccc::seeding_performance_writer::config{},
7981
logger().clone("SeedingPerformanceWriter"));
8082
traccc::finding_performance_writer find_performance_writer(
81-
traccc::finding_performance_writer::config{},
83+
traccc::finding_performance_writer::config{.truth_config =
84+
truth_finding_opts},
8285
logger().clone("FindingPerformanceWriter"));
8386
traccc::finding_performance_writer::config ar_writer_cfg;
8487
ar_writer_cfg.file_path = "performance_track_ambiguity_resolution.root";
@@ -282,16 +285,19 @@ int main(int argc, char* argv[]) {
282285
traccc::opts::track_resolution resolution_opts;
283286
traccc::opts::track_fitting fitting_opts;
284287
traccc::opts::performance performance_opts;
288+
traccc::opts::truth_finding truth_finding_opts;
285289
traccc::opts::program_options program_opts{
286290
"Full Tracking Chain on the Host (without clusterization)",
287291
{detector_opts, bfield_opts, input_opts, seeding_opts, finding_opts,
288-
propagation_opts, resolution_opts, fitting_opts, performance_opts},
292+
propagation_opts, resolution_opts, fitting_opts, performance_opts,
293+
truth_finding_opts},
289294
argc,
290295
argv,
291296
logger->cloneWithSuffix("Options")};
292297

293298
// Run the application.
294299
return seq_run(seeding_opts, finding_opts, propagation_opts,
295300
resolution_opts, fitting_opts, input_opts, detector_opts,
296-
bfield_opts, performance_opts, logger->clone());
301+
bfield_opts, performance_opts, truth_finding_opts,
302+
logger->clone());
297303
}

examples/run/cpu/seq_example.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include "traccc/options/track_propagation.hpp"
4646
#include "traccc/options/track_resolution.hpp"
4747
#include "traccc/options/track_seeding.hpp"
48+
#include "traccc/options/truth_finding.hpp"
4849

4950
// examples
5051
#include "../common/make_magnetic_field.hpp"
@@ -72,6 +73,7 @@ int seq_run(const traccc::opts::input_data& input_opts,
7273
const traccc::opts::track_resolution& resolution_opts,
7374
const traccc::opts::track_fitting& fitting_opts,
7475
const traccc::opts::performance& performance_opts,
76+
const traccc::opts::truth_finding& truth_finding_opts,
7577
std::unique_ptr<const traccc::Logger> ilogger) {
7678
TRACCC_LOCAL_LOGGER(std::move(ilogger));
7779

@@ -156,7 +158,8 @@ int seq_run(const traccc::opts::input_data& input_opts,
156158
traccc::seeding_performance_writer::config{},
157159
logger().clone("SeedingPerformanceWriter"));
158160
traccc::finding_performance_writer find_performance_writer(
159-
traccc::finding_performance_writer::config{},
161+
traccc::finding_performance_writer::config{.truth_config =
162+
truth_finding_opts},
160163
logger().clone("FindingPerformanceWriter"));
161164
traccc::finding_performance_writer::config ar_writer_cfg;
162165
ar_writer_cfg.file_path = "performance_track_ambiguity_resolution.root";
@@ -386,11 +389,12 @@ int main(int argc, char* argv[]) {
386389
traccc::opts::track_resolution resolution_opts;
387390
traccc::opts::track_fitting fitting_opts;
388391
traccc::opts::performance performance_opts;
392+
traccc::opts::truth_finding truth_finding_opts;
389393
traccc::opts::program_options program_opts{
390394
"Full Tracking Chain on the Host",
391395
{detector_opts, bfield_opts, input_opts, output_opts,
392396
clusterization_opts, seeding_opts, finding_opts, resolution_opts,
393-
fitting_opts, propagation_opts, performance_opts},
397+
fitting_opts, propagation_opts, performance_opts, truth_finding_opts},
394398
argc,
395399
argv,
396400
logger->cloneWithSuffix("Options")};
@@ -399,5 +403,5 @@ int main(int argc, char* argv[]) {
399403
return seq_run(input_opts, output_opts, detector_opts, bfield_opts,
400404
clusterization_opts, seeding_opts, finding_opts,
401405
propagation_opts, resolution_opts, fitting_opts,
402-
performance_opts, logger->clone());
406+
performance_opts, truth_finding_opts, logger->clone());
403407
}

examples/run/cpu/truth_finding_example.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ int seq_run(const traccc::opts::track_finding& finding_opts,
6161

6262
// Performance writer
6363
traccc::finding_performance_writer find_performance_writer(
64-
traccc::finding_performance_writer::config{},
64+
traccc::finding_performance_writer::config{.truth_config =
65+
truth_finding_opts},
6566
logger().clone("FindingPerformanceWriter"));
6667
traccc::fitting_performance_writer fit_performance_writer(
6768
traccc::fitting_performance_writer::config{},
@@ -128,7 +129,7 @@ int seq_run(const traccc::opts::track_finding& finding_opts,
128129
traccc::edm::track_candidate_container<traccc::default_algebra>::host
129130
truth_track_candidates{host_mr};
130131
evt_data.generate_truth_candidates(truth_track_candidates, sg, host_mr,
131-
truth_finding_opts.m_min_pt);
132+
truth_finding_opts.m_pT_min);
132133

133134
// Prepare truth seeds
134135
traccc::bound_track_parameters_collection_types::host seeds(&host_mr);

examples/run/cuda/seeding_example_cuda.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "traccc/options/track_fitting.hpp"
3838
#include "traccc/options/track_propagation.hpp"
3939
#include "traccc/options/track_seeding.hpp"
40+
#include "traccc/options/truth_finding.hpp"
4041
#include "traccc/performance/collection_comparator.hpp"
4142
#include "traccc/performance/soa_comparator.hpp"
4243
#include "traccc/performance/timer.hpp"
@@ -69,6 +70,7 @@ int seq_run(const traccc::opts::track_seeding& seeding_opts,
6970
const traccc::opts::magnetic_field& bfield_opts,
7071
const traccc::opts::performance& performance_opts,
7172
const traccc::opts::accelerator& accelerator_opts,
73+
const traccc::opts::truth_finding& truth_finding_opts,
7274
std::unique_ptr<const traccc::Logger> ilogger) {
7375
TRACCC_LOCAL_LOGGER(std::move(ilogger));
7476

@@ -84,7 +86,8 @@ int seq_run(const traccc::opts::track_seeding& seeding_opts,
8486
traccc::seeding_performance_writer::config{},
8587
logger().clone("SeedingPerformanceWriter"));
8688
traccc::finding_performance_writer find_performance_writer(
87-
traccc::finding_performance_writer::config{},
89+
traccc::finding_performance_writer::config{.truth_config =
90+
truth_finding_opts},
8891
logger().clone("FindingPerformanceWriter"));
8992
traccc::fitting_performance_writer fit_performance_writer(
9093
traccc::fitting_performance_writer::config{},
@@ -474,16 +477,18 @@ int main(int argc, char* argv[]) {
474477
traccc::opts::track_fitting fitting_opts;
475478
traccc::opts::performance performance_opts;
476479
traccc::opts::accelerator accelerator_opts;
480+
traccc::opts::truth_finding truth_finding_opts;
477481
traccc::opts::program_options program_opts{
478482
"Full Tracking Chain Using CUDA (without clusterization)",
479483
{detector_opts, bfield_opts, input_opts, seeding_opts, finding_opts,
480-
propagation_opts, fitting_opts, performance_opts, accelerator_opts},
484+
propagation_opts, fitting_opts, performance_opts, accelerator_opts,
485+
truth_finding_opts},
481486
argc,
482487
argv,
483488
logger->cloneWithSuffix("Options")};
484489

485490
// Run the application.
486491
return seq_run(seeding_opts, finding_opts, propagation_opts, fitting_opts,
487492
input_opts, detector_opts, bfield_opts, performance_opts,
488-
accelerator_opts, logger->clone());
493+
accelerator_opts, truth_finding_opts, logger->clone());
489494
}

examples/run/cuda/truth_finding_example_cuda.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ int seq_run(const traccc::opts::track_finding& finding_opts,
7676

7777
// Performance writer
7878
traccc::finding_performance_writer find_performance_writer(
79-
traccc::finding_performance_writer::config{},
79+
traccc::finding_performance_writer::config{.truth_config =
80+
truth_finding_opts},
8081
logger().clone("FindingPerformanceWriter"));
8182
traccc::fitting_performance_writer fit_performance_writer(
8283
traccc::fitting_performance_writer::config{},
@@ -169,7 +170,7 @@ int seq_run(const traccc::opts::track_finding& finding_opts,
169170
traccc::edm::track_candidate_container<traccc::default_algebra>::host
170171
truth_track_candidates{host_mr};
171172
evt_data.generate_truth_candidates(truth_track_candidates, sg, host_mr,
172-
truth_finding_opts.m_min_pt);
173+
truth_finding_opts.m_pT_min);
173174

174175
// Prepare truth seeds
175176
traccc::bound_track_parameters_collection_types::host seeds(mr.host);

performance/include/traccc/efficiency/finding_performance_writer.hpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "traccc/resolution/stat_plot_tool_config.hpp"
1212
#include "traccc/utils/helpers.hpp"
1313
#include "traccc/utils/messaging.hpp"
14+
#include "traccc/utils/truth_matching_config.hpp"
1415

1516
// Project include(s).
1617
#include "traccc/edm/track_candidate_collection.hpp"
@@ -52,15 +53,9 @@ class finding_performance_writer : public messaging {
5253
{"Pt", plot_helpers::binning("p_{T} [GeV/c]", 40, 0.f, 100.f)},
5354
{"Num", plot_helpers::binning("N", 30, -0.5f, 29.5f)}};
5455

55-
/// Cut values
56-
scalar pT_cut = 0.5f * traccc::unit<scalar>::GeV;
57-
scalar z_min = -500.f * traccc::unit<scalar>::mm;
58-
scalar z_max = 500.f * traccc::unit<scalar>::mm;
59-
scalar r_max = 200.f * traccc::unit<scalar>::mm;
60-
scalar matching_ratio = 0.5f;
61-
bool double_matching = true;
56+
truth_matching_config truth_config;
6257

63-
stat_plot_tool_config stat_config;
58+
stat_plot_tool_config stat_config{};
6459
};
6560

6661
/// Construct from configuration and log level.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/** TRACCC library, part of the ACTS project (R&D line)
2+
*
3+
* (c) 2025 CERN for the benefit of the ACTS project
4+
*
5+
* Mozilla Public License Version 2.0
6+
*/
7+
8+
#pragma once
9+
10+
#include "traccc/definitions/common.hpp"
11+
12+
namespace traccc {
13+
14+
struct truth_matching_config {
15+
float pT_min = 0.5f * traccc::unit<float>::GeV;
16+
17+
float z_min = -500.f * traccc::unit<float>::mm;
18+
float z_max = 500.f * traccc::unit<float>::mm;
19+
20+
float r_max = 200.f * traccc::unit<float>::mm;
21+
22+
float matching_ratio = 0.5f;
23+
24+
unsigned int min_track_candidates = 3;
25+
26+
bool double_matching = true;
27+
};
28+
29+
} // namespace traccc

0 commit comments

Comments
 (0)