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