Rivet Analyses Reference

STAR_2008_S7869363

Multiplicities and pT spectra from STAR for $pp$ at 200 GeV
Experiment: STAR (RHIC)
Inspire ID: 793126
Status: UNVALIDATED
Authors:
  • Holger Schulz
References:
  • arXiv: 0808.2041
  • http://drupal.star.bnl.gov/STAR/files/starpublications/124/data.html
Beams: p+ p+
Beam energies: (100.0, 100.0) GeV
Run details:
  • QCD (pp) events at 200 GeV

Charged multiplicity and identified charged particle spectra

Source code: STAR_2008_S7869363.cc
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/ChargedFinalState.hh"
#include "Rivet/Projections/SmearedParticles.hh"

namespace Rivet {


  /// Multiplicities and pT spectra from STAR for pp at 200 GeV
  class STAR_2008_S7869363 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(STAR_2008_S7869363);


    /// @name Analysis methods
    /// @{

    /// Book histograms and initialise projections before the run
    void init() {
      const ChargedFinalState cfs(Cuts::abseta < 0.5 && Cuts::pT >  0.2*GeV);
      const SmearedParticles lfs(cfs, [](const Particle& p) {
          // Track reconstruction efficiencies for tracks with pT from 0 to 600 MeV
          // in steps of 50 MeV. The efficiency is assumed to be 0.88 for pT >= 600 MeV
          const static vector<double> TRKEFF = {0,0,0.38,0.72,0.78,0.81,0.82,0.84,0.85,0.86,0.87,0.88};
          const size_t idx = size_t(min(floor(p.pT()/MeV/50), 11.));
          return TRKEFF[idx];
        });
      declare(lfs, "FS");

      book(_h_dNch           ,1, 1, 1);
      book(_h_dpT_Pi         ,2, 1, 1);
      book(_h_dpT_Piplus     ,2, 1, 2);
      book(_h_dpT_Kaon       ,2, 1, 3);
      book(_h_dpT_Kaonplus   ,2, 1, 4);
      book(_h_dpT_AntiProton ,2, 1, 5);
      book(_h_dpT_Proton     ,2, 1, 6);
      // book(nCutsPassed, "nCutsPassed");
      // book(nPi, "nPi");
      // book(nPiPlus, "nPiPlus");
      // book(nKaon, "nKaon");
      // book(nKaonPlus, "nKaonPlus");
      // book(nProton, "nProton");
      // book(nAntiProton, "nAntiProton");
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {
      const ParticleFinder& charged = apply<ParticleFinder>(event, "FS");

      // Vertex reconstruction efficiencies as a function of charged multiplicity.
      // For events with more than 23 reconstructed tracks the efficiency is 100%.
      double vtxeffs[24] = { 0.000000,0.512667,0.739365,0.847131,0.906946,0.940922,0.959328,0.96997,
                             0.975838,0.984432,0.988311,0.990327,0.990758,0.995767,0.99412,0.992271,
                             0.996631,0.994802,0.99635,0.997384,0.998986,0.996441,0.994513,1.000000 };

      double vtxeff = 1.0;
      if (charged.particles().size() < 24) {
        vtxeff = vtxeffs[charged.particles().size()];
      }

      const double weight = vtxeff;

      for (const Particle& p : charged.particles()) {
        double pT = p.pT()/GeV;
        double y = p.rapidity();
        if (fabs(y) < 0.1) {
          // nCutsPassed->fill(weight);
          const PdgId id = p.pid();
          switch (id) {
          case -211:
            _h_dpT_Pi->fill(pT, weight/(TWOPI*pT*0.2));
            // nPi->fill(weight);
            break;
          case 211:
            _h_dpT_Piplus->fill(pT, weight/(TWOPI*pT*0.2));
            // nPiPlus->fill(weight);
            break;
          case -321:
            _h_dpT_Kaon->fill(pT, weight/(TWOPI*pT*0.2));
            // nKaon->fill(weight);
            break;
          case 321:
            _h_dpT_Kaonplus->fill(pT, weight/(TWOPI*pT*0.2));
            // nKaonPlus->fill(weight);
            break;
          case -2212:
            _h_dpT_AntiProton->fill(pT, weight/(TWOPI*pT*0.2));
            // nAntiProton->fill(weight);
            break;
          case 2212:
            _h_dpT_Proton->fill(pT, weight/(TWOPI*pT*0.2));
            // nProton->fill(weight);
            break;
          }
        }
        else {
          continue;
        }
      }
      _h_dNch->fill(charged.particles().size(), weight);
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      //double nTot = nPi + nPiPlus + nKaon + nKaonPlus + nProton + nAntiProton;
      normalize(_h_dNch);

      /// @todo Norm to data!
      normalize(_h_dpT_Pi        , 0.389825 );
      normalize(_h_dpT_Piplus    , 0.396025 );
      normalize(_h_dpT_Kaon      , 0.03897  );
      normalize(_h_dpT_Kaonplus  , 0.04046  );
      normalize(_h_dpT_AntiProton, 0.0187255);
      normalize(_h_dpT_Proton    , 0.016511 );
    }

    /// @}


    /// @name Histograms
    /// @{
    Histo1DPtr _h_dNch;
    Histo1DPtr _h_dpT_Pi, _h_dpT_Piplus;
    Histo1DPtr _h_dpT_Kaon, _h_dpT_Kaonplus;
    Histo1DPtr _h_dpT_AntiProton, _h_dpT_Proton;
    Profile1DPtr _h_pT_vs_Nch;
    //CounterPtr nCutsPassed, nPi, nPiPlus, nKaon, nKaonPlus, nProton, nAntiProton;
    ///@}

  };



  RIVET_DECLARE_ALIASED_PLUGIN(STAR_2008_S7869363, STAR_2008_I793126);

}