rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

LHCB_2010_S8758301

LHCb differential cross section measurement of prompt $K^0_S$ production in three rapidity windows at $\sqrt{s} = 0.9$ TeV
Experiment: LHCB (LHC 900 GeV)
Inspire ID: 865584
Status: VALIDATED
Authors:
  • Holger Schulz
  • Alex Grecu
References: Beams: p+ p+
Beam energies: (450.0, 450.0) GeV
Run details:
  • QCD events. See paper for MC discussion.

The paper presents the cross-section and double differential cross-section measurement for prompt $K^0_S$ production in pp collisions at $\sqrt{s} = 0.9 TeV$. The data were taken during the LHCb run in December 2009 and cover a transversal momentum range from 0 to 1.6 GeV/c. The differential production cross-section is calculated for three rapidity windows $2.5 < y < 3.0$, $3.0 < y < 3.5$ and $3.5 < y < 4.0$ as well as the whole rapidity domain $2.5 < y < 4.0$.

Source code: LHCB_2010_S8758301.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4#include "Rivet/Math/Constants.hh"
  5#include "Rivet/Math/Units.hh"
  6
  7namespace Rivet {
  8
  9
 10  class LHCB_2010_S8758301 : public Analysis {
 11  public:
 12
 13  	const double MIN_PT = 0.0001; // [GeV/c]
 14
 15
 16    /// Constructor
 17    LHCB_2010_S8758301()
 18      : Analysis("LHCB_2010_S8758301"), _mode(0),
 19      sumKs0_all(0),
 20      sumKs0_outup(0), sumKs0_outdwn(0),
 21      sum_low_pt_loss(0), sum_high_pt_loss(0)
 22    {  }
 23
 24
 25    /// @name Analysis methods
 26    /// @{
 27
 28    /// Book histograms and initialise projections before the run
 29    void init() {
 30    	// only interested in Ks0 particles
 31      declare(UnstableParticles(Cuts::pid == 310), "UFS");
 32
 33      if (getOption("DropPlots") == "SIG") _mode = 1;
 34    	if (getOption("DropPlots") == "D2SIG") _mode = 2;
 35
 36    	if ((_mode & 1) == 0) {	//SIG
 37    		book(_h_K0s_pt_30    ,1,1,1);
 38    		book(_h_K0s_pt_35    ,1,1,2);
 39    		book(_h_K0s_pt_40    ,1,1,3);
 40    	};
 41
 42    	if ((_mode & 2) == 0) { //D2SIG
 43    		book(_h_K0s_pt_y_30  ,2,1,1);
 44    		book(_h_K0s_pt_y_35  ,2,1,2);
 45    		book(_h_K0s_pt_y_40  ,2,1,3);
 46    	};
 47
 48      book(_h_K0s_pt_y_all ,3,1,1);
 49
 50      book(sumKs0_30, "TMP/sumKs0_30");
 51      book(sumKs0_35, "TMP/sumKs0_35");
 52      book(sumKs0_40, "TMP/sumKs0_40");
 53    }
 54
 55
 56    /// Perform the per-event analysis
 57    void analyze(const Event& event) {
 58      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
 59
 60      // safe to do this as container has only Ks0
 61      sumKs0_all += ufs.particles().size();
 62
 63      for (const Particle& p : ufs.particles()) {
 64
 65        double y = p.absrapidity(); // symmetric LHCb (factor 1/2 in finalize!)
 66        double pT = p.pT();
 67
 68        if (pT < MIN_PT) {
 69          sum_low_pt_loss ++; // just for debug since no inferior limit on pT
 70          MSG_DEBUG("Small pT K^0_S: " << pT << " GeV/c.");
 71        }
 72        if (pT > 1.6) {
 73          sum_high_pt_loss ++;
 74          continue; // no need to flow overflow bin
 75        }
 76        if ((y > 2.5) && (y < 4.0)) {
 77          _h_K0s_pt_y_all->fill(pT);
 78          if ((y > 2.5) && (y < 3.0)) {
 79            if ((_mode & 2) == 0) _h_K0s_pt_y_30->fill(pT);
 80            if ((_mode & 1) == 0) _h_K0s_pt_30->fill(pT);
 81            sumKs0_30->fill();
 82          } else if ((y > 3.0) && (y < 3.5)) {
 83            if ((_mode & 2) == 0) _h_K0s_pt_y_35->fill(pT);
 84            if ((_mode & 1) == 0) _h_K0s_pt_35->fill(pT);
 85            sumKs0_35->fill();
 86          } else if ((y > 3.5) && (y < 4.0)) {
 87            if ((_mode & 2) == 0) _h_K0s_pt_y_40->fill(pT);
 88            if ((_mode & 1) == 0) _h_K0s_pt_40->fill(pT);
 89            sumKs0_40->fill();
 90          }
 91        } else if (y < 2.5) {
 92          sumKs0_outdwn ++;
 93        } else if (y > 4.0) {
 94          sumKs0_outup ++;
 95        }
 96      }
 97    }
 98
 99
100    /// Normalise histograms etc., after the run
101    void finalize() {
102      MSG_DEBUG("Total number Ks0: " << sumKs0_all << endl
103                << "Sum of weights: " << sumOfWeights() << endl
104                << "Weight Ks0 (2.5 < y < 3.0): " <<  sumKs0_30 ->sumW()<< endl
105                << "Weight Ks0 (3.0 < y < 3.5): " << sumKs0_35->sumW() << endl
106                << "Weight Ks0 (3.5 < y < 4.0): " << sumKs0_40->sumW() << endl
107                << "Nb. Ks0 (y > 4.0): " << sumKs0_outup << endl
108                << "Nb. Ks0 (y < 2.5): " << sumKs0_outdwn << endl
109                << "Nb. Ks0 (pT < " << (MIN_PT/MeV) << " MeV/c): " << sum_low_pt_loss << endl
110                << "Nb. Ks0 (pT > 1.6 GeV/c): " << sum_high_pt_loss << endl
111                << "Cross-section [mb]: " << crossSection()/millibarn << endl
112                << "Nb. events: " << numEvents());
113      // Compute cross-section; multiply by bin width for correct scaling
114      // cross-section given by Rivet in pb (symmetric LHCb!)
115      double xsection_factor = 0.5 * crossSection()/sumOfWeights();
116      // Divide by bin area for consistent scaling, xsection in mub
117      scale(_h_K0s_pt_30, 0.1*xsection_factor/microbarn);
118      scale(_h_K0s_pt_35, 0.1*xsection_factor/microbarn);
119      scale(_h_K0s_pt_40, 0.1*xsection_factor/microbarn);
120      // Already divided by dy (rapidity window width), xsection in mb
121      scale(_h_K0s_pt_y_30, xsection_factor/millibarn);
122      scale(_h_K0s_pt_y_35, xsection_factor/millibarn);
123      scale(_h_K0s_pt_y_40, xsection_factor/millibarn);
124      // factorize to phase-space volume (area)
125      scale(_h_K0s_pt_y_all, xsection_factor/1.5/1.6/millibarn);
126    }
127
128    /// @}
129
130
131    /// Mode switch
132    size_t _mode;
133
134    /// @name Histograms
135    /// @{
136    Histo1DPtr _h_K0s_pt_y_30;         // histogram for 2.5 < y < 3.0 (d2sigma)
137    Histo1DPtr _h_K0s_pt_y_35;         // histogram for 3.0 < y < 3.5 (d2sigma)
138    Histo1DPtr _h_K0s_pt_y_40;         // histogram for 3.5 < y < 4.0 (d2sigma)
139    Histo1DPtr _h_K0s_pt_30;           // histogram for 2.5 < y < 3.0 (sigma)
140    Histo1DPtr _h_K0s_pt_35;           // histogram for 3.0 < y < 3.5 (sigma)
141    Histo1DPtr _h_K0s_pt_40;           // histogram for 3.5 < y < 4.0 (sigma)
142    Histo1DPtr _h_K0s_pt_y_all;        // histogram for 2.5 < y < 4.0 (d2sigma)
143    CounterPtr sumKs0_30;                           // Sum of weights 2.5 < y < 3.0
144    CounterPtr sumKs0_35;                           // Sum of weights 3.0 < y < 3.5
145    CounterPtr sumKs0_40;                           // Sum of weights 3.5 < y < 4.0
146    // Various counters mainly for debugging and comparisons between different generators
147    size_t sumKs0_all;                          // Nb of all Ks0 generated
148    size_t sumKs0_outup;                        // Nb of mesons with y > 4.0
149    size_t sumKs0_outdwn;                       // Nb of mesons with y < 2.5
150    size_t sum_low_pt_loss;                     // Nb of mesons with very low pT (indicates when units are mixed-up)
151    size_t sum_high_pt_loss;                    // Nb of mesons with pT > 1.6 GeV/c
152    /// @}
153  };
154
155
156  RIVET_DECLARE_ALIASED_PLUGIN(LHCB_2010_S8758301, LHCB_2010_I865584);
157
158}