Rivet analyses referenceARGUS_1988_I262713$\gamma\gamma\to K^{*+}K^{*-}$ between 1.6 and 2.6 GeVExperiment: ARGUS (DORIS) Inspire ID: 262713 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the differential cross section for $\gamma\gamma\to K^{*+}K^{*-}$ for $1.4 \text{GeV} < W < 2.6 \text{GeV}$. The cross section is measured as a function of the centre-of-mass energy of the photonic collision using the $2K^0_S\pi^+\pi^-$ and $K^0_SK^-\pi^0\pi^+$+c.c final states. Source code: ARGUS_1988_I262713.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 -> K*+K*-
10 class ARGUS_1988_I262713 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1988_I262713);
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.4,3.0)) {
27 for (unsigned int ix=0; ix<4; ++ix)
28 book(_nMeson[ix],"TMP/nMeson_"+toString(ix+1));
29 }
30 else {
31 throw Error("Invalid CMS energy for ARGUS_1988_I262713");
32 }
33 }
34
35 void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
36 for (const Particle& child : p.children()) {
37 if (child.children().empty()) {
38 nRes[child.pid()]-=1;
39 --ncount;
40 }
41 else {
42 findChildren(child,nRes,ncount);
43 }
44 }
45 }
46
47 /// Perform the per-event analysis
48 void analyze(const Event& event) {
49 const FinalState& fs = apply<FinalState>(event, "FS");
50 // find the final-state particles
51 map<long,int> nCount;
52 int ntotal(0);
53 for (const Particle& p : fs.particles()) {
54 nCount[p.pid()] += 1;
55 ++ntotal;
56 }
57 bool resonant=false;
58 // find any K* mesons
59 Particles Kstar=apply<UnstableParticles>(event, "UFS").particles(Cuts::abspid==323);
60 for (unsigned int ix=0;ix<Kstar.size();++ix) {
61 if(Kstar[ix].children().empty()) continue;
62 map<long,int> nRes=nCount;
63 int ncount = ntotal;
64 findChildren(Kstar[ix],nRes,ncount);
65 bool matched = false;
66 for (unsigned int iy=ix+1;iy<Kstar.size();++iy) {
67 if(Kstar[iy].children().empty()) continue;
68 if(Kstar[ix].pid()!=-Kstar[iy].pid()) continue;
69 map<long,int> nRes2=nRes;
70 int ncount2 = ncount;
71 findChildren(Kstar[iy],nRes2,ncount2);
72 if(ncount2 !=0 ) continue;
73 matched = true;
74 for (const auto& val : nRes2) {
75 if (val.second!=0) {
76 matched = false;
77 break;
78 }
79 }
80 if (matched) {
81 _nMeson[0]->fill();
82 resonant=true;
83 break;
84 }
85 }
86 if (matched) break;
87 }
88 // 4 meson final state
89 if (ntotal==4) {
90 if (nCount[PID::K0S]==2 &&
91 nCount[PID::PIPLUS]==1 && nCount[PID::PIMINUS]==1 ) {
92 _nMeson[1]->fill();
93 }
94 else if ( nCount[PID::K0S]==1 && nCount[PID::PI0]==1 &&
95 ((nCount[PID::KPLUS ]==1 && nCount[PID::PIMINUS]==1) ||
96 (nCount[PID::KMINUS]==1 && nCount[PID::PIPLUS ]==1))) {
97 _nMeson[2]->fill();
98 if (!resonant) _nMeson[3]->fill();
99 }
100 }
101 }
102
103
104 /// Normalise histograms etc., after the run
105 void finalize() {
106 scale(_nMeson, crossSection()/nanobarn/sumOfWeights());
107 // loop over tables in paper
108 for (unsigned int ix=0; ix<4; ++ix) {
109 BinnedEstimatePtr<string> mult;
110 book(mult, ix+1, 1, 1);
111 for (auto& b : mult->bins()) {
112 if (isCompatibleWithSqrtS(std::stod(b.xEdge())/GeV)) {
113 b.setVal(_nMeson[ix]->val());
114 b.setErr(_nMeson[ix]->err());
115 }
116 }
117 }
118 }
119
120 /// @}
121
122
123 /// @name Histograms
124 /// @{
125 CounterPtr _nMeson[4];
126 /// @}
127
128
129 };
130
131
132 RIVET_DECLARE_PLUGIN(ARGUS_1988_I262713);
133
134}
|