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_wire_chamber.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::wire_chamber::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 const b_field_t field =
0059 traccc::construct_const_bfield(B)
0060 .as_field<traccc::const_bfield_backend_t<scalar>>();
0061
0062
0063 detray::wire_chamber_config<scalar> wire_chamber_cfg{};
0064 wire_chamber_cfg.n_layers(20u);
0065
0066
0067 const auto [det, name_map] =
0068 detray::build_wire_chamber<detector_type::algebra_type>(host_mr,
0069 wire_chamber_cfg);
0070
0071
0072
0073
0074
0075
0076 using generator_type =
0077 detray::random_track_generator<traccc::free_track_parameters<>,
0078 uniform_gen_t>;
0079 generator_type::configuration gen_cfg{};
0080 gen_cfg.n_tracks(generation_opts.gen_nparticles);
0081 gen_cfg.origin(traccc::point3{generation_opts.vertex[0],
0082 generation_opts.vertex[1],
0083 generation_opts.vertex[2]});
0084 gen_cfg.origin_stddev(traccc::point3{generation_opts.vertex_stddev[0],
0085 generation_opts.vertex_stddev[1],
0086 generation_opts.vertex_stddev[2]});
0087 gen_cfg.phi_range(generation_opts.phi_range);
0088 gen_cfg.theta_range(generation_opts.theta_range);
0089 gen_cfg.mom_range(generation_opts.mom_range);
0090 gen_cfg.charge(generation_opts.ptc_type.charge());
0091 generator_type generator(gen_cfg);
0092
0093
0094 traccc::measurement_smearer<traccc::default_algebra> meas_smearer(
0095 50 * traccc::unit<scalar>::um, 50 * traccc::unit<scalar>::um);
0096
0097
0098 using writer_type = traccc::smearing_writer<
0099 traccc::measurement_smearer<traccc::default_algebra>>;
0100
0101
0102 typename writer_type::config smearer_writer_cfg{meas_smearer};
0103
0104
0105 const std::string full_path = io::data_directory() + output_opts.directory;
0106
0107 boost::filesystem::create_directories(full_path);
0108
0109 auto sim =
0110 traccc::simulator<detector_type, b_field_t, generator_type, writer_type>(
0111 generation_opts.ptc_type, generation_opts.events, det, field,
0112 std::move(generator), std::move(smearer_writer_cfg), full_path);
0113 sim.get_config().propagation = propagation_opts;
0114
0115 sim.run();
0116
0117
0118 auto writer_cfg = detray::io::detector_writer_config{}
0119 .format(detray::io::format::json)
0120 .replace_files(true);
0121 detray::io::write_detector(det, name_map, writer_cfg);
0122
0123 return 1;
0124 }
0125
0126
0127
0128 int main(int argc, char* argv[]) {
0129 std::unique_ptr<const traccc::Logger> logger = traccc::getDefaultLogger(
0130 "TracccExampleSimulateWireChamber", traccc::Logging::Level::INFO);
0131
0132
0133 traccc::opts::generation generation_opts;
0134 traccc::opts::output_data output_opts;
0135 traccc::opts::track_propagation propagation_opts;
0136 traccc::opts::program_options program_opts{
0137 "Wire-Chamber Simulation",
0138 {generation_opts, output_opts, propagation_opts},
0139 argc,
0140 argv,
0141 logger->cloneWithSuffix("Options")};
0142
0143
0144 return simulate(generation_opts, output_opts, propagation_opts);
0145 }