Commit in lcsim/sandbox on MAIN
ReconstructedParticleConverterNew.java+170added 1.1
RandomColorMap.java+49added 1.1
+219
2 added files


lcsim/sandbox
ReconstructedParticleConverterNew.java added at 1.1
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
RandomColorMap.java added at 1.1
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
CVSspam 0.2.8