rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ARGUS_1989_I267759

$\gamma\gamma\to p \bar{p}$ 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 $\gamma\gamma\to p \bar{p}$ for $2 \text{GeV} < W < 2.9\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. 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
  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 ARGUS_1989_I267759 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1989_I267759);
 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.,2.9)) {
 25        book(_h_cTheta, 1, 1, 1);
 26       	book(_cProton,"TMP/nProton");
 27      }
 28      else {
 29        throw Error("Invalid CMS energy for ARGUS_1989_I267759");
 30      }
 31      _axis = YODA::Axis<double>({0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6});
 32    }
 33
 34
 35    /// Perform the per-event analysis
 36    void analyze(const Event& event) {
 37      if (_edges.empty())  _edges = _h_cTheta->xEdges();
 38      Particles part = apply<FinalState>(event,"FS").particles();
 39      if (part.size()!=2) vetoEvent;
 40      double cTheta(0.);
 41      bool foundP(false),foundM(false);
 42      for (const Particle& p : part) {
 43        if (p.pid() == PID::PROTON) {
 44          foundP=true;
 45          cTheta = abs(p.momentum().z()/p.momentum().p3().mod());
 46        }
 47        else if(p.pid()==PID::ANTIPROTON) {
 48          foundM=true;
 49        }
 50      }
 51      if (!foundP || !foundM)  vetoEvent;
 52      if (cTheta<=0.6)    _cProton->fill();
 53      if (_h_cTheta) _h_cTheta->fill(disc(cTheta));
 54    }
 55
 56
 57    string disc(const double value) const {
 58      size_t idx = _axis.index(value);
 59      if (0 < idx && idx <= _axis.numBins())  return _edges[idx-1];
 60      return "OTHER"s;
 61    }
 62
 63
 64    /// Normalise histograms etc., after the run
 65    void finalize() {
 66      const double fact = crossSection()/nanobarn/sumOfWeights();
 67      if (_h_cTheta) {
 68        scale(_h_cTheta,fact);
 69        for(auto & b : _h_cTheta->bins()) {
 70          const size_t idx = b.index();
 71          b.scaleW(1./_axis.width(idx));
 72        }
 73      }
 74      scale(_cProton, fact);
 75      Estimate1DPtr mult;
 76      book(mult, 2, 1, 1);
 77      for (auto& b : mult->bins()) {
 78        if (inRange(sqrtS(), b.xMin(), b.xMax())) {
 79          b.setVal(_cProton->val());
 80          b.setErr(_cProton->err());
 81        }
 82      }
 83    }
 84
 85    /// @}
 86
 87
 88    /// @name Histograms
 89    /// @{
 90    BinnedHistoPtr<string> _h_cTheta;
 91    CounterPtr _cProton;
 92    YODA::Axis<double> _axis;
 93    vector<string> _edges;
 94    /// @}
 95
 96
 97  };
 98
 99
100  RIVET_DECLARE_PLUGIN(ARGUS_1989_I267759);
101
102}