Rivet analyses referenceARGUS_1994_I375418Visible hadronic cross section near the Υ(1S), Υ(2S) and Υ(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 Υ(1S), Υ(2S) and Υ(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}
|