rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

AMY_1990_I283337

Event shapes in $e^+e^-$ collisions at 55.2 GeV
Experiment: AMY (Tristan)
Inspire ID: 283337
Status: VALIDATED
Authors:
  • Your Name
References:
  • Phys.Rev. D41 (1990) 2675, 1990
Beams: e- e+
Beam energies: (27.6, 27.6) GeV
Run details:
  • e+e- to hadrons

Measurement of a wide range of event shapes by the AMY experiment at Tristan with an average centre-of-mass energy of $55.2$ GeV.

Source code: AMY_1990_I283337.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/Beam.hh"
  4#include "Rivet/Projections/Sphericity.hh"
  5#include "Rivet/Projections/Thrust.hh"
  6#include "Rivet/Projections/FinalState.hh"
  7#include "Rivet/Projections/Hemispheres.hh"
  8
  9namespace Rivet {
 10
 11  /// @brief Event shapes at 55.2
 12  class AMY_1990_I283337 : public Analysis {
 13  public:
 14
 15    /// Constructor
 16    RIVET_DEFAULT_ANALYSIS_CTOR(AMY_1990_I283337);
 17
 18
 19    /// @name Analysis methods
 20    //@{
 21
 22    /// Book histograms and initialise projections before the run
 23    void init() {
 24      declare(Beam(), "Beams");
 25      const FinalState fs;
 26      declare(fs, "FS");
 27      const Sphericity sphere(fs);
 28      declare(sphere, "Sphericity");
 29      const Thrust thrust(fs);
 30      declare(thrust, "Thrust");
 31      declare(Hemispheres(sphere), "Hemispheres");
 32      // histograms
 33      book(_histRapidityT , 1, 1, 1);
 34      book(_histScaledMom , 2, 1, 1);
 35      book(_histPl        , 3, 1, 1);
 36      book(_histPt        , 4, 1, 1);
 37      book(_histPt2       , 5, 1, 1);
 38      book(_histPtIn      , 6, 1, 1);
 39      book(_histPtOut     , 7, 1, 1);
 40      book(_histMeanPtIn2 , 8, 1, 1);
 41      book(_histMeanPtOut2, 9, 1, 1);
 42      book(_histNtheta    ,10, 1, 1);
 43      book(_histEtheta    ,11, 1, 1);
 44      book(_histThrust    ,12, 1, 1);
 45      book(_histMajor     ,13, 1, 1);
 46      book(_histMinor     ,14, 1, 1);
 47      book(_histOblateness,15, 1, 1);
 48      book(_histSphericity,16, 1, 1);
 49      book(_histAplanarity,17, 1, 1);
 50      book(_histQx        ,18, 1, 1);
 51      book(_histQ21       ,19, 1, 1);
 52      book(_histRhoLight  ,20, 1, 1);
 53      book(_histRhoHeavy  ,21, 1, 1);
 54      book(_histRhoDiff   ,22, 1, 1);
 55      book(_wSum,"TMP/wSum");
 56    }
 57
 58
 59    /// Perform the per-event analysis
 60    void analyze(const Event& event) {
 61      // First, veto on leptonic events by requiring at least 4 charged FS particles
 62      const FinalState& fs = apply<FinalState>(event, "FS");
 63      const size_t numParticles = fs.particles().size();
 64      // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
 65      if (numParticles < 2) {
 66        MSG_DEBUG("Failed leptonic event cut");
 67        vetoEvent;
 68      }
 69      MSG_DEBUG("Passed leptonic event cut");
 70      _wSum->fill();
 71
 72      // Get beams and average beam momentum
 73      const ParticlePair& beams = apply<Beam>(event, "Beams").beams();
 74      const double meanBeamMom = ( beams.first.p3().mod() +
 75                                   beams.second.p3().mod() ) / 2.0;
 76      MSG_DEBUG("Avg beam momentum = " << meanBeamMom);
 77
 78      // Thrusts
 79      MSG_DEBUG("Calculating thrust");
 80      const Thrust& thrust = apply<Thrust>(event, "Thrust");
 81      _histThrust    ->fill(thrust.thrust()     );
 82      _histMajor     ->fill(thrust.thrustMajor());
 83      _histMinor     ->fill(thrust.thrustMinor());
 84      _histOblateness->fill(thrust.oblateness() );
 85      // Sphericities
 86      MSG_DEBUG("Calculating sphericity");
 87      const Sphericity& sphericity = apply<Sphericity>(event, "Sphericity");
 88      _histSphericity->fill(sphericity.sphericity());
 89      _histAplanarity->fill(sphericity.aplanarity());
 90      _histQx        ->fill(sqrt(1./3.)*(sphericity.lambda1()-sphericity.lambda2()));
 91      _histQ21       ->fill(sphericity.lambda2()-sphericity.lambda3());
 92      // Hemispheres
 93      MSG_DEBUG("Calculating hemisphere variables");
 94      const Hemispheres& hemi = apply<Hemispheres>(event, "Hemispheres");
 95      _histRhoHeavy->fill(hemi.scaledM2high());
 96      _histRhoLight->fill(hemi.scaledM2low() );
 97      _histRhoDiff ->fill(hemi.scaledM2diff());
 98      // single particle distributions
 99      double pTIn2(0.),pTOut2(0.);
100      unsigned int nCharged(0);
101      for (const Particle& p : fs.particles()) {
102        // Get momentum and energy of each particle.
103        const Vector3 mom3 = p.p3();
104        const double energy = p.E();
105        const double mom = mom3.mod();
106        const double scaledMom = mom/meanBeamMom;
107        const double momT = dot(thrust.thrustAxis(), mom3);
108        const double momS = dot(sphericity.sphericityAxis(), mom3);
109        const double pTinS = dot(mom3, sphericity.sphericityMajorAxis());
110        const double pToutS = dot(mom3, sphericity.sphericityMinorAxis());
111        const double pT = sqrt(pow(pTinS, 2) + pow(pToutS, 2));
112
113        const double rapidityT = 0.5 * std::log((energy + momT) / (energy - momT));
114        double angle = sphericity.sphericityAxis().angle(p.p3())/M_PI*180.;
115        if(angle>90.) angle=180.-angle;
116        if(PID::isCharged(p.pid())) {
117          _histScaledMom->fill(scaledMom);
118          _histRapidityT->fill(fabs(rapidityT));
119          _histPl       ->fill(fabs(momS)     );
120          _histPt       ->fill(pT             );
121          _histPt2      ->fill(sqr(pT)        );
122          _histPtIn     ->fill(fabs(pTinS)    );
123          _histPtOut    ->fill(fabs(pToutS)   );
124          pTIn2  += sqr(pTinS);
125          pTOut2 += sqr(pToutS);
126          _histNtheta->fill(angle);
127          ++nCharged;
128        }
129        _histEtheta->fill(angle,energy); 
130      }
131      if (nCharged) {
132        _histMeanPtIn2 ->fill( pTIn2/nCharged);
133        _histMeanPtOut2->fill(pTOut2/nCharged);
134      }
135    }
136
137
138    /// Normalise histograms etc., after the run
139    void finalize() {
140      // histograms
141      scale(_histRapidityT , 1./ *_wSum);
142      scale(_histScaledMom , 1./ *_wSum);
143      scale(_histPl        , 1./ *_wSum);
144      scale(_histPt        , 1./ *_wSum);
145      scale(_histPt2       , 1./ *_wSum);
146      scale(_histPtIn      , 1./ *_wSum);
147      scale(_histPtOut     , 1./ *_wSum);
148      scale(_histMeanPtIn2 , 1./ *_wSum);
149      scale(_histMeanPtOut2, 1./ *_wSum);
150      scale(_histNtheta    , 1./ *_wSum);
151      scale(_histEtheta    , 1./ *_wSum);
152      scale(_histThrust    , 1./ *_wSum);
153      scale(_histMajor     , 1./ *_wSum);
154      scale(_histMinor     , 1./ *_wSum);
155      scale(_histOblateness, 1./ *_wSum);
156      scale(_histSphericity, 1./ *_wSum);
157      scale(_histAplanarity, 1./ *_wSum);
158      scale(_histQx        , 1./ *_wSum);
159      scale(_histQ21       , 1./ *_wSum);
160      scale(_histRhoLight  , 1./ *_wSum);
161      scale(_histRhoHeavy  , 1./ *_wSum);
162      scale(_histRhoDiff   , 1./ *_wSum);
163    }
164
165    //@}
166
167
168    /// @name Histograms
169    //@{
170    Histo1DPtr _histRapidityT, _histScaledMom, _histPl, _histPt, _histPt2, _histPtIn, _histPtOut,
171      _histMeanPtIn2, _histMeanPtOut2, _histNtheta, _histEtheta, _histThrust, _histMajor, _histMinor,
172      _histOblateness, _histSphericity, _histAplanarity, _histQx, _histQ21, _histRhoLight,
173      _histRhoHeavy, _histRhoDiff;
174    CounterPtr _wSum;
175    //@}
176
177
178  };
179
180
181  // The hook for the plugin system
182  RIVET_DECLARE_PLUGIN(AMY_1990_I283337);
183
184
185}