Rivet analyses


title: ATLAS_2014_I1282441

The differential production cross section of the $\phi(1020)$ meson in $\sqrt{s}=7$ TeV $pp$ collisions measured with the ATLAS detector

Experiment: ATLAS (LHC)

Inspire ID: 1282441

Status: VALIDATED

Authors: - Tim Martin - Kiran Joshi

References: - Expt page: ATLAS-STDM-2011-47 - arXiv: 1402.6162 - Eur.Phys.J. C74 (2014) no.7, 2895

Beams: p+ p+

Beam energies: (3500.0, 3500.0)GeV

Run details: - Run minimum bias events

A measurement is presented of the $\phi \rightarrow K^+K^-$ production cross section at $\sqrt{s}$ = 7 TeV using pp collision data corresponding to an integrated luminosity of 383 $\mu$b$^{-1}$ collected with the ATLAS experiment at the LHC. Selection of $\phi(1020)$ mesons is based on the identification of charged kaons by their energy loss in the pixel detector. The differential cross section is measured as a function of the transverse momentum, $pT,\phi$, and rapidity, $y_\phi$, of the $\phi(1020)$ meson in the fiducial region 500 < $pT,\phi$ < 1200 MeV, |$y_\phi$| < 0.8, kaon $pT,K$ > 230 MeV and kaon momentum $p_K$ < 800 MeV. The integrated $\phi(1020)$ production cross section in this fiducial range is measured to be $\sigma_{\phi \rightarrow K^+K^-}$ = 570 \pm 8 (stat) \pm 66 (syst) \pm 20 (lumi) $\mu$b.

Source code:ATLAS_2014_I1282441.cc

```c++ // -- C++ --

include "Rivet/Analysis.hh"

include "Rivet/Projections/FinalState.hh"

include "Rivet/Projections/IdentifiedFinalState.hh"

include "Rivet/Projections/UnstableParticles.hh"

namespace Rivet {

class ATLAS_2014_I1282441 : public Analysis { public:

ATLAS_2014_I1282441()
    : Analysis("ATLAS_2014_I1282441") { }


void init() {

  // Use a large eta range such that we can discriminate on y
  /// @todo Convert to use a y-cut directly
  UnstableParticles ufs(Cuts::abseta < 10 && Cuts::pT > 500 * MeV);
  IdentifiedFinalState phis(ufs);
  phis.acceptIdPair(PID::PHI);
  declare(phis, "Phis");

  IdentifiedFinalState kpms(Cuts::abseta < 2.0 && Cuts::pT > 230 * MeV);
  kpms.acceptIdPair(PID::KPLUS);
  declare(kpms, "Kpms");

  book(_h_phi_pT, 1, 1, 1);
  book(_h_phi_rapidity, 2, 1, 1);
}


void analyze(const Event& event) {
  const Particles& ks_all = apply<IdentifiedFinalState>(event, "Kpms").particles();
  Particles kp, km;
  for (const Particle& p : ks_all) {
    if (!p.hasAncestorWith(Cuts::pid == PID::PHI)) {
      MSG_DEBUG("-- K not from phi.");
      continue;
    }
    if (p.p3().mod() > 800 * MeV) {
      MSG_DEBUG("-- p K too high.");
      continue;
    }
    (p.charge() > 0 ? kp : km).push_back(p);
  }

  const Particles& phis_all = apply<FinalState>(event, "Phis").particles();
  Particles phis;
  /// @todo Use particles(Cuts&) instead
  for (const Particle& p : phis_all) {
    if (p.absrap() > 0.8) {
      MSG_DEBUG("-- phi Y too high.");
      continue;
    }
    if (p.pT() > 1.2 * GeV) {
      MSG_DEBUG("-- phi pT too high.");
      continue;
    }
    phis.push_back(p);
  }

  // Find Phi -> KK decays through matching of the kinematics
  if (!kp.empty() && !km.empty() && !phis.empty()) {
    MSG_DEBUG("Numbers of particles:  #phi=" << phis.size() << ", #K+=" << kp.size()
                                             << ", #K-=" << km.size());
    for (size_t ip = 0; ip < phis.size(); ++ip) {
      const Particle& phi = phis[ip];
      for (size_t ikm = 0; ikm < km.size(); ++ikm) {
        for (size_t ikp = 0; ikp < kp.size(); ++ikp) {
          const FourMomentum mom = kp[ikp].mom() + km[ikm].mom();
          if (fuzzyEquals(mom.mass(), phi.mass(), 1e-5)) {
            MSG_DEBUG("Accepted combinatoric: phi#:" << ip << " K+#:" << ikp << " K-#:" << ikm);
            _h_phi_rapidity->fill(phi.absrap());
            _h_phi_pT->fill(phi.pT() / MeV);
          }
          else {
            MSG_DEBUG("Rejected combinatoric: phi#:" << ip << " K+#:" << ikp << " K-#:" << ikm
                                                     << " Mass difference is "
                                                     << mom.mass() - phi.mass());
          }
        }
      }
    }
  }
}


void finalize() {
  scale(_h_phi_rapidity, crossSection() / millibarn / sumOfWeights());
  scale(_h_phi_pT, crossSection() / microbarn / sumOfWeights());
}

private:

Histo1DPtr _h_phi_rapidity, _h_phi_pT;

};

RIVET_DECLARE_PLUGIN(ATLAS_2014_I1282441);

} ```