package hep.graphics.heprep.util;
/**
*
* @author Mark Donszelmann
*
* @version $Id: HepRepMath.java 8584 2006-08-10 23:06:37Z duns $
*/
public class HepRepMath {
// Static class, not to be instantiated
private HepRepMath() {
}
/**
* Calculates delta x
* @param x x
* @param xVertex x vertex
* @return dx
*/
public static double getX(double x, double xVertex) {
return x-xVertex;
}
/**
* Calculates delta y
* @param y y
* @param yVertex y vertex
* @return dy
*/
public static double getY(double y, double yVertex) {
return y-yVertex;
}
/**
* Calculates delta z
* @param z z
* @param zVertex z vertex
* @return dz
*/
public static double getZ(double z, double zVertex) {
return z-zVertex;
}
/**
* Calculates Rho sqrt(dx^2+dy^2)
* @param x x
* @param y y
* @param xVertex x vertex
* @param yVertex y vertex
* @return rho
*/
public static double getRho(double x, double y, double xVertex, double yVertex) {
double dx = getX(x, xVertex);
double dy = getY(y, yVertex);
return Math.sqrt(dx*dx+dy*dy);
}
/**
* Calculates Rho sqrt(x^2+y^2)
* @param x x
* @param y y
* @return rho
*/
public static double getRho(double x, double y) {
return Math.sqrt(x*x+y*y);
}
/**
* Calculates Phi atan2(dy/dx)
* @param x x
* @param y y
* @param xVertex x vertex
* @param yVertex y vertex
* @return phi
*/
public static double getPhi(double x, double y, double xVertex, double yVertex) {
return Math.atan2(getY(y, yVertex), getX(x, xVertex));
}
/**
* Calculates Phi atan2(y/x)
* @param x x
* @param y y
* @return phi
*/
public static double getPhi(double x, double y) {
return Math.atan2(y,x);
}
/**
* Return the dip angle of the track given the z-vertex position.
* @param x dx
* @param y dy
* @param z dz
* @param xVertex x vertex
* @param yVertex y vertex
* @param zVertex z vertex
* @return theta angle in radians
*/
public static double getTheta(double x, double y, double z, double xVertex, double yVertex, double zVertex) {
return Math.atan2(getRho(getX(x, xVertex), getY(y, yVertex)), getZ(z, zVertex));
}
/**
* Return the dip angle of the track assuming a zero z-vertex
* position.
* @param x dx
* @param y dy
* @param z z
* @return theta angle in radians
*/
public static double getTheta(double x, double y, double z) {
return Math.atan2(getRho(x, y), z);
}
/**
* Return the spherical radius to the point given the z-vertex
* position.
* @param x dx
* @param y dy
* @param z dz
* @param xVertex x vertex
* @param yVertex y vertex
* @param zVertex z vertex
* @return radius
*/
public static double getR(double x, double y, double z, double xVertex, double yVertex, double zVertex) {
double rho = getRho(getX(x, xVertex), getY(y, yVertex));
double dz = getZ(z, zVertex);
return Math.sqrt(rho*rho+dz*dz);
}
/**
* Return the spherical radius to the point assuming a z-vertex
* position.
* @param x dx
* @param y dy
* @param z z
* @return radius
*/
public static double getR(double x, double y, double z) {
double rho = getRho(x, y);
return Math.sqrt(rho*rho+z*z);
}
/**
* Return the pseudorapidity of the point given the z-vertex
* position.
* @param x dx
* @param y dy
* @param z dz
* @param xVertex x vertex
* @param yVertex y vertex
* @param zVertex z vertex
* @return eta
*/
public static double getEta(double x, double y, double z, double xVertex, double yVertex, double zVertex) {
double ct = Math.cos(getTheta(x, y, z, xVertex, yVertex, zVertex));
return -0.5*Math.log((1.-ct)/(1.+ct));
}
/**
* Return the pseudorapidity of the point assuming zero z-vertex
* position.
* @param x dx
* @param y dy
* @param z z
* @return eta
*/
public static double getEta(double x, double y, double z) {
double ct = Math.cos(getTheta(x, y, z));
return -0.5*Math.log((1.-ct)/(1.+ct));
}
}