Rivet analyses
Transverse energy and forward jet production in the low-x regime at H1
Experiment: H1 (HERA Run I)
Inspire ID: 396365
Status: UNVALIDATED
Authors: - Leif Lonnblad
References: - Phys.Lett.B356:118,1995 - hep-ex/9506012
Beams: p+ e-
Beam energies: (820.0, 26.7)GeV
Run details: - 820~GeV protons colliding with 26.7~GeV electrons. DIS events with an outgoing electron energy > 12 GeV. 5 GeV2 < Q2 < 100 GeV2, 10−4 < x < 10−2.
DIS events at low x may be sensitive to new QCD dynamics such as BFKL or CCFM radiation. In particular, BFKL is expected to produce more radiation at high transverse energy in the rapidity span between the proton remnant and the struck quark jet. Performing a transverse energy sum in bins of x and η may distinguish between DGLAP and BFKL evolution.
Source
code:H1_1995_I396365.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/DISFinalState.hh"
#include "Rivet/Projections/CentralEtHCM.hh"
namespace Rivet {
/// H1 energy flow in DIS
///
/// @todo Make histograms match those in HepData and use autobooking
///
/// @author Leif Lonnblad
/// @author Andy Buckley
class H1_1995_I396365 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(H1_1995_I396365);
/// @name Analysis methods
/// @{
void init() {
// Projections
declare(DISKinematics(), "Kinematics");
const DISFinalState& fshcm = declare(DISFinalState(DISFrame::HCM), "FS");
declare(CentralEtHCM(fshcm), "Y1HCM");
// Histograms
/// @todo Convert to use autobooking and correspond to HepData data tables
_hEtFlow.resize(9);
for (size_t i = 0; i < 9; ++i) {
book(_sumw[i], "sumW_" + to_str(i));
book(_hEtFlow[i] ,to_str(i), 24, -6, 6);
}
book(_tmphAvEt, "TMP/hAvEt", 9, 1.0, 10.0);
book(_tmphAvX , "TMP/hAvX", 9, 1.0, 10.0);
book(_tmphAvQ2, "TMP/hAvQ2", 9, 1.0, 10.0);
book(_tmphN , "TMP/hN", 9, 1.0, 10.0);
}
/// Calculate the bin number from the DISKinematics projection
/// @todo Convert to use a HEPUtils Binning1D
size_t _getbin(const DISKinematics& dk) {
if (inRange(dk.Q2()/GeV2, 5.0, 10.0)) {
if (inRange(dk.x(), 1e-4, 2e-4)) return 0;
if (inRange(dk.x(), 2e-4, 5e-4) && dk.Q2() > 6.0*GeV2) return 1;
} else if (inRange(dk.Q2()/GeV2, 10.0, 20.0)) {
if (inRange(dk.x(), 2e-4, 5e-4)) return 2;
if (inRange(dk.x(), 5e-4, 8e-4)) return 3;
if (inRange(dk.x(), 8e-4, 1.5e-3)) return 4;
if (inRange(dk.x(), 1.5e-3, 4e-3)) return 5;
} else if (inRange(dk.Q2()/GeV2, 20.0, 50.0)) {
if (inRange(dk.x(), 5e-4, 1.4e-3)) return 6;
if (inRange(dk.x(), 1.4e-3, 3e-3)) return 7;
if (inRange(dk.x(), 3e-3, 1e-2)) return 8;
}
return -1;
}
void analyze(const Event& event) {
const FinalState& fs = apply<FinalState>(event, "FS");
const DISKinematics& dk = apply<DISKinematics>(event, "Kinematics");
if ( dk.failed() ) vetoEvent;
const CentralEtHCM& y1 = apply<CentralEtHCM>(event, "Y1HCM");
if ( y1.failed() ) vetoEvent;
const int ibin = _getbin(dk);
if (ibin < 0) vetoEvent;
_sumw[ibin]->fill();
for (size_t i = 0, N = fs.particles().size(); i < N; ++i) {
const double rap = fs.particles()[i].rapidity();
const double et = fs.particles()[i].Et();
_hEtFlow[ibin]->fill(rap, et/GeV);
}
_tmphAvEt->fill(ibin + 1.5, y1.sumEt()/GeV);
_tmphAvX->fill(ibin + 1.5, dk.x());
_tmphAvQ2->fill(ibin + 1.5, dk.Q2()/GeV2);
_tmphN->fill(ibin + 1.5);
}
void finalize() {
for (size_t ibin = 0; ibin < 9; ++ibin)
scale(_hEtFlow[ibin], 0.5/ *_sumw[ibin]);
/// @todo Improve this!
Estimate1DPtr s21,s22,s23;
book(s21, "21");
divide(_tmphAvEt,_tmphN,s21);
book(s22, "22");
divide(_tmphAvX,_tmphN,s22);
book(s23, "23");
divide(_tmphAvQ2,_tmphN,s23);
}
/// @}
private:
/// Histograms for the \f$ E_T \f$ flow
vector<Histo1DPtr> _hEtFlow;
/// Temporary histograms for averages in different kinematical bins.
Histo1DPtr _tmphAvEt, _tmphAvX, _tmphAvQ2, _tmphN;
/// Weights counters for each kinematic bin
array<CounterPtr, 9> _sumw;
};
RIVET_DECLARE_ALIASED_PLUGIN(H1_1995_I396365, H1_1995_S3167097);
}Aliases: - H1_1995_S3167097