Rivet analyses referenceARGUS_1994_I375418Visible hadronic cross section near the $\Upsilon(1S)$, $\Upsilon(2S)$ and $\Upsilon(4S)$ resonancesExperiment: ARGUS (DORIS) Inspire ID: 375418 Status: VALIDATED NOHEPDATA SINGLEWEIGHT Authors:
Beam energies: ANY Run details:
Measurement of the visible hadronic cross section near the $\Upsilon(1S)$, $\Upsilon(2S)$ and $\Upsilon(4S)$ resonances. As the analyses requires the beam energy smearing described in the paper then central CMS energy should be specified using the ECENT (in GeV) option. Source code: ARGUS_1994_I375418.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/ChargedFinalState.hh"
5
6namespace Rivet {
7
8
9 /// @brief e+ e- > hadrons near Upsilon resonances
10 class ARGUS_1994_I375418 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1994_I375418);
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(FinalState(), "FS");
25 declare(ChargedFinalState(), "CFS");
26
27 // Book histograms
28 for(unsigned int ix=0;ix<3;++ix)
29 book(_sigma[ix], 1+ix,1,1);
30 _eCent = getOption<string>("ECENT", std::to_string(sqrtS()/MeV));
31 }
32
33
34 /// Perform the per-event analysis
35 void analyze(const Event& event) {
36 if (apply<ChargedFinalState>(event,"CFS").particles().size()<3) vetoEvent;
37 const FinalState& fs = apply<FinalState>(event, "FS");
38 map<long,int> nCount;
39 int ntotal(0);
40 for (const Particle& p : fs.particles()) {
41 nCount[p.pid()] += 1;
42 ++ntotal;
43 }
44 // mu+mu- + photons
45 if (nCount[-13]==1 and nCount[13]==1 && ntotal==2+nCount[22]) {
46 vetoEvent;
47 }
48 else if (nCount[-11]==1 and nCount[11]==1 && ntotal==2+nCount[22]) {
49 vetoEvent;
50 }
51 else { // everything else
52 _sigma[0]->fill(_eCent);
53 _sigma[1]->fill(_eCent);
54 double H0=0.,H2=0;
55 for (unsigned int ix=0; ix<fs.particles().size(); ++ix) {
56 double p1 = fs.particles()[ix].p3().mod();
57 for (unsigned int iy=0; iy<fs.particles().size(); ++iy) {
58 double p2 = fs.particles()[iy].p3().mod();
59 double cTheta=fs.particles()[ix].p3().dot(fs.particles()[iy].p3())/p1/p2;
60 double pre=p1*p2/s;
61 H0 += pre;
62 H2 += 0.5*pre*(3.*sqr(cTheta)-1);
63 }
64 }
65 if (H2/H0<0.35) _sigma[2]->fill(_eCent);
66 }
67 }
68
69
70 /// Normalise histograms etc., after the run
71 void finalize() {
72 scale(_sigma, crossSection()/sumOfWeights()/nanobarn);
73 }
74
75 /// @}
76
77
78 /// @name Histograms
79 /// @{
80 BinnedHistoPtr<string> _sigma[3];
81 string _eCent;
82 /// @}
83
84
85 };
86
87
88 RIVET_DECLARE_PLUGIN(ARGUS_1994_I375418);
89
90}
|