rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ARGUS_1988_I262713

$\gamma\gamma\to K^{*+}K^{*-}$ between 1.6 and 2.6 GeV
Experiment: ARGUS (DORIS)
Inspire ID: 262713
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett.B 212 (1988) 528-532, 1988
Beams: 22 22
Beam energies: ANY
Run details:
  • gamma gamma to hadrons, K0S and pi0 mesons must be set stable

Measurement of the differential cross section for $\gamma\gamma\to K^{*+}K^{*-}$ for $1.4 \text{GeV} < W < 2.6 \text{GeV}$. The cross section is measured as a function of the centre-of-mass energy of the photonic collision using the $2K^0_S\pi^+\pi^-$ and $K^0_SK^-\pi^0\pi^+$+c.c final states.

Source code: ARGUS_1988_I262713.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 -> K*+K*-
 10  class ARGUS_1988_I262713 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1988_I262713);
 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.4,3.0)) {
 27	      for (unsigned int ix=0; ix<4; ++ix)
 28	        book(_nMeson[ix],"TMP/nMeson_"+toString(ix+1));
 29      }
 30      else {
 31	      throw Error("Invalid CMS energy for ARGUS_1988_I262713");
 32      }
 33    }
 34
 35    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 36      for (const Particle& child : p.children()) {
 37        if (child.children().empty()) {
 38          nRes[child.pid()]-=1;
 39          --ncount;
 40        }
 41        else {
 42          findChildren(child,nRes,ncount);
 43        }
 44      }
 45    }
 46
 47    /// Perform the per-event analysis
 48    void analyze(const Event& event) {
 49      const FinalState& fs = apply<FinalState>(event, "FS");
 50      // find the final-state particles
 51      map<long,int> nCount;
 52      int ntotal(0);
 53      for (const Particle& p : fs.particles()) {
 54        nCount[p.pid()] += 1;
 55        ++ntotal;
 56      }
 57      bool resonant=false;
 58      // find any K* mesons
 59      Particles Kstar=apply<UnstableParticles>(event, "UFS").particles(Cuts::abspid==323);
 60      for (unsigned int ix=0;ix<Kstar.size();++ix) {
 61       	if(Kstar[ix].children().empty()) continue;
 62       	map<long,int> nRes=nCount;
 63       	int ncount = ntotal;
 64       	findChildren(Kstar[ix],nRes,ncount);
 65        bool matched = false;
 66        for (unsigned int iy=ix+1;iy<Kstar.size();++iy) {
 67          if(Kstar[iy].children().empty()) continue;
 68          if(Kstar[ix].pid()!=-Kstar[iy].pid()) continue;
 69          map<long,int> nRes2=nRes;
 70          int ncount2 = ncount;
 71          findChildren(Kstar[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            _nMeson[0]->fill();
 82            resonant=true;
 83            break;
 84          }
 85        }
 86        if (matched) break;
 87      }
 88      // 4 meson final state
 89      if (ntotal==4) {
 90        if (nCount[PID::K0S]==2 &&
 91           nCount[PID::PIPLUS]==1 && nCount[PID::PIMINUS]==1 ) {
 92          _nMeson[1]->fill();
 93        }
 94        else if ( nCount[PID::K0S]==1 && nCount[PID::PI0]==1 &&
 95           ((nCount[PID::KPLUS ]==1 && nCount[PID::PIMINUS]==1) ||
 96            (nCount[PID::KMINUS]==1 && nCount[PID::PIPLUS ]==1))) {
 97          _nMeson[2]->fill();
 98          if (!resonant) _nMeson[3]->fill();
 99        }
100      }
101    }
102
103
104    /// Normalise histograms etc., after the run
105    void finalize() {
106      scale(_nMeson, crossSection()/nanobarn/sumOfWeights());
107      // loop over tables in paper
108      for (unsigned int ix=0; ix<4; ++ix) {
109        BinnedEstimatePtr<string> mult;
110        book(mult, ix+1, 1, 1);
111        for (auto& b : mult->bins()) {
112          if (isCompatibleWithSqrtS(std::stod(b.xEdge())/GeV)) {
113            b.setVal(_nMeson[ix]->val());
114            b.setErr(_nMeson[ix]->err());
115          }
116        }
117      }
118    }
119
120    /// @}
121
122
123    /// @name Histograms
124    /// @{
125    CounterPtr _nMeson[4];
126    /// @}
127
128
129  };
130
131
132  RIVET_DECLARE_PLUGIN(ARGUS_1988_I262713);
133
134}