7.3. Phase space sample#

7.3.1. Definition#

See also

AmpForm’s Kinematics page.

Hide code cell source
m0, mi, mj, mk = sp.symbols("m0 m_(i:k)", nonnegative=True)
σi, σj, σk = sp.symbols("sigma_(i:k)", nonnegative=True)
is_within_phasespace(σi, σj, m0, mi, mj, mk)
{1forϕ(σi,σj)0NaNotherwise
Hide code cell source
display_doit(Kibble(σi, σj, σk, m0, mi, mj, mk))
ϕ(σi,σj)=λ(λ(σj,mj2,m02),λ(σk,mk2,m02),λ(σi,mi2,m02))
Hide code cell source
display_doit(Kallen(*sp.symbols("x:z")))
λ(x,y,z)=x22xy2xz+y22yz+z2
m1, m2, m3 = sp.symbols("m1:4")
display_latex({σk: compute_third_mandelstam(σi, σj, m0, m1, m2, m3)})
σk=m02+m12+m22+m32σiσj

7.3.2. Visualization#

Hide code cell source
model_choice = 0
model_file = "../../data/model-definitions.yaml"
particles = load_particles("../../data/particle-definitions.yaml")
amplitude_builder = load_model_builder(model_file, particles, model_choice)
decay = amplitude_builder.decay
display_latex(create_mass_symbol_mapping(decay))
m0=2.28646m1=0.938272046m2=0.13957018m3=0.49367700000000003
Hide code cell source
def plot_phsp_boundary(ax, x_mandelstam: int, y_mandelstam: int):
    ax.set_xticks([])
    ax.set_xlabel(Rf"$\sigma_{x_mandelstam}$ [GeV$^2$]")
    ax.set_ylabel(Rf"$\sigma_{y_mandelstam}$ [GeV$^2$]")
    phsp = generate_meshgrid_sample(decay, resolution, x_mandelstam, y_mandelstam)
    phsp_filter = create_phase_space_filter(
        decay, x_mandelstam, y_mandelstam, outside_value=0
    )
    mesh = ax.contour(
        phsp[f"sigma{x_mandelstam}"],
        phsp[f"sigma{y_mandelstam}"],
        phsp_filter(phsp),
        colors="black",
    )
    contour = mesh.collections[0]
    contour.set_facecolor("lightgray")


%config InlineBackend.figure_formats = ['svg']
resolution = 500
use_mpl_latex_fonts()
plt.rc("font", size=18)
fig, ax = plt.subplots(figsize=(5, 5), tight_layout=True)
plot_phsp_boundary(ax, 1, 2)
fig.savefig("../_images/phase-space-boundary.svg")
plt.show()
../_images/b0c71e2a5ea8972e8266f49d2b492ab650c3f2f98c4c0576790580abd9f9b06f.svg
Hide code cell source
def plot_phsp_distribution(ax, x_mandelstam: int, y_mandelstam: int):
    ax.set_xticks([])
    ax.set_xlabel(Rf"$\sigma_{x_mandelstam}$")
    ax.set_ylabel(Rf"$\sigma_{y_mandelstam}$")
    ax.hist2d(
        phsp[f"sigma{x_mandelstam}"],
        phsp[f"sigma{y_mandelstam}"],
        bins=500,
        norm=LogNorm(),
    )


%config InlineBackend.figure_formats = ['png']
phsp = generate_phasespace_sample(decay, n_events=10_000_000, seed=0)
fig, axes = plt.subplots(ncols=3, dpi=200, figsize=(15, 4.9), tight_layout=True)
plot_phsp_distribution(axes[0], 1, 2)
plot_phsp_distribution(axes[1], 2, 3)
plot_phsp_distribution(axes[2], 3, 1)
fig.tight_layout()
plt.show()
../_images/ef8958d449c1cf241c16d897bd18848d40c9d3c8c82a74af913686c2b9508303.png