Rivet analyses referenceBELLE_2010_I862260$\gamma\gamma\to\eta\eta$ for centre-of-mass energies between 1.096 and 3.3 GeVExperiment: BELLE (KEKB) Inspire ID: 862260 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the differential cross section for $\gamma\gamma\to\eta\eta$ for $1.096 \text{GeV} < W < 3.3 \text{GeV}$. Both the cross section as a function of the centre-of-mass energy of the photonic collision, and the differential cross section with respect to the $\eta$ scattering angle are measured. Source code: BELLE_2010_I862260.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 gamma gamma -> eta eta
10 class BELLE_2010_I862260 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2010_I862260);
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 // book histos
26 if (inRange(sqrtS()/GeV,1.096,4.)) {
27 book(_sigmaEtaEta[0],"TMP/nEtaPi_1",refData(1, 1, 1));
28 if (sqrtS()<=2.) book(_sigmaEtaEta[1],"TMP/nEtaPi_2",refData(1, 1, 2));
29 double sMin=1.096,sMax=1.12, step=0.04;
30 unsigned int ihist=2;
31 while (sMin<3.3) {
32 if (inRange(sqrtS()/GeV, sMin, sMax)) {
33 break;
34 }
35 sMin=sMax;
36 sMax+=step;
37 ihist+=1;
38 if (fuzzyEquals(2.4, sMin)) step=0.1;
39 }
40 if (ihist<=43) book(_h_cTheta,ihist,1,1);
41 }
42 else {
43 throw Error("Invalid CMS energy for BELLE_2010_I862260");
44 }
45 }
46
47 void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
48 for (const Particle &child : p.children()) {
49 if (child.children().empty()) {
50 nRes[child.pid()]-=1;
51 --ncount;
52 }
53 else {
54 findChildren(child,nRes,ncount);
55 }
56 }
57 }
58
59 /// Perform the per-event analysis
60 void analyze(const Event& event) {
61 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
62 Particles etas=ufs.particles(Cuts::pid==PID::ETA);
63 if (etas.size()<2) vetoEvent;
64 const FinalState& fs = apply<FinalState>(event, "FS");
65 // find the final-state particles
66 map<long,int> nCount;
67 int ntotal(0);
68 for (const Particle& p : fs.particles()) {
69 nCount[p.pid()] += 1;
70 ++ntotal;
71 }
72 for (unsigned int ix=0;ix<etas.size();++ix) {
73 if (etas[ix].children().empty()) continue;
74 map<long,int> nRes=nCount;
75 int ncount = ntotal;
76 findChildren(etas[ix],nRes,ncount);
77 for (unsigned int iy=ix+1; iy<etas.size(); ++iy) {
78 if (etas[iy].children().empty()) continue;
79 map<long,int> nRes2=nRes;
80 int ncount2 = ncount;
81 findChildren(etas[iy],nRes2,ncount2);
82 if (ncount2 !=0 ) continue;
83 bool matched = true;
84 for (const auto& val : nRes2) {
85 if (val.second!=0) {
86 matched = false;
87 break;
88 }
89 }
90 if (matched) {
91 double cTheta = abs(etas[iy].momentum().z()/etas[iy].momentum().p3().mod());
92 if (cTheta<=0.9) _sigmaEtaEta[0]->fill(sqrtS());
93 if (_sigmaEtaEta[1]) _sigmaEtaEta[1]->fill(sqrtS());
94 if (_h_cTheta ) _h_cTheta ->fill(cTheta);
95 break;
96 }
97 }
98 }
99 }
100
101
102 /// Normalise histograms etc., after the run
103 void finalize() {
104 const double fact = crossSection()/nanobarn/sumOfWeights();
105 if (_h_cTheta ) scale(_h_cTheta ,fact);
106 for (unsigned int ix=0;ix<2;++ix) {
107 if (!_sigmaEtaEta[ix]) continue;
108 scale(_sigmaEtaEta[ix], fact);
109 Estimate1DPtr tmp;
110 book(tmp, 1, 1, 1+ix);
111 barchart(_sigmaEtaEta[ix],tmp);
112 }
113 }
114 /// @}
115
116
117 /// @name Histograms
118 /// @{
119 Histo1DPtr _sigmaEtaEta[2], _h_cTheta;
120 /// @}
121
122
123 };
124
125
126 RIVET_DECLARE_PLUGIN(BELLE_2010_I862260);
127
128}
|