.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "api/gallery/particle/detector_signatures/plot_01_anderson_positron.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_api_gallery_particle_detector_signatures_plot_01_anderson_positron.py: Anderson's positron: a light, positive track in a cloud chamber ================================================================== In 1932 Carl Anderson photographed a cosmic-ray track crossing a 6 mm lead plate in a cloud chamber inside a 1.5 T magnetic field. A charged track bends into an arc of radius .. math:: r\,[\mathrm m] = \frac{p\,[\mathrm{GeV}/c]}{0.3\,B\,[\mathrm T]}, so the curvature measures momentum. The track was noticeably more curved above the plate (23 MeV/c) than below it (63 MeV/c). Particles lose energy crossing lead, so it must have entered from below. Travelling upward, its bending direction said its charge was *positive*. A proton with 23 MeV/c would have stopped within a few millimetres of gas, but the track ran on for more than 5 cm. It was positive and as light as an electron: the positron Dirac had predicted. This example redraws the track with :func:`~physicskit.particle.collider.charged_track_points` and repeats the two deductions: direction of travel from energy loss, and mass from range. .. GENERATED FROM PYTHON SOURCE LINES 28-42 .. code-block:: Python import matplotlib.pyplot as plt import numpy as np from physicskit.particle.collider import charged_track_points from physicskit.particle.kinematics import FourVector B = 1.5 # tesla B_eff = 0.3 * B # so that r [m] = pT [GeV] / B_eff m_e = 0.000511 p_below, p_above = 0.063, 0.023 # GeV/c print(f"radius below the plate: {p_below / B_eff * 100:.1f} cm") print(f"radius above the plate: {p_above / B_eff * 100:.1f} cm") .. rst-class:: sphx-glr-script-out .. code-block:: none radius below the plate: 14.0 cm radius above the plate: 5.1 cm .. GENERATED FROM PYTHON SOURCE LINES 43-47 Redraw the track -------------------- Start 8 cm below the plate moving upward, bend up to the plate, cross the plate, and continue with the reduced momentum. .. GENERATED FROM PYTHON SOURCE LINES 47-73 .. code-block:: Python plate_y = 0.0 def track(p, direction, vertex, length): px, py = p * direction fv = FourVector(np.hypot(p, m_e), px, py, 0.0) return charged_track_points(fv, charge=+1.0, B=B_eff, vertex=vertex, n_points=200, path_length=length) lower = track(p_below, np.array([-0.3, 1.0]) / np.hypot(0.3, 1.0), (0.0, -0.08), 0.12) lower = lower[lower[:, 1] <= plate_y] d = lower[-1] - lower[-2] upper = track(p_above, d / np.linalg.norm(d), lower[-1] + d / np.linalg.norm(d) * 0.006, 0.07) fig, ax = plt.subplots(figsize=(5.5, 6)) ax.axhspan(-0.003, 0.003, color="0.5", label="6 mm lead plate") ax.plot(lower[:, 0] * 100, lower[:, 1] * 100, color="steelblue", lw=2, label=f"below: p = {p_below * 1e3:.0f} MeV/c") ax.plot(upper[:, 0] * 100, upper[:, 1] * 100, color="firebrick", lw=2, label=f"above: p = {p_above * 1e3:.0f} MeV/c") ax.annotate("", xy=lower[60] * 100, xytext=lower[40] * 100, arrowprops=dict(arrowstyle="->", color="steelblue", lw=2)) ax.set_xlabel("x [cm]") ax.set_ylabel("y [cm]") ax.set_aspect("equal") ax.set_title("Anderson's track (B out of page)") ax.legend(fontsize=8, loc="lower left") fig.tight_layout() .. image-sg:: /api/gallery/particle/detector_signatures/images/sphx_glr_plot_01_anderson_positron_001.png :alt: Anderson's track (B out of page) :srcset: /api/gallery/particle/detector_signatures/images/sphx_glr_plot_01_anderson_positron_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 74-81 Deduction 1: direction and sign of charge --------------------------------------------- Momentum fell from 63 to 23 MeV/c across the plate, so the particle went from the low-curvature side to the high-curvature side: upward. For an upward-moving particle in this field, a clockwise bend means positive charge. The same picture read the other way (a particle going down) would need it to *gain* 40 MeV/c in the lead. .. GENERATED FROM PYTHON SOURCE LINES 81-83 .. code-block:: Python print(f"\nmomentum lost in the plate: {(p_below - p_above) * 1e3:.0f} MeV/c -> it travelled upward -> charge +e") .. rst-class:: sphx-glr-script-out .. code-block:: none momentum lost in the plate: 40 MeV/c -> it travelled upward -> charge +e .. GENERATED FROM PYTHON SOURCE LINES 84-91 Deduction 2: too light to be a proton ----------------------------------------- At 23 MeV/c a proton has only :math:`p^2/2m\approx0.28` MeV of kinetic energy and a range in the chamber gas of a few millimetres (roughly :math:`2.3\,\mathrm{cm}\times(T/\mathrm{MeV})^{1.8}` for protons in air). An electron-mass particle at 23 MeV/c is relativistic and ionizes at the minimum rate, crossing the whole chamber. .. GENERATED FROM PYTHON SOURCE LINES 91-100 .. code-block:: Python m_p = 0.938272 T_proton = np.hypot(p_above, m_p) - m_p range_proton_cm = 2.3 * (T_proton * 1e3) ** 1.8 T_light = np.hypot(p_above, m_e) - m_e print(f"as a proton: T = {T_proton * 1e3:.2f} MeV, range about {range_proton_cm * 10:.0f} mm (track observed > 50 mm)") print(f"as an e-mass: T = {T_light * 1e3:.1f} MeV, beta = {p_above / np.hypot(p_above, m_e):.4f} -- minimum ionizing, long track") plt.show() .. rst-class:: sphx-glr-script-out .. code-block:: none as a proton: T = 0.28 MeV, range about 2 mm (track observed > 50 mm) as an e-mass: T = 22.5 MeV, beta = 0.9998 -- minimum ionizing, long track .. GENERATED FROM PYTHON SOURCE LINES 101-106 Check ----- r = p / (0.3 B): the track curves less below the plate, so the particle came from below and lost 40 MeV in the lead; the curvature then says positive charge, and a proton of that momentum would stop within millimetres. .. GENERATED FROM PYTHON SOURCE LINES 106-108 .. code-block:: Python assert abs(p_below / B_eff - 0.14) < 1e-3 and abs(p_above / B_eff - 0.0511) < 1e-3 assert range_proton_cm * 10 < 5 < 50 and p_above / np.hypot(p_above, m_e) > 0.999 .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.034 seconds) .. _sphx_glr_download_api_gallery_particle_detector_signatures_plot_01_anderson_positron.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_01_anderson_positron.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_01_anderson_positron.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_01_anderson_positron.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_