rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ARGUS_1993_S2669951

Production of the $\eta'(958)$ and $f_0(980)$ in $e^+e^-$ annihilation in the Upsilon region.
Experiment: ARGUS (DORIS)
Inspire ID: 342061
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Z.Phys. C58 (1993) 199-206
Beams: e+ e-
Beam energies: (4.7, 4.7); (5.0, 5.0); (5.2, 5.2) GeV
Run details:
  • $e^+ e^-$ analysis near the $\Upsilon(4S)$ resonance.

Measurement of the inclusive production of the $\eta'(958)$ and $f_0(980)$ mesons in $e^+e^-$ annihilation in the Upsilon region. Data are taken on the $\Upsilon(1S)$, $\Upsilon(2S)$ and $\Upsilon(4S)$ resonances and in the nearby continuum (9.36 to 10.45 GeV center-of-mass energy)

Source code: ARGUS_1993_S2669951.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief Production of the $\eta'(958)$ and $f_0(980)$ in $e^+e^-$ annihilation in the Upsilon region
  9  ///
 10  /// @author Peter Richardson
 11  class ARGUS_1993_S2669951 : public Analysis {
 12  public:
 13
 14    RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1993_S2669951);
 15
 16
 17    void init() {
 18      declare(UnstableParticles(), "UFS");
 19
 20      book(_weightSum_cont, "TMP/weightSum_cont");
 21      book(_weightSum_Ups1, "TMP/weightSum_Ups1");
 22      book(_weightSum_Ups2, "TMP/weightSum_Ups2");
 23
 24      for ( auto i : {0,1,2} ) {
 25        if ( i < 2 )
 26          book(_count_etaPrime_highZ[i], "TMP/count_etaPrime_highz_" + to_str(i));
 27        book(_count_etaPrime_allZ[i], "TMP/count_etaPrime_allz_" + to_str(i));
 28        book(_count_f0[i], "TMP/count_f0_" + to_str(i));
 29      }
 30
 31      book(_hist_cont_f0 ,2, 1, 1);
 32      book(_hist_Ups1_f0 ,3, 1, 1);
 33      book(_hist_Ups2_f0 ,4, 1, 1);
 34    }
 35
 36
 37    void analyze(const Event& e) {
 38      // Find the Upsilons among the unstables
 39      const UnstableParticles& ufs = apply<UnstableParticles>(e, "UFS");
 40      Particles upsilons = ufs.particles(Cuts::pid==553 or Cuts::pid==100553);
 41      // Continuum
 42      if (upsilons.empty()) {
 43        MSG_DEBUG("No Upsilons found => continuum event");
 44        _weightSum_cont->fill();
 45        for (const Particle& p : ufs.particles()) {
 46          const int id = p.pid();
 47          const double xp = 2.*p.E()/sqrtS();
 48          const double beta = p.p3().mod() / p.E();
 49          if (id == 9010221) {
 50            _hist_cont_f0->fill(xp, 1./beta);
 51	    _count_f0[2]->fill();
 52          } else if (id == 331) {
 53            if (xp > 0.35) _count_etaPrime_highZ[1]->fill();
 54	    _count_etaPrime_allZ[2]->fill();
 55          }
 56	}
 57      }
 58      // Upsilon(s) found
 59      else {
 60        for (const Particle& ups : upsilons) {
 61          const int parentId = ups.pid();
 62	  if(parentId==553) {
 63	    _weightSum_Ups1->fill();
 64	  }
 65	  else {
 66	    _weightSum_Ups2->fill();
 67	  }
 68          Particles unstable;
 69          // Find the decay products we want
 70          findDecayProducts(ups, unstable);
 71	  // boost to rest frame (if required)
 72          LorentzTransform cms_boost;
 73          if (ups.p3().mod() > 1*MeV)
 74            cms_boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
 75          const double mass = ups.mass();
 76	  // loop over decay products
 77          for(const Particle& p : unstable) {
 78            const int id = p.pid();
 79            const FourMomentum p2 = cms_boost.transform(p.momentum());
 80            const double xp = 2.*p2.E()/mass;
 81            const double beta = p2.p3().mod()/p2.E();
 82            if (id == 9010221) {
 83	      if(parentId == 553 ) {
 84		_hist_Ups1_f0->fill(xp, 1./beta);
 85		_count_f0[0]->fill();
 86	      }
 87	      else {
 88		_hist_Ups2_f0->fill(xp, 1./beta);
 89		_count_f0[1]->fill();
 90	      }
 91	    }
 92	    else if ( id == 331 ) {
 93	      if (parentId == 553) {
 94		if (xp > 0.35) _count_etaPrime_highZ[0]->fill();
 95		_count_etaPrime_allZ[0]->fill();
 96	      }
 97	      else {
 98		_count_etaPrime_allZ[1]->fill();
 99	      }
100	    }
101	  }
102	}
103      }
104    }
105
106    void finalize() {
107      // High-Z eta' multiplicity
108      Scatter2DPtr s111;
109      book(s111, 1, 1, 1, true);
110      if (_weightSum_Ups1->val() > 0) // Point at 9.460
111        s111->point(0).setY(_count_etaPrime_highZ[0]->val() / _weightSum_Ups1->val(), 0);
112      if (_weightSum_cont->val() > 0) // Point at 9.905
113        s111->point(1).setY(_count_etaPrime_highZ[1]->val() / _weightSum_cont->val(), 0);
114
115      // All-Z eta' multiplicity
116      Scatter2DPtr s112;
117      book(s112, 1, 1, 2, true);
118      if (_weightSum_Ups1->val() > 0) // Point at 9.460
119        s112->point(0).setY(_count_etaPrime_allZ[0]->val() / _weightSum_Ups1->val(), 0);
120      if (_weightSum_cont->val() > 0) // Point at 9.905
121        s112->point(1).setY(_count_etaPrime_allZ[2]->val() / _weightSum_cont->val(), 0);
122      if (_weightSum_Ups2->val() > 0) // Point at 10.02
123        s112->point(2).setY(_count_etaPrime_allZ[1]->val() / _weightSum_Ups2->val(), 0);
124
125
126      // f0 multiplicity
127      Scatter2DPtr s511;
128      book(s511, 5, 1, 1, true);
129      if (_weightSum_Ups1->val() > 0) // Point at 9.46
130        s511->point(0).setY(_count_f0[0]->val() / _weightSum_Ups1->val(), 0);
131      if (_weightSum_Ups2->val() > 0) // Point at 10.02
132        s511->point(1).setY(_count_f0[1]->val() / _weightSum_Ups2->val(), 0);
133      if (_weightSum_cont->val() > 0) // Point at 10.45
134        s511->point(2).setY(_count_f0[2]->val() / _weightSum_cont->val(), 0);
135
136      // Scale histos
137      if (_weightSum_cont->val() > 0.) scale(_hist_cont_f0, 1./ *_weightSum_cont);
138      if (_weightSum_Ups1->val() > 0.) scale(_hist_Ups1_f0, 1./ *_weightSum_Ups1);
139      if (_weightSum_Ups2->val() > 0.) scale(_hist_Ups2_f0, 1./ *_weightSum_Ups2);
140    }
141
142
143  private:
144
145    /// @name Counters
146    /// @{
147    array<CounterPtr,3> _count_etaPrime_highZ, _count_etaPrime_allZ, _count_f0;
148    CounterPtr _weightSum_cont,_weightSum_Ups1,_weightSum_Ups2;
149    /// @}
150
151
152    /// Histos
153    Histo1DPtr _hist_cont_f0, _hist_Ups1_f0, _hist_Ups2_f0;
154
155
156    /// Recursively walk the decay tree to find decay products of @a p
157    void findDecayProducts(Particle mother, Particles& unstable) {
158      for(const Particle & p: mother.children()) {
159        const int id = p.pid();
160	if (id == 331 || id == 9010221) {
161	  unstable.push_back(p);
162	}
163	else if(!p.children().empty())
164	  findDecayProducts(p, unstable);
165      }
166    }
167
168  };
169
170
171
172  RIVET_DECLARE_ALIASED_PLUGIN(ARGUS_1993_S2669951, ARGUS_1993_I342061);
173
174}