Author: [log in to unmask]
Date: Mon May 23 15:29:37 2016
New Revision: 4369
Log: (empty)
Modified:
java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/CrystalTaitBryanAngleCalculator.java
java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/GVector.java
java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/Geant4Position.java
java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/StatFunUtils.java
java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/Transformations.java
Modified: java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/CrystalTaitBryanAngleCalculator.java
=============================================================================
--- java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/CrystalTaitBryanAngleCalculator.java (original)
+++ java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/CrystalTaitBryanAngleCalculator.java Mon May 23 15:29:37 2016
@@ -26,9 +26,11 @@
private double cosPhi = 0;
private double sinPhi = 0;
- //contractor: the argument is the final state unitary vector,
- //if not unit, it will be redefined as unitary
- //initial state is defined as (0,0,1) vector, which is parallel to Z(beam direction)
+ /* constructor:
+ * @param vecFin final state unit vector,
+ * if not unit, it will be redefined as unitary,
+ * initial state is defined as (0,0,1) vector, which is parallel to Z(beam direction)
+ */
public CrystalTaitBryanAngleCalculator(GVector vecFin) {
fin = vecFin;
if (vecFin.isUnitary() == false) {
@@ -38,14 +40,21 @@
this.theta = this.calculateTheta();
}
- //calculates phi angle
+ /*
+ * calculates phi angle
+ * @return phi angle, rotation around X [rad]
+ */
private double calculatePhi() {
sinPhi = -fin.y();
cosPhi = Math.sqrt(1 - this.sinPhi * this.sinPhi);
return Math.asin(this.sinPhi);
}
- //calculates theta angle after phi is calculated
+ /*
+ * calculates theta angle after phi is calculated
+ * @return theta angle, rotation around Y [rad]
+ *
+ */
private double calculateTheta() {
if (this.cosPhi == 0) {
this.sinTheta = Double.NaN;
@@ -55,22 +64,31 @@
return Math.asin(this.sinTheta);
}
- //returns value of theta in rad
+ /*
+ * @return value of theta [rad], rotation around Y
+ */
public double getTheta() {
return this.theta;
}
- //returns value of phi anlge in rad
+ /*
+ * @return value of phi [rad], rotation around X
+ * /
+ */
public double getPhi() {
return this.phi;
}
- //returns value of psi angle in rad
+ /*
+ * @return value of psi [rad], rotation around Z
+ */
public double getPsi() {
return this.psi;
}
- //returns Tait-Bryan angles as a String in the format of (phi, theta, psi)
+ /*
+ * @return string of Tait-Bryan angles-(phi, theta, psi) [rad]
+ */
public String toString(){
return ("("+this.phi+","+this.theta+","+this.psi+")");
}
Modified: java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/GVector.java
=============================================================================
--- java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/GVector.java (original)
+++ java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/GVector.java Mon May 23 15:29:37 2016
@@ -3,7 +3,7 @@
import hep.physics.vec.BasicHep3Vector;
/**
- * Defines a vector in (XYZ) coordinate system as a geometrical object.
+ * Define a vector in (XYZ) coordinate system as a geometrical object.
* This class is similar to HepVector
*
* @author Annie Simonyan
@@ -13,11 +13,16 @@
private double x = 0, y = 0, z = 0;
private double[] vec;
- //default constructor
+ /**
+ * default constructor
+ */
public GVector() {
}
- //constructor: argument - double[3]={x,y,z} array for vector coordinates
+ /**
+ * constructor
+ * @param double[3]={x,y,z} array for vector coordinates
+ */
public GVector(double[] array) {
vec = array;
this.x = array[0];
@@ -25,12 +30,21 @@
this.z = array[2];
}
- //converts this Vvector to BasicHep3Vector
+ /**
+ * convert this GVector to BasicHep3Vector
+ * @return BasicHep3Vector object
+ */
public BasicHep3Vector getHepVector(){
return new BasicHep3Vector(this.x, this.y, this.z);
}
- //constructor: arguments - double(x,y,z) coordinates of vector
+ /**
+ * constructor:
+ * @param x - x coordinates of vector
+ * @param y - y coordinates of vector
+ * @param z - z coordinates of vector
+ *
+ */
public GVector(double x, double y, double z) {
this.x = x;
this.y = y;
@@ -53,78 +67,120 @@
return z;
}
- //set vector x coordinate
+ /**
+ * set vector x coordinate
+ * @param x vector x coordinate
+ */
public void SetX(double x) {
this.x = x;
}
- //set vector y coordinate
+
+ /**
+ * set vector y coordinate
+ * @param y vector y coordinate
+ */
public void SetY(double y) {
this.y = y;
}
- //set vector z coordinate
+ /**
+ * set vector z coordinate
+ *@param z vector z coordinate
+ */
public void SetZ(double z) {
this.z = z;
}
- //set vector (x,y,z) coordinates
+
+ /**
+ * set vector (x,y,z) coordinate
+ * @param x vector x coordinate
+ * @param y vector y coordinate
+ * @param z vector z coordinate
+ */
public void SetXYZ(double x, double y, double z) {
this.x = x;
this.y = y;
this.z = z;
}
- //check if the vector is unit vector
+ /**
+ * check if the vector is unit vector
+ * @return true if the vector is unit vector
+ */
public boolean isUnitary() {
return (Double.compare(StatFunUtils.round(this.Module(), 12), 1.0) == 0);
}
- //returns the module of the vector
+ /**
+ * @return the module of the vector
+ */
public double Module() {
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
}
- //vector multiplication by cooficent k
+ /**
+ * multiplication by coefficient k
+ * @param k - multiplication coefficient
+ * @return new GVector=this*k
+ */
public GVector Multiply(double k) {
return (new GVector(k * this.x, k * this.y, k * this.z));
}
- //returns new vector = sum of this vector and argument vec2
+
+ /**
+ * sum of this vector and argument vec2
+ * @param vec2 GVector to add
+ * @return new GVector = this+vec2
+ */
public GVector Add(GVector vec2) {
return (new GVector(this.x + vec2.x, this.y + vec2.y, this.z + vec2.z));
}
- //returns new vector opposite to this vector
+ /**
+ *
+ * @return new vector opposite to this vector
+ */
public GVector getOpposite() {
return (new GVector(-this.x, -this.y, -this.z));
}
- //returns new vector = this vector - argument vector
+ /**
+ * substract GVectors
+ * @param vec2 GVector to substract
+ * @return new vector = this - vec2
+ *
+ */
public GVector Substract(GVector vec2) {
return (new GVector(this.x - vec2.x, this.y - vec2.y, this.z - vec2.z));
}
- //returns new vector defined as translation of this vector by argument vector
+ /**
+ * @param trvec translation vector
+ * @return new GVector defined as translation of this vector by argument vector
+ * newVector = this+trvec
+ */
public GVector TranslateBy(GVector trvec) {
- // return this.Substract(trvec);
+
return this.Add(trvec);
}
- /*
- * Returns new vector = this vector rotated by (alpha, betta, gamma) rotation
+ /**
+ * Rotate this vector by (alpha, betta, gamma) rotation angles
* (Rz-alpha,Ry-beta,Rx-gamma)
- *
- * Vector rotation defined as:
- * alpha-rotation around Z axis
- * beta-rotation around Y axis
- * gamma-rotation around X axis
+ *
+ * @param alpha rotation around Z axis
+ * @param beta rotation around Y axis
+ * @param gamma rotation around X axis
+ * @return new GVector=this vector rotated by (alpha, betta, gamma)
*/
public GVector RotateBy(double alpha, double betta, double gamma) {
@@ -150,17 +206,26 @@
return (new GVector(xx, yy, zz));
}
- // returns scaliar multiplication of vectors
- public double ScaliarM(GVector vec2) {
+ /**
+ * scalar multiplication of this vector by vec2
+ * @param vec2 GVector
+ * @return double = (this vector * vec2 vector)
+ *
+ */
+ public double ScalarM(GVector vec2) {
return this.x * vec2.x + this.y * vec2.y + this.z * vec2.z;
}
- //returns angle between vectors in rad
+ /**
+ * Calculate angle between vectors
+ * @param vec2 GVector to calc. angle with this
+ * @return angle between this and vec2 vectors [rad]
+ */
public double Angle(GVector vec2) {
// System.out.print("Scaliar= "+this.ScaliarM(vec2) +" modN1 = "+this.Module()+" modN2 = "+vec2.Module()+"\n");
// System.out.print(this.ScaliarM(vec2)/(this.Module()*vec2.Module())+ "\n");
// System.out.println(Math.acos(this.ScaliarM(vec2)/(this.Module()*vec2.Module())));
- double cosAlpha = this.ScaliarM(vec2) / (this.Module() * vec2.Module());
+ double cosAlpha = this.ScalarM(vec2) / (this.Module() * vec2.Module());
if (Double.compare(StatFunUtils.round(cosAlpha, 12), 1.0) == 0) {
cosAlpha = 1.0;
@@ -171,28 +236,43 @@
return Math.acos(cosAlpha);
}
- //returns coordinates of this vector as an array of doubles
+ /**
+ *
+ * @return coordinates of this vector as an array
+ */
public double[] getVector() {
return this.vec;
}
- //returns new vector, which is unit vector of this vector
+ /**
+ * Calculate unit vector of this vector
+ * @return new GVector, which is unit vector of this vector
+ *
+ */
public GVector getUnitVector() {
return new GVector(this.x / this.Module(), this.y / this.Module(), this.z / this.Module());
}
- //returns the center coordinates of this vector as a Vvector object
+ /**
+ *
+ * @return new GVector = coordinates of center of this vector as a GVector object
+ *
+ */
public GVector getCenter() {
return (this.Multiply(0.5));
}
- //Print the coordinates of the Vector as (x,y,z)
+ /**
+ * Print the coordinates of the GVector as (x,y,z)
+ */
public void Print() {
System.out.println("(" + this.x + ", " + this.y + ", " + this.z + ")");
}
- //returns coordinates of the vector as a String "(x,y,z)"
+ /**
+ * @return String of coordinates of this vector
+ */
public String toString(){
return ("(" + this.x + ", " + this.y + ", " + this.z + ")");
}
Modified: java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/Geant4Position.java
=============================================================================
--- java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/Geant4Position.java (original)
+++ java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/Geant4Position.java Mon May 23 15:29:37 2016
@@ -2,30 +2,34 @@
/**
- * Calculates G4 position for a crystal, by it's front and back face coordinates calculates the position for the center
+ * Calculate G4 position for a crystal, by it's front and back face coordinates calculates the position for the center
* of the crystal calculates the rotation of the crystal in convention of Tait-Bryan angles, {phi, theta, psi}
*
- * or look here: http://sedris.org/wg8home/Documents/WG80485.pdf
- *
- * Brief:
* phi-rotation around X
* theta-rotation around Y
* psi-rotation around Z
*
* @author Annie Simonyan
*/
-// FIXME: There is not anything specific to Geant4 about this class, so it should be renamed.
+
public final class Geant4Position {
- private GVector centerPoint; // center coordinate
- private GVector crysvec; // crystal vector formed by front face center point and back face center point
- private double[] taitbriangles; // { phi,theta,psi=0}; Tait-Bryan angles to define crystal orientation in the space
- private double[] centerArr; //crystal center coordinates as a double[3] array
-
- //contsructor arguments
- //1 Vector - (x,y,z) of crystal front face center point as Vector
- //2 Vector - (x,y,z) of crystal back face center point as Vector
- public Geant4Position(GVector point1, GVector point2) {
+ /* center coordinates */
+ private GVector centerPoint;
+ /* crystal vector formed by front face center point and back face center point*/
+ private GVector crysvec;
+ /* { phi,theta,psi=0}; Tait-Bryan angles to define crystal orientation in the space */
+ private double[] taitbriangles;
+
+ /* crystal center coordinates as a double[3] array */
+ private double[] centerArr;
+
+ /**
+ * constructor
+ * @param point1 (x,y,z) of crystal front face center point as GVector
+ * @param point2 (x,y,z) of crystal back face center point as GVector
+ */
+ public Geant4Position(GVector point1, GVector point2) {
centerPoint = point2.Add(point1).Multiply(0.5);
centerArr = new double[3];
centerArr[0] = centerPoint.x();
@@ -36,23 +40,38 @@
this.calculateTaitBryanAngles();
}
- //returns the center coordinates as a Vector
- public GVector getCenter() {
+
+ /**
+ *
+ * @return center coordinates as a GVector
+ */
+ public GVector getCenter() {
return this.centerPoint;
}
- //returns center coordinates as an array of doubles
- public double[] getCenterArr() {
+
+
+ /**
+ *
+ * @return center coordinates as an array double[x_center, y_center, z_center]
+ */
+ public double[] getCenterArr() {
return centerArr;
}
- //returns Tait-Bryan angles as an array of doubles [phi, theta, psi]
- public double[] getTaitBryanAngles() {
+
+ /**
+ *
+ * @return Tait-Bryan angles as an array doubles [phi, theta, psi]
+ */
+ public double[] getTaitBryanAngles() {
return this.taitbriangles;
}
- //calculates Tait-Bryan angles for the object orientation defined by initial and final state vectors
- //throws arithmetical exception if the phi angle is calculated wrong or 0
+ /*
+ * calculates Tait-Bryan angles for the object orientation defined by initial and final state vectors
+ * throws arithmetical exception if the phi angle is calculated wrong or 0
+ */
private void calculateTaitBryanAngles() throws ArithmeticException{
CrystalTaitBryanAngleCalculator crysTBang = new CrystalTaitBryanAngleCalculator(crysvec);
if (crysTBang.getPhi() == Double.NaN) {
@@ -63,13 +82,21 @@
this.taitbriangles[2] = -crysTBang.getPsi();
}
- //Print crystal center coordinates(X,Y,Z) and Tait-Bryan angles
- public void Print() {
+
+ /**
+ * Print crystal center coordinates(X,Y,Z) and Tait-Bryan angles
+ */
+ public void Print() {
this.centerPoint.Print();
}
- //return Geant4Position object attributes as a String
- public String toString(){
+
+
+ /**
+ *
+ * @return String of Geant4Position object attributes
+ */
+ public String toString(){
return ("\"Crys Center coordinates:\\t\""+this.centerPoint.toString()+"Tait Brian angles phi = " + Math.toDegrees(this.taitbriangles[0]) + "\t theta = "
+ Math.toDegrees(this.taitbriangles[1]) + "\t psi = " + Math.toDegrees(this.taitbriangles[2]) + "\n");
}
Modified: java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/StatFunUtils.java
=============================================================================
--- java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/StatFunUtils.java (original)
+++ java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/StatFunUtils.java Mon May 23 15:29:37 2016
@@ -9,6 +9,9 @@
/**
* Function for double to round up the arg. value to 'places' digits after the semicolon
+ * @param value double number to round
+ * @param places round up to places
+ * @return rounded value
*/
public static double round(double value, int places) {
if (places < 0 || places > 16) {
Modified: java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/Transformations.java
=============================================================================
--- java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/Transformations.java (original)
+++ java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/ecal/Transformations.java Mon May 23 15:29:37 2016
@@ -17,6 +17,7 @@
/* vector of translation */
private GVector transVec;
+ /* array with rotation angles */
private double[] rotation;
/* geometrically defined center mass of top module */
@@ -35,6 +36,13 @@
this.rotation = rot;
}
+ /**
+ * perform rotation and translation operation for a single crystal
+ *
+ * @param position crystal position
+ * @param channel crystal channel
+ * @return crystal position in G4 conventions
+ */
public Geant4Position transformToGeant4(EcalCrystalPosition position, EcalChannel channel) {
// Define untransformed front and back positions.
|