Rivet analyses

Event shapes at 29 GeV

Experiment: MARKII (PEP)

Inspire ID: 246184

Status: VALIDATED

Authors: - Peter Richardson

References: - Phys.Rev.D 37 (1988) 1, 1988

Beams: e+ e-

Beam energies: (14.5, 14.5)GeV

Run details: - e+ e- to hadrons

Event shapes measured by the MARKII collaboration at 29 GeV.

Source code:MARKII_1988_I246184.cc

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/ChargedFinalState.hh"
#include "Rivet/Projections/Sphericity.hh"
#include "Rivet/Projections/Thrust.hh"
#include "Rivet/Projections/Hemispheres.hh"

namespace Rivet {


  /// @brief Event shapes at 29 GeV
  class MARKII_1988_I246184 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(MARKII_1988_I246184);


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

    /// Book histograms and initialise projections before the run
    void init() {
      const FinalState fs;
      declare(fs, "FS");
      const ChargedFinalState cfs;
      declare(cfs, "CFS");
      Sphericity sphere(fs);
      declare(sphere, "Sphericity");
      declare(Thrust    (fs), "Thrust"    );
      declare(Hemispheres(sphere), "Hemispheres");
      // histograms
      unsigned int ioff=18;
      for(unsigned int ix=0;ix<3;++ix) {
    book(_histAplanarity [ix]  , 1+ioff*ix, 1, 1);
    book(_histQx         [ix]  , 2+ioff*ix, 1, 1);
    book(_histQ2Q1       [ix]  , 3+ioff*ix, 1, 1);
    book(_histSphericity [ix]  , 4+ioff*ix, 1, 1);
    book(_histThrust     [ix]  , 5+ioff*ix, 1, 1);
    book(_histMinor      [ix]  , 6+ioff*ix, 1, 1);
    book(_histOblateness [ix]  , 7+ioff*ix, 1, 1);
    book(_histMJetBroad  [ix]  , 8+ioff*ix, 1, 1);
    book(_histMJetSlim   [ix]  , 9+ioff*ix, 1, 1);
    book(_histMJetDiff   [ix]  ,10+ioff*ix, 1, 1);
    book(_histScaledMom  [ix]  ,15+ioff*ix, 1, 1);
    book(_histPt2S       [ix]  ,11+ioff*ix, 1, 1);
    book(_histPtS        [ix]  ,12+ioff*ix, 1, 1);
    book(_histPtSIn      [ix]  ,14+ioff*ix, 1, 1);
    book(_histPtSOut     [ix]  ,13+ioff*ix, 1, 1);
    book(_histRapidityS  [ix]  ,16+ioff*ix, 1, 1);
    book(_histTheta      [ix]  ,17+ioff*ix, 1, 1);
    book(_histETheta     [ix]  ,18+ioff*ix, 1, 1);
      }
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {
      // Sphericity related
      const Sphericity& sphericity = apply<Sphericity>(event, "Sphericity");
      for(unsigned int ix=0;ix<3;++ix) {
    _histSphericity[ix]->fill(sphericity.sphericity());
    _histAplanarity[ix]->fill(sphericity.aplanarity());
    _histQx        [ix]->fill((sphericity.lambda1()-sphericity.lambda2())/sqrt(3.));
    _histQ2Q1      [ix]->fill(sphericity.lambda2()-sphericity.lambda3());
      }
      // thrust related
      const Thrust& thrust = apply<Thrust>(event, "Thrust");
      for(unsigned int ix=0;ix<3;++ix) {
    _histThrust    [ix]->fill(thrust.thrust());
    _histMinor     [ix]->fill(thrust.thrustMinor());
    _histOblateness[ix]->fill(thrust.oblateness());
      }
      // hemisphere related
      const Hemispheres& hemi = apply<Hemispheres>(event, "Hemispheres");
      double mWide = hemi.scaledM2high(), mNarrow = hemi.scaledM2low();
      if(!hemi.massMatchesBroadening()) swap(mWide,mNarrow);
      for(unsigned int ix=0;ix<3;++ix) {
    _histMJetBroad[ix]->fill(mWide);
    _histMJetSlim [ix]->fill(mNarrow);
    _histMJetDiff [ix]->fill(hemi.scaledM2diff());
      }
      // dists w.r.t sphericity axis
      const FinalState& cfs = apply<FinalState>(event, "CFS");
      for (const Particle& p : cfs.particles()) {
        // Get momentum and energy of each particle.
        const Vector3 mom3 = p.p3();
        const double energy = p.E();
        // Scaled momenta.
        const double mom = mom3.mod();
        const double scaledMom = 2.*mom/sqrtS();
    // Get momenta components w.r.t. thrust and sphericity.
        const double pTinS = dot(mom3, sphericity.sphericityMajorAxis());
        const double pToutS = dot(mom3, sphericity.sphericityMinorAxis());
    double pT2 = sqr(pTinS)+sqr(pToutS);
    double pT  = sqrt(pT2);
        const double momS = dot(sphericity.sphericityAxis(), mom3);
        const double rapidityS = 0.5 * std::log((energy + momS) / (energy - momS));
    // angle
    double theta = sphericity.sphericityAxis().angle(mom3)/M_PI*180.;
    if(theta>90.) theta=180.-theta;
    // fill histos
    for(unsigned int ix=0;ix<3;++ix) {
      _histScaledMom[ix]->fill(scaledMom);
      _histPt2S     [ix]->fill(fabs(pT2/GeV));
      _histPtS      [ix]->fill(fabs(pT/GeV));
      _histPtSIn    [ix]->fill(fabs(pTinS/GeV));
      _histPtSOut   [ix]->fill(fabs(pToutS/GeV));
      _histRapidityS[ix]->fill(fabs(rapidityS));
      _histTheta    [ix]->fill(theta);
    }
      }
      // energy flow includes neutral w.r.t sphericity axis
      const FinalState& fs = apply<FinalState>(event, "FS");
      for (const Particle& p : fs.particles()) {
        // Get momentum and energy of each particle.
        const Vector3 mom3 = p.p3();
        const double energy = p.E();
    // angle
    double theta = sphericity.sphericityAxis().angle(mom3)/M_PI*180.;
    if(theta>90.) theta=180.-theta;
    // fill histos
    for(unsigned int ix=0;ix<3;++ix) {
      _histETheta   [ix]->fill(theta,energy);
    }
      }
    }

    /// Normalise histograms etc., after the run
    void finalize() {
      for(unsigned int ix=0;ix<3;++ix) {
    scale(_histAplanarity [ix]  ,1./sumOfWeights());
    scale(_histQx         [ix]  ,1./sumOfWeights());
    scale(_histQ2Q1       [ix]  ,1./sumOfWeights());
    scale(_histSphericity [ix]  ,1./sumOfWeights());
    scale(_histThrust     [ix]  ,1./sumOfWeights());
    scale(_histMinor      [ix]  ,1./sumOfWeights());
    scale(_histOblateness [ix]  ,1./sumOfWeights());
    scale(_histMJetBroad  [ix]  ,1./sumOfWeights());
    scale(_histMJetSlim   [ix]  ,1./sumOfWeights());
    scale(_histMJetDiff   [ix]  ,1./sumOfWeights());
    scale(_histScaledMom  [ix]  ,1./sumOfWeights());
    scale(_histPt2S       [ix]  ,1./sumOfWeights());
    scale(_histPtS        [ix]  ,1./sumOfWeights());
    scale(_histPtSIn      [ix]  ,1./sumOfWeights());
    scale(_histPtSOut     [ix]  ,1./sumOfWeights());
    scale(_histRapidityS  [ix]  ,1./sumOfWeights());
    scale(_histTheta      [ix]  ,1./sumOfWeights());
    scale(_histETheta     [ix]  ,1./sumOfWeights());
      }
    }

    ///@}


    /// @name Histograms
    ///@{
    Histo1DPtr _histAplanarity[3],_histQx[3],_histQ2Q1[3],_histSphericity[3];
    Histo1DPtr _histThrust[3],_histMinor[3],_histOblateness[3];
    Histo1DPtr _histMJetBroad[3],_histMJetSlim[3],_histMJetDiff[3];
    Histo1DPtr _histScaledMom[3],_histPt2S[3],_histPtS[3],_histPtSIn[3],_histPtSOut[3],_histRapidityS[3];
    Histo1DPtr _histTheta[3],_histETheta[3];
    ///@}


  };


  RIVET_DECLARE_PLUGIN(MARKII_1988_I246184);

}