# Sphericity tensor

The **sphericity tensor** is the basis for calculation of **sphericity** and **aplanarity**, two event shape observables particularly suited for , and routinely used in several LEP analyses.

## Definition

The sphericity tensor is defined as:

Here 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 , the sphericity is defined as:

The similar quantity aplanarity is defined as:

## Physical meaning

The eigenvector corresponding to is called the sphericity axis. *S* measures the amount of with respect to that axis, and is constrained to values . An event with sphericity 0 is a clean dijet event, and sphericity 1 signifies an isotropic event.

The eigenvectors corresponding to and spans a plane, the so-called sphericity plane. Aplanarity measures the out of that plane, is constrained to . 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.

## 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 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 {
public:
/// Constructor
SphericityExample()
: 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
DECLARE_RIVET_PLUGIN(SphericityExample);
}
```