Rivet analyses referenceZEUS_2011_I945935Scaled momentum distributions for $K^0_S$ and $\Lambda/\bar{\Lambda}$ in DIS at HERAExperiment: ZEUS (HERA) Inspire ID: 945935 Status: VALIDATED Authors:
Beam energies: (920.0, 27.5); (920.0, 27.5) GeV Run details:
Scaled momentum distributions for the strange hadrons K0s and Lambda/bar Lambda were measured in deep inelastic ep scattering with the ZEUS detector at HERA using an integrated luminosity of $330 pb^{-1}$. The evolution of these distributions with the photon virtuality, $Q^2$, was studied in the kinematic region $10<Q^2<40000 GeV^2$ and $0.001<x<0.75$, where $x$ is the Bjorken scaling variable. Clear scaling violations are observed. Predictions based on different approaches to fragmentation were compared to the measurements. Leading-logarithm parton-shower Monte Carlo calculations interfaced to the Lund string fragmentation model describe the data reasonably well in the whole range measured. Next-to-leading-order QCD calculations based on fragmentation functions, FFs, extracted from $e^+e^-$ data alone, fail to describe the measurements. The calculations based on FFs extracted from a global analysis including $e^+e^-$, $ep$ and $pp$ data give an improved description. The measurements presented in this paper have the potential to further constrain the FFs of quarks, anti-quarks and gluons yielding $K^0_{S}$ and $\Lambda/\bar{ \Lambda}$ strange hadrons. Source code: ZEUS_2011_I945935.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/UnstableParticles.hh"
5#include "Rivet/Projections/DISKinematics.hh"
6#include "Rivet/Projections/DISFinalState.hh"
7
8namespace Rivet {
9
10
11 /// @brief Scaled momenta of identified particles
12 class ZEUS_2011_I945935 : public Analysis {
13 public:
14
15 /// Constructor
16 RIVET_DEFAULT_ANALYSIS_CTOR(ZEUS_2011_I945935);
17
18
19 /// @name Analysis methods
20 /// @{
21
22 /// Book histograms and initialise projections before the run
23 void init() {
24
25 const UnstableParticles& labcut = UnstableParticles();
26 declare(labcut, "UFS");
27 const DISKinematics& diskin = DISKinematics();
28 declare(diskin, "Kinematics");
29 const DISFinalState& disfsbf = DISFinalState(labcut, DISFrame::BREIT);
30 declare(disfsbf, "FSBF");
31
32 for (size_t offset = 0; offset < 5; offset++) {
33 book(_h_K0S[offset], 2, 1, offset+1);
34 book(_h_LAMBDA[offset], 5, 1, offset+1);
35 }
36
37 book(_h_K0S[5], 3, 1, 1);
38 book(_h_K0S[6], 3, 1, 2);
39 book(_h_LAMBDA[5], 6, 1, 1);
40 book(_h_LAMBDA[6], 6, 1, 2);
41 book(_h_Q2_tmp, "_TMP/N", 7, 0, 7);
42 }
43
44 int getbinQ2v1(const DISKinematics& dk) {
45 if (inRange(dk.Q2()/GeV2, 10.0, 40.0) && inRange(dk.x(), 0.001, 0.75) ) return 1;
46 if (inRange(dk.Q2()/GeV2, 40.0, 160.0) && inRange(dk.x(), 0.001, 0.75) ) return 2;
47 if (inRange(dk.Q2()/GeV2, 160.0, 640.0) && inRange(dk.x(), 0.001, 0.75)) return 3;
48 if (inRange(dk.Q2()/GeV2, 640.0, 2560.0) && inRange(dk.x(), 0.001, 0.75)) return 4;
49 if (inRange(dk.Q2()/GeV2, 2650.0, 10240.0) && inRange(dk.x(), 0.001, 0.75)) return 5;
50 return -1;
51 }
52 int getbinQ2v2(const DISKinematics& dk) {
53 if (inRange(dk.Q2()/GeV2, 10.0, 100.0) && inRange(dk.x(), 0.001, 0.75) ) return 1;
54 if (inRange(dk.Q2()/GeV2, 100.0, 1000.0) && inRange(dk.x(), 0.001, 0.75) ) return 2;
55 return -1;
56 }
57
58 /// Perform the per-event analysis
59 void analyze(const Event& event) {
60 /// DIS kinematics
61 const DISKinematics& dk = apply<DISKinematics>(event, "Kinematics");
62 const double q2 = dk.Q2();
63 const double x = dk.x();
64 const double y = dk.y();
65
66 if (!inRange(q2/GeV2, 10.0, 40000.0)) vetoEvent;
67 if (!inRange(y, 0.04, 0.95)) vetoEvent;
68 if (!inRange(x, 0.001, 0.75)) vetoEvent;
69 const int ofv1 = getbinQ2v1(dk) - 1;
70 const int ofv2 = getbinQ2v2(dk) - 1;
71 if ( ofv1 < 0 ) vetoEvent;
72
73 /// @todo Do the event by event analysis here
74 _h_Q2_tmp->fill(ofv1);
75 if (ofv2 >= 0) _h_Q2_tmp->fill(5+ofv2);
76 const DISFinalState& disfsbf = apply<DISFinalState>(event, "FSBF");
77
78 for (const Particle& p: select(disfsbf.particles(), Cuts::abspid == abs(PID::K0S))) {
79 //// Scaled energy.
80 if (p.pz() > 0) continue;
81 const double energy = p.momentum().vector3().mod();
82 const double scaledEnergy = 2.0*energy/sqrt(q2);
83 _h_K0S[ofv1]->fill(scaledEnergy);
84 if (ofv2 >= 0) _h_K0S[5+ofv2]->fill(scaledEnergy);
85 }
86
87 for (const Particle& p: select(disfsbf.particles(), Cuts::abspid == abs(PID::LAMBDA))) {
88 //// Scaled energy.
89 if (p.pz() > 0) continue;
90 const double energy = p.momentum().vector3().mod();
91 const double scaledEnergy = 2.0*energy/sqrt(q2);
92 _h_LAMBDA[ofv1]->fill(scaledEnergy);
93 if (ofv2 >= 0) _h_LAMBDA[5+ofv2]->fill(scaledEnergy);
94 }
95 }
96
97 /// Normalise histograms etc., after the run
98 void finalize() {
99 for (size_t offset = 0; offset < 7; offset++) {
100 scale(_h_K0S[offset], 1.0/_h_Q2_tmp->bin(offset+1).sumW());
101 scale(_h_LAMBDA[offset], 1.0/_h_Q2_tmp->bin(offset+1).sumW());
102 }
103 }
104
105 Histo1DPtr _h_K0S[7];
106 Histo1DPtr _h_LAMBDA[7];
107 Histo1DPtr _h_Q2_tmp;
108
109 };
110
111
112 RIVET_DECLARE_PLUGIN(ZEUS_2011_I945935);
113
114}
|