lcsim/src/org/lcsim/util/heprep
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());