rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CDF_2015_I1388868

Studies of the underlying event at 300, 900 and 1960 GeV with leading charged particles
Experiment: CDF (Tevatron)
Inspire ID: 1388868
Status: VALIDATED
Authors:
  • Oreste Tumbarell Aranda
  • Hannes Jung
  • Paolo Gunnellini
  • Andy Buckley
References:
  • Phys. Rev. D 92, 092009 (2015)
  • arXiv: 1508.05340
Beams: p+ p-
Beam energies: (150.0, 150.0); (450.0, 450.0); (980.0, 980.0) GeV
Run details:
  • Minimum bias proton-antiproton collision events at 300, 900 and 1960 GeV. Set particles with c*tau > 10 mm stable. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

We study charged particle production in proton--antiproton collisions at 300 GeV, 900 GeV, and 1.96 TeV. We use the direction of the charged particle with the largest transverse momentum in each event to define three regions of $\eta$--$\phi$ space; toward, away, and transverse. The average number and the average scalar pT sum of charged particles in the transverse region are sensitive to the modeling of the underlying event. The transverse region is divided into a MAX and MIN transverse region, which helps separate the hard component (initial and final-state radiation) from the beam-beam remnant and multiple parton interaction components of the scattering. Beam energy must be specified (in GeV) as analysis option "ENERGY" when rivet-merging samples.

Source code: CDF_2015_I1388868.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/ChargedFinalState.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief CDF leading track underlying event at 300, 900 and 1960 GeV
  9  ///
 10  /// @author Orestes Tumbarell Aranda (Havana), Hannes Jung (DESY)
 11  class CDF_2015_I1388868 : public Analysis {
 12  public:
 13
 14    /// Constructor
 15    RIVET_DEFAULT_ANALYSIS_CTOR(CDF_2015_I1388868);
 16
 17
 18    /// @name Analysis methods
 19    /// @{
 20
 21    /// Book histograms and initialise projections before the run
 22    void init() {
 23
 24      // Energy selection
 25      int isqrts = -1;
 26      if (isCompatibleWithSqrtS(300*GeV)) {
 27        isqrts = 2;
 28      } else if (isCompatibleWithSqrtS(900*GeV)) {
 29        isqrts = 1;
 30      } else if (isCompatibleWithSqrtS(1960*GeV)) {
 31        isqrts = 0;
 32      } else {
 33        throw UserError("Unexpected sqrtS ! Only 300, 900, 1960 GeV is supported by CDF_2015_I1388868");
 34      }
 35      MSG_DEBUG("CDF Tevatron UE: running with " << sqrtS()/GeV);
 36
 37      // Book projection
 38      const ChargedFinalState cfs(Cuts::abseta < 0.8 && Cuts::pT > 0.5*GeV);
 39      declare(cfs, "Tracks");
 40
 41      // Book profile histos
 42      book(_NchgPDFden1,  8*isqrts+4,1,1);
 43      book(_NchgPMNden1,  8*isqrts+2,1,1);
 44      book(_NchgPMXden1,  8*isqrts+1,1,1);
 45      book(_NchgPden1,    8*isqrts+3,1,1);
 46      book(_PTsumPDFden1, 8*isqrts+8,1,1);
 47      book(_PTsumPMNden1, 8*isqrts+6,1,1);
 48      book(_PTsumPMXden1, 8*isqrts+5,1,1);
 49      book(_PTsumPden1,   8*isqrts+7,1,1);
 50
 51    }
 52
 53
 54    /// Perform the per-event analysis
 55    void analyze(const Event& event) {
 56
 57      // Require at least one track in the event with pT >= 0.5 GeV
 58      const ChargedFinalState& cfs = apply<ChargedFinalState>(event, "Tracks");
 59      if (cfs.empty()) vetoEvent;
 60      const Particles trks = cfs.particlesByPt();
 61
 62      // Get lead track
 63      const Particle p_lead = trks[0];
 64      const double philead = p_lead.phi();
 65      const double ptlead  = p_lead.pT();
 66
 67      // Loop over tracks and compute variables
 68      double NchgP1 = 0, NchgP2 = 0, PTsumP1 = 0, PTsumP2 = 0;
 69      for (const Particle& p : trks) {
 70
 71        // Region definition -- if not in transverse region, ignore
 72        const double dphi = mapAngle0To2Pi(p.phi() - philead);
 73        if (!inRange(dphi, PI/3, 2*PI/3) && !inRange(dphi, 4*PI/3, 5*PI/3)) continue;
 74
 75        // Transverse region 1
 76        if (inRange(dphi, PI/3, 2*PI/3)) {
 77          NchgP1 += 1;
 78          PTsumP1 += p.pT();
 79        }
 80        // Transverse region 2
 81        else if (inRange(dphi, 4*PI/3, 5*PI/3)) {
 82          NchgP2 += 1;
 83          PTsumP2 += p.pT();
 84        }
 85      }
 86
 87      // Calculate total variables
 88      const double NchgPtot = (NchgP1 + NchgP2)/2;
 89      const double NchgPmax = max(NchgP1,NchgP2);
 90      const double NchgPmin = min(NchgP1,NchgP2);
 91      const double PTsumPtot = (PTsumP1 + PTsumP2)/2;
 92      const double PTsumPmax = max(PTsumP1,PTsumP2);
 93      const double PTsumPmin = min(PTsumP1,PTsumP2);
 94      //
 95      const double PTsumPMXden = PTsumPmax/AREA;
 96      const double PTsumPMNden = PTsumPmin/AREA;
 97      const double NchgPMXden = NchgPmax/AREA;
 98      const double NchgPMNden = NchgPmin/AREA;
 99      //
100      const double NchgPDFden = NchgPMXden - NchgPMNden;
101      const double PTsumPDFden = PTsumPMXden - PTsumPMNden;
102
103      // Fill histograms
104      _NchgPden1  ->fill(ptlead/GeV, NchgPtot/AREA);
105      _NchgPMXden1->fill(ptlead/GeV, NchgPmax/AREA);
106      _NchgPMNden1->fill(ptlead/GeV, NchgPmin/AREA);
107      _NchgPDFden1->fill(ptlead/GeV, NchgPDFden );
108      _PTsumPden1  ->fill(ptlead/GeV, PTsumPtot/AREA);
109      _PTsumPMXden1->fill(ptlead/GeV, PTsumPmax/AREA);
110      _PTsumPMNden1->fill(ptlead/GeV, PTsumPmin/AREA);
111      _PTsumPDFden1->fill(ptlead/GeV, PTsumPDFden );
112    }
113
114    /// @}
115
116
117    /// eta-phi area of the transverse region
118    constexpr static double AREA = 2*0.8 * M_PI/3;
119
120    /// Histograms
121    Profile1DPtr _NchgPden1, _NchgPMXden1,_NchgPMNden1,_NchgPDFden1,_PTsumPden1,_PTsumPMXden1,_PTsumPMNden1,_PTsumPDFden1;
122
123  };
124
125
126  RIVET_DECLARE_PLUGIN(CDF_2015_I1388868);
127
128}