Rivet analyses referenceTASSO_1990_I284251$K^0,\bar{K}^0$ and $K^{*\pm}$ spectra in $e^+e^-$ collisions for centre-of-mass energies between 14.8 and 42.6 GeVExperiment: TASSO (Petra) Inspire ID: 284251 Status: VALIDATED Authors:
Beam energies: (7.4, 7.4); (10.8, 10.8); (17.2, 17.2); (17.5, 17.5); (21.3, 21.3) GeV Run details:
Measurement of the $K^0,\bar{K}^0$ and $K^{*\pm}$ spectra in $e^+e^-$ collisions for centre-of-mass energies between 14.8 and 42.6 GeV by the TASSO experiment at Petra. Source code: TASSO_1990_I284251.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/Beam.hh"
4#include "Rivet/Projections/Sphericity.hh"
5#include "Rivet/Projections/UnstableParticles.hh"
6#include "Rivet/Projections/ChargedFinalState.hh"
7
8namespace Rivet {
9
10
11 /// @brief K0 and K*+ spectra
12 class TASSO_1990_I284251 : public Analysis {
13 public:
14
15 /// Constructor
16 RIVET_DEFAULT_ANALYSIS_CTOR(TASSO_1990_I284251);
17
18
19 /// @name Analysis methods
20 /// @{
21
22 /// Book histograms and initialise projections before the run
23 void init() {
24
25 // Initialise and register projections
26 declare(Beam(), "Beams");
27 declare(UnstableParticles(), "UFS");
28 const ChargedFinalState cfs;
29 declare(cfs, "CFS");
30 declare(Sphericity(cfs), "Sphericity");
31
32
33 // Book histograms
34 _sqs = 10; size_t i = 0;
35 for (double eVal : allowedEnergies()) {
36
37 if (isCompatibleWithSqrtS(eVal)) _sqs = i;
38
39 size_t _ih, _iy;
40 if (i==0) { _ih=1; _iy=0; }
41 else if (i==1) { _ih=2; _iy=0; }
42 else if (i==2) { _ih=0; _iy=3; }
43 else if (i==3) { _ih=0; _iy=2; }
44 else { _ih=0; _iy=1; }
45
46 if (_ih==0) {
47 book(_h_K0_x[i], 1, 1, _iy);
48 if (_iy != 3) {
49 book(_p_K0_S_1[i], 5, 1, 2*_iy-1);
50 book(_p_K0_S_2[i],"TMP/p_K0_S_2_"+to_string(i),refData(5, 1, 2*_iy));
51 }
52 book(_h_Kstar_x[i-2], 8, 1, _iy);
53 if (_iy == 2) {
54 book(_p_Kstar_S_1, 10, 1, 1);
55 book(_p_Kstar_S_2, "TMP/p_Kstar_S_2", refData(10,1,2));
56 }
57 }
58 else {
59 book(_h_K0_x[i], _ih+1, 1, 1);
60 book(_p_K0_S_1[i], _ih+5, 1, 1);
61 book(_p_K0_S_2[i], "TMP/p_K0_S_2"+to_string(i), refData(_ih+5,1,2));
62 }
63 ++i;
64 }
65 if (_sqs == 10 && !merging()) {
66 throw BeamError("Invalid beam energy for " + name() + "\n");
67 }
68 book(_n_K0, 4, 1, 1);
69 book(_n_Kstar, 9, 1, 1);
70 }
71
72
73 /// Perform the per-event analysis
74 void analyze(const Event& event) {
75 const ChargedFinalState& cfs = apply<ChargedFinalState>(event, "CFS");
76 const size_t numParticles = cfs.particles().size();
77
78 // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
79 if (numParticles < 2) {
80 MSG_DEBUG("Failed leptonic event cut");
81 vetoEvent;
82 }
83 MSG_DEBUG("Passed leptonic event cut");
84
85 // Get beams and average beam momentum
86 const ParticlePair& beams = apply<Beam>(event, "Beams").beams();
87 const double meanBeamMom = ( beams.first.p3().mod() +
88 beams.second.p3().mod() ) / 2.0;
89 const Sphericity& sphericity = apply<Sphericity>(event, "Sphericity");
90
91 unsigned int nK0(0),nKstar(0);
92 UnstableParticles ufs = apply<UnstableParticles>(event,"UFS");
93 for (const Particle& p : ufs.particles(Cuts::abspid==323 or Cuts::pid==130 or Cuts::pid==310)) {
94 double xE = p.E()/meanBeamMom;
95 double modp = p.p3().mod();
96 double beta = modp/p.E();
97 if (p.abspid()==323) {
98 if (_sqs>1) _h_Kstar_x[_sqs-2]->fill(xE,1./beta);
99 ++nKstar;
100 }
101 else {
102 _h_K0_x[_sqs]->fill(xE,1./beta);
103 ++nK0;
104 }
105 }
106 _n_K0 ->fill(_dedges[_sqs],nK0 );
107 _n_Kstar->fill(_dedges[_sqs],nKstar);
108 const double sphere = sphericity.sphericity();
109 if (_sqs != 2) {
110 _p_K0_S_1[_sqs]->fill(sphere,nK0);
111 _p_K0_S_2[_sqs]->fill(sphere,cfs.particles().size());
112 }
113 if (_sqs == 3) {
114 _p_Kstar_S_1->fill(sphere,nKstar);
115 _p_Kstar_S_2->fill(sphere,cfs.particles().size());
116 }
117 }
118
119
120 /// Normalise histograms etc., after the run
121 void finalize() {
122 const double sf = sqr(sqrtS())*crossSection()/sumOfWeights();
123 scale(_h_K0_x, sf/microbarn);
124 scale(_h_Kstar_x, sf/nanobarn);
125
126 size_t i=0;
127 for (double eVal : allowedEnergies()) {
128
129 if (isCompatibleWithSqrtS( eVal*GeV )) _sqs = i;
130
131 size_t _ih, _iy;
132 if (i==0) { _ih=1; _iy=0; }
133 else if (i==1) { _ih=2; _iy=0; }
134 else if (i==2) { _ih=0; _iy=3; }
135 else if (i==3) { _ih=0; _iy=2; }
136 else { _ih=0; _iy=1; }
137
138 if (_iy != 3) {
139 Estimate1DPtr temp;
140 if (_ih==0) book(temp,5,1,2*_iy);
141 else book(temp,_ih+5,1,2);
142 divide(_p_K0_S_1[i],_p_K0_S_2[i],temp);
143 }
144 if (i == 3) {
145 Estimate1DPtr temp;
146 book(temp,10,1,2);
147 divide(_p_Kstar_S_1,_p_Kstar_S_2,temp);
148 }
149 ++i;
150 }
151 }
152
153 /// @}
154
155
156 /// @name Histograms
157 /// @{
158 Histo1DPtr _h_K0_x[5], _h_Kstar_x[3];
159
160 Profile1DPtr _p_K0_S_1[5], _p_K0_S_2[5], _p_Kstar_S_1, _p_Kstar_S_2;
161
162 BinnedProfilePtr<string> _n_K0,_n_Kstar;
163
164 vector<string> _dedges{"14.8"s, "21.5"s, "34.5"s, "35.0"s, "42.6"s};
165
166 size_t _sqs;
167 /// @}
168
169
170 };
171
172
173 RIVET_DECLARE_PLUGIN(TASSO_1990_I284251);
174
175
176}
|