lcsim/sandbox
diff -N ReconstructedParticleConverterNew.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ReconstructedParticleConverterNew.java 31 Mar 2010 22:24:15 -0000 1.1
@@ -0,0 +1,170 @@
+package org.lcsim.util.heprep;
+
+import hep.graphics.heprep.HepRepFactory;
+import hep.graphics.heprep.HepRepInstance;
+import hep.graphics.heprep.HepRepInstanceTree;
+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.ArrayList;
+import java.util.List;
+
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.event.Track;
+import org.lcsim.geometry.Detector;
+import org.lcsim.util.swim.HelixSwimmer;
+
+/**
+ * @author jeremym
+ */
+class ReconstructedParticleConverterNew implements HepRepCollectionConverter
+{
+ RandomColorMap rcolorMap;
+ //ColorMap colorMap;
+ //Color colors[];
+ private static final double[] zero = { 0, 0, 0 };
+
+ public ReconstructedParticleConverterNew()
+ {
+ rcolorMap = new RandomColorMap(50);
+ //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 ReconstructedParticle.class.isAssignableFrom(k);
+ }
+
+ public void convert(EventHeader event, List collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree)
+ {
+ rcolorMap.reset(collection.size());
+
+ String pfoName = event.getMetaData(collection).getName();
+
+ // Tracks type.
+ HepRepType tracksType = factory.createHepRepType(typeTree, pfoName + "_Tracks");
+ tracksType.addAttValue("layer", LCSimHepRepConverter.PARTICLES_LAYER);
+ tracksType.addAttValue("drawAs","Line");
+
+ // Clusters type.
+ HepRepType clustersType = factory.createHepRepType(typeTree, pfoName + "_Clusters");
+ clustersType.addAttValue("layer", LCSimHepRepConverter.HITS_LAYER);
+
+ /*
+ clustersType.addAttValue("drawAs", "Point");
+ clustersType.addAttValue("MarkName", "Box");
+ clustersType.addAttDef("energy", "Hit Energy", "physics", "");
+ clustersType.addAttDef("cluster", "Cluster Energy", "physics", "");
+ */
+
+ int rpCnt = 0;
+ for (ReconstructedParticle rp : (List<ReconstructedParticle>) collection)
+ {
+ // Get the color for this RP.
+ Color rpColor = rcolorMap.getColor(rpCnt % rcolorMap.size());
+ //System.out.println(testColor.toString());
+ //Color rpColor = colors[rpCnt % colors.length];
+
+ List<Cluster> clusters = rp.getClusters();
+ List<Track> tracks = rp.getTracks();
+
+ convertClusters(event, clusters, factory, typeTree, instanceTree, rpColor, clustersType);
+ convertTracks(event, tracks, factory, typeTree, instanceTree, rpColor, tracksType);
+
+ ++rpCnt;
+ }
+ }
+
+ public void convertClusters(EventHeader event, List<Cluster> collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree, Color clusterColor, HepRepType type)
+ {
+ /*
+ HepRepType typeX = factory.createHepRepType(typeTree, name);
+ typeX.addAttValue("layer", LCSimHepRepConverter.HITS_LAYER);
+ typeX.addAttValue("drawAs", "Point");
+ typeX.addAttValue("MarkName", "Box");
+ typeX.addAttDef("energy", "Hit Energy", "physics", "");
+ typeX.addAttDef("cluster", "Cluster Energy", "physics", "");
+ */
+
+ //int i = 0;
+
+ List<CalorimeterHit> hits = new ArrayList<CalorimeterHit>();
+
+ HepRepInstance instanceC = factory.createHepRepInstance(instanceTree, type);
+
+ for (Cluster cluster : collection)
+ {
+ hits.addAll(cluster.getCalorimeterHits());
+ }
+
+ if (hits != null)
+ {
+ for (CalorimeterHit hit : hits)
+ {
+ double[] pos = hit.getPosition();
+ HepRepInstance instanceX = factory.createHepRepInstance(instanceC, type);
+ instanceX.addAttValue("MarkSize", 5);
+ instanceX.addAttValue("color", clusterColor);
+ instanceX.addAttValue("showparentattributes", true);
+ instanceX.addAttValue("pickparent", true);
+ HepRepPoint pp = factory.createHepRepPoint(instanceX, pos[0], pos[1], pos[2]);
+ }
+ }
+ }
+
+ public void convertTracks(EventHeader event, List<Track> collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree, Color trackColor, HepRepType type)
+ {
+ try
+ {
+ event.getDetector();
+ }
+ catch (Exception x)
+ {
+ return;
+ }
+
+ 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", "Line");
+ */
+
+ for (Track t : (List<Track>) collection)
+ {
+ helix.setTrack(t);
+ double distanceToCylinder = helix.getDistanceToCylinder(trackingRMax, trackingZMax);
+
+ HepRepInstance instanceX = factory.createHepRepInstance(instanceTree, type);
+
+ instanceX.addAttValue("color", trackColor);
+
+ double dAlpha = 10; // 1cm
+
+ for (int k = 0; k < 200; k++)
+ {
+ double d = k * dAlpha;
+ if (d > distanceToCylinder)
+ break;
+ Hep3Vector point = helix.getPointAtDistance(d);
+ factory.createHepRepPoint(instanceX, point.x(), point.y(), point.z());
+ }
+ }
+ }
+}
\ No newline at end of file
lcsim/sandbox
diff -N RandomColorMap.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ RandomColorMap.java 31 Mar 2010 22:24:15 -0000 1.1
@@ -0,0 +1,49 @@
+package org.lcsim.util.heprep;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+
+public class RandomColorMap
+{
+ List<Color> colors;
+
+ public RandomColorMap(int ncolors)
+ {
+ colors = new ArrayList<Color>(ncolors);
+ Random rand = new Random();
+ for (int i=0; i<ncolors; i++)
+ {
+ colors.add(i, new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat()));
+ }
+ Collections.shuffle(colors);
+ }
+
+ public void shuffle()
+ {
+ Collections.shuffle(colors);
+ }
+
+ public int size()
+ {
+ return colors.size();
+ }
+
+ public Color getColor(int index)
+ {
+ return colors.get(index);
+ }
+
+ public void reset(int ncolors)
+ {
+ colors = new ArrayList<Color>(ncolors);
+ Random rand = new Random();
+ for (int i=0; i<ncolors; i++)
+ {
+ colors.add(i, new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat()));
+ }
+ Collections.shuffle(colors);
+ }
+}
\ No newline at end of file