Skip to content
Snippets Groups Projects
dayabay_v0.py 2.91 KiB
Newer Older
Maxim Gonchar's avatar
Maxim Gonchar committed
from dagflow.bundles.load_parameters import load_parameters
from multikeydict.nestedmkdict import NestedMKDict
from pathlib import Path
from typing import Union, Tuple, List, Optional
from pandas import DataFrame
Maxim Gonchar's avatar
Maxim Gonchar committed

from dagflow.graph import Graph
from dagflow.graphviz import savegraph
from dagflow.lib.Sum import Sum
Maxim Gonchar's avatar
Maxim Gonchar committed
from gindex import GNIndex

class ParametersWrapper(NestedMKDict):
    def to_dict(self, **kwargs) -> list:
        data = []
        for k, v in self.walkitems():
            k = '.'.join(k)
            try:
                dct = v.to_dict(**kwargs)
            except AttributeError:
                continue
Maxim Gonchar's avatar
Maxim Gonchar committed

            dct['path'] = k
            data.append(dct)
        return data
    def to_df(self, *, columns: Optional[List[str]]=None, **kwargs) -> DataFrame:
        dct = self.to_dict(**kwargs)
        if columns is None:
Maxim Gonchar's avatar
Maxim Gonchar committed
            columns = ['path', 'value', 'central', 'sigma', 'label']
        df = DataFrame(dct, columns=columns)
        return df
    def to_string(self, **kwargs) -> DataFrame:
        df = self.to_df()
        return df.to_string(**kwargs)
Maxim Gonchar's avatar
Maxim Gonchar committed

    def to_latex(self, *, return_df: bool=False, **kwargs) -> Union[str, Tuple[str, DataFrame]]:
        df = self.to_df(label_from='latex', **kwargs)
        tex = df.to_latex(escape=False)
        if return_df:
            return tex, df
        return tex
def model_dayabay_v0():
    storage = ParametersWrapper({}, sep='.')
    datasource = Path('data/dayabay-v0')
Maxim Gonchar's avatar
Maxim Gonchar committed
    index = GNIndex.from_dict({
		('d', 'detector'): ('AD11', 'AD12', 'AD21', 'AD22', 'AD31', 'AD32', 'AD33', 'AD34'),
		('r', 'reactor'): ('DB1', 'DB2', 'LA1', 'LA2', 'LA3', 'LA4'),
		('i', 'isotope'): ('U235', 'U238', 'Pu239', 'Pu241'),
Maxim Gonchar's avatar
Maxim Gonchar committed
		('b', 'background'): ('acc', 'lihe', 'fastn', 'amc', 'alphan'),
		})

    with Graph(close=True) as g:
        storage ^= load_parameters({'path': 'ibd'      , 'load': datasource/'parameters/pdg2012.yaml'})
        storage ^= load_parameters({'path': 'detector' , 'load': datasource/'parameters/detector_nprotons_correction.yaml'})
        storage ^= load_parameters({'path': 'reactor'  , 'load': datasource/'parameters/reactor_thermal_power_nominal.yaml'})
        storage ^= load_parameters({'path': 'eres'     , 'load': datasource/'parameters/detector_eres.yaml'})
        nuisanceall = Sum('nuisance total')
        storage['stat.nuisance.all'] = nuisanceall
        (output for output in storage['stat.nuisance_parts'].values()) >> nuisanceall
Maxim Gonchar's avatar
Maxim Gonchar committed

    storage['parameter.normalized.eres.eres.b_stat'].value = 1
    storage['parameter.normalized.eres.eres.a_nonuniform'].value = 2
    print('Everything')
    print(storage.to_df())
    print('Parameters')
    print(storage['parameter'].to_df())
    print('Parameters (latex)')
    print(storage['parameter'].to_latex())

    print('Constants (latex)')
    tex = storage['parameter.constant'].to_latex(columns=['path', 'value', 'label'])
    print(tex)

Maxim Gonchar's avatar
Maxim Gonchar committed
    savegraph(g, "output/dayabay_v0.dot", show='all')