rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CDF_2009_S8233977

CDF Run 2 min bias cross-section analysis
Experiment: CDF (Tevatron Run 2)
Inspire ID: 817466
Status: VALIDATED
Authors:
  • Hendrik Hoeth
  • Niccolo' Moggi
References: Beams: p- p+
Beam energies: (980.0, 980.0) GeV
Run details:
  • $p\bar{p}$ QCD interactions at 1960 GeV. Particles with $c \tau > 10$ mm should be set stable.

Niccolo Moggi's min bias analysis. Minimum bias events are used to measure the average track pT vs. charged multiplicity, a track pT distribution and an inclusive $\sum E_T$ distribution.

Source code: CDF_2009_S8233977.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
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/ChargedFinalState.hh"
#include "Rivet/Projections/TriggerCDFRun2.hh"

namespace Rivet {


  /// @brief CDF Run II min-bias cross-section
  /// @author Hendrik Hoeth
  ///
  /// Measurement of \f$ \langle p_T \rangle \f$ vs. \f$ n_\text{ch} \f$,
  /// the track \f$ p_T \f$ distribution, and the \f$ \sum E_T \f$ distribution.
  /// Particles are selected within |eta|<1 and with pT>0.4 GeV.
  /// There is no pT cut for the \f$ \sum E_T \f$ measurement.
  ///
  /// @par Run conditions
  ///
  /// @arg \f$ \sqrt{s} = \f$ 1960 GeV
  /// @arg Run with generic QCD events.
  /// @arg Set particles with c*tau > 10 mm stable
  class CDF_2009_S8233977 : public Analysis {
  public:

    /// Constructor
    CDF_2009_S8233977()
      : Analysis("CDF_2009_S8233977"),
        _sumWeightSelected(0.0)
    {    }


    /// @name Analysis methods
    //@{

    /// Book histograms and projections
    void init() {
      declare(TriggerCDFRun2(), "Trigger");
      declare(FinalState(-1.0, 1.0, 0.0*GeV), "EtFS");
      declare(ChargedFinalState(-1.0, 1.0, 0.4*GeV), "CFS");

      _hist_pt = bookHisto1D(1, 1, 1);
      _hist_pt_vs_multiplicity = bookProfile1D(2, 1, 1);
      _hist_sumEt = bookHisto1D(3, 1, 1);
    }



    /// Do the analysis
    void analyze(const Event& evt) {
      // MinBias Trigger
      const bool trigger = apply<TriggerCDFRun2>(evt, "Trigger").minBiasDecision();
      if (!trigger) vetoEvent;

      // Get the event weight
      const double weight = evt.weight();

      /// @todo The pT and sum(ET) distributions look slightly different from
      ///       Niccolo's Monte Carlo plots. Still waiting for his answer.

      const ChargedFinalState& trackfs = apply<ChargedFinalState>(evt, "CFS");
      const size_t numParticles = trackfs.size();
      foreach (const Particle& p, trackfs.particles()) {
        const double pT = p.pT() / GeV;
        _hist_pt_vs_multiplicity->fill(numParticles, pT, weight);

        // The weight for entries in the pT distribution should be weight/(pT*dPhi*dy).
        //
        // - dPhi = 2*PI
        //
        // - dy depends on the pT: They calculate y assuming the particle has the
        //   pion mass and assuming that eta=1:
        //   dy = 2 * 1/2 * ln [(sqrt(m^2 + (a+1)*pT^2) + a*pT) / (sqrt(m^2 + (a+1)*pT^2) - a*pT)]
        //   with a = sinh(1).
        //
        // sinh(1) = 1.1752012
        // m(charged pion)^2 = (139.57 MeV)^2 = 0.019479785 GeV^2
        const double sinh1 = 1.1752012;
        const double apT  = sinh1 * pT;
        const double mPi = 139.57*MeV;
        const double root = sqrt(mPi*mPi + (1+sinh1)*pT*pT);
        const double dy = std::log((root+apT)/(root-apT));
        const double dphi = TWOPI;
        _hist_pt->fill(pT, weight/(pT*dphi*dy));
      }

      // Calc sum(Et) from calo particles
      const FinalState& etfs = apply<FinalState>(evt, "EtFS");
      double sumEt = 0.0;
      foreach (const Particle& p, etfs.particles()) {
        sumEt += p.Et();
      }
      _hist_sumEt->fill(sumEt, weight);
      _sumWeightSelected += evt.weight();
    }



    /// Normalize histos
    void finalize() {
      scale(_hist_sumEt, crossSection()/millibarn/(4*M_PI*_sumWeightSelected));
      scale(_hist_pt, crossSection()/millibarn/_sumWeightSelected);
      MSG_DEBUG("sumOfWeights()     = " << sumOfWeights());
      MSG_DEBUG("_sumWeightSelected = " << _sumWeightSelected);
    }

    //@}


  private:

    double _sumWeightSelected;
    Profile1DPtr _hist_pt_vs_multiplicity;
    Histo1DPtr _hist_pt;
    Histo1DPtr _hist_sumEt;

  };



  // The hook for the plugin system
  DECLARE_RIVET_PLUGIN(CDF_2009_S8233977);

}