rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CELLO_1989_I267081

$\gamma\gamma\to \rho^+\rho^-$ between 1.2 and 3.0 GeV
Experiment: CELLO (PETRA)
Inspire ID: 267081
Status: UNVALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett.B 218 (1989) 493-498, 1989.
Beams: 22 22
Beam energies: ANY
Run details:
  • gamma gamma to hadrons, pi0 mesons must be set stable

Measurement of the differential cross section for $\gamma\gamma\to \rho^+\rho^-$ for $1.2 \text{GeV} < W < 3.0 \text{GeV}$. The cross section is measured as a function of the centre-of-mass energy of the photonic collision using the $\pi^+\pi^-\pi^0\pi^0$ final state.

Source code: CELLO_1989_I267081.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/UnstableParticles.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// @brief gamma gamma -> rho+ rho-
 10  class CELLO_1989_I267081 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(CELLO_1989_I267081);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // Initialise and register projections
 23      declare(FinalState(), "FS");
 24      declare(UnstableParticles(), "UFS");
 25      // book histos
 26      if(inRange(sqrtS()/GeV,1.2,3.0)) {
 27        book(_nRho,"TMP/nRho");
 28      }
 29      else {
 30        throw Error("Invalid CMS energy for CELLO_1989_I267081");
 31      }
 32    }
 33
 34    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 35      for (const Particle &child : p.children()) {
 36        if(child.children().empty()) {
 37          nRes[child.pid()]-=1;
 38          --ncount;
 39        }
 40        else {
 41          findChildren(child,nRes,ncount);
 42        }
 43      }
 44    }
 45
 46    /// Perform the per-event analysis
 47    void analyze(const Event& event) {
 48      const FinalState& fs = apply<FinalState>(event, "FS");
 49      // find the final-state particles
 50      map<long,int> nCount;
 51      int ntotal(0);
 52      for (const Particle& p : fs.particles()) {
 53        nCount[p.pid()] += 1;
 54        ++ntotal;
 55      }
 56      // find any rho mesons
 57      Particles rho=apply<UnstableParticles>(event, "UFS").particles(Cuts::abspid==213);
 58      for (unsigned int ix=0;ix<rho.size();++ix) {
 59       	if(rho[ix].children().empty()) continue;
 60       	map<long,int> nRes=nCount;
 61       	int ncount = ntotal;
 62       	findChildren(rho[ix],nRes,ncount);
 63        bool matched = false;
 64        for (unsigned int iy=ix+1;iy<rho.size();++iy) {
 65          if (rho[iy].children().empty()) continue;
 66          if (rho[ix].pid()!=-rho[iy].pid()) continue;
 67          map<long,int> nRes2=nRes;
 68          int ncount2 = ncount;
 69          findChildren(rho[iy],nRes2,ncount2);
 70          if (ncount2 !=0 ) continue;
 71          matched=true;
 72          for (auto const & val : nRes2) {
 73            if (val.second!=0) {
 74              matched = false;
 75              break;
 76            }
 77          }
 78          if (matched) {
 79            break;
 80          }
 81        }
 82        if (matched) {
 83          _nRho->fill();
 84          break;
 85        }
 86      }
 87    }
 88
 89
 90    /// Normalise histograms etc., after the run
 91    void finalize() {
 92      scale(_nRho, crossSection()/nanobarn/sumOfWeights());
 93      // loop over tables in paper
 94      BinnedEstimatePtr<string> mult;
 95      for (unsigned int ix=0; ix<2; ++ix) {
 96        book(mult, ix+1, 1, 1);
 97        for (auto& b : mult->bins()) {
 98          if (isCompatibleWithSqrtS(std::stod(b.xEdge()))) {
 99            b.set(_nRho->val(), _nRho->err());
100          }
101        }
102      }
103    }
104
105    /// @}
106
107
108    /// @name Histograms
109    /// @{
110    CounterPtr _nRho;
111    /// @}
112
113
114  };
115
116
117  RIVET_DECLARE_PLUGIN(CELLO_1989_I267081);
118
119}