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 = ['', '', '', '', ''] 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'] = ['', ''] 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'] = ['', '', ''] angobservables['atlas17'] = ['', '', '', ''] 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()