Rivet analyses
γγ → π0π0 for centre-of-mass energies between 0.25 and 1.95 GeV
Experiment: CRYSTAL_BALL (DORIS)
Inspire ID: 294492
Status: UNVALIDATED
Authors: - Peter Richardson
References: - Phys.Rev.D 41 (1990) 3324, 1990
Beams: 22 22
Beam energies: ANY
Run details: - gamma gamma to hadrons, pi0 must be set stable
Measurement of the differential cross section for γγ → π0π0 for 0.25GeV < W < 1.95GeV. 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:CRYSTAL_BALL_1990_I294492.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
namespace Rivet {
/// @brief gamma gamma -> pi0pi0
class CRYSTAL_BALL_1990_I294492 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(CRYSTAL_BALL_1990_I294492);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// Initialise and register projections
declare(FinalState(), "FS");
// histos
const double eval = sqrtS()/GeV;
raiseBeamErrorIf(!inRange(eval, 0.25, 1.95));
size_t ih=0;
for (double emax : {0.5, 0.7, 0.9, 1.1, 1.3, 1.7}) {
string label = toString(1000*emax);
book(_h[label], 2, 1, ++ih);
if (_sqs.empty() && eval < emax) _sqs = label;
}
if (inRange(eval, 1.1, 1.5, RangeBoundary::CLOSED, RangeBoundary::CLOSED)) {
_sqs15 = "1500"s;
}
book(_h["1500"], 2, 1, 7);
_edges = _h["1500"].binning().edges<0>();
book(_h["npipi"], 1, 1, 1);
for (const string& en : _h["npipi"].binning().edges<0>()) {
if (isCompatibleWithSqrtS(stod(en))) {
_edge = en; break;
}
}
_axis = YODA::Axis<double>({0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8});
}
/// Perform the per-event analysis
void analyze(const Event& event) {
Particles part = apply<FinalState>(event,"FS").particles();
if (part.size()!=2) vetoEvent;
for (const Particle& p : part) {
if (p.pid()!=PID::PI0) vetoEvent;
}
const double cTheta = abs(part[0].mom().z()/part[0].mom().p3().mod());
if (cTheta<=0.8) _h["npipi"]->fill(_edge);
if (!_sqs.empty()) _h[_sqs]->fill(disc(cTheta));
if (!_sqs15.empty()) _h["1500"]->fill(disc(cTheta));
}
string disc(const double value) const {
size_t idx = _axis.index(value);
if (0 < idx && idx <= _edges.size()) return _edges[idx-1];
return "OTHER"s;
}
/// Normalise histograms etc., after the run
void finalize() {
scale(_h, crossSection()/nanobarn/sumOfWeights());
for (auto& item : _h) {
if (item.first == "npipi"s) continue;
for (auto& b : item.second->bins()) {
const size_t idx = b.index();
b.scaleW(1./_axis.width(idx));
}
}
}
/// @}
/// @name Histograms
/// @{
map<string,BinnedHistoPtr<string>> _h;
YODA::Axis<double> _axis;
vector<string> _edges;
string _sqs = "", _sqs15 = "", _edge = "";
/// @}
};
RIVET_DECLARE_PLUGIN(CRYSTAL_BALL_1990_I294492);
}