Mathematical utilities (skhep.math)¶
Module for mathematical functions and utilities.
This module contains in particular:
- Vector classes.
- Geometry classes.
Mathematical functions relevant to kinematics¶
-
skhep.math.kinematics.
Kallen_function
(x, y, z)¶ The Kallen function, aka triangle or lambda function, named after physicist Anders Olof Gunnar Kallen [Kallen].
\[\begin{split}\begin{eqnarray} \lambda(x,y,z) &=& x^2 + y^2 + z^2 - 2 x y - 2 y z - 2 z x \\ &=& (x-y-z)^2 - 4 y z \\ &=& [ x - (\sqrt{y}+\sqrt{z})^2 ] [ x - (\sqrt{y}-\sqrt{z})^2 ] \,\,\,\mathrm{if} \,\,\,y, z > 0 \end{eqnarray}\end{split}\]Example
Calculate in the rest frame of a particle of mass M decaying to 2 particles labeled 1 and 2, \(P (M) \to p1 (m1) + p2 (m2)\), the momenta of 1 and 2 given by \(p = |\mathbf{p1}| = |\mathbf{p2}|\):
>>> from skhep.math import Kallen_function >>> from skhep.units import MeV, GeV >>> from math import sqrt >>> M = 5.279 * GeV; m1 = 493.7 * MeV; m2 = 139.6 * MeV >>> p = sqrt( Kallen_function( M**2, m1**2, m2**2 ) ) / (2*M) >>> print p / GeV # print the CMS momentum in GeV 2.61453580221
[Kallen] https://en.wikipedia.org/wiki/K%C3%A4ll%C3%A9n_function
-
skhep.math.kinematics.
lifetime_to_width
(tau)¶ Convert from a particle lifetime to a decay width.
Parameters: tau (float > 0) – Particle lifetime, typically in picoseconds (any HEP time unit is OK). Returns: Return type: Particle decay width, in the HEP standard energy unit MeV.
-
skhep.math.kinematics.
width_to_lifetime
(Gamma)¶ Convert from a particle decay width to a lifetime.
Parameters: Gamma (float > 0) – Particle decay width, typically in MeV (any HEP energy unit is OK). Returns: Return type: Particle lifetime, in the HEP standard time unit ns.
Vector classes¶
Two vector classes are available:
Vector3D
: a 3-dimensional vector.LorentzVector
: a Lorentz vector, i.e. a 4-dimensional Minkowski space-time vector- or a 4-momentum vector. The metric is (-1,-1,-1,+1).
-
class
skhep.math.vectors.
LorentzVector
(x=0.0, y=0.0, z=0.0, t=0.0)¶ Class representing a Lorentz vector, either a 4-dimensional Minkowski space-time vector or a 4-momentum vector. The 4-vector components can be seen as (x,y,z,t) or (px,py,pz,E).
- Constructors:
- __init__(x=0., y=0., z=0., t=0.) from4vector(avector) from3vector(vector3d, t)
-
beta
¶ Return \(\beta = v/c\).
-
boost
(*args)¶ Apply a Lorentz boost on the Lorentz vector.
-
boostvector
¶ Return the spatial component divided by the time component.
-
copy
()¶ Get a copy of the LorentzVector.
Example
>>> v = ... >>> v1 = v.copy()
-
costheta
()¶ Return the cosinus of the spherical coordinate theta.
-
deltaeta
(other)¶ Return the pseudorapidity difference, \(\Delta \eta\), with another Lorentz vector.
-
deltaphi
(other)¶ Return the phi angle difference, \(\Delta \phi\), with another Lorentz vector.
-
deltar
(other)¶ Return \(\Delta R\) the distance in (eta,phi) space with another Lorentz vector, defined as: \(\Delta R = \sqrt{(\Delta \eta)^2 + (\Delta \phi)^2}\)
-
dot
(other)¶ Dot product with another Lorentz vector.
-
e
¶ Return the energy/time component, aka momentum coordinate at position 3.
-
et
¶ Return the transverse energy.
-
eta
¶ Return the pseudorapidity.
-
classmethod
from3vector
(vector3d, t)¶ Constructor from a Vector3D and the time/energy component.
-
classmethod
from4vector
(other)¶ Copy constructor.
-
classmethod
fromiterable
(values)¶ Constructor from a suitable iterable object. Suitable means here that all entries are numbers and the length equals 4.
-
gamma
¶ Return \(\gamma = 1/\sqrt{1-\beta^2}\).
-
islightlike
()¶ Check if Lorentz Vector is light-like.
-
isspacelike
()¶ Check if Lorentz Vector is space-like.
-
istimelike
()¶ Check if Lorentz Vector is time-like.
-
m
¶ Return the invariant mass.
-
m2
¶ Return the square of the invariant mass.
-
mag
¶ Magnitude, a.k.a. norm, of the Lorentz vector.
-
mag2
¶ Square of the magnitude, a.k.a. norm, of the Lorentz vector.
-
mass
¶ Return the invariant mass.
-
mass2
¶ Return the square of the invariant mass.
-
mt
¶ Return the transverse mass.
-
mt2
¶ Return the square of the transverse mass.
-
p
¶ Return the momentum, aka norm of the momentum vector.
-
perp
¶ Transverse component of the spatial components.
-
perp2
¶ Square of the transverse component, in the (x,y) plane, of the spatial components.
-
phi
(deg=False)¶ Return the spherical or cylindrical coordinate phi.
deg : return the angle in degrees (default is radians)
-
pseudorapidity
¶ “Return the pseudorapidity. Alternative to eta() method.
-
pt
¶ Return the transverse momentum, aka transverse component of the momentum vector.
-
px
¶ Return the Vector3D coordinate px, aka first momentum coordinate at position 0.
-
py
¶ Return the Vector3D coordinate px, aka second momentum coordinate at position 1.
-
pz
¶ Return the Vector3D coordinate pz, aka third momentum coordinate at position 2.
-
rapidity
¶ Return the rapidity.
-
rotate
(angle, *args)¶ Rotate vector by a given angle (in radians) around a given axis.
-
rotatex
(angle)¶ Rotate vector by a given angle (in radians) around the x axis.
-
rotatey
(angle)¶ Rotate vector by a given angle (in radians) around the y axis.
-
rotatez
(angle)¶ Rotate vector by a given angle (in radians) around the z axis.
-
set
(x, y, z, t)¶ Update/set all components at once.
-
setptetaphie
(pt, eta, phi, e)¶ Set the transverse momentum, the pseudorapidity, the angle phi and the energy.
-
setptetaphim
(pt, eta, phi, m)¶ Set the transverse momentum, the pseudorapidity, the angle phi and the mass.
-
setpxpypze
(px, py, pz, e)¶ Set the px,py,pz components and the energy.
-
setpxpypzm
(px, py, pz, m)¶ Set the px,py,pz components and the mass.
-
t
¶ Return the time/energy component, aka coordinate at position 3.
-
theta
(deg=False)¶ Return the spherical coordinate theta.
- Options:
- deg : return the angle in degrees (default is radians)
-
tolist
()¶ Return the LorentzVector as a list.
-
transversemass
¶ Return the transverse mass.
-
transversemass2
¶ Return the square of the transverse mass.
-
vector
¶ Return a copy of the vector of spatial components.
-
x
¶ Return the coordinate x, aka first coordinate at position 0.
-
y
¶ Return the coordinate x, aka second coordinate at position 1.
-
z
¶ Return the coordinate z, aka third coordinate at position 2.
-
class
skhep.math.vectors.
Vector3D
(x=0.0, y=0.0, z=0.0)¶ Vector class in 3 dimensions.
- Constructors:
- __init__(x=0., y=0., z=0.) origin() frompoint(x, y, z) fromvector(avector) fromsphericalcoords(r, theta, phi) fromcylindricalcoords(rho, phi, z) fromiterable(values)
-
angle
(other, deg=False)¶ Angle with respect to another vector.
deg : return the angle in degrees (default is radians)
-
copy
()¶ Get a copy of the vector.
Example
>>> v = ... >>> v1 = v.copy()
-
cosdelta
(other)¶ Get cos(angle) with respect to another vector
-
costheta
()¶ Return the cosinus of the spherical coordinate theta.
-
cross
(other)¶ Cross product with another vector.
-
dot
(other)¶ Dot product with another vector.
-
classmethod
fromcylindricalcoords
(rho, phi, z)¶ Constructor from a space point specified in cylindrical coordinates.
Parameters: - rho (radial distance from the z-axis (rho > 0)) –
- phi (azimuthal angle in radians (phi in [-pi, pi) rad)) –
- z (height) –
-
classmethod
fromiterable
(values)¶ Constructor from a suitable iterable object. Suitable means here that all entries are numbers and the length equals 3.
-
classmethod
frompoint
(x, y, z)¶ Constructor from an explicit space point.
-
classmethod
fromsphericalcoords
(r, theta, phi)¶ Constructor from a space point specified in spherical coordinates.
Parameters: - r (radius, the radial distance from the origin (r > 0)) –
- theta (inclination in radians (theta in [0, pi] rad)) –
- phi (azimuthal angle in radians (phi in [0, 2pi) rad)) –
-
classmethod
fromvector
(other)¶ Copy constructor.
-
isantiparallel
(other)¶ Check if another vector is antiparallel. Two vectors are antiparallel if they have opposite direction but not necessarily the same magnitude.
-
iscollinear
(other)¶ Check if another vector is collinear Two vectors are collinear if they have parallel or antiparallel
-
isopposite
(other)¶ Two vectors are opposite if they have the same magnitude but opposite direction.
-
isparallel
(other)¶ Check if another vector is parallel. Two vectors are parallel if they have the same direction but not necessarily the same magnitude.
-
isperpendicular
(other)¶ Check if another vector is perpendicular.
-
mag
¶ Magnitude, a.k.a. norm, of the vector.
-
mag2
¶ Square of the magnitude, a.k.a. norm, of the vector.
-
classmethod
origin
()¶ Shortcut constuctor for the origin (x=0.,y=0.,z=0.). Equivalent to the default constructor Vector3D().
-
phi
(deg=False)¶ Return the spherical or cylindrical coordinate phi.
deg : return the angle in degrees (default is radians)
-
r
¶ Return the spherical coordinate r.
-
rho
¶ Return the cylindrical coordinate rho.
-
rotate
(angle, *args)¶ Rotate vector by a given angle (in radians) around a given axis.
-
rotatex
(angle)¶ Rotate vector by a given angle (in radians) around the x axis.
-
rotatey
(angle)¶ Rotate vector by a given angle (in radians) around the y axis.
-
rotatez
(angle)¶ Rotate vector by a given angle (in radians) around the z axis.
-
set
(x, y, z)¶ Update the vector components all at once.
-
theta
(deg=False)¶ Return the spherical coordinate theta.
deg : return the angle in degrees (default is radians)
-
tolist
()¶ Return the vector as a list.
-
unit
()¶ Return the normalized vector, i.e. the unit vector along the direction of itself.
-
x
¶ Return the x, aka first coordinate at position 0.
-
y
¶ Return the y, aka second coordinate at position 1.
-
z
¶ Return the z, aka third coordinate at position 2.
Geometry classes¶
Three geometry classes are available:
* Point3D
: a point in 3-dimensional space
* Line3D
: a line in 3-dimensional space
* Plane3D
: a plane in 3-dimensional space
-
class
skhep.math.geometry.
Vector3D
(x=0.0, y=0.0, z=0.0)¶ Vector class in 3 dimensions.
- Constructors:
- __init__(x=0., y=0., z=0.) origin() frompoint(x, y, z) fromvector(avector) fromsphericalcoords(r, theta, phi) fromcylindricalcoords(rho, phi, z) fromiterable(values)
-
angle
(other, deg=False)¶ Angle with respect to another vector.
deg : return the angle in degrees (default is radians)
-
copy
()¶ Get a copy of the vector.
Example
>>> v = ... >>> v1 = v.copy()
-
cosdelta
(other)¶ Get cos(angle) with respect to another vector
-
costheta
()¶ Return the cosinus of the spherical coordinate theta.
-
cross
(other)¶ Cross product with another vector.
-
dot
(other)¶ Dot product with another vector.
-
classmethod
fromcylindricalcoords
(rho, phi, z)¶ Constructor from a space point specified in cylindrical coordinates.
Parameters: - rho (radial distance from the z-axis (rho > 0)) –
- phi (azimuthal angle in radians (phi in [-pi, pi) rad)) –
- z (height) –
-
classmethod
fromiterable
(values)¶ Constructor from a suitable iterable object. Suitable means here that all entries are numbers and the length equals 3.
-
classmethod
frompoint
(x, y, z)¶ Constructor from an explicit space point.
-
classmethod
fromsphericalcoords
(r, theta, phi)¶ Constructor from a space point specified in spherical coordinates.
Parameters: - r (radius, the radial distance from the origin (r > 0)) –
- theta (inclination in radians (theta in [0, pi] rad)) –
- phi (azimuthal angle in radians (phi in [0, 2pi) rad)) –
-
classmethod
fromvector
(other)¶ Copy constructor.
-
isantiparallel
(other)¶ Check if another vector is antiparallel. Two vectors are antiparallel if they have opposite direction but not necessarily the same magnitude.
-
iscollinear
(other)¶ Check if another vector is collinear Two vectors are collinear if they have parallel or antiparallel
-
isopposite
(other)¶ Two vectors are opposite if they have the same magnitude but opposite direction.
-
isparallel
(other)¶ Check if another vector is parallel. Two vectors are parallel if they have the same direction but not necessarily the same magnitude.
-
isperpendicular
(other)¶ Check if another vector is perpendicular.
-
mag
¶ Magnitude, a.k.a. norm, of the vector.
-
mag2
¶ Square of the magnitude, a.k.a. norm, of the vector.
-
classmethod
origin
()¶ Shortcut constuctor for the origin (x=0.,y=0.,z=0.). Equivalent to the default constructor Vector3D().
-
phi
(deg=False)¶ Return the spherical or cylindrical coordinate phi.
deg : return the angle in degrees (default is radians)
-
r
¶ Return the spherical coordinate r.
-
rho
¶ Return the cylindrical coordinate rho.
-
rotate
(angle, *args)¶ Rotate vector by a given angle (in radians) around a given axis.
-
rotatex
(angle)¶ Rotate vector by a given angle (in radians) around the x axis.
-
rotatey
(angle)¶ Rotate vector by a given angle (in radians) around the y axis.
-
rotatez
(angle)¶ Rotate vector by a given angle (in radians) around the z axis.
-
set
(x, y, z)¶ Update the vector components all at once.
-
theta
(deg=False)¶ Return the spherical coordinate theta.
deg : return the angle in degrees (default is radians)
-
tolist
()¶ Return the vector as a list.
-
unit
()¶ Return the normalized vector, i.e. the unit vector along the direction of itself.
-
x
¶ Return the x, aka first coordinate at position 0.
-
y
¶ Return the y, aka second coordinate at position 1.
-
z
¶ Return the z, aka third coordinate at position 2.
-
class
skhep.math.geometry.
Point3D
(*args, **kwargs)¶ Point in 3D space
-
copy
()¶ Make a copy of this point.
-
classmethod
fromcylindricalcoords
(rho, phi, z)¶ Constructor from a space point specified in cylindrical coordinates.
Parameters: - rho (radial distance from the z-axis (rho > 0)) –
- phi (azimuthal angle in radians (phi in [-pi, pi) rad)) –
- z (height) –
-
classmethod
fromiterable
(values)¶ Constructor from a suitable iterable object. Suitable means here that all entries are numbers and the length equals 3.
-
classmethod
frompoint
(x, y, z)¶ Constructor from an explicit space point.
-
classmethod
fromsphericalcoords
(r, theta, phi)¶ Constructor from a space point specified in spherical coordinates.
Parameters: - r (radius, the radial distance from the origin (r > 0)) –
- theta (inclination in radians (theta in [0, pi] rad)) –
- phi (azimuthal angle in radians (phi in [0, 2pi) rad)) –
-
classmethod
fromvector
(other)¶ Copy constructor.
-
mag
¶ Magnitude, a.k.a. norm, of the point.
-
mag2
¶ Square of the magnitude, a.k.a. norm, of the point.
-
on_line
(line)¶ In the point on the line?
-
on_plane
(plane)¶ Is the point on the plane?
-
classmethod
origin
()¶ Shortcut constuctor for the origin (x=0.,y=0.,z=0.). Equivalent to the default constructor Point3D().
-
phi
¶ Return the spherical or cylindrical coordinate phi.
deg : float. Return the angle in degrees (default is radians).
-
rho
¶ Return the cylindrical coordinate rho.
-
theta
¶ Return the spherical coordinate theta.
deg : float. Return the angle in degrees (default is radians).
-
tolist
()¶ Return the vector as a list.
-
x
¶ Return the x, aka first coordinate at position 0.
-
y
¶ Return the y, aka second coordinate at position 1.
-
z
¶ Return the z, aka third coordinate at position 2.
-
-
class
skhep.math.geometry.
Line3D
(point=<Point3D(x=0, y=0, z=0)>, vector=<Vector3D (x=0, y=0, z=1)>)¶ Line in 3D space. Line is defined by a point on line and by the direction.
-
closest_point
(point)¶ Get the point on line that is closest to the given point in space.
Example
>>> line = ... >>> point = ... >>> closest = line.closest_point ( point )
-
closest_point_param
(point)¶ Get the ``mu’’ parameter of the point on line that is closest to the given point in space.
Example
>>> line = ... >>> point = ... >>> mu = line.closest_point_param ( point )
-
closest_points
(line)¶ Get two points on lines that is closest to each other.
Example
>>> line1 = ... >>> line2 = ... >>> p1 , p2 = line1.closest_points ( line2 )
-
closest_points_params
(line)¶ Get the ``mu’’ parameters of two points on lines that is closest to each other.
Example
>>> line1 = ... >>> line2 = ... >>> mu1 , mu2 = line1.closest_points_param ( line2 )
-
copy
()¶ Make a copy of this line.
-
distance
(other)¶ Get ``distance’’ between line and other object.
Example
>>> line = ... >>> point = ... >>> line2 = ... >>> plane = ... >>> print line.distance ( line2 ) >>> print line.distance ( point ) >>> print line.distance ( plane )
-
classmethod
from_line
(line)¶ Create the line from anoother line.
-
classmethod
from_points
(point1, point2)¶ Create the line from two points.
Parameters: - point1 (the first point on the line) –
- point2 (the second point on the line) –
-
iscollinear
(other)¶ Is the line collinear to another line or vector?
-
on_plane
(plane)¶ Is the line on the plane?
-
-
class
skhep.math.geometry.
Plane3D
(point=<Point3D(x=0, y=0, z=0)>, normal=<Vector3D (x=0, y=0, z=1)>)¶ Plane in 3D space Plane is defined by a point on plane and by the normal vector
-
copy
()¶ Make a copy of this plane.
-
distance
(other)¶ Get ``distance’’ between plane and other object.
Example
>>> line = ... >>> point = ... >>> line2 = ... >>> plane = ... >>> print line.distance ( line2 ) >>> print line.distance ( point ) >>> print line.distance ( plane )
-
classmethod
from_line_and_point
(line, point)¶ Create the plane from the line and point.
Parameters: - line (the line in plane) –
- point (the point in plane) –
-
classmethod
from_points
(point1, point2, point3)¶ Create the plane from three points.
Parameters: - point1 (the first point on the plane) –
- point2 (the second point on the plane) –
- point3 (the third point on the plane) –
-
isparallel
(other)¶ Is the plane collinear to another line, vector or plane?
-
-
skhep.math.geometry.
distance
(obj1, obj2)¶ Calculate 3D-distance between two geometry objects (points, lines, planes).
Examples
>>> line1 = ... >>> line2 = ... >>> point1 = ... >>> point2 = ... >>> plane1 = ... >>> plane2 = ... >>> for o1 in ( line1, line2 , point1 , point2 , plane1 , plane2 ) : ... for o2 in ( line1, line2 , point1 , point2 , plane1 , plane2 ) : ... print distance ( o1 , o2 )