rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

TASSO_1984_I195333

Measurements of charged particle multiplicities, $R$ and event shapes between 12 and 43 GeV.
Experiment: TASSO (PETRA)
Inspire ID: 195333
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Z.Phys. C22 (1984) 307-340, 1984
Beams: e- e+
Beam energies: (6.0, 6.0); (7.0, 7.0); (11.0, 11.0); (12.5, 12.5); (13.8, 13.8); (15.1, 15.1); (15.2, 15.2); (15.6, 15.6); (16.6, 16.6); (17.0, 17.0); (17.2, 17.2); (17.4, 17.4); (18.1, 18.1); (20.8, 20.8); (21.5, 21.5) GeV
Run details:
  • e+ e- to hadrons and e+ e- to mu+ mu- (for normalization). Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Measurement of $R$, charged particle multiplicites and event shapes in $e^+e^-$ collisions for energies between 12 and 43 GeV. The average charged particle multiplicity, thrust and sphericity are measured for a range of energies. The distributions are available for 12, 22 and 34 GeV. The individual hadronic and muonic cross sections are also outputted to the yoda file so that ratio $R$ can be recalculated if runs are combined. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Source code: TASSO_1984_I195333.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/Sphericity.hh"
  5#include "Rivet/Projections/Thrust.hh"
  6
  7namespace Rivet {
  8
  9
 10  /// @brief Charged-particle multiplicities, R, and event shapes between 12 and 43 GeV
 11  class TASSO_1984_I195333 : public Analysis {
 12  public:
 13
 14    /// Constructor
 15    RIVET_DEFAULT_ANALYSIS_CTOR(TASSO_1984_I195333);
 16
 17
 18    /// @name Analysis methods
 19    /// @{
 20
 21    /// Book histograms and initialise projections before the run
 22    void init() {
 23      // Initialise and register projections
 24      const FinalState fs;
 25      declare(fs, "FS");
 26      declare(Sphericity(fs), "Sphericity");
 27      declare(Thrust(fs), "Thrust");
 28
 29      // Counters for R
 30      book(_c_hadrons, "sigma_hadrons", refData<YODA::BinnedEstimate<string>>(1,1,1));
 31      book(_c_muons,   "sigma_muons"  , refData<YODA::BinnedEstimate<string>>(1,1,1));
 32      for (const string& en : _c_hadrons.binning().edges<0>()) {
 33        const size_t idx = en.find("-");
 34        if(idx!=std::string::npos) {
 35          const double emin = std::stod(en.substr(0,idx));
 36          const double emax = std::stod(en.substr(idx+1,string::npos));
 37          if(inRange(sqrtS()/GeV, emin, emax)) {
 38            _ecms[0] = en;
 39            break;
 40          }
 41        }
 42        else {
 43          const double end = std::stod(en)*GeV;
 44          if (isCompatibleWithSqrtS(end)) {
 45            _ecms[0] = en;
 46            break;
 47          }
 48        }
 49      }
 50      book(_h_weight, "/TMP/HWeight");
 51      unsigned int iloc(0);
 52      sqs = sqrtS();
 53      if (isCompatibleWithSqrtS(14*GeV)) {
 54        iloc = 1;
 55        sqs = 14.;
 56      }
 57      else if (isCompatibleWithSqrtS(22*GeV)) {
 58        iloc = 2;
 59        sqs = 22.;
 60      }
 61      else if (isCompatibleWithSqrtS(34*GeV)) {
 62        iloc = 3;
 63        sqs = 34.;
 64      }
 65      if (iloc!=0) {
 66        book(_h_mult, 3,1,iloc);
 67        book(_h_p,    5,1,iloc);
 68        book(_h_xp,   6,1,iloc);
 69        book(_h_pl,   7,1,iloc);
 70        book(_h_pt,   8,1,iloc);
 71        book(_h_pt2,  9,1,iloc);
 72        book(_h_xl,  10,1,iloc);
 73        book(_h_xT,  11,1,iloc);
 74        book(_h_S,   12,1,iloc);
 75        book(_h_T,   13,1,iloc);
 76        book(_h_y,   14,1,iloc);
 77      }
 78      // average event shapes
 79      book(_n_charged ,4 ,1,  1);
 80      book(_n_total   ,"TMP/ntotal",refData<YODA::BinnedEstimate<string>>(4 ,1,  2));
 81      book(_sphericity,4 ,1,  4);
 82      book(_thrust    ,4 ,1,  5);
 83      book(_p_total   ,4 ,1,  6);
 84      book(_p_l       ,4 ,1,  7);
 85      book(_pt        ,4 ,1,  8);
 86      book(_pt2       ,4 ,1,  9);
 87      book(_pt2_in    ,4 ,1, 10);
 88      book(_pt2_out   ,4 ,1, 11);
 89      for (const string& en : _n_charged.binning().edges<0>()) {
 90        const size_t idx = en.find("-");
 91        if(idx!=std::string::npos) {
 92          const double emin = std::stod(en.substr(0,idx));
 93          const double emax = std::stod(en.substr(idx+1,string::npos));
 94          if(inRange(sqrtS()/GeV, emin, emax)) {
 95            _ecms[1] = en;
 96            break;
 97          }
 98        }
 99        else {
100          const double end = std::stod(en)*GeV;
101          if (isCompatibleWithSqrtS(end)) {
102            _ecms[1] = en;
103            break;
104          }
105        }
106      }
107    }
108
109
110    /// Perform the per-event analysis
111    void analyze(const Event& event) {
112      const FinalState& fs = apply<FinalState>(event, "FS");
113
114      map<long,int> nCount;
115      double ntotal(0);
116      unsigned int nCharged(0);
117      for (const Particle& p : fs.particles()) {
118        nCount[p.pid()] += 1;
119        if ((p.pid()!=PID::PHOTON && p.abspid()!=PID::ELECTRON) ||
120            p.parents().empty() || p.parents()[0].pid()!=PID::PI0) {
121          ntotal += 1.;
122        }
123        else if (p.pid()==PID::PHOTON) {
124          ntotal += 0.5 ;
125        }
126        else {
127          ntotal += 0.25;
128          nCharged -=1;
129        }
130        if (PID::isCharged(p.pid())) {
131          ++nCharged;
132        }
133      }
134      // mu+mu- + photons
135      if (nCount[-13]==1 and nCount[13]==1 && int(fs.particles().size())==2+nCount[22]) {
136        _c_muons->fill(_ecms[0]);
137        return;
138      }
139      // everything else
140      _c_hadrons->fill(_ecms[0]);
141      _h_weight->fill();
142      _n_charged->fill(_ecms[1],nCharged);
143      _n_total->fill(_ecms[1],ntotal);
144      // thrust
145      const Thrust& thrust = apply<Thrust>(event, "Thrust");
146      _thrust->fill(_ecms[1],thrust.thrust());
147      // sphericity
148      const Sphericity& sphericity = apply<Sphericity>(event, "Sphericity");
149      _sphericity->fill(_ecms[1],sphericity.sphericity());
150      // global distributions
151      if (_h_mult)  _h_mult->fill(nCharged);
152      if (_h_S)     _h_S   ->fill(sphericity.sphericity());
153      if (_h_T)     _h_T   ->fill(thrust.thrust());
154      // single particle distributions
155      for (const Particle& p : fs.particles()) {
156        if (!PID::isCharged(p.pid())) continue;
157        const Vector3 mom3 = p.p3();
158        double pp = mom3.mod();
159        _p_total->fill(_ecms[1],pp);
160        if (_h_p)  _h_p ->fill(pp);
161        if (_h_xp) _h_xp->fill(2.*pp/sqrtS());
162        const double mom = dot(sphericity.sphericityAxis(), mom3);
163        _p_l->fill(_ecms[1],fabs(mom));
164        if (_h_pl)  _h_pl->fill(fabs(mom));
165        if (_h_xl)  _h_xl->fill(2.*fabs(mom)/sqrtS());
166        const double pTin = dot(mom3, sphericity.sphericityMajorAxis());
167        _pt2_in->fill(_ecms[1],sqr(pTin));
168        const double pTout = dot(mom3, sphericity.sphericityMinorAxis());
169        _pt2_out->fill(_ecms[1],sqr(pTout));
170        double pT = sqr(pTin) + sqr(pTout);
171        _pt2->fill(_ecms[1],pT);
172        if (_h_pt2)  _h_pt2->fill(pT);
173        pT=sqrt(pT);
174        _pt->fill(_ecms[1],pT);
175        if (_h_pt)  _h_pt->fill(pT);
176        if (_h_xT)  _h_xT->fill(2.*pT/sqrtS());
177        if (_h_y) {
178          const double rap = 0.5 * log((p.E() + mom) / (p.E() - mom));
179          _h_y->fill(fabs(rap));
180        }
181      }
182    }
183
184
185    /// Normalise histograms etc., after the run
186    void finalize() {
187      BinnedEstimatePtr<string> mult;
188      book(mult, 1, 1, 1);
189      divide(_c_hadrons,_c_muons,mult);
190      // charged particle multiplicity distribution
191      if (_h_mult)  normalize(_h_mult,1.);
192      // charged fraction
193      book(mult,4,1,2);
194      divide(_n_charged,_n_total,mult);
195      book(mult,4,1,3);
196      const auto & b = _n_charged->binAt(_ecms[1]);
197      mult->binAt(_ecms[1]).set(b.stdDev(2),b.stdErr(2));
198      // scale the distributions
199      scale(_h_p  ,1./_h_weight->sumW());
200      scale(_h_xp ,1./_h_weight->sumW());
201      scale(_h_pl ,1./_h_weight->sumW());
202      scale(_h_pt ,1./_h_weight->sumW());
203      scale(_h_pt2,1./_h_weight->sumW());
204      scale(_h_xl ,1./_h_weight->sumW());
205      scale(_h_xT ,1./_h_weight->sumW());
206      scale(_h_S  ,1./_h_weight->sumW());
207      scale(_h_T  ,1./_h_weight->sumW());
208      scale(_h_y  ,1./_h_weight->sumW());
209    }
210
211    /// @}
212
213
214    /// @name Histograms
215    /// @{
216    Histo1DPtr _h_p,_h_xp,_h_pl,_h_pt,_h_pt2,_h_xl,_h_xT,_h_S,_h_T,_h_y;
217    BinnedHistoPtr<int> _h_mult;
218    BinnedHistoPtr<string> _c_hadrons, _c_muons;
219    BinnedProfilePtr<string> _n_charged, _n_total,_sphericity, _thrust, _p_total, _p_l, _pt, _pt2, _pt2_in, _pt2_out;
220    CounterPtr  _h_weight;
221    double sqs;
222    string _ecms[2];
223    /// @}
224
225  };
226
227
228
229  RIVET_DECLARE_PLUGIN(TASSO_1984_I195333);
230
231}