Rivet analyses

Measurement of $\omega$ meson production in pp collisions at $\sqrt{s} = 13$ TeV

Experiment: ALICE (LHC)

Inspire ID: 2848263

Status: VALIDATED

Authors: - Awais Ahmed

References: - arXiv: 2411.09432 - CERN-EP-2024-303

Beams: p+ p+

Beam energies: (6500.0, 6500.0)GeV

Run details: - Minimum-bias inelastic pp collisions at $\sqrt{s} = 13$ TeV. Events selected with a V0 coincidence trigger (V0A $\cap$ V0C). Primary vertex within $|z_{\rm vtx}| < 10$ cm from the nominal interaction point.

Measurement of the $p_{\rm T}$-differential invariant cross section $E\,{\rm d}^3\sigma/{\rm d}p^3$ of inclusive $\omega$ meson production at mid-rapidity ($|y| < 0.5$) in pp collisions at $\sqrt{s} = 13$ TeV with the ALICE detector at the LHC. The $\omega$ meson is reconstructed via its $\omega \to \pi^+\pi^-\pi^0$ decay channel using five different $\pi^0$ reconstruction methods (PCM, PCM-EMC, PCM-PHOS, PHOS, EMC). The measurement covers an unprecedented transverse-momentum range of $1.6 < p_{\rm T} < 50\,{\rm GeV}/c$, extending previous measurements by a factor of three.

Source code:ALICE_2024_I2848263.cc

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/UnstableParticles.hh"

namespace Rivet {

  /// @brief Measurement of omega(782) meson production in pp collisions at 13 TeV
  class ALICE_2024_I2848263 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(ALICE_2024_I2848263);

    /// @name Analysis methods
    /// @{

    /// Initialize projections and book histograms
    void init() {
      // Midrapidity cut |y| < 0.5
      declare(UnstableParticles(Cuts::absrap < 0.5), "UFS");

      // Book omega histogram bound directly to reference data (1, 1, 1)
      book(_h_omega, 1, 1, 1);

      // Book pi0 histogram (temporary, used for ratio calculation)
      book(_h_pi0, "TMP/pi0", refData(1, 1, 1));

      // Book ratio estimate (2, 1, 1)
      book(_s_ratio, 2, 1, 1);
    }

    /// Perform per-event analysis
    void analyze(const Event& event) {
      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
      for (const Particle& p : ufs.particles()) {
        if (p.pid() == 223) {
          _h_omega->fill(p.pT() / GeV);
        }
        else if (p.pid() == 111) {
          _h_pi0->fill(p.pT() / GeV);
        }
      }
    }

    /// Normalise histograms and apply pT scaling
    void finalize() {
      // Normalization: crossSection / (sumOfWeights * 2 * PI * Delta_y)
      // Here Delta_y = 1.0 (since |y| < 0.5 means from -0.5 to 0.5)
      const double norm = crossSection() / picobarn / sumOfWeights() / (2.0 * M_PI * 1.0);

      scale(_h_omega, norm);
      scale(_h_pi0, norm);

      // Compute ratio BEFORE scaling by 1/pT
      divide(_h_omega, _h_pi0, _s_ratio);

      // Apply 1/pT invariant yield scaling to _h_omega
      for (auto& b : _h_omega->bins()) {
        if (b.xMean() > 0) {
          b.scaleW(1.0 / b.xMean());
        }
      }
    }

    /// @}

  private:

    /// @name Histograms and Estimates
    /// @{
    Histo1DPtr _h_omega, _h_pi0;
    Estimate1DPtr _s_ratio;
    /// @}
  };

  RIVET_DECLARE_PLUGIN(ALICE_2024_I2848263);
}