rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CDF_2010_S8591881_QCD

CDF Run 2 underlying event in leading jet events
Experiment: CDF (Tevatron Run 2)
Inspire ID: 849042
Status: VALIDATED
Authors:
  • Hendrik Hoeth
References:
  • Phys.Rev.D82:034001,2010
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. Several $p_\perp^\text{min}$ cutoffs are probably required to fill the profile histograms. $p_\perp^\text{min} = {}$ 0 (min bias), 10, 20, 50, 100, 150 GeV. The corresponding merging points are at $p_T = $ 0, 30, 50, 80, 130, 180 GeV

Rick Field's measurement of the underlying event in leading jet events. If the leading jet of the event is within $|\eta| < 2$, the event is accepted and ``toward'', ``away'' and ``transverse'' regions are defined in the same way as in the original (2001) CDF underlying event analysis. The leading jet defines the $\phi$ direction of the toward region. The transverse regions are most sensitive to the underlying event.

Source code: CDF_2010_S8591881_QCD.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/ChargedFinalState.hh"
  5#include "Rivet/Projections/FastJets.hh"
  6
  7namespace Rivet {
  8
  9
 10  /// @brief CDF Run II underlying event in leading jet events
 11  ///
 12  /// @author Hendrik Hoeth
 13  ///
 14  /// Rick Field's measurement of the underlying event in "leading jet" events.
 15  /// The leading jet (CDF midpoint \f$ R = 0.7 \f$) must be within \f$|\eta| < 2 \f$
 16  /// and defines the "toward" phi direction. Particles are selected in
 17  /// \f$ |\eta| < 1 \f$. For the \f$ p_\perp \f$-related observables there
 18  /// is a \f$ p_\perp > 0.5 \f$ GeV cut. For \f$ \sum E_\perp \f$ there is no
 19  /// \f$ p_\perp \f$ cut.
 20  ///
 21  /// @par Run conditions
 22  /// @arg \f$ \sqrt{s} = \f$ 1960 GeV
 23  /// @arg Run with generic QCD events.
 24  /// @arg Set particles with c*tau > 10 mm stable
 25  /// @arg Several \f$ p_\perp^\text{min} \f$ cutoffs are probably required to fill the profile histograms:
 26  /// @arg \f$ p_\perp^\text{min} = \f$ 0 (min bias), 10, 20, 50, 100, 150 GeV
 27  /// @arg The corresponding merging points are at \f$ p_T = \f$ 0, 30, 50, 80, 130, 180 GeV
 28  class CDF_2010_S8591881_QCD : public Analysis {
 29  public:
 30
 31    RIVET_DEFAULT_ANALYSIS_CTOR(CDF_2010_S8591881_QCD);
 32
 33
 34    /// @name Analysis methods
 35    //@{
 36
 37    void init() {
 38      // Final state for the jet finding
 39      const FinalState fsj(Cuts::abseta < 4.0);
 40      declare(fsj, "FSJ");
 41      declare(FastJets(fsj, FastJets::CDFMIDPOINT, 0.7), "MidpointJets");
 42
 43      // Charged final state for the distributions
 44      const ChargedFinalState cfs(Cuts::abseta < 1.0 && Cuts::pT >= 0.5*GeV);
 45      declare(cfs, "CFS");
 46
 47      // Book histograms
 48      book(_hist_tnchg      ,10, 1, 1);
 49      book(_hist_pnchg      ,10, 1, 2);
 50      book(_hist_anchg      ,10, 1, 3);
 51      book(_hist_pmaxnchg   ,11, 1, 1);
 52      book(_hist_pminnchg   ,11, 1, 2);
 53      book(_hist_pdifnchg   ,11, 1, 3);
 54      book(_hist_tcptsum    ,12, 1, 1);
 55      book(_hist_pcptsum    ,12, 1, 2);
 56      book(_hist_acptsum    ,12, 1, 3);
 57      book(_hist_pmaxcptsum ,13, 1, 1);
 58      book(_hist_pmincptsum ,13, 1, 2);
 59      book(_hist_pdifcptsum ,13, 1, 3);
 60      book(_hist_pcptave    ,14, 1, 1);
 61      book(_hist_pcptmax    ,15, 1, 1);
 62    }
 63
 64
 65    // Do the analysis
 66    void analyze(const Event& e) {
 67      /// @todo Implement Run II min bias trigger cf. CDF_2009?
 68
 69      const FinalState& fsj = apply<FinalState>(e, "FSJ");
 70      if (fsj.particles().size() < 1) {
 71        MSG_DEBUG("Failed multiplicity cut");
 72        vetoEvent;
 73      }
 74
 75      const Jets& jets = apply<FastJets>(e, "MidpointJets").jetsByPt();
 76      MSG_DEBUG("Jet multiplicity = " << jets.size());
 77
 78      // We require the leading jet to be within |eta|<2
 79      if (jets.size() < 1 || fabs(jets[0].eta()) >= 2) {
 80        MSG_DEBUG("Failed leading jet cut");
 81        vetoEvent;
 82      }
 83
 84      const double jetphi = jets[0].phi();
 85      const double jeteta = jets[0].eta();
 86      const double jetpT  = jets[0].pT();
 87      MSG_DEBUG("Leading jet: pT = " << jetpT
 88                << ", eta = " << jeteta << ", phi = " << jetphi);
 89
 90      // Get the final states to work with for filling the distributions
 91      const FinalState& cfs = apply<ChargedFinalState>(e, "CFS");
 92
 93      size_t numOverall(0),     numToward(0),          numAway(0)  ;
 94      long int numTrans1(0),     numTrans2(0);
 95      double ptSumToward(0.0), ptSumTrans1(0.0), ptSumTrans2(0.0), ptSumAway(0.0);
 96      double ptMaxOverall(0.0), ptMaxToward(0.0), ptMaxTrans1(0.0), ptMaxTrans2(0.0), ptMaxAway(0.0);
 97
 98      // Calculate all the charged stuff
 99      for (const Particle& p : cfs.particles()) {
100        const double dPhi = deltaPhi(p.phi(), jetphi);
101        const double pT = p.pT();
102        const double phi = p.phi();
103        double rotatedphi = phi - jetphi;
104        while (rotatedphi < 0) rotatedphi += 2*PI;
105
106        ++numOverall;
107        if (pT > ptMaxOverall) {
108          ptMaxOverall = pT;
109        }
110
111        if (dPhi < PI/3.0) {
112          ptSumToward += pT;
113          ++numToward;
114          if (pT > ptMaxToward) ptMaxToward = pT;
115        }
116        else if (dPhi < 2*PI/3.0) {
117          if (rotatedphi <= PI) {
118            ptSumTrans1 += pT;
119            ++numTrans1;
120            if (pT > ptMaxTrans1) ptMaxTrans1 = pT;
121          } else {
122            ptSumTrans2 += pT;
123            ++numTrans2;
124            if (pT > ptMaxTrans2) ptMaxTrans2 = pT;
125          }
126        }
127        else {
128          ptSumAway += pT;
129          ++numAway;
130          if (pT > ptMaxAway) ptMaxAway = pT;
131        }
132      } // end charged particle loop
133
134      // Fill the histograms
135      _hist_tnchg->fill(jetpT/GeV, numToward/(4*PI/3));
136      _hist_pnchg->fill(jetpT/GeV, (numTrans1+numTrans2)/(4*PI/3));
137      _hist_pmaxnchg->fill(jetpT/GeV, (numTrans1>numTrans2 ? numTrans1 : numTrans2)/(2*PI/3));
138      _hist_pminnchg->fill(jetpT/GeV, (numTrans1<numTrans2 ? numTrans1 : numTrans2)/(2*PI/3));
139      _hist_pdifnchg->fill(jetpT/GeV, abs(numTrans1-numTrans2)/(2*PI/3));
140      _hist_anchg->fill(jetpT/GeV, numAway/(4*PI/3));
141
142      _hist_tcptsum->fill(jetpT/GeV, ptSumToward/GeV/(4*PI/3));
143      _hist_pcptsum->fill(jetpT/GeV, (ptSumTrans1+ptSumTrans2)/GeV/(4*PI/3));
144      _hist_pmaxcptsum->fill(jetpT/GeV, (ptSumTrans1>ptSumTrans2 ? ptSumTrans1 : ptSumTrans2)/GeV/(2*PI/3));
145      _hist_pmincptsum->fill(jetpT/GeV, (ptSumTrans1<ptSumTrans2 ? ptSumTrans1 : ptSumTrans2)/GeV/(2*PI/3));
146      _hist_pdifcptsum->fill(jetpT/GeV, fabs(ptSumTrans1-ptSumTrans2)/GeV/(2*PI/3));
147      _hist_acptsum->fill(jetpT/GeV, ptSumAway/GeV/(4*PI/3));
148
149      if ((numTrans1+numTrans2) > 0) {
150        _hist_pcptave->fill(jetpT/GeV, (ptSumTrans1+ptSumTrans2)/GeV/(numTrans1+numTrans2));
151        _hist_pcptmax->fill(jetpT/GeV, (ptMaxTrans1 > ptMaxTrans2 ? ptMaxTrans1 : ptMaxTrans2)/GeV);
152      }
153    }
154
155
156    // void finalize() {    }
157
158    //@}
159
160
161  private:
162
163    Profile1DPtr _hist_tnchg;
164    Profile1DPtr _hist_pnchg;
165    Profile1DPtr _hist_anchg;
166    Profile1DPtr _hist_pmaxnchg;
167    Profile1DPtr _hist_pminnchg;
168    Profile1DPtr _hist_pdifnchg;
169    Profile1DPtr _hist_tcptsum;
170    Profile1DPtr _hist_pcptsum;
171    Profile1DPtr _hist_acptsum;
172    Profile1DPtr _hist_pmaxcptsum;
173    Profile1DPtr _hist_pmincptsum;
174    Profile1DPtr _hist_pdifcptsum;
175    Profile1DPtr _hist_pcptave;
176    Profile1DPtr _hist_pcptmax;
177
178  };
179
180
181
182  RIVET_DECLARE_ALIASED_PLUGIN(CDF_2010_S8591881_QCD, CDF_2010_I849042_QCD);
183
184}