rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2012_I1124167

Measurement of charged-particle event shape variables
Experiment: ATLAS (LHC)
Inspire ID: 1124167
Status: VALIDATED
Authors:
  • Deepak Kar
References:
  • arXiv: 1207.6915
  • Phys.Rev. D88 (2013) 032004
  • 10.1103/PhysRevD.88.032004
Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • Minimum bias events with at least 6 charged particles at 7 TeV

The measurement of charged-particle event shape variables is presented in inclusive inelastic $pp$ collisions at a center-of-mass energy of 7 TeV using the ATLAS detector at the LHC. The observables studied are the transverse thrust, thrust minor, and transverse sphericity, each defined using the final-state charged particles momentum components perpendicular to the beam direction. Events with at least six charged particles are selected by a minimum-bias trigger. In addition to the differential distributions, the evolution of each event shape variable as a function of the leading charged-particle transverse momentum, charged-particle multiplicity, and summed transverse momentum is presented.

Source code: ATLAS_2012_I1124167.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/ChargedFinalState.hh"
  4#include "Rivet/Projections/FinalState.hh"
  5#include "Rivet/Projections/Thrust.hh"
  6#include "Rivet/Projections/Sphericity.hh"
  7
  8namespace Rivet {
  9
 10
 11  /// Rivet analysis class for ATLAS min bias event shapes
 12  class ATLAS_2012_I1124167 : public Analysis {
 13  public:
 14
 15    /// Constructor
 16    ATLAS_2012_I1124167()
 17      : Analysis("ATLAS_2012_I1124167") {  }
 18
 19
 20    /// Initialization, called once before running
 21    void init() {
 22      // Projections
 23      ChargedFinalState cfs(Cuts::abseta < 2.5 && Cuts::pT > 0.5*GeV);
 24      declare(cfs, "CFS");
 25
 26      // Book histograms
 27      book(_hist_T_05_25 ,1,1,1);
 28      book(_hist_T_05    ,2,1,1);
 29      book(_hist_T_25_50 ,1,1,2);
 30      book(_hist_T_25    ,2,1,2);
 31      book(_hist_T_50_75 ,1,1,3);
 32      book(_hist_T_50    ,2,1,3);
 33      book(_hist_T_75_100,1,1,4);
 34      book(_hist_T_75    ,2,1,4);
 35      book(_hist_T_100   ,2,1,5);
 36
 37      book(_hist_TM_05_25 ,3,1,1);
 38      book(_hist_TM_05    ,4,1,1);
 39      book(_hist_TM_25_50 ,3,1,2);
 40      book(_hist_TM_25    ,4,1,2);
 41      book(_hist_TM_50_75 ,3,1,3);
 42      book(_hist_TM_50    ,4,1,3);
 43      book(_hist_TM_75_100,3,1,4);
 44      book(_hist_TM_75    ,4,1,4);
 45      book(_hist_TM_100   ,4,1,5);
 46
 47      book(_hist_S_05_25 ,5,1,1);
 48      book(_hist_S_05    ,6,1,1);
 49      book(_hist_S_25_50 ,5,1,2);
 50      book(_hist_S_25    ,6,1,2);
 51      book(_hist_S_50_75 ,5,1,3);
 52      book(_hist_S_50    ,6,1,3);
 53      book(_hist_S_75_100,5,1,4);
 54      book(_hist_S_75    ,6,1,4);
 55      book(_hist_S_100   ,6,1,5);
 56
 57
 58      book(_hist_T_N  ,7,1,1);
 59      book(_hist_TM_N ,7,1,2);
 60      book(_hist_S_N  ,7,1,3);
 61
 62      book(_hist_T_S  ,8,1,1);
 63      book(_hist_TM_S ,8,1,2);
 64      book(_hist_S_S  ,8,1,3);
 65    }
 66
 67
 68    void analyze(const Event& event) {
 69      const double weight = 1.0;
 70
 71      // CFS projection and particles
 72      const Particles& particles500 = apply<ChargedFinalState>(event, "CFS").particlesByPt();
 73
 74      // Require at least 6 charged particles
 75      if (particles500.size() < 6) vetoEvent;
 76
 77      // Preparation for Thrust calculation
 78      vector<Vector3> momenta;
 79
 80      // Counters
 81      double num500 = 0;
 82      double ptSum500 = 0;
 83
 84      double pTlead = particles500[0].pT()/GeV;
 85
 86      // Loop over particles
 87      for (const Particle& p : particles500) {
 88        num500 += 1;
 89        ptSum500 += p.pT()/GeV;
 90
 91        // Transverse Thrust calculation requires p_z to be set to 0
 92        Vector3 mom = p.p3();
 93        mom.setZ(0.0);
 94        momenta.push_back(mom);
 95      }
 96
 97      // If only 2 particles, we need to use a ghost so that Thrust.calc() doesn't return 1.
 98      if (momenta.size() == 2) {
 99        momenta.push_back(Vector3(1e-10*MeV, 0., 0.));
100      }
101
102      // Actual thrust calculation
103      Thrust thrust;
104      thrust.calc(momenta);
105
106      const double T  = 1.0 - thrust.thrust();
107      const double TM = thrust.thrustMajor();
108
109      Sphericity sphericity;
110      sphericity.calc(momenta);
111
112      double S = sphericity.transSphericity();
113      if ( std::isnan(S) )  S = -1.0; // put this in the underflow bin
114
115      // Fill histos, most inclusive first
116
117      // pTlead > 0.5
118      _hist_T_05->fill(T , weight);
119      _hist_TM_05->fill(TM, weight);
120      _hist_S_05->fill(S , weight);
121
122      // pTlead 0.5 - 2.5
123      if (pTlead <= 2.5) {
124        _hist_T_05_25->fill(T , weight);
125        _hist_TM_05_25->fill(TM, weight);
126        _hist_S_05_25->fill(S , weight);
127      }
128
129      // pTlead > 2.5
130      if (pTlead > 2.5) {
131        _hist_T_25->fill(T , weight);
132        _hist_TM_25->fill(TM, weight);
133        _hist_S_25->fill(S , weight);
134      }
135
136      // pTlead 2.5 - .5
137      if (inRange(pTlead, 2.5, 5.0)) {
138        _hist_T_25_50->fill(T , weight);
139        _hist_TM_25_50->fill(TM, weight);
140        _hist_S_25_50->fill(S , weight);
141      }
142
143      // pTlead > 5
144      if (pTlead > 5) {
145        _hist_T_50->fill(T , weight);
146        _hist_TM_50->fill(TM, weight);
147        _hist_S_50->fill(S , weight);
148      }
149
150      // pTlead 5 - 7.5
151      if (inRange(pTlead, 5.0, 7.5)) {
152        _hist_T_50_75->fill(T , weight);
153        _hist_TM_50_75->fill(TM, weight);
154        _hist_S_50_75->fill(S , weight);
155      }
156
157      // pTlead > 7.5
158      if (pTlead > 7.5) {
159        _hist_T_75->fill(T , weight);
160        _hist_TM_75->fill(TM, weight);
161        _hist_S_75->fill(S , weight);
162      }
163
164      // pTlead 7.5 - 10
165      if (inRange(pTlead, 7.5, 10)) {
166        _hist_T_75_100->fill(T , weight);
167        _hist_TM_75_100->fill(TM, weight);
168        _hist_S_75_100->fill(S , weight);
169      }
170
171      // pTlead > 10
172      if (pTlead > 10) {
173        _hist_T_100->fill(T , weight);
174        _hist_TM_100->fill(TM, weight);
175        _hist_S_100->fill(S , weight);
176      }
177
178
179      // Profiles Nch vs. ES
180      _hist_T_N->fill(num500, T, weight);
181      _hist_TM_N->fill(num500, TM, weight);
182      _hist_S_N->fill(num500, S, weight);
183
184      // Profiles pTsum vs. ES
185      _hist_T_S->fill(ptSum500, T, weight);
186      _hist_TM_S->fill(ptSum500, TM, weight);
187      _hist_S_S->fill(ptSum500, S, weight);
188    }
189
190
191    void finalize() {
192      normalize(_hist_T_05_25);
193      normalize(_hist_T_05);
194      normalize(_hist_T_25_50);
195      normalize(_hist_T_25);
196      normalize(_hist_T_50_75);
197      normalize(_hist_T_50);
198      normalize(_hist_T_75_100);
199      normalize(_hist_T_75);
200      normalize(_hist_T_100);
201
202      normalize(_hist_TM_05_25);
203      normalize(_hist_TM_05);
204      normalize(_hist_TM_25_50);
205      normalize(_hist_TM_25);
206      normalize(_hist_TM_50_75);
207      normalize(_hist_TM_50);
208      normalize(_hist_TM_75_100);
209      normalize(_hist_TM_75);
210      normalize(_hist_TM_100);
211
212      normalize(_hist_S_05_25);
213      normalize(_hist_S_05);
214      normalize(_hist_S_25_50);
215      normalize(_hist_S_25);
216      normalize(_hist_S_50_75);
217      normalize(_hist_S_50);
218      normalize(_hist_S_75_100);
219      normalize(_hist_S_75);
220      normalize(_hist_S_100);
221    }
222
223
224  private:
225
226    Histo1DPtr _hist_T_05_25, _hist_T_05, _hist_T_25_50, _hist_T_25, _hist_T_50_75, _hist_T_50, _hist_T_75_100, _hist_T_75, _hist_T_100;
227    Histo1DPtr _hist_TM_05_25, _hist_TM_05, _hist_TM_25_50, _hist_TM_25, _hist_TM_50_75, _hist_TM_50, _hist_TM_75_100, _hist_TM_75, _hist_TM_100;
228    Histo1DPtr _hist_S_05_25, _hist_S_05, _hist_S_25_50, _hist_S_25, _hist_S_50_75, _hist_S_50, _hist_S_75_100, _hist_S_75, _hist_S_100;
229    Profile1DPtr _hist_T_N, _hist_TM_N, _hist_S_N;
230    Profile1DPtr _hist_T_S, _hist_TM_S, _hist_S_S;
231
232  };
233
234
235  // The hook for the plugin system
236  RIVET_DECLARE_PLUGIN(ATLAS_2012_I1124167);
237
238}