rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2010_S8547297

Charged-particle pT and pseudorapidity spectra from pp collisions at 900 and 2360 GeV.
Experiment: CMS (LHC)
Inspire ID: 845323
Status: VALIDATED
Authors:
  • A. Knutsson
References: Beams: p+ p+
Beam energies: (450.0, 450.0); (1180.0, 1180.0) GeV
Run details:
  • Non-single-diffractive (NSD) events only. Should include double-diffractive (DD) events and non-diffractive (ND) events but NOT single-diffractive (SD) events. Examples, in Pythia6 the SD processes to be turned off are 92 and 93, and in Pythia8 the SD processes are 103 and 104 (also called SoftQCD:singleDiffractive). Beam energy must be specified as analysis option "ENERGY" when rivet-merge'ing samples.

Charged particle spectra are measured in proton-proton collisions at center-of-mass energies 900 and 2360 GeV. The spectra are normalized to all non-single-diffractive (NSD) events using corrections for trigger and selection efficiency, acceptance, and branching ratios. There are transverse-momentum (pT) spectra from 0.1 to 2 GeV in bins of pseudorapidity (eta) and pT spectra from 0.1 to 4 GeV for |eta|<2.4. The eta spectra come from the average of three methods and cover |eta|<2.5 and are corrected to include all pT. The data were corrected according to the SD/DD/ND content of the CMS trigger, as predicted by PYTHIA6. The uncertainties connected with correct or incorrect modelling of diffraction were included in the systematic errors. Beam energy must be specified (in GeV) as analysis option "ENERGY" when rivet-merging samples.

Source code: CMS_2010_S8547297.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/ChargedFinalState.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// Charged-particle pT and pseudorapidity spectra from pp collisions at 900 and 2360 GeV
  9  class CMS_2010_S8547297 : public Analysis {
 10  public:
 11
 12    RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2010_S8547297);
 13
 14
 15    /// @{
 16
 17    void init() {
 18      ChargedFinalState cfs((Cuts::etaIn(-2.5, 2.5)));
 19      declare(cfs, "CFS");
 20
 21      if (isCompatibleWithSqrtS(900)) {
 22        for (int d=1; d<=3; d++) {
 23          for (int y=1; y<=4; y++) {
 24            _h_dNch_dpT.push_back(Histo1DPtr());
 25            book(_h_dNch_dpT.back(), d, 1, y);
 26          }
 27        }
 28        book(_h_dNch_dpT_all ,7, 1, 1);
 29        book(_h_dNch_dEta ,8, 1, 1);
 30      } else if (isCompatibleWithSqrtS(2360)) {
 31        for (int d=4; d<=6; d++) {
 32          for (int y=1; y<=4; y++) {
 33            _h_dNch_dpT.push_back(Histo1DPtr());
 34            book(_h_dNch_dpT.back(), d, 1, y);
 35          }
 36        }
 37        book(_h_dNch_dpT_all ,7, 1, 2);
 38        book(_h_dNch_dEta ,8, 1, 2);
 39      }
 40    }
 41
 42
 43    void analyze(const Event& event) {
 44      const double weight = 1.0;
 45
 46      //charged particles
 47      const ChargedFinalState& charged = apply<ChargedFinalState>(event, "CFS");
 48
 49      for (const Particle& p : charged.particles()) {
 50        //selecting only charged hadrons
 51        if (! PID::isHadron(p.pid())) continue;
 52
 53        const double pT = p.pT();
 54        const double eta = p.eta();
 55
 56        // The data is actually a duplicated folded distribution.  This should mimic it.
 57        _h_dNch_dEta->fill(eta, 0.5*weight);
 58        _h_dNch_dEta->fill(-eta, 0.5*weight);
 59        if (fabs(eta) < 2.4 && pT > 0.1*GeV) {
 60          if (pT < 4.0*GeV) {
 61            _h_dNch_dpT_all->fill(pT/GeV, weight/(pT/GeV));
 62            if (pT < 2.0*GeV) {
 63              int ietabin = int(fabs(eta)/0.2);
 64              _h_dNch_dpT[ietabin]->fill(pT/GeV, weight);
 65            }
 66          }
 67        }
 68      }
 69    }
 70
 71
 72    void finalize() {
 73      const double normfac = 1.0/sumOfWeights(); // Normalizing to unit eta is automatic
 74      // The pT distributions in bins of eta must be normalized to unit eta.  This is a factor of 2
 75      // for the |eta| times 0.2 (eta range).
 76      // The pT distributions over all eta are normalized to unit eta (2.0*2.4) and by 1/2*pi*pT.
 77      // The 1/pT part is taken care of in the filling.  The 1/2pi is taken care of here.
 78      const double normpT = normfac/(2.0*0.2);
 79      const double normpTall = normfac/(2.0*M_PI*2.0*2.4);
 80
 81      for (size_t ietabin=0; ietabin < _h_dNch_dpT.size(); ietabin++){
 82        scale(_h_dNch_dpT[ietabin], normpT);
 83      }
 84      scale(_h_dNch_dpT_all, normpTall);
 85      scale(_h_dNch_dEta, normfac);
 86    }
 87
 88    /// @}
 89
 90
 91  private:
 92
 93    /// @{
 94    std::vector<Histo1DPtr> _h_dNch_dpT;
 95    Histo1DPtr _h_dNch_dpT_all;
 96    Histo1DPtr _h_dNch_dEta;
 97    /// @}
 98
 99  };
100
101
102
103  RIVET_DECLARE_ALIASED_PLUGIN(CMS_2010_S8547297, CMS_2010_I845323);
104
105}