Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
test_uncertainties_FL.cpp
Go to the documentation of this file.
1#include <chrono>
2#include <fstream>
3#include <iomanip>
4#include <iostream>
5#include <map>
6#include <memory>
7#include <set>
8#include <string>
9#include <utility>
10#include <vector>
11
12#include "StatisticManager.h"
13#include "ObservableInterface.h"
16#include "StatParameterProxy.h"
19#include "FitAbstraction.h"
20#include "NuisanceReader.h"
22
23
24int main() {
26 HyperisoConfig config_hyp;
27 config_hyp.model = Model::SM;
28 hyp.init("lha/si_input.flha", config_hyp);
29
30 auto oint = std::make_shared<ObservableInterface>();
31
32 std::vector<std::pair<double, double>> lhcb_bins = {
33 {0.06, 0.98},
34 {1.1, 2.5},
35 {2.5, 4.0},
36 {4.0, 6.0},
37 {6.0, 8.0},
38 {15.0, 17.0},
39 {17.0, 19.0}
40 };
41
42 // double q2_min = 0.05;
43 // double q2_max = 8.20;
44 // int N = 500;
45 // double bin_width = (q2_max - q2_min) / N;
46 // double bin_low = q2_min;
47
48 // for (size_t i = 0; i < N; i++) {
49 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::DGAMMA_DQ2_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
50 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::F_L_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
51 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_1_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
52 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_2_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
53 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_3_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
54 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_PRIME_4_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
55 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_PRIME_5_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
56 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_PRIME_6_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
57 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_PRIME_8_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
58 // bin_low += bin_width;
59 // }
60
61 // q2_min = 14.70;
62 // q2_max = 19.00;
63 // N = 250;
64 // bin_width = (q2_max - q2_min) / N;
65 // bin_low = q2_min;
66
67 // for (size_t i = 0; i < N; i++) {
68 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::DGAMMA_DQ2_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
69 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::F_L_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
70 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_1_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
71 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_2_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
72 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_3_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
73 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_PRIME_4_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
74 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_PRIME_5_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
75 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_PRIME_6_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
76 // oint->add_observable(BinnedObservableId{ObservableMapper::to_id(Observables::P_PRIME_8_B0__KSTAR0_MU_MU), {bin_low, bin_low + bin_width}}, QCDOrder::NNLO);
77 // bin_low += bin_width;
78 // }
79
80 for (auto& bin: lhcb_bins) {
90 }
91
94 oint->set_decay_config(Decays::B__Kstar_l_l, cfg);
95 oint->set_bkstarll_threads(25);
96 std::shared_ptr<IStatParamOptimizerProxy> spop = std::make_shared<StatParamOptimizerProxy>();
97
98 auto model = std::make_shared<ObservableInterfaceProxy>(oint, spop);
99
100 StatisticConfig config;
101 config.MC_draws = 1000;
102 config.advanced.nuisance_relevance_cutoff = 1e-10;
106 };
107
108 std::shared_ptr<INuisancePathsProvider> npp = std::make_shared<DefaultNuisancePathsProvider>();
109
110 StatisticManager stat(
111 config,
112 model,
113 std::make_shared<StatCorrelationProxy>(),
114 std::make_shared<StatParameterProxy>(),
115 std::make_shared<StatParamSourcesProxy>(),
116 std::make_shared<StatDependencyPruner>(),
117 std::make_shared<NuisanceReader>(npp),
118 spop
119 );
120
121 // stat.select_experiment("CMS");
122
123 auto start = std::chrono::steady_clock::now();
124 auto pred_with_u = stat.compute_uncertainties();
125 auto stop = std::chrono::steady_clock::now();
126 LOG_INFO("Uncertainty computation took", std::chrono::duration_cast<std::chrono::seconds>(stop - start).count(), "s");
127
128 std::ofstream fs;
129 std::map<std::string, Observables> file_names = {
139 };
140
141 for (auto &&[name, obs] : file_names) {
142 fs.open(name + "_LHCB_bins.csv");
143 fs << "bin_low,bin_high,value,u_low,u_high,u_sym\n";
144
145 for (auto &&[k, v] : pred_with_u) {
146 if (k.s != ObservableMapper::to_id(obs)) continue;
147 fs << k.p.first << "," << k.p.second << "," << v.mu << "," << v.sigma_m << "," << v.sigma_p << "," << v.sigma << '\n';
148 }
149 fs.close();
150 }
151
152 return 0;
153}
Default nuisance-configuration path provider.
@ P_2_B0__KSTAR0_MU_MU
@ P_PRIME_8_B0__KSTAR0_MU_MU
@ P_PRIME_5_B0__KSTAR0_MU_MU
@ DGAMMA_DQ2_B0__KSTAR0_MU_MU
@ F_L_B0__KSTAR0_MU_MU
@ P_1_B0__KSTAR0_MU_MU
@ P_3_B0__KSTAR0_MU_MU
@ P_PRIME_4_B0__KSTAR0_MU_MU
@ P_PRIME_6_B0__KSTAR0_MU_MU
@ B__Kstar_l_l
#define LOG_INFO(...)
Macro for logging informational messages.
Definition Logger.h:39
@ FLAT
Uniform (flat) marginal on a finite interval.
Concrete reader for nuisance-parameter definition files.
Adapter from ObservableInterface to the statistical model interface.
High-level, user-facing entry point to compute flavor observables.
Concrete statistical proxy forwarding correlation queries to CorrelationProvider.
Statistics-layer adapter over the core DependencyPruner service.
Statistics-layer adapter for retrieving leaf parameter sources.
Statistics-layer proxy for read-only access to parameters and observables.
High-level orchestration of statistical uncertainty propagation, likelihood construction and fit scan...
static IdOf< ObservableTag > to_id(Observables e)
Converts an enum value to an IdOf<Tag>.
High-level interface to initialize and monitor the main framework configuration.
void init(const std::string &lhaFile, HyperisoConfig config)
Initializes Hyperiso using a LHA file and a full Config object.
Coordinates statistical inputs, nuisance distributions, MLE fits and contour/scan computations.
std::map< BinnedObservableId, GaussianSummary > compute_uncertainties()
Computes Gaussian summaries for MC-propagated observable uncertainties.
double nuisance_relevance_cutoff
Relative-uncertainty cutoff for the first nuisance preselection pass.
std::map< ParamId, MarginalType > override_nuisance_marginals
Per-parameter overrides for nuisance marginal laws.
BV_FF_Src ff_src
Definition BKsllDecay.h:19
Identifies an observable together with a numerical bin.
Configuration object controlling model, input flags and optional MARTY resources.
Definition Config.h:24
Model model
Current model.
Definition Config.h:33
Composite identifier for a single parameter.
Definition ParamID.h:57
AdvancedStatisticConfig advanced
Advanced fit/pruning/covariance configuration.
std::size_t MC_draws
Number of accepted MC draws used for uncertainty propagation.