Sphericity tensor

From Particle Wiki
(Redirected from Sphericity)
Jump to: navigation, search

The sphericity tensor is the basis for calculation of sphericity and aplanarity, two event shape observables particularly suited for e^+ e^- \rightarrow Z^0/\gamma* \rightarrow q\bar{q}, and routinely used in several LEP analyses.


The sphericity tensor is defined as:

S^{ab} = \frac{\sum_i p_i^a p_i^b}{\sum_i |p_i|^2}.

Here p_i are the four-momenta of all particles in an event. Superscript a and b indicates spatial components, and the sphericity tensor can thus be represented as a 3-by-3 matrix. As such, three eigenvalues can be found. If they are ordered as \lambda_1 \geq \lambda_2 \geq \lambda_3, the sphericity is defined as:

S = \frac{3}{2}(\lambda_2 + \lambda_3).

The similar quantity aplanarity is defined as:

A = \frac{3}{2}\lambda_1

Physical meaning

The eigenvector corresponding to \lambda_1 is called the sphericity axis. S measures the amount of p_\perp^2 with respect to that axis, and is constrained to values 1 \geq S \geq 0. An event with sphericity 0 is a clean dijet event, and sphericity 1 signifies an isotropic event.

The eigenvectors corresponding to \lambda_2 and \lambda_3 spans a plane, the so-called sphericity plane. Aplanarity measures the p_\perp out of that plane, is constrained to 0.5 \geq A \geq 0. Similarly to S, A is used to signify the isotropicity of the event.

Sphericity is not an infrared safe quantity. Since it is quadratic in particle momenta, its value will change if a particle splits up into two collinear particles.

The ALEPH measurement of out of plane transverse momentum.
The ALEPH measurement of out of plane transverse momentum, compared to standard event generators. From MCPLOTS.

Data and description

Sphericity and aplanarity was measured in all the LEP experiments, and the data are particularly important for tuning of parton showers. Measurements and comparisons to event generators can be found at MCplots for sphericity and aplanarity.

The p_\perp out of the sphericity plane is a particularly interesting observable, as it has been problematic to describe for all the standard parton shower generators, see e.g. the measurement by ALEPH in the figure.

In Rivet

In the Rivet framework, projections are in place to calculate the sphericity tensor, its eigenvalues and corresponding eigenvectors. Below example code is shown for calculating them all. The example is a full Rivet analysis in itself, which can be compiled with rivet-buildplugin RivetSphericityExample.so SphericityExample.cc --std=c++11. The example just calculates the quantities. One should then fill histograms as needed, etc.

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

namespace Rivet {

  /// @brief Sphericity example calculation
  class SphericityExample : public Analysis {

    /// Constructor
      : Analysis("SphericityExample")
    {    }

    /// @name Analysis methods

    void init() {
      // Projection containing charged particles of the event
      const ChargedFinalState cfs;
      addProjection(cfs, "CFS");
      // The sphericity projection
      addProjection(Sphericity(cfs), "Sphericity");

    /// Perform the per-event analysis
    void analyze(const Event& event) {
      // The charged final state particles
      const ChargedFinalState& cfs = applyProjection<ChargedFinalState>(event, "CFS");
      // Apply the projection
      const Sphericity& sphericity = applyProjection<Sphericity>(event, "Sphericity");
      // Calculate the sphericity
      const double sph = sphericity.sphericity();
      // Calculate the aplanarity
      const double apl = sphericity.aplanarity();
      // We now loop over the charged particles
      for(const Particle& p : cfs.particles()){
	// We calculated the particle pT wrt. the axes of the sphericity plane
	// First pTout
	const double pTout = dot(p.p3(),sphericity.sphericityMinorAxis());
	// Then pTin
	const double pTin = dot(p.p3(),sphericity.sphericityMajorAxis());
    void finalize() {


  // The hook for the plugin system