1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
# 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
from functools import partial
import numpy as np
try:
import GolemFitPy as gf
except:
print 'Running without GolemFit'
pass
from utils.enums import DataType, Likelihood, SteeringCateg
from utils.misc import enum_parse, parse_bool, thread_factors
from utils.param import ParamSet
FITTER = None
def fit_flags(llh_paramset):
default_flags = {
# False means it's not fixed in minimization
'astroFlavorAngle1' : True,
'astroFlavorAngle2' : True,
'convNorm' : True,
'promptNorm' : True,
'muonNorm' : True,
'astroNorm' : True,
'astroParticleBalance' : True,
# 'astroDeltaGamma' : True,
'cutoffEnergy' : True,
'CRDeltaGamma' : True,
'piKRatio' : True,
'NeutrinoAntineutrinoRatio' : True,
'darkNorm' : True,
'domEfficiency' : True,
'holeiceForward' : True,
'anisotropyScale' : True,
'astroNormSec' : True,
'astroDeltaGammaSec' : True
}
flags = gf.FitParametersFlag()
gf_nuisance = []
for param in llh_paramset:
if param.name in default_flags:
print 'Setting param {0:<15} to float in the ' \
'minimisation'.format(param.name)
flags.__setattr__(param.name, False)
gf_nuisance.append(param)
return flags, ParamSet(gf_nuisance)
def steering_params(args):
steering_categ = args.ast
params = gf.SteeringParams(gf.sampleTag.MagicTau)
params.quiet = False
if args.debug:
params.fastmode = False
else:
params.fastmode = True
params.simToLoad= steering_categ.name.lower()
params.evalThreads = args.threads
if args.likelihood is Likelihood.GOLEMFIT:
params.frequentist = False;
elif args.likelihood is Likelihood.GF_FREQ:
params.frequentist = True;
if hasattr(args, 'binning'):
params.minFitEnergy = args.binning[0] # GeV
params.maxFitEnergy = args.binning[-1] # GeV
else:
params.minFitEnergy = 6E4 # GeV
params.maxFitEnergy = 1E7 # GeV
params.load_data_from_text_file = False
params.sampleToLoad = gf.sampleTag.MagicTau
params.use_legacy_selfveto_calculation = False
# params.spline_hole_ice = False
# params.spline_dom_efficiency = False
params.spline_hole_ice = True
params.spline_dom_efficiency = True
return params
def setup_asimov(params):
print 'Injecting the model', params
asimov_params = gf.FitParameters(gf.sampleTag.MagicTau)
for parm in params:
asimov_params.__setattr__(parm.name, float(parm.value))
FITTER.SetupAsimov(asimov_params)
def setup_realisation(params, seed):
print 'Injecting the model', params
asimov_params = gf.FitParameters(gf.sampleTag.MagicTau)
for parm in params:
asimov_params.__setattr__(parm.name, float(parm.value))
FITTER.Swallow(FITTER.SpitRealization(asimov_params, seed))
def setup_fitter(args, asimov_paramset):
global FITTER
datapaths = gf.DataPaths()
sparams = steering_params(args)
npp = gf.NewPhysicsParams()
FITTER = gf.GolemFit(datapaths, sparams, npp)
if args.data is DataType.ASIMOV:
setup_asimov(FITTER, asimov_paramset)
elif args.data is DataType.REALISATION:
seed = args.seed if args.seed is not None else 1
setup_realisation(FITTER, asimov_paramset, seed)
elif args.data is DataType.REAL:
print 'Using MagicTau DATA'
def get_llh(params):
fitparams = gf.FitParameters(gf.sampleTag.MagicTau)
for parm in params:
fitparams.__setattr__(parm.name, float(parm.value))
llh = -FITTER.EvalLLH(fitparams)
return llh
def get_llh_freq(params):
print 'setting to {0}'.format(params)
fitparams = gf.FitParameters(gf.sampleTag.MagicTau)
for parm in params:
fitparams.__setattr__(parm.name, float(parm.value))
FITTER.SetFitParametersSeed(fitparams)
llh = -FITTER.MinLLH().likelihood
return llh
def data_distributions():
hdat = FITTER.GetDataDistribution()
binedges = np.asarray(
[FITTER.GetZenithBinsData(), FITTER.GetEnergyBinsData()]
)
return hdat, binedges
def gf_argparse(parser):
parser.add_argument(
'--debug', default='False', type=parse_bool, help='Run without fastmode'
)
parser.add_argument(
'--data', default='asimov', type=partial(enum_parse, c=DataType),
choices=DataType, help='select datatype'
)
parser.add_argument(
'--ast', default='p2_0', type=partial(enum_parse, c=SteeringCateg),
choices=SteeringCateg,
help='use asimov/fake dataset with specific steering'
)
|