14#include <magic_enum/magic_enum.hpp>
15#include <nlohmann/json.hpp>
16#include <nlohmann/json_fwd.hpp>
19using json = nlohmann::ordered_json;
42 json_obj.at(
"fPMTThresh").get_to(param.
pmt_thresh);
44 json_obj.at(
"fExperimentalDataIsCorrectedForSaturation")
46 json_obj.at(
"fTimeRes").get_to(param.
time_res);
48 json_obj.at(
"fEnergyGain").get_to(param.
energy_gain);
49 json_obj.at(
"fPedestal").get_to(param.
pedestal);
50 json_obj.at(
"fTimeMax").get_to(param.
max_time);
51 json_obj.at(
"fTimeMin").get_to(param.
min_time);
54 json_obj.at(
"fQdcMin").get_to(param.
min_energy);
63 json_obj = nlohmann::ordered_json{
64 {
"init", option.
init }, {
"step", option.
step }, {
"lower", option.
lower }, {
"upper", option.
upper }
71 json_obj.at(
"init").get_to(option.
init);
72 json_obj.at(
"step").get_to(option.
step);
73 json_obj.at(
"lower").get_to(option.
lower);
74 json_obj.at(
"upper").get_to(option.
upper);
82 json_obj = nlohmann::ordered_json{
83 {
"run-id", option.
run_id },
88 {
"input", option.
input },
89 {
"output", option.
output },
96 json_obj.at(
"run-id").get_to(option.
run_id);
97 json_obj.at(
"number-of-events").get_to(option.
event_num);
98 json_obj.at(
"enable-mpi").get_to(option.
enable_mpi);
99 json_obj.at(
"log-level").get_to(option.
log_level);
101 json_obj.at(
"input").get_to(option.
input);
102 json_obj.at(
"output").get_to(option.
output);
106 void to_json(nlohmann::ordered_json& json_obj,
const CLIApplication::Options::Input& option)
108 json_obj = nlohmann::ordered_json{
109 {
"working-dir", option.working_dir }, {
"data", option.data }, {
"tree-data", option.tree_data },
110 {
"first-par", option.par }, {
"second-par", option.par_2 },
115 void from_json(
const nlohmann::ordered_json& json_obj, CLIApplication::Options::Input& option)
117 json_obj.at(
"working-dir").get_to(option.working_dir);
118 json_obj.at(
"data").get_to(option.data);
119 json_obj.at(
"tree-data").get_to(option.tree_data);
120 json_obj.at(
"first-par").get_to(option.par);
121 json_obj.at(
"second-par").get_to(option.par_2);
125 void to_json(nlohmann::ordered_json& json_obj,
const CLIApplication::Options::Output& option)
127 json_obj = nlohmann::ordered_json{
128 {
"working-dir", option.working_dir },
129 {
"data", option.data },
130 {
"par", option.par },
135 void from_json(
const nlohmann::ordered_json& json_obj, CLIApplication::Options::Output& option)
137 json_obj.at(
"working-dir").get_to(option.working_dir);
138 json_obj.at(
"data").get_to(option.data);
139 json_obj.at(
"par").get_to(option.par);
147 json_obj =
json{ {
"general", option.
general }, {
"tasks", option.
tasks } };
153 json_obj.at(
"general").get_to(option.
general);
154 json_obj.at(
"tasks").get_to(option.
tasks);
197 {
"enable", option.
enable },
199 {
"paddle", option.
paddle },
206 {
"read", option.
read },
207 {
"write", option.
write },
214 json_obj.at(
"enable").get_to(option.
enable);
215 json_obj.at(
"channel").get_to(option.
channel);
216 json_obj.at(
"paddle").get_to(option.
paddle);
217 json_obj.at(
"par").get_to(option.
tamex_par);
221 json_obj.at(
"read").get_to(option.
read);
222 json_obj.at(
"write").get_to(option.
write);
223 json_obj.at(
"point-filter").get_to(option.
point_filter);
226 auto enum_name = std::string{};
227 json_obj.at(
"pileup-strategy").get_to(enum_name);
228 auto enum_val = magic_enum::enum_cast<Digitizing::Neuland::Tamex::PeakPileUpStrategy>(
229 enum_name, magic_enum::case_insensitive);
230 if (enum_val.has_value())
236 throw R3B::logic_error(fmt::format(
"Cannot parse the enum string {:?} to PeakPileUpStrategy enum class. "
237 "Please check if the enum string is correct!",
243 void to_json(
json& json_obj,
const AnalysisApplication::Options::Tasks::MultiTrain& option)
246 {
"enable", option.enable },
247 {
"use-hit", option.use_hit },
248 {
"weight", option.weight },
249 {
"edep-opt", option.edep_opt },
250 {
"edep-off-opt", option.edep_off_opt },
251 {
"n-cluster-opt", option.n_cluster_opt },
252 {
"n-cluster-off-opt", option.n_cluster_off_opt },
253 {
"read", option.read },
254 {
"write", option.write },
259 void from_json(
const json& json_obj, AnalysisApplication::Options::Tasks::MultiTrain& option)
261 json_obj.at(
"enable").get_to(option.enable);
262 json_obj.at(
"use-hit").get_to(option.use_hit);
263 json_obj.at(
"weight").get_to(option.weight);
264 json_obj.at(
"edep-opt").get_to(option.edep_opt);
265 json_obj.at(
"edep-off-opt").get_to(option.edep_off_opt);
266 json_obj.at(
"n-cluster-opt").get_to(option.n_cluster_opt);
267 json_obj.at(
"n-cluster-off-opt").get_to(option.n_cluster_off_opt);
268 json_obj.at(
"read").get_to(option.read);
269 json_obj.at(
"write").get_to(option.write);
273 void to_json(
json& json_obj,
const AnalysisApplication::Options::Tasks::NeutronRValue& option)
276 {
"enable", option.enable },
277 {
"neutron-energy-MeV", option.neutron_energy_mev },
278 {
"read", option.read },
279 {
"write", option.write },
284 void from_json(
const json& json_obj, AnalysisApplication::Options::Tasks::NeutronRValue& option)
286 json_obj.at(
"enable").get_to(option.enable);
287 json_obj.at(
"neutron-energy-MeV").get_to(option.neutron_energy_mev);
288 json_obj.at(
"read").get_to(option.read);
289 json_obj.at(
"write").get_to(option.write);
293 void to_json(
json& json_obj,
const AnalysisApplication::Options::Tasks::Cal2HitParTask& option)
296 {
"enable", option.enable },
297 {
"min-stat", option.min_stat },
298 {
"method", magic_enum::enum_name(option.method) },
299 {
"read", option.read },
300 {
"write", option.write },
305 void from_json(
const json& json_obj, AnalysisApplication::Options::Tasks::Cal2HitParTask& option)
307 json_obj.at(
"enable").get_to(option.enable);
308 json_obj.at(
"min-stat").get_to(option.min_stat);
309 json_obj.at(
"read").get_to(option.read);
310 json_obj.at(
"write").get_to(option.write);
312 auto method_str = std::string{};
313 json_obj.at(
"method").get_to(method_str);
315 auto enum_val = magic_enum::enum_cast<Cal2HitParMethod>(method_str, magic_enum::case_insensitive);
316 if (enum_val.has_value())
318 option.method = enum_val.value();
322 throw R3B::logic_error(fmt::format(
"{} cannot be parsed to the enum class Cal2HitParMethod!", method_str));
339 json_obj.at(
"general").get_to(option.
general);
340 json_obj.at(
"simulation").get_to(option.
simulation);
341 json_obj.at(
"detectors").get_to(option.
detectors);
345 void to_json(nlohmann::ordered_json& json_obj,
const SimulationApplication::Options::Simulation& option)
348 {
"event-print-num", option.event_print_num },
349 {
"store-trajectory", option.store_trajectory },
350 {
"material-filename", option.material_filename },
351 {
"engine", option.engine },
352 {
"random-seed", option.random_seed },
353 {
"generator", option.generator },
358 void from_json(
const nlohmann::ordered_json& json_obj, SimulationApplication::Options::Simulation& option)
360 json_obj.at(
"event-print-num").get_to(option.event_print_num);
361 json_obj.at(
"store-trajectory").get_to(option.store_trajectory);
362 json_obj.at(
"material-filename").get_to(option.material_filename);
363 json_obj.at(
"engine").get_to(option.engine);
364 json_obj.at(
"generator").get_to(option.generator);
368 void to_json(nlohmann::ordered_json& json_obj,
const SimulationApplication::Options::Detector& option)
370 json_obj =
json{ {
"cave", option.cave }, {
"neuland", option.neuland } };
374 void from_json(
const nlohmann::ordered_json& json_obj, SimulationApplication::Options::Detector& option)
376 json_obj.at(
"cave").get_to(option.cave);
377 json_obj.at(
"neuland").get_to(option.neuland);
384 void to_json(nlohmann::ordered_json& json_obj,
const SimulationApplication::Options::Detector::Cave& option)
386 json_obj =
json{ {
"enable", option.enable }, {
"name", option.name }, {
"geo-file", option.geo_file } };
390 void from_json(
const nlohmann::ordered_json& json_obj, SimulationApplication::Options::Detector::Cave& option)
392 json_obj.at(
"enable").get_to(option.enable);
393 json_obj.at(
"name").get_to(option.name);
394 json_obj.at(
"geo-file").get_to(option.geo_file);
398 void to_json(nlohmann::ordered_json& json_obj,
const SimulationApplication::Options::Detector::Neuland& option)
400 json_obj =
json{ {
"enable", option.enable },
401 {
"name", option.name },
402 {
"num-of-dp", option.num_of_dp },
403 {
"location", option.location },
404 {
"enable-auto-geo-build", option.enable_auto_geo_build } };
408 void from_json(
const nlohmann::ordered_json& json_obj, SimulationApplication::Options::Detector::Neuland& option)
410 json_obj.at(
"enable").get_to(option.enable);
411 json_obj.at(
"name").get_to(option.name);
412 json_obj.at(
"num-of-dp").get_to(option.num_of_dp);
413 json_obj.at(
"location").get_to(option.location);
414 json_obj.at(
"enable-auto-geo-build").get_to(option.enable_auto_geo_build);
void from_json(const json &json_obj, Params ¶m)
void to_json(json &json_obj, const Params ¶m)
nlohmann::ordered_json json
Simulation of NeuLAND Bar/Paddle.
void from_json(const nlohmann::ordered_json &json_obj, GeneratorFactory::Options &options)
nlohmann::ordered_json json
void to_json(nlohmann::ordered_json &json_obj, const GeneratorFactory::Options &options)
double energy_res_rel
Gaus(e, fEResRel * e) [].
double time_res
time + Gaus(0., fTimeRes) [ns]
double pileup_time_window
[ns]
double energy_gain
Energy gain.
double min_energy
minimal energy of a FQT peak [MeV]
double saturation_coefficient
Saturation coefficient of PMTs.
double pedestal
Energy offset parameter [ns].
bool experimental_data_is_corrected_for_saturation
Flag if saturation effect enabled.
double pileup_distance
[ns]
struct R3B::Neuland::AnalysisApplication::Options::Tasks::HitMon hit_monitor
struct R3B::Neuland::AnalysisApplication::Options::Tasks::SimCal2Cal sim_cal_to_cal
struct R3B::Neuland::AnalysisApplication::Options::Tasks::PrimInteractionFinder prim_inter_finder
struct R3B::Neuland::AnalysisApplication::Options::Tasks::NeutronRValue neutron_r_value
struct R3B::Neuland::AnalysisApplication::Options::Tasks::ClusterFinder cluster_finder
struct R3B::Neuland::AnalysisApplication::Options::Tasks::PrimClusterFinder prim_cluster_finder
struct R3B::Neuland::AnalysisApplication::Options::Tasks::MultiBayes multi_bayes
struct R3B::Neuland::AnalysisApplication::Options::Tasks::MultiBayesTrain multi_bayes_train
struct R3B::Neuland::AnalysisApplication::Options::Tasks::Cal2HitParTask cal_to_hit_par_task
R3B::Neuland::DigiTaskOptions digi
struct R3B::Neuland::AnalysisApplication::Options::Tasks::MultiTrain multi_calorimeter_train
struct R3B::Neuland::AnalysisApplication::Options::Tasks tasks
CLIApplication::Options general
std::string verbose_level
struct R3B::Neuland::CLIApplication::Options::Input input
struct R3B::Neuland::CLIApplication::Options::Output output
Configuration struct for R3B::Neuland::Digitizer used in R3B::Neuland::AnalysisApplication.
std::string channel
Channel name used in the task.
Digitizing::Neuland::Tamex::PeakPileUpStrategy pileup_strategy
Pileup strategy for the tamex channel.
bool enable_sim_cal
Flag to enable the simulated cal level data output.
bool enable_hit_par
Flag to enable the usage of cal_to_hit parameter.
std::string read
Input data names required by the digitizer.
bool enable_size_monitor
Flag to enable the checking of hit/signal sizes in histograms.
std::string paddle
Paddle name used in the task.
bool enable
Flag to enable task.
ParticleFilter::Options point_filter
Point level filter options used in the digitizer.
R3B::Digitizing::Neuland::Tamex::Params tamex_par
Tamex parameters used in the Digitizer.
std::string write
Output data names from the digitizer.
std::string name
Name of the task.
struct R3B::Neuland::SimulationApplication::Options::Simulation simulation
struct R3B::Neuland::SimulationApplication::Options::Detector detectors
CLIApplication::Options general