R3BROOT
R3B analysis software
Loading...
Searching...
No Matches
R3BNeulandSimApp.cxx
Go to the documentation of this file.
1#include "R3BNeulandSimApp.h"
2#include "R3BCave.h"
3#include "R3BNeuland.h"
4#include "R3BNeulandApp.h"
5#include <FairRun.h>
6#include <FairRunSim.h>
7#include <G4RunManager.hh>
8#include <R3BFieldConst.h>
9#include <R3BNeulandAppOptionJson.h> // NOLINT
11#include <TG4EventAction.h>
12#include <TGeoMatrix.h>
13#include <TRandom3.h>
14#include <functional>
15#include <memory>
16#include <string>
17#include <vector>
18
19namespace R3B::Neuland
20{
22 : CLIApplication{ "neuland_sim", std::make_unique<FairRunSim>(), std::ref(options_.general) }
23 {
24 options_.general.input.par.clear();
25 options_.general.input.data.clear();
26 options_.general.output.data = "sim.output.root";
27 options_.general.output.par = "sim.par.root";
28 }
29
31 {
32 auto* sim_run = dynamic_cast<FairRunSim*>(run);
33 setup_engine(sim_run);
34 setup_generator(sim_run);
35 setup_detectors(sim_run);
36 }
37
38 void SimulationApplication::post_init(FairRun* /*run*/)
39 {
40 const auto& options = options_.simulation;
41 auto* grun = G4RunManager::GetRunManager();
42 grun->SetPrintProgress(options.event_print_num);
43 auto* event =
44 dynamic_cast<TG4EventAction*>(const_cast<G4UserEventAction*>(grun->GetUserEventAction())); // NOLINT
45 event->VerboseLevel(0);
46 }
47
49 {
50 const auto& options = options_;
51 run->SetName(options.simulation.engine.c_str());
52 run->SetRunId(options.general.run_id);
53 run->SetStoreTraj(options.simulation.store_trajectory);
54 run->SetMaterials(options.simulation.material_filename.c_str());
55 auto fairField = std::make_unique<R3BFieldConst>();
56 run->SetField(fairField.release());
57 }
58
60 {
61 const auto& options_pos = options_.detectors.neuland;
62 random_gen_ = std::make_unique<TRandom3>(options_.simulation.random_seed);
63 generator_factory_.SetNumOfPlanes(options_pos.num_of_dp * 2);
64 generator_factory_.SetRandomGen(random_gen_.get());
65 run->SetGenerator(generator_factory_.Create().release());
66 }
67
69 {
70 const auto& options = options_.detectors;
71
72 const auto& cave_options = options.cave;
73 if (cave_options.enable)
74 {
75 auto cave = std::make_unique<R3BCave>(cave_options.name.c_str());
76 cave->SetGeometryFileName(cave_options.geo_file.c_str());
77 run->AddModule(cave.release());
78 }
79
80 const auto& neuland_options = options.neuland;
81 if (neuland_options.enable)
82 {
83
84 const auto& location = neuland_options.location;
85 auto const neulandGeoTrans = TGeoTranslation{ location.x(), location.y(), location.z() };
86 auto neuland = std::make_unique<R3BNeuland>(neuland_options.num_of_dp, neulandGeoTrans);
87 if (neuland_options.enable_auto_geo_build)
88 {
89 neuland->EnableAutoGeoBuild();
90 }
91 run->AddModule(neuland.release());
92 }
93 }
94
95 void SimulationApplication::ParseApplicationOption(const std::vector<std::string>& filename)
96 {
98 }
99
101
102 void SimulationApplication::dump_json_options(const std::string& filename)
103 {
105 }
106
107 void SimulationApplication::run_action(FairRun* run, int num_of_events) { run->Run(num_of_events); }
108} // namespace R3B::Neuland
void run() override
Run the CLI program.
void ParseApplicationOptionImp(const std::vector< std::string > &filename, OptionType &options)
CLIApplication(std::string_view name, std::unique_ptr< FairRun > run, std::reference_wrapper< Options > option)
void dump_json_options(const OptionType &options, const std::string &filename)
void dump_json_options(const std::string &filename) override
void run_action(FairRun *run, int num_of_events) override
void ParseApplicationOption(const std::vector< std::string > &filename) override
void post_init(FairRun *run) override
void pre_init(FairRun *run) override
void setup_detectors(FairRunSim *run) const
std::unique_ptr< TRandom3 > random_gen_
Simulation of NeuLAND Bar/Paddle.