Rivet analyses referenceTASSO_1983_I191417$\gamma\gamma\to p \bar{p}$ for centre-of-mass energies between 2 and 3.1 GeVExperiment: TASSO (PETRA) Inspire ID: 191417 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the differential cross section for $\gamma\gamma\to p \bar{p}$ for $2 \text{GeV} < W < 3.1 \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 proton scattering angle are measured. Source code: TASSO_1983_I191417.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4
5namespace Rivet {
6
7
8 /// @brief gamma gamma -> p pbar
9 class TASSO_1983_I191417 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(TASSO_1983_I191417);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 // Initialise and register projections
22 declare(FinalState(), "FS");
23 // book histos
24 if (inRange(sqrtS()/GeV,2.,3.1)) {
25 if (sqrtS()<=2.4) {
26 book(_h_cTheta,2,1,1);
27 }
28 else if (sqrtS()<=2.8) {
29 book(_h_cTheta,2,1,2);
30 }
31 book(_cProton, 1, 1, 1);
32 }
33 else {
34 throw Error("Invalid CMS energy for TASSO_1983_I191417");
35 }
36
37 _ecms = "OTHER"s;
38 for (const string& edge : _cProton.binning().edges<0>()) {
39 if (isCompatibleWithSqrtS(std::stod(edge)*GeV)) {
40 _ecms = edge;
41 break;
42 }
43 }
44 _axis = YODA::Axis<double>({0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7});
45 }
46
47
48 /// Perform the per-event analysis
49 void analyze(const Event& event) {
50 if(_h_cTheta && _edges.empty()) _edges=_h_cTheta->xEdges();
51 Particles part = apply<FinalState>(event,"FS").particles();
52 if (part.size()!=2) vetoEvent;
53 double cTheta(0.);
54 bool foundP(false),foundM(false);
55 for (const Particle& p : part) {
56 if (p.pid()==PID::PROTON) {
57 foundP=true;
58 cTheta = abs(p.momentum().z()/p.momentum().p3().mod());
59 }
60 else if (p.pid()==PID::ANTIPROTON) {
61 foundM=true;
62 }
63 }
64 if (!foundP || !foundM) vetoEvent;
65 if (cTheta<=0.6) _cProton->fill(_ecms);
66 if (_h_cTheta) {
67 const size_t idx = _axis.index(cTheta);
68 if (0 < idx && idx < _axis.numBins())
69 _h_cTheta->fill(_edges[idx-1]);
70 else
71 _h_cTheta->fill("OTHER"s);
72 }
73 }
74
75
76 /// Normalise histograms etc., after the run
77 void finalize() {
78 const double fact = crossSection()/nanobarn/sumOfWeights();
79 if (_h_cTheta) {
80 scale(_h_cTheta,fact);
81 for(auto & b : _h_cTheta->bins()) {
82 const size_t idx = b.index();
83 b.scaleW(1./_axis.width(idx));
84 }
85 }
86 scale(_cProton, fact);
87 }
88
89 /// @}
90
91
92 /// @name Histograms
93 /// @{
94 BinnedHistoPtr<string> _h_cTheta, _cProton;
95 string _ecms;
96 vector<string> _edges;
97 YODA::Axis<double> _axis;
98 /// @}
99
100
101 };
102
103
104 RIVET_DECLARE_PLUGIN(TASSO_1983_I191417);
105
106}
|