Rivet analyses


title: ALICE_2017_I1511870

Measurement of D-meson production at mid-rapidity in pp collisions at $\sqrt{s}=7$ TeV

Experiment: ALICE (LHC)

Inspire ID: 1511870

Status: VALIDATED

Authors: - Marco Giacalone

References: - DOI:10.1140/epjc/s10052-017-5090-4 - arXiv: 1702.00766

Beams: p+ p+

Beam energies: (3500.0, 3500.0)GeV

Run details: - Minimum bias events

CERN-LHC. The production cross sections of the prompt charmed mesons $D^0$, $D^+$, $D^{+}$ and $D_s$ were measured at mid-rapidity in proton-proton collisions at a centre-of-mass energy $\sqrt{s_{NN}}=7$ TeV with the ALICE detector at the Large Hadron Collider (LHC). D mesons were reconstructed from their decays $D^0\to K\pi, D^+\to K\pi\pi$, $D^{+} \to D^0\pi \to K\pi\pi$, $D_s \to\phi \pi \to KK\pi $, and their charge conjugates. With respect to previous measurements in the same rapidity region, the coverage in transverse momentum pt is extended and the uncertainties are reduced by a factor of about two. The accuracy on the estimated total c-cbar production cross section is likewise improved. The measured pT-differential cross sections are compared with the results of three perturbative QCD calculations.

Source code:ALICE_2017_I1511870.cc

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

include "Rivet/Analysis.hh"

include "Rivet/Projections/UnstableParticles.hh"

namespace Rivet {

/// @brief Add a short analysis description here class ALICE_2017_I1511870 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ALICE_2017_I1511870);


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

/// Book histograms and initialise projections before the run
void init() {

  // Initialise and register projections
  declare(UnstableParticles(), "UFS");

  // Book histograms
  book(_h_D0, 1, 1, 1);        // production cross section of D0 meson
  book(_h_Dplus, 2, 1, 1);     // production cross section of Dplus meson
  book(_h_Dstar, 3, 1, 1);     // production cross section of Dstar meson
  book(_h_Ds, 4, 1, 1);        // production cross section of Ds meson
  book(_h_DplusonD0, 5, 1, 1); // ratio of production cross section between Dplus and D0
  book(_h_DstaronD0, 6, 1, 1); // ratio of production cross section between Dstar and D0
  book(_h_DsonD0, 7, 1, 1);    // ratio of production cross section between Ds and D0
  book(_h_DsonDplus, 8, 1, 1); // ratio of production cross section between Ds and Dplus
  book(_h_D0int, 9, 1, 1);     // pt-integrated production cross section of D0 meson
  book(_h_Dplusint, 10, 1, 1); // pt-integrated production cross section of Dplus meson
  book(_h_Dstarint, 11, 1, 1); // pt-integrated production cross section of Dstar meson
  book(_h_Dsint, 12, 1, 1);    // pt-integrated production cross section of Ds meson
  book(_h_cc, 13, 1, 1);       // integrated cross section of ccbar
  book(_h_ptd0, 14, 1, 1);     // mean pt of prompt D0
  book(_h_D0full, 15, 1, 1);   // integrated cross section for D0 in full rapidity
  book(_h_ccfull, 16, 1, 1);   // integrated cross section for ccbar in full rapidity
  book(
      _h_wei,
      "_h_wei"); // Counter used to calculate D0 mean pt (necessary to store an integer number for event normalisation, i.e. to still be able to compute <pT> from multiple parallel MC jobs)
  book(_h_D0dummy, "TMP/_h_D0dummy", refData(5, 1, 1));       // used to make DplusonD0
  book(_h_D0dummy1, "TMP/_h_D0dummy1", refData(7, 1, 1));     // used to make DsonD0
  book(_h_Dplusdummy, "TMP/_h_Dplusdummy", refData(8, 1, 1)); // used to make DsonDplus
}


/// Perform the per-event analysis
/*PDG code IDs used inside the foreach cycle: 421 = D0, 411 = D+, 413 = D*+, 431 = Ds+ */
void analyze(const Event& event) {
  const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");

  for (const Particle& p : ufs.particles()) {
    if (p.abspid() == 421) {
      if (not p.fromBottom()) {
        _h_D0full->fill(7.000000e+03 / GeV);
        _h_ccfull->fill(7.000000e+03 / GeV);
      }
    }
    if (p.absrap() < 0.5) {
      if (p.fromBottom())
        continue;
      else {
        if (p.abspid() == 421) {
          _h_D0->fill(p.pT() / GeV);
          _h_D0dummy->fill(p.pT() / GeV);
          _h_D0dummy1->fill(p.pT() / GeV);
          _h_D0int->fill(7.000000e+03 / GeV);
          _h_cc->fill(7.000000e+03 / GeV);
          _h_ptd0->fill(7.000000e+03 / GeV, p.pT() / GeV);
          _h_wei->fill();
        }
        else if (p.abspid() == 411) {
          _h_Dplus->fill(p.pT() / GeV);
          _h_Dplusdummy->fill(p.pT() / GeV);
          _h_Dplusint->fill(7.000000e+03 / GeV);
        }
        else if (p.abspid() == 413) {
          _h_Dstar->fill(p.pT() / GeV);
          _h_Dstarint->fill(7.000000e+03 / GeV);
        }
        else if (p.abspid() == 431) {
          _h_Ds->fill(p.pT() / GeV);
          _h_Dsint->fill(7.000000e+03 / GeV);
        }
      }
    }
  }
}

/// Normalise histograms etc., after the run
void finalize() {

  //normalize(_h_YYYY); // normalize to unity
  //all the histograms are divided by 2 since at this point the results consider both particles and antiparticles
  scale(_h_D0, crossSection() / (microbarn * 2 * sumOfWeights()));         // norm to cross section
  scale(_h_Dplus, crossSection() / (microbarn * 2 * sumOfWeights()));      // norm to cross section
  scale(_h_Dstar, crossSection() / (microbarn * 2 * sumOfWeights()));      // norm to cross section
  scale(_h_Ds, crossSection() / (microbarn * 2 * sumOfWeights()));         // norm to cross section
  scale(_h_D0dummy, crossSection() / (microbarn * 2 * sumOfWeights()));    // norm to cross section
  scale(_h_D0dummy1, crossSection() / (microbarn * 2 * sumOfWeights()));   // norm to cross section
  scale(_h_Dplusdummy, crossSection() / (microbarn * 2 * sumOfWeights())); // norm to cross section

  divide(_h_Dplus, _h_D0dummy, _h_DplusonD0); //ratio plots
  divide(_h_Dstar, _h_D0dummy, _h_DstaronD0);
  divide(_h_Ds, _h_D0dummy1, _h_DsonD0);
  divide(_h_Ds, _h_Dplusdummy, _h_DsonDplus);

  scale(_h_D0int, crossSection() / (microbarn * 2 * sumOfWeights()));    // norm to cross section
  scale(_h_Dplusint, crossSection() / (microbarn * 2 * sumOfWeights())); // norm to cross section
  scale(_h_Dstarint, crossSection() / (microbarn * 2 * sumOfWeights())); // norm to cross section
  scale(_h_Dsint, crossSection() / (microbarn * 2 * sumOfWeights()));    // norm to cross section

  scale(_h_cc, 1.034 * crossSection() / (microbarn * 2 * sumOfWeights() * 0.542));
  // 0.542 accounts for the fraction of charm quarks hadronizing into D0 mesons, the ALICE uncertainty on such a factor (0.542 ± 0.024) is not propagated here.
  // 1.034 is used to include the correction of the different shapes of the rapidity distributions of D0 and ccbar, the ALICE uncertainty on such a factor (1.034 ± 0.015, i.e. 1.5 percentage point of uncertainty) is not propagated here.

  if (_h_wei->effNumEntries() != 0.)
    scale(_h_ptd0, 1 / _h_wei->val()); //scaled for the number of events used to calculate the mean pT

  scale(_h_D0full, crossSection() / (millibarn * 2 * sumOfWeights()));
  // NOTE : for the ALICE data, the y extrapolation from |y|<0.5 to full-y phase space is done with an FONLL-based factor (8.56 +2.51 -0.42). Here in MC we simply use direct MC outcome over full y.

  scale(_h_ccfull, 1.034 * crossSection() / (millibarn * 2 * sumOfWeights() * 0.542));
  // 0.542 accounts for the fraction of charm quarks hadronizing into D0 mesons, the ALICE uncertainty on such a factor (0.542 ± 0.024) is not propagated here.
  // 1.034 is used to include the correction of the different shapes of the rapidity distributions of D0 and ccbar, the ALICE uncertainty on such a factor (1.034 ± 0.016, i.e. 1.5 percentage point of uncertainty) is not propagated here.
}

/// @}


/// @name Histograms
/// @{
CounterPtr _h_wei;
Histo1DPtr _h_D0, _h_Dplus, _h_Dstar, _h_Ds, _h_D0dummy, _h_D0dummy1, _h_Dplusdummy;
BinnedHistoPtr<int> _h_D0int, _h_Dplusint, _h_Dstarint, _h_Dsint, _h_cc, _h_D0full, _h_ccfull, _h_ptd0;
Estimate1DPtr _h_DplusonD0, _h_DstaronD0, _h_DsonD0, _h_DsonDplus;
/// @}

};

RIVET_DECLARE_PLUGIN(ALICE_2017_I1511870);

} ```