Energy and Angular Measures

The appropriate notions of energy and angle depend on the collider context. Typically, one wants to work with observables that respect the appropriate Lorentz subgroup for the collision type of interest. EnergyFlow is capable of handling two broad classes of measures: $e^+e^-$ and hadronic, which are selected using the required measure argument. For substructure applications, it is often convenient to normalize the energies so that $\sum_iz_i=1$. The normed keyword argument is provided to control normalization of the energies (default is True).

Each measure comes with a parameter $\beta>0$ which controls the relative weighting between smaller and larger anglular structures. This can be set using the beta keyword argument (default is 1). There is also a $\kappa$ parameter to control the relative weighting between soft and hard energies. This can be set using the kappa keyword argument (default is 1). Only kappa=1 yields collinear-safe observables.

Beyond the measures implemented here, the user can implement their own custom measure by passing in ${z_i}$ and ${\theta_{ij}}$ directly to the EFP classes.

Hadronic Measures

For hadronic collisions, observables are typically desired to be invariant under boosts along the beam direction and rotations about the beam direction. Thus, particle transverse momentum $p_T$ and rapidity-azimuth coordinates $(y,\phi)$ are used.

There are two hadronic measures implemented in EnergyFlow: 'hadr' and 'hadrdot'. These are listed explicitly below.



e+e- Measures

For $e^+e^-$ collisions, observables are typically desired to be invariant under the full group of rotations about the interaction point. Since the center of momentum energy is known, the particle energy $E$ is typically used. For the angular measure, pairwise Lorentz contractions of the normalized particle four-momenta are used.

There is one $e^+e^-$ measure implemented.



Class for dealing with any kind of measure.

energyflow.Measure(measure, beta=1, kappa=1, normed=True, coords=None, check_input=True)

Processes inputs according to the measure choice.


  • measure : string
    • The string specifying the energy and angular measures to use.
  • beta : float
    • The angular weighting exponent $\beta$. Must be positive.
  • kappa : {float, 'pf'}
    • If a number, the energy weighting exponent $\kappa$. If 'pf', use $\kappa=v$ where $v$ is the valency of the vertex. 'pf' cannot be used with measure 'hadr'. Only IRC-safe for kappa=1.
  • normed : bool
    • Whether or not to use normalized energies.
  • coords : {'ptyphim', 'epxpypz', None}
    • Controls which coordinates are assumed for the input. If 'ptyphim', the fourth column (the masses) is optional and massless particles are assumed if it is not present. If None, coords with be 'ptyphim' if using a hadronic measure and 'epxpypz' if using the e+e- measure.
  • check_input : bool
    • Whether to check the type of input each time or assume the first input type.



Evaluate the measure on a set of particles.


  • arg : 2-d numpy.ndarray
    • A two-dimensional array of the particles with each row being a particle and the columns specified by the coords attribute.


  • ( 1-d numpy.ndarray, 2-d numpy.ndarray)
    • (zs, thetas) where zs is a vector of the energy fractions for each particle and thetas is the distance matrix between the particles.