Rivet analyses


title: ALICE_2019_I1716440

$D^0$, $D^{*\pm}$, $D^\pm$ and $D^\pm_s$ meson production at 5.02 and 7 TeV

Experiment: ALICE (LHC)

Inspire ID: 1716440

Status: VALIDATED

Authors: - Peter Richardson

References: - Eur.Phys.J.C 79 (2019) 388, 2019

Beams: p+ p+

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

Run details: - D meson production

Measurement of the transverse momentum spectra and ratios for $D^0$, $D^{*\pm}$, $D^\pm$ and $D^\pm_s$ meson production at 5.02 TeV by the ALICE collaboration. The 7 TeV results are based on those from ALICE_2017_I1511870 and are mainly used to take ratios between the two energies.

Source code:ALICE_2019_I1716440.cc

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

include "Rivet/Analysis.hh"

include "Rivet/Projections/UnstableParticles.hh"

namespace Rivet {

/// @brief D meson production at 5.02 and 7 TeV class ALICE_2019_I1716440 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ALICE_2019_I1716440);


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

/// Book histograms and initialise projections before the run
void init() {
  // projections
  declare(UnstableParticles(Cuts::abspid == 411 || Cuts::abspid == 421 || Cuts::abspid == 431
                            || Cuts::abspid == 413),
          "UFS");

  for (double eVal : allowedEnergies()) {
    const string en = toString(round(eVal / GeV));
    if (isCompatibleWithSqrtS(eVal)) _sqs = en;
    bool is7TeV(en == "7000"s);

    size_t offset = is7TeV ? 10 : 6;
    for (size_t ix = 0; ix < 4; ++ix) {
      const string mode = en + toString(ix);
      book(_h[mode + "ratio_num"], "TMP/h_ratio_num_" + mode, refData(offset + ix, 1, 1));
      book(_h[mode + "ratio_den"], "TMP/h_ratio_den_" + mode, refData(offset + ix, 1, 1));
      book(_h[mode + "energy"], "TMP/h_energy_" + mode, refData(offset + ix, 1, 1));
      if (!is7TeV) book(_h[mode + "prompt"], 1 + ix, 1, 1);
    }
  }
  raiseBeamErrorIf(_sqs.empty());

  book(_h["incl"], 5, 1, 1);
  book(_total, 18, 1, 1);
}


/// Perform the per-event analysis
void analyze(const Event& event) {
  // Final state of unstable particles to get particle spectra
  const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
  for (const Particle& p : ufs.particles()) {
    // no mixing and |y|<0.5
    if (p.children().size() == 1 || p.absrap() > 0.5) continue;
    unsigned int imeson = 0;
    if (p.abspid() == 411)
      imeson = 1;
    else if (p.abspid() == 413)
      imeson = 2;
    else if (p.abspid() == 431)
      imeson = 3;
    const double pT = p.perp();
    if (p.fromBottom()) {
      if (_sqs == "5020"s && imeson == 0) _h["incl"]->fill(pT);
      continue;
    }
    // prompt at 5.02 TeV
    if (_sqs == "5020"s) {
      _h[_sqs + toString(imeson) + "prompt"]->fill(pT);
      _total->fill(_edges[imeson]);
    }
    if (imeson == 0) {
      _h[_sqs + "0ratio_den"]->fill(pT / GeV);
      _h[_sqs + "1ratio_den"]->fill(pT / GeV);
      _h[_sqs + "2ratio_den"]->fill(pT / GeV);
      if (_sqs == "5020"s) _h["incl"]->fill(pT / GeV);
    }
    else if (imeson == 1) {
      _h[_sqs + "0ratio_num"]->fill(pT / GeV);
      _h[_sqs + "3ratio_den"]->fill(pT / GeV);
    }
    else if (imeson == 2) {
      _h[_sqs + "1ratio_num"]->fill(pT / GeV);
    }
    else if (imeson == 3) {
      _h[_sqs + "2ratio_num"]->fill(pT / GeV);
      _h[_sqs + "3ratio_num"]->fill(pT / GeV);
    }
    _h[_sqs + toString(imeson) + "energy"]->fill(pT / GeV);
  }
}


/// Normalise histograms etc., after the run
void finalize() {
  const double factor = crossSection() / microbarn / sumOfWeights();
  scale(_total, factor);
  scale(_h, factor);

  Estimate1DPtr tmp;
  for (double eVal : allowedEnergies()) {
    const string en = toString(round(eVal / GeV));
    for (size_t ix = 0; ix < 4; ++ix) {
      const string mode = en + toString(ix);
      bool is7TeV(en == "7000"s);
      book(tmp, 6 + 4 * is7TeV + ix, 1, 1);
      divide(_h[mode + "ratio_num"], _h[mode + "ratio_den"], tmp);
    }
  }
}

/// @}


/// @name Histograms
/// @{
map<string, Histo1DPtr> _h;
BinnedHistoPtr<string> _total;
vector<string> _edges = {"P P --> D0 (Q=PROMPT) X", "P P --> D+ (Q=PROMPT) X", "P P --> D*+ (Q=PROMPT) X",
                         "P P --> D/s+ (Q=PROMPT) X"};
string _sqs = "";
/// @}

};

RIVET_DECLARE_PLUGIN(ALICE_2019_I1716440);

} ```