lcsim/src/org/lcsim/util/heprep
diff -N DisplayHitModules.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ DisplayHitModules.java 10 Jan 2008 00:57:58 -0000 1.1
@@ -0,0 +1,117 @@
+/*
+ * DisplayHitModules.java
+ *
+ * Created on December 14, 2007, 1:43 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.lcsim.util.heprep;
+
+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 hep.physics.vec.Hep3Vector;
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.lcsim.detector.DetectorElementStore;
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.IDetectorElementContainer;
+import org.lcsim.detector.IGeometryInfo;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.Identifier;
+import org.lcsim.detector.solids.IPolyhedron;
+import org.lcsim.detector.solids.ISolid;
+import org.lcsim.detector.solids.Point3D;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.EventHeader.LCMetaData;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.geometry.Subdetector;
+import org.lcsim.geometry.subdetector.SiTrackerBarrel;
+import org.lcsim.geometry.subdetector.SiTrackerEndcap;
+
+/**
+ * Converter that draws modules and sensors that have hits in them.
+ * Everything is drawn in the event layer.
+ *
+ */
+public class DisplayHitModules implements HepRepCollectionConverter{
+
+
+ /** Creates a new instance of DisplayHitModules */
+ public DisplayHitModules() {
+ }
+
+
+ public boolean canHandle(Class k) {
+ return (SimTrackerHit.class.isAssignableFrom(k));
+ }
+
+ public void convert(EventHeader event, List collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree) {
+
+ LCMetaData data = event.getMetaData(collection);
+ Subdetector sub = data.getIDDecoder().getSubdetector();
+ if (!(sub instanceof SiTrackerBarrel || sub instanceof SiTrackerEndcap)) return; //ignore older detectors
+
+ String collection_name = event.getMetaData(collection).getName();
+
+ //sensor type
+ HepRepType typeS = factory.createHepRepType(typeTree,"HitSensor"+collection_name);
+ typeS.addAttValue("layer",LCSimHepRepConverter.HITS_LAYER);
+ typeS.addAttValue("drawAs","prism");
+ typeS.addAttValue("color",Color.WHITE);
+
+ //module type
+ HepRepType typeM = factory.createHepRepType(typeTree,"HitModule"+collection_name);
+ typeM.addAttValue("layer",LCSimHepRepConverter.HITS_LAYER);
+ typeM.addAttValue("drawAs","prism");
+ typeM.addAttValue("color",Color.WHITE);
+
+ Set<Integer> alreadyMade = new HashSet<Integer>(); //don't want to draw the same thing multiple times if there are multiple SimHits in a sensor.
+
+ for (SimTrackerHit h : (List<SimTrackerHit>) collection) {
+
+ //get the right sensor
+ IIdentifier id = new Identifier(h.getCellID());
+ IDetectorElementContainer de = DetectorElementStore.getInstance().find(id);
+ IDetectorElement sensor = de.get(0);
+
+ //make sure we don't have repeats
+ Integer hash = Integer.valueOf(sensor.hashCode());
+ if (alreadyMade.contains(hash)) continue;
+ alreadyMade.add(hash);
+
+ //get the module from the sensor
+ IDetectorElement module = sensor.getParent();
+
+ drawPolyhedron(sensor,typeS,instanceTree,factory);
+ drawPolyhedron(module,typeM,instanceTree,factory);
+
+ }
+ }
+
+ private void drawPolyhedron(IDetectorElement detelem, HepRepType type,HepRepInstanceTree instanceTree, HepRepFactory factory) {
+
+ ISolid solid = detelem.getGeometry().getLogicalVolume().getSolid();
+ if (!(solid instanceof IPolyhedron)) return;
+ IPolyhedron poly = (IPolyhedron) solid;
+
+ List<Point3D> points = poly.getVertices();
+ int[] point_ordering = poly.getHepRepVertexOrdering();
+
+ HepRepInstance instance = factory.createHepRepInstance(instanceTree,type);
+
+ for (int i = 0; i< point_ordering.length; i++) {
+ Hep3Vector p = detelem.getGeometry().transformLocalToGlobal(points.get(point_ordering[i]));
+ factory.createHepRepPoint(instance,p.x(),p.y(),p.z());
+ }
+ }
+
+}
lcsim/src/org/lcsim/util/heprep
diff -N SiTrackerHitStrip1DConverter.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SiTrackerHitStrip1DConverter.java 10 Jan 2008 00:57:58 -0000 1.1
@@ -0,0 +1,76 @@
+/*
+ * 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.util.heprep;
+
+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.contrib.SiStripSim.*;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.detector.solids.Point3D;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.EventHeader.LCMetaData;
+
+/**
+ *
+ * @author cozzy
+ *
+ * This is a converter for SiTrackerHit1D objects. It draws the hit segment
+ * for each instance.
+ *
+ * Since SiTrackerHitStrip1D implements TrackerHit, TrackerHitConverter will
+ * also fire and draw a marker for each of these.
+ *
+ */
+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
+ if (!(collection.get(0) instanceof SiTrackerHitStrip1D)) 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());
+ }
+ }
+ }
+
+}
lcsim/src/org/lcsim/util/heprep
diff -u -r1.16 -r1.17
--- LCSimHepRepConverter.java 20 Sep 2007 23:20:31 -0000 1.16
+++ LCSimHepRepConverter.java 10 Jan 2008 00:57:58 -0000 1.17
@@ -47,6 +47,8 @@
register(new ZvVertexConverter());
register(new VertexConverter());
register(new Hep3VectorConverter());
+ register(new DisplayHitModules());
+ register(new SiTrackerHitStrip1DConverter());
}
catch (Exception x)
{