File indexing completed on 2026-07-26 08:22:17
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "traccc/bfield/construct_const_bfield.hpp"
0010 #include "traccc/bfield/magnetic_field_types.hpp"
0011 #include "traccc/definitions/primitives.hpp"
0012 #include "traccc/edm/track_parameters.hpp"
0013 #include "traccc/geometry/detector.hpp"
0014 #include "traccc/io/detector.hpp"
0015 #include "traccc/io/utils.hpp"
0016 #include "traccc/options/generation.hpp"
0017 #include "traccc/options/output_data.hpp"
0018 #include "traccc/options/program_options.hpp"
0019 #include "traccc/options/track_propagation.hpp"
0020 #include "traccc/simulation/event_generators.hpp"
0021 #include "traccc/simulation/measurement_smearer.hpp"
0022 #include "traccc/simulation/simulator.hpp"
0023 #include "traccc/simulation/smearing_writer.hpp"
0024
0025
0026 #include <detray/test/common/build_toy_detector.hpp>
0027
0028
0029 #include <vecmem/memory/host_memory_resource.hpp>
0030
0031
0032 #include <boost/filesystem.hpp>
0033
0034 using namespace traccc;
0035
0036 int simulate(const traccc::opts::generation& generation_opts,
0037 const traccc::opts::output_data& output_opts,
0038 const traccc::opts::track_propagation& propagation_opts) {
0039
0040 using uniform_gen_t =
0041 detray::detail::random_numbers<scalar,
0042 std::uniform_real_distribution<scalar>>;
0043
0044
0045 vecmem::host_memory_resource host_mr;
0046
0047
0048
0049
0050
0051
0052 using detector_type = traccc::toy_detector::host;
0053
0054
0055
0056 using b_field_t = covfie::field<traccc::const_bfield_backend_t<scalar>>;
0057 const vector3 B{0, 0, 2 * traccc::unit<scalar>::T};
0058 b_field_t field = traccc::construct_const_bfield(B)
0059 .as_field<traccc::const_bfield_backend_t<scalar>>();
0060
0061
0062 detray::toy_det_config<scalar> toy_cfg{};
0063 toy_cfg.n_brl_layers(4u).n_edc_layers(7u);
0064
0065 toy_cfg.module_mat_thickness(0.11f * traccc::unit<scalar>::mm);
0066 const auto [det, name_map] =
0067 detray::build_toy_detector<traccc::default_algebra>(host_mr, toy_cfg);
0068
0069
0070
0071
0072
0073
0074 using generator_type =
0075 detray::random_track_generator<traccc::free_track_parameters<>,
0076 uniform_gen_t>;
0077 generator_type::configuration gen_cfg{};
0078 gen_cfg.n_tracks(generation_opts.gen_nparticles);
0079 gen_cfg.origin(traccc::point3{generation_opts.vertex[0],
0080 generation_opts.vertex[1],
0081 generation_opts.vertex[2]});
0082 gen_cfg.origin_stddev(traccc::point3{generation_opts.vertex_stddev[0],
0083 generation_opts.vertex_stddev[1],
0084 generation_opts.vertex_stddev[2]});
0085 gen_cfg.phi_range(generation_opts.phi_range);
0086 gen_cfg.theta_range(generation_opts.theta_range);
0087 gen_cfg.mom_range(generation_opts.mom_range);
0088 generator_type generator(gen_cfg);
0089
0090
0091 traccc::measurement_smearer<traccc::default_algebra> meas_smearer(
0092 50 * traccc::unit<scalar>::um, 50 * traccc::unit<scalar>::um);
0093
0094
0095 using writer_type = traccc::smearing_writer<
0096 traccc::measurement_smearer<traccc::default_algebra>>;
0097
0098
0099 typename writer_type::config smearer_writer_cfg{meas_smearer};
0100
0101
0102 const std::string full_path = io::data_directory() + output_opts.directory;
0103
0104 boost::filesystem::create_directories(full_path);
0105
0106 auto sim =
0107 traccc::simulator<detector_type, b_field_t, generator_type, writer_type>(
0108 generation_opts.ptc_type, generation_opts.events, det, field,
0109 std::move(generator), std::move(smearer_writer_cfg), full_path);
0110 sim.get_config().propagation = propagation_opts;
0111
0112 sim.run();
0113
0114
0115 auto writer_cfg = detray::io::detector_writer_config{}
0116 .format(detray::io::format::json)
0117 .replace_files(true);
0118 detray::io::write_detector(det, name_map, writer_cfg);
0119
0120 return 1;
0121 }
0122
0123
0124
0125 int main(int argc, char* argv[]) {
0126 std::unique_ptr<const traccc::Logger> logger = traccc::getDefaultLogger(
0127 "TracccExampleSimulateToyDetector", traccc::Logging::Level::INFO);
0128
0129
0130 traccc::opts::generation generation_opts;
0131 traccc::opts::output_data output_opts;
0132 traccc::opts::track_propagation propagation_opts;
0133 traccc::opts::program_options program_opts{
0134 "Toy-Detector Simulation",
0135 {generation_opts, output_opts, propagation_opts},
0136 argc,
0137 argv,
0138 logger->cloneWithSuffix("Options")};
0139
0140
0141 return simulate(generation_opts, output_opts, propagation_opts);
0142 }