Angular analysis of B+->K*+(K+pi0)mumu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

91 lines
3.0 KiB

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)