Rivet analyses referenceALICE_2017_I1511870Measurement of D-meson production at mid-rapidity in pp collisions at $\sqrt{s}=7$ TeVExperiment: ALICE (LHC) Inspire ID: 1511870 Status: VALIDATED Authors:
Beam energies: (3500.0, 3500.0) GeV Run details:
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 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief Add a short analysis description here
9 class ALICE_2017_I1511870 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(ALICE_2017_I1511870);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21
22 // Initialise and register projections
23 declare(UnstableParticles(), "UFS");
24
25 // Book histograms
26 book(_h_D0,1, 1, 1); // production cross section of D0 meson
27 book(_h_Dplus,2, 1, 1); // production cross section of Dplus meson
28 book(_h_Dstar,3, 1, 1); // production cross section of Dstar meson
29 book(_h_Ds,4, 1, 1); // production cross section of Ds meson
30 book(_h_DplusonD0,5, 1, 1); // ratio of production cross section between Dplus and D0
31 book(_h_DstaronD0,6, 1, 1); // ratio of production cross section between Dstar and D0
32 book(_h_DsonD0,7, 1, 1); // ratio of production cross section between Ds and D0
33 book(_h_DsonDplus,8, 1, 1); // ratio of production cross section between Ds and Dplus
34 book(_h_D0int,9,1,1); // pt-integrated production cross section of D0 meson
35 book(_h_Dplusint,10,1,1); // pt-integrated production cross section of Dplus meson
36 book(_h_Dstarint,11,1,1); // pt-integrated production cross section of Dstar meson
37 book(_h_Dsint,12,1,1); // pt-integrated production cross section of Ds meson
38 book(_h_cc,13,1,1); // integrated cross section of ccbar
39 book(_h_ptd0,14,1,1); // mean pt of prompt D0
40 book(_h_D0full,15,1,1); // integrated cross section for D0 in full rapidity
41 book(_h_ccfull,16,1,1); // integrated cross section for ccbar in full rapidity
42 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)
43 book(_h_D0dummy,"TMP/_h_D0dummy",refData(5,1,1)); // used to make DplusonD0
44 book(_h_D0dummy1,"TMP/_h_D0dummy1",refData(7,1,1)); // used to make DsonD0
45 book(_h_Dplusdummy,"TMP/_h_Dplusdummy",refData(8,1,1)); // used to make DsonDplus
46 }
47
48
49 /// Perform the per-event analysis
50 /*PDG code IDs used inside the foreach cycle: 421 = D0, 411 = D+, 413 = D*+, 431 = Ds+ */
51 void analyze(const Event& event) {
52 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
53
54 for(const Particle& p : ufs.particles()) {
55 if(p.abspid() == 421){
56 if(not p.fromBottom()){
57 _h_D0full ->fill(7.000000e+03/GeV);
58 _h_ccfull ->fill(7.000000e+03/GeV);}
59 }
60 if(p.absrap() < 0.5){
61 if(p.fromBottom())
62 continue;
63 else
64 {
65 if(p.abspid() == 421){
66 _h_D0 ->fill(p.pT()/GeV);
67 _h_D0dummy ->fill(p.pT()/GeV);
68 _h_D0dummy1 ->fill(p.pT()/GeV);
69 _h_D0int ->fill(7.000000e+03/GeV);
70 _h_cc ->fill(7.000000e+03/GeV);
71 _h_ptd0 ->fill(7.000000e+03/GeV,p.pT()/GeV);
72 _h_wei ->fill();
73 }
74 else if(p.abspid() == 411){
75 _h_Dplus ->fill(p.pT()/GeV);
76 _h_Dplusdummy ->fill(p.pT()/GeV);
77 _h_Dplusint ->fill(7.000000e+03/GeV);
78 }
79 else if(p.abspid() == 413){
80 _h_Dstar ->fill(p.pT()/GeV);
81 _h_Dstarint ->fill(7.000000e+03/GeV);
82 }
83 else if(p.abspid() == 431){
84 _h_Ds ->fill(p.pT()/GeV);
85 _h_Dsint ->fill(7.000000e+03/GeV);
86 }
87 }
88 }
89 }
90 }
91
92 /// Normalise histograms etc., after the run
93 void finalize() {
94
95 //normalize(_h_YYYY); // normalize to unity
96 //all the histograms are divided by 2 since at this point the results consider both particles and antiparticles
97 scale(_h_D0, crossSection()/(microbarn*2*sumOfWeights())); // norm to cross section
98 scale(_h_Dplus, crossSection()/(microbarn*2*sumOfWeights())); // norm to cross section
99 scale(_h_Dstar, crossSection()/(microbarn*2*sumOfWeights())); // norm to cross section
100 scale(_h_Ds, crossSection()/(microbarn*2*sumOfWeights())); // norm to cross section
101 scale(_h_D0dummy, crossSection()/(microbarn*2*sumOfWeights())); // norm to cross section
102 scale(_h_D0dummy1, crossSection()/(microbarn*2*sumOfWeights())); // norm to cross section
103 scale(_h_Dplusdummy, crossSection()/(microbarn*2*sumOfWeights())); // norm to cross section
104
105 divide(_h_Dplus, _h_D0dummy, _h_DplusonD0); //ratio plots
106 divide(_h_Dstar, _h_D0dummy, _h_DstaronD0);
107 divide(_h_Ds, _h_D0dummy1, _h_DsonD0);
108 divide(_h_Ds, _h_Dplusdummy, _h_DsonDplus);
109
110 scale(_h_D0int, crossSection()/(microbarn*2*sumOfWeights())); // norm to cross section
111 scale(_h_Dplusint, crossSection()/(microbarn*2*sumOfWeights())); // norm to cross section
112 scale(_h_Dstarint, crossSection()/(microbarn*2*sumOfWeights())); // norm to cross section
113 scale(_h_Dsint, crossSection()/(microbarn*2*sumOfWeights())); // norm to cross section
114
115 scale(_h_cc, 1.034*crossSection()/(microbarn*2*sumOfWeights()*0.542));
116 // 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.
117 // 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.
118
119 if( _h_wei->effNumEntries()!=0.) scale(_h_ptd0, 1/ _h_wei->val()); //scaled for the number of events used to calculate the mean pT
120
121 scale(_h_D0full, crossSection()/(millibarn*2*sumOfWeights()));
122 // 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.
123
124 scale(_h_ccfull, 1.034*crossSection()/(millibarn*2*sumOfWeights()*0.542));
125 // 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.
126 // 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.
127 }
128
129 /// @}
130
131
132 /// @name Histograms
133 /// @{
134 CounterPtr _h_wei;
135 Histo1DPtr _h_D0, _h_Dplus, _h_Dstar, _h_Ds, _h_D0dummy, _h_D0dummy1, _h_Dplusdummy;
136 BinnedHistoPtr<int> _h_D0int, _h_Dplusint, _h_Dstarint, _h_Dsint, _h_cc, _h_D0full, _h_ccfull, _h_ptd0;
137 Estimate1DPtr _h_DplusonD0, _h_DstaronD0, _h_DsonD0, _h_DsonDplus;
138 /// @}
139
140 };
141
142
143 RIVET_DECLARE_PLUGIN(ALICE_2017_I1511870);
144
145}
|