lcsim/src/org/lcsim/contrib/SiStripSim
diff -N SiTrackerHitStrip1DConverter.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SiTrackerHitStrip1DConverter.java 27 Dec 2007 02:08:40 -0000 1.1
@@ -0,0 +1,85 @@
+/*
+ * SiTrackerHitStrip1DConverter.java
+ *
+ * Created on December 26, 2007, 4:09 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.lcsim.contrib.SiStripSim;
+
+import hep.graphics.heprep.HepRepFactory;
+import hep.graphics.heprep.HepRepInstance;
+import hep.graphics.heprep.HepRepInstanceTree;
+import hep.graphics.heprep.HepRepType;
+import hep.graphics.heprep.HepRepTypeTree;
+import java.awt.Color;
+import java.util.List;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.detector.solids.Point3D;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.EventHeader.LCMetaData;
+import org.lcsim.util.heprep.HepRepCollectionConverter;
+import org.lcsim.util.heprep.LCSimHepRepConverter;
+
+/**
+ *
+ * @author cozzy
+ *
+ * This is a converter for SiTrackerHit1D objects. It draws the hit segment
+ * for each instance.
+ *
+ * 1) To enable this converter, you must modify org.lcsim.util.heprep.LCSimHepRepConverter
+ * by adding the line "register(new SiTrackerHitStrip1DConverter());" where
+ * all the other register statements are (you'll also have to import this class)
+ *
+ * 2) Since SiTrackerHitStrip1D implements TrackerHit, TrackerHitConverter will
+ * also fire and draw a marker for each of these. This can be disabled by
+ * modifying org.lcsim.util.heprep.TrackerHitConverter so that it ignores
+ * any hits that may be cast as SiTrackerHitStrip1DConverter (try-catch is
+ * your friend).
+ *
+ */
+public class SiTrackerHitStrip1DConverter implements HepRepCollectionConverter {
+
+ /** Creates a new instance of SiTrackerHitStrip1DConverter */
+ public SiTrackerHitStrip1DConverter() {
+ }
+
+ public boolean canHandle(Class k){
+ return TrackerHit.class.isAssignableFrom(k);
+ }
+
+ public void convert(EventHeader event, List collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree) {
+
+ //Check if the TrackerHit can be cast as an SiTrackerHitStrip1D
+ try { ((List<SiTrackerHitStrip1D>)collection).get(0); }
+ catch (ClassCastException cce) { return; }
+
+ LCMetaData meta = event.getMetaData(collection);
+ String name = meta.getName()+"_Strip1D"; //added string because TrackerHitConverter will also fire on this collection...
+
+ HepRepType type = factory.createHepRepType(typeTree,name);
+ type.addAttValue("layer",LCSimHepRepConverter.HITS_LAYER);
+ type.addAttValue("drawAs","Line");
+ type.addAttValue("color",Color.GREEN);
+
+ type.addAttDef("dEdx","Hit dEdx", "physics","");
+ type.addAttDef("time","Hit time", "physics","");
+
+
+ for (SiTrackerHitStrip1D hit : (List<SiTrackerHitStrip1D>) collection) {
+
+ HepRepInstance instance = factory.createHepRepInstance(instanceTree,type);
+ instance.addAttValue("dEdx",hit.getdEdx());
+ instance.addAttValue("time",hit.getTime());
+
+ for (Point3D p : hit.getHitSegment().getPoints()) {
+
+ factory.createHepRepPoint(instance,p.x(),p.y(),p.z());
+ }
+ }
+ }
+
+}