[Home] Restricted access for guests. The link to Java source code is disabled
Java source code of 'hephysics.vec.VecOp'
package hephysics.vec;
import hephysics.matrix.MatrixOp;
import java.util.Formatter;
import java.util.Iterator;
import java.util.List;
import java.lang.Math;
/**
* Utility methods for dealing with 3 and 4 vectors.
* @version $Id: VecOp.java 10570 2007-03-08 17:42:05Z tonyj $
*/
public class VecOp
{
private VecOp()
{
}
public static Hep3Vector add(Hep3Vector v, Hep3Vector w)
{
return (new Hep3Vector(v.x() + w.x(), v.y() + w.y(), v.z() + w.z()));
}
public static Hep3Vector sub(Hep3Vector v, Hep3Vector w)
{
return (new Hep3Vector(v.x() - w.x(), v.y() - w.y(), v.z() - w.z()));
}
public static Hep3Vector mult(double scalar, Hep3Vector v)
{
return (new Hep3Vector(scalar*v.x(), scalar*v.y(), scalar*v.z()));
}
public static Hep3Vector mult(Hep3Matrix m, Hep3Vector v)
{
double w1 = v.x()*m.e(0,0) + v.y()*m.e(0,1) + v.z()*m.e(0,2);
double w2 = v.x()*m.e(1,0) + v.y()*m.e(1,1) + v.z()*m.e(1,2);
double w3 = v.x()*m.e(2,0) + v.y()*m.e(2,1) + v.z()*m.e(2,2);
return (new Hep3Vector(w1, w2, w3));
}
public static Hep3Matrix mult(Hep3Matrix m1, Hep3Matrix m2)
{
double e0 = m1.e(0,0) * m2.e(0,0) + m1.e(0,1) * m2.e(1,0) + m1.e(0,2) * m2.e(2,0);
double e1 = m1.e(0,0) * m2.e(0,1) + m1.e(0,1) * m2.e(1,1) + m1.e(0,2) * m2.e(2,1);
double e2 = m1.e(0,0) * m2.e(0,2) + m1.e(0,1) * m2.e(1,2) + m1.e(0,2) * m2.e(2,2);
double e3 = m1.e(1,0) * m2.e(0,0) + m1.e(1,1) * m2.e(1,0) + m1.e(1,2) * m2.e(2,0);
double e4 = m1.e(1,0) * m2.e(0,1) + m1.e(1,1) * m2.e(1,1) + m1.e(1,2) * m2.e(2,1);
double e5 = m1.e(1,0) * m2.e(0,2) + m1.e(1,1) * m2.e(1,2) + m1.e(1,2) * m2.e(2,2);
double e6 = m1.e(2,0) * m2.e(0,0) + m1.e(2,1) * m2.e(1,0) + m1.e(2,2) * m2.e(2,0);
double e7 = m1.e(2,0) * m2.e(0,1) + m1.e(2,1) * m2.e(1,1) + m1.e(2,2) * m2.e(2,1);
double e8 = m1.e(2,0) * m2.e(0,2) + m1.e(2,1) * m2.e(1,2) + m1.e(2,2) * m2.e(2,2);
return new Hep3Matrix(e0,e1,e2,e3,e4,e5,e6,e7,e8);
}
public static Hep3Matrix mult(double scalar, Hep3Matrix m)
{
double e0 = m.e(0,0) * scalar;
double e1 = m.e(0,0) * scalar;
double e2 = m.e(0,0) * scalar;
double e3 = m.e(0,1) * scalar;
double e4 = m.e(0,1) * scalar;
double e5 = m.e(0,1) * scalar;
double e6 = m.e(0,2) * scalar;
double e7 = m.e(0,2) * scalar;
double e8 = m.e(0,2) * scalar;
return new Hep3Matrix(e0,e1,e2,e3,e4,e5,e6,e7,e8);
}
public static Hep3Matrix inverse(Hep3Matrix m) throws MatrixOp.IndeterminateMatrixException
{
Hep3Matrix result = new Hep3Matrix();
MatrixOp.inverse(m,result);
return result;
}
static Hep3Matrix transposed(Hep3Matrix m)
{
Hep3Matrix result = new Hep3Matrix();
MatrixOp.transposed(m,result);
return result;
}
public static Hep3Vector neg(Hep3Vector v)
{
return new Hep3Vector(-v.x(), -v.y(), -v.z());
}
public static double dot(Hep3Vector v, Hep3Vector w)
{
return v.x()*w.x() + v.y()*w.y() + v.z()*w.z();
}
// ww, 07/31/00: cross product added
public static Hep3Vector cross(Hep3Vector v, Hep3Vector w)
{
double u1 = v.y()*w.z() - v.z()*w.y();
double u2 = v.z()*w.x() - v.x()*w.z();
double u3 = v.x()*w.y() - v.y()*w.x();
return new Hep3Vector(u1, u2, u3);
}
// ww, 08/01/00: unit vector added
/**
* returns (0,0,0) vector if input vector has length 0
*/
public static Hep3Vector unit(Hep3Vector v)
{
double mag = v.mag();
if ( mag != 0 )
return mult(1./mag,v);
else
return (new Hep3Vector(0., 0., 0.));
}
/**
* Boost fourVector with boostVector.
*
* Note, that beta=abs(boostVector) needs to be 0 < beta < 1.
*/
public static HepLorentzVector boost(HepLorentzVector fourVector, Hep3Vector boostVector)
{
double beta = boostVector.mag();
if ( beta >= 1.0 )
throw new RuntimeException("Boost beta >= 1.0 !");
double gamma = 1./Math.sqrt(1.-beta*beta);
double t = fourVector.t();
Hep3Vector v = fourVector.v3();
double tp = gamma*(t-dot(boostVector,v));
Hep3Vector vp = add(v,add(mult((gamma-1.)/(beta*beta)*dot(boostVector,v),boostVector),mult(-gamma*t,boostVector)));
return new HepLorentzVector(vp,tp);
}
/**
* Boost fourVector into system of refFourVector.
*/
public static HepLorentzVector boost(HepLorentzVector fourVector, HepLorentzVector refFourVector)
{
Hep3Vector refVector = refFourVector.v3();
Hep3Vector boostVector = new Hep3Vector(refVector.x(),refVector.y(),refVector.z());
boostVector = mult(1./refFourVector.t(),boostVector);
return boost(fourVector, boostVector);
}
public static double cosTheta(Hep3Vector vector)
{
return vector.z()/vector.mag();
}
public static double phi(Hep3Vector vector)
{
return Math.atan2(vector.y(),vector.x());
}
public static String toString(Hep3Vector v)
{
Formatter formatter = new Formatter();
formatter.format("[%9.4g,%9.4g,%9.4g]",v.x(),v.y(),v.z());
return formatter.out().toString();
}
public static String toString(HepLorentzVector v)
{
Formatter formatter = new Formatter();
formatter.format("[%12.5g,%12.5g,%12.5g,%12.5g]",v.v3().x(),v.v3().y(),v.v3().z(),v.t());
return formatter.out().toString();
}
public static String toString(Hep3Matrix m)
{
return MatrixOp.toString(m);
}
}