Rivet analyses
γγ → pp̄ for centre-of-mass energies between 2 and 2.9 GeV
Experiment: ARGUS (DORIS)
Inspire ID: 267759
Status: VALIDATED
Authors: - Peter Richardson
References: - Z.Phys.C 42 (1989) 543
Beams: 22 22
Beam energies: ANY
Run details: - gamma gamma to hadrons
Measurement of the differential cross section for γγ → pp̄ for 2GeV < W < 2.9GeV. 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. There are other measurements in the original paper but the final-state cuts are not clear for these and therefore they are not implemented.
Source
code:ARGUS_1989_I267759.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
namespace Rivet {
/// @brief gamma gamma -> p pbar
class ARGUS_1989_I267759 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1989_I267759);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// Initialise and register projections
declare(FinalState(), "FS");
// book histos
if (inRange(sqrtS()/GeV,2.,2.9)) {
book(_h_cTheta, 1, 1, 1);
book(_cProton,"TMP/nProton");
}
else {
throw Error("Invalid CMS energy for ARGUS_1989_I267759");
}
_axis = YODA::Axis<double>({0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6});
}
/// Perform the per-event analysis
void analyze(const Event& event) {
if (_edges.empty()) _edges = _h_cTheta->xEdges();
Particles part = apply<FinalState>(event,"FS").particles();
if (part.size()!=2) vetoEvent;
double cTheta(0.);
bool foundP(false),foundM(false);
for (const Particle& p : part) {
if (p.pid() == PID::PROTON) {
foundP=true;
cTheta = abs(p.momentum().z()/p.momentum().p3().mod());
}
else if(p.pid()==PID::ANTIPROTON) {
foundM=true;
}
}
if (!foundP || !foundM) vetoEvent;
if (cTheta<=0.6) _cProton->fill();
if (_h_cTheta) _h_cTheta->fill(disc(cTheta));
}
string disc(const double value) const {
size_t idx = _axis.index(value);
if (0 < idx && idx <= _axis.numBins()) return _edges[idx-1];
return "OTHER"s;
}
/// Normalise histograms etc., after the run
void finalize() {
const double fact = crossSection()/nanobarn/sumOfWeights();
if (_h_cTheta) {
scale(_h_cTheta,fact);
for(auto & b : _h_cTheta->bins()) {
const size_t idx = b.index();
b.scaleW(1./_axis.width(idx));
}
}
scale(_cProton, fact);
Estimate1DPtr mult;
book(mult, 2, 1, 1);
for (auto& b : mult->bins()) {
if (inRange(sqrtS(), b.xMin(), b.xMax())) {
b.setVal(_cProton->val());
b.setErr(_cProton->err());
}
}
}
/// @}
/// @name Histograms
/// @{
BinnedHistoPtr<string> _h_cTheta;
CounterPtr _cProton;
YODA::Axis<double> _axis;
vector<string> _edges;
/// @}
};
RIVET_DECLARE_PLUGIN(ARGUS_1989_I267759);
}