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