Skip to content

Commit f471b12

Browse files
committed
Add truth finding cuts and efficiency output
This commit updates the truth matching code to have additional cuts on r, z, and the number of measurements on the track. It also adds some printouts to the finding efficiency writer to give the overall efficiency, fake rate, etc. without the need to use ROOT.
1 parent bc2115f commit f471b12

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)