Rivet analyses referenceEHS_1988_I265504Charged-particle production in $K^+ p$, $\pi^+ p$ and $pp$ interactions at $250 \text{GeV}/c$Experiment: EHS (SPS) Inspire ID: 265504 Status: VALIDATED Authors:
Beam energies: (250.0, 0.0); (250.0, 0.0); (250.0, 0.0) GeV Run details:
Measurement of charged particle production spectra in longitudinal and transverse momentum as well as rapidity by the EHS/NA22 collaboration at the SPS. Experiment was done with a fixed hydrogen target and beams of $p$, $\pi^+$ and $K^+$ with $250\,\text{GeV}/c$. Measured spectra are for positively charged hadrons $C^+$ and negative charge pions $\pi^-$. $C^+$ excludes slow protons with $p < 1.2\,\text{GeV}/c$ in the laboratory. Final spectra are in center-of-mass variables: $x_\mathrm{F}$, $y$ and $p_\mathrm{T}$. Source code: EHS_1988_I265504.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/Beam.hh"
4#include "Rivet/Projections/ChargedFinalState.hh"
5#include "Rivet/Event.hh"
6
7namespace Rivet {
8
9
10 class EHS_1988_I265504 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(EHS_1988_I265504);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22
23 declare(ChargedFinalState(), "CFS");
24 declare(Beam(),"Beam");
25
26 switch ( beamIDs().first ) {
27 case PID::PIPLUS:
28 book(_h_cpos_xF ,1, 1, 1);
29 book(_h_cpos_eta ,3, 1, 1);
30 book(_h_cpos_pT2 ,5, 1, 1);
31 book(_h_cneg_xF ,2, 1, 1);
32 book(_h_cneg_eta ,4, 1, 1);
33 book(_h_cneg_pT2 ,6, 1, 1);
34 break;
35
36 case PID::KPLUS:
37 book(_h_cpos_xF ,1, 1, 2);
38 book(_h_cpos_eta ,3, 1, 2);
39 book(_h_cpos_pT2 ,5, 1, 2);
40 book(_h_cneg_xF ,2, 1, 2);
41 book(_h_cneg_eta ,4, 1, 2);
42 book(_h_cneg_pT2 ,6, 1, 2);
43 break;
44
45 case PID::PROTON:
46 book(_h_cpos_xF ,1, 1, 3);
47 book(_h_cpos_eta ,3, 1, 3);
48 book(_h_cpos_pT2 ,5, 1, 3);
49 book(_h_cneg_xF ,2, 1, 3);
50 book(_h_cneg_eta ,4, 1, 3);
51 book(_h_cneg_pT2 ,6, 1, 3);
52 break;
53 }
54
55 // Calculate boost from lab to CM frame
56 _beamboost = cmsTransform( beams() );
57 MSG_DEBUG("Boost vector: " << _beamboost );
58
59 // Transform beam into CMS frame
60 Particle _beam_cm = beams().first;
61 _beam_cm.transformBy(_beamboost);
62 // Beam momentum in CM frame defines Feynman-x
63 _pz_max = _beam_cm.pz();
64
65 }
66
67
68 /// Perform the per-event analysis
69 void analyze(const Event& event) {
70
71 const FinalState& fs = apply<FinalState>(event, "CFS");
72 for (const Particle& p: fs.particles()) {
73 // Only interested in pi- or positively charged
74 if (p.charge() < 0 && p.pid() != PID::PIMINUS) continue;
75 // Slow proton cut: reject lab momenta < 1.2GeV
76 if (p.pid() == PID::PROTON && p.p() < 1.2*GeV) continue;
77 // Transform to cm frame
78 const FourMomentum pcm = _beamboost.transform(p);
79 const double xF = pcm.pz()/_pz_max;
80
81 if (p.charge() > 0) {
82 _h_cpos_xF->fill( xF );
83 _h_cpos_pT2->fill( p.pT2() );
84 _h_cpos_eta->fill( pcm.eta() );
85 } else if (p.pid() == PID::PIMINUS) {
86 _h_cneg_xF->fill( xF );
87 _h_cneg_pT2->fill( p.pT2() );
88 _h_cneg_eta->fill( pcm.eta() );
89 }
90 }
91 }
92
93
94 /// Normalise histograms etc., after the run
95 void finalize() {
96 const double sf = crossSection()/millibarn/sumOfWeights();
97 scale(_h_cpos_xF, sf); scale(_h_cpos_pT2, sf);
98 scale(_h_cpos_eta, sf); scale(_h_cneg_xF, sf);
99 scale(_h_cneg_eta, sf); scale(_h_cneg_pT2, sf);
100 }
101
102 /// @}
103
104
105 /// @name Histograms
106 /// @{
107 LorentzTransform _beamboost;
108 double _pz_max;
109 Histo1DPtr _h_cpos_xF, _h_cpos_eta, _h_cpos_pT2;
110 Histo1DPtr _h_cneg_xF, _h_cneg_eta, _h_cneg_pT2;
111 /// @}
112
113 };
114
115
116 RIVET_DECLARE_PLUGIN(EHS_1988_I265504);
117
118}
|