From 128470d9296a7c8d39aa8defa00f99f5ca5c36fd Mon Sep 17 00:00:00 2001 From: shivesh Date: Mon, 19 Mar 2018 12:00:12 -0500 Subject: refactor --- utils/gf.py | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 utils/gf.py (limited to 'utils/gf.py') diff --git a/utils/gf.py b/utils/gf.py new file mode 100644 index 0000000..766c161 --- /dev/null +++ b/utils/gf.py @@ -0,0 +1,105 @@ +# author : S. Mandalia +# s.p.mandalia@qmul.ac.uk +# +# date : March 17, 2018 + +""" +Useful GolemFit wrappers for the BSM flavour ratio analysis +""" + +from __future__ import absolute_import, division + +import argparse +from functools import partial + +import GolemFitPy as gf + +from utils.enums import * +from utils.misc import enum_keys, enum_parse + + +def data_distributions(fitter): + hdat = fitter.GetDataDistribution() + binedges = np.asarray([fitter.GetZenithBinsData(), fitter.GetEnergyBinsData()]) + return hdat, binedges + + +def fit_flags(fitflag_categ): + flags = gf.FitParametersFlag() + if fitflag_categ is FitFlagCateg.xs: + # False means it's not fixed in minimization + flags.NeutrinoAntineutrinoRatio = False + return flags + + +def fit_params(fit_categ): + params = gf.FitParameters() + params.astroNorm = 7.5 + params.astroDeltaGamma = 0.9 + if fit_categ is FitCateg.hesespl: + params.astroNormSec = 0 + elif fit_categ is FitCateg.hesedpl: + params.astroNormSec=7.0 + elif fit_categ is FitCateg.zpspl: + # zero prompt, single powerlaw + params.promptNorm = 0 + params.astroNormSec = 0 + elif fit_categ is FitCateg.zpdpl: + # zero prompt, double powerlaw + params.promptNorm = 0 + params.astroNormSec=7.0 + elif fit_categ is FitCateg.nunubar2: + params.NeutrinoAntineutrinoRatio = 2 + + +def fit_priors(fitpriors_categ): + priors = gf.Priors() + if fitpriors_categ == FitPriorsCateg.xs: + priors.promptNormCenter = 1 + priors.promptNormWidth = 3 + priors.astroDeltaGammaCenter = 0 + priors.astroDeltaGammaWidth = 1 + return priors + + +def gen_steering_params(steering_categ, quiet=False): + params = gf.SteeringParams() + if quiet: params.quiet = True + params.fastmode = False + params.do_HESE_reshuffle = False + params.numc_tag = steering_categ.name + params.baseline_astro_spectral_index = -2. + if steering_categ is SteeringCateg.LONGLIFE: + params.years = [999] + params.numc_tag = 'std_half1' + if steering_categ is SteeringCateg.DPL: + params.diffuse_fit_type = gf.DiffuseFitType.DoublePowerLaw + params.numc_tag = 'std_half1' + return params + + +def gf_argparse(parser): + parser.add_argument( + '--data', default='real', type=partial(enum_parse, c=DataType), + choices=enum_keys(DataType), help='select datatype' + ) + parser.add_argument( + '--ast', default='baseline', type=partial(enum_parse, c=SteeringCateg), + choices=enum_keys(SteeringCateg), + help='use asimov/fake dataset with specific steering' + ) + parser.add_argument( + '--aft', default='hesespl', type=partial(enum_parse, c=FitCateg), + choices=enum_keys(FitCateg), + help='use asimov/fake dataset with specific Fit' + ) + parser.add_argument( + '--axs', default='nom', type=partial(enum_parse, c=XSCateg), + choices=enum_keys(XSCateg), + help='use asimov/fake dataset with xs scaling' + ) + parser.add_argument( + '--priors', default='uniform', type=partial(enum_parse, c=Priors), + choices=enum_keys(Priors), help='Bayesian priors' + ) + -- cgit v1.2.3