Пример #1
0
def test_snf_spectrum_expression(tmp_path):
    """Test for new version of Daya Bay fast neutron background bundle,
    updated for new integrators"""

    indices = [
            ('s', 'site',        ['EH1', 'EH2', 'EH3']),
            ('d', 'detector',    ['AD11', 'AD12', 'AD21', 'AD22', 'AD31', 'AD32', 'AD33', 'AD34'],
                                 dict(short='s', name='site', map=OrderedDict([('EH1', ('AD11', 'AD12')), ('EH2', ('AD21', 'AD22')), ('EH3', ('AD31', 'AD32', 'AD33', 'AD34'))]))),
        ]

    expr = ['evis_edges()',
            'fastn_shape[s]',
            'bkg_spectrum_fastn[s]()'
            ]
    a =  Expression_v01(expr, indices = NIndex.fromlist(indices))
    a.parse()
    lib = dict()
    a.guessname(lib, save=True)

    ns = env.globalns('fastn')
    cfg = NestedDict(
            integral = NestedDict(
                bundle   = dict(name='integral_2d1d', version='v03'),
                variables = ('evis', 'ctheta'),
                edges    = np.linspace(0.0, 12.0, 241, dtype='d'),
                xorders   = 4,
                yorder   = 2,
                ),
            bkg_spectrum_fastn=NestedDict(
                    bundle=dict(name='dayabay_fastn_power', version='v02', major='s'),
                    parameter='fastn_shape',
                    name='bkg_spectrum_fastn',
                    normalize=(0.7, 12.0),
                    bins='evis_edges',
                    order=2,
                    ),
            fastn_shape=NestedDict(
                    bundle = dict(name="parameters", version = "v01"),
                    parameter='fastn_shape',
                    label='Fast neutron shape parameter for {site}',
                    pars=uncertaindict(
                        [ ('EH1', (67.79, 0.1132)),
                          ('EH2', (58.30, 0.0817)),
                          ('EH3', (68.02, 0.0997)) ],
                        mode='relative',
                        ),
                    ),
            )
    context = ExpressionContext_v01(cfg, ns=ns)
    a.build(context)
Пример #2
0
            ])
        )

bkg = cfg('bkg')
bkg.bundle = 'bundlesum_v01'
bkg.bundlesum_list = [ 'bkg1', 'bkg2', 'bkgw' ] #, 'bkg_fn'
bkg.observable = 'bkg_total'

bkg.bkg1 = NestedDict(
        bundle   = 'bkg_weighted_hist_v01',
        formula  = [ '{det}.bkg1_num', ('bkg1_norm.{det}', '{det}.bkg1_rate', '{det}.livetime') ],
        groups   = cfg.groups,
        variants = cfg.detectors,

        bkg1_norm = uncertaindict([
            (det, (1.0, 1.0, 'percent')) \
              for det in cfg.detectors
            ]),

        bkg1_rate = uncertaindict(
              [ ('D1', 8),
                ('D2', 7),
                ('D3', 4),
                ('D4', 3) ],
                mode = 'fixed',
            ),

        spectra = NestedDict(
            bundle = 'root_histograms_v01',
            filename   = cfg.filename,
            format = 'hist_{self}',
            variants = OrderedDict([
Пример #3
0
    def init_configuration(self):
        if self.opts.eres_npe:
            self.opts.eres_sigma = self.opts.eres_npe**-0.5
        else:
            self.opts.eres_npe = self.opts.eres_sigma**-2
        print('Energy resolution at 1 MeV: {}% ({} pe)'.format(
            self.opts.eres_sigma * 100, self.opts.eres_npe))

        edges = np.arange(0.0, 12.001, 0.01)  #FIXME
        edges_final = np.concatenate(([0.7], np.arange(1, 6.0,
                                                       self.opts.estep),
                                      np.arange(6, 7.0, 0.1), [7.0, 7.5,
                                                               12.0]))
        if self.opts.final_emin is not None:
            print('Truncate final binning E>={}'.format(self.opts.final_emin))
            edges_final = edges_final[edges_final >= self.opts.final_emin]
        if self.opts.final_emax is not None:
            print('Truncate final binning E<={}'.format(self.opts.final_emax))
            edges_final = edges_final[edges_final <= self.opts.final_emax]
        if self.opts.final_emin is not None or self.opts.final_emax is not None:
            print('Final binning:', edges_final)
        self.cfg = NestedDict(
                kinint2 = NestedDict(
                    bundle    = dict(name='integral_2d1d', version='v03', names=dict(integral='kinint2')),
                    variables = ('evis', 'ctheta'),
                    edges     = edges,
                    #  edges   = np.linspace(0.0, 12.001, 601),
                    xorders   = 4,
                    yorder    = 5,
                    ),
                rebin = NestedDict(
                        bundle = dict(name='rebin', version='v04', major=''),
                        rounding = 5,
                        edges = edges_final,
                        instances={
                            'rebin': 'Final histogram {detector}',
                            }
                        ),
                rebin_bkg = NestedDict(
                        bundle = dict(name='rebin', version='v04', major=''),
                        rounding = 5,
                        edges = edges_final,
                        instances={
                            'rebin_acc': 'Accidentals {autoindex}',
                            'rebin_li': '9Li {autoindex}',
                            'rebin_he': '8He {autoindex}',
                            'rebin_fastn': 'Fast neutrons {autoindex}',
                            'rebin_alphan': 'C(alpha,n)O {autoindex}'
                            }
                        ),
                ibd_xsec = NestedDict(
                    bundle = dict(name='xsec_ibd', version='v02'),
                    order = 1,
                    ),
                oscprob = NestedDict(
                    bundle = dict(name='oscprob', version='v04', major='rdc', inactive=self.opts.oscprob=='matter'),
                    pdgyear = self.opts.pdgyear,
                    dm      = self.opts.dm
                    ),
                oscprob_matter = NestedDict(
                    bundle = dict(name='oscprob_matter', version='v01', major='rd', inactive=self.opts.oscprob=='vacuum',
                                  names=dict(oscprob='oscprob_matter')),
                    density = 2.6, # g/cm3
                    pdgyear = self.opts.pdgyear,
                    dm      = self.opts.dm
                    ),
                anuspec_hm = NestedDict(
                    bundle = dict(name='reactor_anu_spectra', version='v04', inactive=self.opts.flux!='huber-mueller'),
                    name = 'anuspec',
                    filename = ['data/reactor_anu_spectra/Huber/Huber_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat',
                                'data/reactor_anu_spectra/Mueller/Mueller_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat'],
                    free_params=False, # enable free spectral model
                    varmode='log',
                    varname='anue_weight_{index:02d}',
                    ns_name='spectral_weights',
                    debug = True,
                    edges = np.concatenate( ( np.arange( 1.8, 8.7, 0.025 ), [ 12.3 ] ) ),
                    ),
                anuspec_ill = NestedDict(
                    bundle = dict(name='reactor_anu_spectra', version='v04', inactive=self.opts.flux!='ill-vogel'),
                    name = 'anuspec',
                    filename = ['data/reactor_anu_spectra/ILL/ILL_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat',
                                'data/reactor_anu_spectra/Vogel/Vogel_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat'],
                    free_params=False, # enable free spectral model
                    varmode='log',
                    varname='anue_weight_{index:02d}',
                    ns_name='spectral_weights',
                    debug = True,
                    edges = np.concatenate( ( np.arange( 1.8, 8.7, 0.025 ), [ 12.3 ] ) ),
                    ),
                offeq_correction = NestedDict(
                    bundle = dict(name='reactor_offeq_spectra',
                                  version='v03', major='ir'),
                    offeq_data = 'data/reactor_anu_spectra/Mueller/offeq/mueller_offequilibrium_corr_{isotope}.dat',
                    ),
                geonu = NestedDict(
                    bundle = dict(name='geoneutrino_spectrum', version='v01'),
                    data   = 'data/data-common/geo-neutrino/2006-sanshiro/geoneutrino-luminosity_{isotope}_truncated.knt'
                ),
                eff = NestedDict(
                    bundle = dict(
                        name='parameters',
                        version='v01'),
                    parameter="eff",
                    label='Detection efficiency',
                    pars = uncertain(0.8, 'fixed')
                    ),
                global_norm = NestedDict(
                    bundle = dict(
                        name='parameters',
                        version='v01'),
                    parameter="global_norm",
                    label='Global normalization',
                    pars = uncertain(1, 'free'),
                    ),
                fission_fractions = NestedDict(
                    bundle = dict(name="parameters_yaml_v01", major = 'i'),
                    parameter = 'fission_fractions_nominal',
                    separate_uncertainty = "fission_fractions_scale",
                    label = 'Fission fraction of {isotope} in reactor {reactor}',
                    objectize=True,
                    data = 'data/data_juno/fission_fractions/2013.12.05_xubo.yaml'
                    ),
                snf_correction = NestedDict(
                    bundle = dict(name='reactor_snf_spectra', version='v04', major='r'),
                    snf_average_spectra = './data/data-common/snf/2004.12-kopeikin/kopeikin_0412.044_spent_fuel_spectrum_smooth.dat',
                    ),
                livetime = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "livetime",
                        label = 'Livetime of {detector} in seconds',
                        pars = uncertaindict(
                            [('AD1', (6*365*seconds_per_day, 'fixed'))],
                            ),
                        ),
                baselines = NestedDict(
                        bundle = dict(name='reactor_baselines', version='v01', major = 'rd'),
                        reactors  = 'near-equal' in self.opts.reactors \
                                     and 'data/juno_nominal/coordinates_reactors_equal.py' \
                                     or 'data/juno_nominal/coordinates_reactors.py',
                        detectors = 'data/juno_nominal/coordinates_det.py',
                        unit = 'km'
                        ),
                norm = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "norm",
                        label = 'Reactor power/detection efficiency correlated normalization',
                        pars = uncertain(1.0, (2**2+1**2)**0.5, 'percent')
                        ),
                thermal_power = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "thermal_power_nominal",
                        label = 'Thermal power of {reactor} in GWt',
                        pars = uncertaindict([
                            ('TS1',  4.6),
                            ('TS2',  4.6),
                            ('TS3',  4.6),
                            ('TS4',  4.6),
                            ('YJ1',  2.9),
                            ('YJ2',  2.9),
                            ('YJ3',  2.9),
                            ('YJ4',  2.9),
                            ('YJ5',  2.9),
                            ('YJ6',  2.9),
                            ('DYB', 17.4),
                            ('HZ',  17.4),
                            ],
                            uncertainty=0.8,
                            mode='percent'
                            ),
                        separate_uncertainty = 'thermal_power_scale'
                        ),
                target_protons = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "target_protons",
                        label = 'Number of protons in {detector}',
                        pars = uncertaindict(
                            [('AD1', (1.42e33, 'fixed'))],
                            ),
                        ),
                conversion_factor =  NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter='conversion_factor',
                        label='Conversion factor from GWt to MeV',
                        #taken from transformations/neutrino/ReactorNorm.cc
                        pars = uncertain(R.NeutrinoUnits.reactorPowerConversion, 'fixed'),
                        ),
                days_in_second =  NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter='days_in_second',
                        label='Number of days in a second',
                        pars = uncertain(1.0/(24.0*60.0*60.0), 'fixed'),
                        ),
                eper_fission =  NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = 'eper_fission_nominal',
                        label = 'Energy per fission for {isotope} in MeV',
                        pars = uncertaindict(
                            [
                              ('U235',  (201.92, 0.46)),
                              ('U238',  (205.52, 0.96)),
                              ('Pu239', (209.99, 0.60)),
                              ('Pu241', (213.60, 0.65))
                              ],
                            mode='absolute'
                            ),
                        separate_uncertainty = 'eper_fission_scale'
                        ),
                lsnl = NestedDict(
                        bundle = dict( name='energy_nonlinearity_birks_cherenkov', version='v01', major=''),
                        stopping_power='data/data_juno/energy_model/2019_birks_cherenkov_v01/stoppingpower.txt',
                        annihilation_electrons=dict(
                            file='data/data_juno/energy_model/2019_birks_cherenkov_v01/hgamma2e.root',
                            histogram='hgamma2e_1KeV',
                            scale=1.0/50000 # events simulated
                            ),
                        pars = uncertaindict(
                            [
                                ('birks.Kb0',               (1.0, 'fixed')),
                                ('birks.Kb1',           (15.2e-3, 0.1776)),
                                # ('birks.Kb2',           (0.0, 'fixed')),
                                ("cherenkov.E_0",         (0.165, 'fixed')),
                                ("cherenkov.p0",  ( -7.26624e+00, 'fixed')),
                                ("cherenkov.p1",   ( 1.72463e+01, 'fixed')),
                                ("cherenkov.p2",  ( -2.18044e+01, 'fixed')),
                                ("cherenkov.p3",   ( 1.44731e+01, 'fixed')),
                                ("cherenkov.p4",   ( 3.22121e-02, 'fixed')),
                                ("Npescint",            (1341.38, 0.0059)),
                                ("kC",                      (0.5, 0.4737)),
                                ("normalizationEnergy",   (11.99, 'fixed'))
                                ],
                            mode='relative'
                            ),
                        integration_order = 2,
                        correlations_pars = [ 'birks.Kb1', 'Npescint', 'kC' ],
                        correlations = [ 1.0,   0.94, -0.97,
                                         0.94,  1.0,  -0.985,
                                        -0.97, -0.985, 1.0   ],
                        fill_matrix=True,
                        labels = dict(
                            normalizationEnergy = 'Conservative normalization point at 12 MeV'
                            ),
                        ),
                shape_uncertainty = NestedDict(
                        unc = uncertain(1.0, 1.0, 'percent'),
                        nbins = 200 # number of bins, the uncertainty is defined to
                        ),
                snf_norm = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = 'snf_norm',
                        label='SNF norm',
                        pars = uncertain(1.0, 'fixed'),
                        ),
                reactor_active_norm = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = 'reactor_active_norm',
                        label='Reactor nu (active norm)',
                        pars = uncertain(1.0, 'fixed'),
                        ),
                #
                # Backgrounds
                #
                acc_spectrum_db = NestedDict(
                    bundle    = dict(name='root_histograms_v04', inactive=True),
                    filename  = 'data/data_juno/bkg/acc/2016_acc_dayabay_p15a/dayabay_acc_spectrum_p15a.root',
                    format    = 'accidentals',
                    name      = 'acc_spectrum',
                    label     = 'Accidentals|norm spectrum',
                    normalize = True
                    ),
                acc_spectrum = NestedDict(
                    bundle    = dict(name='root_histograms_v04'),
                    filename  = 'data/data_juno/bkg/acc/2019_acc_malyshkin/acc_bckg_FVcut.root',
                    format    = 'hAcc',
                    name      = 'acc_spectrum',
                    label     = 'Accidentals|norm spectrum',
                    normalize = slice(200,-1),
                    xscale    = 1.e-3,
                    ),
                fastn_spectrum=NestedDict(
                        bundle=dict(name='histogram_flat_v01'),
                        name='fastn_spectrum',
                        edges=edges,
                        label='Fast neutron|norm spectrum',
                        normalize=(0.7, 12.0),
                        ),
                li_spectrum=NestedDict(
                    bundle    = dict(name='root_histograms_v03'),
                    filename  = 'data/data_juno/bkg/lihe/2014_lihe_ochoa/toyli9spec_BCWmodel_v1_2400.root',
                    format    = 'h_eVisAllSmeared',
                    name      = 'li_spectrum',
                    label     = '9Li spectrum|norm',
                    normalize = True,
                    ),
                he_spectrum= NestedDict(
                    bundle    = dict(name='root_histograms_v03'),
                    filename  = 'data/data_juno/bkg/lihe/2014_lihe_ochoa/toyhe8spec_BCWmodel_v1_2400.root',
                    format    = 'h_eVisAllSmeared',
                    name      = 'he_spectrum',
                    label     = '8He spectrum|norm',
                    normalize = True,
                    ),
                alphan_spectrum = NestedDict(
                    bundle    = dict(name='root_histograms_v03'),
                    filename  = 'data/data_juno/bkg/alphan/2012_dayabay_alphan/P12B_alphan_2400.root',
                    format    = 'AD1',
                    name      = 'alphan_spectrum',
                    label     = 'C(alpha,n) spectrum|(norm)',
                    normalize = True,
                    ),
                lihe_fractions=NestedDict(
                        bundle = dict(name='var_fractions_v02'),
                        names = [ 'li', 'he' ],
                        format = 'frac_{component}',
                        fractions = uncertaindict(
                            li = ( 0.95, 0.05, 'relative' )
                            ),
                        ),
                    # bkg_spectra = NestedDict(
                    # bundle    = dict(name='root_histograms_v05'),
                    # filename  = 'data/data_juno/bkg/group/2020-05-JUNO-YB/JunoBkg_evis_2400.root',
                    # formats    = ['AccBkgHistogramAD',           'Li9BkgHistogramAD',   'FnBkgHistogramAD',       'AlphaNBkgHistogramAD',   'GeoNuHistogramAD'],
                    # names      = ['acc_spectrum',                'lihe_spectrum',       'fn_spectrum',            'alphan_spectrum',        'geonu_spectrum'],
                    # labels     = ['Accidentals|(norm spectrum)', '9Li|(norm spectrum)', 'Fast n|(norm spectrum)', 'AlphaN|(norm spectrum)', 'GeoNu combined|(norm spectrum)'],
                    # normalize = True,
                    # ),
                acc_rate = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = 'acc_rate',
                        label='Acc rate',
                        pars = uncertain(0.9, 1, 'percent'),
                        separate_uncertainty='acc_norm',
                        ),
                fastn_rate = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = 'fastn_rate',
                        label='Fast n rate',
                        pars = uncertain(0.1, 100, 'percent'),
                        separate_uncertainty='fastn_norm',
                        ),
                lihe_rate = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = 'lihe_rate',
                        label='9Li/8He rate',
                        pars = uncertain(1.6, 20, 'percent'),
                        separate_uncertainty='lihe_norm',
                        ),
                alphan_rate = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = 'alphan_rate',
                        label='C(alpha,n)O rate',
                        pars = uncertain(0.05, 50, 'percent'),
                        separate_uncertainty='alphan_norm',
                        ),
                )

        if 'eres' in self.opts.energy_model:
            bconf = self.opts.eres_b_relsigma and (self.opts.eres_b_relsigma,
                                                   'relative') or ('fixed', )
            self.cfg.eres = NestedDict(
                bundle=dict(name='detector_eres_normal',
                            version='v01',
                            major=''),
                # pars: sigma_e/e = sqrt( a^2 + b^2/E + c^2/E^2 ),
                parameter='eres',
                pars=uncertaindict([('a', (0.000, 'fixed')),
                                    ('b', (self.opts.eres_sigma, ) + bconf),
                                    ('c', (0.000, 'fixed'))]),
                expose_matrix=False)
        elif 'multieres' in self.opts.energy_model:
            self.cfg.subdetector_fraction = NestedDict(
                bundle=dict(name="parameters", version="v03"),
                parameter="subdetector_fraction",
                label='Subdetector fraction weight for {subdetector}',
                pars=uncertaindict(
                    [(subdet_name, (0.2, 0.04, 'relative'))
                     for subdet_name in self.subdetectors_names], ),
                covariance=
                'data/data_juno/energy_resolution/2019_subdetector_eres_n200_proper/subdetector5_cov.txt'
            )
            self.cfg.multieres = NestedDict(
                bundle=dict(name='detector_multieres_stats',
                            version='v01',
                            major='s'),
                # pars: sigma_e/e = sqrt(b^2/E),
                parameter='eres',
                relsigma=self.opts.eres_b_relsigma,
                nph=
                'data/data_juno/energy_resolution/2019_subdetector_eres_n200_proper/subdetector5_nph.txt',
                rescale_nph=self.opts.eres_npe,
                expose_matrix=False)

        if not 'lsnl' in self.opts.correlation:
            self.cfg.lsnl.correlations = None
            self.cfg.lsnl.correlations_pars = None
        if not 'subdetectors' in self.opts.correlation:
            self.cfg.subdetector_fraction.correlations = None

        self.cfg.eff.pars = uncertain(0.73, 'fixed')
        self.cfg.livetime.pars['AD1'] = uncertain(6 * 330 * seconds_per_day,
                                                  'fixed')
Пример #4
0
        )
cfg.detector.iav = NestedDict(
        bundle = 'detector_iav_db_root_v01',
        parname = 'OffdiagScale.{}',
        scale   = uncertain(1.0, 4, 'percent'),
        ndiag = 1,
        filename = 'data/dayabay/tmp/detector_iavMatrix_P14A_LS.root',
        matrixname = 'iav_matrix'
        )
cfg.detector.eres = NestedDict(
        bundle = 'detector_eres_common3',
        # pars: sigma_e/e = sqrt( a^2 + b^2/E + c^2/E^2 ),
        pars = uncertaindict(
            [('Eres_a', 0.014764) ,
             ('Eres_b', 0.0869) ,
             ('Eres_c', 0.0271)],
            mode='percent',
            uncertainty=30
            )
        )
cfg.detector.rebin = NestedDict(
        bundle = 'rebin',
        rounding = 3,
        edges = [ 0.0, 5.0, 10.0 ]
        )

#
# Define namespaces
#
namespaces = cfg.detector.detectors
Пример #5
0
def main(opts):
    global savefig
    cfg = NestedDict(
        bundle = dict(
            name='energy_nonlinearity_birks_cherenkov',
            version='v01',
            nidx=[ ('r', 'reference', ['R1', 'R2']) ],
            major=[],
            ),
        stopping_power='stoppingpower.txt',
        annihilation_electrons=dict(
            file='input/hgamma2e.root',
            histogram='hgamma2e_1KeV',
            scale=1.0/50000 # event simulated
            ),
        pars = uncertaindict(
            [
                ('birks.Kb0',               (1.0, 'fixed')),
                ('birks.Kb1',           (15.2e-3, 0.1776)),
                # ('birks.Kb2',           (0.0, 'fixed')),
                ("cherenkov.E_0",         (0.165, 'fixed')),
                ("cherenkov.p0",  ( -7.26624e+00, 'fixed')),
                ("cherenkov.p1",   ( 1.72463e+01, 'fixed')),
                ("cherenkov.p2",  ( -2.18044e+01, 'fixed')),
                ("cherenkov.p3",   ( 1.44731e+01, 'fixed')),
                ("cherenkov.p4",   ( 3.22121e-02, 'fixed')),
                ("Npescint",            (1341.38, 0.0059)),
                ("kC",                      (0.5, 0.4737)),
                ("normalizationEnergy",   (2.505, 'fixed'))
                # ("normalizationEnergy",   (12.0, 'fixed'))
             ],
            mode='relative'
            ),
        integration_order = 2,
        correlations_pars = [ 'birks.Kb1', 'Npescint', 'kC' ],
        correlations = [ 1.0,   0.94, -0.97,
                         0.94,  1.0,  -0.985,
                        -0.97, -0.985, 1.0   ],
        fill_matrix=True,
        labels = dict(
            normalizationEnergy = '60Co total gamma energy, MeV'
            # normalizationEnergy = 'Pessimistic norm point'
            ),
        )

    ns = env.globalns('energy')
    quench = execute_bundle(cfg, namespace=ns)
    ns.printparameters(labels=True)
    print()
    normE = ns['normalizationEnergy'].value()

    #
    # Input bins
    #
    evis_edges_full_input = N.arange(0.0, 12.0+1.e-6, 0.025)
    evis_edges_full_hist = C.Histogram(evis_edges_full_input, labels='Evis bin edges')
    evis_edges_full_hist >> quench.context.inputs.evis_edges_hist['00']

    #
    # HistNonLinearity transformation
    #
    reference_histogram1_input = N.zeros(evis_edges_full_input.size-1)
    reference_histogram2_input = reference_histogram1_input.copy()
    reference_histogram1_input+=1.0
    # reference_histogram2_input[[10, 20, 50, 100, 200, 300, 400]]=1.0
    reference_histogram2_input[[10, 20]]=1.0
    reference_histogram1 = C.Histogram(evis_edges_full_input, reference_histogram1_input, labels='Reference hist 1')
    reference_histogram2 = C.Histogram(evis_edges_full_input, reference_histogram2_input, labels='Reference hist 2')

    reference_histogram1 >> quench.context.inputs.lsnl.R1.values()
    reference_histogram2 >> quench.context.inputs.lsnl.R2.values()
    reference_smeared1 = quench.context.outputs.lsnl.R1
    reference_smeared2 = quench.context.outputs.lsnl.R2

    #
    # Plots and tests
    #
    if opts.output and opts.output.endswith('.pdf'):
        pdfpages = PdfPages(opts.output)
        pdfpagesfilename=opts.output
        savefig_old=savefig
        pdf=pdfpages.__enter__()
        def savefig(*args, **kwargs):
            if opts.individual and args and args[0]:
                savefig_old(*args, **kwargs)
            pdf.savefig()
    else:
        pdf = None
        pdfpagesfilename = ''

    #
    # Plots and tests
    #
    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'Edep, MeV' )
    ax.set_ylabel( 'dE/dx' )
    ax.set_title( 'Stopping power' )

    quench.birks_quenching_p.points.points.plot_vs(quench.birks_e_p.points.points, '-', markerfacecolor='none', markersize=2.0, label='input')
    ax.legend(loc='upper right')
    savefig(opts.output, suffix='_spower')

    ax.set_xlim(left=0.001)
    ax.set_xscale('log')
    savefig(opts.output, suffix='_spower_log')

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'Edep, MeV' )
    ax.set_ylabel( '' )
    ax.set_title( "Birk's integrand" )

    quench.birks_integrand_raw.polyratio.ratio.plot_vs(quench.birks_e_p.points.points, '-o', alpha=0.5, markerfacecolor='none', markersize=2.0, label='raw')
    # birks_integrand_interpolated.plot_vs(integrator_ekin.points.x,   '-', alpha=0.5, markerfacecolor='none', markersize=2.0, label='interpolated')
    lines=quench.birks_integrand_interpolated.plot_vs(quench.integrator_ekin.points.x,   '-', alpha=0.5, markerfacecolor='none', markersize=2.0, label='interpolated')
    quench.birks_integrand_interpolated.plot_vs(quench.integrator_ekin.points.x, 'o', alpha=0.5, color='black', markersize=0.6)
    ax.legend(loc='lower right')

    savefig()

    ax.set_xlim(left=0.0001)
    ax.set_ylim(bottom=0.3)
    # ax.set_yscale('log')
    ax.set_xscale('log')
    savefig(opts.output, suffix='_spower_int')

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'Edep, MeV' )
    ax.set_ylabel( '' )
    ax.set_title( "Birk's integral (bin by bin)" )

    quench.birks_integral.plot_hist()

    savefig()

    ax.set_xlim(left=0.0001)
    ax.set_ylim(bottom=0.0)
    # ax.set_yscale('log')
    ax.set_xscale('log')
    ax.set_ylim(auto=True)
    savefig(opts.output, suffix='_spower_intc')

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'Edep, MeV' )
    ax.set_ylabel( 'Evis, MeV' )
    ax.set_title( 'Electron energy (Birks)' )
    #  birks_accumulator.reduction.out.plot_vs(integrator_evis.transformations.hist, '-', markerfacecolor='none', markersize=2.0, label='partial sum')
    quench.birks_accumulator.reduction.plot_vs(quench.histoffset.histedges.points_offset)
    ax.plot([0.0, 12.0], [0.0, 12.0], '--', alpha=0.5)

    savefig(opts.output, suffix='_birks_evis')

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'Edep, MeV' )
    ax.set_ylabel( 'Evis/Edep' )
    ax.set_title( 'Electron energy (Birks)' )
    #  birks_accumulator.reduction.out.plot_vs(integrator_evis.transformations.hist, '-', markerfacecolor='none', markersize=2.0, label='partial sum')
    quench.histoffset.histedges.points_offset.vs_plot(quench.birks_accumulator.reduction.data()/quench.histoffset.histedges.points_offset.data())
    ax.set_ylim(0.40, 1.0)

    savefig(opts.output, suffix='_birks_evis_rel')

    ax.set_xlim(1.e-3, 2.0)
    ax.set_xscale('log')
    savefig()

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'E, MeV' )
    ax.set_ylabel( 'Npe' )
    ax.set_title( 'Cherenkov photons' )
    quench.cherenkov.cherenkov.ch_npe.plot_vs(quench.histoffset.histedges.points_offset)

    savefig(opts.output, suffix='_cherenkov_npe')

    ax.set_ylim(bottom=0.1)
    ax.set_yscale('log')
    savefig()

    ax.set_xlim(0.0, 2.0)
    # ax.set_ylim(0.0, 200.0)
    savefig()

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'E, MeV' )
    ax.set_ylabel( 'Npe' )
    ax.set_title( 'Electron model' )
    quench.electron_model.single().plot_vs(quench.histoffset.histedges.points_offset)

    savefig(opts.output, suffix='_electron')

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'E, MeV' )
    ax.set_ylabel( 'Npe' )
    ax.set_title( 'Electron model (low energy view)' )
    annihilation_gamma_evis = quench.npe_positron_offset.normconvolution.result.data()[0]
    label = 'Annihilation contribution=%.2f Npe'%annihilation_gamma_evis
    quench.electron_model_lowe.plot_vs(quench.ekin_edges_lowe, 'o', markerfacecolor='none', label='data')
    quench.electron_model_lowe_interpolated.single().plot_vs(quench.annihilation_electrons_centers.single(), '-', label='interpolation\n%s'%label)

    ax.legend(loc='upper left')

    savefig(opts.output, suffix='_electron_lowe')

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'E, MeV' )
    ax.set_ylabel( 'Npe' )
    ax.set_title( 'Total Npe' )
    quench.positron_model.sum.outputs[0].plot_vs(quench.histoffset.histedges.points_truncated)

    savefig(opts.output, suffix='_total_npe')

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'Edep, MeV' )
    ax.set_ylabel( 'Evis, MeV' )
    ax.set_title( 'Positron energy model' )
    quench.positron_model_scaled.plot_vs(quench.histoffset.histedges.points_truncated, label='definition range')
    quench.positron_model_scaled_full.plot_vs(quench.histoffset.histedges.points, '--', linewidth=1., label='full range', zorder=0.5)
    ax.vlines(normE, 0.0, normE, linestyle=':')
    ax.hlines(normE, 0.0, normE, linestyle=':')
    ax.legend(loc='upper left')

    savefig(opts.output, suffix='_total')

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'Edep, MeV' )
    ax.set_ylabel( 'Evis/Edep' )
    ax.set_title( 'Positron energy nonlineairty' )
    quench.positron_model_relative.single().plot_vs(quench.histoffset.histedges.points_truncated, label='definition range')
    quench.positron_model_relative_full.plot_vs(quench.histoffset.histedges.points, '--', linewidth=1., label='full range', zorder=0.5)
    ax.vlines(normE, 0.0, 1.0, linestyle=':')

    ax.legend(loc='lower right')
    ax.set_ylim(0.85, 1.1)

    savefig(opts.output, suffix='_total_relative')

    ax.set_xlim(0.75, 3)
    savefig(opts.output, suffix='_total_relative1')

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel('Etrue, MeV')
    ax.set_ylabel('Edep, MeV')
    ax.set_title( 'Smearing matrix' )

    quench.pm_histsmear.matrix.FakeMatrix.plot_matshow(mask=0.0, extent=[evis_edges_full_input.min(), evis_edges_full_input.max(), evis_edges_full_input.max(), evis_edges_full_input.min()], colorbar=True)
    ax.plot([0.0, 12.0], [0.0, 12.0], '--', alpha=0.5, linewidth=1.0, color='magenta')
    ax.vlines(normE, 0.0, normE, linestyle=':')
    ax.hlines(normE, 0.0, normE, linestyle=':')

    savefig(opts.output, suffix='_matrix')

    ax.set_xlim(0.8, 3.0)
    ax.set_ylim(3.0, 0.8)
    savefig(opts.output, suffix='_matrix_zoom')

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'E, MeV' )
    ax.set_ylabel( '' )
    ax.set_title( 'Reference histogram 1' )

    reference_histogram1.single().plot_hist(linewidth=0.5, alpha=1.0, label='original')
    reference_smeared1.single().plot_hist(  linewidth=0.5, alpha=1.0, label='smeared')

    ax.legend(loc='upper right')

    savefig(opts.output, suffix='_refsmear1')

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'E, MeV' )
    ax.set_ylabel( '' )
    ax.set_title( 'Matrix projections' )

    mat = quench.pm_histsmear.matrix.FakeMatrix.data()
    proj0 = mat.sum(axis=0)
    proj1 = mat.sum(axis=1)

    plot_hist(evis_edges_full_input, proj0, alpha=0.7, linewidth=1.0, label='Projection 0: Edep view')
    plot_hist(evis_edges_full_input, proj1, alpha=0.7, linewidth=1.0, label='Projection 1: Evis')

    ax.legend(loc='upper right')

    savefig(opts.output, suffix='_matrix_projections')

    if opts.mapping:
        fig = P.figure()
        ax = P.subplot( 111 )
        ax.minorticks_on()
        ax.grid()
        ax.set_xlabel( 'E, MeV' )
        ax.set_ylabel( '' )
        ax.set_title( 'Mapping' )

        positron_model_scaled_data = quench.positron_model_scaled.single().data()
        for e1, e2 in zip(quench.histoffset.histedges.points_truncated.data(), positron_model_scaled_data):
            if e2>12.0 or e2<1.022:
                alpha = 0.05
            else:
                alpha = 0.7
            ax.plot( [e1, e2], [1.0, 0.0], '-', linewidth=2.0, alpha=alpha )
        ax.axvline(1.022, linestyle='--', linewidth=1.0)
        ax.axvline(12.0, linestyle='--', linewidth=1.0)

        fig = P.figure()
        ax = P.subplot( 111 )
        ax.minorticks_on()
        # ax.grid()
        ax.set_xlabel( 'E, MeV' )
        ax.set_ylabel( '' )
        ax.set_title( 'Mapping' )

        positron_model_scaled_data = quench.positron_model_scaled.single().data()
        for e1, e2 in zip(quench.histoffset.histedges.points_truncated.data(), positron_model_scaled_data):
            if e2>12.0 or e2<1.022:
                alpha = 0.05
            else:
                alpha = 0.7
            ax.plot( [e1, e2], [1.1, 0.9], '-', linewidth=2.0, alpha=alpha )

        for e1 in quench.histoffset.histedges.points.data():
            ax.axvline(e1, linestyle=':', linewidth=1.0, color='black')

        ax.axvline(1.022, linestyle='--', linewidth=1.0)
        ax.axvline(12.0, linestyle='--', linewidth=1.0)

        # ax.legend(loc='upper right')

        savefig(opts.output, suffix='_mapping_bins')

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'E, MeV' )
    ax.set_ylabel( '' )
    ax.set_title( 'Reference histogram 2' )

    reference_histogram2.single().plot_hist(linewidth=0.5, alpha=1.0, label='original')
    reference_smeared2.single().plot_hist(  linewidth=0.5, alpha=1.0, label='smeared')
    ax.vlines(normE, 0.0, 1.0, linestyle=':')

    ax.legend(loc='upper right')

    savefig(opts.output, suffix='_refsmear2')

    fig = P.figure()
    ax = P.subplot( 111 )
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel( 'E, MeV' )
    ax.set_ylabel( 'Entries' )
    ax.set_title( 'Annihilation gamma electrons' )

    plot_hist(quench.annihilation_electrons_edges_input, quench.annihilation_electrons_p_input)
    ax.set_yscale('log')
    savefig(opts.output, suffix='_annihilation_electrons')

    ax.set_yscale('linear')
    ax.set_xlim(0.0, 0.1)
    savefig(opts.output, suffix='_annihilation_electrons_lin')

    if pdfpages:
        pdfpages.__exit__(None,None,None)
        print('Write output figure to', pdfpagesfilename)

    savegraph(quench.histoffset.histedges.points_truncated, opts.graph, namespace=ns)

    if opts.show:
        P.show()
Пример #6
0
        nidx=[
            ('s', 'source', ['SA', 'SB']),
            'name',
            ('d', 'detector', ['D1', 'D2', 'D3']),
        ],
    ),
    parameter='rate0',
    label='Flux normalization {source}->{detector}',
    separate_uncertainty='norm0',
    pars=uncertaindict(
        [
            ('SA.D1', 1.0),
            ('SB.D1', 2.0),
            ('SA.D2', 3.0),
            ('SB.D2', 4.0),
            ('SA.D3', 5.0),
            ('SB.D3', 6.0),
            ('SA.D4', 7.0),
            ('SB.D4', 8.0),
        ],
        uncertainty=1.0,
        mode='percent',
    ),
)

cfg2 = NestedDict(
    bundle=dict(name='parameters',
                version='v01',
                nidx=[('s', 'source', ['SA', 'SB']),
                      ('d', 'detector', ['D1', 'D2', 'D3']),
                      ('e', 'element', ['e0', 'e1'])],
                major=('s', 'd')),
Пример #7
0
print()
# Provide the configuration. The configuration tells the Expression on how to build each variable/output.
cfg = NestedDict(
    ta=NestedDict(bundle=dict(name='dummy', version='v01'),
                  name='ta',
                  input=False,
                  size=10,
                  debug=False),
    tb=NestedDict(bundle=dict(name='dummy', version='v01'),
                  name='tb',
                  input=False,
                  size=10,
                  debug=False),
    va=NestedDict(
        bundle=dict(name='dummyvar', version='v01'),
        variables=uncertaindict([('vara', (2, 0.1))], mode='percent'),
    ),
    vb=NestedDict(
        bundle=dict(name='dummyvar', version='v01'),
        variables=uncertaindict([('varb', (3, 0.1))], mode='percent'),
    ),
)
# Build the expression for given configuration. The output is a context, that contains the inputs and outputs.
context = ExpressionContext(cfg)
a.build(context)

from gna.bindings import OutputDescriptor
# Print inputs
print('Inputs')
print(context.inputs)
Пример #8
0
                   debug=False),
    offset=NestedDict(bundle='dummy',
                      name='offset',
                      input=False,
                      size=10,
                      debug=False),
    function=NestedDict(
        bundle='dummy',
        name='function',
        label='function\ni={index_i}, j={index_j}, k={index_k}',
        input=1,
        size=10,
        debug=False),
    scale=NestedDict(bundle='dummyvar',
                     variables=uncertaindict([
                         ('scale', (2, 0.1)),
                     ],
                                             mode='percent')),
)
# Build the expression for given configuration. The output is a context, that contains the inputs and outputs.
context = ExpressionContext(cfg)
a.build(context)

from gna.bindings import OutputDescriptor
# Print inputs
print('Inputs')
print(context.inputs)

# Print outputs
print()
print('Outputs')
print(context.outputs)
Пример #9
0
     bundle='dayabay_reactor_burning_info_v01',
     reactor_info='data/dayabay/reactor/power/WeeklyAvg_P15A_v1.txt.npz',
     fission_uncertainty_info=
     'data/dayabay/reactor/fission_fraction/2013.12.05_xubo.py',
     provides=['thermal_power', 'fission_fractions']),
 iav=NestedDict(bundle='detector_iav_db_root_v02',
                parname='OffdiagScale',
                scale=uncertain(1.0, 4, 'percent'),
                ndiag=1,
                filename='data/dayabay/tmp/detector_iavMatrix_P14A_LS.root',
                matrixname='iav_matrix'),
 eres=NestedDict(
     bundle='detector_eres_common3_v02',
     # pars: sigma_e/e = sqrt( a^2 + b^2/E + c^2/E^2 ),
     pars=uncertaindict([('eres.a', 0.014764), ('eres.b', 0.0869),
                         ('eres.c', 0.0271)],
                        mode='percent',
                        uncertainty=30),
     provides=['eres', 'eres_matrix'],
     expose_matrix=True),
 lsnl=NestedDict(
     bundle='detector_nonlinearity_db_root_v02',
     names=['nominal', 'pull0', 'pull1', 'pull2', 'pull3'],
     filename='data/dayabay/tmp/detector_nl_consModel_450itr.root',
     parnames=dict(lsnl='lsnl_weight', escale='escale'),
     par=uncertain(1.0, 0.2, 'percent'),
     edges='evis_edges',
     provides=[
         'lsnl', 'lsnl_component', 'escale', 'lsnl_weight', 'lsnl_edges'
     ]),
 rebin=NestedDict(bundle='rebin_v02',
                  rounding=3,
Пример #10
0
    def init_configuration(self):
        mode_yb = self.opts.mode == 'yb'
        self.cfg = NestedDict(
                kinint2 = NestedDict(
                    bundle   = dict(name='integral_2d1d', version='v03', names=dict(integral='kinint2'), inactive=mode_yb),
                    variables = ('evis', 'ctheta'),
                    edges    = np.arange(0.6, 12.001, 0.01),
                    #  edges    = np.linspace(0.0, 12.001, 601),
                    xorders   = 4,
                    yorder   = 5,
                    ),
                rebin = NestedDict(
                        bundle = dict(name='rebin', version='v03', major='', inactive=mode_yb),
                        rounding = 3,
                        edges = np.concatenate(( [0.7], np.arange(1, 8.001, 0.02), [9.0, 12.0] )),
                        name = 'rebin',
                        label = 'Final histogram {detector}'
                        ),
                kinint2_enu = NestedDict(
                    bundle   = dict(name='integral_2d1d', version='v03', names=dict(integral='kinint2'), inactive=not mode_yb),
                    variables = ('enu_in', 'ctheta'),
                    edges     = np.linspace(1.8, 8.0, 601),
                    xorders   = 4,
                    yorder   = 5,
                    ),
                rebin_yb = NestedDict(
                        bundle = dict(name='rebin', version='v03', major='', inactive=not mode_yb),
                        rounding = 3,
                        edges = np.linspace(1.8, 8.0, 201),
                        name = 'rebin',
                        label = 'Final histogram {detector}'
                        ),
                ibd_xsec = NestedDict(
                    bundle = dict(name='xsec_ibd', version='v02'),
                    order = 1,
                    ),
                oscprob = NestedDict(
                    bundle = dict(name='oscprob', version='v03', major='rdc'),
                    pdgyear = self.opts.pdgyear
                    ),
                anuspec = NestedDict(
                    bundle = dict(name='reactor_anu_spectra', version='v03'),
                    name = 'anuspec',
                    filename = ['data/reactor_anu_spectra/Huber/Huber_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat',
                        'data/reactor_anu_spectra/Mueller/Mueller_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat'],
                    # strategy = dict( underflow='constant', overflow='extrapolate' ),
                    edges = np.concatenate( ( np.arange( 1.8, 8.7, 0.025 ), [ 12.3 ] ) ),
                    ),
                anuspec_1 = NestedDict(
                    bundle = dict(name='reactor_anu_spectra', version='v03'),
                    name = 'anuspec',
                    filename = ['data/reactor_anu_spectra/Huber/Huber_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat',
                                'data/reactor_anu_spectra/Mueller/Mueller_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat'],
                    # strategy = dict( underflow='constant', overflow='extrapolate' ),
                    edges = np.concatenate( ( np.arange( 1.8, 8.7, 0.05 ), [ 12.3 ] ) ),
                    ),
                eff = NestedDict(
                    bundle = dict(
                        name='parameters',
                        version='v01'),
                    parameter="eff",
                    label='Detection efficiency',
                    pars = uncertain(0.8, 'fixed')
                    ),
                global_norm = NestedDict(
                    bundle = dict(
                        name='parameters',
                        version='v01'),
                    parameter="global_norm",
                    label='Global normalization',
                    pars = uncertain(1, 'free'),
                    ),
                fission_fractions = NestedDict(
                    bundle = dict(name="parameters",
                        version = "v01",
                        major = 'i'
                        ),
                    parameter = "fission_fractions",
                    label = 'Fission fraction of {isotope} in reactor {reactor}',
                    objectize=True,
                    pars = uncertaindict([
                        ('U235',  0.60),
                        ('Pu239', 0.27),
                        ('U238',  0.07),
                        ('Pu241', 0.06)
                        ],
                        # uncertainty = 30.0,
                        # mode = 'percent',
                        mode = 'fixed',
                        ),
                    ),
                livetime = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "livetime",
                        label = 'Livetime of {detector} in seconds',
                        pars = uncertaindict(
                            [('AD1', (6*365*seconds_per_day, 'fixed'))],
                            ),
                        ),
                baselines = NestedDict(
                        bundle = dict(name='reactor_baselines', version='v01', major = 'rd'),
                        reactors  = 'near-equal' in self.opts.reactors \
                                     and 'data/juno_nominal/coordinates_reactors_equal.py' \
                                     or 'data/juno_nominal/coordinates_reactors.py',
                        detectors = 'data/juno_nominal/coordinates_det.py',
                        unit = 'km'
                        ),
                norm = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "norm",
                        label = 'Reactor power/detection efficiency correlated normalization',
                        pars = uncertain(1.0, (2**2+1**2)**0.5, 'percent')
                        ),
                thermal_power = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "thermal_power",
                        label = 'Thermal power of {reactor} in GWt',
                        pars = uncertaindict([
                            ('TS1',  4.6),
                            ('TS2',  4.6),
                            ('TS3',  4.6),
                            ('TS4',  4.6),
                            ('YJ1',  2.9),
                            ('YJ2',  2.9),
                            ('YJ3',  2.9),
                            ('YJ4',  2.9),
                            ('YJ5',  2.9),
                            ('YJ6',  2.9),
                            ('DYB', 17.4),
                            ('HZ',  17.4),
                            ],
                            uncertainty=0.8,
                            mode='percent'
                            ),
                        ),
                target_protons = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "target_protons",
                        label = 'Number of protons in {detector}',
                        pars = uncertaindict(
                            [('AD1', (1.42e33, 'fixed'))],
                            ),
                        ),
                conversion_factor =  NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter='conversion_factor',
                        label='Conversion factor from GWt to MeV',
                        #taken from transformations/neutrino/ReactorNorm.cc
                        pars = uncertain(R.NeutrinoUnits.reactorPowerConversion, 'fixed'),
                        ),
                eper_fission =  NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "eper_fission",
                        label = 'Energy per fission for {isotope} in MeV',
                        pars = uncertaindict(
                            [
                              # ('U235',  (201.92, 0.46)),
                              # ('U238',  (205.52, 0.96)),
                              # ('Pu239', (209.99, 0.60)),
                              # ('Pu241', (213.60, 0.65))
                              ('U235',  201.92),
                              ('U238',  205.52),
                              ('Pu239', 209.99),
                              ('Pu241', 213.60)
                              ],
                            # mode='absolute'
                            mode='fixed'
                            ),
                        ),
                lsnl = NestedDict(
                        bundle = dict( name='energy_nonlinearity_birks_cherenkov', version='v01', major=''),
                        stopping_power='data/data_juno/energy_model/2019_birks_cherenkov_v01/stoppingpower.txt',
                        annihilation_electrons=dict(
                            file='data/data_juno/energy_model/2019_birks_cherenkov_v01/hgamma2e.root',
                            histogram='hgamma2e_1KeV',
                            scale=1.0/50000 # events simulated
                            ),
                        pars = uncertaindict(
                            [
                                ('birks.Kb0',               (1.0, 'fixed')),
                                ('birks.Kb1',           (15.2e-3, 0.1776)),
                                # ('birks.Kb2',           (0.0, 'fixed')),
                                ("cherenkov.E_0",         (0.165, 'fixed')),
                                ("cherenkov.p0",  ( -7.26624e+00, 'fixed')),
                                ("cherenkov.p1",   ( 1.72463e+01, 'fixed')),
                                ("cherenkov.p2",  ( -2.18044e+01, 'fixed')),
                                ("cherenkov.p3",   ( 1.44731e+01, 'fixed')),
                                ("cherenkov.p4",   ( 3.22121e-02, 'fixed')),
                                ("Npescint",            (1341.38, 0.0059)),
                                ("kC",                      (0.5, 0.4737)),
                                ("normalizationEnergy",   (12.0, 'fixed'))
                                ],
                            mode='relative'
                            ),
                        integration_order = 2,
                        correlations_pars = [ 'birks.Kb1', 'Npescint', 'kC' ],
                        correlations = [ 1.0,   0.94, -0.97,
                                         0.94,  1.0,  -0.985,
                                        -0.97, -0.985, 1.0   ],
                        fill_matrix=True,
                        labels = dict(
                            normalizationEnergy = 'Conservative normalization point at 12 MeV'
                            ),
                        ),
                eres = NestedDict(
                        bundle = dict(name='detector_eres_normal', version='v01', major='', inactive='multieres' in self.opts.energy_model),
                        # pars: sigma_e/e = sqrt( a^2 + b^2/E + c^2/E^2 ),
                        parameter = 'eres',
                        pars = uncertaindict([
                            ('a', (0.000, 'fixed')),
                            ('b', (0.03, 'fixed')),
                            ('c', (0.000, 'fixed'))
                            ]),
                        expose_matrix = False
                        ),
                subdetector_fraction = NestedDict(
                        bundle = dict(name="parameters", version = "v02"),
                        parameter = "subdetector_fraction",
                        label = 'Subdetector fraction weight for {subdetector}',
                        pars = uncertaindict(
                            [(subdet_name, (1.0/self.subdetectors_number, 0.04, 'relative')) for subdet_name in self.subdetectors_names],
                            ),
                        correlations = 'data/data_juno/energy_resolution/2019_subdetector_eres_n200/corrmap_xuyu.txt'
                        ),
                multieres = NestedDict(
                        bundle = dict(name='detector_multieres_stats', version='v01', major='s', inactive='multieres' not in self.opts.energy_model),
                        # pars: sigma_e/e = sqrt(b^2/E),
                        parameter = 'eres',
                        nph = 'data/data_juno/energy_resolution/2019_subdetector_eres_n200/subdetector200_nph.txt',
                        expose_matrix = False
                        ),
                shape_uncertainty = NestedDict(
                        unc = uncertain(1.0, 1.0, 'percent'),
                        nbins = 200 # number of bins, the uncertainty is defined to
                        )
                )

        if mode_yb:
            from physlib import PhysicsConstants
            pc = PhysicsConstants(2016)
            shift = pc.DeltaNP - pc.ElectronMass
            histshift = R.HistEdgesLinear(1.0, -shift)
            self.cfg.enuToEvis0 = NestedDict(
                bundle=dict(name='predefined', version='v01'),
                name='enuToEvis0',
                inputs=(histshift.histedges.hist_in, ),
                outputs=histshift.histedges.hist,
                object=histshift)
        if not 'lsnl' in self.opts.correlation:
            self.cfg.lsnl.correlations = None
            self.cfg.lsnl.correlations_pars = None
        if not 'subdetectors' in self.opts.correlation:
            self.cfg.subdetector_fraction.correlations = None

        if self.opts.parameters in ['yb', 'yb-noosc']:
            self.cfg.eff.pars = uncertain(0.73, 'fixed')
            self.cfg.livetime.pars['AD1'] = uncertain(
                6 * 330 * seconds_per_day, 'fixed')
Пример #11
0
import load
from gna.bundle import execute_bundle
from gna.configurator import NestedDict, uncertaindict, uncertain
from gna.env import env

#
# Bundle configuration
#
cfg = NestedDict(
    bundle=dict(
        name='parameters',
        version='ex01',
    ),
    pars=uncertaindict([('par_a', (1.0, 1.0, 'percent')),
                        ('par_b', (2.0, 0.01, 'relative')),
                        ('par_c', (3.0, 0.5, 'absolute')),
                        ('group.a', (1.0, 'free')),
                        ('group.b',
                         (1.0, 'fixed', 'Labeled fixed parameter'))], ),
)

#
# Execute bundle configuration
#
b1 = execute_bundle(cfg)

#
# Print the parameters
#
env.globalns.printparameters(labels=True)
Пример #12
0
from gna.env import env
from gna.bindings import common
from gna import constructors as C
import numpy as np
from matplotlib import pyplot as plt

cfg = NestedDict(
    bundle=dict(
        name='detector_eres',
        version='ex01',
    ),
    parameter='eres',
    pars=uncertaindict([
        ('a', 0.01),
        ('b', 0.09),
        ('c', 0.03),
    ],
                       mode='percent',
                       uncertainty=30.0),
)
b = execute_bundle(cfg)
env.globalns.printparameters(labels=True)
print()

#
# Prepare inputs
#
emin, emax = 0.0, 12.0
nbins = 240
edges = np.linspace(emin, emax, nbins + 1, dtype='d')
data = np.zeros(nbins, dtype='d')
Пример #13
0
            'name',
            ('d', 'detector', ['D1', 'D2', 'D3']),
        ],
    ),
    # Parameter name to be defined
    parameter='rate0',
    # Label format
    label='Flux normalization {source}->{detector}',
    # Dictionary with parameter values and uncertainties
    pars=uncertaindict(
        [
            ('SA.D1', 1.0),
            ('SB.D1', 2.0),
            ('SA.D2', 3.0),
            ('SB.D2', 4.0),
            ('SA.D3', 5.0),
            ('SB.D3', 6.0),
            ('SA.D4', 7.0),
            ('SB.D4', 8.0),
        ],
        uncertainty=1.0,
        mode='percent',
    ),
)
b1 = execute_bundle(cfg1, namespace=env.globalns('bundle1'))
env.globalns('bundle1').printparameters(labels=True)
print()

#
# List of parameters 2
#
cfg2 = NestedDict(
Пример #14
0
Файл: juno.py Проект: gnafit/gna
     provides = [ 'eff', 'effunc_corr', 'effunc_uncorr', 'global_norm' ],
     efficiencies = 'data/dayabay/efficiency/P15A_efficiency.py'
     ),
 fission_fractions = NestedDict(
     bundle = dict(name="parameters",
                   version = "v01",
                   nidx = [indices[1], indices[2]],
                   major = 'i'
                   ),
              parameter = "fission_fractions",
              label = 'Fission fraction of {isotope} in reactor {reactor}',
              pars = uncertaindict([
                  ('U235',  0.60),
                  ('Pu239', 0.27),
                  ('U238',  0.07),
                  ('Pu241', 0.06)
                  ],
                 uncertainty = 30.0,
                 mode = 'percent',
             ),
       provides=['fission_fractions']
     ),
 livetime = NestedDict(
         bundle = dict(name="parameters",
                       version = "v01",
                       nidx = [indices[0]]),
         parameter = "livetime",
         label = 'Livetime of {detector} in seconds',
         pars = uncertaindict(
             [('AD1', (6*365*seconds_per_day, 'fixed'))],
             ),
Пример #15
0
def main(opts):
    global savefig
    cfg = NestedDict(
        bundle=dict(
            name='energy_nonlinearity_birks_cherenkov',
            version='v01',
            nidx=[('r', 'reference', ['R1', 'R2'])],
            major=[],
        ),
        stopping_power='stoppingpower.txt',
        annihilation_electrons=dict(
            file='input/hgamma2e.root',
            histogram='hgamma2e_1KeV',
            scale=1.0 / 50000  # event simulated
        ),
        pars=uncertaindict(
            [
                ('birks.Kb0', (1.0, 'fixed')),
                ('birks.Kb1', (15.2e-3, 0.1776)),
                # ('birks.Kb2',           (0.0, 'fixed')),
                ("cherenkov.E_0", (0.165, 'fixed')),
                ("cherenkov.p0", (-7.26624e+00, 'fixed')),
                ("cherenkov.p1", (1.72463e+01, 'fixed')),
                ("cherenkov.p2", (-2.18044e+01, 'fixed')),
                ("cherenkov.p3", (1.44731e+01, 'fixed')),
                ("cherenkov.p4", (3.22121e-02, 'fixed')),
                ("Npescint", (1341.38, 0.0059)),
                ("kC", (0.5, 0.4737)),
                ("normalizationEnergy", (12.0, 'fixed'))
            ],
            mode='relative'),
        integration_order=2,
        correlations_pars=['birks.Kb1', 'Npescint', 'kC'],
        correlations=[1.0, 0.94, -0.97, 0.94, 1.0, -0.985, -0.97, -0.985, 1.0],
        fill_matrix=True,
        labels=dict(normalizationEnergy='Pessimistic'),
    )

    ns = env.globalns('energy')
    quench = execute_bundle(cfg, namespace=ns)
    ns.printparameters(labels=True)
    print()
    normE = ns['normalizationEnergy'].value()

    #
    # Input bins
    #
    evis_edges_full_input = N.arange(0.0, 15.0 + 1.e-6, 0.025)
    evis_edges_full_hist = C.Histogram(evis_edges_full_input,
                                       labels='Evis bin edges')
    evis_edges_full_hist >> quench.context.inputs.evis_edges_hist['00']

    #
    # Python energy model interpolation function
    #
    from scipy.interpolate import interp1d
    lsnl_x = quench.histoffset.histedges.points_truncated.data()
    lsnl_y = quench.positron_model_relative.single().data()
    lsnl_fcn = interp1d(lsnl_x, lsnl_y, kind='quadratic')

    #
    # Energy resolution
    #
    def eres_sigma_rel(edep):
        return 0.03 / edep**0.5

    def eres_sigma_abs(edep):
        return 0.03 * edep**0.5

    #
    # Energy offset
    #
    from physlib import pc
    edep_offset = pc.DeltaNP - pc.ElectronMass

    #
    # Oscprob
    #
    baselinename = 'L'
    ns = env.ns("oscprob")
    import gna.parameters.oscillation
    gna.parameters.oscillation.reqparameters(ns)
    ns.defparameter(baselinename,
                    central=52.0,
                    fixed=True,
                    label='Baseline, km')

    #
    # Define energy range
    #
    enu_input = N.arange(1.8, 15.0, 0.001)
    edep_input = enu_input - edep_offset
    edep_lsnl = edep_input * lsnl_fcn(edep_input)

    # Initialize oscillation variables
    enu = C.Points(enu_input, labels='Neutrino energy, MeV')
    component_names = C.stdvector(['comp0', 'comp12', 'comp13', 'comp23'])
    with ns:
        R.OscProbPMNSExpressions(R.Neutrino.ae(),
                                 R.Neutrino.ae(),
                                 component_names,
                                 ns=ns)

        labels = [
            'Oscillation probability|%s' % s
            for s in ('component 12', 'component 13', 'component 23', 'full',
                      'probsum')
        ]
        oscprob = R.OscProbPMNS(R.Neutrino.ae(),
                                R.Neutrino.ae(),
                                baselinename,
                                labels=labels)

    enu >> oscprob.full_osc_prob.Enu
    enu >> (oscprob.comp12.Enu, oscprob.comp13.Enu, oscprob.comp23.Enu)

    unity = C.FillLike(1, labels='Unity')
    enu >> unity.fill.inputs[0]
    with ns:
        op_sum = C.WeightedSum(component_names, [
            unity.fill.outputs[0], oscprob.comp12.comp12,
            oscprob.comp13.comp13, oscprob.comp23.comp23
        ],
                               labels='Oscillation probability sum')

    psur = op_sum.single().data()

    from scipy.signal import argrelmin, argrelmax
    psur_minima, = argrelmin(psur)
    psur_maxima, = argrelmax(psur)

    def build_extrema(x):
        data_min_x = (x[psur_minima][:-1] + x[psur_minima][1:]) * 0.5
        data_min_y = (x[psur_minima][1:] - x[psur_minima][:-1])

        data_max_x = (x[psur_maxima][:-1] + x[psur_maxima][1:]) * 0.5
        data_max_y = (x[psur_maxima][1:] - x[psur_maxima][:-1])

        data_ext_x = N.vstack([data_max_x, data_min_x]).T.ravel()
        data_ext_y = N.vstack([data_max_y, data_min_y]).T.ravel()

        return data_ext_x, data_ext_y

    psur_ext_x_enu, psur_ext_y_enu = build_extrema(enu_input)
    psur_ext_x_edep, psur_ext_y_edep = build_extrema(edep_input)
    psur_ext_x_edep_lsnl, psur_ext_y_edep_lsnl = build_extrema(edep_lsnl)

    #
    # Plots and tests
    #
    if opts.output and opts.output.endswith('.pdf'):
        pdfpages = PdfPages(opts.output)
        pdfpagesfilename = opts.output
        savefig_old = savefig
        pdf = pdfpages.__enter__()

        def savefig(*args, **kwargs):
            if opts.individual and args and args[0]:
                savefig_old(*args, **kwargs)
            pdf.savefig()
    else:
        pdf = None
        pdfpagesfilename = ''
        pdfpages = None

    fig = P.figure()
    ax = P.subplot(111)
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel('Edep, MeV')
    ax.set_ylabel('Evis/Edep')
    ax.set_title('Positron energy nonlineairty')
    quench.positron_model_relative.single().plot_vs(
        quench.histoffset.histedges.points_truncated, label='definition range')
    quench.positron_model_relative_full.plot_vs(
        quench.histoffset.histedges.points,
        '--',
        linewidth=1.,
        label='full range',
        zorder=0.5)
    ax.vlines(normE, 0.0, 1.0, linestyle=':')

    ax.legend(loc='lower right')
    ax.set_ylim(0.8, 1.05)
    savefig(opts.output, suffix='_total_relative')

    fig = P.figure()
    ax = P.subplot(111)
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel('Edep, MeV')
    ax.set_ylabel(r'$\sigma/E$')
    ax.set_title('Energy resolution')
    ax.plot(edep_input, eres_sigma_rel(edep_input), '-')

    savefig(opts.output, suffix='_eres_rel')

    fig = P.figure()
    ax = P.subplot(111)
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel('Edep, MeV')
    ax.set_ylabel(r'$\sigma$')
    ax.set_title('Energy resolution')
    ax.plot(edep_input, eres_sigma_abs(edep_input), '-')

    savefig(opts.output, suffix='_eres_abs')

    fig = P.figure()
    ax = P.subplot(111)
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel('Enu, MeV')
    ax.set_ylabel('Psur')
    ax.set_title('Survival probability')
    op_sum.single().plot_vs(enu.single(), label='full')
    ax.plot(enu_input[psur_minima],
            psur[psur_minima],
            'o',
            markerfacecolor='none',
            label='minima')
    ax.plot(enu_input[psur_maxima],
            psur[psur_maxima],
            'o',
            markerfacecolor='none',
            label='maxima')

    savefig(opts.output, suffix='_psur_enu')

    fig = P.figure()
    ax = P.subplot(111)
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel('Edep, MeV')
    ax.set_ylabel('Psur')
    ax.set_title('Survival probability')
    op_sum.single().plot_vs(edep_input, label='true')
    op_sum.single().plot_vs(edep_lsnl, label='with LSNL')

    ax.legend()

    savefig(opts.output, suffix='_psur_edep')

    fig = P.figure()
    ax = P.subplot(111)
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel('Enu, MeV')
    ax.set_ylabel('Dist, MeV')
    ax.set_title('Nearest peaks distance')

    ax.plot(psur_ext_x_enu, psur_ext_y_enu, 'o-', markerfacecolor='none')

    savefig(opts.output, suffix='_dist_enu')

    fig = P.figure()
    ax = P.subplot(111)
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel('Edep, MeV')
    ax.set_ylabel('Dist, MeV')
    ax.set_title('Nearest peaks distance')

    ax.plot(psur_ext_x_edep,
            psur_ext_y_edep,
            '-',
            markerfacecolor='none',
            label='true')
    ax.plot(psur_ext_x_edep_lsnl,
            psur_ext_y_edep_lsnl,
            '-',
            markerfacecolor='none',
            label='with LSNL')
    ax.plot(edep_input,
            eres_sigma_abs(edep_input),
            '-',
            markerfacecolor='none',
            label=r'$\sigma$')

    ax.legend(loc='upper left')

    savefig(opts.output, suffix='_dist')

    fig = P.figure()
    ax = P.subplot(111)
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel('Edep, MeV')
    ax.set_ylabel(r'Dist/$\sigma$')
    ax.set_title('Resolution ability')

    x1, y1 = psur_ext_x_edep, psur_ext_y_edep / eres_sigma_abs(psur_ext_x_edep)
    x2, y2 = psur_ext_x_edep_lsnl, psur_ext_y_edep_lsnl / eres_sigma_abs(
        psur_ext_x_edep_lsnl)

    ax.plot(x1, y1, '-', markerfacecolor='none', label='true')
    ax.plot(x2, y2, '-', markerfacecolor='none', label='with LSNL')

    ax.legend(loc='upper left')
    savefig(opts.output, suffix='_ability')

    ax.set_xlim(3, 4)
    ax.set_ylim(5, 8)
    savefig(opts.output, suffix='_ability_zoom')

    fig = P.figure()
    ax = P.subplot(111)
    ax.minorticks_on()
    ax.grid()
    ax.set_xlabel('Edep, MeV')
    ax.set_ylabel(r'Dist/$\sigma$')
    ax.set_title('Resolution ability difference (quenching-true)')

    y2fcn = interp1d(x2, y2)
    y2_on_x1 = y2fcn(x1)
    diff = y2_on_x1 - y1
    from scipy.signal import savgol_filter
    diff = savgol_filter(diff, 21, 3)

    ax.plot(x1, diff)

    savefig(opts.output, suffix='_ability_diff')

    if pdfpages:
        pdfpages.__exit__(None, None, None)
        print('Write output figure to', pdfpagesfilename)

    savegraph(quench.histoffset.histedges.points_truncated,
              opts.graph,
              namespace=ns)

    if opts.show:
        P.show()
Пример #16
0
def build_and_plot(expr, obj, suffix):
    # Initialize the expression and indices
    a = Expression(expr, indices)

    # Dump the information
    print(a.expressions_raw)
    print(a.expressions)

    # Parse the expression
    a.parse()
    # The next step is needed to name all the intermediate variables.
    a.guessname(lib, save=True)
    # Dump the tree.
    a.tree.dump(True)

    cfg = NestedDict(
        kinint2=NestedDict(
            bundle='integral_2d1d_v01',
            variables=('evis', 'ctheta'),
            edges=N.linspace(0.0, 12.0, 241, dtype='d'),
            xorders=3,
            yorder=5,
            provides=['evis', 'ctheta', 'evis_edges'],
        ),
        ibd_xsec=NestedDict(bundle='xsec_ibd_v01',
                            order=1,
                            provides=['ibd_xsec', 'ee', 'enu', 'jacobian']),
        oscprob=NestedDict(bundle='oscprob_v01',
                           name='oscprob',
                           provides=['oscprob', 'pmns']),
        anuspec=NestedDict(
            bundle='reactor_anu_spectra_v02',
            name='anuspec',
            filename=[
                'data/reactor_anu_spectra/Huber/Huber_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat',
                'data/reactor_anu_spectra/Mueller/Mueller_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat'
            ],
            # strategy = dict( underflow='constant', overflow='extrapolate' ),
            edges=N.concatenate((N.arange(1.8, 8.7, 0.5), [12.3])),
        ),
        eff=NestedDict(
            bundle='efficiencies_v01',
            correlated=False,
            uncorrelated=True,
            norm=True,
            names=dict(norm='global_norm'),
            provides=['eff', 'effunc_corr', 'effunc_uncorr', 'global_norm'],
            efficiencies='data/dayabay/efficiency/P15A_efficiency.py'),
        livetime=NestedDict(
            bundle='dayabay_livetime_hdf_v01',
            file=
            'data/dayabay/data/P15A/dubna/dayabay_data_dubna_v15_bcw_adsimple.hdf5',
            provides=['livetime_daily', 'efflivetime_daily']),
        baselines=NestedDict(
            bundle='baselines_v01',
            reactors=
            'data/dayabay/reactor/coordinates/coordinates_docDB_9757.py',
            detectors='data/dayabay/ad/coordinates/coordinates_docDB_9757.py',
            provides=['baseline', 'baselineweight'],
            units="meters"),
        thermal_power=NestedDict(
            bundle='dayabay_reactor_burning_info_v01',
            reactor_info='data/dayabay/reactor/power/WeeklyAvg_P15A_v1.txt.npz',
            provides=['thermal_power', 'fission_fractions']),
        iav=NestedDict(
            bundle='detector_iav_db_root_v02',
            parname='OffdiagScale',
            scale=uncertain(1.0, 4, 'percent'),
            ndiag=1,
            filename='data/dayabay/tmp/detector_iavMatrix_P14A_LS.root',
            matrixname='iav_matrix'),
        eres=NestedDict(
            bundle='detector_eres_common3_v02',
            # pars: sigma_e/e = sqrt( a^2 + b^2/E + c^2/E^2 ),
            pars=uncertaindict([('Eres_a', 0.014764), ('Eres_b', 0.0869),
                                ('Eres_c', 0.0271)],
                               mode='percent',
                               uncertainty=30),
            provides=['eres', 'eres_matrix'],
            expose_matrix=True),
        lsnl=NestedDict(
            bundle='detector_nonlinearity_db_root_v02',
            names=['nominal', 'pull0', 'pull1', 'pull2', 'pull3'],
            filename='data/dayabay/tmp/detector_nl_consModel_450itr.root',
            parnames=dict(lsnl='lsnl_weight', escale='escale'),
            par=uncertain(1.0, 0.2, 'percent'),
            edges='evis_edges',
            provides=[
                'lsnl', 'lsnl_component', 'escale', 'lsnl_weight', 'lsnl_edges'
            ]),
        rebin=NestedDict(bundle='rebin_v02',
                         rounding=3,
                         edges=N.concatenate(([0.7], N.arange(1.2, 8.1,
                                                              0.2), [12.0]))))
    #
    # Put the expression into context
    context = ExpressionContext(cfg, ns=env.globalns)
    a.build(context)

    # # Print the list of outputs, stored for the expression
    # from gna.bindings import OutputDescriptor
    # env.globalns.materializeexpressions(True)
    # env.globalns.printparameters( labels=True )
    # print( 'outputs:' )
    # print( context.outputs )

    try:
        from gna.graphviz import GNADot

        obj = context.outputs[obj]
        if isinstance(obj, NestedDict):
            obj = obj.values()
        if len(expr) < 4:
            label = expr[0]
            if label == 'evis()':
                label = expr[1]
        else:
            label = ''
        graph = GNADot(obj, joints=False, label=label)
        name = args.dot.replace('.dot', '_' + suffix + '.dot')
        graph.write(name)
        print('Write output to:', name)
    except Exception as e:
        print('\033[31mFailed to plot dot\033[0m')
        raise
Пример #17
0
from matplotlib import pyplot as plt
from gna.bindings import common

cfg = NestedDict(bundle=dict(name='detector_eres',
                             version='ex02',
                             nidx=[('d', 'detector', ['D1', 'D2', 'D3']),
                                   ('z', 'zone', ['z1', 'z2'])],
                             major=['z'],
                             names=dict(eres_matrix='smearing_matrix', )),
                 parameter='eres',
                 pars=uncertaindict([
                     ('z1.a', (0.0, 'fixed')),
                     ('z1.b', (0.05, 30, 'percent')),
                     ('z1.c', (0.0, 'fixed')),
                     ('z2.a', (0.0, 'fixed')),
                     ('z2.b', (0.10, 30, 'percent')),
                     ('z2.c', (0.0, 'fixed')),
                     ('z3.a', (0.0, 'fixed')),
                     ('z3.b', (0.15, 30, 'percent')),
                     ('z3.c', (0.0, 'fixed')),
                 ]),
                 labels=dict(matrix='Smearing\nmatrix\n{autoindex}',
                             smear='Energy\nresolution\n{autoindex}',
                             parameter='{description} (zone {autoindex})'),
                 split_transformations=True)
b = execute_bundle(cfg)
env.globalns.printparameters(labels=True)
print()

#
# Prepare inputs
Пример #18
0
def main(opts):
    global savefig

    if opts.output and opts.output.endswith('.pdf'):
        pdfpages = PdfPages(opts.output)
        pdfpagesfilename=opts.output
        savefig_old=savefig
        pdf=pdfpages.__enter__()
        def savefig(*args, **kwargs):
            close = kwargs.pop('close', False)
            if opts.individual and args and args[0]:
                savefig_old(*args, **kwargs)
            pdf.savefig()
            if close:
                P.close()
    else:
        pdf = None
        pdfpagesfilename = ''
        pdfpages = None

    cfg = NestedDict(
        bundle = dict(
            name='energy_nonlinearity_birks_cherenkov',
            version='v01',
            nidx=[ ('r', 'reference', ['R1', 'R2']) ],
            major=[],
            ),
        stopping_power='data/data_juno/energy_model/2019_birks_cherenkov_v01/stoppingpower.txt',
        annihilation_electrons=dict(
            file='data/data_juno/energy_model/2019_birks_cherenkov_v01/hgamma2e.root',
            histogram='hgamma2e_1KeV',
                            scale=1.0/50000 # events simulated
            ),
        pars = uncertaindict(
            [
                ('birks.Kb0',               (1.0, 'fixed')),
                ('birks.Kb1',           (15.2e-3, 0.1776)),
                # ('birks.Kb2',           (0.0, 'fixed')),
                ("cherenkov.E_0",         (0.165, 'fixed')),
                ("cherenkov.p0",  ( -7.26624e+00, 'fixed')),
                ("cherenkov.p1",   ( 1.72463e+01, 'fixed')),
                ("cherenkov.p2",  ( -2.18044e+01, 'fixed')),
                ("cherenkov.p3",   ( 1.44731e+01, 'fixed')),
                ("cherenkov.p4",   ( 3.22121e-02, 'fixed')),
                ("Npescint",            (1341.38, 0.0059)),
                ("kC",                      (0.5, 0.4737)),
                ("normalizationEnergy",   (11.9999999, 'fixed'))
             ],
            mode='relative'
            ),
        integration_order = 2,
        correlations_pars = [ 'birks.Kb1', 'Npescint', 'kC' ],
        correlations = [ 1.0,   0.94, -0.97,
                         0.94,  1.0,  -0.985,
                        -0.97, -0.985, 1.0   ],
        fill_matrix=True,
        labels = dict(
            normalizationEnergy = 'Pessimistic'
            ),
        )

    ns = env.globalns('energy')
    quench = execute_bundle(cfg, namespace=ns)
    print()
    normE = ns['normalizationEnergy'].value()

    #
    # Input bins
    #
    evis_edges_full_input = N.arange(0.0, 15.0+1.e-6, 0.001)
    evis_edges_full_hist = C.Histogram(evis_edges_full_input, labels='Evis bin edges')
    evis_edges_full_hist >> quench.context.inputs.evis_edges_hist['00']

    #
    # Python energy model interpolation function
    #
    lsnl_x = quench.histoffset.histedges.points_truncated.data()
    lsnl_y = quench.positron_model_relative.single().data()
    lsnl_fcn = interp1d(lsnl_x, lsnl_y, kind='quadratic', bounds_error=False, fill_value='extrapolate')

    #
    # Energy resolution
    #
    def eres_sigma_rel(edep):
        return 0.03/edep**0.5

    def eres_sigma_abs(edep):
        return 0.03*edep**0.5

    #
    # Oscprob
    #
    baselinename='L'
    ns = env.ns("oscprob")
    import gna.parameters.oscillation
    gna.parameters.oscillation.reqparameters(ns)
    ns.defparameter(baselinename, central=52.0, fixed=True, label='Baseline, km')

    #
    # Define energy range
    #
    data = Data(N.arange(1.8, 15.0, 0.001), lsnl_fcn=lsnl_fcn, eres_fcn=eres_sigma_abs)

    # Initialize oscillation variables
    enu = C.Points(data.enu, labels='Neutrino energy, MeV')
    component_names = C.stdvector(['comp0', 'comp12', 'comp13', 'comp23'])
    with ns:
        R.OscProbPMNSExpressions(R.Neutrino.ae(), R.Neutrino.ae(), component_names, ns=ns)

        labels=['Oscillation probability|%s'%s for s in ('component 12', 'component 13', 'component 23', 'full', 'probsum')]
        oscprob = R.OscProbPMNS(R.Neutrino.ae(), R.Neutrino.ae(), baselinename, labels=labels)

    enu >> oscprob.full_osc_prob.Enu
    enu >> (oscprob.comp12.Enu, oscprob.comp13.Enu, oscprob.comp23.Enu)

    unity = C.FillLike(1, labels='Unity')
    enu >> unity.fill.inputs[0]
    with ns:
        op_sum = C.WeightedSum(component_names, [unity.fill.outputs[0], oscprob.comp12.comp12, oscprob.comp13.comp13, oscprob.comp23.comp23], labels='Oscillation probability sum')

    oscprob.printtransformations()
    env.globalns.printparameters(labels=True)

    ns = env.globalns('oscprob')
    data.set_dm_par(ns['DeltaMSqEE'])
    data.set_nmo_par(ns['Alpha'])
    data.set_psur_fcn(op_sum.single().data)
    data.build()

    #
    # Plotting
    #
    xmax = 12.0

    #
    # Positron non-linearity
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Edep, MeV', ylabel='Evis/Edep', title='Positron energy nonlineairty')
    ax.minorticks_on(); ax.grid()
    quench.positron_model_relative.single().plot_vs(quench.histoffset.histedges.points_truncated, label='definition range')
    quench.positron_model_relative_full.plot_vs(quench.histoffset.histedges.points, '--', linewidth=1., label='full range', zorder=0.5)
    ax.vlines(normE, 0.0, 1.0, linestyle=':')
    ax.legend(loc='lower right')
    ax.set_ylim(0.8, 1.05)
    ax.set_xlim(0.0, xmax)
    savefig(opts.output, suffix='_total_relative', close=not opts.show_all)

    #
    # Positron non-linearity derivative
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Edep, MeV', ylabel='dEvis/dEdep', title='Positron energy nonlineairty derivative')
    ax.minorticks_on(); ax.grid()
    e = quench.histoffset.histedges.points_truncated.single().data()
    f = quench.positron_model_relative.single().data()*e
    ec = (e[1:] + e[:-1])*0.5
    df = (f[1:] - f[:-1])
    dedf = (e[1:] - e[:-1])/df
    ax.plot(ec, dedf)
    ax.legend(loc='lower right')
    ax.set_ylim(0.975, 1.01)
    ax.set_xlim(0.0, xmax)
    savefig(opts.output, suffix='_total_derivative', close=not opts.show_all)

    #
    # Positron non-linearity effect
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Edep, MeV', ylabel='Evis/Edep', title='Positron energy nonlineairty')
    ax.minorticks_on(); ax.grid()

    es = N.arange(1.0, 3.1, 0.5)
    esmod = es*lsnl_fcn(es)
    esmod_shifted = esmod*(es[-1]/esmod[-1])
    ax.vlines(es, 0.0, 1.0, linestyle='--', linewidth=2, alpha=0.5, color='green', label='Edep')
    ax.vlines(esmod, 0.0, 1.0, linestyle='-', color='red', label='Edep quenched')
    ax.legend()
    savefig(opts.output, suffix='_quenching_effect_0')

    ax.vlines(esmod_shifted, 0.0, 1.0, linestyle=':', color='blue', label='Edep quenched, scaled')
    ax.legend()
    savefig(opts.output, suffix='_quenching_effect_1', close=not opts.show_all)

    #
    # Energy resolution
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Edep, MeV', ylabel=r'$\sigma/E$', title='Energy resolution')
    ax.minorticks_on(); ax.grid()
    ax.plot(data.edep, eres_sigma_rel(data.edep), '-')
    ax.set_xlim(0.0, xmax)
    savefig(opts.output, suffix='_eres_rel', close=not opts.show_all)

    #
    # Energy resolution
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel= 'Edep, MeV', ylabel= r'$\sigma$', title='Energy resolution')
    ax.minorticks_on(); ax.grid()
    ax.plot(data.edep, eres_sigma_abs(data.edep), '-')
    ax.set_xlim(0.0, xmax)
    savefig(opts.output, suffix='_eres_abs', close=not opts.show_all)

    #
    # Survival probability vs Enu
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Enu, MeV', ylabel='Psur', title='Survival probability')
    ax.minorticks_on(); ax.grid()
    ax.plot(data.enu, data.data_no.psur[data.dmmid_idx], label=r'full NO')
    ax.plot(data.enu, data.data_io.psur[data.dmmid_idx], label=r'full IO')
    ax.plot(data.data_no.data_enu.psur_e[data.dmmid_idx], data.data_no.data_enu.psur[data.dmmid_idx], '^', markerfacecolor='none')
    ax.legend()
    ax.set_xlim(0.0, xmax)
    savefig(opts.output, suffix='_psur_enu')

    ax.set_xlim(2.0, 4.5)
    savefig(opts.output, suffix='_psur_enu_zoom', close=not opts.show_all)

    #
    # Survival probability vs Edep
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Edep, MeV', ylabel='Psur', title='Survival probability')
    ax.minorticks_on(); ax.grid()
    ax.plot(data.edep, data.data_no.psur[data.dmmid_idx], label=r'full NO')
    ax.plot(data.edep, data.data_io.psur[data.dmmid_idx], label=r'full IO')
    ax.plot(data.data_no.data_edep.psur_e[data.dmmid_idx], data.data_no.data_edep.psur[data.dmmid_idx], '^', markerfacecolor='none')
    ax.legend()
    ax.set_xlim(0.0, xmax)
    savefig(opts.output, suffix='_psur_edep')

    ax.set_xlim(1.2, 3.7)
    savefig(opts.output, suffix='_psur_edep_zoom', close=not opts.show_all)

    #
    # Survival probability vs Edep_lsnl
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Edep quenched, MeV', ylabel='Psur', title='Survival probability')
    ax.minorticks_on(); ax.grid()
    ax.plot(data.edep_lsnl, data.data_no.psur[data.dmmid_idx], label=r'full NO')
    ax.plot(data.edep_lsnl, data.data_io.psur[data.dmmid_idx], label=r'full IO')
    ax.plot(data.data_no.data_edep_lsnl.psur_e[data.dmmid_idx], data.data_no.data_edep_lsnl.psur[data.dmmid_idx], '^', markerfacecolor='none')
    ax.legend()
    ax.set_xlim(0.0, xmax)
    savefig(opts.output, suffix='_psur_edep_lsnl')

    ax.set_xlim(1.2, 3.7)
    savefig(opts.output, suffix='_psur_edep_lsnl_zoom', close=not opts.show_all)

    #
    # Distance between nearest peaks vs Enu, single
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Enu, MeV', ylabel='Dist, MeV', title='Nearest peaks distance')
    ax.minorticks_on(); ax.grid()
    ax.plot(data.data_no.data_enu.diff_x[data.dmmid_idx], data.data_no.data_enu.diff[data.dmmid_idx], label=r'NO')
    ax.plot(data.data_io.data_enu.diff_x[data.dmmid_idx], data.data_io.data_enu.diff[data.dmmid_idx], label=r'IO')
    ax.legend()
    ax.set_xlim(0.0, xmax)
    ax.set_ylim(bottom=0.0)
    savefig(opts.output, suffix='_dist_enu')

    ax.set_xlim(2.0, 5.0)
    ax.set_ylim(top=0.5)
    savefig(opts.output, suffix='_dist_enu_zoom', close=not opts.show_all)

    #
    # Distance between nearest peaks vs Edep, single
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Edep, MeV', ylabel='Dist, MeV', title='Nearest peaks distance')
    ax.minorticks_on(); ax.grid()
    ax.plot(data.data_no.data_edep.diff_x[data.dmmid_idx], data.data_no.data_edep.diff[data.dmmid_idx], label=r'NO')
    ax.plot(data.data_io.data_edep.diff_x[data.dmmid_idx], data.data_io.data_edep.diff[data.dmmid_idx], label=r'IO')
    ax.legend()
    ax.set_xlim(0.0, xmax)
    ax.set_ylim(bottom=0.0)
    savefig(opts.output, suffix='_dist_edep')

    ax.set_xlim(1.2, 4.2)
    ax.set_ylim(top=0.5)
    savefig(opts.output, suffix='_dist_edep_zoom', close=not opts.show_all)

    #
    # Distance between nearest peaks vs Edep, single
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Edep quenched, MeV', ylabel='Dist, MeV', title='Nearest peaks distance')
    ax.minorticks_on(); ax.grid()
    ax.plot(data.data_no.data_edep_lsnl.diff_x[data.dmmid_idx], data.data_no.data_edep_lsnl.diff[data.dmmid_idx], label=r'NO')
    ax.plot(data.data_io.data_edep_lsnl.diff_x[data.dmmid_idx], data.data_io.data_edep_lsnl.diff[data.dmmid_idx], label=r'IO')
    ax.legend()
    ax.set_xlim(0.0, xmax)
    ax.set_ylim(bottom=0.0)
    savefig(opts.output, suffix='_dist_edep_lsnl')

    ax.set_xlim(1.2, 4.2)
    ax.set_ylim(top=0.5)
    savefig(opts.output, suffix='_dist_edep_lsnl_zoom')

    poly = N.polynomial.polynomial.Polynomial([0, 1, 0])
    x = data.data_no.data_edep_lsnl.diff_x[data.dmmid_idx]
    pf = poly.fit(x, data.data_no.data_edep_lsnl.diff[data.dmmid_idx], 2)
    print(pf)
    ax.plot(x, pf(x), label=r'NO fit')
    ax.legend()
    savefig(opts.output, suffix='_dist_edep_lsnl_fit', close=not opts.show_all)

    #
    # Distance between nearest peaks vs Edep, multiple
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Edep quenched, MeV', ylabel='Dist, MeV', title='Nearest peaks distance')
    ax.minorticks_on(); ax.grid()
    ax.plot(data.data_no.data_edep_lsnl.diff_x[data.dmmid_idx], data.data_no.data_edep_lsnl.diff[data.dmmid_idx], label=r'NO')
    ax.plot(data.data_io.data_edep_lsnl.diff_x[data.dmmid_idx], data.data_io.data_edep_lsnl.diff[data.dmmid_idx], '--', label=r'IO')
    for idx in (0, 5, 15, 20):
        ax.plot(data.data_io.data_edep_lsnl.diff_x[idx], data.data_io.data_edep_lsnl.diff[idx], '--')
    ax.legend()
    ax.set_xlim(0.0, xmax)
    savefig(opts.output, suffix='_dist_edep_lsnl_multi', close=not opts.show_all)

    #
    # Distance between nearest peaks difference
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Edep, MeV', ylabel='Dist(IO) - Dist(NO), MeV', title='Nearest peaks distance diff: IO-NO')
    ax.minorticks_on(); ax.grid()
    ax.plot(data.e, data.diffs.edep[data.dmmid_idx], '-', markerfacecolor='none', label='Edep')
    ax.plot(data.e, data.diffs.edep_lsnl[data.dmmid_idx], '-', markerfacecolor='none', label='Edep quenched')
    ax.plot(data.e, data.diffs.enu[data.dmmid_idx], '-', markerfacecolor='none', label='Enu')
    ax.legend()
    savefig(opts.output, suffix='_dist_diff')

    ax.plot(data.e, data.eres, '-', markerfacecolor='none', label='Resolution $\\sigma$')
    ax.legend()
    savefig(opts.output, suffix='_dist_diff_1')

    #
    # Distance between nearest peaks difference relative to sigma
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Edep, MeV', ylabel='(Dist(IO) - Dist(NO))/$\\sigma$', title='Nearest peaks distance diff: IO-NO')
    ax.minorticks_on(); ax.grid()
    ax.plot(data.e, data.diffs_rel.edep[data.dmmid_idx], '-', markerfacecolor='none', label='Edep')
    ax.plot(data.e, data.diffs_rel.edep_lsnl[data.dmmid_idx], '-', markerfacecolor='none', label='Edep quenched')

    i_edep=N.argmax(data.diffs_rel.edep[data.dmmid_idx])
    i_edep_lsnl=N.argmax(data.diffs_rel.edep_lsnl[data.dmmid_idx])
    ediff = data.e[i_edep] - data.e[i_edep_lsnl]
    ax.axvline(data.e[i_edep], linestyle='dashed', label='Max location: %.3f MeV'%(data.e[i_edep]))
    ax.axvline(data.e[i_edep_lsnl], linestyle='dashed', label='Max location: %.3f MeV'%(data.e[i_edep_lsnl]))
    ax.axvspan(data.e[i_edep], data.e[i_edep_lsnl], alpha=0.2, label='Max location diff: %.3f MeV'%(ediff))

    ax.legend()
    savefig(opts.output, suffix='_dist_diff_rel')

    #
    # Distance between nearest peaks difference relative to sigma
    #
    fig = P.figure()
    ax = P.subplot(111, xlabel='Edep, MeV', ylabel='(Dist(IO) - Dist(NO))/$\\sigma$', title='Nearest peaks distance diff: IO-NO')
    ax.minorticks_on(); ax.grid()
    ledep   = ax.plot(data.e, data.diffs_rel.edep[data.dmmid_idx],      '--', markerfacecolor='none', label='Edep')[0]
    lquench = ax.plot(data.e, data.diffs_rel.edep_lsnl[data.dmmid_idx], '-',  color=ledep.get_color(), markerfacecolor='none', label='Edep quenched')[0]

    kwargs=dict(alpha=0.8, linewidth=1.5, markerfacecolor='none')
    for idx in (0, 5, 15, 20):
        l = ax.plot(data.e, data.diffs_rel.edep[idx], '--', **kwargs)[0]
        ax.plot(data.e, data.diffs_rel.edep_lsnl[idx], '-', color=l.get_color(), **kwargs)
    ax.legend()
    savefig(opts.output, suffix='_dist_diff_rel_multi', close=not opts.show_all)

    #
    # Distance between nearest peaks difference relative to sigma
    #
    fig = P.figure()
    ax = P.subplot(111, ylabel=r'$\Delta m^2_\mathrm{ee}$', xlabel='Edep quenched, MeV',
                   title='Nearest peaks distance diff: IO-NO/$\\sigma$')
    ax.minorticks_on(); ax.grid()
    formatter = ax.yaxis.get_major_formatter()
    formatter.set_useOffset(False)
    formatter.set_powerlimits((-2,2))
    formatter.useMathText=True

    c = ax.pcolormesh(data.mesh_e.T, data.mesh_dm.T, data.diffs_rel.edep_lsnl.T)
    from mpl_tools.helpers import add_colorbar
    add_colorbar(c, rasterized=True)
    c.set_rasterized(True)
    savefig(opts.output, suffix='_dist_diff_rel_heatmap')

    if pdfpages:
        pdfpages.__exit__(None,None,None)
        print('Write output figure to', pdfpagesfilename)

    # savegraph(quench.histoffset.histedges.points_truncated, opts.graph, namespace=ns)

    if opts.show or opts.show_all:
        P.show()
Пример #19
0
    def init_configuration(self):
        edges    = np.arange(0.0, 12+1.e-8, self.opts.fine_step or 0.01)
        edges_final = np.concatenate( (
                                    [0.8],
                                    np.arange(1, 6.0, self.opts.fine_step_final or 0.02),
                                    np.arange(6, 7.0, 0.1),
                                    [7.0, 7.5, 12.0]
                                )
                            )
        if self.opts.final_emin is not None:
            print('Truncate final binning E>={}'.format(self.opts.final_emin))
            edges_final = edges_final[edges_final>=self.opts.final_emin]
        if self.opts.final_emax is not None:
            print('Truncate final binning E<={}'.format(self.opts.final_emax))
            edges_final = edges_final[edges_final<=self.opts.final_emax]
        if self.opts.final_emin is not None or self.opts.final_emax is not None:
            print('Final binning:', edges_final)

        self.cfg = NestedDict(
                #
                # Numbers
                #
                numbers0 = OrderedDict(
                    bundle = dict(name='parameters', version='v05'),
                    state='fixed',
                    labels=dict(
                        seconds_in_year   = 'Number of seconds in year',
                        days_in_second    = 'Number of days in a second',
                        conversion_factor = 'Conversion factor: W[GW]/[MeV] N[fissions]->N[fissions]/T[s]',
                        ),
                    pars =  dict(
                            seconds_in_year   = 365.0*24.0*60.0*60.0,
                            days_in_second    = 1.0/(24.0*60.0*60.0),
                            conversion_factor = R.NeutrinoUnits.reactorPowerConversion, #taken from transformations/neutrino/ReactorNorm.cc
                            ),
                    ),
                numbers = OrderedDict(
                    bundle = dict(name='parameters', version='v06'),
                    pars = 'data/data_juno/data-joint/2020-06-11-NMO-Analysis-Input/files/juno_input_numbers.py',
                    skip = ('percent',),
                    state= 'fixed'
                    ),
                bkg_shape_unc = OrderedDict(
                    bundle = dict(name='parameters', version='v06'),
                    pars = 'data/data_juno/data-joint/2020-06-11-NMO-Analysis-Input/files/bkg_bin2bin.yaml',
                    hooks = OrderedDict(bin_width_factor=lambda pars: (1.0/pars['bin_width'], '1/`bin width`')),
                    state= 'fixed'
                    ),
                # Detector and reactor
                norm = OrderedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "norm",
                        label = 'Reactor power/detection efficiency correlated normalization',
                        pars = uncertain(1.0, (2**2+1**2)**0.5, 'percent')
                        ),
                baselines = OrderedDict(
                        bundle = dict(name='reactor_baselines', version='v02', major = 'rd'),
                        reactors  = 'data/data_juno/data-joint/2020-06-11-NMO-Analysis-Input/files/reactor_baselines.yaml',
                        reactors_key = 'reactor_baseline',
                        detectors = dict(AD1=0.0),
                        unit = 'km'
                        ),
                # Reactor
                energy_per_fission =  OrderedDict(
                        bundle = dict(name="parameters", version = "v06"),
                        pars = 'data/data_juno/data-joint/2020-06-11-NMO-Analysis-Input/files/energy_per_fission.yaml',
                        separate_uncertainty = '{}_scale'
                        ),
                thermal_power =  OrderedDict(
                        bundle = dict(name="parameters", version = "v06", names=dict(thermal_power='thermal_power_nominal')),
                        pars = 'data/data_juno/data-joint/2020-06-11-NMO-Analysis-Input/files/thermal_power.yaml',
                        separate_uncertainty = '{}_scale'
                        ),
                # Backgrounds
                bkg_rate = OrderedDict(
                        bundle = dict(name="parameters", version = "v06"),
                        pars = 'data/data_juno/data-joint/2020-06-11-NMO-Analysis-Input/files/bkg_rates.yaml',
                        separate_uncertainty = '{}_norm'
                    ),
                #
                # Transformations
                #
                # General
                kinint2 = OrderedDict(
                    bundle    = dict(name='integral_2d1d', version='v03', names=dict(integral='kinint2')),
                    variables = ('evis', 'ctheta'),
                    edges     = edges,
                    #  edges   = np.linspace(0.0, 12.001, 601),
                    xorders   = 4,
                    yorder    = 5,
                    ),
                rebin = OrderedDict(
                    bundle = dict(name='rebin', version='v04', major=''),
                    rounding = 5,
                    edges = edges_final,
                    instances={
                        'rebin': 'Final histogram {detector}',
                        }
                    ),
                rebin_bkg = OrderedDict(
                    bundle = dict(name='rebin', version='v04', major=''),
                    rounding = 5,
                    edges = edges_final,
                    instances={
                        'rebin_acc': 'Accidentals {autoindex}',
                        'rebin_lihe': '9Li/8He {autoindex}',
                        'rebin_fastn': 'Fast neutrons {autoindex}',
                        'rebin_alphan': 'C(alpha,n)O {autoindex}',
                        'rebin_geonu': 'Geo-nu {autoindex}'
                        }
                    ),
                bkg_shape_uncertainty = OrderedDict(
                    bundle = dict(name='trans_sumsq', version='v01', major=''),
                    ninputs = 3,
                    instances={'sumsq_bkg': 'Bkg shape variance {autoindex}'}
                    ),
                bkg_edges = OrderedDict(
                    bundle = dict(name='trans_histedges', version='v01', major=''),
                    types = ('widths', ),
                    instances={'bkgbin': 'Bkg bins {autoindex}'}
                    ),
                variance = OrderedDict(
                    bundle = dict(name='trans_snapshot', version='v01', major=''),
                    instances={'sumsq_snapshot': 'Bkg shape variance snapshot, not corrected|{autoindex}',
                               'staterr2': 'Stat. errors (snapshot)'}
                    ),
                # Oscillations and detection
                ibd_xsec = OrderedDict(
                        bundle = dict(name='xsec_ibd', version='v02'),
                        order = 1,
                        ),
                oscprob = OrderedDict(
                        bundle = dict(name='oscprob', version='v05', major='rdc', inactive=self.opts.oscprob=='matter'),
                        parameters = dict(
                            DeltaMSq23    = 2.453e-03,
                            DeltaMSq12    = 7.53e-05,
                            SinSqDouble13 = (0.08529904, 0.00267792),
                            SinSqDouble12 = 0.851004,
                            # SinSq13 = (0.0218, 0.0007),
                            # SinSq12 = 0.307,
                            )
                        ),
                # oscprob_matter = OrderedDict(
                    # bundle = dict(name='oscprob_matter', version='v01', major='rd', inactive=self.opts.oscprob=='vacuum',
                                  # names=dict(oscprob='oscprob_matter')),
                    # density = 2.6, # g/cm3
                    # pdgyear = self.opts.pdgyear,
                    # dm      = '23'
                    # ),
                anuspec_hm = OrderedDict(
                        bundle = dict(name='reactor_anu_spectra', version='v05'),
                        name = 'anuspec',
                        filename = 'data/data_juno/data-joint/2020-06-11-NMO-Analysis-Input/deprecated/JUNOInputs2020_6_26.root',
                        objectnamefmt = 'HuberMuellerFlux_{isotope}',
                        free_params=False, # enable free spectral model
                        varmode='log',
                        varname='anue_weight_{index:02d}',
                        ns_name='spectral_weights',
                        edges = np.concatenate( ( np.arange( 1.8, 8.7, 0.025 ), [ 12.3 ] ) ),
                        ),
                offeq_correction = OrderedDict(
                        bundle = dict(name='reactor_offeq_spectra', version='v05', major=''),
                        offeq_data = 'data/data_juno/data-joint/2020-06-11-NMO-Analysis-Input/deprecated/JUNOInputs2020_6_26.root',
                        objectnamefmt = 'NonEq_FluxRatio',
                        relsigma = 0.3,
                        ),
                fission_fractions = OrderedDict(
                        bundle = dict(name="parameters_yaml_v01", major = 'i'),
                        parameter = 'fission_fractions_nominal',
                        separate_uncertainty = "fission_fractions_scale",
                        label = 'Fission fraction of {isotope} in reactor {reactor}',
                        objectize=True,
                        data = 'data/data_juno/data-joint/2020-06-11-NMO-Analysis-Input/files/fission_fractions.yaml'
                        ),
                snf_correction = OrderedDict(
                        bundle = dict(name='reactor_snf_spectra', version='v05', major='r'),
                        snf_average_spectra = 'data/data_juno/data-joint/2020-06-11-NMO-Analysis-Input/deprecated/JUNOInputs2020_6_26.root',
                        objectname = 'SNF_FluxRatio'
                        ),
                lsnl = OrderedDict(
                        bundle     = dict(name='energy_nonlinearity_db_root', version='v03', major='l'),
                        names      = OrderedDict( [
                            ('nominal', 'positronScintNL'),
                            ('pull0', 'positronScintNLpull0'),
                            ('pull1', 'positronScintNLpull1'),
                            ('pull2', 'positronScintNLpull2'),
                            ('pull3', 'positronScintNLpull3'),
                            ]),
                        filename   = 'data/data_juno/data-joint/2020-06-11-NMO-Analysis-Input/deprecated/JUNOInputs2020_6_26.root',
                        edges      = 'evis_edges',
                        extrapolation_strategy = 'extrapolate',
                        nonlin_range = (0.95, 12.),
                        expose_matrix = True
                        ),
                shape_uncertainty = OrderedDict(
                        unc = uncertain(1.0, 1.0, 'percent'),
                        nbins = 200 # number of bins, the uncertainty is defined to
                        ),
                snf_norm = OrderedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = 'snf_norm',
                        label='SNF norm',
                        pars = uncertain(1.0, 'fixed'),
                        ),
                reactor_active_norm = OrderedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = 'reactor_active_norm',
                        label='Reactor nu (active norm)',
                        pars = uncertain(1.0, 'fixed'),
                        ),
                #
                # Backgrounds
                #
                bkg_spectra = OrderedDict(
                    bundle    = dict(name='root_histograms_v05'),
                    filename  = 'data/data_juno/data-joint/2020-06-11-NMO-Analysis-Input/deprecated/JUNOInputs2020_6_26.root',
                    formats = ['AccBkgHistogramAD',           'Li9BkgHistogramAD',       'FnBkgHistogramAD',       'AlphaNBkgHistogramAD',   'GeoNuTh232'                 , 'GeoNuU238'],
                    names   = ['acc_spectrum',                'lihe_spectrum',           'fastn_spectrum',         'alphan_spectrum',        'geonu_Th232_spectrum'       , 'geonu_U238_spectrum'],
                    labels  = ['Accidentals|(norm spectrum)', '9Li/8He|(norm spectrum)', 'Fast n|(norm spectrum)', 'AlphaN|(norm spectrum)', 'GeoNu Th232|(norm spectrum)', 'GeoNu U238|(norm spectrum)'],
                    normalize = True,
                    ),
                geonu_fractions=OrderedDict(
                        bundle = dict(name='var_fractions_v02'),
                        names = [ 'Th232', 'U238' ],
                        format = 'frac_{component}',
                        fractions = uncertaindict(
                            Th232 = ( 0.23, 'fixed' )
                            ),
                        ),
                )

        if 'eres' in self.opts.energy_model:
            self.cfg.eres = OrderedDict(
                    bundle = dict(name='detector_eres_normal', version='v01', major=''),
                    # pars: sigma_e/e = sqrt(a^2 + b^2/E + c^2/E^2),
                    # a - non-uniformity
                    # b - statistical term
                    # c - noise
                    parameter = 'eres',
                    pars = uncertaindict([
                        ('a_nonuniform', (0.0082, 0.0001)),
                        ('b_stat',       (0.0261, 0.0002)),
                        ('c_noise',      (0.0123, 0.0004))
                        ],
                        mode='absolute'),
                    expose_matrix = False
                    )
        elif 'multieres' in self.opts.energy_model:
            self.cfg.subdetector_fraction = OrderedDict(
                    bundle = dict(name="parameters", version = "v03"),
                    parameter = "subdetector_fraction",
                    label = 'Subdetector fraction weight for {subdetector}',
                    pars = uncertaindict(
                        [(subdet_name, (0.2, 0.04, 'relative')) for subdet_name in self.subdetectors_names],
                        ),
                    covariance = 'data/data_juno/energy_resolution/2019_subdetector_eres_n200_proper/subdetector5_cov.txt'
                    )
            self.cfg.multieres = OrderedDict(
                    bundle = dict(name='detector_multieres_stats', version='v01', major='s'),
                    # pars: sigma_e/e = sqrt(b^2/E),
                    parameter = 'eres',
                    relsigma = self.opts.eres_b_relsigma,
                    nph = 'data/data_juno/energy_resolution/2019_subdetector_eres_n200_proper/subdetector5_nph.txt',
                    rescale_nph = self.opts.eres_npe,
                    expose_matrix = False
                    )

        if not 'lsnl' in self.opts.correlation:
            self.cfg.lsnl.correlations = None
            self.cfg.lsnl.correlations_pars = None
        if not 'subdetectors' in self.opts.correlation:
            self.cfg.subdetector_fraction.correlations = None
Пример #20
0
    def init_configuration(self):
        if self.opts.eres_npe:
            self.opts.eres_sigma = self.opts.eres_npe**-0.5
        else:
            self.opts.eres_npe = self.opts.eres_sigma**-2
        print('Energy resolution at 1 MeV: {}% ({} pe)'.format(
            self.opts.eres_sigma * 100, self.opts.eres_npe))

        self.cfg = NestedDict(
                kinint2 = NestedDict(
                    bundle   = dict(name='integral_2d1d', version='v03', names=dict(integral='kinint2')),
                    variables = ('evis', 'ctheta'),
                    edges    = np.arange(0.0, 12.001, 0.01), #FIXME
                    #  edges    = np.linspace(0.0, 12.001, 601),
                    xorders   = 4,
                    yorder   = 5,
                    ),
                rebin = NestedDict(
                        bundle = dict(name='rebin', version='v03', major=''),
                        rounding = 3,
                        edges = np.concatenate( (
                                    [0.7],
                                    np.arange(1, 6.0, self.opts.estep),
                                    np.arange(6, 7.0, 0.1),
                                    [7.0, 7.5, 12.0]
                                )
                            ),
                        name = 'rebin',
                        label = 'Final histogram {detector}'
                        ),
                ibd_xsec = NestedDict(
                    bundle = dict(name='xsec_ibd', version='v02'),
                    order = 1,
                    ),
                oscprob = NestedDict(
                    bundle = dict(name='oscprob', version='v04', major='rdc', inactive=self.opts.oscprob=='matter'),
                    pdgyear = self.opts.pdgyear,
                    dm      = self.opts.dm
                    ),
                oscprob_matter = NestedDict(
                    bundle = dict(name='oscprob_matter', version='v01', major='rd', inactive=self.opts.oscprob=='vacuum',
                                  names=dict(oscprob='oscprob_matter')),
                    density = 2.6, # g/cm3
                    pdgyear = self.opts.pdgyear,
                    dm      = self.opts.dm
                    ),
                anuspec_hm = NestedDict(
                    bundle = dict(name='reactor_anu_spectra', version='v03', inactive=self.opts.flux!='huber-mueller'),
                    name = 'anuspec',
                    filename = ['data/reactor_anu_spectra/Huber/Huber_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat',
                        'data/reactor_anu_spectra/Mueller/Mueller_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat'],
                    # strategy = dict( underflow='constant', overflow='extrapolate' ),
                    edges = np.concatenate( ( np.arange( 1.8, 8.7, 0.025 ), [ 12.3 ] ) ),
                    ),
                anuspec_ill = NestedDict(
                    bundle = dict(name='reactor_anu_spectra', version='v03', inactive=self.opts.flux!='ill-vogel'),
                    name = 'anuspec',
                    filename = ['data/reactor_anu_spectra/ILL/ILL_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat',
                                'data/reactor_anu_spectra/Vogel/Vogel_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat'],
                    # strategy = dict( underflow='constant', overflow='extrapolate' ),
                    edges = np.concatenate( ( np.arange( 1.8, 8.7, 0.025 ), [ 12.3 ] ) ),
                    ),
                offeq_correction = NestedDict(
                    bundle = dict(name='reactor_offeq_spectra',
                                  version='v03', major='ir'),
                    offeq_data = 'data/reactor_anu_spectra/Mueller/offeq/mueller_offequilibrium_corr_{isotope}.dat',
                    ),
                eff = NestedDict(
                    bundle = dict(
                        name='parameters',
                        version='v01'),
                    parameter="eff",
                    label='Detection efficiency',
                    pars = uncertain(0.8, 'fixed')
                    ),
                global_norm = NestedDict(
                    bundle = dict(
                        name='parameters',
                        version='v01'),
                    parameter="global_norm",
                    label='Global normalization',
                    pars = uncertain(1, 'free'),
                    ),
                fission_fractions = NestedDict(
                    bundle = dict(name="parameters_yaml_v01", major = 'i'),
                    parameter = "fission_fractions",
                    label = 'Fission fraction of {isotope} in reactor {reactor}',
                    objectize=True,
                    data = 'data/data_juno/fission_fractions/2013.12.05_xubo.yaml'
                    ),
                livetime = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "livetime",
                        label = 'Livetime of {detector} in seconds',
                        pars = uncertaindict(
                            [('AD1', (6*365*seconds_per_day, 'fixed'))],
                            ),
                        ),
                baselines = NestedDict(
                        bundle = dict(name='reactor_baselines', version='v01', major = 'rd'),
                        reactors  = 'near-equal' in self.opts.reactors \
                                     and 'data/juno_nominal/coordinates_reactors_equal.py' \
                                     or 'data/juno_nominal/coordinates_reactors.py',
                        detectors = 'data/juno_nominal/coordinates_det.py',
                        unit = 'km'
                        ),
                norm = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "norm",
                        label = 'Reactor power/detection efficiency correlated normalization',
                        pars = uncertain(1.0, (2**2+1**2)**0.5, 'percent')
                        ),
                thermal_power = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "thermal_power",
                        label = 'Thermal power of {reactor} in GWt',
                        pars = uncertaindict([
                            ('TS1',  4.6),
                            ('TS2',  4.6),
                            ('TS3',  4.6),
                            ('TS4',  4.6),
                            ('YJ1',  2.9),
                            ('YJ2',  2.9),
                            ('YJ3',  2.9),
                            ('YJ4',  2.9),
                            ('YJ5',  2.9),
                            ('YJ6',  2.9),
                            ('DYB', 17.4),
                            ('HZ',  17.4),
                            ],
                            uncertainty=0.8,
                            mode='percent'
                            ),
                        ),
                target_protons = NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "target_protons",
                        label = 'Number of protons in {detector}',
                        pars = uncertaindict(
                            [('AD1', (1.42e33, 'fixed'))],
                            ),
                        ),
                conversion_factor =  NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter='conversion_factor',
                        label='Conversion factor from GWt to MeV',
                        #taken from transformations/neutrino/ReactorNorm.cc
                        pars = uncertain(R.NeutrinoUnits.reactorPowerConversion, 'fixed'),
                        ),
                eper_fission =  NestedDict(
                        bundle = dict(name="parameters", version = "v01"),
                        parameter = "eper_fission",
                        label = 'Energy per fission for {isotope} in MeV',
                        pars = uncertaindict(
                            [
                              ('U235',  (201.92, 0.46)),
                              ('U238',  (205.52, 0.96)),
                              ('Pu239', (209.99, 0.60)),
                              ('Pu241', (213.60, 0.65))
                              ],
                            mode='absolute'
                            ),
                        ),
                lsnl = NestedDict(
                        bundle = dict( name='energy_nonlinearity_birks_cherenkov', version='v01', major=''),
                        stopping_power='data/data_juno/energy_model/2019_birks_cherenkov_v01/stoppingpower.txt',
                        annihilation_electrons=dict(
                            file='data/data_juno/energy_model/2019_birks_cherenkov_v01/hgamma2e.root',
                            histogram='hgamma2e_1KeV',
                            scale=1.0/50000 # events simulated
                            ),
                        pars = uncertaindict(
                            [
                                ('birks.Kb0',               (1.0, 'fixed')),
                                ('birks.Kb1',           (15.2e-3, 0.1776)),
                                # ('birks.Kb2',           (0.0, 'fixed')),
                                ("cherenkov.E_0",         (0.165, 'fixed')),
                                ("cherenkov.p0",  ( -7.26624e+00, 'fixed')),
                                ("cherenkov.p1",   ( 1.72463e+01, 'fixed')),
                                ("cherenkov.p2",  ( -2.18044e+01, 'fixed')),
                                ("cherenkov.p3",   ( 1.44731e+01, 'fixed')),
                                ("cherenkov.p4",   ( 3.22121e-02, 'fixed')),
                                ("Npescint",            (1341.38, 0.0059)),
                                ("kC",                      (0.5, 0.4737)),
                                ("normalizationEnergy",   (11.99, 'fixed'))
                                ],
                            mode='relative'
                            ),
                        integration_order = 2,
                        correlations_pars = [ 'birks.Kb1', 'Npescint', 'kC' ],
                        correlations = [ 1.0,   0.94, -0.97,
                                         0.94,  1.0,  -0.985,
                                        -0.97, -0.985, 1.0   ],
                        fill_matrix=True,
                        labels = dict(
                            normalizationEnergy = 'Conservative normalization point at 12 MeV'
                            ),
                        ),
                shape_uncertainty = NestedDict(
                        unc = uncertain(1.0, 1.0, 'percent'),
                        nbins = 200 # number of bins, the uncertainty is defined to
                        )
                )

        if 'eres' in self.opts.energy_model:
            bconf = self.opts.eres_b_relsigma and (self.opts.eres_b_relsigma,
                                                   'relative') or ('fixed', )
            self.cfg.eres = NestedDict(
                bundle=dict(name='detector_eres_normal',
                            version='v01',
                            major=''),
                # pars: sigma_e/e = sqrt( a^2 + b^2/E + c^2/E^2 ),
                parameter='eres',
                pars=uncertaindict([('a', (0.000, 'fixed')),
                                    ('b', (self.opts.eres_sigma, ) + bconf),
                                    ('c', (0.000, 'fixed'))]),
                expose_matrix=False)
        elif 'multieres' in self.opts.energy_model:
            if self.opts.subdetectors_number == 200:
                self.cfg.subdetector_fraction = NestedDict(
                    bundle=dict(name="parameters", version="v02"),
                    parameter="subdetector_fraction",
                    label='Subdetector fraction weight for {subdetector}',
                    pars=uncertaindict(
                        [(subdet_name, (1.0 / self.opts.subdetectors_number,
                                        0.04, 'relative'))
                         for subdet_name in self.subdetectors_names], ),
                    correlations=
                    'data/data_juno/energy_resolution/2019_subdetector_eres_n200_proper/corrmap_xuyu.txt'
                )
                self.cfg.multieres = NestedDict(
                    bundle=dict(name='detector_multieres_stats',
                                version='v01',
                                major='s'),
                    # pars: sigma_e/e = sqrt(b^2/E),
                    parameter='eres',
                    relsigma=self.opts.eres_b_relsigma,
                    nph=
                    'data/data_juno/energy_resolution/2019_subdetector_eres_n200_proper/subdetector200_nph.txt',
                    rescale_nph=self.opts.eres_npe,
                    expose_matrix=False)
            elif self.opts.subdetectors_number == 5:
                self.cfg.subdetector_fraction = NestedDict(
                    bundle=dict(name="parameters", version="v03"),
                    parameter="subdetector_fraction",
                    label='Subdetector fraction weight for {subdetector}',
                    pars=uncertaindict(
                        [(subdet_name, (1.0 / self.opts.subdetectors_number,
                                        0.04, 'relative'))
                         for subdet_name in self.subdetectors_names], ),
                    covariance=
                    'data/data_juno/energy_resolution/2019_subdetector_eres_n200_proper/subdetector5_cov.txt'
                )
                self.cfg.multieres = NestedDict(
                    bundle=dict(name='detector_multieres_stats',
                                version='v01',
                                major='s'),
                    # pars: sigma_e/e = sqrt(b^2/E),
                    parameter='eres',
                    relsigma=self.opts.eres_b_relsigma,
                    nph=
                    'data/data_juno/energy_resolution/2019_subdetector_eres_n200_proper/subdetector5_nph.txt',
                    rescale_nph=self.opts.eres_npe,
                    expose_matrix=False)
            else:
                assert False

        if not 'lsnl' in self.opts.correlation:
            self.cfg.lsnl.correlations = None
            self.cfg.lsnl.correlations_pars = None
        if not 'subdetectors' in self.opts.correlation:
            self.cfg.subdetector_fraction.correlations = None

        self.cfg.eff.pars = uncertain(0.73, 'fixed')
        self.cfg.livetime.pars['AD1'] = uncertain(6 * 330 * seconds_per_day,
                                                  'fixed')
Пример #21
0
expr = 'prod[a]| sum[z]| weight1[z]*weight2[a] * spec| enu()'
a = Expression(expr, indices=indices)

print(a.expressions_raw)
print(a.expressions)

a.parse()
a.guessname(lib, save=True)
a.tree.dump(True)

print()
cfg = NestedDict(
    weight1=NestedDict(bundle='dummyvar',
                       variables=uncertaindict([
                           ('weight1', (2, 0.1)),
                       ],
                                               mode='percent')),
    weight2=NestedDict(bundle='dummyvar',
                       variables=uncertaindict([
                           ('weight2', (3, 0.1)),
                       ],
                                               mode='percent')),
    enu=NestedDict(bundle='dummy',
                   name='enu',
                   input=False,
                   size=10,
                   debug=False),
    spec=NestedDict(bundle='dummy',
                    name='spec',
                    input=True,
                    size=10,
Пример #22
0
        'norm1[d] * norm2[z] * eres[z,d]| hist[d]()'
    ],

    # Configuration
    bundles=NestedDict(eres=NestedDict(
        bundle=dict(name='detector_eres_normal',
                    version='v01',
                    major=['z'],
                    names=dict(eres_matrix='smearing_matrix', )),
        parameter='eres',
        pars=uncertaindict([
            ('z1.a', (0.0, 'fixed')),
            ('z1.b', (0.05, 30, 'percent')),
            ('z1.c', (0.0, 'fixed')),
            ('z2.a', (0.0, 'fixed')),
            ('z2.b', (0.10, 30, 'percent')),
            ('z2.c', (0.0, 'fixed')),
            ('z3.a', (0.0, 'fixed')),
            ('z3.b', (0.15, 30, 'percent')),
            ('z3.c', (0.0, 'fixed')),
        ]),
        labels=dict(matrix='Smearing\nmatrix\n{autoindex}',
                    smear='Energy\nresolution\n{autoindex}',
                    parameter='{description} (zone {autoindex})'),
        split_transformations=True),
                       norm1=NestedDict(
                           bundle='parameters_v01',
                           parameter='norm1',
                           label='Normalization at detector {detector}',
                           pars=uncertaindict(
                               [
Пример #23
0
 def init_configuration(self):
     self.cfg = NestedDict(
         integral=NestedDict(
             bundle=dict(name='integral_2d1d', version='v03'),
             variables=('evis', 'ctheta'),
             edges=N.linspace(0.0, 12.0, 241, dtype='d'),
             xorders=4,
             yorder=2,
         ),
         ibd_xsec=NestedDict(bundle=dict(name='xsec_ibd', version='v02'),
                             order=1,
                             pdg_year='dyboscar'),
         oscprob=NestedDict(
             bundle=dict(name='oscprob', version='v04', major='rdc'),
             #  pdg_year='dyboscar',
             dm='23',
         ),
         anuspec=NestedDict(
             bundle=dict(name='reactor_anu_spectra', version='v04'),
             name='anuspec',
             filename=[
                 'data/reactor_anu_spectra/Huber/Huber_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat',
                 'data/reactor_anu_spectra/Mueller/Mueller_smooth_extrap_{isotope}_13MeV0.01MeVbin.dat'
             ],
             free_params=True,  # enable free spectral model
             varmode='plain',
             varname='anue_weight_{index}',
             ns_name='spectral_weights',
             edges=N.concatenate((N.arange(1.8, 8.7, 0.5), [12.3])),
         ),
         offeq_correction=NestedDict(
             bundle=dict(name='reactor_offeq_spectra',
                         version='v04',
                         major='ir'),
             offeq_data=
             'data/reactor_anu_spectra/Mueller/offeq/mueller_offequilibrium_corr_{isotope}.dat',
         ),
         eff=NestedDict(
             bundle=dict(name='efficiencies',
                         version='v02',
                         names=dict(norm='global_norm'),
                         major=''),
             correlated=False,
             uncorrelated=True,
             norm=True,
             efficiencies='data/dayabay/efficiency/P15A_efficiency.py'),
         livetime=NestedDict(
             bundle=dict(name='dayabay_livetime_hdf', version='v02'),
             file=
             'data/dayabay/data/P15A/dubna/dayabay_data_dubna_v15_bcw_adsimple.hdf5',
         ),
         baselines=NestedDict(
             bundle=dict(name='reactor_baselines',
                         version='v01',
                         major='rd'),
             reactors=
             'data/dayabay/reactor/coordinates/coordinates_docDB_9757.py',
             detectors=
             'data/dayabay/ad/coordinates/coordinates_docDB_9757.py',
             unit='m'),
         thermal_power=NestedDict(
             bundle=dict(name='dayabay_reactor_burning_info_v02',
                         major='ri'),
             reactor_info=
             'data/dayabay/reactor/power/WeeklyAvg_P15A_v1.txt.npz',
             fission_uncertainty_info=
             'data/dayabay/reactor/fission_fraction/2013.12.05_djurcic.py',
             add_ff=True,
             nominal_power=False,
         ),
         nominal_thermal_power=NestedDict(
             bundle=dict(name="parameters", version="v01"),
             parameter='nominal_thermal_power',
             label='Nominal thermal power [Gw] for {reactor}',
             pars=uncertaindict(
                 [
                     ('DB1', 2.895),
                     ('DB2', 2.895),
                     ('LA1', 2.895),
                     ('LA2', 2.895),
                     ('LA3', 2.895),
                     ('LA4', 2.895),
                 ],
                 uncertainty=0.5,
                 mode='percent',
             ),
         ),
         snf_ff=NestedDict(
             bundle=dict(name="parameters", version="v01"),
             parameter='snf_fission_fractions',
             objectize=True,
             label='SNF fission fraction {isotope}',
             pars=uncertaindict(
                 [('U235', 0.563), ('U238', 0.079), ('Pu239', 0.301),
                  ('Pu241', 0.057)],
                 mode='fixed',
             ),
         ),
         snf_denom=NestedDict(
             bundle=dict(name="parameters", version="v01"),
             parameter='snf_denom',
             objectize=True,
             label='SNF inverse weight for average energy release per decay',
             pars=uncertain(snf_energy_per_decay, 'fixed'),
         ),
         snf_correction=NestedDict(
             bundle=dict(name='reactor_snf_spectra',
                         version='v04',
                         major='r'),
             snf_average_spectra=
             './data/reactor_anu_spectra/SNF/kopeikin_0412.044_spent_fuel_spectrum_smooth.dat',
         ),
         eper_fission=NestedDict(
             bundle=dict(name="parameters", version="v01"),
             parameter="eper_fission",
             label='Energy per fission for {isotope} in MeV',
             pars=uncertaindict([('Pu239', (211.12, 0.34)),
                                 ('Pu241', (214.26, 0.33)),
                                 ('U235', (202.36, 0.26)),
                                 ('U238', (205.99, 0.52))],
                                mode='absolute'),
         ),
         conversion_factor=NestedDict(
             bundle=dict(name="parameters", version="v01"),
             parameter='conversion_factor',
             label='Conversion factor from GWt to MeV',
             #taken from transformations/neutrino/ReactorNorm.cc
             pars=uncertain(R.NeutrinoUnits.reactorPowerConversion,
                            'fixed'),
         ),
         nprotons_nominal=NestedDict(
             bundle=dict(name="parameters", version="v01"),
             parameter='nprotons_nominal',
             label=
             'Daya Bay nominal number of protons (20 tons x GdLS Np/ton)',
             pars=uncertain(20.0 * 7.163e28, 'fixed'),
         ),
         nprotons_corr=NestedDict(
             bundle=dict(name="parameters", version="v01"),
             parameter='nprotons_corr',
             label='Correction to number of protons per AD',
             pars=uncertaindict(
                 [('AD11', 19941. / nominal_mass),
                  ('AD12', 19967. / nominal_mass),
                  ('AD21', 19891. / nominal_mass),
                  ('AD22', 19944. / nominal_mass),
                  ('AD31', 19917. / nominal_mass),
                  ('AD32', 19989. / nominal_mass),
                  ('AD33', 19892. / nominal_mass),
                  ('AD34', 19931. / nominal_mass)],
                 mode='fixed',
             ),
         ),
         iav=NestedDict(
             bundle=dict(name='detector_iav_db_root_v03', major='d'),
             parname='OffdiagScale',
             scale=uncertain(1.0, 4, 'percent'),
             ndiag=1,
             filename='data/dayabay/tmp/detector_iavMatrix_P14A_LS.root',
             matrixname='iav_matrix',
         ),
         eres=NestedDict(
             bundle=dict(name='detector_eres_normal',
                         version='v01',
                         major=''),
             # pars: sigma_e/e = sqrt( a^2 + b^2/E + c^2/E^2 ),
             parameter='eres',
             pars=uncertaindict(
                 [('a', 0.016), ('b', 0.081), ('c', 0.026)],
                 #  [('a', 0.014764) ,
                 #  ('b', 0.0869) ,
                 #  ('c', 0.0271)],
                 mode='percent',
                 uncertainty=30),
             expose_matrix=True),
         lsnl=NestedDict(
             bundle=dict(name='energy_nonlinearity_db_root',
                         version='v02',
                         major='dl'),
             names=['nominal', 'pull0', 'pull1', 'pull2', 'pull3'],
             filename='data/dayabay/tmp/detector_nl_consModel_450itr.root',
             par=uncertain(1.0, 0.2, 'percent'),
             edges='evis_edges',
             extrapolation_strategy='extrapolate',
             nonlin_range=(0.5, 12.)),
         rebin=NestedDict(bundle=dict(name='rebin', version='v03',
                                      major=''),
                          rounding=3,
                          edges=N.concatenate(
                              ([0.7], N.arange(1.2, 8.1, 0.2), [12.0])),
                          name='rebin',
                          label='Final histogram\n {detector}'),
         #
         # Spectra
         #
         bkg_spectrum_acc=NestedDict(
             bundle=dict(name='root_histograms_v03'),
             filename=
             'data/dayabay/data_spectra/P15A_IHEP_data/P15A_All_raw_sepctrum_coarse.root',
             format='{site}_AD{adnum_local}_singleTrigEnergy',
             name='bkg_spectrum_acc',
             label='Accidentals {detector}\n (norm spectrum)',
             groups=self.groups,
             normalize=True,
         ),
         bkg_spectrum_li=NestedDict(
             bundle=dict(name='root_histograms_v03'),
             filename='data/dayabay/bkg/lihe/toyli9spec_BCWmodel_v1.root',
             format='h_eVisAllSmeared',
             name='bkg_spectrum_li',
             label='9Li spectrum\n (norm)',
             normalize=True,
         ),
         bkg_spectrum_he=NestedDict(
             bundle=dict(name='root_histograms_v03'),
             filename='data/dayabay/bkg/lihe/toyhe8spec_BCWmodel_v1.root',
             format='h_eVisAllSmeared',
             name='bkg_spectrum_he',
             label='8He spectrum\n (norm)',
             normalize=True,
         ),
         bkg_spectrum_amc=NestedDict(
             bundle=dict(name='root_histograms_v03'),
             filename='data/dayabay/bkg/P12B_amc_expofit.root',
             format='hCorrAmCPromptSpec',
             name='bkg_spectrum_amc',
             label='AmC spectrum\n (norm)',
             normalize=True,
         ),
         bkg_spectrum_alphan=NestedDict(
             bundle=dict(name='root_histograms_v03'),
             filename='data/dayabay/bkg/P12B_alphan_coarse.root',
             format='AD{adnum_global_alphan_subst}',
             groups=self.groups,
             name='bkg_spectrum_alphan',
             label='C(alpha,n) spectrum\n {detector} (norm)',
             normalize=True,
         ),
         lihe_fractions=NestedDict(
             bundle=dict(name='var_fractions_v02'),
             names=['li', 'he'],
             format='frac_{component}',
             fractions=uncertaindict(li=(0.95, 0.05, 'relative')),
         ),
         bkg_spectrum_fastn=NestedDict(
             bundle=dict(name='dayabay_fastn_power',
                         version='v02',
                         major='s'),
             parameter='fastn_shape',
             name='bkg_spectrum_fastn',
             normalize=(0.7, 12.0),
             bins='evis_edges',
             order=2,
         ),
         #
         # Parameters
         #
         fastn_shape=NestedDict(
             bundle=dict(name="parameters", version="v01"),
             parameter='fastn_shape',
             label='Fast neutron shape parameter for {site}',
             pars=uncertaindict(
                 [('EH1', (67.79, 0.1132)), ('EH2', (58.30, 0.0817)),
                  ('EH3', (68.02, 0.0997))],
                 mode='relative',
             ),
         ),
         lihe_fracs=NestedDict(
             bundle=dict(name='dyb_lihe_fractions', version='v01'),
             frac_file_path='./data/dayabay/fractions/{site}_fractions.txt',
             mode=self.opts.lihe_fractions)
         if self.opts.lihe_fractions != 'no' else NestedDict(),
         #
         # Rates
         #
         bkg_rate_acc=NestedDict(
             bundle=dict(name="parameters", version="v01"),
             parameter='bkg_rate_acc',
             label='Acc rate at {detector}',
             pars=uncertaindict(
                 [
                     ('AD11', 8.463602),
                     ('AD12', 8.464611),
                     ('AD21', 6.290756),
                     ('AD22', 6.180896),
                     ('AD31', 1.273798),
                     ('AD32', 1.189542),
                     ('AD33', 1.197807),
                     ('AD34', 0.983096),
                 ],
                 uncertainty=1.0,
                 mode='percent',
             ),
             separate_uncertainty='acc_norm',
         ),
         bkg_rate_lihe=NestedDict(
             bundle=dict(name="parameters", version="v01"),
             parameter='bkg_rate_lihe',
             label='⁹Li/⁸He rate at {site}',
             pars=uncertaindict(
                 [('EH1', (2.46, 1.06)), ('EH2', (1.72, 0.77)),
                  ('EH3', (0.15, 0.06))],
                 mode='absolute',
             ),
         ),
         bkg_rate_fastn=NestedDict(
             bundle=dict(name="parameters", version="v01"),
             parameter='bkg_rate_fastn',
             label='Fast neutron rate at {site}',
             pars=uncertaindict(
                 [('EH1', (0.792, 0.103)), ('EH2', (0.566, 0.074)),
                  ('EH3', (0.047, 0.009))],
                 mode='absolute',
             ),
         ),
         bkg_rate_amc=NestedDict(
             bundle=dict(name="parameters", version="v01"),
             parameter='bkg_rate_amc',
             label='AmC rate at {detector}',
             pars=uncertaindict(
                 [
                     ('AD11', (0.18, 0.08)),
                     ('AD12', (0.18, 0.08)),
                     ('AD21', (0.16, 0.07)),
                     ('AD22', (0.15, 0.07)),
                     ('AD31', (0.07, 0.03)),
                     ('AD32', (0.06, 0.03)),
                     ('AD33', (0.07, 0.03)),
                     ('AD34', (0.05, 0.02)),
                 ],
                 mode='absolute',
             ),
         ),
         bkg_rate_alphan=NestedDict(
             bundle=dict(name="parameters", version="v01"),
             parameter='bkg_rate_alphan',
             label='C(alpha,n) rate at {detector}',
             pars=uncertaindict(
                 [
                     ('AD11', (0.08)),
                     ('AD12', (0.07)),
                     ('AD21', (0.05)),
                     ('AD22', (0.07)),
                     ('AD31', (0.05)),
                     ('AD32', (0.05)),
                     ('AD33', (0.05)),
                     ('AD34', (0.05)),
                 ],
                 uncertainty=50,
                 mode='percent',
             ),
         ),
     )
Пример #24
0
            variants = OrderedDict([
                ( 'AD11', 'EH1_AD1' ), ( 'AD12', 'EH1_AD2' ),
                ( 'AD21', 'EH2_AD3' ), ( 'AD22', 'EH2_AD8' ),
                ( 'AD31', 'EH3_AD4' ), ( 'AD32', 'EH3_AD5' ), ( 'AD33', 'EH3_AD6' ), ( 'AD34', 'EH3_AD7' ),
                ])
            )
        )

cfg.lihe = NestedDict(
        rates = NestedDict(
            docdb = [10956],
            lifraction = uncertain( 0.95, 0.05, 'percent' ),
            correlation = 'group',
            rates = uncertaindict(
                mode = 'absolute',
                EH1 = (2.71, 0.90),
                EH2 = (1.91, 0.73),
                EH3 = (0.22, 0.07),
                )
            ),
        spectra = NestedDict(
            docdb = [8772, 8860],
            list = [ 'li_spectrum', 'he_spectrum' ],
            li_spectrum = NestedDict(
                bundle = 'root_histograms_v01',
                file   = 'data/background/lihe/13.09/toyli9spec_BCWmodel_v1.root',
                format = 'h_eVisAllSmeared',
                ),
            he_spectrum = NestedDict(
                bundle = 'root_histograms_v01',
                file   = 'data/background/lihe/13.09/toyhe8spec_BCWmodel_v1.root',
                format = 'h_eVisAllSmeared',