High-level observable wrapper (user-facing) that connects experimental inputs to theory predictions.
More...
High-level observable wrapper (user-facing) that connects experimental inputs to theory predictions.
An Observable represents one measurable quantity identified by an ObservableId. It provides:
- access to the experimental central value and uncertainties (read from the OBSERVABLE/FOBS block),
- access to the theory prediction computed by its associated DecayParent,
- a dependency list (ParamId) used by higher-level engines (scans, fits, nuisance propagation, caching, etc.).
The computation pipeline is:
- compute() calls DecayParent::enable() (lazy initialization) to ensure required Wilson groups are built and parameters are loaded (via DecayParent::load_params()).
- compute() forwards the request to DecayParent::compute_observable(ObservableId).
- The returned value is a vector of ObservableValue to support:
- single-valued observables,
- binned observables (each entry can carry an optional bin range),
- multi-component outputs when needed.
Notes:
- This class is intentionally lightweight: it does not own the physics implementation, only references it.
- Experimental values are fetched through an injected IObsParameterProxy (typically bound to ParameterType::OBSERVABLE) to keep the observable layer testable and decoupled from the storage backend.
Typical usage:
auto decay = std::make_shared<MyDecay>(DecayId::B_TO_XS_GAMMA, muW, muh,
QCDOrder::NNLO, ports);
Observable obs(ObservableId::BR_B_TO_XS_GAMMA, decay, ports.iobspp_obs);
double exp = obs.get_exp_val();
auto theory = obs.compute();
- See also
- DecayParent
-
ObservableValue
-
IObsParameterProxy
Definition in file Observable.h.