lcsim/src/org/lcsim/contrib/uiowa
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());
+ }
+ }
+ }
+ }
+}