Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
ObservableInterfaceProxy.cpp
Go to the documentation of this file.
2
3#include <utility>
4
5
6namespace {
7class ObservableInterfaceDecayThreadGuard final : public IModelThreadGuard {
8public:
9 ObservableInterfaceDecayThreadGuard(std::shared_ptr<ObservableInterface> oi, size_t forced_threads)
10 : oi_(std::move(oi)) {
11 if (oi_) {
12 snapshot_ = oi_->snapshot_decay_threads();
13 oi_->set_all_decay_threads(forced_threads);
14 }
15 }
16
17 ~ObservableInterfaceDecayThreadGuard() override {
18 if (oi_) {
19 oi_->restore_decay_threads(snapshot_);
20 }
21 }
22
23private:
24 std::shared_ptr<ObservableInterface> oi_;
25 DecayThreadSnapshot snapshot_;
26};
27} // namespace
28
29
31 std::shared_ptr<ObservableInterface> obs,
32 std::vector<ParamId> p_specs,
33 std::vector<ParamId> eta_specs)
34 : p_specs_(std::move(p_specs)), eta_specs_(std::move(eta_specs)) {
35 oi_ = obs;
36}
37
38ObservableInterfaceProxy::ObservableInterfaceProxy(std::shared_ptr<ObservableInterface> obs, std::shared_ptr<IStatParamOptimizerProxy> spop) { oi_ = obs; spop_ = spop;}
39
40std::shared_ptr<IModel> ObservableInterfaceProxy::clone_for_worker() const {
41 if (!oi_) {
42 return nullptr;
43 }
44
45 auto worker_oi = oi_->clone_for_worker();
46 auto worker_spop = std::make_shared<StatParamOptimizerProxy>();
47 return std::make_shared<ObservableInterfaceProxy>(worker_oi, worker_spop);
48}
49
50std::unique_ptr<IModelThreadGuard> ObservableInterfaceProxy::force_decay_threads(size_t n_threads) {
51 if (!oi_) {
52 return nullptr;
53 }
54 return std::make_unique<ObservableInterfaceDecayThreadGuard>(oi_, n_threads);
55}
56
57std::size_t ObservableInterfaceProxy::n_observables() const { return oi_->get_current_observables().size(); }
58
60 if (!oi_) {
61 return;
62 }
63
64 // Materialize the local Wilson/PhysicalModel dependency graph before the
65 // first ParamOptimizer commit. Some statistical fit parameters intentionally
66 // target runtime-composed Wilson blocks, for example
67 // BCoefficients_B_SCALE_STANDARD__BSM_INTERMEDIATE. Restoring the observable
68 // selection alone only records which decays/observables are needed; the
69 // blocks are actually created when the decays are enabled.
70 oi_->enable_obs();
71}
72
74 return oi_->get_all_ops_deps(id);
75}
76
77std::vector<BinnedObservableId> ObservableInterfaceProxy::get_obs_ids() {
78 return oi_->get_current_observables();
79}
80
81std::map<ObservableId, std::vector<ObservableValue>> ObservableInterfaceProxy::predict_optimized(
82 const std::map<ParamId, double>& p,
83 const std::map<ParamId, double>& eta)
84{
85 bool has_nonzero_fit_param = false;
86 double max_abs_p = 0.0;
87 for (const auto& [pid, val] : p) {
88 max_abs_p = std::max(max_abs_p, std::abs(val));
89 if (std::abs(val) > 1e-12) {
90 has_nonzero_fit_param = true;
91 }
92 }
93
94 for (auto p_elem : p) {
95 const auto& s = p_elem.first;
96 spop_->set_value(s.block, s.code, p_elem.second);
97 }
98 for (auto eta_elem : eta) {
99 const auto& s = eta_elem.first;
100 spop_->set_value(s.block, s.code, eta_elem.second);
101 }
102 spop_->commit();
103
104 auto pred = oi_->compute_all();
105
106 return pred;
107}
108
110 oi_->compute_all();
111};
std::unordered_map< DecayId, size_t > DecayThreadSnapshot
Definition ObsManager.h:79
Adapter from ObservableInterface to the statistical model interface.
std::shared_ptr< IModel > clone_for_worker() const override
Returns the number of currently active binned observables.
std::size_t n_observables() const override
Returns the number of currently active binned observables.
void prepare_for_prediction() override
Materialize model-side runtime state before repeated predictions.
std::unordered_set< ParamId > get_obs_deps(ObservableId id) override
Returns the model parameters required by an observable.
std::vector< BinnedObservableId > get_obs_ids() override
Returns the identifiers of the currently active observable bins.
void compute_observables() const
Forces computation of the currently configured observables.
std::map< ObservableId, std::vector< ObservableValue > > predict_optimized(const std::map< ParamId, double > &p, const std::map< ParamId, double > &eta) override
Computes model predictions for a given parameter point.
std::unique_ptr< IModelThreadGuard > force_decay_threads(size_t n_threads) override
Temporarily force internal model/decay thread counts.
ObservableInterfaceProxy(std::shared_ptr< ObservableInterface > obs, std::vector< ParamId > p_specs, std::vector< ParamId > eta_specs)
Constructs the proxy with explicit fit and nuisance parameter lists.
Hash specialization for SymbolId<Tag>.
Definition BlockName.h:353