Rivet analyses referenceHERA_2015_I1353667Combined H1/ZEUS $D^*$ production cross-sections in DISExperiment: H1/ZEUS (HERA) Inspire ID: 1353667 Status: UNVALIDATED Authors:
Beam energies: (159.0, 159.0) GeV Run details:
H1 and ZEUS combined differential cross-sections for inclusive $D^{*\pm}$ production in deep-inelastic $ep$ scattering at HERA. The cross-sections are combined in the common visible phase-space region of photon virtuality $Q^2 > 5 \text{GeV}^2$, electron inelasticity $0.02 < y < 0.7$, and the $D^{*\pm}$ meson's transverse momentum $p_T(D^*) > 1.5 \text{GeV}$ and pseudorapidity $|\eta(D^*)| < 1.5$. The combination procedure takes into account all correlations. Double-differential cross sections $d2\sigma/dQ^2 dy$ are combined with earlier $D^{*\pm}$ data, extending the kinematic range down to $Q^2 > 1.5 \text{GeV}^2$. Source code: HERA_2015_I1353667.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/DISKinematics.hh"
5#include "Rivet/Projections/UnstableParticles.hh"
6
7namespace Rivet {
8
9
10 /// @brief Combined H1/ZEUS D* production cross-sections in DIS
11 class HERA_2015_I1353667 : public Analysis {
12 public:
13
14 /// Constructor
15 RIVET_DEFAULT_ANALYSIS_CTOR(HERA_2015_I1353667);
16
17
18 /// @name Analysis methods
19 /// @{
20
21 /// Book histograms and initialise projections before the run
22 void init() {
23
24 // Initialise and register projections
25 // declare(FinalState(Cuts::abseta < 5 && Cuts::pT > 100*MeV), "FS");
26 // FinalState fs;
27 declare(DISKinematics(), "Kinematics");
28 declare(UnstableParticles(), "Dstars");
29 //Cuts::abspid == PID::DSTARPLUS
30
31 // Book histograms
32 book(_h_pTD, 1, 1, 1);
33 book(_h_etaD, 2, 1, 1);
34 book(_h_zD, 3, 1, 1);
35 book(_h_Q2, 4, 1, 1);
36 book(_h_y, 5, 1, 1);
37 book(_h_Q2y, 6, 1, 1);
38 }
39
40
41 /// Perform the per-event analysis
42 void analyze(const Event& event) {
43
44 // Determine kinematics, including event orientation
45 const DISKinematics& kin = apply<DISKinematics>(event, "Kinematics");
46 const int orientation = kin.orientation();
47
48 // Q2 and inelasticity cuts
49 if (!inRange(kin.Q2(), 1.5*GeV2, 1000*GeV2)) vetoEvent;
50 if (!inRange(kin.y(), 0.02, 0.7)) vetoEvent;
51
52
53 // D* reconstruction
54 const Particles unstables = apply<ParticleFinder>(event, "Dstars")
55 .particles(Cuts::pT > 1.5*GeV && Cuts::abseta < 1.5);
56 const Particles dstars = select(unstables, [](const Particle& p){ return p.abspid() == PID::DSTARPLUS; });
57 if (dstars.empty()) vetoEvent;
58 MSG_DEBUG("#D* = " << dstars.size());
59 const Particle& dstar = dstars.front();
60 const double zD = (dstar.E() - orientation*dstar.pz()) / (2*kin.beamLepton().E()*kin.y());
61
62 // Single-differential histograms with higher low-Q2 cut
63 if (kin.Q2() > 5*GeV2) {
64 _h_pTD->fill(dstar.pT()/GeV);
65 _h_etaD->fill(orientation*dstar.eta());
66 _h_zD->fill(zD/GeV);
67 _h_Q2->fill(kin.Q2()/GeV2);
68 _h_y->fill(kin.y());
69 }
70
71 // // Double-differential (y,Q2) histograms
72 // _h_Q2y->fill(kin.Q2()/GeV2, kin.y());
73
74 }
75
76
77 /// Normalise histograms etc., after the run
78 void finalize() {
79 const double sf = crossSection()/nanobarn/sumOfWeights();
80 scale(_h_pTD, sf);
81 scale(_h_etaD, sf);
82 scale(_h_zD, sf);
83 scale(_h_Q2, sf);
84 scale(_h_y, sf);
85 }
86
87 /// @}
88
89
90 /// @name Histograms
91 /// @{
92 Histo1DPtr _h_pTD, _h_etaD, _h_zD, _h_Q2, _h_y;
93 Histo2DPtr _h_Q2y;
94 /// @}
95
96
97 };
98
99
100 RIVET_DECLARE_PLUGIN(HERA_2015_I1353667);
101
102
103}
|