Rivet analyses referenceTASSO_1982_I180755$\gamma\gamma\to \rho^0\rho^0$ between 1.2 and 2.0 GeVExperiment: TASSO (PETRA) Inspire ID: 180755 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the differential cross section for $\gamma\gamma\to \rho^0\rho^0$ for $1.2 \text{GeV} < W < 2.0 \text{GeV}$. The cross section is measured as a function of the centre-of-mass energy of the photonic collision using the $2\pi^+2\pi^-$ final state. Source code: TASSO_1982_I180755.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 -> rho0 rho0
10 class TASSO_1982_I180755 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(TASSO_1982_I180755);
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.2,2.0)) {
27 book(_nRho, "TMP/nrho", refData(1, 1, 1));
28 }
29 else {
30 throw Error("Invalid CMS energy for TASSO_1982_I180755");
31 }
32 }
33
34 void findChildren(const Particle& p, map<long,int>& nRes, int& ncount) {
35 for (const Particle &child : p.children()) {
36 if (child.children().empty()) {
37 nRes[child.pid()]-=1;
38 --ncount;
39 }
40 else {
41 findChildren(child,nRes,ncount);
42 }
43 }
44 }
45
46 /// Perform the per-event analysis
47 void analyze(const Event& event) {
48 const FinalState& fs = apply<FinalState>(event, "FS");
49 // find the final-state particles
50 map<long,int> nCount;
51 int ntotal(0);
52 for (const Particle& p : fs.particles()) {
53 nCount[p.pid()] += 1;
54 ++ntotal;
55 }
56 // find any rho mesons
57 Particles rho=apply<UnstableParticles>(event, "UFS").particles(Cuts::pid==113);
58 for (unsigned int ix=0; ix<rho.size(); ++ix) {
59 if (rho[ix].children().empty()) continue;
60 map<long,int> nRes=nCount;
61 int ncount = ntotal;
62 findChildren(rho[ix],nRes,ncount);
63 bool matched = false;
64 for (unsigned int iy=ix+1; iy<rho.size(); ++iy) {
65 if (rho[iy].children().empty()) continue;
66 map<long,int> nRes2=nRes;
67 int ncount2 = ncount;
68 findChildren(rho[iy],nRes2,ncount2);
69 if (ncount2 !=0 ) continue;
70 matched=true;
71 for (const auto& val : nRes2) {
72 if (val.second!=0) {
73 matched = false;
74 break;
75 }
76 }
77 if (matched) {
78 break;
79 }
80 }
81 if (matched) {
82 _nRho->fill(sqrtS()/GeV);
83 break;
84 }
85 }
86 }
87
88
89 /// Normalise histograms etc., after the run
90 void finalize() {
91 scale(_nRho, crossSection()/nanobarn/sumOfWeights());
92 Estimate1DPtr tmp;
93 book(tmp,1,1,1);
94 barchart(_nRho,tmp);
95 }
96
97 /// @}
98
99
100 /// @name Histograms
101 /// @{
102 Histo1DPtr _nRho;
103 /// @}
104
105
106 };
107
108
109 RIVET_DECLARE_PLUGIN(TASSO_1982_I180755);
110
111}
|