Rivet analyses referenceCELLO_1989_I267081$\gamma\gamma\to \rho^+\rho^-$ between 1.2 and 3.0 GeVExperiment: CELLO (PETRA) Inspire ID: 267081 Status: UNVALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the differential cross section for $\gamma\gamma\to \rho^+\rho^-$ for $1.2 \text{GeV} < W < 3.0 \text{GeV}$. The cross section is measured as a function of the centre-of-mass energy of the photonic collision using the $\pi^+\pi^-\pi^0\pi^0$ final state. Source code: CELLO_1989_I267081.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 -> rho+ rho-
10 class CELLO_1989_I267081 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(CELLO_1989_I267081);
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,3.0)) {
27 book(_nRho,"TMP/nRho");
28 }
29 else {
30 throw Error("Invalid CMS energy for CELLO_1989_I267081");
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::abspid==213);
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 if (rho[ix].pid()!=-rho[iy].pid()) continue;
67 map<long,int> nRes2=nRes;
68 int ncount2 = ncount;
69 findChildren(rho[iy],nRes2,ncount2);
70 if (ncount2 !=0 ) continue;
71 matched=true;
72 for (auto const & val : nRes2) {
73 if (val.second!=0) {
74 matched = false;
75 break;
76 }
77 }
78 if (matched) {
79 break;
80 }
81 }
82 if (matched) {
83 _nRho->fill();
84 break;
85 }
86 }
87 }
88
89
90 /// Normalise histograms etc., after the run
91 void finalize() {
92 scale(_nRho, crossSection()/nanobarn/sumOfWeights());
93 // loop over tables in paper
94 BinnedEstimatePtr<string> mult;
95 for (unsigned int ix=0; ix<2; ++ix) {
96 book(mult, ix+1, 1, 1);
97 for (auto& b : mult->bins()) {
98 if (isCompatibleWithSqrtS(std::stod(b.xEdge()))) {
99 b.set(_nRho->val(), _nRho->err());
100 }
101 }
102 }
103 }
104
105 /// @}
106
107
108 /// @name Histograms
109 /// @{
110 CounterPtr _nRho;
111 /// @}
112
113
114 };
115
116
117 RIVET_DECLARE_PLUGIN(CELLO_1989_I267081);
118
119}
|