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.

109 lines
3.9 KiB

  1. import flavio
  2. import flavio.plots
  3. import flavio.statistics.fits
  4. import matplotlib.pyplot as plt
  5. from collections import OrderedDict
  6. import numpy as np
  7. angobservables, q2bins, Data, label, decay = {}, {}, {}, {}, {}
  8. lhcbangobs = ['<FL>', '<S5>', '<S3>', '<S4>', '<AFB>']
  9. lhcbq2bins = [[0.1, 0.98], [1.1, 2.5], [2.5, 4], [4, 6], [15, 17], [17, 19]]
  10. # previous measurements
  11. angobservables['lhcb15'] = lhcbangobs
  12. q2bins['lhcb15'] = lhcbq2bins
  13. Data['lhcb15'] = 'LHCb B->K*mumu 2015 S ' #already in flavio's repo
  14. decay['lhcb15'] = '(B0->K*mumu)'
  15. label['lhcb15'] = r'$B^0\to K^{\ast 0}(K^+\pi^-) \mu\mu$ LHCb 3/fb'
  16. with open('./measurements/CMS_2017.yml', 'r') as myfile:
  17. flavio.measurements._load(myfile.read())
  18. angobservables['cms17'] = ['<P1>', '<P5p>']
  19. q2bins['cms17'] = [[1, 2], [2, 4.3], [4.3, 6], [14.18, 16], [16, 19]]
  20. Data['cms17'] = 'CMS B->K*mumu 2017 P '
  21. decay['cms17'] = '(B0->K*mumu)'
  22. label['cms17'] = r'$B^0\to K^{\ast 0}(K^+\pi^-) \mu\mu$ CMS 20.5/fb'
  23. with open('./measurements/ATLAS_2017.yml', 'r') as myfile:
  24. flavio.measurements._load(myfile.read())
  25. #angobservables['atlas17'] = ['<P1>', '<P4p>', '<P5p>']
  26. angobservables['atlas17'] = ['<FL>', '<S3>', '<S4>', '<S5>']
  27. q2bins['atlas17'] = [[0.04, 2], [2, 4], [4, 6]]
  28. Data['atlas17'] = 'ATLAS B->K*mumu 2017 S '
  29. decay['atlas17'] = '(B0->K*mumu)'
  30. label['atlas17'] = r'$B^0\to K^{\ast 0}(K^+\pi^-) \mu\mu$ ATLAS 20.3/fb'
  31. # expected sensitivities for B+
  32. with open('./measurements/Bp2Kstmumu_2016.yml', 'r') as myfile:
  33. flavio.measurements._load(myfile.read())
  34. angobservables['lhcbBp'] = lhcbangobs
  35. q2bins['lhcbBp'] = lhcbq2bins
  36. Data['lhcbBp'] = 'LHCb B+->K*mumu 2016 S '
  37. decay['lhcbBp'] = '(B+->K*mumu)'
  38. label['lhcbBp'] = r'$B^+\to K^{\ast +}(K_S\pi^+) \mu\mu$ LHCb 5.2/fb'
  39. with open('./measurements/Bp2Kstmumu_2018andpi0.yml', 'r') as myfile:
  40. flavio.measurements._load(myfile.read())
  41. angobservables['lhcbBp18'] = lhcbangobs
  42. q2bins['lhcbBp18'] = lhcbq2bins
  43. Data['lhcbBp18'] = 'LHCb B+->K*mumu 2018 S '
  44. decay['lhcbBp18'] = '(B+->K*mumu)'
  45. label['lhcbBp18'] = r'$B^+\to K^{\ast +}(K_S\pi^+, K^+\pi^0) \mu\mu$ LHCb 9.0/fb'
  46. obss, measurements = {}, {}
  47. for dataset in Data.keys():
  48. print('now loading dataset '+ dataset)
  49. measurements[dataset], obss[dataset] = [], []
  50. for q2 in q2bins[dataset]:
  51. measurements[dataset].append(Data[dataset]+'{}-{}'.format(q2[0], q2[1]))
  52. for obs in angobservables[dataset]:
  53. obss[dataset].append((obs+decay[dataset], q2[0], q2[1]))
  54. def fC9C10(C9, C10):
  55. return { 'C9_bsmumu': C9, 'C10_bsmumu': C10 }
  56. def fastfit_C9C10(name, obslist, measurements):
  57. return flavio.statistics.fits.FastFit(
  58. name = name,
  59. observables = obslist,
  60. fit_wc_function = fC9C10,
  61. input_scale = 4.8,
  62. include_measurements = measurements,
  63. )
  64. obs_fastfits_c9c10 = {}
  65. c9lim=[-4,4]
  66. c10lim=[-4,4]
  67. plt.figure(figsize=(6, 6))
  68. plots = {}
  69. for i, f in enumerate(Data.keys()):
  70. obs_fastfits_c9c10[f] = fastfit_C9C10('C9-C10 fit', obss[f], measurements[f])
  71. print('making measurement ', f)
  72. obs_fastfits_c9c10[f].make_measurement(threads=8)
  73. print('plotting ', f)
  74. if 'lhcbBp' in f: fill=False
  75. else: fill=True
  76. color = i+1
  77. if color>=5: color = i+2 #avoid yellow
  78. plots[f] = flavio.plots.likelihood_contour(obs_fastfits_c9c10[f].log_likelihood,
  79. c9lim[0], c9lim[1], c10lim[0], c10lim[1],
  80. col=color, filled=fill, label=label[f],
  81. interpolation_factor=3, threads=8, steps=20)
  82. print('done')
  83. plt.ylim(-3, 5)
  84. plt.legend(fontsize=12)
  85. flavio.plots.flavio_branding(x=0.8, y=0.65, version=True)
  86. plt.xlabel(r'Re~$C_9^{\text{NP}}$')
  87. plt.ylabel(r'Re~$C_{10}^{\text{NP}}$')
  88. plt.title(r'$B\to K^\ast\mu^+\mu^-$ angular analyses at the LHC', fontsize=15, pad=15)
  89. plt.plot([0], [0], marker='*', color='black', markersize=10)
  90. sm = plt.text(0.2, -0.3, 'SM', fontsize=12)
  91. plt.savefig('C9_vs_C10.pdf')
  92. plt.ion()
  93. plt.show()