1 added + 4 modified, total 5 files
lcsim/src/org/lcsim/util/heprep
diff -N SiTrackerHitStrip2DConverter.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SiTrackerHitStrip2DConverter.java 15 May 2008 09:19:54 -0000 1.1
@@ -0,0 +1,94 @@
+/*
+ * SiTrackerHitStrip2DConverter.java
+ *
+ * Created on January 16, 2008, 1:20 PM
+ *
+ */
+
+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.SiTrackerHitStrip2D;
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.util.heprep.HepRepCollectionConverter;
+import org.lcsim.event.EventHeader.LCMetaData;
+import org.lcsim.util.heprep.LCSimHepRepConverter;
+
+/**
+ *
+ * @author cozzy <[log in to unmask]>
+ */
+public class SiTrackerHitStrip2DConverter implements HepRepCollectionConverter{
+
+ public SiTrackerHitStrip2DConverter() {
+ }
+
+ public boolean canHandle(Class k){
+ return TrackerHit.class.isAssignableFrom(k);
+ }
+
+ public void convert(EventHeader event, List collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree) {
+
+ //make sure we have the right type of object...
+ if (collection.isEmpty() || !(collection.get(0) instanceof SiTrackerHitStrip2D)) return;
+
+
+ LCMetaData meta = event.getMetaData(collection);
+ String name = meta.getName()+"_Strip2D"; //add string because TrackerHitConverter will also fire on this collection...
+
+ HepRepType ptType = factory.createHepRepType(typeTree,name);
+ ptType.addAttValue("layer", LCSimHepRepConverter.HITS_LAYER);
+ ptType.addAttValue("drawAs", "Point");
+
+ ptType.addAttDef("dEdx","Hit dEdx", "physics","");
+ ptType.addAttDef("time","Hit time", "physics","");
+ ptType.addAttDef("isGhost","Whether or not the hit is a ghost","physics","");
+ ptType.addAttDef("numrawhits", "Number of contributing raw hits","physics","");
+ ptType.addAttDef("numsimhits", "Number of SimTrackerHits","physics","");
+
+ HepRepType normalType = factory.createHepRepType(ptType,"Normal Hits");
+ HepRepType noiseType = factory.createHepRepType(ptType,"Noise Hits");
+
+ normalType.addAttValue("color",Color.RED);
+ noiseType.addAttValue("Color",Color.MAGENTA);
+
+ // Draw modules for noise hits because they don't have associated SimTrackerhits
+ HepRepType moduleType = DisplayHitModules.getModuleType(factory, typeTree, name+"_noiseModules");
+ HepRepType sensorType = DisplayHitModules.getSensorType(factory, typeTree, name+"_noiseSensors");
+
+
+ for (SiTrackerHitStrip2D hit : (List<SiTrackerHitStrip2D>) collection) {
+
+ HepRepInstance instance;
+
+ if (!hit.getSimHits().isEmpty()) {
+ instance = factory.createHepRepInstance(instanceTree, normalType);
+ }
+ else {
+ instance = factory.createHepRepInstance(instanceTree, noiseType);
+ IDetectorElement sensor = hit.getSensor();
+ IDetectorElement module = sensor.getParent();
+ DisplayHitModules.drawPolyhedron(module, moduleType, instanceTree, factory);
+ DisplayHitModules.drawPolyhedron(sensor, sensorType, instanceTree, factory);
+ }
+ instance.addAttValue("dEdx", hit.getdEdx());
+ instance.addAttValue("time", hit.getTime());
+ instance.addAttValue("isGhost", hit.isGhost());
+ instance.addAttValue("numrawhits", hit.getRawHits().size());
+ instance.addAttValue("numsimhits", hit.getSimHits().size());
+
+
+ double[] p = hit.getPosition();
+
+ factory.createHepRepPoint(instance,p[0],p[1],p[2]);
+ }
+ }
+}
lcsim/src/org/lcsim/util/heprep
diff -u -r1.2 -r1.3
--- DisplayHitModules.java 11 Feb 2008 22:47:53 -0000 1.2
+++ DisplayHitModules.java 15 May 2008 09:19:54 -0000 1.3
@@ -16,15 +16,12 @@
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;
@@ -60,21 +57,17 @@
Subdetector sub = data.getIDDecoder().getSubdetector();
if (!(sub instanceof SiTrackerBarrel || sub instanceof SiTrackerEndcap)) return; //ignore older detectors
+ if (DetectorElementStore.getInstance().isEmpty()) return;
+
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);
+ HepRepType typeS = getSensorType(factory, typeTree, collection_name);
//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);
+ HepRepType typeM = getModuleType(factory, typeTree, collection_name);
- Set<Integer> alreadyMade = new HashSet<Integer>(); //don't want to draw the same thing multiple times if there are multiple SimHits in a sensor.
+ Set<IDetectorElement> alreadyMade = new HashSet<IDetectorElement>();
for (SimTrackerHit h : (List<SimTrackerHit>) collection) {
@@ -87,10 +80,7 @@
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);
+ if (!alreadyMade.add(sensor)) continue;
//get the module from the sensor
IDetectorElement module = sensor.getParent();
@@ -101,7 +91,7 @@
}
}
- private void drawPolyhedron(IDetectorElement detelem, HepRepType type,HepRepInstanceTree instanceTree, HepRepFactory factory) {
+ public static void drawPolyhedron(IDetectorElement detelem, HepRepType type, HepRepInstanceTree instanceTree, HepRepFactory factory) {
ISolid solid = detelem.getGeometry().getLogicalVolume().getSolid();
if (!(solid instanceof IPolyhedron)) return;
@@ -118,4 +108,21 @@
}
}
+ public static HepRepType getSensorType(HepRepFactory factory, HepRepTypeTree typeTree, String collection_name){
+
+ HepRepType typeS = factory.createHepRepType(typeTree,"HitSensor"+collection_name);
+ typeS.addAttValue("layer",LCSimHepRepConverter.HITS_LAYER);
+ typeS.addAttValue("drawAs","prism");
+ typeS.addAttValue("color",Color.WHITE);
+ return typeS;
+ }
+
+ public static HepRepType getModuleType(HepRepFactory factory, HepRepTypeTree typeTree, String collection_name){
+
+ HepRepType typeM = factory.createHepRepType(typeTree,"HitModule"+collection_name);
+ typeM.addAttValue("layer",LCSimHepRepConverter.HITS_LAYER);
+ typeM.addAttValue("drawAs","prism");
+ typeM.addAttValue("color",Color.WHITE);
+ return typeM;
+ }
}
lcsim/src/org/lcsim/util/heprep
diff -u -r1.3 -r1.4
--- SiTrackerHitStrip1DConverter.java 27 Mar 2008 20:19:55 -0000 1.3
+++ SiTrackerHitStrip1DConverter.java 15 May 2008 09:19:54 -0000 1.4
@@ -17,6 +17,7 @@
import java.awt.Color;
import java.util.List;
import org.lcsim.contrib.SiStripSim.*;
+import org.lcsim.detector.IDetectorElement;
import org.lcsim.event.TrackerHit;
import org.lcsim.detector.solids.Point3D;
import org.lcsim.event.EventHeader;
@@ -46,30 +47,51 @@
public void convert(EventHeader event, List collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree)
{
// Check if the TrackerHit can be cast to a SiTrackerHitStrip1D.
- if (collection.size() != 0)
- {
- if (!(collection.get(0) instanceof SiTrackerHitStrip1D)) return;
- }
+ if (collection.isEmpty() || !(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","");
-
+ HepRepType parentType = factory.createHepRepType(typeTree,name);
+ parentType.addAttValue("layer",LCSimHepRepConverter.HITS_LAYER);
+ parentType.addAttValue("drawAs","Line");
+
+ parentType.addAttDef("dEdx","Hit dEdx", "physics","");
+ parentType.addAttDef("time","Hit time", "physics","");
+ parentType.addAttDef("length","Hit Length", "physics", "");
+ parentType.addAttDef("numsimhits", "Number of SimTrackerHits","physics","");
+ parentType.addAttDef("numrawhits", "Number of contributing raw hits","physics","");
+ HepRepType normalType = factory.createHepRepType(parentType,"Normal Hits");
+ HepRepType noiseType = factory.createHepRepType(parentType,"Noise Hits");
+
+ normalType.addAttValue("color",Color.GREEN);
+ noiseType.addAttValue("Color",Color.MAGENTA);
+
+ // Draw modules for noise hits because they don't have associated SimTrackerhits
+ HepRepType moduleType = DisplayHitModules.getModuleType(factory, typeTree, name+"_noiseModules");
+ HepRepType sensorType = DisplayHitModules.getSensorType(factory, typeTree, name+"_noiseSensors");
+
for (SiTrackerHitStrip1D hit : (List<SiTrackerHitStrip1D>) collection)
{
- HepRepInstance instance = factory.createHepRepInstance(instanceTree,type);
+ HepRepInstance instance;
+
+ if (!hit.getSimHits().isEmpty()) {
+ instance = factory.createHepRepInstance(instanceTree,normalType);
+ }
+ else {
+ instance = factory.createHepRepInstance(instanceTree, noiseType);
+ IDetectorElement sensor = hit.getSensor();
+ IDetectorElement module = sensor.getParent();
+ DisplayHitModules.drawPolyhedron(module, moduleType, instanceTree, factory);
+ DisplayHitModules.drawPolyhedron(sensor, sensorType, instanceTree, factory);
+ }
instance.addAttValue("dEdx",hit.getdEdx());
instance.addAttValue("time",hit.getTime());
+ instance.addAttValue("length",hit.getHitLength());
+ instance.addAttValue("numsimhits",hit.getSimHits().size());
+ instance.addAttValue("numrawhits",hit.getRawHits().size());
- for (Point3D p : hit.getHitSegment().getPoints())
- {
+ for (Point3D p : hit.getHitSegment().getPoints()) {
factory.createHepRepPoint(instance,p.x(),p.y(),p.z());
}
}
lcsim/src/org/lcsim/util/heprep
diff -u -r1.18 -r1.19
--- LCSimHepRepConverter.java 14 Mar 2008 17:49:10 -0000 1.18
+++ LCSimHepRepConverter.java 15 May 2008 09:19:54 -0000 1.19
@@ -46,9 +46,10 @@
register(new ReconstructedParticleConverter());
register(new ZvVertexConverter());
register(new VertexConverter());
- register(new Hep3VectorConverter());
+ register(new Hep3VectorConverter());
register(new DisplayHitModules());
register(new SiTrackerHitStrip1DConverter());
+ register(new SiTrackerHitStrip2DConverter());
register(new HelicalTrackHitConverter());
}
catch (Exception x)
lcsim/src/org/lcsim/util/heprep
diff -u -r1.1 -r1.2
--- HelicalTrackHitConverter.java 14 Mar 2008 17:49:10 -0000 1.1
+++ HelicalTrackHitConverter.java 15 May 2008 09:19:54 -0000 1.2
@@ -50,6 +50,8 @@
type2d.addAttValue("color",Color.ORANGE);
type2d.addAttDef("dEdx", "Hit dEdx", "physics", "");
type2d.addAttDef("time", "Hit time", "physics", "");
+ type2d.addAttDef("zmin", "Z min", "physics", "");
+ type2d.addAttDef("zmax", "Z max", "physics", "");
HepRepType typeCenter = factory.createHepRepType(typeTree,name+"2dSegmentCenters");
typeCenter.addAttValue("layer",LCSimHepRepConverter.HITS_LAYER);
@@ -79,6 +81,9 @@
HepRepInstance instance2d = factory.createHepRepInstance(instanceTree,type2d);
instance2d.addAttValue("dEdx",hit.getTrackerHit().getdEdx());
instance2d.addAttValue("time",hit.getTrackerHit().getTime());
+ HelicalTrack2DHit hit2d = (HelicalTrack2DHit) hit;
+ instance2d.addAttValue("zmin", hit2d.zmin());
+ instance2d.addAttValue("zmax", hit2d.zmax());
HelicalTrack2DHit h = (HelicalTrack2DHit) hit;
factory.createHepRepPoint(instance2d, pos[0], pos[1], h.zmin());
factory.createHepRepPoint(instance2d, pos[0], pos[1], h.zmax());
@@ -88,8 +93,6 @@
instanceCenter.addAttValue("time",hit.getTrackerHit().getTime());
factory.createHepRepPoint(instanceCenter,pos[0],pos[1],pos[2]);
}
-
-
}
}
CVSspam 0.2.8