aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_gf_freq.py
blob: e6ca5f47d7f0668ac8c7fb86d0ea5f337b8a2f9f (plain)
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
import GolemFitPy as gf

FASTMODE = False

def steering_params():
    steering_categ = 'p2_0'
    params = gf.SteeringParams(gf.sampleTag.MagicTau)
    params.quiet = False
    if FASTMODE:
        params.fastmode = True
    else:
        params.fastmode = False
    params.simToLoad= steering_categ.lower()
    params.evalThreads = 4
    params.minFitEnergy = 6E4 # GeV
    params.maxFitEnergy = 1E7 # GeV
    params.load_data_from_text_file = False
    params.do_HESE_reshuffle=False
    params.use_legacy_selfveto_calculation = False
    return params

def setup_fitter():
    datapaths = gf.DataPaths()
    sparams = steering_params()
    npp = gf.NewPhysicsParams()
    fitter = gf.GolemFit(datapaths, sparams, npp)
    return fitter

def fit_flags(fitter):
    default_flags = {
        # False means it's not fixed in minimization
        'astroFlavorAngle1'         : False,
        'astroFlavorAngle2'         : False,
        'astroNorm'                 : True,
    }
    flags = gf.FitParametersFlag()
    gf_nuisance = []
    for param in default_flags.keys():
        if default_flags[param]:
            flags.__setattr__(param, True)
        else:
            print 'Setting param {0:<15} to float in the ' \
                'minimisation'.format(param)
            flags.__setattr__(param, False)
    fitter.SetFitParametersFlag(flags)

def setup_asimov(fitter, params):
    print 'Injecting the model', params
    asimov_params = gf.FitParameters(gf.sampleTag.MagicTau)
    for x in params.keys():
        asimov_params.__setattr__(x, float(params[x]))
    fitter.SetupAsimov(asimov_params)

def get_bf_freq(fitter):
    bf = fitter.MinLLH()
    return bf

# Setup fitter
fitter = setup_fitter()
fit_flags(fitter)

params = {'astroFlavorAngle1': 4/9., 'astroFlavorAngle2': 0.}
print
setup_asimov(fitter, params)
print 'fitting...'
bf = get_bf_freq(fitter)
print 'bestfit params = astroFlavorAngle1:', bf.params.astroFlavorAngle1, \
      ', astroFlavorAngle2:', bf.params.astroFlavorAngle2
print 'bestfit llh =', -bf.likelihood
print

params = {'astroFlavorAngle1': 2/6., 'astroFlavorAngle2': 1/2.}
print
setup_asimov(fitter, params)
print 'fitting...'
bf = get_bf_freq(fitter)
print 'bestfit params = astroFlavorAngle1:', bf.params.astroFlavorAngle1, \
      ', astroFlavorAngle2:', bf.params.astroFlavorAngle2
print 'bestfit llh =', -bf.likelihood
print