Rivet analyses referenceATLAS_2015_I1393758Jet chargeExperiment: ATLAS (LHC) Inspire ID: 1393758 Status: VALIDATED Authors:
Beam energies: (4000.0, 4000.0) GeV Run details:
The momentum-weighted sum of the charges of tracks associated to a jet is sensitive to the charge of the initiating quark or gluon. This paper presents a measurement of the distribution of momentum-weighted sums, called jet charge, in dijet events using 20.3 fb${}^{-1}$ of data recorded with the ATLAS detector at $\sqrt{s} = 8$ TeV in $pp$ collisions at the LHC. The jet charge distribution is unfolded to remove distortions from detector effects and the resulting particle-level distribution is compared with several models. The $p_\text{T}$ dependence of the jet charge distribution average and standard deviation are compared to predictions obtained with several leading-order and next-to-leading-order parton distribution functions. The data are also compared to different Monte Carlo simulations of QCD dijet production using various settings of the free parameters within these models. The chosen value of the strong coupling constant used to calculate gluon radiation is found to have a significant impact on the predicted jet charge. There is evidence for a $p_\text{T}$ dependence of the jet charge distribution for a given jet flavor. In agreement with perturbative QCD predictions, the data show that the average jet charge of quark-initiated jets decreases in magnitude as the energy of the jet increases. Source code: ATLAS_2015_I1393758.cc 1#include "Rivet/Analysis.hh"
2#include "Rivet/Projections/FinalState.hh"
3#include "Rivet/Projections/FastJets.hh"
4
5namespace Rivet {
6
7 class ATLAS_2015_I1393758 : public Analysis {
8 public:
9
10 /// Constructor
11 RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2015_I1393758);
12
13
14 void init() {
15
16 declare(FastJets(FinalState(), JetAlg::ANTIKT, 0.4), "Jets");
17
18 book(forward_kappa3, 1, 1, 1);
19 book(forwardRMS_kappa3, "d02-x01-y01");
20
21 book(central_kappa3, 3, 1, 1);
22 book(centralRMS_kappa3, "d04-x01-y01");
23
24 book(forward_kappa5, 5, 1, 1);
25 book(forwardRMS_kappa5, "d06-x01-y01");
26
27 book(central_kappa5, 7, 1, 1);
28 book(centralRMS_kappa5, "d08-x01-y01");
29
30 book(forward_kappa7, 9, 1, 1);
31 book(forwardRMS_kappa7, "d10-x01-y01");
32
33 book(central_kappa7, 11, 1, 1);
34 book(centralRMS_kappa7, "d12-x01-y01");
35
36 }
37
38
39 /// Perform the per-event analysis
40 void analyze(const Event& event) {
41 Jets m_goodJets = apply<JetFinder>(event, "Jets").jetsByPt(Cuts::pT > 25*GeV && Cuts::abseta < 2.1);
42
43 if (m_goodJets.size() < 2) vetoEvent;
44 if (m_goodJets[0].pT() < 50*GeV) vetoEvent;
45 if (m_goodJets[1].pT() < 50*GeV) vetoEvent;
46 if (fabs(1.0 - m_goodJets[0].pT()/m_goodJets[1].pT()) > 0.5) vetoEvent;
47
48 bool check = m_goodJets[0].abseta() < m_goodJets[1].abseta();
49 int pos_f = int(check);
50 int pos_c = int(!check);
51
52 double kappa3_f = CalculateJetCharge(m_goodJets[pos_f], 0.3, 0.5, 1.8);
53 double kappa5_f = CalculateJetCharge(m_goodJets[pos_f], 0.5, 0.5, 1.2);
54 double kappa7_f = CalculateJetCharge(m_goodJets[pos_f], 0.7, 0.5, 0.9);
55 double pT_f = m_goodJets[pos_f].pT();
56
57 double kappa3_c = CalculateJetCharge(m_goodJets[pos_c], 0.3, 0.5, 1.8);
58 double kappa5_c = CalculateJetCharge(m_goodJets[pos_c], 0.5, 0.5, 1.2);
59 double kappa7_c = CalculateJetCharge(m_goodJets[pos_c], 0.7, 0.5, 0.9);
60 double pT_c = m_goodJets[pos_c].pT();
61
62 forward_kappa3->fill(pT_f, kappa3_f);
63 forward_kappa5->fill(pT_f, kappa5_f);
64 forward_kappa7->fill(pT_f, kappa7_f);
65
66 central_kappa3->fill(pT_c, kappa3_c);
67 central_kappa5->fill(pT_c, kappa5_c);
68 central_kappa7->fill(pT_c, kappa7_c);
69 }
70
71 double CalculateJetCharge(Jet& jet, double kappa=0.5, double pTcut=0.5, double Qmax=1.2) {
72 double PTkap = pow(jet.momentum().pT(),kappa);
73 double jetcharge = 0.;
74 for (const Particle& p : jet.particles()) {
75 if (p.pT() < pTcut) continue;
76 if (p.charge3()) jetcharge += (p.charge3()/3.)*pow(p.pT(),kappa)/PTkap;
77 }
78 //Overflow and underflow
79 if (jetcharge > Qmax) jetcharge = Qmax*0.9999;
80 if (jetcharge < -Qmax) jetcharge = -Qmax*0.9999;
81 return jetcharge;
82 }
83
84 /// Normalise histograms etc., after the run
85 void finalize() {
86
87 if (numEvents() > 2) {
88 for (unsigned int i = 1; i < forward_kappa3->numBins()+1; ++i) {
89 double stdv_fkappa3 = forward_kappa3->bin(i).effNumEntries() > 1? forward_kappa3->bin(i).yStdDev() : 0.0;
90 //See Eq. 3 for the factor of two: https://web.eecs.umich.edu/~fessler/papers/files/tr/stderr.pdf
91 double yerr_fkappa3 = safediv(sqrt(forward_kappa3->bin(i).sumW2()), 2.*forward_kappa3->bin(i).sumW());
92 forwardRMS_kappa3->bin(i).set(stdv_fkappa3, yerr_fkappa3);
93
94 double stdv_fkappa5 = forward_kappa5->bin(i).effNumEntries() > 1? forward_kappa5->bin(i).yStdDev() : 0.0;
95 double yerr_fkappa5 = safediv(sqrt(forward_kappa5->bin(i).sumW2()), 2.*forward_kappa5->bin(i).sumW());
96 forwardRMS_kappa5->bin(i).set(stdv_fkappa5, yerr_fkappa5);
97
98 double stdv_fkappa7 = forward_kappa7->bin(i).effNumEntries() > 1? forward_kappa7->bin(i).yStdDev() : 0.0;
99 double yerr_fkappa7 = safediv(sqrt(forward_kappa7->bin(i).sumW2()), 2.*forward_kappa7->bin(i).sumW());
100 forwardRMS_kappa7->bin(i).set(stdv_fkappa7, yerr_fkappa7);
101
102 double stdv_ckappa3 = central_kappa3->bin(i).effNumEntries() > 1? central_kappa3->bin(i).yStdDev() : 0.0;
103 double yerr_ckappa3 = safediv(sqrt(central_kappa3->bin(i).sumW2()), 2.*central_kappa3->bin(i).sumW());
104 centralRMS_kappa3->bin(i).set(stdv_ckappa3, yerr_ckappa3);
105
106 double stdv_ckappa5 = central_kappa5->bin(i).effNumEntries() > 1? central_kappa5->bin(i).yStdDev() : 0.0;
107 double yerr_ckappa5 = safediv(sqrt(central_kappa5->bin(i).sumW2()), 2.*central_kappa5->bin(i).sumW());
108 centralRMS_kappa5->bin(i).set(stdv_ckappa5, yerr_ckappa5);
109
110 double stdv_ckappa7 = central_kappa7->bin(i).effNumEntries() > 1? central_kappa7->bin(i).yStdDev() : 0.0;
111 double yerr_ckappa7 = safediv(sqrt(central_kappa7->bin(i).sumW2()), 2.*central_kappa7->bin(i).sumW());
112 centralRMS_kappa7->bin(i).set(stdv_ckappa7, yerr_ckappa7);
113
114 }
115 }
116
117 }
118
119
120 private:
121
122 Profile1DPtr forward_kappa3;
123 Profile1DPtr forward_kappa5;
124 Profile1DPtr forward_kappa7;
125
126 Profile1DPtr central_kappa3;
127 Profile1DPtr central_kappa5;
128 Profile1DPtr central_kappa7;
129
130 Estimate1DPtr forwardRMS_kappa3;
131 Estimate1DPtr forwardRMS_kappa5;
132 Estimate1DPtr forwardRMS_kappa7;
133
134 Estimate1DPtr centralRMS_kappa3;
135 Estimate1DPtr centralRMS_kappa5;
136 Estimate1DPtr centralRMS_kappa7;
137
138 };
139
140
141 RIVET_DECLARE_PLUGIN(ATLAS_2015_I1393758);
142
143}
|