EWP-BplusToKstMuMu-AngAna/Code/Selection/flavio/flavio_sensitivity.py

110 lines
3.9 KiB
Python

import flavio
import flavio.plots
import flavio.statistics.fits
import matplotlib.pyplot as plt
from collections import OrderedDict
import numpy as np
angobservables, q2bins, Data, label, decay = {}, {}, {}, {}, {}
lhcbangobs = ['<FL>', '<S5>', '<S3>', '<S4>', '<AFB>']
lhcbq2bins = [[0.1, 0.98], [1.1, 2.5], [2.5, 4], [4, 6], [15, 17], [17, 19]]
# previous measurements
angobservables['lhcb15'] = lhcbangobs
q2bins['lhcb15'] = lhcbq2bins
Data['lhcb15'] = 'LHCb B->K*mumu 2015 S ' #already in flavio's repo
decay['lhcb15'] = '(B0->K*mumu)'
label['lhcb15'] = r'$B^0\to K^{\ast 0}(K^+\pi^-) \mu\mu$ LHCb 3/fb'
with open('./measurements/CMS_2017.yml', 'r') as myfile:
flavio.measurements._load(myfile.read())
angobservables['cms17'] = ['<P1>', '<P5p>']
q2bins['cms17'] = [[1, 2], [2, 4.3], [4.3, 6], [14.18, 16], [16, 19]]
Data['cms17'] = 'CMS B->K*mumu 2017 P '
decay['cms17'] = '(B0->K*mumu)'
label['cms17'] = r'$B^0\to K^{\ast 0}(K^+\pi^-) \mu\mu$ CMS 20.5/fb'
with open('./measurements/ATLAS_2017.yml', 'r') as myfile:
flavio.measurements._load(myfile.read())
#angobservables['atlas17'] = ['<P1>', '<P4p>', '<P5p>']
angobservables['atlas17'] = ['<FL>', '<S3>', '<S4>', '<S5>']
q2bins['atlas17'] = [[0.04, 2], [2, 4], [4, 6]]
Data['atlas17'] = 'ATLAS B->K*mumu 2017 S '
decay['atlas17'] = '(B0->K*mumu)'
label['atlas17'] = r'$B^0\to K^{\ast 0}(K^+\pi^-) \mu\mu$ ATLAS 20.3/fb'
# expected sensitivities for B+
with open('./measurements/Bp2Kstmumu_2016.yml', 'r') as myfile:
flavio.measurements._load(myfile.read())
angobservables['lhcbBp'] = lhcbangobs
q2bins['lhcbBp'] = lhcbq2bins
Data['lhcbBp'] = 'LHCb B+->K*mumu 2016 S '
decay['lhcbBp'] = '(B+->K*mumu)'
label['lhcbBp'] = r'$B^+\to K^{\ast +}(K_S\pi^+) \mu\mu$ LHCb 5.2/fb'
with open('./measurements/Bp2Kstmumu_2018andpi0.yml', 'r') as myfile:
flavio.measurements._load(myfile.read())
angobservables['lhcbBp18'] = lhcbangobs
q2bins['lhcbBp18'] = lhcbq2bins
Data['lhcbBp18'] = 'LHCb B+->K*mumu 2018 S '
decay['lhcbBp18'] = '(B+->K*mumu)'
label['lhcbBp18'] = r'$B^+\to K^{\ast +}(K_S\pi^+, K^+\pi^0) \mu\mu$ LHCb 9.0/fb'
obss, measurements = {}, {}
for dataset in Data.keys():
print('now loading dataset '+ dataset)
measurements[dataset], obss[dataset] = [], []
for q2 in q2bins[dataset]:
measurements[dataset].append(Data[dataset]+'{}-{}'.format(q2[0], q2[1]))
for obs in angobservables[dataset]:
obss[dataset].append((obs+decay[dataset], q2[0], q2[1]))
def fC9C10(C9, C10):
return { 'C9_bsmumu': C9, 'C10_bsmumu': C10 }
def fastfit_C9C10(name, obslist, measurements):
return flavio.statistics.fits.FastFit(
name = name,
observables = obslist,
fit_wc_function = fC9C10,
input_scale = 4.8,
include_measurements = measurements,
)
obs_fastfits_c9c10 = {}
c9lim=[-4,4]
c10lim=[-4,4]
plt.figure(figsize=(6, 6))
plots = {}
for i, f in enumerate(Data.keys()):
obs_fastfits_c9c10[f] = fastfit_C9C10('C9-C10 fit', obss[f], measurements[f])
print('making measurement ', f)
obs_fastfits_c9c10[f].make_measurement(threads=8)
print('plotting ', f)
if 'lhcbBp' in f: fill=False
else: fill=True
color = i+1
if color>=5: color = i+2 #avoid yellow
plots[f] = flavio.plots.likelihood_contour(obs_fastfits_c9c10[f].log_likelihood,
c9lim[0], c9lim[1], c10lim[0], c10lim[1],
col=color, filled=fill, label=label[f],
interpolation_factor=3, threads=8, steps=20)
print('done')
plt.ylim(-3, 5)
plt.legend(fontsize=12)
flavio.plots.flavio_branding(x=0.8, y=0.65, version=True)
plt.xlabel(r'Re~$C_9^{\text{NP}}$')
plt.ylabel(r'Re~$C_{10}^{\text{NP}}$')
plt.title(r'$B\to K^\ast\mu^+\mu^-$ angular analyses at the LHC', fontsize=15, pad=15)
plt.plot([0], [0], marker='*', color='black', markersize=10)
sm = plt.text(0.2, -0.3, 'SM', fontsize=12)
plt.savefig('C9_vs_C10.pdf')
plt.ion()
plt.show()