Rivet analyses
Measurement of sigma_red (F2) of H1 and ZEUS at different beam energies
Experiment: H1 (HERA)
Inspire ID: 1377206
Status: VALIDATED
Authors: - Hannes Jung - Tymoteusz Strozniak
References: - Eur.Phys.J. C75 (2015), 580, - arXiv: 1506.06042
Beams: e+ p+, p+ e+, e- p+, p+ e-
Beam energies: (27.5, 920.0); (920.0, 27.5); (27.5, 820.0); (820.0, 27.5); (27.5, 575.0); (575.0, 27.5); (27.5, 460.0); (460.0, 27.5)GeV
Run details: - Cover full range in Bjorken-y
A combination is presented of all inclusive deep inelastic cross sections previously published by the H1 and ZEUS collaborations at HERA for neutral and charged current ep scattering for zero beam polarisation. The data were taken at proton beam energies of 920, 820, 575 and 460 GeV and an electron beam energy of 27.5GeV. The data correspond to an integrated luminosity of about 1 fb^-1 and span six orders of magnitude in negative four-momentum-transfer squared, Q2, and Bjorken x . The correlations of the systematic uncertainties were evaluated and taken into account for the combination. The combined cross sections were input to QCD analyses at leading order, next-to-leading order and at next-to-next-to-leading order, providing a new set of parton distribution functions, called HERAPDF2.0.
Source
code:HERA_2015_I1377206.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/DISKinematics.hh"
#include "Rivet/Projections/Beam.hh"
namespace Rivet {
/// @brief Measurement of sigma_red (F2) of H1 and ZEUS at different beam energies
class HERA_2015_I1377206 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(HERA_2015_I1377206);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// Initialise and register projections
declare(FinalState(Cuts::abseta < 5 && Cuts::pT > 100*MeV), "FS");
declare(DISLepton(), "Lepton");
declare(DISKinematics(), "Kinematics");
string beamOpt = getOption<string>("BEAM","NONE");
if (beamOpt == "NONE") {
const ParticlePair& beam = beams();
_positron = (beam.first.pid() == PID::POSITRON || beam.second.pid() == PID::POSITRON);
}
else {
if (beamOpt == "EMINUS") _positron = false;
else if (beamOpt == "EPLUS") _positron = true;
else {
throw BeamError("Beam species not supported\n");
}
}
// Book beams-dependent histograms
const double eps = 1e-2;
for (bool isPos : { true, false }) {
for (double eVal : allowedEnergies()) {
const string en = toString(round(eVal)) + toString(isPos);
if (isCompatibleWithSqrtS(eVal, eps) && isPos == _positron) _sqs = en;
if (fuzzyEquals(eVal, 318.1, eps) && isPos) {
// NC e+ p at sqrts=318
const vector<double> Q2edges = {
0.1, 0.15, 0.2, 0.3, 0.4, 0.45, 0.6, 0.7, 1.0, 1.1, 1.3, 1.7, 2.3,
3.1, 3.8, 5.3, 8.0, 9.1, 11., 13., 17.4, 19.1, 25.8, 28., 30., 42.,
49., 54., 65., 75., 108., 134., 180., 225., 280., 325., 355., 455., 460.,
545., 560., 765., 770., 835., 900., 1120., 1295., 1300., 1755., 1800.,
2270., 2500., 3685., 4000., 6520., 7000., 9275., 10000., 15000., 17000.,
24770., 25000., 42000.
};
book(_g[en+"sigred"], Q2edges);
_g[en+"sigred"]->maskBins({9, 24, 27, 36, 38, 40, 42, 44, 47, 49, 51, 53, 55, 57, 59, 61});
size_t idx = 0;
for (auto& b : _g[en+"sigred"]->bins()) {
book(b, 1, 1, ++idx);
}
// CC e+ p at sqrts=318
book(_g[en+"sigred_cc"], {280., 325., 460., 545., 900., 1120., 1300., 1755., 1800., 2270.,
2500., 3685., 4000., 6520., 7000., 9275., 10000., 20000., 42000.});
_g[en+"sigred_cc"]->maskBins({2, 4, 6, 8, 10, 12, 14, 16});
idx = 0;
for (auto& b : _g[en+"sigred_cc"]->bins()) {
book(b, 6, 1, ++idx);
}
}
else if (fuzzyEquals(eVal, 300.3, eps) && isPos) {
// NC e+ p at sqrts=300
const vector<double> Q2edges = {
0.01, 0.05, 0.07, 0.09, 0.12, 0.18, 0.22, 0.32, 0.4, 0.45, 0.6, 0.7, 1.0, 1.1, 1.3,
1.7, 2.3, 3.1, 3.8, 5.3, 8., 9.1, 11., 13., 17.4, 19.1, 25.8, 28., 30., 42., 49.,
54., 65., 75., 108., 134., 180., 225., 280., 325., 355., 455., 460., 545., 560.,
765., 770., 835., 900., 1120., 1295., 1300., 1755., 1800., 2270., 2500., 3685.,
4000., 6520., 7000., 9275., 10000., 15000., 17000., 24770., 25000., 42000.
};
book(_g[en+"sigred"], Q2edges);
_g[en+"sigred"]->maskBins({13, 28, 31, 40, 42, 44, 46, 48, 51, 53, 55, 57, 59, 61, 63, 65});
size_t idx = 0;
for (auto& b : _g[en+"sigred"]->bins()) {
book(b, 2, 1, ++idx);
}
}
else if (fuzzyEquals(eVal, 251.5, eps) && isPos) {
// NC e+ p at sqrts=251
const vector<double> Q2edges = {
1., 1.7, 2.3, 3.1, 3.8, 5.3, 8., 9.1, 11., 13., 17.4, 22.1, 28.,
30., 42., 49., 54., 65., 75., 108., 134., 180., 225., 280., 325.,
355., 455., 460., 545., 560., 765., 770., 835.
};
book(_g[en+"sigred"], Q2edges);
_g[en+"sigred"]->maskBins({8, 13, 16, 18, 25, 27, 29, 31});
size_t idx = 0;
for (auto& b : _g[en+"sigred"]->bins()) {
book(b, 3, 1, ++idx);
}
}
else if (fuzzyEquals(eVal, 224.9, eps) && isPos) {
// NC e+ p at sqrts=225
const vector<double> Q2edges = {
1., 1.7, 2.3, 3.1, 3.8, 5.3, 8., 9.1, 11., 13., 17.4, 22.1, 28.,
30., 42., 49., 54., 65., 75., 108., 134., 180., 225., 280., 325.,
355., 455., 460., 545., 560., 765., 770., 835.
};
book(_g[en+"sigred"], Q2edges);
_g[en+"sigred"]->maskBins({8, 13, 16, 18, 25, 27, 29, 31});
size_t idx = 0;
for (auto& b : _g[en+"sigred"]->bins()) {
book(b, 4, 1, ++idx);
}
}
else if (fuzzyEquals(eVal, 318.1, eps) && !isPos) {
// NC e- p at sqrts=318
const vector<double> Q2edges = {
54., 65., 75., 108., 134., 180., 225., 280., 325., 355., 455.,
460., 545., 560., 765., 770., 835., 900., 1120., 1295., 1300.,
1755., 1800., 2270., 2500., 3685., 4000., 6520., 7000., 9275.,
10000., 15000., 17000., 24770., 25000., 42000., 70000.
};
book(_g[en+"sigred"], Q2edges);
_g[en+"sigred"]->maskBins({2, 9, 11, 13, 15, 17, 20, 22, 24, 26, 28, 30, 32, 34});
size_t idx = 0;
for (auto& b : _g[en+"sigred"]->bins()) {
book(b, 5, 1, ++idx);
}
// CC e- p at sqrts=318
book(_g[en+"sigred_cc"], {280., 325., 460., 545., 900., 1120., 1300., 1755., 1800., 2270.,
2500., 3685., 4000., 6520., 7000., 9275., 10000., 20000., 42000.});
_g[en+"sigred_cc"]->maskBins({2, 4, 6, 8, 10, 12, 14, 16});
idx = 0;
for (auto& b : _g[en+"sigred_cc"]->bins()) {
book(b, 7, 1, ++idx);
}
} // end of if isCompatible
} // end of for energy
} // end of for beam type
raiseBeamErrorIf(_sqs.empty());
} // end of init
void analyze(const Event& event) {
/// @todo Do the event by event analysis here
const DISKinematics& dk = apply<DISKinematics>(event, "Kinematics");
const DISLepton& dl = apply<DISLepton>(event,"Lepton");
// Get the DIS kinematics
double x = dk.x();
double y = dk.y();
double Q2 = dk.Q2()/GeV;
// Flux factor
const double alpha = 7.29927e-3;
// GF = 1.16638e-5 Fermi constant
const double GF2 = 1.16638e-5*1.16638e-5;
// MW = 80.385 W-boson mass
const double MW2 = 80.385 * 80.385;
if (PID::isNeutrino(dl.out().abspid()) ) {
// fill histo for CC
double F = 2.0*M_PI*x/GF2 * sqr((MW2 + Q2)/MW2);
_g[_sqs+"sigred_cc"]->fill(Q2,x,F); // fill histogram x,Q2
}
else {
// fill histo for NC
double F = x*sqr(Q2)/(2.0*M_PI*sqr(alpha)*(1.0+sqr(1-y)));
_g[_sqs+"sigred"]->fill(Q2,x,F); // fill histogram x,Q2
}
}
/// Normalise histograms etc., after the run
void finalize() {
const double gev2nb = 0.389e6;
const double scalefactor=crossSection()/nanobarn/sumOfWeights()/gev2nb ;
// with _h_sigred.scale also q2 bin width is scaled
scale(_g, scalefactor);
divByGroupWidth(_g);
}
/// @}
/// @name Histograms
/// @{
map<string,Histo1DGroupPtr> _g;
string _sqs = "";
bool _positron;
/// @}
};
RIVET_DECLARE_PLUGIN(HERA_2015_I1377206);
}