9 ObservableInterfaceDecayThreadGuard(std::shared_ptr<ObservableInterface> oi,
size_t forced_threads)
10 : oi_(
std::move(oi)) {
12 snapshot_ = oi_->snapshot_decay_threads();
13 oi_->set_all_decay_threads(forced_threads);
17 ~ObservableInterfaceDecayThreadGuard()
override {
19 oi_->restore_decay_threads(snapshot_);
24 std::shared_ptr<ObservableInterface> oi_;
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)) {
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);
54 return std::make_unique<ObservableInterfaceDecayThreadGuard>(oi_, n_threads);
74 return oi_->get_all_ops_deps(
id);
78 return oi_->get_current_observables();
82 const std::map<ParamId, double>& p,
83 const std::map<ParamId, double>& eta)
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;
94 for (
auto p_elem : p) {
95 const auto& s = p_elem.first;
96 spop_->set_value(s.block, s.code, p_elem.second);
98 for (
auto eta_elem : eta) {
99 const auto& s = eta_elem.first;
100 spop_->set_value(s.block, s.code, eta_elem.second);
104 auto pred = oi_->compute_all();
std::unordered_map< DecayId, size_t > DecayThreadSnapshot
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>.