Commit in lcsim/src/org/lcsim/util/heprep on MAIN
ZvVertexConverter.java+53-51.3 -> 1.4
ZvVertex marks associated tracks in the same color

lcsim/src/org/lcsim/util/heprep
ZvVertexConverter.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- ZvVertexConverter.java	16 Aug 2005 18:57:39 -0000	1.3
+++ ZvVertexConverter.java	8 Sep 2005 08:26:25 -0000	1.4
@@ -6,18 +6,23 @@
 import hep.graphics.heprep.HepRepPoint;
 import hep.graphics.heprep.HepRepType;
 import hep.graphics.heprep.HepRepTypeTree;
+import hep.physics.vec.Hep3Vector;
 
 import java.awt.Color;
 import java.util.List;
 
+import org.lcsim.constants.Constants;
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.EventHeader.LCMetaData;
 import org.lcsim.geometry.CalorimeterIDDecoder;
+import org.lcsim.geometry.Detector;
+import org.lcsim.recon.vertexing.zvtop4.ZvTrack;
 import org.lcsim.recon.vertexing.zvtop4.ZvVertex;
 import org.lcsim.spacegeom.SpacePoint;
 import org.lcsim.util.lcio.LCIOConstants;
 import org.lcsim.util.lcio.LCIOUtil;
+import org.lcsim.util.swim.HelixSwimmer;
 
 /**
  * Representation of the Candidate vertices before fitting
@@ -26,6 +31,14 @@
  * 
  */
 public class ZvVertexConverter implements HepRepCollectionConverter {
+    private Color[] colors;
+
+    private static final double[] zero = { 0,0,0 };
+    public ZvVertexConverter() {
+        ColorMap cm = new RainbowColorMap();
+        colors = new Color[20];
+        for (int i=0; i<colors.length; i++) colors[i] = cm.getColor(((double) i)/colors.length,1);
+    }
 
     public boolean canHandle(Class k) {
         return ZvVertex.class.isAssignableFrom(k);
@@ -36,7 +49,14 @@
         LCMetaData meta = event.getMetaData(collection);
         String name = meta.getName();
         int flags = meta.getFlags();
-
+        Detector detector = event.getDetector();
+        
+        double trackingRMax = detector.getConstants().get("tracking_region_radius").getValue();
+        double trackingZMax = detector.getConstants().get("tracking_region_zmax").getValue();
+        
+        double[] field = detector.getFieldMap().getField(zero);
+        HelixSwimmer helix = new HelixSwimmer(field[2]);
+        
         HepRepType typeX = factory.createHepRepType(typeTree, name);
         typeX.addAttValue("layer", LCSimHepRepConverter.PARTICLES_LAYER);
         typeX.addAttValue("drawAs", "Ellipsoid");
@@ -48,12 +68,40 @@
         typeX.addAttValue("fillColor", Color.RED);
         typeX.addAttValue("MarkName", "Box");
         typeX.addAttDef("nTracks", "number of Tracks", "physics", "");
-
+        
+        int iColor = 0;
+        
         for (ZvVertex vtx : (List<ZvVertex>) collection) {
+            Color vertexColor = colors[iColor];
+            iColor = (iColor+1) % colors.length;
             SpacePoint pos = vtx.getPosition();
-            HepRepInstance instanceX = factory.createHepRepInstance(instanceTree, typeX);
-            instanceX.addAttValue("nTracks", vtx.getNumTracks());
-            HepRepPoint pp = factory.createHepRepPoint(instanceX, pos.x(), pos.y(), pos.z());
+            HepRepInstance instanceV = factory.createHepRepInstance(instanceTree, typeX);
+            instanceV.addAttValue("nTracks", vtx.getNumTracks());
+            HepRepPoint pp = factory.createHepRepPoint(instanceV, pos.x(), pos.y(), pos.z());
+            
+            for (ZvTrack iTrack : vtx.getVtxTracks()) {
+                helix.setTrack(iTrack);
+                double distanceToCylinder = helix.getDistanceToCylinder(trackingRMax,trackingZMax);
+                
+                HepRepInstance instanceT = factory.createHepRepInstance(instanceV, typeX);
+                double pt = field[2]*Constants.fieldConversion/Math.abs(iTrack.getTrackParameter(2));
+                instanceT.addAttValue("pT",pt);
+                instanceT.addAttValue("dedX", iTrack.getdEdx());
+                instanceT.addAttValue("color",vertexColor);
+                instanceT.addAttValue("showparentattributes", true);
+                instanceT.addAttValue("pickparent", true);
+                
+                double dAlpha = 10; // 1cm
+                
+                for (int k=0;k<200;k++)
+                {
+                   double d = k*dAlpha;
+                   if (d>distanceToCylinder) break;
+                   Hep3Vector point = helix.getPointAtDistance(d);
+                   System.out.println(k+" point="+point);
+                   factory.createHepRepPoint(instanceT,point.x(),point.y(),point.z());
+                }
+            }
         }
     }
 }
CVSspam 0.2.8