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