rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ARGUS_1993_S2789213

Inclusive production of $K^*(892)$, $\rho^0(770)$, and $\omega(783)$ mesons in the upsilon energy region.
Experiment: ARGUS (DORIS)
Inspire ID: 356616
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Z.Phys. C61 (1994) 1-18
Beams: e+ e-
Beam energies: (4.7, 4.7); (5.2, 5.2); (5.3, 5.3) GeV
Run details:
  • $e^+ e^-$ analysis in the 10 GeV CMS energy range

Measurement of the inclusive production of the vector mesons $K^*(892)$, $\rho^0(770)$ and $\omega(783)$ in $e^+e^-$ annihilation in the Upsilon region by the Argus Collaboration. Useful for tuning simulations of B meson and bottomium decays.

Source code: ARGUS_1993_S2789213.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief ARGUS vector meson production
  9  ///
 10  /// @author Peter Richardson
 11  class ARGUS_1993_S2789213 : public Analysis {
 12  public:
 13
 14    RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1993_S2789213);
 15
 16
 17    void init() {
 18      declare(UnstableParticles(), "UFS");
 19      for(unsigned int ix=0;ix<3;++ix) {
 20        for(unsigned int iy=0;iy<5;++iy) {
 21          std::ostringstream title;
 22          title << "/TMP/MULT_" << ix << "_" << iy;
 23          book(_mult[ix][iy],title.str());
 24        }
 25      }
 26
 27      book(_hist_cont_KStarPlus , 4, 1, 1);
 28      book(_hist_Ups1_KStarPlus , 5, 1, 1);
 29      book(_hist_Ups4_KStarPlus , 6, 1, 1);
 30
 31      book(_hist_cont_KStar0    , 7, 1, 1);
 32      book(_hist_Ups1_KStar0    , 8, 1, 1);
 33      book(_hist_Ups4_KStar0    , 9, 1, 1);
 34
 35      book(_hist_cont_Rho0      ,10, 1, 1);
 36      book(_hist_Ups1_Rho0      ,11, 1, 1);
 37      book(_hist_Ups4_Rho0      ,12, 1, 1);
 38
 39      book(_hist_cont_Omega     ,13, 1, 1);
 40      book(_hist_Ups1_Omega     ,14, 1, 1);
 41
 42
 43      book(_weightSum_cont,"TMP/weightSumcont");
 44      book(_weightSum_Ups1,"TMP/weightSumUps1");
 45      book(_weightSum_Ups4,"TMP/weightSumUps4");
 46    }
 47
 48
 49    void analyze(const Event& e) {
 50      // Find the upsilons
 51      // First in unstable final state
 52      const UnstableParticles& ufs = apply<UnstableParticles>(e, "UFS");
 53      Particles upsilons = ufs.particles(Cuts::pid==553 || Cuts::pid==300553);
 54      // continuum
 55      if (upsilons.empty()) {
 56        _weightSum_cont->fill();
 57        for (const Particle& p : ufs.particles()) {
 58          int id = p.abspid();
 59          double xp = 2.*p.E()/sqrtS();
 60          double beta = p.p3().mod()/p.E();
 61          if (id == 113) {
 62            _hist_cont_Rho0->fill(xp, 1./beta);
 63            _mult[0][1]->fill();
 64          }
 65          else if (id == 313) {
 66            _hist_cont_KStar0->fill(xp, 1./beta);
 67            _mult[0][2]->fill();
 68          }
 69          else if (id == 223) {
 70            _hist_cont_Omega->fill(xp, 1./beta);
 71            _mult[0][0]->fill();
 72          }
 73          else if (id == 323) {
 74            _hist_cont_KStarPlus->fill(xp,1./beta);
 75            _mult[0][3]->fill();
 76          }
 77          else if (id == 333) {
 78            _mult[0][4]->fill();
 79          }
 80        }
 81      }
 82      // found an upsilon
 83      else {
 84        for (const Particle& ups : upsilons) {
 85          const int parentId = ups.pid();
 86          if(parentId == 553)
 87            _weightSum_Ups1->fill();
 88          else
 89            _weightSum_Ups4->fill();
 90          Particles unstable;
 91          // Find the decay products we want
 92          findDecayProducts(ups,unstable);
 93          LorentzTransform cms_boost;
 94          if (ups.p3().mod() > 0.001)
 95            cms_boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
 96          double mass = ups.mass();
 97          for( const Particle & p : unstable) {
 98            int id = p.abspid();
 99            FourMomentum p2 = cms_boost.transform(p.momentum());
100            double xp = 2.*p2.E()/mass;
101            double beta = p2.p3().mod()/p2.E();
102            if (id == 113) {
103              if (parentId == 553) {
104                _hist_Ups1_Rho0->fill(xp,1./beta);
105                _mult[1][1]->fill();
106              }
107              else {
108                _hist_Ups4_Rho0->fill(xp,1./beta);
109                _mult[2][1]->fill();
110              }
111            }
112            else if (id == 313) {
113              if (parentId == 553) {
114                _hist_Ups1_KStar0->fill(xp,1./beta);
115                _mult[1][2]->fill();
116              }
117              else {
118                _hist_Ups4_KStar0->fill(xp,1./beta);
119                _mult[2][2]->fill();
120              }
121            }
122            else if (id == 223) {
123              if (parentId == 553) {
124                _hist_Ups1_Omega->fill(xp,1./beta);
125                _mult[1][0]->fill();
126              }
127              else {
128                _mult[2][0]->fill();
129              }
130            }
131            else if (id == 323) {
132              if (parentId == 553) {
133                _hist_Ups1_KStarPlus->fill(xp,1./beta);
134                _mult[1][3]->fill();
135              }
136              else {
137                _hist_Ups4_KStarPlus->fill(xp,1./beta);
138                _mult[2][3]->fill();
139              }
140            }
141            else if (id == 333) {
142              if (parentId == 553) {
143                _mult[1][4]->fill();
144              }
145              else {
146                _mult[2][4]->fill();
147              }
148            }
149          }
150        }
151      }
152    }
153
154
155    void finalize() {
156      // multiplicities
157      vector<CounterPtr> scales = {_weightSum_cont,_weightSum_Ups1,_weightSum_Ups4};
158      for(unsigned int ix=0;ix<3;++ix) {
159        if(scales[ix]->val() <= 0.) continue;
160        for(unsigned int iy=0;iy<5;++iy) {
161          // skip Upsilon(4S) -> omega, just an upper limit
162          if(ix==2&&iy==0) continue;
163          Scatter2DPtr scatter;
164          book(scatter,ix+1, 1, iy+1, true);
165          scale(_mult[ix][iy],1./ *scales[ix]);
166          scatter->point(0).setY(_mult[ix][iy]->val(),_mult[ix][iy]->err());
167        }
168      }
169      // spectra
170      if (_weightSum_cont->val() > 0.) {
171        scale(_hist_cont_KStarPlus, 1. / *_weightSum_cont);
172        scale(_hist_cont_KStar0   , 1. / *_weightSum_cont);
173        scale(_hist_cont_Rho0     , 1. / *_weightSum_cont);
174        scale(_hist_cont_Omega    , 1. / *_weightSum_cont);
175      }
176      if (_weightSum_Ups1->val() > 0.) {
177        scale(_hist_Ups1_KStarPlus, 1. / *_weightSum_Ups1);
178        scale(_hist_Ups1_KStar0   , 1. / *_weightSum_Ups1);
179        scale(_hist_Ups1_Rho0     , 1. / *_weightSum_Ups1);
180        scale(_hist_Ups1_Omega    , 1. / *_weightSum_Ups1);
181      }
182      if (_weightSum_Ups4->val() > 0.) {
183        scale(_hist_Ups4_KStarPlus, 1. / *_weightSum_Ups4);
184        scale(_hist_Ups4_KStar0   , 1. / *_weightSum_Ups4);
185        scale(_hist_Ups4_Rho0     , 1. / *_weightSum_Ups4);
186      }
187    }
188
189
190  private:
191
192    Histo1DPtr _hist_cont_KStarPlus, _hist_Ups1_KStarPlus, _hist_Ups4_KStarPlus;
193    Histo1DPtr _hist_cont_KStar0, _hist_Ups1_KStar0, _hist_Ups4_KStar0   ;
194    Histo1DPtr _hist_cont_Rho0, _hist_Ups1_Rho0,  _hist_Ups4_Rho0;
195    Histo1DPtr _hist_cont_Omega, _hist_Ups1_Omega;
196
197    CounterPtr _mult[3][5];
198    CounterPtr _weightSum_cont,_weightSum_Ups1,_weightSum_Ups4;
199
200
201    /// Recursively walk the decay tree to find decay products of @a p
202    void findDecayProducts(Particle mother, Particles& unstable) {
203      for(const Particle & p: mother.children()) {
204        const int id = abs(p.pid());
205        if (id == 113 || id == 313 || id == 323 ||
206            id == 333 || id == 223 ) {
207          unstable.push_back(p);
208        }
209        else if(!p.children().empty())
210          findDecayProducts(p, unstable);
211      }
212    }
213
214  };
215
216
217
218  RIVET_DECLARE_ALIASED_PLUGIN(ARGUS_1993_S2789213, ARGUS_1993_I356616);
219
220}