Rivet analyses

Charged Particle distributions between 13 and 31.6 GeV

Experiment: TASSO (Petra)

Inspire ID: 143691

Status: VALIDATED

Authors: - Peter Richardson

References: - Phys.Lett. 89B (1980) 418-422

Beams: e- e+

Beam energies: (6.5, 6.5); (8.5, 8.5); (11.0, 11.0); (13.8, 13.8); (15.2, 15.2); (15.6, 15.6)GeV

Run details: - e+ e- to hadrons and e+ e- to mu+ mu- (for normalization).

Measurement of charged particle multiplicity, rapidity and scaled momentum distributions for a range of energies between 13 and 31.6 GeV.

Source code:TASSO_1980_I143691.cc

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/Beam.hh"
#include "Rivet/Projections/ChargedFinalState.hh"
#include "Rivet/Projections/Thrust.hh"

namespace Rivet {


  /// @brief Charged particle multiplicities and distributions
  class TASSO_1980_I143691 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(TASSO_1980_I143691);


    /// @name Analysis methods
    /// @{

    /// Book histograms and initialise projections before the run
    void init() {

      // Initialise and register projections
      ChargedFinalState cfs;
      declare(cfs, "CFS");
      declare(Thrust(cfs), "Thrust");


      // Book histograms
      book(_p, 1, 1, 1);
      for (const string& en : _p.binning().edges<0>()) {
        if (isCompatibleWithSqrtS(stod(en)*GeV))  _sqs = en;
      }
      raiseBeamErrorIf(_sqs.empty());

      if (sqrtS() > 25*GeV)       _pre = "hi";
      else if (sqrtS() > 15*GeV)  _pre = "me";
      else                        _pre = "lo";
      book(_h["lorap"], 2,1,1);
      book(_h["lox"],   5,1,1);
      book(_h["merap"], 3,1,1);
      book(_h["mex"],   6,1,1);
      book(_h["hirap"], 4,1,1);
      book(_h["hix"],   7,1,1);
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {
      const ChargedFinalState& cfs = apply<ChargedFinalState>(event, "CFS");
      // thrust
      const Thrust& thrust = apply<Thrust>(event, "Thrust");
      Vector3 axis=thrust.thrustAxis();
      _p->fill(_sqs, cfs.particles().size());
      for (const Particle& p : cfs.particles()) {
        const Vector3 mom3 = p.p3();
        double pp = mom3.mod();
        double xP = 2.*pp/sqrtS();
        _h[_pre+"x"]->fill(xP);
        const double mom = dot(axis, mom3);
        const double rap = 0.5*log((p.E() + mom) / (p.E() - mom));
        _h[_pre+"rap"]->fill(fabs(rap));
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {

      for (auto& item : _h) {
        if (item.first.find("rap") != string::npos) {
          scale(item.second, 1.0/sumOfWeights());
        }
        else {
          // These observables aren't well defined: the histograms are filled
          // for an energy range but the scaling requires a specific energy.
          scale(item.second, crossSection()*sqr(sqrtS())/sumOfWeights()/microbarn);
        }
      }
    }

    /// @}


    /// @name Histograms
    /// @{
    map<string,Histo1DPtr> _h;
    BinnedProfilePtr<string> _p;
    string _sqs = "", _pre = "";
    /// @}


  };


  RIVET_DECLARE_PLUGIN(TASSO_1980_I143691);
}