codexpast-exam-of-the-particle-physics-course-of-the-university-of-oxford2017-dalitz-domains-and-resonances.py
past-exam-of-the-particle-physics-course-of-the-university-of-oxford/2017-dalitz-domains-and-resonances.py
"""Original invariant-mass domains computed from the supplied meson masses."""
from pathlib import Path
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
plt.rcParams.update({'font.size':12,'figure.facecolor':'white','axes.facecolor':'white'})
fig,axes=plt.subplots(1,2,figsize=(11.8,5.4),layout='constrained')
m=.139
for ax,M,label,color in zip(axes,[1.870,.494],[r'$D^+\to\pi^+\pi^+\pi^-$',r'$K^+\to\pi^+\pi^+\pi^-$'],['#d4e6f2','#f3dfd1']):
s=np.linspace(4*m*m,(M-m)**2,12001)
centre=2*m*m+(M*M-m*m-s)/2
width=np.sqrt(np.maximum(((M*M-m*m-s)**2-4*m*m*s)*(s*s-4*s*m*m),0))/(2*s)
lo,hi=centre-width,centre+width
ax.fill_between(s,lo,hi,color=color)
ax.plot(s,lo,color='#2a4c66',lw=1.7);ax.plot(s,hi,color='#2a4c66',lw=1.7)
span=s[-1]-s[0];pad=.035*span
ax.set(xlim=(s[0]-pad,s[-1]+pad),ylim=(s[0]-pad,s[-1]+pad),xlabel=r'$s_{13}=m^2(\pi_1^+\pi^-)$ [GeV$^2$]',ylabel=r'$s_{23}=m^2(\pi_2^+\pi^-)$ [GeV$^2$]',aspect='equal')
area=np.trapezoid(hi-lo,s)
ax.set_title(label+'\n'+rf'Area $={area:.4g}$ GeV$^4$',fontsize=13)
ax.grid(alpha=.18)
if M>1:
for mass,c,ls,name in [(.775,'#2876a4','--',r'$\rho^0$'),(.980,'#a75c28',':',r'$f_0(980)$')]:
ax.axvline(mass**2,color=c,ls=ls,lw=1.6,label=name)
ax.axhline(mass**2,color=c,ls=ls,lw=1.6)
ax.legend(loc='upper right',framealpha=.95,fontsize=11)
else:
ax.text(.5,.50,r'$m(\pi^+\pi^-)\leq0.355$ GeV'+'\n'+r'No on-shell $\rho^0$ band',transform=ax.transAxes,ha='center',va='center',fontsize=11)
fig.suptitle('Calculated kinematic domains: different axis scales\nThe charm Dalitz area is about 3150 times larger; dashed lines mark possible bands, not intensities',fontsize=13)
fig.savefig(Path.cwd()/Path(__file__).with_suffix('.png').name,dpi=110,facecolor='white',transparent=False)