Skip to content

Commit 7847612

Browse files
authored
Merge pull request #483 from beomki-yeo/default-simulation
Add a General Simulator
2 parents e89017a + d2e95f3 commit 7847612

21 files changed

+333
-103
lines changed

README.md

+8-1
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ cmake --build <build_directory> <options>
277277

278278
### Running a partial chain with simplified simulation data
279279

280-
Users can generate muon-like particle simulation data by running following example commands:
280+
Users can generate muon-like particle simulation data with the pre-built detray geometries:
281281

282282
```sh
283283
# Generate telescope geometry data
@@ -292,6 +292,13 @@ Users can generate muon-like particle simulation data by running following examp
292292

293293
The simulation will also generate the detector json files (geometry, material and surface_grid) in the current directory. It is user's responsibility to move them to an appropriate place (e.g. `<detector_directory>`) and match them to the input file arguments of reconstruction chains.
294294

295+
If users have a geometry json file already, it is also possible to run simulation with `traccc_simulate` application
296+
297+
```sh
298+
# Given that users have a geometry json file
299+
<build_directory>/bin/traccc_simulate --output_directory=<output_directory> --detector_file=<geometry_file> --material_file=<material_file> --grid_file=<grid_file> --event=10 --constraint-step-size-mm=1
300+
```
301+
295302
There are three types of partial reconstruction chain users can operate: `seeding_example`, `truth_finding_example`, and `truth_fitting_example` where their algorithm coverages are shown in the table below. Each of them starts from truth measurements, truth seeds, and truth tracks, respectively.
296303

297304
| Category | Clusterization | Seeding | Track finding | Track fitting |

examples/options/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
traccc_add_library( traccc_options options TYPE SHARED
99
# header files
1010
"include/traccc/options/common_options.hpp"
11+
"include/traccc/options/detector_input_options.hpp"
1112
"include/traccc/options/handle_argument_errors.hpp"
1213
"include/traccc/options/mt_options.hpp"
1314
"include/traccc/options/options.hpp"
@@ -19,6 +20,7 @@ traccc_add_library( traccc_options options TYPE SHARED
1920
"include/traccc/options/throughput_options.hpp"
2021
# source files
2122
"src/options/common_options.cpp"
23+
"src/options/detector_input_options.cpp"
2224
"src/options/handle_argument_errors.cpp"
2325
"src/options/mt_options.cpp"
2426
"src/options/seeding_input_options.cpp"

examples/options/include/traccc/options/common_options.hpp

-3
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ struct common_options {
2222
int skip;
2323
unsigned short target_cells_per_partition;
2424
bool check_performance;
25-
std::string detector_file;
26-
std::string material_file;
27-
std::string grid_file;
2825

2926
common_options(po::options_description& desc);
3027
void read(const po::variables_map& vm);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/** TRACCC library, part of the ACTS project (R&D line)
2+
*
3+
* (c) 2023 CERN for the benefit of the ACTS project
4+
*
5+
* Mozilla Public License Version 2.0
6+
*/
7+
8+
// Boost
9+
#include <boost/program_options.hpp>
10+
11+
namespace traccc {
12+
13+
namespace po = boost::program_options;
14+
15+
struct detector_input_options {
16+
std::string detector_file;
17+
std::string material_file;
18+
std::string grid_file;
19+
20+
detector_input_options(po::options_description& desc);
21+
void read(const po::variables_map& vm);
22+
};
23+
24+
} // namespace traccc

examples/options/src/options/common_options.cpp

-13
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,6 @@ traccc::common_options::common_options(po::options_description& desc) {
2626
desc.add_options()("check_performance",
2727
po::value<bool>()->default_value(false),
2828
"generate performance result");
29-
desc.add_options()("detector_file", po::value<std::string>()->required(),
30-
"specify detector file");
31-
desc.add_options()("material_file", po::value<std::string>()->required(),
32-
"specify material file");
33-
desc.add_options()("grid_file", po::value<std::string>()->required(),
34-
"specify surface grid file");
3529
}
3630

3731
void traccc::common_options::read(const po::variables_map& vm) {
@@ -47,11 +41,4 @@ void traccc::common_options::read(const po::variables_map& vm) {
4741
target_cells_per_partition =
4842
vm["target_cells_per_partition"].as<unsigned short>();
4943
check_performance = vm["check_performance"].as<bool>();
50-
detector_file = vm["detector_file"].as<std::string>();
51-
if (vm.count("material_file")) {
52-
material_file = vm["material_file"].as<std::string>();
53-
}
54-
if (vm.count("grid_file")) {
55-
grid_file = vm["grid_file"].as<std::string>();
56-
}
5744
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/** TRACCC library, part of the ACTS project (R&D line)
2+
*
3+
* (c) 2023 CERN for the benefit of the ACTS project
4+
*
5+
* Mozilla Public License Version 2.0
6+
*/
7+
8+
// options
9+
#include "traccc/options/detector_input_options.hpp"
10+
11+
traccc::detector_input_options::detector_input_options(
12+
po::options_description& desc) {
13+
desc.add_options()("detector_file", po::value<std::string>()->required(),
14+
"specify detector file");
15+
desc.add_options()("material_file", po::value<std::string>(),
16+
"specify material file");
17+
desc.add_options()("grid_file", po::value<std::string>(),
18+
"specify surface grid file");
19+
}
20+
21+
void traccc::detector_input_options::read(const po::variables_map& vm) {
22+
23+
detector_file = vm["detector_file"].as<std::string>();
24+
if (vm.count("material_file")) {
25+
material_file = vm["material_file"].as<std::string>();
26+
}
27+
if (vm.count("grid_file")) {
28+
grid_file = vm["grid_file"].as<std::string>();
29+
}
30+
}

examples/run/alpaka/seeding_example_alpaka.cpp

+10-6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "traccc/io/read_geometry.hpp"
1313
#include "traccc/io/read_spacepoints.hpp"
1414
#include "traccc/options/common_options.hpp"
15+
#include "traccc/options/detector_input_options.hpp"
1516
#include "traccc/options/handle_argument_errors.hpp"
1617
#include "traccc/options/seeding_input_options.hpp"
1718
#include "traccc/performance/collection_comparator.hpp"
@@ -37,11 +38,11 @@
3738
namespace po = boost::program_options;
3839

3940
int seq_run(const traccc::seeding_input_config& /*i_cfg*/,
40-
const traccc::common_options& common_opts, bool run_cpu) {
41+
const traccc::common_options& common_opts,
42+
const traccc::detector_input_options& det_opts, bool run_cpu) {
4143

4244
// Read the surface transforms
43-
auto surface_transforms =
44-
traccc::io::read_geometry(common_opts.detector_file);
45+
auto surface_transforms = traccc::io::read_geometry(det_opts.detector_file);
4546

4647
// Output stats
4748
uint64_t n_modules = 0;
@@ -171,6 +172,7 @@ int main(int argc, char* argv[]) {
171172
// Add options
172173
desc.add_options()("help,h", "Give some help with the program's options");
173174
traccc::common_options common_opts(desc);
175+
traccc::detector_input_options det_opts(desc);
174176
traccc::seeding_input_config seeding_input_cfg(desc);
175177
desc.add_options()("run_cpu", po::value<bool>()->default_value(false),
176178
"run cpu tracking as well");
@@ -183,14 +185,16 @@ int main(int argc, char* argv[]) {
183185

184186
// Read options
185187
common_opts.read(vm);
188+
det_opts.read(vm);
189+
186190
seeding_input_cfg.read(vm);
187191
auto run_cpu = vm["run_cpu"].as<bool>();
188192

189-
std::cout << "Running " << argv[0] << " " << common_opts.detector_file
190-
<< " " << common_opts.input_directory << " " << common_opts.events
193+
std::cout << "Running " << argv[0] << " " << det_opts.detector_file << " "
194+
<< common_opts.input_directory << " " << common_opts.events
191195
<< std::endl;
192196

193-
int ret = seq_run(seeding_input_cfg, common_opts, run_cpu);
197+
int ret = seq_run(seeding_input_cfg, common_opts, det_opts, run_cpu);
194198

195199
return ret;
196200
}

examples/run/cpu/seeding_example.cpp

+11-8
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
// options
3030
#include "traccc/options/common_options.hpp"
31+
#include "traccc/options/detector_input_options.hpp"
3132
#include "traccc/options/finding_input_options.hpp"
3233
#include "traccc/options/handle_argument_errors.hpp"
3334
#include "traccc/options/propagation_options.hpp"
@@ -54,7 +55,8 @@ namespace po = boost::program_options;
5455
int seq_run(const traccc::seeding_input_config& /*i_cfg*/,
5556
const traccc::finding_input_config& finding_cfg,
5657
const traccc::propagation_options<traccc::scalar>& propagation_opts,
57-
const traccc::common_options& common_opts) {
58+
const traccc::common_options& common_opts,
59+
const traccc::detector_input_options& det_opts) {
5860

5961
/// Type declarations
6062
using host_detector_type = detray::detector<>;
@@ -97,10 +99,9 @@ int seq_run(const traccc::seeding_input_config& /*i_cfg*/,
9799

98100
// Read the detector
99101
detray::io::detector_reader_config reader_cfg{};
100-
reader_cfg
101-
.add_file(traccc::io::data_directory() + common_opts.detector_file)
102-
.add_file(traccc::io::data_directory() + common_opts.material_file)
103-
.add_file(traccc::io::data_directory() + common_opts.grid_file);
102+
reader_cfg.add_file(traccc::io::data_directory() + det_opts.detector_file)
103+
.add_file(traccc::io::data_directory() + det_opts.material_file)
104+
.add_file(traccc::io::data_directory() + det_opts.grid_file);
104105

105106
auto [host_det, names] =
106107
detray::io::read_detector<host_detector_type>(host_mr, reader_cfg);
@@ -247,6 +248,7 @@ int main(int argc, char* argv[]) {
247248
// Add options
248249
desc.add_options()("help,h", "Give some help with the program's options");
249250
traccc::common_options common_opts(desc);
251+
traccc::detector_input_options det_opts(desc);
250252
traccc::seeding_input_config seeding_input_cfg(desc);
251253
traccc::finding_input_config finding_input_cfg(desc);
252254
traccc::propagation_options<traccc::scalar> propagation_opts(desc);
@@ -259,14 +261,15 @@ int main(int argc, char* argv[]) {
259261

260262
// Read options
261263
common_opts.read(vm);
264+
det_opts.read(vm);
262265
seeding_input_cfg.read(vm);
263266
finding_input_cfg.read(vm);
264267
propagation_opts.read(vm);
265268

266-
std::cout << "Running " << argv[0] << " " << common_opts.detector_file
267-
<< " " << common_opts.input_directory << " " << common_opts.events
269+
std::cout << "Running " << argv[0] << " " << det_opts.detector_file << " "
270+
<< common_opts.input_directory << " " << common_opts.events
268271
<< std::endl;
269272

270273
return seq_run(seeding_input_cfg, finding_input_cfg, propagation_opts,
271-
common_opts);
274+
common_opts, det_opts);
272275
}

examples/run/cpu/seq_example.cpp

+12-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/** TRACCC library, part of the ACTS project (R&D line)
22
*
3-
* (c) 2021-2022 CERN for the benefit of the ACTS project
3+
* (c) 2021-2023 CERN for the benefit of the ACTS project
44
*
55
* Mozilla Public License Version 2.0
66
*/
@@ -21,6 +21,7 @@
2121

2222
// options
2323
#include "traccc/options/common_options.hpp"
24+
#include "traccc/options/detector_input_options.hpp"
2425
#include "traccc/options/full_tracking_input_options.hpp"
2526
#include "traccc/options/handle_argument_errors.hpp"
2627

@@ -34,11 +35,11 @@
3435
namespace po = boost::program_options;
3536

3637
int seq_run(const traccc::full_tracking_input_config& i_cfg,
37-
const traccc::common_options& common_opts) {
38+
const traccc::common_options& common_opts,
39+
const traccc::detector_input_options& det_opts) {
3840

3941
// Read the surface transforms
40-
auto surface_transforms =
41-
traccc::io::read_geometry(common_opts.detector_file);
42+
auto surface_transforms = traccc::io::read_geometry(det_opts.detector_file);
4243

4344
// Read the digitization configuration file
4445
auto digi_cfg =
@@ -124,11 +125,10 @@ int seq_run(const traccc::full_tracking_input_config& i_cfg,
124125
------------*/
125126

126127
if (common_opts.check_performance) {
127-
traccc::event_map evt_map(event, common_opts.detector_file,
128-
i_cfg.digitization_config_file,
129-
common_opts.input_directory,
130-
common_opts.input_directory,
131-
common_opts.input_directory, host_mr);
128+
traccc::event_map evt_map(
129+
event, det_opts.detector_file, i_cfg.digitization_config_file,
130+
common_opts.input_directory, common_opts.input_directory,
131+
common_opts.input_directory, host_mr);
132132

133133
sd_performance_writer.write(vecmem::get_data(seeds),
134134
vecmem::get_data(spacepoints_per_event),
@@ -161,6 +161,7 @@ int main(int argc, char* argv[]) {
161161
// Add options
162162
desc.add_options()("help,h", "Give some help with the program's options");
163163
traccc::common_options common_opts(desc);
164+
traccc::detector_input_options det_opts(desc);
164165
traccc::full_tracking_input_config full_tracking_input_cfg(desc);
165166

166167
po::variables_map vm;
@@ -171,12 +172,13 @@ int main(int argc, char* argv[]) {
171172

172173
// Read options
173174
common_opts.read(vm);
175+
det_opts.read(vm);
174176
full_tracking_input_cfg.read(vm);
175177

176178
std::cout << "Running " << argv[0] << " "
177179
<< full_tracking_input_cfg.detector_file << " "
178180
<< common_opts.input_directory << " " << common_opts.events
179181
<< std::endl;
180182

181-
return seq_run(full_tracking_input_cfg, common_opts);
183+
return seq_run(full_tracking_input_cfg, common_opts, det_opts);
182184
}

examples/run/cpu/truth_finding_example.cpp

+9-6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "traccc/io/read_measurements.hpp"
1717
#include "traccc/io/utils.hpp"
1818
#include "traccc/options/common_options.hpp"
19+
#include "traccc/options/detector_input_options.hpp"
1920
#include "traccc/options/finding_input_options.hpp"
2021
#include "traccc/options/handle_argument_errors.hpp"
2122
#include "traccc/options/propagation_options.hpp"
@@ -44,7 +45,8 @@ namespace po = boost::program_options;
4445

4546
int seq_run(const traccc::finding_input_config& i_cfg,
4647
const traccc::propagation_options<scalar>& propagation_opts,
47-
const traccc::common_options& common_opts) {
48+
const traccc::common_options& common_opts,
49+
const traccc::detector_input_options& det_opts) {
4850

4951
/// Type declarations
5052
using host_detector_type = detray::detector<detray::default_metadata,
@@ -79,10 +81,9 @@ int seq_run(const traccc::finding_input_config& i_cfg,
7981

8082
// Read the detector
8183
detray::io::detector_reader_config reader_cfg{};
82-
reader_cfg
83-
.add_file(traccc::io::data_directory() + common_opts.detector_file)
84-
.add_file(traccc::io::data_directory() + common_opts.material_file)
85-
.add_file(traccc::io::data_directory() + common_opts.grid_file);
84+
reader_cfg.add_file(traccc::io::data_directory() + det_opts.detector_file)
85+
.add_file(traccc::io::data_directory() + det_opts.material_file)
86+
.add_file(traccc::io::data_directory() + det_opts.grid_file);
8687

8788
const auto [host_det, names] =
8889
detray::io::read_detector<host_detector_type>(host_mr, reader_cfg);
@@ -198,6 +199,7 @@ int main(int argc, char* argv[]) {
198199
// Add options
199200
desc.add_options()("help,h", "Give some help with the program's options");
200201
traccc::common_options common_opts(desc);
202+
traccc::detector_input_options det_opts(desc);
201203
traccc::finding_input_config finding_input_cfg(desc);
202204
traccc::propagation_options<scalar> propagation_opts(desc);
203205

@@ -209,11 +211,12 @@ int main(int argc, char* argv[]) {
209211

210212
// Read options
211213
common_opts.read(vm);
214+
det_opts.read(vm);
212215
finding_input_cfg.read(vm);
213216
propagation_opts.read(vm);
214217

215218
std::cout << "Running " << argv[0] << " " << common_opts.input_directory
216219
<< " " << common_opts.events << std::endl;
217220

218-
return seq_run(finding_input_cfg, propagation_opts, common_opts);
221+
return seq_run(finding_input_cfg, propagation_opts, common_opts, det_opts);
219222
}

0 commit comments

Comments
 (0)