Rivet analyses referenceCRYSTAL_BALL_1986_I238081Measurement of $R$ and $D^*$ production for energies between 3.67 and 4.5 GeV.Experiment: CRYSTAL_BALL (Spear) Inspire ID: 238081 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of $R$ in $e^+e^-$ collisions by the Crystal Ball experiment for energies between 3.67 and 4.5 GeV. The cross section for $D^*$ production is also measured. The individual hadronic and muonic cross sections are also outputted to the yoda file so that ratio $R$ can be recalcuated if runs are combined. Source code: CRYSTAL_BALL_1986_I238081.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 e+e- > hadrons
10 class CRYSTAL_BALL_1986_I238081 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(CRYSTAL_BALL_1986_I238081);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // Initialise and register projections
23 declare(FinalState(), "FS");
24 declare(UnstableParticles(), "UFS");
25
26 // Book histograms
27 book(_c_hadrons, "/TMP/sigma_hadrons",refData<YODA::BinnedEstimate<string>>(1,1,1));
28 book(_c_muons, "/TMP/sigma_muons" ,refData<YODA::BinnedEstimate<string>>(1,1,1));
29 book(_c_D_star, "/TMP/sigma_D_star" ,refData(2,1,1));
30
31 for (const string& ecms : _c_hadrons.binning().edges<0>()) {
32 if (isCompatibleWithSqrtS(std::stod(ecms)*GeV)) {
33 _ecms = ecms;
34 break;
35 }
36 }
37 }
38
39
40 /// Perform the per-event analysis
41 void analyze(const Event& event) {
42 const FinalState& fs = apply<FinalState>(event, "FS");
43
44 map<long,int> nCount;
45 int ntotal(0);
46 for (const Particle& p : fs.particles()) {
47 nCount[p.pid()] += 1;
48 ++ntotal;
49 }
50 // mu+mu- + photons
51 if(!_ecms.empty()) {
52 if(nCount[-13]==1 and nCount[13]==1 &&
53 ntotal==2+nCount[22])
54 _c_muons->fill(_ecms);
55 // everything else
56 else
57 _c_hadrons->fill(_ecms);
58 }
59 const FinalState& ufs = apply<UnstableParticles>(event, "UFS");
60 bool found = false;
61 for (const Particle & p : ufs.particles()) {
62 if(abs(p.pid())!=413 && abs(p.pid())!=423) continue;
63 bool fs = true;
64 for (const Particle & child : p.children()) {
65 if(child.pid()==p.pid()) {
66 fs = false;
67 break;
68 }
69 }
70 if(fs) {
71 found = true;
72 break;
73 }
74 }
75 if(found)
76 _c_D_star->fill(sqrtS());
77 }
78
79
80 /// Normalise histograms etc., after the run
81 void finalize() {
82 // R
83 BinnedEstimatePtr<string> tmp;
84 book(tmp,1,1,1);
85 divide(_c_hadrons,_c_muons,tmp);
86 double fact = crossSection()/ sumOfWeights() /nanobarn;
87 scale(_c_D_star,fact);
88 Estimate1DPtr tmp2;
89 book(tmp2,2,1,1);
90 barchart(_c_D_star,tmp2);
91 }
92
93 /// @}
94
95
96 /// @name Histograms
97 /// @{
98 BinnedHistoPtr<string> _c_hadrons, _c_muons;
99 Histo1DPtr _c_D_star;
100 string _ecms;
101 /// @}
102
103
104 };
105
106
107 RIVET_DECLARE_PLUGIN(CRYSTAL_BALL_1986_I238081);
108
109
110}
|