Lecture 2 – Kinematics#
Lecture 2 by Vincent Mathieu contains a few data files containing four-momenta data samples. Our goal in this notebook is to identify which reaction was used to generate these data samples.
Three-particles-1.dat
#
filename = gdown.cached_download(
url="https://indico.ific.uv.es/event/6803/contributions/21220/attachments/11209/15504/Three-particles-1.dat",
path="data/Three-particles-1.dat",
md5="a49ebfd97ae6a02023291df665ab924c",
quiet=True,
verify=False,
)
data = np.loadtxt(filename)
data.shape
(400000, 4)
n_final_state = 3
pa, p1, p2, p3 = (data[i::4].T for i in range(n_final_state + 1))
p0 = p1 + p2 + p3
pb = p0 - pa
def mass(p: np.ndarray) -> np.ndarray:
return np.sqrt(mass_squared(p))
def mass_squared(p: np.ndarray) -> np.ndarray:
return p[0] ** 2 - np.sum(p[1:] ** 2, axis=0)
m0 = mass(p0)
print(f"{m0.mean():.4g} +/- {m0.std():.4g}")
4.102 +/- 4.992e-07
So this is a photon \(\gamma\) hitting a proton \(p\) and producing a meson \(\eta\), pion \(\pi^0\), and proton \(p\).
Dalitz plot#
By plotting the three Mandelstam variables in a Dalitz plot, we can identify resonances appear in the reaction for which this data was generated.
s12 = mass_squared(p1 + p2)
s23 = mass_squared(p2 + p3)
s31 = mass_squared(p3 + p1)
m12 = mass(p1 + p2)
m23 = mass(p2 + p3)
m31 = mass(p3 + p1)

R12 = 1.74
R23 = 1.53
R31 = 2.45

Particle identification#
In the following, we make a few cuts on Mandelstam variables to select a region where the resonances lie isolated. We then use these cuts as a filter on the computed masses for each each and then compute the mean.
m12_mean = m12[(s12 < 3) & (s23 > 2.5) & (s23 < 10)].mean()
m12_mean**2
np.float64(1.7290722578143247)
m23_mean = m23[s23 < 2.5].mean()
m23_mean**2
np.float64(1.6561439882106896)
m31_mean = m31[(s12 > 3) & (s31 < 4)].mean()
m31_mean**2
np.float64(2.692708758538996)
The particle candidates for \(R_{12} \to \eta\pi^0\), \(R_{23} \to \pi^0 p\), and \(R_{31} \to p\eta\) are then:
find_candidates(mass=np.sqrt(R12), delta=0.01, charge=0)
[<Particle: name="a(2)(1320)0", pdgid=115, mass=1318.2 ± 0.6 MeV>,
<Particle: name="Xi0", pdgid=3322, mass=1314.86 ± 0.20 MeV>,
<Particle: name="Xi~0", pdgid=-3322, mass=1314.86 ± 0.20 MeV>]
find_candidates(mass=np.sqrt(R23), delta=0.01, charge=+1)
[<Particle: name="Delta(1232)~+", pdgid=-1114, mass=1232.0 ± 2.0 MeV>,
<Particle: name="Delta(1232)+", pdgid=2214, mass=1232.0 ± 2.0 MeV>,
<Particle: name="b(1)(1235)+", pdgid=10213, mass=1230 ± 3 MeV>,
<Particle: name="a(1)(1260)+", pdgid=20213, mass=1230 ± 40 MeV>]
find_candidates(mass=np.sqrt(R31), delta=0.01, charge=+1)
[<Particle: name="Delta(1600)~+", pdgid=-31114, mass=1570 ± 70 MeV>,
<Particle: name="Delta(1600)+", pdgid=32214, mass=1570 ± 70 MeV>]
Three-particles-2.dat
#
p0 = p1 + p2 + p3
m0 = mass(p0)
print(f"{m0.mean():.4g} +/- {m0.std():.4g}")
3.346 +/- 4.992e-07
This is again a photon \(\gamma\) hitting a target that produces a meson \(\eta\), pion \(\pi^0\), and proton \(p\).
s12 = mass_squared(p1 + p2)
s23 = mass_squared(p2 + p3)
s31 = mass_squared(p3 + p1)
m12 = mass(p1 + p2)
m23 = mass(p2 + p3)
m31 = mass(p3 + p1)

