rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

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
  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}