rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ARGUS_1991_I296187

$\gamma\gamma\to \rho^0\rho^0$ between 1.2 and 2.2 GeV
Experiment: ARGUS (DORIS)
Inspire ID: 296187
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Z.Phys.C 50 (1991) 1-10
Beams: 22 22
Beam energies: ANY
Run details:
  • gamma gamma to hadrons, pi0 mesons must be set stable

Measurement of the cross section for $\gamma\gamma\to \rho^0\rho^0$ between 1.2 and 2.2 GeV.

Source code: ARGUS_1991_I296187.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 -> rho0 rho0
 10  class ARGUS_1991_I296187 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1991_I296187);
 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(Cuts::abspid==113), "UFS");
 25      // book histos
 26      if (inRange(sqrtS()/GeV,1.2,2.2)) {
 27        for (unsigned int ix=0; ix<3; ++ix) {
 28          book(_c[ix],"TMP/nMeson_"+toString(ix+1));
 29        }
 30      }
 31      else {
 32        throw Error("Invalid CMS energy for ARGUS_1991_I296187");
 33      }
 34    }
 35
 36    void findChildren(const Particle& p,map<long,int> & nRes, int &ncount) {
 37      for (const Particle& child : p.children()) {
 38        if (child.children().empty()) {
 39          nRes[child.pid()]-=1;
 40          --ncount;
 41        }
 42        else {
 43          findChildren(child,nRes,ncount);
 44        }
 45      }
 46    }
 47
 48    /// Perform the per-event analysis
 49    void analyze(const Event& event) {
 50      const FinalState& fs = apply<FinalState>(event, "FS");
 51      // find the final-state particles
 52      map<long,int> nCount;
 53      int ntotal(0);
 54      for (const Particle& p : fs.particles()) {
 55        nCount[p.pid()] += 1;
 56        ++ntotal;
 57      }
 58      bool foundRes=false;
 59      // find any rho mesons
 60      Particles rho=apply<UnstableParticles>(event, "UFS").particles();
 61      for (unsigned int ix=0;ix<rho.size();++ix) {
 62       	if (rho[ix].children().empty()) continue;
 63       	map<long,int> nRes=nCount;
 64       	int ncount = ntotal;
 65       	findChildren(rho[ix],nRes,ncount);
 66        bool matched = false;
 67        for (unsigned int iy=ix+1; iy<rho.size(); ++iy) {
 68          if (rho[iy].children().empty()) continue;
 69          map<long,int> nRes2=nRes;
 70          int ncount2 = ncount;
 71          findChildren(rho[iy],nRes2,ncount2);
 72          if (ncount2 !=0 ) continue;
 73          matched=true;
 74          for (const auto& val : nRes2) {
 75            if (val.second!=0) {
 76              matched = false;
 77              break;
 78            }
 79          }
 80          if (matched) {
 81            break;
 82          }
 83        }
 84        if (matched) {
 85          _c[2]->fill();
 86          foundRes=true;
 87          break;
 88        }
 89        else {
 90          bool matched2=true;
 91          for (const auto& val : nRes) {
 92            if (abs(val.first)==211) {
 93              if (val.second!=1) {
 94                matched2 = false;
 95                break;
 96              }
 97            }
 98            else if (val.second!=0) {
 99              matched2 = false;
100              break;
101            }
102          }
103          if (matched2) {
104            _c[0]->fill();
105            foundRes=true;
106            break;
107          }
108        }
109      }
110      // 4 pion final-state
111      if (ntotal==4) {
112        if (nCount[PID::PIPLUS]==2 && nCount[PID::PIMINUS]==2) {
113          if (!foundRes) _c[1]->fill();
114        }
115      }
116    }
117
118
119    /// Normalise histograms etc., after the run
120    void finalize() {
121      scale(_c, crossSection()/nanobarn/sumOfWeights());
122      // loop over tables in paper
123      for (unsigned int ix=0; ix < 3; ++ix) {
124        unsigned int iy=2+ix;
125        if (ix==2) iy=5;
126        Estimate1DPtr mult;
127        book(mult, iy, 1, 1);
128        for (auto& b : mult->bins()) {
129          if (inRange(sqrtS(), b.xMin(), b.xMax())) {
130            b.set(_c[ix]->val(), _c[ix]->err());
131          }
132        }
133      }
134    }
135
136    /// @}
137
138
139    /// @name Histograms
140    /// @{
141    CounterPtr _c[3];
142    /// @}
143
144
145  };
146
147
148  RIVET_DECLARE_PLUGIN(ARGUS_1991_I296187);
149
150}