Rivet analyses referenceCDF_2010_S8591881_QCDCDF Run 2 underlying event in leading jet eventsExperiment: CDF (Tevatron Run 2) Inspire ID: 849042 Status: VALIDATED Authors:
Beam energies: (980.0, 980.0) GeV Run details:
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}
|