Commit in lcsim/src/org/lcsim/contrib/uiowa on MAIN
TestTrackMipClusterDriver.java+120added 1.1
MJC: (contrib) Example/test wrapper around Steve's TrackMipClusterDriver

lcsim/src/org/lcsim/contrib/uiowa
TestTrackMipClusterDriver.java added at 1.1
diff -N TestTrackMipClusterDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ TestTrackMipClusterDriver.java	27 Jun 2008 23:43:55 -0000	1.1
@@ -0,0 +1,120 @@
+package org.lcsim.contrib.uiowa;
+
+import hep.physics.vec.*;
+import java.util.*;
+import org.lcsim.util.*;
+import org.lcsim.util.hitmap.*;
+import org.lcsim.util.decision.*;
+import org.lcsim.event.*;
+import org.lcsim.recon.cluster.mipfinder.MipFinderCrossingBarrelEndcapBorder;
+import java.util.*;
+import org.lcsim.util.Driver;
+import org.lcsim.contrib.uiowa.NonTrivialPFA;
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.loop.LCIODriver;
+import org.lcsim.util.*;
+import org.lcsim.event.*;
+import org.lcsim.recon.cluster.structural.likelihood.LikelihoodEvaluatorWrapper;
+import org.lcsim.recon.cluster.directedtree.*;
+import org.lcsim.util.hitmap.*;
+import org.lcsim.recon.pfa.output.EnergySumPlotter;
+import org.lcsim.recon.cluster.util.*;
+import org.lcsim.event.util.*;
+import org.lcsim.digisim.*;
+import org.lcsim.mc.fast.tracking.*;
+import org.lcsim.contrib.Cassell.recon.analysis.*;
+
+/**
+ * A little example Driver testing out Steve's TrackMipClusterDriver.
+ */
+
+public class TestTrackMipClusterDriver extends Driver
+{
+    public TestTrackMipClusterDriver() {
+	// Setup
+	// -----
+
+	// Digisim
+	add(new CalHitMapDriver());
+	add(new org.lcsim.digisim.DigiSimDriver());
+	add( new SimCalorimeterHitsDriver() );
+	// Tracking
+	add(new org.lcsim.contrib.Cassell.recon.Cheat.CheatReconDriver());
+	// Hitmaps
+	HitListToHitMapDriver hitmapEcalBarrel = new HitListToHitMapDriver();
+	HitListToHitMapDriver hitmapHcalBarrel = new HitListToHitMapDriver();
+	HitListToHitMapDriver hitmapEcalEndcap = new HitListToHitMapDriver();
+	HitListToHitMapDriver hitmapHcalEndcap = new HitListToHitMapDriver();
+	hitmapEcalBarrel.addInputList("EcalBarrDigiHits");
+	hitmapEcalEndcap.addInputList("EcalEndcapDigiHits");
+	hitmapHcalBarrel.addInputList("HcalBarrDigiHits");
+	hitmapHcalEndcap.addInputList("HcalEndcapDigiHits");
+	hitmapEcalBarrel.setOutput("EMBarrhitmap");
+	hitmapEcalEndcap.setOutput("EMEndcaphitmap");
+	hitmapHcalBarrel.setOutput("HADBarrhitmap");
+	hitmapHcalEndcap.setOutput("HADEndcaphitmap");
+	add(hitmapEcalBarrel);
+	add(hitmapEcalEndcap);
+	add(hitmapHcalBarrel);
+	add(hitmapHcalEndcap);
+
+	// Steve's MIP code needs an input track list called "PerfectTracks".
+	// Set that up by cloning FSReconTracks:
+	DecisionMakerSingle<Track> dummy = new DummyDecisionMakerSingle<Track>();
+	add(new ListFilterDriver(dummy, "FSReconTracks", "PerfectTracks", Track.class));
+
+	// Steve's MIP code
+	// ----------------
+
+	// Four parameter values below taken from his driver routine:
+	double dminE = 0.005;  // hard-coded now - change to detector independent value
+	double dminH = 3*dminE;  //  same here
+	double dminTrC = 0.01;  // default range is 0.0175 - 0.0225 tuned with muons
+	double mincd = 3.5;  // min density to make mip - default is 3.5 tuned with muons
+	// Set up & turn on:
+	org.lcsim.contrib.SteveMagill.TrackMipClusterDriver TMdriver = new org.lcsim.contrib.SteveMagill.TrackMipClusterDriver(dminE, dminH, dminTrC, mincd);
+	String[] tmcollnames = {"EcalBarrDigiHits","HcalBarrDigiHits","EcalEndcapDigiHits","HcalEndcapDigiHits"};
+	TMdriver.setCollectionNames(tmcollnames);
+	TMdriver.setClusterNameExtension("TMClusters");
+	add(TMdriver);
+    }
+
+
+    // Here is an example of how to read in results:
+    public void process(EventHeader event) {
+	super.process(event); // Run setup + Steve's drivers
+
+	// Read in Steve's output, i.e.:
+	//   Map<Track, BasicCluster>   "TrackMipMap"  -- for each track, the corresponding MIP cluster
+	//   Map<BasicCluster, Integer> "MipClusILMap" -- for each MIP cluster, the interaction layer
+	//   List<Cluster>              "TMClusters"   -- MIP clusters (some empty)
+	Object objTrackMipMap = event.get("TrackMipMap");
+	Object objMipClusILMap = event.get("MipClusILMap");	
+	Map<Track, BasicCluster> trkmipmap = ( Map<Track, BasicCluster> ) (objTrackMipMap);
+	Map<BasicCluster, Integer> clusILmap = ( Map<BasicCluster, Integer> ) (objMipClusILMap);
+
+	// Print out some basic info:
+	System.out.println("Looking at the "+trkmipmap.keySet().size()+" tracks found:");
+	for (Track tr : trkmipmap.keySet()) {
+	    Hep3Vector trackThreeMomentum = new BasicHep3Vector(tr.getMomentum());
+	    double trackMomentum = trackThreeMomentum.magnitude();
+	    BasicCluster mip = trkmipmap.get(tr);
+	    if (mip == null) {
+		System.out.println(" * Track with p="+trackMomentum+" has NULL MIP");
+	    } else {
+		Integer intLayer = clusILmap.get(mip);
+		if (intLayer == null) {
+		    System.out.println(" * Track with p="+trackMomentum+" has MIP with "+mip.getCalorimeterHits().size()+" hits with NULL interaction layer");
+		} else {
+		    System.out.println(" * Track with p="+trackMomentum+" has MIP with "+mip.getCalorimeterHits().size()+" hits with interaction layer of "+intLayer);
+		}
+		for (CalorimeterHit hit : mip.getCalorimeterHits()) {
+		    org.lcsim.geometry.IDDecoder id = hit.getIDDecoder();
+		    id.setID(hit.getCellID());
+		    int layer = id.getLayer();
+		    System.out.println("       - hit in layer "+layer+" of "+hit.getSubdetector().getName());
+		}
+	    }
+	}
+    }
+}
CVSspam 0.2.8