Rivet analyses referenceARGUS_1992_I319102Measurement of $R$ at 9.36 GeV and charged particle multiplicities in continuum and at the $\Upsilon(4S)$Experiment: ARGUS (DORIS) Inspire ID: 319102 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of $R$ at 9.36 GeV and charged particle multiplicities in continuum and at the $\Upsilon(4S)$. The individual hadronic and muonic cross sections are also outputted to the yoda file so that ratio $R$ can be recalculated if runs are combined. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples. Source code: ARGUS_1992_I319102.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/UnstableParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief charged multiplicity at 4s and nearby continuum
10 class ARGUS_1992_I319102 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1992_I319102);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22
23 // Initialise and register projections
24 declare(UnstableParticles(), "UFS");
25 declare(FinalState(), "FS");
26
27 // Book histograms
28 if (isCompatibleWithSqrtS(10.47*GeV)) {
29 book(_h_N, 2, 1, 1);
30 book(_h_tot_N,4,1,1);
31 }
32 book(_h_N_Upsilon, 3, 1, 1);
33 book(_h_N_tot_Upsilon,5,1,1);
34 // counters for R
35 book(_c_hadrons, "/TMP/sigma_hadrons");
36 book(_c_muons, "/TMP/sigma_muons");
37 book(_w_cont,"/TMP/w_cont");
38 book(_w_ups ,"/TMP/w_ups" );
39 }
40
41 /// Recursively walk the decay tree to find decay products of @a p
42 void findDecayProducts(Particle mother, unsigned int& nCharged) {
43 for (const Particle & p: mother.children()) {
44 if (!p.children().empty()) {
45 findDecayProducts(p, nCharged);
46 }
47 else if (PID::isCharged(p.pid())) {
48 ++nCharged;
49 }
50 }
51 }
52
53
54 /// Perform the per-event analysis
55 void analyze(const Event& event) {
56 const FinalState& fs = apply<FinalState>(event, "FS");
57 // Find the Upsilons among the unstables
58 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
59 Particles upsilons = ufs.particles(Cuts::pid==300553);
60 // Continuum
61 if (upsilons.empty()) {
62 map<long,int> nCount;
63 int ntotal(0);
64 unsigned int nCharged(0);
65 for (const Particle& p : fs.particles()) {
66 nCount[p.pid()] += 1;
67 ++ntotal;
68 if (PID::isCharged(p.pid())) ++nCharged;
69 }
70 // mu+mu- + photons
71 if (nCount[-13]==1 and nCount[13]==1 &&
72 ntotal==2+nCount[22])
73 _c_muons->fill();
74 // everything else
75 else {
76 _c_hadrons->fill();
77 if (_h_N) {
78 _h_N->fill(nCharged);
79 _h_tot_N->fill(Ecm1, nCharged);
80 _w_cont->fill();
81 }
82 }
83 }
84 // upsilon 4s
85 else {
86 for (const Particle& ups : upsilons) {
87 unsigned int nCharged(0);
88 findDecayProducts(ups,nCharged);
89 _h_N_Upsilon->fill(nCharged);
90 _h_N_tot_Upsilon->fill(Ecm2, nCharged);
91 _w_ups->fill();
92 }
93 }
94 }
95
96
97 /// Normalise histograms etc., after the run
98 void finalize() {
99 Estimate0D R = *_c_hadrons/ *_c_muons;
100 double fact = crossSection()/ sumOfWeights() /picobarn;
101 double sig_h = _c_hadrons->val()*fact;
102 double err_h = _c_hadrons->err()*fact;
103 double sig_m = _c_muons ->val()*fact;
104 double err_m = _c_muons ->err()*fact;
105 Estimate1DPtr hadrons;
106 book(hadrons, "sigma_hadrons");
107 Estimate1DPtr muons;
108 book(muons, "sigma_muons" );
109 BinnedEstimatePtr<string> mult;
110 book(mult, 1, 1, 1);
111 if (isCompatibleWithSqrtS(9.36*GeV)) {
112 mult->bin(1).set(R.val(), R.errPos());
113 hadrons->bin(1).set(sig_h, err_h);
114 muons ->bin(1).set(sig_m, err_m);
115 }
116 if (_h_N) {
117 normalize(_h_N, 200.);
118 if (_w_cont->val()!=0)
119 scale(_h_tot_N,1./ *_w_cont);
120 }
121 normalize(_h_N_Upsilon, 200.);
122 if (_w_ups->val()!=0) {
123 scale(_h_N_tot_Upsilon,1./ *_w_ups);
124 }
125 }
126
127 /// @}
128
129
130 /// @name Histograms
131 /// @{
132 Histo1DPtr _h_N, _h_N_Upsilon;
133 BinnedHistoPtr<string> _h_tot_N, _h_N_tot_Upsilon;
134 CounterPtr _c_hadrons, _c_muons;
135 CounterPtr _w_cont,_w_ups;
136 const string Ecm1 = "10.47", Ecm2 = "10.575";
137 /// @}
138
139
140 };
141
142
143 RIVET_DECLARE_PLUGIN(ARGUS_1992_I319102);
144
145
146}
|