Rivet analyses
Event shapes in e+e− collisions at 55.2 GeV
Experiment: AMY (Tristan)
Inspire ID: 283337
Status: VALIDATED
Authors: none listed
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
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/Beam.hh"
#include "Rivet/Projections/Sphericity.hh"
#include "Rivet/Projections/Thrust.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/Hemispheres.hh"
namespace Rivet {
/// @brief Event shapes at 55.2
class AMY_1990_I283337 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(AMY_1990_I283337);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
declare(Beam(), "Beams");
const FinalState fs;
declare(fs, "FS");
const Sphericity sphere(fs);
declare(sphere, "Sphericity");
const Thrust thrust(fs);
declare(thrust, "Thrust");
declare(Hemispheres(sphere), "Hemispheres");
// histograms
book(_histRapidityT , 1, 1, 1);
book(_histMajor ,13, 1, 1);
book(_histScaledMom , 2, 1, 1);
book(_histPl , 3, 1, 1);
book(_histPt , 4, 1, 1);
book(_histPt2 , 5, 1, 1);
book(_histPtIn , 6, 1, 1);
book(_histPtOut , 7, 1, 1);
book(_histMeanPtIn2 , 8, 1, 1);
book(_histMeanPtOut2, 9, 1, 1);
book(_histNtheta ,10, 1, 1);
book(_histEtheta ,11, 1, 1);
book(_histThrust ,12, 1, 1);
book(_histMinor ,14, 1, 1);
book(_histOblateness,15, 1, 1);
book(_histSphericity,16, 1, 1);
book(_histAplanarity,17, 1, 1);
book(_histQx ,18, 1, 1);
book(_histQ21 ,19, 1, 1);
book(_histRhoLight ,20, 1, 1);
book(_histRhoHeavy ,21, 1, 1);
book(_histRhoDiff ,22, 1, 1);
book(_wSum,"TMP/wSum");
}
/// Perform the per-event analysis
void analyze(const Event& event) {
// First, veto on leptonic events by requiring at least 4 charged FS particles
const FinalState& fs = apply<FinalState>(event, "FS");
const size_t numParticles = fs.particles().size();
// Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
if (numParticles < 2) {
MSG_DEBUG("Failed leptonic event cut");
vetoEvent;
}
MSG_DEBUG("Passed leptonic event cut");
_wSum->fill();
// Get beams and average beam momentum
const ParticlePair& beams = apply<Beam>(event, "Beams").beams();
const double meanBeamMom = ( beams.first.p3().mod() +
beams.second.p3().mod() ) / 2.0;
MSG_DEBUG("Avg beam momentum = " << meanBeamMom);
// Thrusts
MSG_DEBUG("Calculating thrust");
const Thrust& thrust = apply<Thrust>(event, "Thrust");
_histThrust ->fill(thrust.thrust() );
_histMajor ->fill(thrust.thrustMajor());
_histMinor ->fill(thrust.thrustMinor());
_histOblateness->fill(thrust.oblateness() );
// Sphericities
MSG_DEBUG("Calculating sphericity");
const Sphericity& sphericity = apply<Sphericity>(event, "Sphericity");
_histSphericity->fill(sphericity.sphericity());
_histAplanarity->fill(sphericity.aplanarity());
_histQx ->fill(sqrt(1./3.)*(sphericity.lambda1()-sphericity.lambda2()));
_histQ21 ->fill(sphericity.lambda2()-sphericity.lambda3());
// Hemispheres
MSG_DEBUG("Calculating hemisphere variables");
const Hemispheres& hemi = apply<Hemispheres>(event, "Hemispheres");
_histRhoHeavy->fill(hemi.scaledM2high());
_histRhoLight->fill(hemi.scaledM2low() );
_histRhoDiff ->fill(hemi.scaledM2diff());
// single particle distributions
double pTIn2(0.),pTOut2(0.);
unsigned int nCharged(0);
for (const Particle& p : fs.particles()) {
// Get momentum and energy of each particle.
const Vector3 mom3 = p.p3();
const double energy = p.E();
const double mom = mom3.mod();
const double scaledMom = mom/meanBeamMom;
const double momT = dot(thrust.thrustAxis(), mom3);
const double momS = dot(sphericity.sphericityAxis(), mom3);
const double pTinS = dot(mom3, sphericity.sphericityMajorAxis());
const double pToutS = dot(mom3, sphericity.sphericityMinorAxis());
const double pT = sqrt(pow(pTinS, 2) + pow(pToutS, 2));
const double rapidityT = 0.5 * std::log((energy + momT) / (energy - momT));
double angle = sphericity.sphericityAxis().angle(p.p3())/M_PI*180.;
if(angle>90.) angle=180.-angle;
if(PID::isCharged(p.pid())) {
_histScaledMom->fill(scaledMom);
_histRapidityT->fill(fabs(rapidityT));
_histPl ->fill(fabs(momS) );
_histPt ->fill(pT );
_histPt2 ->fill(sqr(pT) );
_histPtIn ->fill(fabs(pTinS) );
_histPtOut ->fill(fabs(pToutS) );
pTIn2 += sqr(pTinS);
pTOut2 += sqr(pToutS);
_histNtheta->fill(angle);
++nCharged;
}
_histEtheta->fill(angle,energy);
}
if (nCharged) {
_histMeanPtIn2 ->fill( pTIn2/nCharged);
_histMeanPtOut2->fill(pTOut2/nCharged);
}
}
/// Normalise histograms etc., after the run
void finalize() {
// histograms
scale(_histRapidityT , 1./ *_wSum);
scale(_histScaledMom , 1./ *_wSum);
scale(_histPl , 1./ *_wSum);
scale(_histPt , 1./ *_wSum);
scale(_histPt2 , 1./ *_wSum);
scale(_histPtIn , 1./ *_wSum);
scale(_histPtOut , 1./ *_wSum);
scale(_histMeanPtIn2 , 1./ *_wSum);
scale(_histMeanPtOut2, 1./ *_wSum);
scale(_histNtheta , 1./ *_wSum);
scale(_histEtheta , 1./ *_wSum);
scale(_histThrust , 1./ *_wSum);
scale(_histMajor , 1./ *_wSum);
scale(_histMinor , 1./ *_wSum);
scale(_histOblateness, 1./ *_wSum);
scale(_histSphericity, 1./ *_wSum);
scale(_histAplanarity, 1./ *_wSum);
scale(_histQx , 1./ *_wSum);
scale(_histQ21 , 1./ *_wSum);
scale(_histRhoLight , 1./ *_wSum);
scale(_histRhoHeavy , 1./ *_wSum);
scale(_histRhoDiff , 1./ *_wSum);
}
/// @}
/// @name Histograms
/// @{
Histo1DPtr _histRapidityT, _histScaledMom, _histPl, _histPt, _histPt2, _histPtIn, _histPtOut,
_histMeanPtIn2, _histMeanPtOut2, _histNtheta, _histEtheta, _histThrust, _histMajor, _histMinor,
_histOblateness, _histSphericity, _histAplanarity, _histQx, _histQ21, _histRhoLight,
_histRhoHeavy, _histRhoDiff;
CounterPtr _wSum;
/// @}
};
RIVET_DECLARE_PLUGIN(AMY_1990_I283337);
}