92 lines
3.0 KiB
Python
92 lines
3.0 KiB
Python
import flavio
|
|
from wilson import Wilson
|
|
from uncertainties import ufloat
|
|
|
|
angobs = ['FL', 'S3', 'S4', 'S5', 'AFB', 'S7', 'S8', 'S9']
|
|
#angobs = ['P1', 'P2', 'P3', 'P4p', 'P5p', 'P6p', 'P8p']
|
|
|
|
#q2bins = [[0.1, 0.98], [1.1, 2.5], [2.5, 4], [4, 6], [6, 8], [11, 12.5], [15, 17], [17, 19]]
|
|
q2bins = [[0.1, 4.0],[4.0,5.0]]#, [4, 8], [11.0,12.5], [15.0,19.0]]
|
|
SMpred, NPpred = {}, {} # to be filled
|
|
|
|
# setting Wilson coefficients for NP
|
|
w = Wilson({ 'C9_bsmumu': -1}, scale=160, eft='WET', basis='flavio')
|
|
|
|
doNP = False
|
|
doSM = True
|
|
# getting predictions for both SM and NP
|
|
for ibin, q2bin in enumerate(q2bins):
|
|
print(f'Bin {q2bin}')
|
|
SMpred[ibin], NPpred[ibin] = {}, {}
|
|
if (doSM):
|
|
for o in angobs:
|
|
SMpred[ibin][o] = ufloat(flavio.sm_prediction(f'<{o}>(B+->K*mumu)',
|
|
q2min=q2bin[0], q2max=q2bin[1]),
|
|
flavio.sm_uncertainty(f'<{o}>(B+->K*mumu)',
|
|
q2min=q2bin[0], q2max=q2bin[1], N=100)) #N=10k for the final plots, N=100 for the fitter
|
|
if (doNP):
|
|
for o in angobs:
|
|
NPpred[ibin][o] = ufloat(flavio.np_prediction(f'<{o}>(B+->K*mumu)', w,
|
|
q2min=q2bin[0], q2max=q2bin[1]),
|
|
flavio.np_uncertainty(f'<{o}>(B+->K*mumu)', w,
|
|
q2min=q2bin[0], q2max=q2bin[1]))
|
|
|
|
# Just printing everything out in human-readable format here
|
|
def printout(dic):
|
|
for ibin, q2bin in enumerate(q2bins):
|
|
print(f'Bin {q2bin}')
|
|
for o in angobs:
|
|
if o=='FL':
|
|
print(f'\tS1s = {3/4*(1-dic[ibin][o])}')
|
|
elif o=='AFB':
|
|
print(f'\tS6s = {4/3*dic[ibin][o]}')
|
|
else:
|
|
print(f'\t{o} = {dic[ibin][o]}')
|
|
|
|
def printoutCpp(dic):
|
|
for o in angobs:
|
|
if o=='FL':
|
|
print('\tS1s[8] = {')
|
|
elif o=='AFB':
|
|
print('\tS6s[8] = {')
|
|
else:
|
|
print(f'\t{o}[8] = {{')
|
|
for ibin, q2bin in enumerate(q2bins):
|
|
if o=='FL':
|
|
print(f'{3/4*(1-dic[ibin][o].n)},', end='')
|
|
elif o=='AFB':
|
|
print(f'{4/3*dic[ibin][o].n},', end='')
|
|
else:
|
|
print(f'{dic[ibin][o].n},', end='')
|
|
print(f'}};')
|
|
for o in angobs:
|
|
if o=='FL':
|
|
print('\tS1s_error[8] = {')
|
|
elif o=='AFB':
|
|
print('\tS6s_error[8] = {')
|
|
else:
|
|
print(f'\t{o}_error[8] = {{')
|
|
for ibin, q2bin in enumerate(q2bins):
|
|
if o=='FL':
|
|
print(f'{3/4*(dic[ibin][o].s)},', end='')
|
|
elif o=='AFB':
|
|
print(f'{4/3*dic[ibin][o].s},', end='')
|
|
else:
|
|
print(f'{dic[ibin][o].s},', end='')
|
|
print('};')
|
|
|
|
|
|
if(doSM):
|
|
print('############## SM predictions #################')
|
|
printout(SMpred)
|
|
|
|
printoutCpp(SMpred)
|
|
|
|
print('\n\n\n')
|
|
|
|
if(doNP):
|
|
print('############## NP predictions #################')
|
|
printout(NPpred)
|
|
|
|
printoutCpp(NPpred)
|