Rivet analyses
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 D0, D+, D*+ and Ds 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 D0 → Kπ, D+ → Kππ, D*+ → D0π → Kππ, $D_s KK$, 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++ -*-
#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);
}