Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
main_test_obs.cpp
Go to the documentation of this file.
1#include <algorithm>
2#include <cmath>
3#include <exception>
4#include <fstream>
5#include <iomanip>
6#include <iostream>
7#include <limits>
8#include <map>
9#include <memory>
10#include <set>
11#include <sstream>
12#include <string>
13#include <tuple>
14#include <unordered_set>
15#include <utility>
16#include <vector>
17
18#include "Include.h"
19#include "ObservableInterface.h"
20
21namespace {
22
23struct ObsRow {
24 std::size_t index;
26 std::string obs_name;
27 bool is_binned;
28 std::string label;
29 std::string experiment;
30};
31
32double nan_value() {
33 return std::numeric_limits<double>::quiet_NaN();
34}
35
36
37bool same_double(double a, double b) {
38 const double scale = std::max(1.0, std::max(std::abs(a), std::abs(b)));
39 return std::abs(a - b) <= 1e-10 * scale;
40}
41
42std::string csv_escape(const std::string& s) {
43 std::string out = "\"";
44 for (char c : s) {
45 if (c == '\"') out += "\"\"";
46 else out += c;
47 }
48 out += "\"";
49 return out;
50}
51
52void write_num(std::ofstream& out, double x) {
53 if (std::isfinite(x)) out << std::setprecision(17) << x;
54 else out << "nan";
55}
56
57std::string resolve_experiment_from_label(const std::string& label,
58 const std::string& requested) {
59 // Évite les erreurs type: label *_Belle mais lookup dans FOBS_DEFAULT.
60 // On laisse explicitement le label décider quand il contient une source.
61 if (label.find("LHCb2025c2") != std::string::npos) return "LHCb2025c2";
62 if (label.find("Belle") != std::string::npos) return "Belle";
63 if (label.find("CMS") != std::string::npos) return "CMS";
64 return requested;
65}
66
67
68std::string flha_key(const BinnedObservableId& id) {
69 const auto parts = id.flha().get_parts();
70 std::ostringstream ss;
71 for (std::size_t i = 0; i < parts.size(); ++i) {
72 if (i != 0) ss << "_";
73 ss << parts[i];
74 }
75 return ss.str();
76}
77
78long flha_observable_code(const BinnedObservableId& id) {
79 const auto parts = id.flha().get_parts();
80 if (parts.size() < 2) return std::numeric_limits<long>::min();
81 // In the FLHA convention used here, parts[0] is the parent PDG id
82 // and parts[1] is the observable code: 1 = BR/dBR, 10 = Gamma/dGamma.
83 return parts[1];
84}
85
86std::string quantity_from_enum_name(const std::string& obs_name) {
87 if (obs_name.find("DBR_DQ2") != std::string::npos) return "dBR/dq2";
88 if (obs_name.find("DGAMMA_DQ2") != std::string::npos) return "dGamma/dq2";
89 return "";
90}
91
92bool flha_code_matches_enum_quantity(const std::string& obs_name, long flha_code) {
93 const std::string q = quantity_from_enum_name(obs_name);
94 if (q == "dBR/dq2") return flha_code == 1;
95 if (q == "dGamma/dq2") return flha_code == 10;
96 return true;
97}
98
99const std::unordered_set<std::string>& known_exp_keys(const std::string& experiment) {
100 if (experiment == "DEFAULT") {
101 static const std::unordered_set<std::string> keys = {
102 "130_1_0_0_0_0_0_0_2_13_-13",
103 "130_1_0_0_0_0_0_0_3_111_14_-14",
104 "310_1_0_0_0_0_0_0_2_13_-13",
105 "321_1_0_0_0_0_0_0_3_211_14_-14",
106 "421_1_0_0_0_0_0_0_2_11_-11",
107 "421_1_0_0_0_0_0_0_2_13_-13",
108 "511_1_0_0_0_0_0_0_2_11_-11",
109 "511_1_0_0_0_0_0_0_2_13_-13",
110 "511_1_0_0_0_0_0_0_2_313_22",
111 "511_1_0_1_1_2_0_0_3_311_13_-13",
112 "511_1_0_9_4_1_0_0_3_313_11_-11",
113 "511_1_11_0_0_12_5_1_3_311_13_-13",
114 "511_1_15_0_0_17_0_0_3_311_13_-13",
115 "511_1_15_0_0_22_0_0_3_311_13_-13",
116 "511_1_17_0_0_22_0_0_3_311_13_-13",
117 "511_1_1_1_1_6_0_0_3_311_13_-13",
118 "511_1_2_0_0_4_0_0_3_311_13_-13",
119 "511_1_4_0_0_6_0_0_3_311_13_-13",
120 "511_1_6_0_0_8_0_0_3_311_13_-13",
121 "511_5_1_1_1_6_0_0_3_313_11_-11",
122 "511_5_1_1_1_7_0_0_3_313_11_-11",
123 "511_9121_0_1_1_1_1_1_3_313_13_-13",
124 "511_9121_1_1_1_6_0_0_3_311_13_-13",
125 "511_9121_1_1_1_6_0_0_3_313_13_-13",
126 "511_931_0_8_4_0_257_3_3_313_11_-11",
127 "511_931_1_1_1_6_0_0_3_313_11_-11",
128 "511_931_1_1_1_7_0_0_3_313_11_-11",
129 "511_9412_0_8_4_0_257_3_3_313_11_-11",
130 "511_9416_0_8_4_0_257_3_3_313_11_-11",
131 "511_942_0_8_4_0_257_3_3_313_11_-11",
132 "511_9511_1_1_1_6_0_0_3_313_11_-11",
133 "511_9511_1_1_1_7_0_0_3_313_11_-11",
134 "511_9512_1_1_1_6_0_0_3_313_11_-11",
135 "511_9512_1_1_1_7_0_0_3_313_11_-11",
136 "511_9513_1_1_1_6_0_0_3_313_11_-11",
137 "511_9513_1_1_1_7_0_0_3_313_11_-11",
138 "511_9524_1_1_1_6_0_0_3_313_11_-11",
139 "511_9524_1_1_1_7_0_0_3_313_11_-11",
140 "511_9525_1_1_1_6_0_0_3_313_11_-11",
141 "511_9525_1_1_1_7_0_0_3_313_11_-11",
142 "511_9526_1_1_1_6_0_0_3_313_11_-11",
143 "511_9526_1_1_1_7_0_0_3_313_11_-11",
144 "511_9528_1_1_1_6_0_0_3_313_11_-11",
145 "511_9528_1_1_1_7_0_0_3_313_11_-11",
146 "511_9533_1_1_1_6_0_0_3_313_11_-11",
147 "511_9533_1_1_1_7_0_0_3_313_11_-11",
148 "511_9534_1_1_1_6_0_0_3_313_11_-11",
149 "511_9534_1_1_1_7_0_0_3_313_11_-11",
150 "511_9535_1_1_1_6_0_0_3_313_11_-11",
151 "511_9535_1_1_1_7_0_0_3_313_11_-11",
152 "511_9537_1_1_1_6_0_0_3_313_11_-11",
153 "511_9537_1_1_1_7_0_0_3_313_11_-11",
154 "511_9538_1_1_1_6_0_0_3_313_11_-11",
155 "511_9538_1_1_1_7_0_0_3_313_11_-11",
156 "511_9539_1_1_1_6_0_0_3_313_11_-11",
157 "511_9539_1_1_1_7_0_0_3_313_11_-11",
158 "5122_1_15_0_0_20_0_0_3_3122_13_-13",
159 "5122_51_15_0_0_20_0_0_3_3122_13_-13",
160 "5122_52_15_0_0_20_0_0_3_3122_13_-13",
161 "5122_53_15_0_0_20_0_0_3_3122_13_-13",
162 "5122_931_15_0_0_20_0_0_3_3122_13_-13",
163 "521_1_0_0_0_0_0_0_2_323_22",
164 "521_1_0_1_1_0_98_2_3_321_13_-13",
165 "521_1_0_1_1_2_0_0_3_323_13_-13",
166 "521_1_11_0_0_11_8_1_3_321_13_-13",
167 "521_1_11_0_0_12_5_1_3_323_13_-13",
168 "521_1_11_8_1_12_5_1_3_321_13_-13",
169 "521_1_15_0_0_16_0_0_3_321_13_-13",
170 "521_1_15_0_0_17_0_0_3_323_13_-13",
171 "521_1_15_0_0_19_0_0_3_323_13_-13",
172 "521_1_15_0_0_22_0_0_3_321_13_-13",
173 "521_1_16_0_0_17_0_0_3_321_13_-13",
174 "521_1_17_0_0_18_0_0_3_321_13_-13",
175 "521_1_17_0_0_19_0_0_3_323_13_-13",
176 "521_1_18_0_0_19_0_0_3_321_13_-13",
177 "521_1_19_0_0_20_0_0_3_321_13_-13",
178 "521_1_1_0_0_6_0_0_3_321_11_-11",
179 "521_1_1_1_1_2_0_0_3_321_13_-13",
180 "521_1_1_1_1_6_0_0_3_321_13_-13",
181 "521_1_1_1_1_6_0_0_3_323_13_-13",
182 "521_1_20_0_0_21_0_0_3_321_13_-13",
183 "521_1_21_0_0_22_0_0_3_321_13_-13",
184 "521_1_2_0_0_3_0_0_3_321_13_-13",
185 "521_1_2_0_0_4_0_0_3_323_13_-13",
186 "521_1_3_0_0_4_0_0_3_321_13_-13",
187 "521_1_4_0_0_5_0_0_3_321_13_-13",
188 "521_1_4_0_0_6_0_0_3_323_13_-13",
189 "521_1_5_0_0_6_0_0_3_321_13_-13",
190 "521_1_6_0_0_7_0_0_3_321_13_-13",
191 "521_1_6_0_0_8_0_0_3_323_13_-13",
192 "521_1_7_0_0_8_0_0_3_321_13_-13",
193 "521_3_0_1_1_0_98_2_3_321_13_-13",
194 "521_3_11_0_0_11_8_1_3_321_13_-13",
195 "521_3_11_8_1_12_5_1_3_321_13_-13",
196 "521_3_15_0_0_16_0_0_3_321_13_-13",
197 "521_3_16_0_0_17_0_0_3_321_13_-13",
198 "521_3_17_0_0_18_0_0_3_321_13_-13",
199 "521_3_18_0_0_19_0_0_3_321_13_-13",
200 "521_3_19_0_0_20_0_0_3_321_13_-13",
201 "521_3_1_1_1_2_0_0_3_321_13_-13",
202 "521_3_20_0_0_21_0_0_3_321_13_-13",
203 "521_3_21_0_0_22_0_0_3_321_13_-13",
204 "521_3_2_0_0_3_0_0_3_321_13_-13",
205 "521_3_3_0_0_4_0_0_3_321_13_-13",
206 "521_3_4_0_0_5_0_0_3_321_13_-13",
207 "521_3_5_0_0_6_0_0_3_321_13_-13",
208 "521_3_6_0_0_7_0_0_3_321_13_-13",
209 "521_3_7_0_0_8_0_0_3_321_13_-13",
210 "521_4_0_0_0_0_0_0_2_323_22",
211 "521_5_0_1_1_0_98_2_3_323_13_-13",
212 "521_5_11_0_0_12_5_1_3_323_13_-13",
213 "521_5_15_0_0_17_0_0_3_323_13_-13",
214 "521_5_15_0_0_19_0_0_3_323_13_-13",
215 "521_5_17_0_0_19_0_0_3_323_13_-13",
216 "521_5_1_1_1_2_5_1_3_323_13_-13",
217 "521_5_1_1_1_6_0_0_3_323_13_-13",
218 "521_5_2_5_1_4_0_0_3_323_13_-13",
219 "521_5_4_0_0_6_0_0_3_323_13_-13",
220 "521_5_6_0_0_8_0_0_3_323_13_-13",
221 "521_9121_0_1_1_1_1_1_3_321_13_-13",
222 "521_9121_0_45_3_6_0_0_3_323_13_-13",
223 "521_9121_1_1_1_6_0_0_3_321_13_-13",
224 "521_931_0_1_1_0_98_2_3_323_13_-13",
225 "521_931_11_0_0_12_5_1_3_323_13_-13",
226 "521_931_15_0_0_17_0_0_3_323_13_-13",
227 "521_931_15_0_0_19_0_0_3_323_13_-13",
228 "521_931_17_0_0_19_0_0_3_323_13_-13",
229 "521_931_1_1_1_2_5_1_3_323_13_-13",
230 "521_931_1_1_1_6_0_0_3_323_13_-13",
231 "521_931_2_5_1_4_0_0_3_323_13_-13",
232 "521_931_4_0_0_6_0_0_3_323_13_-13",
233 "521_931_6_0_0_8_0_0_3_323_13_-13",
234 "521_934_15_0_0_22_0_0_3_321_13_-13",
235 "521_934_1_1_1_6_0_0_3_321_13_-13",
236 "521_9511_0_1_1_0_98_2_3_323_13_-13",
237 "521_9511_11_0_0_12_5_1_3_323_13_-13",
238 "521_9511_15_0_0_17_0_0_3_323_13_-13",
239 "521_9511_15_0_0_19_0_0_3_323_13_-13",
240 "521_9511_17_0_0_19_0_0_3_323_13_-13",
241 "521_9511_1_1_1_2_5_1_3_323_13_-13",
242 "521_9511_1_1_1_6_0_0_3_323_13_-13",
243 "521_9511_2_5_1_4_0_0_3_323_13_-13",
244 "521_9511_4_0_0_6_0_0_3_323_13_-13",
245 "521_9511_6_0_0_8_0_0_3_323_13_-13",
246 "521_9512_0_1_1_0_98_2_3_323_13_-13",
247 "521_9512_11_0_0_12_5_1_3_323_13_-13",
248 "521_9512_15_0_0_17_0_0_3_323_13_-13",
249 "521_9512_15_0_0_19_0_0_3_323_13_-13",
250 "521_9512_17_0_0_19_0_0_3_323_13_-13",
251 "521_9512_1_1_1_2_5_1_3_323_13_-13",
252 "521_9512_1_1_1_6_0_0_3_323_13_-13",
253 "521_9512_2_5_1_4_0_0_3_323_13_-13",
254 "521_9512_4_0_0_6_0_0_3_323_13_-13",
255 "521_9512_6_0_0_8_0_0_3_323_13_-13",
256 "521_9513_0_1_1_0_98_2_3_323_13_-13",
257 "521_9513_11_0_0_12_5_1_3_323_13_-13",
258 "521_9513_15_0_0_17_0_0_3_323_13_-13",
259 "521_9513_15_0_0_19_0_0_3_323_13_-13",
260 "521_9513_17_0_0_19_0_0_3_323_13_-13",
261 "521_9513_1_1_1_2_5_1_3_323_13_-13",
262 "521_9513_1_1_1_6_0_0_3_323_13_-13",
263 "521_9513_2_5_1_4_0_0_3_323_13_-13",
264 "521_9513_4_0_0_6_0_0_3_323_13_-13",
265 "521_9513_6_0_0_8_0_0_3_323_13_-13",
266 "521_9524_0_1_1_0_98_2_3_323_13_-13",
267 "521_9524_11_0_0_12_5_1_3_323_13_-13",
268 "521_9524_15_0_0_17_0_0_3_323_13_-13",
269 "521_9524_15_0_0_19_0_0_3_323_13_-13",
270 "521_9524_17_0_0_19_0_0_3_323_13_-13",
271 "521_9524_1_1_1_2_5_1_3_323_13_-13",
272 "521_9524_1_1_1_6_0_0_3_323_13_-13",
273 "521_9524_2_5_1_4_0_0_3_323_13_-13",
274 "521_9524_4_0_0_6_0_0_3_323_13_-13",
275 "521_9524_6_0_0_8_0_0_3_323_13_-13",
276 "521_9525_0_1_1_0_98_2_3_323_13_-13",
277 "521_9525_11_0_0_12_5_1_3_323_13_-13",
278 "521_9525_15_0_0_17_0_0_3_323_13_-13",
279 "521_9525_15_0_0_19_0_0_3_323_13_-13",
280 "521_9525_17_0_0_19_0_0_3_323_13_-13",
281 "521_9525_1_1_1_2_5_1_3_323_13_-13",
282 "521_9525_1_1_1_6_0_0_3_323_13_-13",
283 "521_9525_2_5_1_4_0_0_3_323_13_-13",
284 "521_9525_4_0_0_6_0_0_3_323_13_-13",
285 "521_9525_6_0_0_8_0_0_3_323_13_-13",
286 "521_9526_0_1_1_0_98_2_3_323_13_-13",
287 "521_9526_11_0_0_12_5_1_3_323_13_-13",
288 "521_9526_15_0_0_17_0_0_3_323_13_-13",
289 "521_9526_15_0_0_19_0_0_3_323_13_-13",
290 "521_9526_17_0_0_19_0_0_3_323_13_-13",
291 "521_9526_1_1_1_2_5_1_3_323_13_-13",
292 "521_9526_1_1_1_6_0_0_3_323_13_-13",
293 "521_9526_2_5_1_4_0_0_3_323_13_-13",
294 "521_9526_4_0_0_6_0_0_3_323_13_-13",
295 "521_9526_6_0_0_8_0_0_3_323_13_-13",
296 "521_9528_0_1_1_0_98_2_3_323_13_-13",
297 "521_9528_11_0_0_12_5_1_3_323_13_-13",
298 "521_9528_15_0_0_17_0_0_3_323_13_-13",
299 "521_9528_15_0_0_19_0_0_3_323_13_-13",
300 "521_9528_17_0_0_19_0_0_3_323_13_-13",
301 "521_9528_1_1_1_2_5_1_3_323_13_-13",
302 "521_9528_1_1_1_6_0_0_3_323_13_-13",
303 "521_9528_2_5_1_4_0_0_3_323_13_-13",
304 "521_9528_4_0_0_6_0_0_3_323_13_-13",
305 "521_9528_6_0_0_8_0_0_3_323_13_-13",
306 "521_9533_0_1_1_0_98_2_3_323_13_-13",
307 "521_9533_11_0_0_12_5_1_3_323_13_-13",
308 "521_9533_15_0_0_17_0_0_3_323_13_-13",
309 "521_9533_15_0_0_19_0_0_3_323_13_-13",
310 "521_9533_17_0_0_19_0_0_3_323_13_-13",
311 "521_9533_1_1_1_2_5_1_3_323_13_-13",
312 "521_9533_1_1_1_6_0_0_3_323_13_-13",
313 "521_9533_2_5_1_4_0_0_3_323_13_-13",
314 "521_9533_4_0_0_6_0_0_3_323_13_-13",
315 "521_9533_6_0_0_8_0_0_3_323_13_-13",
316 "521_9534_0_1_1_0_98_2_3_323_13_-13",
317 "521_9534_11_0_0_12_5_1_3_323_13_-13",
318 "521_9534_15_0_0_17_0_0_3_323_13_-13",
319 "521_9534_15_0_0_19_0_0_3_323_13_-13",
320 "521_9534_17_0_0_19_0_0_3_323_13_-13",
321 "521_9534_1_1_1_2_5_1_3_323_13_-13",
322 "521_9534_1_1_1_6_0_0_3_323_13_-13",
323 "521_9534_2_5_1_4_0_0_3_323_13_-13",
324 "521_9534_4_0_0_6_0_0_3_323_13_-13",
325 "521_9534_6_0_0_8_0_0_3_323_13_-13",
326 "521_9535_0_1_1_0_98_2_3_323_13_-13",
327 "521_9535_11_0_0_12_5_1_3_323_13_-13",
328 "521_9535_15_0_0_17_0_0_3_323_13_-13",
329 "521_9535_15_0_0_19_0_0_3_323_13_-13",
330 "521_9535_17_0_0_19_0_0_3_323_13_-13",
331 "521_9535_1_1_1_2_5_1_3_323_13_-13",
332 "521_9535_1_1_1_6_0_0_3_323_13_-13",
333 "521_9535_2_5_1_4_0_0_3_323_13_-13",
334 "521_9535_4_0_0_6_0_0_3_323_13_-13",
335 "521_9535_6_0_0_8_0_0_3_323_13_-13",
336 "521_9537_0_1_1_0_98_2_3_323_13_-13",
337 "521_9537_11_0_0_12_5_1_3_323_13_-13",
338 "521_9537_15_0_0_17_0_0_3_323_13_-13",
339 "521_9537_15_0_0_19_0_0_3_323_13_-13",
340 "521_9537_17_0_0_19_0_0_3_323_13_-13",
341 "521_9537_1_1_1_2_5_1_3_323_13_-13",
342 "521_9537_1_1_1_6_0_0_3_323_13_-13",
343 "521_9537_2_5_1_4_0_0_3_323_13_-13",
344 "521_9537_4_0_0_6_0_0_3_323_13_-13",
345 "521_9537_6_0_0_8_0_0_3_323_13_-13",
346 "521_9538_0_1_1_0_98_2_3_323_13_-13",
347 "521_9538_11_0_0_12_5_1_3_323_13_-13",
348 "521_9538_15_0_0_17_0_0_3_323_13_-13",
349 "521_9538_15_0_0_19_0_0_3_323_13_-13",
350 "521_9538_17_0_0_19_0_0_3_323_13_-13",
351 "521_9538_1_1_1_2_5_1_3_323_13_-13",
352 "521_9538_1_1_1_6_0_0_3_323_13_-13",
353 "521_9538_2_5_1_4_0_0_3_323_13_-13",
354 "521_9538_4_0_0_6_0_0_3_323_13_-13",
355 "521_9538_6_0_0_8_0_0_3_323_13_-13",
356 "521_9539_0_1_1_0_98_2_3_323_13_-13",
357 "521_9539_11_0_0_12_5_1_3_323_13_-13",
358 "521_9539_15_0_0_17_0_0_3_323_13_-13",
359 "521_9539_15_0_0_19_0_0_3_323_13_-13",
360 "521_9539_17_0_0_19_0_0_3_323_13_-13",
361 "521_9539_1_1_1_2_5_1_3_323_13_-13",
362 "521_9539_1_1_1_6_0_0_3_323_13_-13",
363 "521_9539_2_5_1_4_0_0_3_323_13_-13",
364 "521_9539_4_0_0_6_0_0_3_323_13_-13",
365 "521_9539_6_0_0_8_0_0_3_323_13_-13",
366 "531_-5_0_1_1_0_98_2_3_333_13_-13",
367 "531_-5_11_0_0_12_5_1_3_333_13_-13",
368 "531_-5_15_0_0_18_9_1_3_333_13_-13",
369 "531_-5_1_1_1_4_0_0_3_333_13_-13",
370 "531_-5_1_1_1_6_0_0_3_333_13_-13",
371 "531_-5_4_0_0_6_0_0_3_333_13_-13",
372 "531_-5_6_0_0_8_0_0_3_333_13_-13",
373 "531_-9416_0_9_4_0_2615_4_3_333_11_-11",
374 "531_-9417_0_9_4_0_2615_4_3_333_11_-11",
375 "531_-9535_0_1_1_0_98_2_3_333_13_-13",
376 "531_-9535_11_0_0_12_5_1_3_333_13_-13",
377 "531_-9535_15_0_0_18_9_1_3_333_13_-13",
378 "531_-9535_1_1_1_4_0_0_3_333_13_-13",
379 "531_-9535_1_1_1_6_0_0_3_333_13_-13",
380 "531_-9535_4_0_0_6_0_0_3_333_13_-13",
381 "531_-9535_6_0_0_8_0_0_3_333_13_-13",
382 "531_-9538_0_1_1_0_98_2_3_333_13_-13",
383 "531_-9538_11_0_0_12_5_1_3_333_13_-13",
384 "531_-9538_15_0_0_18_9_1_3_333_13_-13",
385 "531_-9538_1_1_1_4_0_0_3_333_13_-13",
386 "531_-9538_1_1_1_6_0_0_3_333_13_-13",
387 "531_-9538_4_0_0_6_0_0_3_333_13_-13",
388 "531_-9538_6_0_0_8_0_0_3_333_13_-13",
389 "531_-9539_0_1_1_0_98_2_3_333_13_-13",
390 "531_-9539_11_0_0_12_5_1_3_333_13_-13",
391 "531_-9539_15_0_0_18_9_1_3_333_13_-13",
392 "531_-9539_1_1_1_4_0_0_3_333_13_-13",
393 "531_-9539_1_1_1_6_0_0_3_333_13_-13",
394 "531_-9539_4_0_0_6_0_0_3_333_13_-13",
395 "531_-9539_6_0_0_8_0_0_3_333_13_-13",
396 "531_15_0_0_0_0_0_0_2_11_-11",
397 "531_15_0_0_0_0_0_0_2_13_-13",
398 "531_1_0_1_1_0_98_2_3_333_13_-13",
399 "531_1_0_1_1_1_1_1_3_333_11_-11",
400 "531_1_11_0_0_12_5_1_3_333_13_-13",
401 "531_1_15_0_0_17_0_0_3_333_13_-13",
402 "531_1_15_0_0_19_0_0_3_333_11_-11",
403 "531_1_15_0_0_19_0_0_3_333_13_-13",
404 "531_1_17_0_0_19_0_0_3_333_13_-13",
405 "531_1_1_1_1_2_5_1_3_333_13_-13",
406 "531_1_1_1_1_6_0_0_3_333_11_-11",
407 "531_1_1_1_1_6_0_0_3_333_13_-13",
408 "531_1_2_5_1_4_0_0_3_333_13_-13",
409 "531_1_4_0_0_6_0_0_3_333_13_-13",
410 "531_1_6_0_0_8_0_0_3_333_13_-13",
411 "531_9121_0_1_1_1_1_1_3_333_13_-13",
412 "531_9121_15_0_0_19_0_0_3_333_13_-13",
413 "531_9121_1_1_1_6_0_0_3_333_13_-13",
414 "531_931_0_1_1_0_98_2_3_333_13_-13",
415 "531_931_0_9_4_0_2615_4_3_333_11_-11",
416 "531_931_11_0_0_12_5_1_3_333_13_-13",
417 "531_931_15_0_0_18_9_1_3_333_13_-13",
418 "531_931_1_1_1_4_0_0_3_333_13_-13",
419 "531_931_1_1_1_6_0_0_3_333_13_-13",
420 "531_931_4_0_0_6_0_0_3_333_13_-13",
421 "531_931_6_0_0_8_0_0_3_333_13_-13",
422 "531_9412_0_9_4_0_2615_4_3_333_11_-11",
423 "531_9533_0_1_1_0_98_2_3_333_13_-13",
424 "531_9533_11_0_0_12_5_1_3_333_13_-13",
425 "531_9533_15_0_0_18_9_1_3_333_13_-13",
426 "531_9533_1_1_1_4_0_0_3_333_13_-13",
427 "531_9533_1_1_1_6_0_0_3_333_13_-13",
428 "531_9533_4_0_0_6_0_0_3_333_13_-13",
429 "531_9533_6_0_0_8_0_0_3_333_13_-13",
430 "531_9534_0_1_1_0_98_2_3_333_13_-13",
431 "531_9534_11_0_0_12_5_1_3_333_13_-13",
432 "531_9534_15_0_0_18_9_1_3_333_13_-13",
433 "531_9534_1_1_1_4_0_0_3_333_13_-13",
434 "531_9534_1_1_1_6_0_0_3_333_13_-13",
435 "531_9534_4_0_0_6_0_0_3_333_13_-13",
436 "531_9534_6_0_0_8_0_0_3_333_13_-13",
437 "531_9537_0_1_1_0_98_2_3_333_13_-13",
438 "531_9537_11_0_0_12_5_1_3_333_13_-13",
439 "531_9537_15_0_0_18_9_1_3_333_13_-13",
440 "531_9537_1_1_1_4_0_0_3_333_13_-13",
441 "531_9537_1_1_1_6_0_0_3_333_13_-13",
442 "531_9537_4_0_0_6_0_0_3_333_13_-13",
443 "531_9537_6_0_0_8_0_0_3_333_13_-13",
444 "5_1_0_0_0_0_0_0_2_3_22",
445 "5_1_14_2_1_22_0_0_3_3_11_-11",
446 "5_1_14_2_1_22_0_0_3_3_13_-13",
447 "5_1_1_0_0_6_0_0_3_3_11_-11",
448 "5_1_1_0_0_6_0_0_3_3_13_-13"
449 };
450 return keys;
451 }
452 if (experiment == "Belle") {
453 static const std::unordered_set<std::string> keys = {
454 "511_9121_0_1_1_8_0_0_3_313_13_-13",
455 "511_9121_0_45_3_1_1_1_3_313_13_-13",
456 "511_9121_15_0_0_19_0_0_3_313_13_-13",
457 "511_9121_1_1_1_6_0_0_3_313_13_-13",
458 "511_9412_0_8_4_1_12_2_3_313_11_-11",
459 "511_942_0_8_4_1_12_2_3_313_11_-11",
460 "521_9121_0_1_1_4_0_0_3_321_13_-13",
461 "521_9121_10_2_1_12_8_1_3_321_13_-13",
462 "521_9121_14_18_2_22_0_0_3_321_13_-13",
463 "521_9121_1_0_0_6_0_0_3_321_13_-13",
464 "521_9121_4_0_0_8_12_2_3_321_13_-13"
465 };
466 return keys;
467 }
468 if (experiment == "CMS") {
469 static const std::unordered_set<std::string> keys = {
470 "511_931_10_9_2_12_86_2_3_313_13_-13",
471 "511_931_14_18_2_16_0_0_3_313_13_-13",
472 "511_931_1_1_1_2_0_0_3_313_13_-13",
473 "511_931_2_0_0_4_3_1_3_313_13_-13",
474 "511_931_4_3_1_6_0_0_3_313_13_-13",
475 "511_931_6_0_0_8_68_2_3_313_13_-13",
476 "511_9511_10_9_2_12_86_2_3_313_13_-13",
477 "511_9511_14_18_2_16_0_0_3_313_13_-13",
478 "511_9511_1_1_1_2_0_0_3_313_13_-13",
479 "511_9511_2_0_0_4_3_1_3_313_13_-13",
480 "511_9511_4_3_1_6_0_0_3_313_13_-13",
481 "511_9511_6_0_0_8_68_2_3_313_13_-13",
482 "511_9512_10_9_2_12_86_2_3_313_13_-13",
483 "511_9512_14_18_2_16_0_0_3_313_13_-13",
484 "511_9512_1_1_1_2_0_0_3_313_13_-13",
485 "511_9512_2_0_0_4_3_1_3_313_13_-13",
486 "511_9512_4_3_1_6_0_0_3_313_13_-13",
487 "511_9512_6_0_0_8_68_2_3_313_13_-13",
488 "511_9513_10_9_2_12_86_2_3_313_13_-13",
489 "511_9513_14_18_2_16_0_0_3_313_13_-13",
490 "511_9513_1_1_1_2_0_0_3_313_13_-13",
491 "511_9513_2_0_0_4_3_1_3_313_13_-13",
492 "511_9513_4_3_1_6_0_0_3_313_13_-13",
493 "511_9513_6_0_0_8_68_2_3_313_13_-13",
494 "511_9524_10_9_2_12_86_2_3_313_13_-13",
495 "511_9524_14_18_2_16_0_0_3_313_13_-13",
496 "511_9524_1_1_1_2_0_0_3_313_13_-13",
497 "511_9524_2_0_0_4_3_1_3_313_13_-13",
498 "511_9524_4_3_1_6_0_0_3_313_13_-13",
499 "511_9524_6_0_0_8_68_2_3_313_13_-13",
500 "511_9525_10_9_2_12_86_2_3_313_13_-13",
501 "511_9525_14_18_2_16_0_0_3_313_13_-13",
502 "511_9525_1_1_1_2_0_0_3_313_13_-13",
503 "511_9525_2_0_0_4_3_1_3_313_13_-13",
504 "511_9525_4_3_1_6_0_0_3_313_13_-13",
505 "511_9525_6_0_0_8_68_2_3_313_13_-13",
506 "511_9526_10_9_2_12_86_2_3_313_13_-13",
507 "511_9526_14_18_2_16_0_0_3_313_13_-13",
508 "511_9526_1_1_1_2_0_0_3_313_13_-13",
509 "511_9526_2_0_0_4_3_1_3_313_13_-13",
510 "511_9526_4_3_1_6_0_0_3_313_13_-13",
511 "511_9526_6_0_0_8_68_2_3_313_13_-13",
512 "511_9528_10_9_2_12_86_2_3_313_13_-13",
513 "511_9528_14_18_2_16_0_0_3_313_13_-13",
514 "511_9528_1_1_1_2_0_0_3_313_13_-13",
515 "511_9528_2_0_0_4_3_1_3_313_13_-13",
516 "511_9528_4_3_1_6_0_0_3_313_13_-13",
517 "511_9528_6_0_0_8_68_2_3_313_13_-13",
518 "521_1_0_1_1_0_98_2_3_321_13_-13",
519 "521_1_11_0_0_11_8_1_3_321_13_-13",
520 "521_1_11_8_1_12_5_1_3_321_13_-13",
521 "521_1_14_82_2_16_0_0_3_321_13_-13",
522 "521_1_16_0_0_17_0_0_3_321_13_-13",
523 "521_1_17_0_0_18_0_0_3_321_13_-13",
524 "521_1_18_0_0_19_24_2_3_321_13_-13",
525 "521_1_19_24_2_22_9_1_3_321_13_-13",
526 "521_1_1_1_1_2_0_0_3_321_13_-13",
527 "521_1_1_1_1_6_0_0_3_321_13_-13",
528 "521_1_2_0_0_3_0_0_3_321_13_-13",
529 "521_1_3_0_0_4_0_0_3_321_13_-13",
530 "521_1_4_0_0_5_0_0_3_321_13_-13",
531 "521_1_5_0_0_6_0_0_3_321_13_-13",
532 "521_1_6_0_0_7_0_0_3_321_13_-13",
533 "521_1_7_0_0_8_0_0_3_321_13_-13",
534 "521_9121_1_1_1_6_0_0_3_321_13_-13",
535 "521_934_1_0_0_6_0_0_3_321_13_-13"
536 };
537 return keys;
538 }
539 if (experiment == "LHCb2025c2") {
540 static const std::unordered_set<std::string> keys = {
541 "511_1_0_6_2_0_98_2_3_313_13_-13",
542 "511_1_11_0_0_12_5_1_3_313_13_-13",
543 "511_1_15_0_0_17_0_0_3_313_13_-13",
544 "511_1_15_0_0_19_0_0_3_313_13_-13",
545 "511_1_17_0_0_19_0_0_3_313_13_-13",
546 "511_1_1_1_1_2_5_1_3_313_13_-13",
547 "511_1_1_1_1_6_0_0_3_313_13_-13",
548 "511_1_2_5_1_4_0_0_3_313_13_-13",
549 "511_1_4_0_0_6_0_0_3_313_13_-13",
550 "511_1_6_0_0_8_0_0_3_313_13_-13",
551 "511_931_0_6_2_0_98_2_3_313_13_-13",
552 "511_931_11_0_0_12_5_1_3_313_13_-13",
553 "511_931_15_0_0_17_0_0_3_313_13_-13",
554 "511_931_15_0_0_19_0_0_3_313_13_-13",
555 "511_931_17_0_0_19_0_0_3_313_13_-13",
556 "511_931_1_1_1_2_5_1_3_313_13_-13",
557 "511_931_1_1_1_6_0_0_3_313_13_-13",
558 "511_931_2_5_1_4_0_0_3_313_13_-13",
559 "511_931_4_0_0_6_0_0_3_313_13_-13",
560 "511_931_6_0_0_8_0_0_3_313_13_-13",
561 "511_9511_0_6_2_0_98_2_3_313_13_-13",
562 "511_9511_11_0_0_12_5_1_3_313_13_-13",
563 "511_9511_15_0_0_17_0_0_3_313_13_-13",
564 "511_9511_15_0_0_19_0_0_3_313_13_-13",
565 "511_9511_17_0_0_19_0_0_3_313_13_-13",
566 "511_9511_1_1_1_2_5_1_3_313_13_-13",
567 "511_9511_1_1_1_6_0_0_3_313_13_-13",
568 "511_9511_2_5_1_4_0_0_3_313_13_-13",
569 "511_9511_4_0_0_6_0_0_3_313_13_-13",
570 "511_9511_6_0_0_8_0_0_3_313_13_-13",
571 "511_9512_0_6_2_0_98_2_3_313_13_-13",
572 "511_9512_11_0_0_12_5_1_3_313_13_-13",
573 "511_9512_15_0_0_17_0_0_3_313_13_-13",
574 "511_9512_15_0_0_19_0_0_3_313_13_-13",
575 "511_9512_17_0_0_19_0_0_3_313_13_-13",
576 "511_9512_1_1_1_2_5_1_3_313_13_-13",
577 "511_9512_1_1_1_6_0_0_3_313_13_-13",
578 "511_9512_2_5_1_4_0_0_3_313_13_-13",
579 "511_9512_4_0_0_6_0_0_3_313_13_-13",
580 "511_9512_6_0_0_8_0_0_3_313_13_-13",
581 "511_9513_0_6_2_0_98_2_3_313_13_-13",
582 "511_9513_11_0_0_12_5_1_3_313_13_-13",
583 "511_9513_15_0_0_17_0_0_3_313_13_-13",
584 "511_9513_15_0_0_19_0_0_3_313_13_-13",
585 "511_9513_17_0_0_19_0_0_3_313_13_-13",
586 "511_9513_1_1_1_2_5_1_3_313_13_-13",
587 "511_9513_1_1_1_6_0_0_3_313_13_-13",
588 "511_9513_2_5_1_4_0_0_3_313_13_-13",
589 "511_9513_4_0_0_6_0_0_3_313_13_-13",
590 "511_9513_6_0_0_8_0_0_3_313_13_-13",
591 "511_9524_0_6_2_0_98_2_3_313_13_-13",
592 "511_9524_11_0_0_12_5_1_3_313_13_-13",
593 "511_9524_15_0_0_17_0_0_3_313_13_-13",
594 "511_9524_15_0_0_19_0_0_3_313_13_-13",
595 "511_9524_17_0_0_19_0_0_3_313_13_-13",
596 "511_9524_1_1_1_2_5_1_3_313_13_-13",
597 "511_9524_1_1_1_6_0_0_3_313_13_-13",
598 "511_9524_2_5_1_4_0_0_3_313_13_-13",
599 "511_9524_4_0_0_6_0_0_3_313_13_-13",
600 "511_9524_6_0_0_8_0_0_3_313_13_-13",
601 "511_9525_0_6_2_0_98_2_3_313_13_-13",
602 "511_9525_11_0_0_12_5_1_3_313_13_-13",
603 "511_9525_15_0_0_17_0_0_3_313_13_-13",
604 "511_9525_15_0_0_19_0_0_3_313_13_-13",
605 "511_9525_17_0_0_19_0_0_3_313_13_-13",
606 "511_9525_1_1_1_2_5_1_3_313_13_-13",
607 "511_9525_1_1_1_6_0_0_3_313_13_-13",
608 "511_9525_2_5_1_4_0_0_3_313_13_-13",
609 "511_9525_4_0_0_6_0_0_3_313_13_-13",
610 "511_9525_6_0_0_8_0_0_3_313_13_-13",
611 "511_9526_0_6_2_0_98_2_3_313_13_-13",
612 "511_9526_11_0_0_12_5_1_3_313_13_-13",
613 "511_9526_15_0_0_17_0_0_3_313_13_-13",
614 "511_9526_15_0_0_19_0_0_3_313_13_-13",
615 "511_9526_17_0_0_19_0_0_3_313_13_-13",
616 "511_9526_1_1_1_2_5_1_3_313_13_-13",
617 "511_9526_1_1_1_6_0_0_3_313_13_-13",
618 "511_9526_2_5_1_4_0_0_3_313_13_-13",
619 "511_9526_4_0_0_6_0_0_3_313_13_-13",
620 "511_9526_6_0_0_8_0_0_3_313_13_-13",
621 "511_9528_0_6_2_0_98_2_3_313_13_-13",
622 "511_9528_11_0_0_12_5_1_3_313_13_-13",
623 "511_9528_15_0_0_17_0_0_3_313_13_-13",
624 "511_9528_15_0_0_19_0_0_3_313_13_-13",
625 "511_9528_17_0_0_19_0_0_3_313_13_-13",
626 "511_9528_1_1_1_2_5_1_3_313_13_-13",
627 "511_9528_1_1_1_6_0_0_3_313_13_-13",
628 "511_9528_2_5_1_4_0_0_3_313_13_-13",
629 "511_9528_4_0_0_6_0_0_3_313_13_-13",
630 "511_9528_6_0_0_8_0_0_3_313_13_-13",
631 "511_95312_0_6_2_0_98_2_3_313_13_-13",
632 "511_95312_11_0_0_12_5_1_3_313_13_-13",
633 "511_95312_15_0_0_17_0_0_3_313_13_-13",
634 "511_95312_15_0_0_19_0_0_3_313_13_-13",
635 "511_95312_17_0_0_19_0_0_3_313_13_-13",
636 "511_95312_1_1_1_2_5_1_3_313_13_-13",
637 "511_95312_1_1_1_6_0_0_3_313_13_-13",
638 "511_95312_2_5_1_4_0_0_3_313_13_-13",
639 "511_95312_4_0_0_6_0_0_3_313_13_-13",
640 "511_95312_6_0_0_8_0_0_3_313_13_-13",
641 "511_95321_0_6_2_0_98_2_3_313_13_-13",
642 "511_95362_0_6_2_0_98_2_3_313_13_-13"
643 };
644 return keys;
645 }
646 static const std::unordered_set<std::string> empty;
647 return empty;
648}
649
650bool has_exp_key(const std::string& experiment, const std::string& key) {
651 const auto& keys = known_exp_keys(experiment);
652 return keys.find(key) != keys.end();
653}
654
655void push_unique_exp(std::vector<std::string>& out, const std::string& exp) {
656 if (exp.empty()) return;
657 for (const auto& x : out) {
658 if (x == exp) return;
659 }
660 out.push_back(exp);
661}
662
663std::string choose_available_experiment(const ObsRow& row, const std::string& key) {
664 // Priorité : expérience demandée / label, puis les blocs FOBS usuels.
665 // Surtout, on ne tente pas get_exp_value sur une clé absente du bloc.
666 std::vector<std::string> order;
667 push_unique_exp(order, row.experiment);
668 push_unique_exp(order, resolve_experiment_from_label(row.label, ""));
669 push_unique_exp(order, "DEFAULT");
670 push_unique_exp(order, "Belle");
671 push_unique_exp(order, "CMS");
672 push_unique_exp(order, "LHCb2025c2");
673
674 for (const auto& exp : order) {
675 if (has_exp_key(exp, key)) return exp;
676 }
677 return "";
678}
679
680bool find_theory_value(const std::vector<ObservableValue>& values,
681 const ObsRow& row,
682 double& theory) {
683 if (values.empty()) return false;
684
685 if (!row.is_binned) {
686 theory = values.front().value;
687 return true;
688 }
689
690 for (const auto& v : values) {
691 if (!v.bin.has_value()) {
692 continue;
693 }
694 if (same_double(v.bin->first, row.id.p.first) &&
695 same_double(v.bin->second, row.id.p.second)) {
696 theory = v.value;
697 return true;
698 }
699 }
700
701 return false;
702}
703
704double get_exp_value_for_row(std::shared_ptr<ObservableInterface> oint,
705 const ObsRow& row,
706 const std::string& experiment) {
707 if (experiment == "DEFAULT") {
708 return oint->get_exp_value(row.id);
709 }
710 return oint->get_exp_value(ExperimentObs{experiment, row.id});
711}
712
713double get_exp_stat_for_row(std::shared_ptr<ObservableInterface> oint,
714 const ObsRow& row,
715 const std::string& experiment) {
716 if (experiment == "DEFAULT") {
717 return oint->get_exp_uncertainty(row.id, UncertaintyType::STAT);
718 }
719 return oint->get_exp_uncertainty(ExperimentObs{experiment, row.id},
721}
722
723} // namespace
724
725int main(int argc, char** argv) {
726 const std::string out_path =
727 (argc >= 2) ? std::string(argv[1]) : "observable_comparison.csv";
728
729 try {
730 HyperisoMaster hyp;
731 HyperisoConfig config_hyp;
732 config_hyp.model = Model::SM;
733 hyp.init("lha/si_input.flha", config_hyp);
734
735 auto oint = std::make_shared<ObservableInterface>();
736
737 BKstarllConfig cfg_BKs;
738 cfg_BKs.ff_src = BV_FF_Src::GRvDV;
739 oint->set_decay_config(Decays::B__Kstar_l_l, cfg_BKs);
740 oint->set_bkstarll_threads(24);
741
742 BKstarGammaConfig cfg_BKsgamma;
743 cfg_BKsgamma.ff_src = BV_FF_Src::GRvDV;
744 oint->set_decay_config(Decays::B__Kstar_gamma, cfg_BKsgamma);
745
746 BsPhiConfig cfg_BsPhi;
747 cfg_BsPhi.ff_src = BV_FF_Src::GRvDV;
748 oint->set_decay_config(Decays::Bs__phi_l_l, cfg_BsPhi);
749 oint->set_bsphi_threads(24);
750
751 BKllConfig cfg_BK;
753 oint->set_decay_config(Decays::B__K_l_l, cfg_BK);
754 oint->set_bkll_threads(24);
755
756 using O = Observables;
757 constexpr bool kAddDeps = false;
758
759 std::vector<ObsRow> rows;
760 std::set<Observables> seen_unbinned;
761 std::set<std::tuple<Observables, double, double>> seen_binned;
762
763 auto add_unbinned = [&](Observables obs,
764 const std::string& obs_name,
765 const std::string& label,
766 const std::string& experiment) {
767 if (seen_unbinned.insert(obs).second) {
768 oint->add_observable(ObservableMapper::to_id(obs),
770 kAddDeps);
771 }
772
773 rows.push_back(ObsRow{
774 rows.size() + 1,
776 obs_name,
777 false,
778 label,
779 resolve_experiment_from_label(label, experiment)
780 });
781 };
782
783 auto add_bin = [&](Observables obs,
784 const std::string& obs_name,
785 double q2min,
786 double q2max,
787 const std::string& label,
788 const std::string& experiment) {
789 const auto key = std::make_tuple(obs, q2min, q2max);
790 if (seen_binned.insert(key).second) {
791 oint->add_observable(
792 BinnedObservableId{ObservableMapper::to_id(obs), {q2min, q2max}},
794 kAddDeps
795 );
796 }
797
798 rows.push_back(ObsRow{
799 rows.size() + 1,
800 BinnedObservableId{ObservableMapper::to_id(obs), {q2min, q2max}},
801 obs_name,
802 true,
803 label,
804 resolve_experiment_from_label(label, experiment)
805 });
806 };
807
808#define ADD_UNBINNED(obs, label, experiment) add_unbinned((obs), #obs, (label), (experiment))
809#define ADD_BIN(obs, q2min, q2max, label, experiment) add_bin((obs), #obs, (q2min), (q2max), (label), (experiment))
810
811 ADD_UNBINNED(O::IA_B__KSTAR_GAMMA, "AI_BKstargamma", "DEFAULT"); // 001
812 ADD_UNBINNED(O::BR_B_XS_GAMMA, "BR_BXsgamma", "DEFAULT"); // 002
813 ADD_UNBINNED(O::BR_BS_MUMU_UNTAG, "BRuntag_Bsmumu", "DEFAULT"); // 003
814 ADD_UNBINNED(O::BR_BS_EE_UNTAG, "BRuntag_Bsee", "DEFAULT"); // 004
815 ADD_BIN(O::BR_B__Xs_mu_mu, 1, 6, "BR_BXsmumu_1_6", "DEFAULT"); // 005
816 ADD_BIN(O::BR_B__Xs_mu_mu, 14.2, 22, "BR_BXsmumu_14.2_22", "DEFAULT"); // 006
817 ADD_BIN(O::BR_B__Xs_e_e, 1, 6, "BR_BXsee_1_6", "DEFAULT"); // 007
818 ADD_BIN(O::BR_B__Xs_e_e, 14.2, 22, "BR_BXsee_14.2_22", "DEFAULT"); // 008
819 ADD_UNBINNED(O::BR_B0__KSTAR0_GAMMA, "BR_B0Kstar0gamma", "DEFAULT"); // 009
820 ADD_UNBINNED(O::BR_B__KSTAR_GAMMA, "BR_BKstargamma", "DEFAULT"); // 010
821 ADD_BIN(O::DBR_DQ2_B__KSTAR_MU_MU, 1.1, 6, "dBR/dq2_BKstarmumu_1.1_6", "DEFAULT"); // 011
822 ADD_BIN(O::DBR_DQ2_B__KSTAR_MU_MU, 15, 19, "dBR/dq2_BKstarmumu_15_19", "DEFAULT"); // 012
823 ADD_BIN(O::R_1_B0__KSTAR0_L_L, 0.1, 1.1, "R-1_B0Kstar0ll_0.1_1.1", "DEFAULT"); // 013
824 ADD_BIN(O::R_1_B0__KSTAR0_L_L, 1.1, 6, "R-1_B0Kstar0ll_1.1_6", "DEFAULT"); // 014
825 ADD_BIN(O::R_1_B0__KSTAR0_L_L, 0.045, 1.1, "R-1_B0Kstar0ll_0.045_1.1_Belle", "Belle"); // 015
826 ADD_BIN(O::R_1_B0__KSTAR0_L_L, 1.1, 6, "R-1_B0Kstar0ll_1.1_6_Belle", "Belle"); // 016
827 ADD_BIN(O::R_1_B0__KSTAR0_L_L, 15, 19, "R-1_B0Kstar0ll_15_19_Belle", "Belle"); // 017
828 ADD_BIN(O::DBR_DQ2_B0__K0_MU_MU, 1.1, 6, "dBR/dq2_B0K0mumu_1.1_6", "DEFAULT"); // 018
829 ADD_BIN(O::DBR_DQ2_B0__K0_MU_MU, 15, 22, "dBR/dq2_B0K0mumu_15_22", "DEFAULT"); // 019
830 ADD_BIN(O::DBR_DQ2_B__K_MU_MU, 1.1, 6, "dBR/dq2_BKmumu_1.1_6", "DEFAULT"); // 020
831 ADD_BIN(O::F_H_B__K_MU_MU, 1.1, 6, "FH_BKmumu_1.1_6", "DEFAULT"); // 021
832 ADD_BIN(O::DBR_DQ2_B__K_MU_MU, 15, 22, "dBR/dq2_BKmumu_15_22", "DEFAULT"); // 022
833 ADD_BIN(O::F_H_B__K_MU_MU, 15, 22, "FH_BKmumu_15_22", "DEFAULT"); // 023
834 ADD_BIN(O::R_1_B__K_L_L, 0.1, 1.1, "R-1_BKll_0.1_1.1", "DEFAULT"); // 024
835 ADD_BIN(O::R_1_B__K_L_L, 1.1, 6, "R-1_BKll_1.1_6", "DEFAULT"); // 025
836 ADD_BIN(O::DBR_DQ2_BS__PHI_MU_MU, 0.1, 0.98, "dBR/dq2_Bsphimumu_0.1_0.98", "DEFAULT"); // 026
837 ADD_BIN(O::F_L_BS_PHI_MU_MU, 0.1, 0.98, "FL_Bsphimumu_0.1_0.98", "DEFAULT"); // 027
838 ADD_BIN(O::S_3_BS_PHI_MU_MU, 0.1, 0.98, "S3_Bsphimumu_0.1_0.98", "DEFAULT"); // 028
839 ADD_BIN(O::S_4_BS_PHI_MU_MU, 0.1, 0.98, "S4_Bsphimumu_0.1_0.98", "DEFAULT"); // 029
840 ADD_BIN(O::S_7_BS_PHI_MU_MU, 0.1, 0.98, "S7_Bsphimumu_0.1_0.98", "DEFAULT"); // 030
841 ADD_BIN(O::DBR_DQ2_BS__PHI_MU_MU, 1.1, 2.5, "dBR/dq2_Bsphimumu_1.1_2.5", "DEFAULT"); // 031
842 ADD_BIN(O::DBR_DQ2_BS__PHI_MU_MU, 2.5, 4, "dBR/dq2_Bsphimumu_2.5_4", "DEFAULT"); // 032
843 ADD_BIN(O::F_L_BS_PHI_MU_MU, 1.1, 4, "FL_Bsphimumu_1.1_4", "DEFAULT"); // 033
844 ADD_BIN(O::S_3_BS_PHI_MU_MU, 1.1, 4, "S3_Bsphimumu_1.1_4", "DEFAULT"); // 034
845 ADD_BIN(O::S_4_BS_PHI_MU_MU, 1.1, 4, "S4_Bsphimumu_1.1_4", "DEFAULT"); // 035
846 ADD_BIN(O::S_7_BS_PHI_MU_MU, 1.1, 4, "S7_Bsphimumu_1.1_4", "DEFAULT"); // 036
847 ADD_BIN(O::DBR_DQ2_BS__PHI_MU_MU, 4, 6, "dBR/dq2_Bsphimumu_4_6", "DEFAULT"); // 037
848 ADD_BIN(O::F_L_BS_PHI_MU_MU, 4, 6, "FL_Bsphimumu_4_6", "DEFAULT"); // 038
849 ADD_BIN(O::S_3_BS_PHI_MU_MU, 4, 6, "S3_Bsphimumu_4_6", "DEFAULT"); // 039
850 ADD_BIN(O::S_4_BS_PHI_MU_MU, 4, 6, "S4_Bsphimumu_4_6", "DEFAULT"); // 040
851 ADD_BIN(O::S_7_BS_PHI_MU_MU, 4, 6, "S7_Bsphimumu_4_6", "DEFAULT"); // 041
852 ADD_BIN(O::DBR_DQ2_BS__PHI_MU_MU, 15, 19, "dBR/dq2_Bsphimumu_15_19 // [2026-05-24_01] [WARN] Rejected MC nuisance sample 1 while trying to fill accepted sample 1 of 1000 : MC prediction contains non-finite observable", "DEFAULT"); // 042
853 ADD_BIN(O::F_L_BS_PHI_MU_MU, 15, 18.9, "FL_Bsphimumu_15_18.9", "DEFAULT"); // 043
854 ADD_BIN(O::S_3_BS_PHI_MU_MU, 15, 18.9, "S3_Bsphimumu_15_18.9", "DEFAULT"); // 044
855 ADD_BIN(O::S_4_BS_PHI_MU_MU, 15, 18.9, "S4_Bsphimumu_15_18.9", "DEFAULT"); // 045
856 ADD_BIN(O::S_7_BS_PHI_MU_MU, 15, 18.9, "S7_Bsphimumu_15_18.9", "DEFAULT"); // 046
857 ADD_BIN(O::DBR_DQ2_LAMBDA_B__LAMBDA_MU_MU, 15, 20, "dBR/dq2_LambdabLambdamumu_15_20", "DEFAULT"); // 047
858 ADD_BIN(O::A_FB_L_LAMBDA_B__LAMBDA_MU_MU, 15, 20, "AlFB_LambdabLambdamumu_15_20", "DEFAULT"); // 048
859 ADD_BIN(O::A_FB_H_LAMBDA_B__LAMBDA_MU_MU, 15, 20, "AhFB_LambdabLambdamumu_15_20", "DEFAULT"); // 049
860 ADD_BIN(O::A_FB_LH_LAMBDA_B__LAMBDA_MU_MU, 15, 20, "AlhFB_LambdabLambdamumu_15_20", "DEFAULT"); // 050
861 ADD_BIN(O::F_L_LAMBDA_B__LAMBDA_MU_MU, 15, 20, "FL_LambdabLambdamumu_15_20", "DEFAULT"); // 051
862 ADD_BIN(O::F_L_B__KSTAR_MU_MU, 0.1, 0.98, "FL_BKstarmumu_0.1_0.98", "DEFAULT"); // 052
863 ADD_BIN(O::A_FB_B__KSTAR_MU_MU, 0.1, 0.98, "AFB_BKstarmumu_0.1_0.98", "DEFAULT"); // 053
864 ADD_BIN(O::S_3_B__KSTAR_MU_MU, 0.1, 0.98, "S3_BKstarmumu_0.1_0.98", "DEFAULT"); // 054
865 ADD_BIN(O::S_4_B__KSTAR_MU_MU, 0.1, 0.98, "S4_BKstarmumu_0.1_0.98", "DEFAULT"); // 055
866 ADD_BIN(O::S_5_B__KSTAR_MU_MU, 0.1, 0.98, "S5_BKstarmumu_0.1_0.98", "DEFAULT"); // 056
867 ADD_BIN(O::S_7_B__KSTAR_MU_MU, 0.1, 0.98, "S7_BKstarmumu_0.1_0.98", "DEFAULT"); // 057
868 ADD_BIN(O::S_8_B__KSTAR_MU_MU, 0.1, 0.98, "S8_BKstarmumu_0.1_0.98", "DEFAULT"); // 058
869 ADD_BIN(O::S_9_B__KSTAR_MU_MU, 0.1, 0.98, "S9_BKstarmumu_0.1_0.98", "DEFAULT"); // 059
870 ADD_BIN(O::F_L_B__KSTAR_MU_MU, 1.1, 2.5, "FL_BKstarmumu_1.1_2.5", "DEFAULT"); // 060
871 ADD_BIN(O::A_FB_B__KSTAR_MU_MU, 1.1, 2.5, "AFB_BKstarmumu_1.1_2.5", "DEFAULT"); // 061
872 ADD_BIN(O::S_3_B__KSTAR_MU_MU, 1.1, 2.5, "S3_BKstarmumu_1.1_2.5", "DEFAULT"); // 062
873 ADD_BIN(O::S_4_B__KSTAR_MU_MU, 1.1, 2.5, "S4_BKstarmumu_1.1_2.5", "DEFAULT"); // 063
874 ADD_BIN(O::S_5_B__KSTAR_MU_MU, 1.1, 2.5, "S5_BKstarmumu_1.1_2.5", "DEFAULT"); // 064
875 ADD_BIN(O::S_7_B__KSTAR_MU_MU, 1.1, 2.5, "S7_BKstarmumu_1.1_2.5", "DEFAULT"); // 065
876 ADD_BIN(O::S_8_B__KSTAR_MU_MU, 1.1, 2.5, "S8_BKstarmumu_1.1_2.5", "DEFAULT"); // 066
877 ADD_BIN(O::S_9_B__KSTAR_MU_MU, 1.1, 2.5, "S9_BKstarmumu_1.1_2.5", "DEFAULT"); // 067
878 ADD_BIN(O::F_L_B__KSTAR_MU_MU, 2.5, 4, "FL_BKstarmumu_2.5_4", "DEFAULT"); // 068
879 ADD_BIN(O::A_FB_B__KSTAR_MU_MU, 2.5, 4, "AFB_BKstarmumu_2.5_4", "DEFAULT"); // 069
880 ADD_BIN(O::S_3_B__KSTAR_MU_MU, 2.5, 4, "S3_BKstarmumu_2.5_4", "DEFAULT"); // 070
881 ADD_BIN(O::S_4_B__KSTAR_MU_MU, 2.5, 4, "S4_BKstarmumu_2.5_4", "DEFAULT"); // 071
882 ADD_BIN(O::S_5_B__KSTAR_MU_MU, 2.5, 4, "S5_BKstarmumu_2.5_4", "DEFAULT"); // 072
883 ADD_BIN(O::S_7_B__KSTAR_MU_MU, 2.5, 4, "S7_BKstarmumu_2.5_4", "DEFAULT"); // 073
884 ADD_BIN(O::S_8_B__KSTAR_MU_MU, 2.5, 4, "S8_BKstarmumu_2.5_4", "DEFAULT"); // 074
885 ADD_BIN(O::S_9_B__KSTAR_MU_MU, 2.5, 4, "S9_BKstarmumu_2.5_4", "DEFAULT"); // 075
886 ADD_BIN(O::F_L_B__KSTAR_MU_MU, 4, 6, "FL_BKstarmumu_4_6", "DEFAULT"); // 076
887 ADD_BIN(O::A_FB_B__KSTAR_MU_MU, 4, 6, "AFB_BKstarmumu_4_6", "DEFAULT"); // 077
888 ADD_BIN(O::S_3_B__KSTAR_MU_MU, 4, 6, "S3_BKstarmumu_4_6", "DEFAULT"); // 078
889 ADD_BIN(O::S_4_B__KSTAR_MU_MU, 4, 6, "S4_BKstarmumu_4_6", "DEFAULT"); // 079
890 ADD_BIN(O::S_5_B__KSTAR_MU_MU, 4, 6, "S5_BKstarmumu_4_6", "DEFAULT"); // 080
891 ADD_BIN(O::S_7_B__KSTAR_MU_MU, 4, 6, "S7_BKstarmumu_4_6", "DEFAULT"); // 081
892 ADD_BIN(O::S_8_B__KSTAR_MU_MU, 4, 6, "S8_BKstarmumu_4_6", "DEFAULT"); // 082
893 ADD_BIN(O::S_9_B__KSTAR_MU_MU, 4, 6, "S9_BKstarmumu_4_6", "DEFAULT"); // 083
894 ADD_BIN(O::F_L_B__KSTAR_MU_MU, 15, 17, "FL_BKstarmumu_15_17", "DEFAULT"); // 084
895 ADD_BIN(O::A_FB_B__KSTAR_MU_MU, 15, 17, "AFB_BKstarmumu_15_17", "DEFAULT"); // 085
896 ADD_BIN(O::S_3_B__KSTAR_MU_MU, 15, 17, "S3_BKstarmumu_15_17", "DEFAULT"); // 086
897 ADD_BIN(O::S_4_B__KSTAR_MU_MU, 15, 17, "S4_BKstarmumu_15_17", "DEFAULT"); // 087
898 ADD_BIN(O::S_5_B__KSTAR_MU_MU, 15, 17, "S5_BKstarmumu_15_17", "DEFAULT"); // 088
899 ADD_BIN(O::S_7_B__KSTAR_MU_MU, 15, 17, "S7_BKstarmumu_15_17", "DEFAULT"); // 089
900 ADD_BIN(O::S_8_B__KSTAR_MU_MU, 15, 17, "S8_BKstarmumu_15_17", "DEFAULT"); // 090
901 ADD_BIN(O::S_9_B__KSTAR_MU_MU, 15, 17, "S9_BKstarmumu_15_17", "DEFAULT"); // 091
902 ADD_BIN(O::F_L_B__KSTAR_MU_MU, 17, 19, "FL_BKstarmumu_17_19", "DEFAULT"); // 092
903 ADD_BIN(O::A_FB_B__KSTAR_MU_MU, 17, 19, "AFB_BKstarmumu_17_19", "DEFAULT"); // 093
904 ADD_BIN(O::S_3_B__KSTAR_MU_MU, 17, 19, "S3_BKstarmumu_17_19", "DEFAULT"); // 094
905 ADD_BIN(O::S_4_B__KSTAR_MU_MU, 17, 19, "S4_BKstarmumu_17_19", "DEFAULT"); // 095
906 ADD_BIN(O::S_5_B__KSTAR_MU_MU, 17, 19, "S5_BKstarmumu_17_19", "DEFAULT"); // 096
907 ADD_BIN(O::S_7_B__KSTAR_MU_MU, 17, 19, "S7_BKstarmumu_17_19", "DEFAULT"); // 097
908 ADD_BIN(O::S_8_B__KSTAR_MU_MU, 17, 19, "S8_BKstarmumu_17_19", "DEFAULT"); // 098
909 ADD_BIN(O::S_9_B__KSTAR_MU_MU, 17, 19, "S9_BKstarmumu_17_19", "DEFAULT"); // 099
910 ADD_BIN(O::R_1_B__KSTAR_L_L, 0.045, 6, "R-1_BKstarll_0.045_6", "DEFAULT"); // 100
911 ADD_BIN(O::R_1_B0__K0_L_L, 1.1, 6, "R-1_B0K0ll_1.1_6", "DEFAULT"); // 101
912 ADD_BIN(O::R_1_B__K_L_L, 1, 6, "R-1_BKll_1_6_Belle", "Belle"); // 102
913 ADD_BIN(O::F_H_B__K_MU_MU, 1, 6, "FH_BKmumu_1_6_CMS", "CMS"); // 103
914 ADD_BIN(O::DBR_DQ2_B0__KSTAR0_E_E, 0.0009, 1, "dBR/dq2_B0Kstar0ee_0.0009_1 //[2026-05-24_01] [WARN] Rejected MC nuisance sample 1 while trying to fill accepted sample 1 of 1000 : MC prediction contains non-finite observable", "DEFAULT"); // 104
915 ADD_BIN(O::F_L_B0__KSTAR0_E_E, 0.0008, 0.257, "FL_B0Kstar0ee_0.0008_0.257 //Rejected MC nuisance sample 125 while trying to fill accepted sample 1 of 1000 : MC prediction contains non-finite observable", "DEFAULT"); // 105
916 ADD_BIN(O::A_T_RE_B0__KSTAR0_E_E, 0.0008, 0.257, "ATRe_B0Kstar0ee_0.0008_0.257 //[2026-05-24_01] [WARN] Rejected MC nuisance sample 1 while trying to fill accepted sample 1 of 1000 : MC prediction contains non-finite observable", "DEFAULT"); // 106
917 ADD_BIN(O::A_T_2_B0__KSTAR0_E_E, 0.0008, 0.257, "AT2_B0Kstar0ee_0.0008_0.257 // [2026-05-24_01] [WARN] Rejected MC nuisance sample 1 while trying to fill accepted sample 1 of 1000 : MC prediction contains non-finite observable", "DEFAULT"); // 107
918 ADD_BIN(O::DBR_DQ2_B__K_MU_MU, 0.1, 0.98, "dBR/dq2_BKmumu_0.1_0.98_CMS", "CMS"); // 108
919 ADD_BIN(O::DBR_DQ2_B__K_MU_MU, 1.1, 2, "dBR/dq2_BKmumu_1.1_2_CMS", "CMS"); // 109
920 ADD_BIN(O::DBR_DQ2_B__K_MU_MU, 2, 3, "dBR/dq2_BKmumu_2_3_CMS", "CMS"); // 110
921 ADD_BIN(O::DBR_DQ2_B__K_MU_MU, 3, 4, "dBR/dq2_BKmumu_3_4_CMS", "CMS"); // 111
922 ADD_BIN(O::DBR_DQ2_B__K_MU_MU, 4, 5, "dBR/dq2_BKmumu_4_5_CMS", "CMS"); // 112
923 ADD_BIN(O::DBR_DQ2_B__K_MU_MU, 5, 6, "dBR/dq2_BKmumu_5_6_CMS", "CMS"); // 113
924 ADD_BIN(O::DBR_DQ2_B__K_MU_MU, 14.82, 16, "dBR/dq2_BKmumu_14.82_16_CMS", "CMS"); // 114
925 ADD_BIN(O::DBR_DQ2_B__K_MU_MU, 16, 17, "dBR/dq2_BKmumu_16_17_CMS", "CMS"); // 115
926 ADD_BIN(O::DBR_DQ2_B__K_MU_MU, 17, 18, "dBR/dq2_BKmumu_17_18_CMS", "CMS"); // 116
927 ADD_BIN(O::DBR_DQ2_B__K_MU_MU, 18, 19.24, "dBR/dq2_BKmumu_18_19.24_CMS", "CMS"); // 117
928 ADD_BIN(O::DBR_DQ2_B__K_MU_MU, 19.24, 22.9, "dBR/dq2_BKmumu_19.24_22.9_CMS", "CMS"); // 118
929 ADD_BIN(O::R_1_B__K_L_L, 1.1, 6, "R-1_BKll_1.1_6_CMS", "CMS"); // 119
930 ADD_BIN(O::F_L_B0__KSTAR0_MU_MU, 1.1, 2, "FL_B0Kstar0mumu_1.1_2_CMS", "CMS"); // 120
931 ADD_BIN(O::P_1_B0__KSTAR0_MU_MU, 1.1, 2, "P1_B0Kstar0mumu_1.1_2_CMS", "CMS"); // 121
932 ADD_BIN(O::P_2_B0__KSTAR0_MU_MU, 1.1, 2, "P2_B0Kstar0mumu_1.1_2_CMS", "CMS"); // 122
933 ADD_BIN(O::P_3_B0__KSTAR0_MU_MU, 1.1, 2, "P3_B0Kstar0mumu_1.1_2_CMS", "CMS"); // 123
934 ADD_BIN(O::P_PRIME_4_B0__KSTAR0_MU_MU, 1.1, 2, "P4prime_B0Kstar0mumu_1.1_2_CMS", "CMS"); // 124
935 ADD_BIN(O::P_PRIME_5_B0__KSTAR0_MU_MU, 1.1, 2, "P5prime_B0Kstar0mumu_1.1_2_CMS", "CMS"); // 125
936 ADD_BIN(O::P_PRIME_6_B0__KSTAR0_MU_MU, 1.1, 2, "P6prime_B0Kstar0mumu_1.1_2_CMS", "CMS"); // 126
937 ADD_BIN(O::P_PRIME_8_B0__KSTAR0_MU_MU, 1.1, 2, "P8prime_B0Kstar0mumu_1.1_2_CMS", "CMS"); // 127
938 ADD_BIN(O::F_L_B0__KSTAR0_MU_MU, 2, 4.3, "FL_B0Kstar0mumu_2_4.3_CMS", "CMS"); // 128
939 ADD_BIN(O::P_1_B0__KSTAR0_MU_MU, 2, 4.3, "P1_B0Kstar0mumu_2_4.3_CMS", "CMS"); // 129
940 ADD_BIN(O::P_2_B0__KSTAR0_MU_MU, 2, 4.3, "P2_B0Kstar0mumu_2_4.3_CMS", "CMS"); // 130
941 ADD_BIN(O::P_3_B0__KSTAR0_MU_MU, 2, 4.3, "P3_B0Kstar0mumu_2_4.3_CMS", "CMS"); // 131
942 ADD_BIN(O::P_PRIME_4_B0__KSTAR0_MU_MU, 2, 4.3, "P4prime_B0Kstar0mumu_2_4.3_CMS", "CMS"); // 132
943 ADD_BIN(O::P_PRIME_5_B0__KSTAR0_MU_MU, 2, 4.3, "P5prime_B0Kstar0mumu_2_4.3_CMS", "CMS"); // 133
944 ADD_BIN(O::P_PRIME_6_B0__KSTAR0_MU_MU, 2, 4.3, "P6prime_B0Kstar0mumu_2_4.3_CMS", "CMS"); // 134
945 ADD_BIN(O::P_PRIME_8_B0__KSTAR0_MU_MU, 2, 4.3, "P8prime_B0Kstar0mumu_2_4.3_CMS", "CMS"); // 135
946 ADD_BIN(O::F_L_B0__KSTAR0_MU_MU, 4.3, 6, "FL_B0Kstar0mumu_4.3_6_CMS", "CMS"); // 136
947 ADD_BIN(O::P_1_B0__KSTAR0_MU_MU, 4.3, 6, "P1_B0Kstar0mumu_4.3_6_CMS", "CMS"); // 137
948 ADD_BIN(O::P_2_B0__KSTAR0_MU_MU, 4.3, 6, "P2_B0Kstar0mumu_4.3_6_CMS", "CMS"); // 138
949 ADD_BIN(O::P_3_B0__KSTAR0_MU_MU, 4.3, 6, "P3_B0Kstar0mumu_4.3_6_CMS", "CMS"); // 139
950 ADD_BIN(O::P_PRIME_4_B0__KSTAR0_MU_MU, 4.3, 6, "P4prime_B0Kstar0mumu_4.3_6_CMS", "CMS"); // 140
951 ADD_BIN(O::P_PRIME_5_B0__KSTAR0_MU_MU, 4.3, 6, "P5prime_B0Kstar0mumu_4.3_6_CMS", "CMS"); // 141
952 ADD_BIN(O::P_PRIME_6_B0__KSTAR0_MU_MU, 4.3, 6, "P6prime_B0Kstar0mumu_4.3_6_CMS", "CMS"); // 142
953 ADD_BIN(O::P_PRIME_8_B0__KSTAR0_MU_MU, 4.3, 6, "P8prime_B0Kstar0mumu_4.3_6_CMS", "CMS"); // 143
954 ADD_BIN(O::F_L_B0__KSTAR0_MU_MU, 14.18, 16, "FL_B0Kstar0mumu_14.18_16_CMS", "CMS"); // 144
955 ADD_BIN(O::P_1_B0__KSTAR0_MU_MU, 14.18, 16, "P1_B0Kstar0mumu_14.18_16_CMS", "CMS"); // 145
956 ADD_BIN(O::P_2_B0__KSTAR0_MU_MU, 14.18, 16, "P2_B0Kstar0mumu_14.18_16_CMS", "CMS"); // 146
957 ADD_BIN(O::P_3_B0__KSTAR0_MU_MU, 14.18, 16, "P3_B0Kstar0mumu_14.18_16_CMS", "CMS"); // 147
958 ADD_BIN(O::P_PRIME_4_B0__KSTAR0_MU_MU, 14.18, 16, "P4prime_B0Kstar0mumu_14.18_16_CMS", "CMS"); // 148
959 ADD_BIN(O::P_PRIME_5_B0__KSTAR0_MU_MU, 14.18, 16, "P5prime_B0Kstar0mumu_14.18_16_CMS", "CMS"); // 149
960 ADD_BIN(O::P_PRIME_6_B0__KSTAR0_MU_MU, 14.18, 16, "P6prime_B0Kstar0mumu_14.18_16_CMS", "CMS"); // 150
961 ADD_BIN(O::P_PRIME_8_B0__KSTAR0_MU_MU, 14.18, 16, "P8prime_B0Kstar0mumu_14.18_16_CMS", "CMS"); // 151
962 ADD_BIN(O::DBR_DQ2_BS__PHI_E_E, 0.1, 1.1, "dBR/dq2_Bsphiee_0.1_1.1", "DEFAULT"); // 152
963 ADD_BIN(O::DBR_DQ2_BS__PHI_E_E, 1.1, 6, "dBR/dq2_Bsphiee_1.1_6", "DEFAULT"); // 153
964 ADD_BIN(O::DBR_DQ2_BS__PHI_E_E, 15, 19, "dBR/dq2_Bsphiee_15_19 //[2026-05-24_01] [WARN] Rejected MC nuisance sample 1 while trying to fill accepted sample 1 of 1000 : MC prediction contains non-finite observable", "DEFAULT"); // 154
965 ADD_BIN(O::R_1_BS__PHI_L_L, 0.1, 1.1, "R-1_Bsphill_0.1_1.1", "DEFAULT"); // 155
966 ADD_BIN(O::R_1_BS__PHI_L_L, 1.1, 6, "R-1_Bsphill_1.1_6", "DEFAULT"); // 156
967 ADD_BIN(O::R_1_BS__PHI_L_L, 15, 19, "R-1_Bsphill_15_19 //[2026-05-24_01] [WARN] Rejected MC nuisance sample 1 while trying to fill accepted sample 1 of 1000 : MC prediction contains non-finite observable", "DEFAULT"); // 157
968 ADD_BIN(O::F_L_BS_PHI_E_E, 0.0009, 0.2615, "FL_Bsphiee_0.0009_0.2615 //[2026-05-24_01] [WARN] Rejected MC nuisance sample 1 while trying to fill accepted sample 1 of 1000 : MC prediction contains non-finite observable", "DEFAULT"); // 158
969 ADD_BIN(O::A_T_2_BS_PHI_E_E, 0.0009, 0.2615, "AT2_Bsphiee_0.0009_0.2615 //[2026-05-24_01] [WARN] Rejected MC nuisance sample 1 while trying to fill accepted sample 1 of 1000 : MC prediction contains non-finite observable", "DEFAULT"); // 159
970 ADD_BIN(O::A_T_2_B0__KSTAR0_E_E, 0.0008, 1.12, "AT2_B0Kstar0ee_0.0008_1.12_Belle //[2026-05-24_01] [WARN] Rejected MC nuisance sample 1 while trying to fill accepted sample 1 of 1000 : MC prediction contains non-finite observable", "Belle"); // 160
971 ADD_BIN(O::F_L_B0__KSTAR0_E_E, 1.1, 6, "FL_B0Kstar0ee_1.1_6", "DEFAULT"); // 161
972 ADD_BIN(O::P_1_B0__KSTAR0_E_E, 1.1, 6, "P1_B0Kstar0ee_1.1_6", "DEFAULT"); // 162
973 ADD_BIN(O::P_2_B0__KSTAR0_E_E, 1.1, 6, "P2_B0Kstar0ee_1.1_6", "DEFAULT"); // 163
974 ADD_BIN(O::P_3_B0__KSTAR0_E_E, 1.1, 6, "P3_B0Kstar0ee_1.1_6", "DEFAULT"); // 164
975 ADD_BIN(O::P_PRIME_4_B0__KSTAR0_E_E, 1.1, 6, "P4prime_B0Kstar0ee_1.1_6", "DEFAULT"); // 165
976 ADD_BIN(O::P_PRIME_5_B0__KSTAR0_E_E, 1.1, 6, "P5prime_B0Kstar0ee_1.1_6", "DEFAULT"); // 166
977 ADD_BIN(O::P_PRIME_6_B0__KSTAR0_E_E, 1.1, 6, "P6prime_B0Kstar0ee_1.1_6", "DEFAULT"); // 167
978 ADD_BIN(O::P_PRIME_8_B0__KSTAR0_E_E, 1.1, 6, "P8prime_B0Kstar0ee_1.1_6", "DEFAULT"); // 168
979 ADD_BIN(O::F_L_B0__KSTAR0_MU_MU, 0.06, 0.98, "FL_B0Kstar0mumu_0.06_0.98_LHCb2025c2", "LHCb2025c2"); // 169
980 ADD_BIN(O::S_2S_B0__KSTAR0_MU_MU, 0.06, 0.98, "S2s_B0Kstar0mumu_0.06_0.98_LHCb2025c2", "LHCb2025c2"); // 170
981 ADD_BIN(O::S_1C_B0__KSTAR0_MU_MU, 0.06, 0.98, "S1c_B0Kstar0mumu_0.06_0.98_LHCb2025c2", "LHCb2025c2"); // 171
982 ADD_BIN(O::P_1_B0__KSTAR0_MU_MU, 0.06, 0.98, "P1_B0Kstar0mumu_0.06_0.98_LHCb2025c2", "LHCb2025c2"); // 172
983 ADD_BIN(O::P_2_B0__KSTAR0_MU_MU, 0.06, 0.98, "P2_B0Kstar0mumu_0.06_0.98_LHCb2025c2", "LHCb2025c2"); // 173
984 ADD_BIN(O::P_3_B0__KSTAR0_MU_MU, 0.06, 0.98, "P3_B0Kstar0mumu_0.06_0.98_LHCb2025c2", "LHCb2025c2"); // 174
985 ADD_BIN(O::P_PRIME_4_B0__KSTAR0_MU_MU, 0.06, 0.98, "P4prime_B0Kstar0mumu_0.06_0.98_LHCb2025c2", "LHCb2025c2"); // 175
986 ADD_BIN(O::P_PRIME_5_B0__KSTAR0_MU_MU, 0.06, 0.98, "P5prime_B0Kstar0mumu_0.06_0.98_LHCb2025c2", "LHCb2025c2"); // 176
987 ADD_BIN(O::P_PRIME_6_B0__KSTAR0_MU_MU, 0.06, 0.98, "P6prime_B0Kstar0mumu_0.06_0.98_LHCb2025c2", "LHCb2025c2"); // 177
988 ADD_BIN(O::P_PRIME_8_B0__KSTAR0_MU_MU, 0.06, 0.98, "P8prime_B0Kstar0mumu_0.06_0.98_LHCb2025c2", "LHCb2025c2"); // 178
989 ADD_BIN(O::S_6C_B0__KSTAR0_MU_MU, 0.06, 0.98, "S6c_B0Kstar0mumu_0.06_0.98_LHCb2025c2", "LHCb2025c2"); // 179
990 ADD_BIN(O::DBR_DQ2_B0__KSTAR0_MU_MU, 0.06, 0.98, "dBR/dq2_B0Kstar0mumu_0.06_0.98_LHCb2025c2", "LHCb2025c2"); // 180
991 ADD_BIN(O::F_L_B0__KSTAR0_MU_MU, 1.1, 2.5, "FL_B0Kstar0mumu_1.1_2.5_LHCb2025c2", "LHCb2025c2"); // 181
992 ADD_BIN(O::S_1C_B0__KSTAR0_MU_MU, 1.1, 2.5, "S1c_B0Kstar0mumu_1.1_2.5_LHCb2025c2", "LHCb2025c2"); // 182
993 ADD_BIN(O::P_1_B0__KSTAR0_MU_MU, 1.1, 2.5, "P1_B0Kstar0mumu_1.1_2.5_LHCb2025c2", "LHCb2025c2"); // 183
994 ADD_BIN(O::P_2_B0__KSTAR0_MU_MU, 1.1, 2.5, "P2_B0Kstar0mumu_1.1_2.5_LHCb2025c2", "LHCb2025c2"); // 184
995 ADD_BIN(O::P_3_B0__KSTAR0_MU_MU, 1.1, 2.5, "P3_B0Kstar0mumu_1.1_2.5_LHCb2025c2", "LHCb2025c2"); // 185
996 ADD_BIN(O::P_PRIME_4_B0__KSTAR0_MU_MU, 1.1, 2.5, "P4prime_B0Kstar0mumu_1.1_2.5_LHCb2025c2", "LHCb2025c2"); // 186
997 ADD_BIN(O::P_PRIME_5_B0__KSTAR0_MU_MU, 1.1, 2.5, "P5prime_B0Kstar0mumu_1.1_2.5_LHCb2025c2", "LHCb2025c2"); // 187
998 ADD_BIN(O::P_PRIME_6_B0__KSTAR0_MU_MU, 1.1, 2.5, "P6prime_B0Kstar0mumu_1.1_2.5_LHCb2025c2", "LHCb2025c2"); // 188
999 ADD_BIN(O::P_PRIME_8_B0__KSTAR0_MU_MU, 1.1, 2.5, "P8prime_B0Kstar0mumu_1.1_2.5_LHCb2025c2", "LHCb2025c2"); // 189
1000 ADD_BIN(O::DBR_DQ2_B0__KSTAR0_MU_MU, 1.1, 2.5, "dBR/dq2_B0Kstar0mumu_1.1_2.5_LHCb2025c2", "LHCb2025c2"); // 190
1001 ADD_BIN(O::F_L_B0__KSTAR0_MU_MU, 2.5, 4, "FL_B0Kstar0mumu_2.5_4.0_LHCb2025c2", "LHCb2025c2"); // 191
1002 ADD_BIN(O::S_1C_B0__KSTAR0_MU_MU, 2.5, 4, "S1c_B0Kstar0mumu_2.5_4.0_LHCb2025c2", "LHCb2025c2"); // 192
1003 ADD_BIN(O::P_1_B0__KSTAR0_MU_MU, 2.5, 4, "P1_B0Kstar0mumu_2.5_4.0_LHCb2025c2", "LHCb2025c2"); // 193
1004 ADD_BIN(O::P_2_B0__KSTAR0_MU_MU, 2.5, 4, "P2_B0Kstar0mumu_2.5_4.0_LHCb2025c2", "LHCb2025c2"); // 194
1005 ADD_BIN(O::P_3_B0__KSTAR0_MU_MU, 2.5, 4, "P3_B0Kstar0mumu_2.5_4.0_LHCb2025c2", "LHCb2025c2"); // 195
1006 ADD_BIN(O::P_PRIME_4_B0__KSTAR0_MU_MU, 2.5, 4, "P4prime_B0Kstar0mumu_2.5_4.0_LHCb2025c2", "LHCb2025c2"); // 196
1007 ADD_BIN(O::P_PRIME_5_B0__KSTAR0_MU_MU, 2.5, 4, "P5prime_B0Kstar0mumu_2.5_4.0_LHCb2025c2", "LHCb2025c2"); // 197
1008 ADD_BIN(O::P_PRIME_6_B0__KSTAR0_MU_MU, 2.5, 4, "P6prime_B0Kstar0mumu_2.5_4.0_LHCb2025c2", "LHCb2025c2"); // 198
1009 ADD_BIN(O::P_PRIME_8_B0__KSTAR0_MU_MU, 2.5, 4, "P8prime_B0Kstar0mumu_2.5_4.0_LHCb2025c2", "LHCb2025c2"); // 199
1010 ADD_BIN(O::DBR_DQ2_B0__KSTAR0_MU_MU, 2.5, 4, "dBR/dq2_B0Kstar0mumu_2.5_4.0_LHCb2025c2", "LHCb2025c2"); // 200
1011 ADD_BIN(O::F_L_B0__KSTAR0_MU_MU, 4, 6, "FL_B0Kstar0mumu_4.0_6.0_LHCb2025c2", "LHCb2025c2"); // 201
1012 ADD_BIN(O::S_1C_B0__KSTAR0_MU_MU, 4, 6, "S1c_B0Kstar0mumu_4.0_6.0_LHCb2025c2", "LHCb2025c2"); // 202
1013 ADD_BIN(O::P_1_B0__KSTAR0_MU_MU, 4, 6, "P1_B0Kstar0mumu_4.0_6.0_LHCb2025c2", "LHCb2025c2"); // 203
1014 ADD_BIN(O::P_2_B0__KSTAR0_MU_MU, 4, 6, "P2_B0Kstar0mumu_4.0_6.0_LHCb2025c2", "LHCb2025c2"); // 204
1015 ADD_BIN(O::P_3_B0__KSTAR0_MU_MU, 4, 6, "P3_B0Kstar0mumu_4.0_6.0_LHCb2025c2", "LHCb2025c2"); // 205
1016 ADD_BIN(O::P_PRIME_4_B0__KSTAR0_MU_MU, 4, 6, "P4prime_B0Kstar0mumu_4.0_6.0_LHCb2025c2", "LHCb2025c2"); // 206
1017 ADD_BIN(O::P_PRIME_5_B0__KSTAR0_MU_MU, 4, 6, "P5prime_B0Kstar0mumu_4.0_6.0_LHCb2025c2", "LHCb2025c2"); // 207
1018 ADD_BIN(O::P_PRIME_6_B0__KSTAR0_MU_MU, 4, 6, "P6prime_B0Kstar0mumu_4.0_6.0_LHCb2025c2", "LHCb2025c2"); // 208
1019 ADD_BIN(O::P_PRIME_8_B0__KSTAR0_MU_MU, 4, 6, "P8prime_B0Kstar0mumu_4.0_6.0_LHCb2025c2", "LHCb2025c2"); // 209
1020 ADD_BIN(O::DBR_DQ2_B0__KSTAR0_MU_MU, 4, 6, "dBR/dq2_B0Kstar0mumu_4.0_6.0_LHCb2025c2", "LHCb2025c2"); // 210
1021 ADD_BIN(O::F_L_B0__KSTAR0_MU_MU, 15, 17, "FL_B0Kstar0mumu_15.0_17.0_LHCb2025c2", "LHCb2025c2"); // 211
1022 ADD_BIN(O::S_1C_B0__KSTAR0_MU_MU, 15, 17, "S1c_B0Kstar0mumu_15.0_17.0_LHCb2025c2", "LHCb2025c2"); // 212
1023 ADD_BIN(O::P_1_B0__KSTAR0_MU_MU, 15, 17, "P1_B0Kstar0mumu_15.0_17.0_LHCb2025c2", "LHCb2025c2"); // 213
1024 ADD_BIN(O::P_2_B0__KSTAR0_MU_MU, 15, 17, "P2_B0Kstar0mumu_15.0_17.0_LHCb2025c2", "LHCb2025c2"); // 214
1025 ADD_BIN(O::P_3_B0__KSTAR0_MU_MU, 15, 17, "P3_B0Kstar0mumu_15.0_17.0_LHCb2025c2", "LHCb2025c2"); // 215
1026 ADD_BIN(O::P_PRIME_4_B0__KSTAR0_MU_MU, 15, 17, "P4prime_B0Kstar0mumu_15.0_17.0_LHCb2025c2", "LHCb2025c2"); // 216
1027 ADD_BIN(O::P_PRIME_5_B0__KSTAR0_MU_MU, 15, 17, "P5prime_B0Kstar0mumu_15.0_17.0_LHCb2025c2", "LHCb2025c2"); // 217
1028 ADD_BIN(O::P_PRIME_6_B0__KSTAR0_MU_MU, 15, 17, "P6prime_B0Kstar0mumu_15.0_17.0_LHCb2025c2", "LHCb2025c2"); // 218
1029 ADD_BIN(O::P_PRIME_8_B0__KSTAR0_MU_MU, 15, 17, "P8prime_B0Kstar0mumu_15.0_17.0_LHCb2025c2", "LHCb2025c2"); // 219
1030 ADD_BIN(O::DBR_DQ2_B0__KSTAR0_MU_MU, 15, 17, "dBR/dq2_B0Kstar0mumu_15.0_17.0_LHCb2025c2", "LHCb2025c2"); // 220
1031 ADD_BIN(O::F_L_B0__KSTAR0_MU_MU, 17, 19, "FL_B0Kstar0mumu_17.0_19.0_LHCb2025c2", "LHCb2025c2"); // 221
1032 ADD_BIN(O::S_1C_B0__KSTAR0_MU_MU, 17, 19, "S1c_B0Kstar0mumu_17.0_19.0_LHCb2025c2", "LHCb2025c2"); // 222
1033 ADD_BIN(O::P_1_B0__KSTAR0_MU_MU, 17, 19, "P1_B0Kstar0mumu_17.0_19.0_LHCb2025c2", "LHCb2025c2"); // 223
1034 ADD_BIN(O::P_2_B0__KSTAR0_MU_MU, 17, 19, "P2_B0Kstar0mumu_17.0_19.0_LHCb2025c2", "LHCb2025c2"); // 224
1035 ADD_BIN(O::P_3_B0__KSTAR0_MU_MU, 17, 19, "P3_B0Kstar0mumu_17.0_19.0_LHCb2025c2", "LHCb2025c2"); // 225
1036 ADD_BIN(O::P_PRIME_4_B0__KSTAR0_MU_MU, 17, 19, "P4prime_B0Kstar0mumu_17.0_19.0_LHCb2025c2", "LHCb2025c2"); // 226
1037 ADD_BIN(O::P_PRIME_5_B0__KSTAR0_MU_MU, 17, 19, "P5prime_B0Kstar0mumu_17.0_19.0_LHCb2025c2", "LHCb2025c2"); // 227
1038 ADD_BIN(O::P_PRIME_6_B0__KSTAR0_MU_MU, 17, 19, "P6prime_B0Kstar0mumu_17.0_19.0_LHCb2025c2", "LHCb2025c2"); // 228
1039 ADD_BIN(O::P_PRIME_8_B0__KSTAR0_MU_MU, 17, 19, "P8prime_B0Kstar0mumu_17.0_19.0_LHCb2025c2", "LHCb2025c2"); // 229
1040 ADD_BIN(O::DBR_DQ2_B0__KSTAR0_MU_MU, 17, 19, "dBR/dq2_B0Kstar0mumu_17.0_19.0_LHCb2025c2", "LHCb2025c2"); // 230
1041
1042#undef ADD_BIN
1043#undef ADD_UNBINNED
1044
1045 std::cout << "[INFO] Registered rows: " << rows.size() << "\n";
1046 std::cout << "[INFO] Unique unbinned: " << seen_unbinned.size()
1047 << ", unique binned: " << seen_binned.size() << "\n";
1048
1049 const auto all_theory = oint->compute_all();
1050
1051 std::ofstream out(out_path);
1052 if (!out) {
1053 std::cerr << "[ERROR] Cannot open output CSV: " << out_path << "\n";
1054 return 2;
1055 }
1056
1057 out << "index,label,observable,binned_observable,flha_key,flha_obs_code,quantity_from_enum,flha_enum_ok,requested_experiment,experiment,is_binned,q2_min,q2_max,"
1058 "theory,exp,stat_unc,delta,pull,rel_delta,rel_stat_unc,"
1059 "theory_ok,exp_ok,stat_ok,error\n";
1060
1061 for (const auto& row : rows) {
1062 double theory = nan_value();
1063 double exp = nan_value();
1064 double stat = nan_value();
1065
1066 bool theory_ok = false;
1067 bool exp_ok = false;
1068 bool stat_ok = false;
1069
1070 std::ostringstream error;
1071 std::string key;
1072 long flha_code = std::numeric_limits<long>::min();
1073 std::string quantity = quantity_from_enum_name(row.obs_name);
1074 bool flha_enum_ok = true;
1075 std::string experiment = row.experiment;
1076
1077 try {
1078 key = flha_key(row.id);
1079 flha_code = flha_observable_code(row.id);
1080 flha_enum_ok = flha_code_matches_enum_quantity(row.obs_name, flha_code);
1081 if (!flha_enum_ok) {
1082 error << "flha_enum_quantity_mismatch:obs=" << row.obs_name
1083 << ",flha_code=" << flha_code << ";";
1084 }
1085 const std::string resolved = choose_available_experiment(row, key);
1086 if (!resolved.empty()) {
1087 experiment = resolved;
1088 } else {
1089 error << "exp_key_not_found_in_known_FOBS_blocks:" << key << ";";
1090 }
1091 } catch (const std::exception& e) {
1092 error << "flha_key_exception:" << e.what() << ";";
1093 } catch (...) {
1094 error << "flha_key_unknown_exception;";
1095 }
1096
1097 try {
1098 const auto obs_id = row.id.s;
1099 auto it = all_theory.find(obs_id);
1100 if (it != all_theory.end()) {
1101 theory_ok = find_theory_value(it->second, row, theory);
1102 }
1103 if (!theory_ok) {
1104 error << "theory_not_found_for_bin;";
1105 }
1106 } catch (const std::exception& e) {
1107 error << "theory_exception:" << e.what() << ";";
1108 } catch (...) {
1109 error << "theory_unknown_exception;";
1110 }
1111
1112 if (!key.empty() && has_exp_key(experiment, key)) {
1113 try {
1114 exp = get_exp_value_for_row(oint, row, experiment);
1115 exp_ok = std::isfinite(exp);
1116 } catch (const std::exception& e) {
1117 error << "exp_exception:" << e.what() << ";";
1118 } catch (...) {
1119 error << "exp_unknown_exception;";
1120 }
1121
1122 try {
1123 stat = get_exp_stat_for_row(oint, row, experiment);
1124 stat_ok = std::isfinite(stat);
1125 } catch (const std::exception& e) {
1126 error << "stat_exception:" << e.what() << ";";
1127 } catch (...) {
1128 error << "stat_unknown_exception;";
1129 }
1130 } else {
1131 error << "skip_exp_lookup_missing_key;";
1132 }
1133
1134 const double delta =
1135 (theory_ok && exp_ok) ? (theory - exp) : nan_value();
1136
1137 const double pull =
1138 (theory_ok && exp_ok && stat_ok && stat > 0.0)
1139 ? (delta / stat)
1140 : nan_value();
1141
1142 const double rel_delta =
1143 (theory_ok && exp_ok && exp != 0.0)
1144 ? (delta / exp)
1145 : nan_value();
1146
1147 const double rel_stat_unc =
1148 (exp_ok && stat_ok && exp != 0.0)
1149 ? (stat / std::abs(exp))
1150 : nan_value();
1151
1152 out << row.index << ","
1153 << csv_escape(row.label) << ","
1154 << csv_escape(row.obs_name) << ","
1155 << csv_escape(row.id.str()) << ","
1156 << csv_escape(key) << ",";
1157 if (flha_code == std::numeric_limits<long>::min()) out << "nan";
1158 else out << flha_code;
1159 out << ","
1160 << csv_escape(quantity) << ","
1161 << (flha_enum_ok ? 1 : 0) << ","
1162 << csv_escape(row.experiment) << ","
1163 << csv_escape(experiment) << ","
1164 << (row.is_binned ? 1 : 0) << ",";
1165
1166 if (row.is_binned) {
1167 write_num(out, row.id.p.first);
1168 out << ",";
1169 write_num(out, row.id.p.second);
1170 } else {
1171 out << "nan,nan";
1172 }
1173
1174 out << ",";
1175 write_num(out, theory);
1176 out << ",";
1177 write_num(out, exp);
1178 out << ",";
1179 write_num(out, stat);
1180 out << ",";
1181 write_num(out, delta);
1182 out << ",";
1183 write_num(out, pull);
1184 out << ",";
1185 write_num(out, rel_delta);
1186 out << ",";
1187 write_num(out, rel_stat_unc);
1188 out << ","
1189 << (theory_ok ? 1 : 0) << ","
1190 << (exp_ok ? 1 : 0) << ","
1191 << (stat_ok ? 1 : 0) << ","
1192 << csv_escape(error.str())
1193 << "\n";
1194 }
1195
1196 std::cout << "[INFO] Wrote " << out_path << "\n";
1197 return 0;
1198
1199 } catch (const std::exception& e) {
1200 std::cerr << "[FATAL] " << e.what() << "\n";
1201 return 1;
1202 } catch (...) {
1203 std::cerr << "[FATAL] Unknown exception\n";
1204 return 1;
1205 }
1206}
Observables
Definition GeneralEnum.h:4
@ B__Kstar_l_l
@ Bs__phi_l_l
@ B__Kstar_gamma
High-level, user-facing entry point to compute flavor observables.
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.
#define ADD_UNBINNED(obs, label, experiment)
#define ADD_BIN(obs, q2min, q2max, label, experiment)
csl::Expr v
Definition sm.h:110
BP_FF_Src ff_src
Definition BKllDecay.h:142
BV_FF_Src ff_src
Definition BKsllDecay.h:19
Identifies an observable together with a numerical bin.
BV_FF_Src ff_src
Definition BsPhiDecay.h:17
Configuration object controlling model, input flags and optional MARTY resources.
Definition Config.h:24
Model model
Current model.
Definition Config.h:33