Rivet analyses referenceHRS_1986_I18688$f_2(1270)$, $f_0(980)$ and $K_2(1430)^0$ spectra at 29 GeVExperiment: HRS (HRS) Inspire ID: 18688 Status: VALIDATED Authors:
Beam energies: (14.5, 14.5) GeV
Measurement of the $f_2(1270)$, $f_0(980)$ and $K_2(1430)^0$ spectra at 29 GeV by the HRS experiment. Source code: HRS_1986_I18688.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief f_2, f_0 and K_2 spectra at 29 GeV
9 class HRS_1986_I18688 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(HRS_1986_I18688);
14
15 /// @name Analysis methods
16 ///@{
17
18 /// Book histograms and initialise projections before the run
19 void init() {
20 declare(UnstableParticles(), "UFS");
21 book(_h_f2,1,1,1);
22 book(_h_f0,1,1,2);
23 book(_h_K2,1,1,3);
24 }
25
26
27 /// Perform the per-event analysis
28 void analyze(const Event& event) {
29 if (_edges.empty()) _edges = _h_f2->xEdges();
30 UnstableParticles ufs = apply<UnstableParticles>(event,"UFS");
31 for (const Particle& p : ufs.particles(Cuts::abspid==9010221 ||
32 Cuts::abspid==225 ||
33 Cuts::abspid==315)) {
34 Vector3 mom3 = p.p3();
35 const double energy = p.E();
36 double modp = mom3.mod();
37 double beta = modp/energy;
38 double xE = 2.*modp/sqrtS();
39 if (p.pid()==225) {
40 _h_f2->fill(map2string(xE), 1./beta);
41 }
42 else if (p.pid()==315) {
43 _h_K2->fill(map2string(xE), 1./beta);
44 }
45 else {
46 _h_f0->fill(map2string(xE), 1./beta);
47 }
48 }
49 }
50
51
52 /// Normalise histograms etc., after the run
53 void finalize() {
54 scale( _h_f0, sqr(sqrtS())*crossSection()/nanobarn/sumOfWeights());
55 scale( _h_f2, sqr(sqrtS())*crossSection()/nanobarn/sumOfWeights());
56 scale( _h_K2, sqr(sqrtS())*crossSection()/nanobarn/sumOfWeights());
57 for( auto & hist : {_h_f0,_h_f2,_h_K2} ) {
58 for(auto & b: hist->bins()) {
59 const size_t idx = b.index();
60 b.scaleW(1./_axis.width(idx));
61 }
62 }
63 }
64
65 ///@}
66
67 string map2string(const double value) const {
68 const size_t idx = _axis.index(value);
69 if (idx && idx <= _edges.size()) return _edges[idx-1];
70 return "OTHER";
71 }
72
73 /// @name Histograms
74 ///@{
75 BinnedHistoPtr<string> _h_f0, _h_f2, _h_K2;
76 YODA::Axis<double> _axis{0.1, 0.2, 0.3, 0.4, 0.7};
77 vector<string> _edges;
78 ///@}
79
80
81 };
82
83
84 RIVET_DECLARE_PLUGIN(HRS_1986_I18688);
85
86}
|