Rivet analyses referenceMARKII_1990_I304882γγ→π+π− for centre-of-mass energies between 0.35 and 1.6 GeVExperiment: MARKII (PEP) Inspire ID: 304882 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the differential cross section for γγ→π+π− for 0.35GeV<W<1.6GeV. 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 pion scattering angle are measured. Source code: MARKII_1990_I304882.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4
5namespace Rivet {
6
7
8 /// @brief gamma gamma -> pi+ pi-
9 class MARKII_1990_I304882 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(MARKII_1990_I304882);
14
15
16 /// @name Analysis methods
17 ///@{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 // Final state
22 declare(FinalState(),"FS");
23 // check CMS energy in range
24 if (sqrtS()<0.35*GeV || sqrtS()>1.6*GeV)
25 throw Error("Invalid CMS energy for MARKII_1990_I304882");
26 for (unsigned int ix=0;ix<7;++ix) {
27 std::ostringstream title;
28 title << "/TMP/nPi_" << ix;
29 book(_cPi[ix], title.str());
30 }
31 }
32
33
34 /// Perform the per-event analysis
35 void analyze(const Event& event) {
36 Particles part = apply<FinalState>(event,"FS").particles();
37 if (part.size()!=2) vetoEvent;
38 double cTheta(0.);
39 bool foundP(false),foundM(false);
40 for (const Particle & p : part) {
41 if (p.pid()==PID::PIPLUS) {
42 foundP=true;
43 cTheta = abs(p.momentum().z()/p.momentum().p3().mod());
44 }
45 else if (p.pid()==PID::PIMINUS)
46 foundM=true;
47 }
48 if (!foundP || !foundM) vetoEvent;
49 int ibin = cTheta/0.1;
50 if (ibin>5) vetoEvent;
51 _cPi[ 0 ]->fill();
52 _cPi[ibin+1]->fill();
53 }
54
55
56 /// Normalise histograms etc., after the run
57 void finalize() {
58 double fact = crossSection()/nanobarn/sumOfWeights();
59 for (unsigned int ih=0;ih<7;++ih) {
60 unsigned int ix=2,iy=ih;
61 if (ih==0) {
62 ix=1;
63 iy=1;
64 }
65 double sigma = _cPi[ih]->val()*fact;
66 double error = _cPi[ih]->err()*fact;
67 Estimate1DPtr mult;
68 book(mult, ix, 1, iy);
69 for (auto& b : mult->bins()) {
70 if (inRange(sqrtS(), b.xMin(), b.xMax())) {
71 b.set(sigma, error);
72 }
73 }
74 }
75 }
76
77 ///@}
78
79
80 /// @name Histograms
81 ///@{
82 CounterPtr _cPi[7];
83 ///@}
84
85
86 };
87
88
89 RIVET_DECLARE_PLUGIN(MARKII_1990_I304882);
90
91}
|