Commit in lcsim/src/org/lcsim/util/heprep on MAIN
VertexConverter.java+101added 1.1
First version of the vertex visualization.
Main axes are the sqrt of the diagonalized inverse of the covMatrix.
Rotation angles are not yet implemented.

lcsim/src/org/lcsim/util/heprep
VertexConverter.java added at 1.1
diff -N VertexConverter.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ VertexConverter.java	20 Sep 2007 23:17:55 -0000	1.1
@@ -0,0 +1,101 @@
+package org.lcsim.util.heprep;
+
+import hep.graphics.heprep.HepRepFactory;
+import hep.graphics.heprep.HepRepInstance;
+import hep.graphics.heprep.HepRepInstanceTree;
+import hep.graphics.heprep.HepRepPoint;
+import hep.graphics.heprep.HepRepType;
+import hep.graphics.heprep.HepRepTypeTree;
+import hep.physics.matrix.SymmetricMatrix;
+import hep.physics.vec.Hep3Vector;
+
+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;
+
+/**
+ * Representation of the Candidate vertices before fitting
+ * 
+ * @author jstrube
+ * @version $Id: VertexConverter.java,v 1.1 2007/09/20 23:17:55 jstrube Exp $
+ * 
+ */
+public class VertexConverter implements HepRepCollectionConverter {
+    private Color[] colors;
+
+    private static final double[] zero = { 0,0,0 };
+    public VertexConverter() {
+        ColorMap cm = new RainbowColorMap();
+        colors = new Color[11];
+        for (int i=0; i<colors.length; i++) colors[i] = cm.getColor(((double) i)/colors.length,1);
+    }
+
+    public boolean canHandle(Class k) {
+        return Vertex.class.isAssignableFrom(k);
+    }
+
+    public void convert(EventHeader event, List collection, HepRepFactory factory
+            , HepRepTypeTree typeTree, HepRepInstanceTree instanceTree) {
+        LCMetaData meta = event.getMetaData(collection);
+        String name = meta.getName();        
+        HepRepType typeX = factory.createHepRepType(typeTree, name);
+        typeX.addAttValue("layer", LCSimHepRepConverter.PARTICLES_LAYER);
+        typeX.addAttValue("drawAs", "Ellipsoid");
+        typeX.addAttValue("Radius", 1);
+        typeX.addAttValue("Radius2", 2);
+        typeX.addAttValue("Radius3", 3);
+        typeX.addAttValue("color", Color.RED);
+        typeX.addAttValue("fill", true);
+        typeX.addAttValue("fillColor", Color.RED);
+        typeX.addAttValue("MarkName", "Box");
+        typeX.addAttDef("nTracks", "number of Tracks", "physics", "");
+        
+//        HepRepType typeY = factory.createHepRepType(typeTree, name);
+//        typeY.addAttValue("layer", LCSimHepRepConverter.PARTICLES_LAYER);
+//        typeY.addAttValue("drawAs","Line");
+//        typeY.addAttDef("pT","Transverse momentum", "physics", "");
+//        typeY.addAttDef("dedX","de/Dx", "physics", "");
+        int iColor = 0;
+        
+        HepRepType typeY = factory.createHepRepType(typeTree, name+"Tracks");
+        typeY.addAttValue("layer", LCSimHepRepConverter.PARTICLES_LAYER);
+        typeY.addAttValue("drawAs", "Line");
+        
+        for (Vertex vtx : (List<Vertex>) collection) {
+            Color vertexColor = colors[iColor];
+            iColor = (iColor+2) % colors.length;
+            Hep3Vector pos = vtx.getPosition();
+            HepRepInstance instanceV = factory.createHepRepInstance(instanceTree, typeX);
+            instanceV.addAttValue("color", vertexColor);
+            instanceV.addAttValue("fillColor", vertexColor);
+            
+            SymmetricMatrix covMatrix = vtx.getCovMatrix();
+            covMatrix.invert();
+            EigenvalueDecomposition vtxEigen = new EigenvalueDecomposition(Jama.util.Maths.toJamaMatrix(covMatrix));
+            Matrix eigenVals = vtxEigen.getD();
+            instanceV.addAttValue("Radius", Math.sqrt(eigenVals.get(0, 0)));
+            instanceV.addAttValue("Radius2", Math.sqrt(eigenVals.get(1, 1)));
+            instanceV.addAttValue("Radius3", 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);
+            HepRepPoint pp = factory.createHepRepPoint(instanceV, pos.x(), pos.y(), pos.z());
+            
+        }
+    }
+}
CVSspam 0.2.8