diff --git a/examples/options/CMakeLists.txt b/examples/options/CMakeLists.txt index a0d918c4f4..d3f3cadc3f 100644 --- a/examples/options/CMakeLists.txt +++ b/examples/options/CMakeLists.txt @@ -8,6 +8,7 @@ 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/handle_argument_errors.hpp" "include/traccc/options/mt_options.hpp" "include/traccc/options/options.hpp" @@ -19,6 +20,7 @@ traccc_add_library( traccc_options options TYPE SHARED "include/traccc/options/throughput_options.hpp" # source files "src/options/common_options.cpp" + "src/options/detector_input_options.cpp" "src/options/handle_argument_errors.cpp" "src/options/mt_options.cpp" "src/options/seeding_input_options.cpp" diff --git a/examples/options/include/traccc/options/common_options.hpp b/examples/options/include/traccc/options/common_options.hpp index 6d3427fa1a..08e4d5233a 100644 --- a/examples/options/include/traccc/options/common_options.hpp +++ b/examples/options/include/traccc/options/common_options.hpp @@ -22,9 +22,6 @@ struct common_options { int skip; unsigned short target_cells_per_partition; bool check_performance; - std::string detector_file; - std::string material_file; - std::string grid_file; common_options(po::options_description& desc); void read(const po::variables_map& vm); diff --git a/examples/options/include/traccc/options/detector_input_options.hpp b/examples/options/include/traccc/options/detector_input_options.hpp new file mode 100644 index 0000000000..37bc48aa93 --- /dev/null +++ b/examples/options/include/traccc/options/detector_input_options.hpp @@ -0,0 +1,24 @@ +/** TRACCC library, part of the ACTS project (R&D line) + * + * (c) 2023 CERN for the benefit of the ACTS project + * + * Mozilla Public License Version 2.0 + */ + +// Boost +#include + +namespace traccc { + +namespace po = boost::program_options; + +struct detector_input_options { + std::string detector_file; + std::string material_file; + std::string grid_file; + + detector_input_options(po::options_description& desc); + void read(const po::variables_map& vm); +}; + +} // namespace traccc \ No newline at end of file diff --git a/examples/options/src/options/common_options.cpp b/examples/options/src/options/common_options.cpp index b1c3808414..2206615082 100644 --- a/examples/options/src/options/common_options.cpp +++ b/examples/options/src/options/common_options.cpp @@ -26,12 +26,6 @@ traccc::common_options::common_options(po::options_description& desc) { desc.add_options()("check_performance", po::value()->default_value(false), "generate performance result"); - desc.add_options()("detector_file", po::value()->required(), - "specify detector file"); - desc.add_options()("material_file", po::value()->required(), - "specify material file"); - desc.add_options()("grid_file", po::value()->required(), - "specify surface grid file"); } void traccc::common_options::read(const po::variables_map& vm) { @@ -47,11 +41,4 @@ void traccc::common_options::read(const po::variables_map& vm) { target_cells_per_partition = vm["target_cells_per_partition"].as(); check_performance = vm["check_performance"].as(); - detector_file = vm["detector_file"].as(); - if (vm.count("material_file")) { - material_file = vm["material_file"].as(); - } - if (vm.count("grid_file")) { - grid_file = vm["grid_file"].as(); - } } \ No newline at end of file diff --git a/examples/options/src/options/detector_input_options.cpp b/examples/options/src/options/detector_input_options.cpp new file mode 100644 index 0000000000..75291c212e --- /dev/null +++ b/examples/options/src/options/detector_input_options.cpp @@ -0,0 +1,30 @@ +/** TRACCC library, part of the ACTS project (R&D line) + * + * (c) 2023 CERN for the benefit of the ACTS project + * + * Mozilla Public License Version 2.0 + */ + +// options +#include "traccc/options/detector_input_options.hpp" + +traccc::detector_input_options::detector_input_options( + po::options_description& desc) { + desc.add_options()("detector_file", po::value()->required(), + "specify detector file"); + desc.add_options()("material_file", po::value(), + "specify material file"); + desc.add_options()("grid_file", po::value(), + "specify surface grid file"); +} + +void traccc::detector_input_options::read(const po::variables_map& vm) { + + detector_file = vm["detector_file"].as(); + if (vm.count("material_file")) { + material_file = vm["material_file"].as(); + } + if (vm.count("grid_file")) { + grid_file = vm["grid_file"].as(); + } +} \ No newline at end of file diff --git a/examples/run/alpaka/seeding_example_alpaka.cpp b/examples/run/alpaka/seeding_example_alpaka.cpp index 859747e9f6..f4ac7c8e7e 100644 --- a/examples/run/alpaka/seeding_example_alpaka.cpp +++ b/examples/run/alpaka/seeding_example_alpaka.cpp @@ -37,11 +37,10 @@ namespace po = boost::program_options; int seq_run(const traccc::seeding_input_config& /*i_cfg*/, - const traccc::common_options& common_opts, bool run_cpu) { + const traccc::common_options& common_opts, det_opts, bool run_cpu) { // Read the surface transforms - auto surface_transforms = - traccc::io::read_geometry(common_opts.detector_file); + auto surface_transforms = traccc::io::read_geometry(det_opts.detector_file); // Output stats uint64_t n_modules = 0; @@ -171,6 +170,7 @@ int main(int argc, char* argv[]) { // Add options desc.add_options()("help,h", "Give some help with the program's options"); traccc::common_options common_opts(desc); + traccc::detector_input_options det_opts(desc); traccc::seeding_input_config seeding_input_cfg(desc); desc.add_options()("run_cpu", po::value()->default_value(false), "run cpu tracking as well"); @@ -183,14 +183,16 @@ int main(int argc, char* argv[]) { // Read options common_opts.read(vm); + det_opts.read(vm); + seeding_input_cfg.read(vm); auto run_cpu = vm["run_cpu"].as(); - std::cout << "Running " << argv[0] << " " << common_opts.detector_file - << " " << common_opts.input_directory << " " << common_opts.events + std::cout << "Running " << argv[0] << " " << det_opts.detector_file << " " + << common_opts.input_directory << " " << common_opts.events << std::endl; - int ret = seq_run(seeding_input_cfg, common_opts, run_cpu); + int ret = seq_run(seeding_input_cfg, common_opts, det_opts, run_cpu); return ret; } diff --git a/examples/run/cpu/seeding_example.cpp b/examples/run/cpu/seeding_example.cpp index 28bdddc7d3..8184895d2d 100644 --- a/examples/run/cpu/seeding_example.cpp +++ b/examples/run/cpu/seeding_example.cpp @@ -28,6 +28,7 @@ // options #include "traccc/options/common_options.hpp" +#include "traccc/options/detector_input_options.hpp" #include "traccc/options/finding_input_options.hpp" #include "traccc/options/handle_argument_errors.hpp" #include "traccc/options/propagation_options.hpp" @@ -54,7 +55,8 @@ namespace po = boost::program_options; int seq_run(const traccc::seeding_input_config& /*i_cfg*/, const traccc::finding_input_config& finding_cfg, const traccc::propagation_options& propagation_opts, - const traccc::common_options& common_opts) { + const traccc::common_options& common_opts, + const traccc::detector_input_options& det_opts) { /// Type declarations using host_detector_type = detray::detector<>; @@ -97,10 +99,9 @@ int seq_run(const traccc::seeding_input_config& /*i_cfg*/, // Read the detector detray::io::detector_reader_config reader_cfg{}; - reader_cfg - .add_file(traccc::io::data_directory() + common_opts.detector_file) - .add_file(traccc::io::data_directory() + common_opts.material_file) - .add_file(traccc::io::data_directory() + common_opts.grid_file); + reader_cfg.add_file(traccc::io::data_directory() + det_opts.detector_file) + .add_file(traccc::io::data_directory() + det_opts.material_file) + .add_file(traccc::io::data_directory() + det_opts.grid_file); auto [host_det, names] = detray::io::read_detector(host_mr, reader_cfg); @@ -247,6 +248,7 @@ int main(int argc, char* argv[]) { // Add options desc.add_options()("help,h", "Give some help with the program's options"); traccc::common_options common_opts(desc); + traccc::detector_input_options det_opts(desc); traccc::seeding_input_config seeding_input_cfg(desc); traccc::finding_input_config finding_input_cfg(desc); traccc::propagation_options propagation_opts(desc); @@ -259,14 +261,15 @@ int main(int argc, char* argv[]) { // Read options common_opts.read(vm); + det_opts.read(vm); seeding_input_cfg.read(vm); finding_input_cfg.read(vm); propagation_opts.read(vm); - std::cout << "Running " << argv[0] << " " << common_opts.detector_file - << " " << common_opts.input_directory << " " << common_opts.events + std::cout << "Running " << argv[0] << " " << det_opts.detector_file << " " + << common_opts.input_directory << " " << common_opts.events << std::endl; return seq_run(seeding_input_cfg, finding_input_cfg, propagation_opts, - common_opts); + common_opts, det_opts); } \ No newline at end of file diff --git a/examples/run/cpu/seq_example.cpp b/examples/run/cpu/seq_example.cpp index bce94da697..709c9453e4 100644 --- a/examples/run/cpu/seq_example.cpp +++ b/examples/run/cpu/seq_example.cpp @@ -1,6 +1,6 @@ /** TRACCC library, part of the ACTS project (R&D line) * - * (c) 2021-2022 CERN for the benefit of the ACTS project + * (c) 2021-2023 CERN for the benefit of the ACTS project * * Mozilla Public License Version 2.0 */ @@ -21,6 +21,7 @@ // options #include "traccc/options/common_options.hpp" +#include "traccc/options/detector_input_options.hpp" #include "traccc/options/full_tracking_input_options.hpp" #include "traccc/options/handle_argument_errors.hpp" @@ -34,11 +35,11 @@ namespace po = boost::program_options; int seq_run(const traccc::full_tracking_input_config& i_cfg, - const traccc::common_options& common_opts) { + const traccc::common_options& common_opts, + const traccc::detector_input_options& det_opts) { // Read the surface transforms - auto surface_transforms = - traccc::io::read_geometry(common_opts.detector_file); + auto surface_transforms = traccc::io::read_geometry(det_opts.detector_file); // Read the digitization configuration file auto digi_cfg = @@ -124,11 +125,10 @@ int seq_run(const traccc::full_tracking_input_config& i_cfg, ------------*/ if (common_opts.check_performance) { - traccc::event_map evt_map(event, common_opts.detector_file, - i_cfg.digitization_config_file, - common_opts.input_directory, - common_opts.input_directory, - common_opts.input_directory, host_mr); + traccc::event_map evt_map( + event, det_opts.detector_file, i_cfg.digitization_config_file, + common_opts.input_directory, common_opts.input_directory, + common_opts.input_directory, host_mr); sd_performance_writer.write(vecmem::get_data(seeds), vecmem::get_data(spacepoints_per_event), @@ -161,6 +161,7 @@ int main(int argc, char* argv[]) { // Add options desc.add_options()("help,h", "Give some help with the program's options"); traccc::common_options common_opts(desc); + traccc::detector_input_options det_opts(desc); traccc::full_tracking_input_config full_tracking_input_cfg(desc); po::variables_map vm; @@ -171,6 +172,7 @@ int main(int argc, char* argv[]) { // Read options common_opts.read(vm); + det_opts.read(vm); full_tracking_input_cfg.read(vm); std::cout << "Running " << argv[0] << " " @@ -178,5 +180,5 @@ int main(int argc, char* argv[]) { << common_opts.input_directory << " " << common_opts.events << std::endl; - return seq_run(full_tracking_input_cfg, common_opts); + return seq_run(full_tracking_input_cfg, common_opts, det_opts); } diff --git a/examples/run/cpu/truth_finding_example.cpp b/examples/run/cpu/truth_finding_example.cpp index eb72f746ab..ec66036a8d 100644 --- a/examples/run/cpu/truth_finding_example.cpp +++ b/examples/run/cpu/truth_finding_example.cpp @@ -16,6 +16,7 @@ #include "traccc/io/read_measurements.hpp" #include "traccc/io/utils.hpp" #include "traccc/options/common_options.hpp" +#include "traccc/options/detector_input_options.hpp" #include "traccc/options/finding_input_options.hpp" #include "traccc/options/handle_argument_errors.hpp" #include "traccc/options/propagation_options.hpp" @@ -44,7 +45,8 @@ namespace po = boost::program_options; int seq_run(const traccc::finding_input_config& i_cfg, const traccc::propagation_options& propagation_opts, - const traccc::common_options& common_opts) { + const traccc::common_options& common_opts, + const traccc::detector_input_options& det_opts) { /// Type declarations using host_detector_type = detray::detector(host_mr, reader_cfg); @@ -198,6 +199,7 @@ int main(int argc, char* argv[]) { // Add options desc.add_options()("help,h", "Give some help with the program's options"); traccc::common_options common_opts(desc); + traccc::detector_input_options det_opts(desc); traccc::finding_input_config finding_input_cfg(desc); traccc::propagation_options propagation_opts(desc); @@ -209,11 +211,12 @@ int main(int argc, char* argv[]) { // Read options common_opts.read(vm); + det_opts.read(vm); finding_input_cfg.read(vm); propagation_opts.read(vm); std::cout << "Running " << argv[0] << " " << common_opts.input_directory << " " << common_opts.events << std::endl; - return seq_run(finding_input_cfg, propagation_opts, common_opts); + return seq_run(finding_input_cfg, propagation_opts, common_opts, det_opts); } diff --git a/examples/run/cpu/truth_fitting_example.cpp b/examples/run/cpu/truth_fitting_example.cpp index 0bfe028fdc..d54afc3201 100644 --- a/examples/run/cpu/truth_fitting_example.cpp +++ b/examples/run/cpu/truth_fitting_example.cpp @@ -14,6 +14,7 @@ #include "traccc/io/read_measurements.hpp" #include "traccc/io/utils.hpp" #include "traccc/options/common_options.hpp" +#include "traccc/options/detector_input_options.hpp" #include "traccc/options/handle_argument_errors.hpp" #include "traccc/options/propagation_options.hpp" #include "traccc/resolution/fitting_performance_writer.hpp" @@ -48,6 +49,7 @@ int main(int argc, char* argv[]) { // Add options desc.add_options()("help,h", "Give some help with the program's options"); traccc::common_options common_opts(desc); + traccc::detector_input_options det_opts(desc); traccc::propagation_options propagation_opts(desc); po::variables_map vm; @@ -58,6 +60,8 @@ int main(int argc, char* argv[]) { // Read options common_opts.read(vm); + det_opts.read(vm); + propagation_opts.read(vm); std::cout << "Running " << argv[0] << " " << common_opts.input_directory @@ -94,10 +98,9 @@ int main(int argc, char* argv[]) { // Read the detector detray::io::detector_reader_config reader_cfg{}; - reader_cfg - .add_file(traccc::io::data_directory() + common_opts.detector_file) - .add_file(traccc::io::data_directory() + common_opts.material_file) - .add_file(traccc::io::data_directory() + common_opts.grid_file); + reader_cfg.add_file(traccc::io::data_directory() + det_opts.detector_file) + .add_file(traccc::io::data_directory() + det_opts.material_file) + .add_file(traccc::io::data_directory() + det_opts.grid_file); const auto [host_det, names] = detray::io::read_detector(host_mr, reader_cfg); diff --git a/examples/run/cuda/seeding_example_cuda.cpp b/examples/run/cuda/seeding_example_cuda.cpp index dd77fc12ca..ad9fa39154 100644 --- a/examples/run/cuda/seeding_example_cuda.cpp +++ b/examples/run/cuda/seeding_example_cuda.cpp @@ -24,6 +24,7 @@ #include "traccc/io/read_spacepoints.hpp" #include "traccc/io/utils.hpp" #include "traccc/options/common_options.hpp" +#include "traccc/options/detector_input_options.hpp" #include "traccc/options/finding_input_options.hpp" #include "traccc/options/handle_argument_errors.hpp" #include "traccc/options/propagation_options.hpp" @@ -62,7 +63,8 @@ namespace po = boost::program_options; int seq_run(const traccc::seeding_input_config& /*i_cfg*/, const traccc::finding_input_config& finding_cfg, const traccc::propagation_options& propagation_opts, - const traccc::common_options& common_opts, bool run_cpu) { + const traccc::common_options& common_opts, + const traccc::detector_input_options& det_opts, bool run_cpu) { /// Type declarations using host_detector_type = detray::detector<>; @@ -128,10 +130,9 @@ int seq_run(const traccc::seeding_input_config& /*i_cfg*/, // Read the detector detray::io::detector_reader_config reader_cfg{}; - reader_cfg - .add_file(traccc::io::data_directory() + common_opts.detector_file) - .add_file(traccc::io::data_directory() + common_opts.material_file) - .add_file(traccc::io::data_directory() + common_opts.grid_file); + reader_cfg.add_file(traccc::io::data_directory() + det_opts.detector_file) + .add_file(traccc::io::data_directory() + det_opts.material_file) + .add_file(traccc::io::data_directory() + det_opts.grid_file); auto [host_det, names] = detray::io::read_detector(mng_mr, reader_cfg); @@ -481,6 +482,7 @@ int main(int argc, char* argv[]) { // Add options desc.add_options()("help,h", "Give some help with the program's options"); traccc::common_options common_opts(desc); + traccc::detector_input_options det_opts(desc); traccc::seeding_input_config seeding_input_cfg(desc); traccc::finding_input_config finding_input_cfg(desc); traccc::propagation_options propagation_opts(desc); @@ -495,15 +497,16 @@ int main(int argc, char* argv[]) { // Read options common_opts.read(vm); + det_opts.read(vm); seeding_input_cfg.read(vm); finding_input_cfg.read(vm); propagation_opts.read(vm); auto run_cpu = vm["run_cpu"].as(); - std::cout << "Running " << argv[0] << " " << common_opts.detector_file - << " " << common_opts.input_directory << " " << common_opts.events + std::cout << "Running " << argv[0] << " " << det_opts.detector_file << " " + << common_opts.input_directory << " " << common_opts.events << std::endl; return seq_run(seeding_input_cfg, finding_input_cfg, propagation_opts, - common_opts, run_cpu); + common_opts, det_opts, run_cpu); } diff --git a/examples/run/cuda/seq_example_cuda.cpp b/examples/run/cuda/seq_example_cuda.cpp index ce0af207e4..539b4fbd73 100644 --- a/examples/run/cuda/seq_example_cuda.cpp +++ b/examples/run/cuda/seq_example_cuda.cpp @@ -17,6 +17,7 @@ #include "traccc/io/read_digitization_config.hpp" #include "traccc/io/read_geometry.hpp" #include "traccc/options/common_options.hpp" +#include "traccc/options/detector_input_options.hpp" #include "traccc/options/full_tracking_input_options.hpp" #include "traccc/options/handle_argument_errors.hpp" #include "traccc/performance/collection_comparator.hpp" @@ -39,11 +40,11 @@ namespace po = boost::program_options; int seq_run(const traccc::full_tracking_input_config& i_cfg, - const traccc::common_options& common_opts, bool run_cpu) { + const traccc::common_options& common_opts, + const traccc::detector_input_options& det_opts, bool run_cpu) { // Read the surface transforms - auto surface_transforms = - traccc::io::read_geometry(common_opts.detector_file); + auto surface_transforms = traccc::io::read_geometry(det_opts.detector_file); // Read the digitization configuration file auto digi_cfg = @@ -266,11 +267,10 @@ int seq_run(const traccc::full_tracking_input_config& i_cfg, if (common_opts.check_performance) { - traccc::event_map evt_map(event, common_opts.detector_file, - i_cfg.digitization_config_file, - common_opts.input_directory, - common_opts.input_directory, - common_opts.input_directory, host_mr); + traccc::event_map evt_map( + event, det_opts.detector_file, i_cfg.digitization_config_file, + common_opts.input_directory, common_opts.input_directory, + common_opts.input_directory, host_mr); sd_performance_writer.write( vecmem::get_data(seeds_cuda), vecmem::get_data(spacepoints_per_event_cuda), evt_map); @@ -307,6 +307,7 @@ int main(int argc, char* argv[]) { // Add options desc.add_options()("help,h", "Give some help with the program's options"); traccc::common_options common_opts(desc); + traccc::detector_input_options det_opts(desc); traccc::full_tracking_input_config full_tracking_input_cfg(desc); desc.add_options()("run_cpu", po::value()->default_value(false), "run cpu tracking as well"); @@ -319,6 +320,7 @@ int main(int argc, char* argv[]) { // Read options common_opts.read(vm); + det_opts.read(vm); full_tracking_input_cfg.read(vm); auto run_cpu = vm["run_cpu"].as(); @@ -327,5 +329,5 @@ int main(int argc, char* argv[]) { << common_opts.input_directory << " " << common_opts.events << std::endl; - return seq_run(full_tracking_input_cfg, common_opts, run_cpu); + return seq_run(full_tracking_input_cfg, common_opts, det_opts, run_cpu); } diff --git a/examples/run/cuda/truth_finding_example_cuda.cpp b/examples/run/cuda/truth_finding_example_cuda.cpp index 06b09b460b..d93969314f 100644 --- a/examples/run/cuda/truth_finding_example_cuda.cpp +++ b/examples/run/cuda/truth_finding_example_cuda.cpp @@ -21,6 +21,7 @@ #include "traccc/io/read_measurements.hpp" #include "traccc/io/utils.hpp" #include "traccc/options/common_options.hpp" +#include "traccc/options/detector_input_options.hpp" #include "traccc/options/finding_input_options.hpp" #include "traccc/options/handle_argument_errors.hpp" #include "traccc/options/propagation_options.hpp" @@ -56,7 +57,8 @@ namespace po = boost::program_options; int seq_run(const traccc::finding_input_config& i_cfg, const traccc::propagation_options& propagation_opts, - const traccc::common_options& common_opts, bool run_cpu) { + const traccc::common_options& common_opts, + const traccc::detector_input_options& det_opts, bool run_cpu) { /// Type declarations using host_detector_type = detray::detector(mng_mr, reader_cfg); @@ -356,6 +357,7 @@ int main(int argc, char* argv[]) { // Add options desc.add_options()("help,h", "Give some help with the program's options"); traccc::common_options common_opts(desc); + traccc::detector_input_options det_opts(desc); traccc::finding_input_config finding_input_cfg(desc); traccc::propagation_options propagation_opts(desc); desc.add_options()("run_cpu", po::value()->default_value(false), @@ -369,6 +371,8 @@ int main(int argc, char* argv[]) { // Read options common_opts.read(vm); + det_opts.read(vm); + finding_input_cfg.read(vm); propagation_opts.read(vm); auto run_cpu = vm["run_cpu"].as(); @@ -376,5 +380,6 @@ int main(int argc, char* argv[]) { std::cout << "Running " << argv[0] << " " << common_opts.input_directory << " " << common_opts.events << std::endl; - return seq_run(finding_input_cfg, propagation_opts, common_opts, run_cpu); + return seq_run(finding_input_cfg, propagation_opts, common_opts, det_opts, + run_cpu); } diff --git a/examples/run/cuda/truth_fitting_example_cuda.cpp b/examples/run/cuda/truth_fitting_example_cuda.cpp index 51127409a2..a7602e22ea 100644 --- a/examples/run/cuda/truth_fitting_example_cuda.cpp +++ b/examples/run/cuda/truth_fitting_example_cuda.cpp @@ -18,6 +18,7 @@ #include "traccc/io/read_measurements.hpp" #include "traccc/io/utils.hpp" #include "traccc/options/common_options.hpp" +#include "traccc/options/detector_input_options.hpp" #include "traccc/options/handle_argument_errors.hpp" #include "traccc/options/propagation_options.hpp" #include "traccc/performance/collection_comparator.hpp" @@ -59,6 +60,7 @@ int main(int argc, char* argv[]) { // Add options desc.add_options()("help,h", "Give some help with the program's options"); traccc::common_options common_opts(desc); + traccc::detector_input_options det_opts(desc); traccc::propagation_options propagation_opts(desc); desc.add_options()("run_cpu", po::value()->default_value(false), "run cpu tracking as well"); @@ -71,6 +73,8 @@ int main(int argc, char* argv[]) { // Read options common_opts.read(vm); + det_opts.read(vm); + propagation_opts.read(vm); auto run_cpu = vm["run_cpu"].as(); @@ -121,10 +125,9 @@ int main(int argc, char* argv[]) { // Read the detector detray::io::detector_reader_config reader_cfg{}; - reader_cfg - .add_file(traccc::io::data_directory() + common_opts.detector_file) - .add_file(traccc::io::data_directory() + common_opts.material_file) - .add_file(traccc::io::data_directory() + common_opts.grid_file); + reader_cfg.add_file(traccc::io::data_directory() + det_opts.detector_file) + .add_file(traccc::io::data_directory() + det_opts.material_file) + .add_file(traccc::io::data_directory() + det_opts.grid_file); auto [host_det, names] = detray::io::read_detector(mng_mr, reader_cfg); diff --git a/examples/run/kokkos/seeding_example_kokkos.cpp b/examples/run/kokkos/seeding_example_kokkos.cpp index b8eb372c07..b4dd08a71f 100644 --- a/examples/run/kokkos/seeding_example_kokkos.cpp +++ b/examples/run/kokkos/seeding_example_kokkos.cpp @@ -33,11 +33,10 @@ namespace po = boost::program_options; int seq_run(const traccc::seeding_input_config& /*i_cfg*/, - const traccc::common_options& common_opts, bool run_cpu) { + const traccc::common_options& common_opts, det_opts, bool run_cpu) { // Read the surface transforms - auto surface_transforms = - traccc::io::read_geometry(common_opts.detector_file); + auto surface_transforms = traccc::io::read_geometry(det_opts.detector_file); // Output stats uint64_t n_modules = 0; @@ -154,6 +153,7 @@ int main(int argc, char* argv[]) { // Add options desc.add_options()("help,h", "Give some help with the program's options"); traccc::common_options common_opts(desc); + traccc::detector_input_options det_opts(desc); traccc::seeding_input_config seeding_input_cfg(desc); desc.add_options()("run_cpu", po::value()->default_value(false), "run cpu tracking as well"); @@ -166,14 +166,16 @@ int main(int argc, char* argv[]) { // Read options common_opts.read(vm); + det_opts.read(vm); + seeding_input_cfg.read(vm); auto run_cpu = vm["run_cpu"].as(); - std::cout << "Running " << argv[0] << " " << common_opts.detector_file - << " " << common_opts.input_directory << " " << common_opts.events + std::cout << "Running " << argv[0] << " " << det_opts.detector_file << " " + << common_opts.input_directory << " " << common_opts.events << std::endl; - int ret = seq_run(seeding_input_cfg, common_opts, run_cpu); + int ret = seq_run(seeding_input_cfg, common_opts, det_opts, run_cpu); // Finalise Kokkos. Kokkos::finalize(); diff --git a/examples/run/sycl/seeding_example_sycl.sycl b/examples/run/sycl/seeding_example_sycl.sycl index 4a6c31477d..e4c35f6912 100644 --- a/examples/run/sycl/seeding_example_sycl.sycl +++ b/examples/run/sycl/seeding_example_sycl.sycl @@ -26,6 +26,7 @@ // options #include "traccc/options/common_options.hpp" +#include "traccc/options/detector_input_options.hpp" #include "traccc/options/handle_argument_errors.hpp" #include "traccc/options/seeding_input_options.hpp" @@ -51,7 +52,8 @@ namespace po = boost::program_options; int seq_run(const traccc::seeding_input_config& /*i_cfg*/, - const traccc::common_options& common_opts, bool run_cpu) { + const traccc::common_options& common_opts, + const traccc::detector_input_options& det_opts, bool run_cpu) { // Creating sycl queue object ::sycl::queue q; @@ -83,10 +85,9 @@ int seq_run(const traccc::seeding_input_config& /*i_cfg*/, // Read the detector detray::io::detector_reader_config reader_cfg{}; - reader_cfg - .add_file(traccc::io::data_directory() + common_opts.detector_file) - .add_file(traccc::io::data_directory() + common_opts.material_file) - .add_file(traccc::io::data_directory() + common_opts.grid_file); + reader_cfg.add_file(traccc::io::data_directory() + det_opts.detector_file) + .add_file(traccc::io::data_directory() + det_opts.material_file) + .add_file(traccc::io::data_directory() + det_opts.grid_file); auto [host_det, names] = detray::io::read_detector(host_mr, reader_cfg); @@ -274,6 +275,7 @@ int main(int argc, char* argv[]) { // Add options desc.add_options()("help,h", "Give some help with the program's options"); traccc::common_options common_opts(desc); + traccc::detector_input_options det_opts(desc); traccc::seeding_input_config seeding_input_cfg(desc); desc.add_options()("run_cpu", po::value()->default_value(false), "run cpu tracking as well"); @@ -286,12 +288,14 @@ int main(int argc, char* argv[]) { // Read options common_opts.read(vm); + det_opts.read(vm); + seeding_input_cfg.read(vm); auto run_cpu = vm["run_cpu"].as(); - std::cout << "Running " << argv[0] << " " << common_opts.detector_file - << " " << common_opts.input_directory << " " << common_opts.events + std::cout << "Running " << argv[0] << " " << det_opts.detector_file << " " + << common_opts.input_directory << " " << common_opts.events << std::endl; - return seq_run(seeding_input_cfg, common_opts, run_cpu); + return seq_run(seeding_input_cfg, common_opts, det_opts, run_cpu); } diff --git a/examples/run/sycl/seq_example_sycl.sycl b/examples/run/sycl/seq_example_sycl.sycl index 6642748275..c6875d323e 100644 --- a/examples/run/sycl/seq_example_sycl.sycl +++ b/examples/run/sycl/seq_example_sycl.sycl @@ -30,6 +30,7 @@ // options #include "traccc/options/common_options.hpp" +#include "traccc/options/detector_input_options.hpp" #include "traccc/options/full_tracking_input_options.hpp" #include "traccc/options/handle_argument_errors.hpp" @@ -63,11 +64,11 @@ auto handle_async_error = [](::sycl::exception_list elist) { }; int seq_run(const traccc::full_tracking_input_config& i_cfg, - const traccc::common_options& common_opts, bool run_cpu) { + const traccc::common_options& common_opts, + const traccc::detector_input_options& det_opts, bool run_cpu) { // Read the surface transforms - auto surface_transforms = - traccc::io::read_geometry(common_opts.detector_file); + auto surface_transforms = traccc::io::read_geometry(det_opts.detector_file); // Read the digitization configuration file auto digi_cfg = @@ -292,11 +293,10 @@ int seq_run(const traccc::full_tracking_input_config& i_cfg, if (common_opts.check_performance) { - traccc::event_map evt_map(event, common_opts.detector_file, - i_cfg.digitization_config_file, - common_opts.input_directory, - common_opts.input_directory, - common_opts.input_directory, host_mr); + traccc::event_map evt_map( + event, det_opts.detector_file, i_cfg.digitization_config_file, + common_opts.input_directory, common_opts.input_directory, + common_opts.input_directory, host_mr); sd_performance_writer.write( vecmem::get_data(seeds_sycl), vecmem::get_data(spacepoints_per_event_sycl), evt_map); @@ -333,6 +333,7 @@ int main(int argc, char* argv[]) { // Add options desc.add_options()("help,h", "Give some help with the program's options"); traccc::common_options common_opts(desc); + traccc::detector_input_options det_opts(desc); traccc::full_tracking_input_config full_tracking_input_cfg(desc); desc.add_options()("run_cpu", po::value()->default_value(false), "run cpu tracking as well"); @@ -345,6 +346,7 @@ int main(int argc, char* argv[]) { // Read options common_opts.read(vm); + det_opts.read(vm); full_tracking_input_cfg.read(vm); auto run_cpu = vm["run_cpu"].as(); @@ -353,5 +355,5 @@ int main(int argc, char* argv[]) { << common_opts.input_directory << " " << common_opts.events << std::endl; - return seq_run(full_tracking_input_cfg, common_opts, run_cpu); + return seq_run(full_tracking_input_cfg, common_opts, det_opts, run_cpu); } \ No newline at end of file diff --git a/examples/simulation/CMakeLists.txt b/examples/simulation/CMakeLists.txt index 76854c82fc..b75adab7a5 100644 --- a/examples/simulation/CMakeLists.txt +++ b/examples/simulation/CMakeLists.txt @@ -4,6 +4,13 @@ # # Mozilla Public License Version 2.0 +# Simulation with the default metadata and json inputs +traccc_add_executable(simulate "simulate.cpp" + LINK_LIBRARIES vecmem::core traccc::io traccc::core + traccc::options traccc::simulation detray::core detray::utils covfie::core + Boost::filesystem) + +# Simulation with the detectors pre-built in detray traccc_add_executable(simulate_telescope "simulate_telescope.cpp" LINK_LIBRARIES vecmem::core traccc::io traccc::core traccc::options traccc::simulation detray::core detray::utils covfie::core diff --git a/examples/simulation/simulate.cpp b/examples/simulation/simulate.cpp new file mode 100644 index 0000000000..63447c934b --- /dev/null +++ b/examples/simulation/simulate.cpp @@ -0,0 +1,138 @@ +/** TRACCC library, part of the ACTS project (R&D line) + * + * (c) 2023 CERN for the benefit of the ACTS project + * + * Mozilla Public License Version 2.0 + */ + +// Project include(s). +#include "traccc/definitions/primitives.hpp" +#include "traccc/edm/track_parameters.hpp" +#include "traccc/io/utils.hpp" +#include "traccc/options/common_options.hpp" +#include "traccc/options/detector_input_options.hpp" +#include "traccc/options/handle_argument_errors.hpp" +#include "traccc/options/options.hpp" +#include "traccc/options/particle_gen_options.hpp" +#include "traccc/options/propagation_options.hpp" +#include "traccc/simulation/measurement_smearer.hpp" +#include "traccc/simulation/simulator.hpp" +#include "traccc/simulation/smearing_writer.hpp" + +// Detray include(s). +#include "detray/core/detector.hpp" +#include "detray/core/detector_metadata.hpp" +#include "detray/detectors/bfield.hpp" +#include "detray/io/common/detector_reader.hpp" +#include "detray/propagator/navigator.hpp" +#include "detray/propagator/propagator.hpp" +#include "detray/propagator/rk_stepper.hpp" +#include "detray/simulation/event_generator/track_generators.hpp" + +// VecMem include(s). +#include + +// Boost include(s). +#include + +using namespace traccc; +namespace po = boost::program_options; + +// 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()("output_directory", po::value()->required(), + "specify the directory of output data"); + desc.add_options()("events", po::value()->required(), + "number of events"); + traccc::detector_input_options det_opts(desc); + traccc::particle_gen_options pg_opts(desc); + traccc::propagation_options propagation_opts(desc); + + po::variables_map vm; + po::store(po::parse_command_line(argc, argv, desc), vm); + + // Check errors + traccc::handle_argument_errors(vm, desc); + + /// Type declarations + using host_detector_type = detray::detector<>; + using uniform_gen_t = + detray::random_numbers, + std::seed_seq>; + using generator_type = + detray::random_track_generator; + + // Read options + auto output_directory = vm["output_directory"].as(); + auto events = vm["events"].as(); + det_opts.read(vm); + pg_opts.read(vm); + propagation_opts.read(vm); + + // B field value and its type + // @TODO: Set B field as argument + using b_field_t = covfie::field; + const traccc::vector3 B{0, 0, 2 * detray::unit::T}; + auto field = detray::bfield::create_const_field(B); + + // Read the detector + detray::io::detector_reader_config reader_cfg{}; + reader_cfg.add_file(traccc::io::data_directory() + det_opts.detector_file) + .add_file(traccc::io::data_directory() + det_opts.material_file) + .add_file(traccc::io::data_directory() + det_opts.grid_file); + + // Memory resource used by the EDM. + vecmem::host_memory_resource host_mr; + + auto [host_det, names] = + detray::io::read_detector(host_mr, reader_cfg); + + /*************************** + * Generate simulation data + ***************************/ + + // Origin of particles + generator_type::configuration gen_cfg{}; + gen_cfg.n_tracks(pg_opts.gen_nparticles); + gen_cfg.origin(pg_opts.vertex); + gen_cfg.origin_stddev(pg_opts.vertex_stddev); + gen_cfg.phi_range(pg_opts.phi_range[0], pg_opts.phi_range[1]); + gen_cfg.theta_range(pg_opts.theta_range[0], pg_opts.theta_range[1]); + gen_cfg.mom_range(pg_opts.mom_range[0], pg_opts.mom_range[1]); + generator_type generator(gen_cfg); + + // Smearing value for measurements + traccc::measurement_smearer meas_smearer( + 50 * detray::unit::um, 50 * detray::unit::um); + + using writer_type = + traccc::smearing_writer>; + + // Writer config + typename writer_type::config smearer_writer_cfg{meas_smearer}; + + // Run simulator + const std::string full_path = io::data_directory() + output_directory; + + boost::filesystem::create_directories(full_path); + + auto sim = traccc::simulator( + events, host_det, field, std::move(generator), + std::move(smearer_writer_cfg), full_path); + + sim.get_config().step_constraint = propagation_opts.step_constraint; + sim.get_config().overstep_tolerance = propagation_opts.overstep_tolerance; + + sim.run(); + + return 1; +} \ No newline at end of file