R3BROOT
R3B analysis software
Loading...
Searching...
No Matches
R3BNeulandCalToHitPar.h
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright (C) 2019 GSI Helmholtzzentrum für Schwerionenforschung GmbH *
3 * Copyright (C) 2019-2023 Members of R3B Collaboration *
4 * *
5 * This software is distributed under the terms of the *
6 * GNU General Public Licence (GPL) version 3, *
7 * copied verbatim in the file "LICENSE". *
8 * *
9 * In applying this license GSI does not waive the privileges and immunities *
10 * granted to it by virtue of its status as an Intergovernmental Organization *
11 * or submit itself to any jurisdiction. *
12 ******************************************************************************/
13
14#pragma once
15
16#include "R3BException.h"
17#include "R3BShared.h"
18#include "R3BValueError.h"
19#include <R3BNeulandParSet.h>
20#include <Rtypes.h>
21#include <RtypesCore.h>
22#include <cstddef>
23#include <fmt/core.h>
24#include <fmt/format.h>
25#include <string_view>
26#include <unordered_map>
27#include <utility>
28#include <vector>
29
30namespace R3B::Neuland
31{
53
54 class Cal2HitPar : public ParSet
55 {
56 public:
57 explicit Cal2HitPar(std::string_view name = "NeulandHitPar",
58 std::string_view title = "Neuland Cal2Hit calibration",
59 std::string_view context = "TestDefaultContext",
60 bool own = true);
61
62 Cal2HitPar(const Cal2HitPar&) = default;
63 Cal2HitPar(Cal2HitPar&&) = default;
64 auto operator=(const Cal2HitPar&) -> Cal2HitPar& = default;
65 auto operator=(Cal2HitPar&&) -> Cal2HitPar& = default;
66 ~Cal2HitPar() override = default;
67
69 void Reset() { clear(); }
70
71 // setters:
72 void SetDistanceToTarget(double distance) { distance_to_target_ = distance; }
73 void SetEnergyCutoff(double cutoff) { energy_cut_ = cutoff; }
74 void SetGlobalTimeOffset(double offset) { global_time_offset_ = offset; }
75 [[deprecated]] void SetNumOfModules(int num) {}
76 void AddModulePar(const HitModulePar& module_par)
77 {
78 const auto mNum = module_par.module_num;
79 module_pars_.insert_or_assign(mNum, module_par);
80 }
81 auto AddNewModulePar(int module_num) -> HitModulePar&
82 {
83 auto& module_par = module_pars_.try_emplace(module_num).first->second;
84 module_par.module_num = module_num;
85 return module_par;
86 }
87 void SetModulePars(std::unordered_map<int, ::R3B::Neuland::HitModulePar> module_pars)
88 {
89 module_pars_ = std::move(module_pars);
90 }
91
92 // getter:
94 auto GetEnergyCutoff() const { return energy_cut_; }
96 [[deprecated("Use GetDistancesToFirstPlane instead")]] auto GetDistanceToFirstPlane(int plane_num) const
97 {
98 return distances_to_first_plane_.at(plane_num);
99 }
100 auto GetDistancesToFirstPlane() const -> const auto& { return distances_to_first_plane_; }
101 auto GetModuleParAt(int module_num) const -> const ::R3B::Neuland::HitModulePar&
102 {
103#ifdef HAS_CXX_17
104 if (module_pars_.find(module_num) == module_pars_.end())
105#else
106 if (!module_pars_.contains(module_num))
107#endif
108 {
109 throw R3B::logic_error(fmt::format("module pars has no module num {}", module_num));
110 }
111 return module_pars_.at(module_num);
112 }
113 auto HasModuleParAt(int module_num) const -> bool
114 {
115#ifdef HAS_CXX_17
116 return module_pars_.find(module_num) != module_pars_.end();
117#else
118 return module_pars_.contains(module_num);
119#endif
120 }
121 auto GetModulePars() const -> const std::unordered_map<int, ::R3B::Neuland::HitModulePar>&
122 {
123 return module_pars_;
124 }
125 // no auto because pybind from pyROOT
126 auto GetListOfModulePar() const -> const std::unordered_map<int, ::R3B::Neuland::HitModulePar>&
127 {
128 return module_pars_;
129 }
130 auto GetListOfModuleParRef() -> auto& { return module_pars_; }
131 auto GetNumOfModules() const -> std::size_t { return module_pars_.size(); }
132
133 private:
135 double global_time_offset_ = 0.; // in ns
136 double distance_to_target_ = 0.; // in cm
137 double energy_cut_ = 0.; // in MeV
138 std::vector<double> distances_to_first_plane_;
139 std::unordered_map<int, ::R3B::Neuland::HitModulePar> module_pars_;
140 void clear() override
141 {
144 energy_cut_ = 0.;
146 module_pars_.clear();
147 }
148
149 public:
151 };
152
153} // namespace R3B::Neuland
154
R3B::Neuland::Cal2HitPar R3BNeulandHitPar2
std::vector< double > distances_to_first_plane_
void SetModulePars(std::unordered_map< int, ::R3B::Neuland::HitModulePar > module_pars)
auto GetDistanceToFirstPlane(int plane_num) const
void AddModulePar(const HitModulePar &module_par)
auto GetDistancesToFirstPlane() const -> const auto &
void SetDistanceToTarget(double distance)
void SetGlobalTimeOffset(double offset)
auto GetListOfModulePar() const -> const std::unordered_map< int, ::R3B::Neuland::HitModulePar > &
ClassDefOverride(Cal2HitPar, 2)
auto GetNumOfModules() const -> std::size_t
auto AddNewModulePar(int module_num) -> HitModulePar &
auto operator=(const Cal2HitPar &) -> Cal2HitPar &=default
std::unordered_map< int, ::R3B::Neuland::HitModulePar > module_pars_
void SetEnergyCutoff(double cutoff)
auto GetModulePars() const -> const std::unordered_map< int, ::R3B::Neuland::HitModulePar > &
auto operator=(Cal2HitPar &&) -> Cal2HitPar &=default
auto GetModuleParAt(int module_num) const -> const ::R3B::Neuland::HitModulePar &
auto HasModuleParAt(int module_num) const -> bool
Cal2HitPar(const Cal2HitPar &)=default
~Cal2HitPar() override=default
Cal2HitPar(Cal2HitPar &&)=default
Cal2HitPar(std::string_view name="NeulandHitPar", std::string_view title="Neuland Cal2Hit calibration", std::string_view context="TestDefaultContext", bool own=true)
ParSet(std::string_view name="parSet", std::string_view title="Neuland parameter", std::string_view context="TestDefaultContext", bool own=true)
Simulation of NeuLAND Bar/Paddle.
ValueError< double > light_attenuation_factor
exp(alpha*L/2)
LRPair< ValueError< double > > pedestal
ValueError< double > light_attenuation_length
cm, 1/alpha
ValueError< double > effective_speed
cm/ns
LRPair< ValueError< double > > pmt_threshold
ClassDefNV(HitModulePar, 2)
ValueError< double > t_diff
ns
LRPair< ValueError< double > > energy_gain
ValueError< double > t_sync
ns
LRPair< ValueError< double > > pmt_saturation