Author: phansson
Date: Tue Oct 28 10:10:44 2014
New Revision: 3397
Log:
Fix rotation correction.
Modified:
projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java
projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java
projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java
Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java
=============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java (original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java Tue Oct 28 10:10:44 2014
@@ -30,7 +30,7 @@
public final boolean doColdBlock = false;
public final boolean doBottom = true;
public final boolean doTop = true;
- public final int layerBitMask = 0x1F; //0x1;//
+ public final int layerBitMask = 0x1F; //0x1;//
//General
@@ -223,26 +223,34 @@
// find layer
int layer = mother.getLayer();
+ // axial or stereo
+ boolean isAxial = isAxialFromName(volName);
+
+ // find layer according to old definition
+ int oldLayer = getOldGeomDefLayerFromVolumeName(isTopLayer, layer, isAxial);
+ //if(isDebug()) System.out.printf("%s: half? %s layer %d oldlayer %d axial? %s\n",
+ // this.getClass().getSimpleName(), isTopLayer?"top":"bottom", layer,oldLayer,isAxial?"yes":"no");
+
+ // find alignment correction to this volume
+ AlignmentCorrection alignmentCorrection = getHalfModuleAlignmentCorrection(isTopLayer, oldLayer);
+
+
+ // find the bundle that it will be added to
TestRunModuleBundle bundle = (TestRunModuleBundle)getModuleBundle(mother);
TestRunHalfModuleBundle halfModuleBundle;
// Build the half-module
TestRunHalfModule halfModule;
- AlignmentCorrection alignmentCorrection = null;
- if(side == "axial") {
- //alignmentCorrection = getHalfModuleAlignmentCorrection(isTopLayer, getOldGeomDefLayerFromVolumeName(isTopLayer, layer, true));
+ if(isAxial) {
halfModule = new TestRunHalfModuleAxial(volName, mother, alignmentCorrection, layer, half);
halfModuleBundle = new TestRunHalfModuleBundle(halfModule);
bundle.halfModuleAxial = halfModuleBundle;
- } else if(side == "stereo") {
- //alignmentCorrection = getHalfModuleAlignmentCorrection(isTopLayer, getOldGeomDefLayerFromVolumeName(isTopLayer, layer, false));
+ } else {
halfModule = new TestRunHalfModuleStereo(volName, mother, alignmentCorrection, layer, half);
halfModuleBundle = new TestRunHalfModuleBundle(halfModule);
bundle.halfModuleStereo = halfModuleBundle;
- } else {
- throw new IllegalArgumentException("not a valid half-module side " + side);
- }
+ }
// create the half module components
@@ -339,18 +347,8 @@
// sensor id is hard coded in old geometry to be zero by counting over the components of the module
int component_number = 0;
- boolean isTopLayer = getHalfFromName(volName) == "top" ? true : false;
- int layer = getLayerFromVolumeName(volName);
- boolean isAxial = isAxialFromName(volName);
- int oldLayer = getOldGeomDefLayerFromVolumeName(isTopLayer, layer, isAxial);
- if(isDebug()) System.out.printf("%s: half? %s layer %d oldlayer %d axial? %s\n",
- this.getClass().getSimpleName(), isTopLayer?"top":"bottom", layer,oldLayer,isAxial?"yes":"no");
-
- AlignmentCorrection alignmentCorrection = getHalfModuleAlignmentCorrection(isTopLayer, oldLayer);
-
-
//
- Sensor sensor = new Sensor(volName, mother, alignmentCorrection, component_number);
+ Sensor sensor = new Sensor(volName, mother, null, component_number);
sensor.setMaterial("Silicon");
TestRunHalfModuleBundle hm = (TestRunHalfModuleBundle) getHalfModuleBundle((TestRunModule) mother.getMother(), mother.getName());
Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java
=============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java (original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java Tue Oct 28 10:10:44 2014
@@ -114,6 +114,15 @@
public Hep3Vector w() {
return w;
}
+ public void u(Hep3Vector vec) {
+ u = vec;
+ }
+ public void v(Hep3Vector vec) {
+ v = vec;
+ }
+ public void w(Hep3Vector vec) {
+ w = vec;
+ }
public String toString() {
return "Coordinate system: \norigin " + origin.toString() + "\nu " + u.toString() + "\nv " + v.toString() + "\nw " + w.toString();
Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java
=============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java (original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java Tue Oct 28 10:10:44 2014
@@ -1,12 +1,16 @@
package org.lcsim.geometry.compact.converter;
+import hep.physics.vec.BasicHep3Matrix;
import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Matrix;
import hep.physics.vec.Hep3Vector;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.math3.geometry.euclidean.threed.RotationOrder;
+import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
+import org.lcsim.detector.Rotation3D;
import org.lcsim.geometry.util.TransformationUtils;
/**
@@ -126,21 +130,65 @@
}
// rotate
- if(alignmentCorrections.getRotation()!=null) {
-
- if(debug_local) {
- System.out.printf("%s: Apply rotation to coordinate system. Matrix:\n", this.getClass().getSimpleName());
- double mat[][] = alignmentCorrections.getRotation().getMatrix();
- TransformationUtils.printMatrix(mat);
- // Get the Cardan angles of the rotation
- double res[] = alignmentCorrections.getRotation().getAngles(RotationOrder.ZYX);
- // Since the rotation was created based on active transformations convert to passive right here.
- // This conversion is simply to reverse the order of rotations.
- Hep3Vector res_passive = new BasicHep3Vector(res[2],res[1],res[0]);
- System.out.printf("%s: Corresponding LCDD Cardan angles: %s\n", this.getClass().getSimpleName(), res_passive.toString());
- }
-
- getCoord().rotateApache(alignmentCorrections.getRotation());
+ if(alignmentCorrections.getRotation()!=null) {
+
+ if(debug_local) {
+ System.out.printf("%s: Apply rotation matrix:\n", this.getClass().getSimpleName());
+ TransformationUtils.printMatrix(alignmentCorrections.getRotation().getMatrix());
+ System.out.printf("%s: coord system before:\n%s\n", this.getClass().getSimpleName(),getCoord().toString());
+ }
+
+
+ // correct rotation of the local unit vectors
+ Vector3D u_rot_local = alignmentCorrections.getRotation().applyTo(new Vector3D(1,0,0));
+ Vector3D v_rot_local = alignmentCorrections.getRotation().applyTo(new Vector3D(0,1,0));
+ Vector3D w_rot_local = alignmentCorrections.getRotation().applyTo(new Vector3D(0,0,1));
+
+ // rotate the local unit vectors to the mother coordinates
+
+ Hep3Vector u_rot = getCoord().getTransformation().getRotation().rotated(new BasicHep3Vector(u_rot_local.toArray()));
+ Hep3Vector v_rot = getCoord().getTransformation().getRotation().rotated(new BasicHep3Vector(v_rot_local.toArray()));
+ Hep3Vector w_rot = getCoord().getTransformation().getRotation().rotated(new BasicHep3Vector(w_rot_local.toArray()));
+
+ getCoord().u(u_rot);
+ getCoord().v(v_rot);
+ getCoord().w(w_rot);
+
+ if(debug_local) {
+ System.out.printf("%s: coord system after:\n%s\n", this.getClass().getSimpleName(),getCoord().toString());
+ }
+
+
+ // Do some gymnastics from Apache rotation to use the rotation class
+ //double matMP_v[][] = alignmentCorrections.getRotation().getMatrix();
+ //Hep3Matrix matMP = new BasicHep3Matrix(matMP_v[0][0], matMP_v[0][1], matMP_v[0][2],
+ // matMP_v[1][0], matMP_v[1][1], matMP_v[1][2],
+ // matMP_v[2][0], matMP_v[2][1], matMP_v[2][2]);
+ //
+ //Rotation3D rotMP = new Rotation3D(matMP);
+
+ // get the rotation correction in the mother coordinate system
+ //Rotation3D r = Rotation3D.multiply(getCoord().getTransformation().getRotation(),rotMP);
+
+// if(debug_local) {
+// System.out.printf("%s: Apply rotation matrix:\n", this.getClass().getSimpleName());
+// double mat[][] = alignmentCorrections.getRotation().getMatrix();
+// TransformationUtils.printMatrix(mat);
+// System.out.printf("%s: corresponding Rotation3D object:\n%s\n",this.getClass().getSimpleName(), rotMP.toString());
+// // Get the Cardan angles of the rotation
+// double res[] = alignmentCorrections.getRotation().getAngles(RotationOrder.ZYX);
+// // Since the rotation was created based on active transformations convert to passive right here.
+// // This conversion is simply to reverse the order of rotations.
+// Hep3Vector res_passive = new BasicHep3Vector(res[2],res[1],res[0]);
+// System.out.printf("%s: Corresponding LCDD Cardan angles: %s\n", this.getClass().getSimpleName(), res_passive.toString());
+// System.out.printf("%s: Apply local to mother rotation\n%s\n",this.getClass().getSimpleName(), getCoord().getTransformation().getRotation().toString());
+// System.out.printf("%s: resulting rotation correction to apply\n%s\n",this.getClass().getSimpleName(), r.toString());
+//
+// }
+
+ // Apply correction to coordinate system
+ //getCoord().rotateApache(alignmentCorrections.getRotation());
+ //getCoord().rotate(r);
} else {
if(debug_local) System.out.printf("%s: No rotation to coordinate system\n", this.getClass().getSimpleName());
########################################################################
Use REPLY-ALL to reply to list
To unsubscribe from the LCDET-SVN list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1
|