Print

Print


Commit in lcsim/src/org/lcsim/util/heprep on MAIN
VertexConverter.java+14-151.2 -> 1.3
First attempt at a visualization with correct rotation

lcsim/src/org/lcsim/util/heprep
VertexConverter.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- VertexConverter.java	25 Sep 2007 21:41:54 -0000	1.2
+++ VertexConverter.java	2 Oct 2007 20:08:27 -0000	1.3
@@ -12,12 +12,9 @@
 import java.awt.Color;
 import java.util.List;
 
-import org.lcsim.constants.Constants;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.Vertex;
 import org.lcsim.event.EventHeader.LCMetaData;
-import org.lcsim.geometry.Detector;
-import org.lcsim.spacegeom.SpacePoint;
 
 import Jama.EigenvalueDecomposition;
 import Jama.Matrix;
@@ -26,7 +23,7 @@
  * Representation of the Candidate vertices before fitting
  * 
  * @author jstrube
- * @version $Id: VertexConverter.java,v 1.2 2007/09/25 21:41:54 ngraf Exp $
+ * @version $Id: VertexConverter.java,v 1.3 2007/10/02 20:08:27 jstrube Exp $
  * 
  */
 public class VertexConverter implements HepRepCollectionConverter {
@@ -59,7 +56,8 @@
         typeX.addAttValue("MarkName", "Box");
         typeX.addAttDef("nTracks", "number of Tracks", "physics", "");
         
-        double nSigma = 30.; // TODO fix this, make it an attribute?
+        double nSigma = 30.; 
+        typeX.addAttDef("sigma", "error scale factor", "physics", "The error in each dimension is multiplied by this factor");
         typeX.addAttValue("sigma", nSigma);
         
 //        HepRepType typeY = factory.createHepRepType(typeTree, name);
@@ -82,23 +80,24 @@
             instanceV.addAttValue("color", vertexColor);
             instanceV.addAttValue("fillColor", vertexColor);
             
-            //FIXME uncomment the following once the logic is debugged.
             SymmetricMatrix covMatrix = vtx.getCovMatrix();
-//            covMatrix.invert();
+            
             EigenvalueDecomposition vtxEigen = new EigenvalueDecomposition(Jama.util.Maths.toJamaMatrix(covMatrix));
             Matrix eigenVals = vtxEigen.getD();
             instanceV.addAttValue("Radius", nSigma*Math.sqrt(eigenVals.get(0, 0)));
             instanceV.addAttValue("Radius2", nSigma*Math.sqrt(eigenVals.get(1, 1)));
             instanceV.addAttValue("Radius3", nSigma*Math.sqrt(eigenVals.get(2, 2)));
             
-            /*
-             * FIXME angles are not implemented, yet
-             */
-            //Matrix eigenVecs = vtxEigen.getV();
-                       
-            instanceV.addAttValue("Phi", 0);
-            instanceV.addAttValue("Theta", 0);
-            instanceV.addAttValue("Omega", 0);
+            Matrix eigenVecs = vtxEigen.getV();
+            double[] zAxis = eigenVecs.times(new double[] {0, 0, 1});
+            double[] xAxis = eigenVecs.times(new double[] {1, 0, 0});
+            double theta = Math.asin(zAxis[1]);
+            double phi = -Math.atan2(zAxis[0], zAxis[2]);
+            double omega = -Math.acos(xAxis[1]/Math.cos(theta));
+
+            instanceV.addAttValue("Phi", phi);
+            instanceV.addAttValue("Theta", theta);
+            instanceV.addAttValue("Omega", omega);
             instanceV.addAttValue("x", pos.x());
             instanceV.addAttValue("y", pos.y());
             instanceV.addAttValue("z", pos.z());
CVSspam 0.2.8