rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

H1_2006_I699835

Measurement of Event Shape Variables in Deep-Inelastic Scattering at HERA
Experiment: H1 (HERA)
Inspire ID: 699835
Status: VALIDATED
Authors:
  • Alejandro Basilio Galvan
  • Hannes Jung
References:
  • Eur.Phys.J.C 46 (2006) 343-356
  • DOI:10.1140/epjc/s2006-02493-x
  • arXiv: hep-ex/0512014v1
Beams: e+ p+
Beam energies: (27.6, 820.0); (27.6, 920.0) GeV
    No run details listed

Deep-inelastic ep scattering data taken with the H1 detector at HERA and corresponding to an integrated luminosity of $106 pb^{-1}$ are used to study the differential distributions of event shape variables. These include thrust, jet broadening, jet mass and the C-parameter. The four-momentum transfer Q is taken to be the relevant energy scale and ranges between 14 GeV and 200 GeV.

Source code: H1_2006_I699835.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/PromptFinalState.hh"
  5#include "Rivet/Projections/DISKinematics.hh"
  6#include "Rivet/Projections/DISFinalState.hh"
  7#include "Rivet/Projections/Thrust.hh"
  8
  9namespace Rivet {
 10
 11
 12  /// @brief Event-shape variables in deep-inelastic scattering at HERA
 13  class H1_2006_I699835 : public Analysis {
 14  public:
 15
 16    /// Constructor
 17    RIVET_DEFAULT_ANALYSIS_CTOR(H1_2006_I699835);
 18
 19
 20    /// @name Analysis methods
 21    ///@{
 22
 23    /// Book histograms and initialise projections before the run
 24    void init() {
 25
 26      // Initialise and register projections
 27
 28      // The basic final-state projection:
 29      // all final-state particles within
 30      // the given eta acceptance
 31      const FinalState fs(Cuts::abseta < 4.9);
 32      declare(fs, "FS");
 33
 34      const DISFinalState DISfs(DISFrame::BREIT);
 35
 36      const FinalState DISfsCut(DISfs, Cuts::eta < 0);
 37
 38      declare(Thrust(DISfsCut), "ThrustCut");
 39
 40      declare(DISKinematics(), "Kinematics");
 41
 42      //Book histograms for different Q ranges:
 43      book(_Nevt_after_cuts, "TMP/Nevt_after_cuts");
 44
 45      const vector<double> QEdges{14., 16., 20., 30., 50., 70., 100., 200.};
 46      book(_h_tauc, QEdges);
 47      book(_h_tau, QEdges);
 48      book(_h_B, QEdges);
 49      book(_h_rho, QEdges);
 50      for (size_t iQ=0; iQ < QEdges.size()-1; ++iQ) {
 51        book(_h_tauc->bin(iQ+1), 1+iQ,1,1);
 52        book(_h_tau->bin(iQ+1),  8+iQ,1,1);
 53        book(_h_B->bin(iQ+1),   15+iQ,1,1);
 54        book(_h_rho->bin(iQ+1), 22+iQ,1,1);
 55        book(_Nevt_after_cuts_Q[iQ], "TMP/Nevt_after_cuts_Q"+ to_string(iQ));
 56      }
 57
 58    }
 59
 60
 61    /// Perform the per-event analysis
 62    void analyze(const Event& event) {
 63
 64      const DISKinematics& dk = apply<DISKinematics>(event, "Kinematics");
 65
 66      // The kinematic region covered by the analysis is defined by ranges of Q² and y
 67      if (dk.Q2() < 196 or dk.Q2() > 40000 or dk.y() < 0.1 or dk.y() > 0.7) {
 68      	vetoEvent;
 69      }
 70
 71      const double Q = sqrt(dk.Q2());
 72      _Nevt_after_cuts->fill();
 73      const size_t iQ = _h_tauc->binAt(Q).index();
 74      if (0 < iQ && iQ < 8)  _Nevt_after_cuts_Q[iQ-1]->fill();
 75
 76
 77      // Boost to hadronic Breit frame
 78      const LorentzTransform breitboost = dk.boostBreit();
 79
 80      const FinalState& fs = apply<FinalState>(event, "FS");
 81
 82      /*Calculate event shape variables:
 83      thrust_num is \sum |pz_h|
 84      thrust_den is \sum |p_h|
 85      b_num is \sum |pt_h|
 86      sumE is the sum of energies
 87      (All sums run through the particles in the current hemisphere)
 88      */
 89      double thrust_num, thrust_den, b_num, sumE;
 90      thrust_num = thrust_den = b_num = sumE = 0;
 91      Vector3 sumMom;
 92
 93      for (const Particle& p : fs.particles()) {
 94      	// Boost to Breit frame
 95        const FourMomentum breitMom = breitboost.transform(p.momentum());
 96      	if (breitMom.eta() < 0) {
 97          thrust_num += abs(breitMom.pz());
 98          thrust_den += breitMom.p();
 99          b_num += abs(breitMom.pt());
100          sumMom.operator+=(breitMom.p3());
101          sumE += breitMom.E();
102      	}
103      }
104
105      //The energy in the current hemisphere must exceed a certain value.
106      if (sumE <= Q/10.0)  vetoEvent;
107
108      /* Comment from A. Galvan:
109      Thrust here is with respect to the z axis (tau in the paper), while the
110      one from Rivet projection is with respect to the maximum thrust
111      axis (1 - tau_c in the paper)
112      */
113
114      double thrust_mine = 1.0 - ((double)thrust_num)/((double)thrust_den);
115      double b_mine = ((double)b_num)/(2.0*(double)thrust_den);
116      double rho_num = thrust_den*thrust_den - sumMom.dot(sumMom);
117      double rho_mine = ((double)rho_num)/(4.0*(double)thrust_den*(double)thrust_den);
118
119      const Thrust& thrCut = apply<Thrust>(event, "ThrustCut");
120
121      //Fill histograms:
122      _h_tauc->fill(Q, 1.0 - thrCut.thrust());
123      _h_tau->fill(Q, thrust_mine);
124      _h_B->fill(Q, b_mine);
125      _h_rho->fill(Q, rho_mine);
126
127      /* Comment from A. Galvan:
128       As for the C-parameter, my results did not fit the reference data at
129       all. The formula given in the paper is a bit ambiguous, because there is
130       a sum that runs through all pairs of particles h,h' and I was not sure
131       whether each pair should be counted twice (h,h' and h',h) or not, or if
132       the pair of a particle with itself (hh) should be considered.
133       That is why I tried all of the possibilities, but none of them worked.
134      */
135    }
136
137
138    /// Normalise histograms etc., after the run
139    void finalize() {
140
141      for (size_t iQ=0; iQ < _h_tauc->numBins(); ++iQ) {
142        const double Nev = dbl(*_Nevt_after_cuts_Q[iQ]);
143        if (Nev != 0) {
144          scale(_h_tauc->bin(iQ+1), 1./Nev);
145          scale(_h_tau->bin(iQ+1), 1./Nev);
146          scale(_h_B->bin(iQ+1), 1./Nev);
147          scale(_h_rho->bin(iQ+1), 1./Nev);
148        }
149      }
150    }
151
152    ///@}
153
154
155    /// @name Histograms
156    ///@{
157    Histo1DGroupPtr _h_tauc, _h_tau, _h_B, _h_rho;
158    CounterPtr _Nevt_after_cuts;
159    CounterPtr _Nevt_after_cuts_Q[7];
160    ///@}
161
162  };
163
164
165  RIVET_DECLARE_PLUGIN(H1_2006_I699835);
166
167}