Source code for yadmark.data.observables

import numpy as np
from banana.data import cartesian_product, sql
from eko import interpolation

from . import db

default_card = dict(
    interpolation_xgrid=interpolation.make_grid(30, 20).tolist(),
    interpolation_polynomial_degree=4,
    interpolation_is_log=True,
    prDIS="EM",
    ProjectileDIS="electron",
    PolarizationDIS=0,
    PropagatorCorrection=0,
    TargetDIS="proton",
    NCPositivityCharge=None,
    observables={},
)
default_card = dict(sorted(default_card.items()))

default_kinematics = []
default_kinematics.extend(
    [dict(x=x, Q2=10.0, y=0) for x in default_card["interpolation_xgrid"][12::3]]
)
default_kinematics.extend(
    [dict(x=0.001, Q2=Q2, y=0) for Q2 in np.geomspace(4, 22, 10).tolist()]
)

default_config = {
    0: {"observable_names": ["F2_light"], "kinematics": default_kinematics},
    1: {
        "observable_names": [
            "F2_light",
            "F2_charm",
            "FL_light",
            "FL_charm",
            "F3_light",
            "F3_charm",
        ],
        "kinematics": default_kinematics,
    },
}

fns_config = {
    "ZM-VFNS": {
        "observable_names": ["F2_light", "FL_light", "F3_light"],
        "kinematics": default_kinematics,
    }
}


[docs] def build(observable_names, kinematics, update=None): """ Generate all observable card updates Parameters ---------- observable_names : list(str) observable names kinematics : list(dict) kinematics list update : dict base modifiers Returns ------- cards : list(dict) list of update """ cards = [] if update is None: update = {} for c in cartesian_product(update): card = dict(observables={}) card.update(c) for obs in observable_names: card["observables"][obs] = kinematics cards.append(card) return cards
# db interface
[docs] def load(session, updates): """ Load observable records from the DB. Parameters ---------- session : sqlalchemy.session.Session DB ORM session updates : dict modifiers Returns ------- cards : list(dict) list of records """ # add hash raw_records, df = sql.prepare_records(default_card, updates) # insert new ones sql.insertnew(session, db.Observable, df) return raw_records