-
Notifications
You must be signed in to change notification settings - Fork 2
/
marginal_limits.py
70 lines (56 loc) · 2.43 KB
/
marginal_limits.py
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
import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
import matplotlib.patches as mpatches
import matplotlib.lines as mlines
from eft_coefficients import EftPredictions
from mg_calculations import wilson_coefficients, MG_SM, sig_SM
import os
import sys
import time
import argparse
import logging
import json
from pprint import pprint
def progress(current, total, status=''):
fullBarLength = 80
doneBarLength = int(round(fullBarLength * current / float(total)))
percents = round(100.0 * current / float(total), 1)
bar = '>' * doneBarLength + ' ' * (fullBarLength - doneBarLength)
sys.stdout.write('[%s] %s%s ...%s\r' % (bar, percents, '%', status))
sys.stdout.flush()
sig_SM = 0.009308 * 1000. # fb from MG
def main():
np.set_printoptions(edgeitems=3)
np.core.arrayprint._line_width = 120
eft = EftPredictions(wilson_coefficients, MG_SM, sig_SM)
xs_limit = 0.0177+sig_SM/1000.
min_val, max_val = -15., 15
marginalized_step = 3
wilson_of_interest_step = 0.1
marginal_min_wilson = +100000000.
marginal_max_wilson = -100000000.
total = ((max_val - min_val)/marginalized_step)**4 * (max_val - min_val)/wilson_of_interest_step
print "Total number of evaluations: {}".format(total)
i = 0
for C1 in np.arange(min_val, max_val, marginalized_step):
for C2 in np.arange(min_val, max_val, marginalized_step):
for C3 in np.arange(min_val, max_val, marginalized_step):
for C4 in np.arange(min_val, max_val, marginalized_step):
progress(i, total, 'Progress'); i += ((max_val - min_val)/wilson_of_interest_step)
for C5 in np.arange(min_val, max_val, wilson_of_interest_step):
xs = eft.gen_eft_xs([C5, C1, C2, C3, C4])
if xs < xs_limit:
if xs > marginal_max_wilson:
marginal_max_wilson = xs
if xs < marginal_min_wilson:
marginal_min_wilson = xs
print '\nMarginal limits: [{}; {}]'.format(marginal_min_wilson, marginal_max_wilson)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
start_time = time.time()
logging.info(time.asctime())
exitcode = main()
logging.info(time.asctime())
logging.info('TOTAL TIME IN MINUTES:' + str((time.time() - start_time) / 60.0))