rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ARGUS_1990_I278933

$\pi^0$ and $\eta$ spectra for $e^+e^-$ collisions in the continuum at 9.46 GeV and at $\Upsilon_{1,2}$
Experiment: ARGUS (DORIS)
Inspire ID: 278933
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Z.Phys. C46 (1990) 15, 1990
Beams: e- e+
Beam energies: (4.7, 4.7); (5.0, 5.0) GeV
Run details:
  • $e^+ e^-$ analysis near the $\Upsilon$ resonances

Measurement of the inclusive production of the $\pi^0$ and $\eta$ mesons in $e^+e^-$ annihilation in the Upsilon region. Data are taken on the $\Upsilon(1S)$, $\Upsilon(2S)$ and in the nearby continuum.

Source code: ARGUS_1990_I278933.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief pi0 and eta at Upsilon 1,2 and continuum
  9  class ARGUS_1990_I278933 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1990_I278933);
 14
 15
 16    /// @name Analysis methods
 17    //@{
 18
 19    /// Book histograms and initialise projections before the run
 20    void init() {
 21      // Initialise and register projections
 22      declare(UnstableParticles(), "UFS");
 23      // Book histograms
 24      book(_h_cont_pi1 ,3, 1, 1);
 25      book(_h_cont_pi2 ,3, 1, 2);
 26      book(_h_ups1_pi  ,4, 1, 1);
 27      book(_h_ups2_pi  ,4, 1, 2);
 28      book(_h_cont_eta1,5, 1, 1);
 29      book(_h_cont_eta2,5, 1, 2);
 30      book(_h_ups1_eta ,6, 1, 1);
 31      book(_h_ups2_eta ,6, 1, 2);
 32      book(_n_Eta[0], "/TMP/EtaCont");
 33      book(_n_Eta[1], "/TMP/EtaUps1");
 34      book(_n_Eta[2], "/TMP/EtaUps2");
 35      book(_n_Pi[0] , "/TMP/PiCont");
 36      book(_n_Pi[1] , "/TMP/PiUps1");
 37      book(_n_Pi[2] , "/TMP/PiUps2");
 38      book(_weightSum_cont,"/TMP/weightSum_cont");
 39      book(_weightSum_Ups1,"/TMP/weightSum_Ups1");
 40      book(_weightSum_Ups2,"/TMP/weightSum_Ups2");
 41		      
 42    }
 43
 44    /// Recursively walk the decay tree to find decay products of @a p
 45    void findDecayProducts(Particle mother, Particles& unstable) {
 46      for(const Particle & p: mother.children()) {
 47        const int id = p.pid();
 48	if(id == 111 or id == 221) {
 49	  unstable.push_back(p);
 50	}
 51	if(!p.children().empty())
 52	  findDecayProducts(p, unstable);
 53      }
 54    }
 55
 56    /// Perform the per-event analysis
 57    void analyze(const Event& event) {
 58      // Find the Upsilons among the unstables
 59      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
 60      Particles upsilons = ufs.particles(Cuts::pid==553 or Cuts::pid==100553);
 61      // Continuum
 62      if (upsilons.empty()) { 
 63        MSG_DEBUG("No Upsilons found => continuum event");
 64        _weightSum_cont->fill();
 65        for (const Particle& p : ufs.particles(Cuts::pid==111 or Cuts::pid==221)) {
 66          const int id = p.pid();
 67          const double xp = 2.*p.E()/sqrtS();
 68          const double beta = p.p3().mod() / p.E();
 69	  if(id==111) {
 70	    _n_Pi[0]->fill();
 71	    _h_cont_pi1->fill(xp,1./beta);
 72	    _h_cont_pi2->fill(xp,1./beta);
 73	  }
 74	  else {
 75	    _n_Eta[0]->fill();
 76	    _h_cont_eta1->fill(xp,1./beta);
 77	    _h_cont_eta2->fill(xp,1./beta);
 78	  }
 79	}
 80      }
 81      // Upsilon(s) found
 82      else { 
 83        MSG_DEBUG("Upsilons found => resonance event");
 84        for (const Particle& ups : upsilons) {
 85          const int parentId = ups.pid();
 86	  if(parentId==553) {
 87	    _weightSum_Ups1->fill();
 88	  }
 89	  else {
 90	    _weightSum_Ups2->fill();
 91	  }
 92          Particles unstable;
 93          // Find the decay products we want
 94          findDecayProducts(ups, unstable);
 95          LorentzTransform cms_boost;
 96          if (ups.p3().mod() > 1*MeV)
 97            cms_boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
 98          const double mass = ups.mass();
 99	  // loop over decay products
100          for(const Particle& p : unstable) {
101            const int id = p.pid();
102            const FourMomentum p2 = cms_boost.transform(p.momentum());
103            const double xp = 2.*p2.E()/mass;
104            const double beta = p2.p3().mod()/p2.E();
105	    if(id==111) {
106	      if(parentId==553) {
107		_n_Pi[1]->fill();
108		_h_ups1_pi->fill(xp,1./beta);
109	      }
110	      else {
111		_n_Pi[2]->fill();
112		_h_ups2_pi->fill(xp,1./beta);
113	      }
114	    }
115	    else if(id==221) {
116	      if(parentId==553) {
117		_n_Eta[1]->fill();
118		_h_ups1_eta->fill(xp,1./beta);
119	      }
120	      else {
121		_n_Eta[2]->fill();
122		_h_ups2_eta->fill(xp,1./beta);
123	      }
124	    } 
125	  }
126	}
127      }	
128    }
129
130
131    /// Normalise histograms etc., after the run
132    void finalize() {
133
134      // Scale histos
135      if (_weightSum_cont->val() > 0.) {
136	scale(_h_cont_pi1, 1./ *_weightSum_cont);
137	scale(_h_cont_pi2, sqr(sqrtS())*crossSection()/microbarn/sumOfWeights());
138	scale(_h_cont_eta1, 1./ *_weightSum_cont);
139	scale(_h_cont_eta2, sqr(sqrtS())*crossSection()/microbarn/sumOfWeights());
140      }
141      if (_weightSum_Ups1->val() > 0.) {
142	scale(_h_ups1_pi, 1./ *_weightSum_Ups1);
143	scale(_h_ups1_eta, 1./ *_weightSum_Ups1);
144      }
145      if (_weightSum_Ups2->val() > 0.) {
146	scale(_h_ups2_pi, 1./ *_weightSum_Ups2);
147	scale(_h_ups2_eta, 1./ *_weightSum_Ups2);
148      }
149      // Counters
150      vector<CounterPtr> scales = {_weightSum_cont,_weightSum_Ups1,_weightSum_Ups2};
151      for(unsigned int ix=0;ix<3;++ix) {
152	Scatter2DPtr scatter;
153	book(scatter, 1, 1, ix+1, true);
154	scale(_n_Pi[ix],1./ *scales[ix]);
155        scatter->point(0).setY(_n_Pi[ix]->val(),
156			       _n_Pi[ix]->err());
157      }
158      for(unsigned int ix=0;ix<3;++ix) {
159	Scatter2DPtr scatter;
160	book(scatter, 2, 1, ix+1, true);
161	scale(_n_Eta[ix],1./ *scales[ix]);
162        scatter->point(0).setY(_n_Eta[ix]->val(),
163			       _n_Eta[ix]->err());
164      }
165    }
166
167    //@}
168
169
170    /// @name Histograms
171    //@{
172    Histo1DPtr _h_cont_pi1 , _h_cont_pi2 , _h_ups1_pi , _h_ups2_pi ;
173    Histo1DPtr _h_cont_eta1, _h_cont_eta2, _h_ups1_eta, _h_ups2_eta;
174    CounterPtr _n_Eta[3],_n_Pi[3];
175    CounterPtr _weightSum_cont,_weightSum_Ups1,_weightSum_Ups2;
176    //@}
177
178
179  };
180
181
182  // The hook for the plugin system
183  RIVET_DECLARE_PLUGIN(ARGUS_1990_I278933);
184
185
186}