Rivet analyses


title: ALICE_2012_I1116147

pT of neutral pions and $\eta$ mesons in $pp$ collisions at $7\,$TeV and $0.9\,$TeV

Experiment: ALICE (LHC)

Inspire ID: 1116147

Status: VALIDATED

Authors: - Hendrik Poppenborg

References: - Phys.Lett. B717 (2012) 162-172 - DOI: 10.1016/j.physletb.2012.09.015 - arXiv: 1205.5724

Beams: p+ p+

Beam energies: (450.0, 450.0); (3500.0, 3500.0)GeV

Run details: - Generic $pp$ collision events.

Transverse momentum spectra of neutral pions and $\eta$ mesons and the ratio $\pi^0/\eta$, obtained at mid-rapidity in pp collisions at $\sqrt{s} = 7\,$TeV with ALICE at the LHC. The transverse momentum spectrum of neutral pions is also given for $\sqrt{s} = 0.9\,$TeV.

Source code:ALICE_2012_I1116147.cc

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

include "Rivet/Analysis.hh"

include "Rivet/Projections/UnstableParticles.hh"

namespace Rivet {

class ALICE_2012_I1116147 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ALICE_2012_I1116147);


/// Initialise projections and histograms
void init() {

  const UnstableParticles ufs(Cuts::absrap < RAPMAX);
  declare(ufs, "UFS");

  // Book histos
  for (double eVal : allowedEnergies()) {

    const string en = toString(round(eVal));
    if (isCompatibleWithSqrtS(eVal)) _sqs = en;

    bool is900GeV(en == "900"s);
    book(_h[en + "pi0"], 1 + is900GeV, 1, 1);
  }
  raiseBeamErrorIf(_sqs.empty());

  book(_h["eta"], 3, 1, 1);
  // Temporary plots with the binning of _h_etaToPion to construct the eta/pi0 ratio
  book(_h["temp_eta"], "TMP/h_eta", refData(3, 1, 1));
  book(_h["temp_pion"], "TMP/h_pion", refData(3, 1, 1));
}


/// Per-event analysis
void analyze(const Event& event) {

  const FinalState& ufs = apply<UnstableParticles>(event, "UFS");
  for (const Particle& p : ufs.particles()) {
    const double normfactor = TWOPI * p.pT() / GeV * 2 * RAPMAX;
    if (p.pid() == 111) {
      // Neutral pion; ALICE corrects for pi0 feed-down from K_0_s and Lambda
      if (p.hasAncestorWith(Cuts::pid == 310) || p.hasAncestorWith(Cuts::pid == 3122)
          || p.hasAncestorWith(Cuts::pid == -3122))
        continue; //< K_0_s, Lambda, Anti-Lambda
      _h[_sqs + "pi0"]->fill(p.pT() / GeV, 1.0 / normfactor);
      if (_sqs == "7000"s) _h["temp_pion"]->fill(p.pT() / GeV);
    }
    else if (p.pid() == 221 && _sqs == "7000"s) {
      // eta meson (only for 7 TeV)
      _h["eta"]->fill(p.pT() / GeV, 1.0 / normfactor);
      _h["temp_eta"]->fill(p.pT() / GeV);
    }
  }
}


/// Normalize histos and construct ratio
void finalize() {
  const double sf = crossSection() / microbarn / sumOfWeights();
  scale(_h, sf);

  // first divide hists with binned axis
  Estimate1DPtr tmp_ratio;
  book(tmp_ratio, "TMP/ratio", _h["eta"]->xEdges());
  divide(_h["temp_eta"], _h["temp_pion"], tmp_ratio);
  // now convert to strings edges from ref data
  BinnedEstimatePtr<string> ratio;
  book(ratio, 4, 1, 1);
  for (const auto& b : tmp_ratio->bins()) {
    ratio->bin(b.index()).set(b.val(), b.err());
  }
}

private:

const double RAPMAX = 0.8;
string _sqs = "";

map<string, Histo1DPtr> _h;

};

RIVET_DECLARE_PLUGIN(ALICE_2012_I1116147);

} ```