Commit in lcsim/src/org/lcsim/contrib/HansWenzel/Tracking on MAIN
TrackerHitCheaterDriver.java+182added 1.1
add a pattern recognition cheater that makes use of dima's digitization and clustering classes

lcsim/src/org/lcsim/contrib/HansWenzel/Tracking
TrackerHitCheaterDriver.java added at 1.1
diff -N TrackerHitCheaterDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ TrackerHitCheaterDriver.java	3 Oct 2007 23:00:44 -0000	1.1
@@ -0,0 +1,182 @@
+package org.lcsim.contrib.HansWenzel.Tracking;
+import hep.physics.particle.properties.ParticleType;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.EventHeader.LCMetaData;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+import hep.aida.ITree;
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.HashMap;
+
+import hep.physics.particle.BasicParticle;
+import org.lcsim.event.MCParticle;
+import org.lcsim.geometry.Subdetector;
+import org.lcsim.geometry.subdetector.SiTrackerBarrel;
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.IDetectorElementContainer;
+import org.lcsim.detector.IGeometryInfo;
+import org.lcsim.detector.ILogicalVolume;
+import org.lcsim.detector.IPhysicalVolume;
+import org.lcsim.detector.material.IMaterial;
+import org.lcsim.detector.solids.ISolid;
+import org.lcsim.detector.solids.Box;
+import org.lcsim.detector.solids.Tube;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.BasicHep3Vector;
+import org.lcsim.detector.identifier.Identifier;
+import org.lcsim.detector.driver.CollectionHandler;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.util.Driver;
+import org.lcsim.util.cache.FileCache;
+import org.lcsim.util.loop.LCSimLoop;
+import java.util.Random;
+import java.lang.Math;
+import org.lcsim.contrib.onoprien.tracking.geom.Sensor;
+import org.lcsim.contrib.onoprien.tracking.geom.SensorType;
+import org.lcsim.contrib.onoprien.tracking.hit.DigiTrackerHit;
+import org.lcsim.contrib.onoprien.tracking.hit.TrackerCluster;
+import org.lcsim.contrib.onoprien.tracking.hit.base.TrackerClusterBasic;
+import org.lcsim.contrib.onoprien.tracking.hit.TrackerHit;
+
+/*
+ * TrackerHitCheaterDriver.java
+ * This programs is to be used as "perfect" pattern recognition:
+ * meaning we use the Monte Carlo information to create maps 
+ * linking an MCParticle to the list of SimTrackerHits,DigiTrackerHits,TrackerClusters and TrackerHits. 
+ * This list can then be used in a track fitter. 
+ */
+
+/**
+ *
+ * @author Hans Wenzel
+ */
+public class TrackerHitCheaterDriver extends Driver {
+    
+    public TrackerHitCheaterDriver() {
+
+    }
+    protected void process(EventHeader event) {
+	//
+	// First get all the stuff we are interested in out of the event:
+	//
+        List<MCParticle> particles = event.get(MCParticle.class,event.MC_PARTICLES);
+	System.out.println("=========================================================");
+        System.out.println("Nr of MC particles:  "+particles.size());
+        HashMap<Sensor, ArrayList<DigiTrackerHit>> digisMap    =
+	    (HashMap<Sensor, ArrayList<DigiTrackerHit>>) event.get("DigiTrackerHits");
+	HashMap<Sensor, ArrayList<TrackerCluster>> clustersMap = 
+	    (HashMap<Sensor, ArrayList<TrackerCluster>>) event.get("TrackerClusters");
+	HashMap<Sensor, ArrayList<TrackerHit>> hitsMap = 
+            (HashMap<Sensor, ArrayList<TrackerHit>>) event.get("NewTrackerHits");
+        List<List<SimTrackerHit>> collections   = event.get(SimTrackerHit.class);
+	//
+	// Now create the Maps with the relation between Hits/clusters and MCParticle
+	//
+	Map<MCParticle,List<SimTrackerHit>>  SimTrackerHitMap  = 
+	    new HashMap<MCParticle,List<SimTrackerHit>>();
+	Map<MCParticle,List<DigiTrackerHit>> DigiTrackerHitMap = 
+	    new HashMap<MCParticle,List<DigiTrackerHit>>();
+	Map<MCParticle,List<TrackerCluster>> TrackerClusterMap = 
+	    new HashMap<MCParticle,List<TrackerCluster>>();
+	Map<MCParticle,List<TrackerHit>>     TrackerHitMap     = 
+	    new HashMap<MCParticle,List<TrackerHit>>();
+	//
+        //   Loop over all SimTrackerHit collections:
+	//
+        for (List<SimTrackerHit> collection : collections) {
+	    for (SimTrackerHit hit : collection) {
+		MCParticle particle       = hit.getMCParticle();
+		if (particle !=null){
+		    if (SimTrackerHitMap.containsKey(particle)) {
+			SimTrackerHitMap.get(particle).add(hit);
+		    } else {
+			List<SimTrackerHit> SimTrackerHitList =new ArrayList();
+			SimTrackerHitList.add(hit);
+			SimTrackerHitMap.put(particle,SimTrackerHitList);
+		    }
+		} // end if MCparticle found
+	    }   // end loop over hits
+        }// end loop over hit collections
+	System.out.println("Size of SimTrackerHitMap  "+SimTrackerHitMap.size());
+	// 
+	// Now loop over all the DigitrackerHits:
+	//
+        for (Sensor sensor : digisMap.keySet()) {
+	    for ( DigiTrackerHit digi :  digisMap.get(sensor)){
+               MCParticle particle = digi.getMCParticle();
+		if (particle !=null){
+		    if (DigiTrackerHitMap.containsKey(particle)) {
+			DigiTrackerHitMap.get(particle).add(digi);
+		    } else {
+			List<DigiTrackerHit> DigiTrackerHitList =new ArrayList();
+			DigiTrackerHitList.add(digi);
+			DigiTrackerHitMap.put(particle,DigiTrackerHitList);
+		    }
+		} // end if MCparticle found
+            }// end loop over sensors 
+	} // loop over digi tracker hits 
+	System.out.println("Size of DigiTrackerHitMap  "+DigiTrackerHitMap.size());
+	// 
+	// Now loop over all the Tracker Clusters:
+	//
+        for (Sensor sensor : clustersMap.keySet()) {
+	    for ( TrackerCluster cluster :  clustersMap.get(sensor)){
+		List< DigiTrackerHit > hitlist =  cluster.getDigiHits();
+		for ( DigiTrackerHit digi :  hitlist){
+		    MCParticle particle = digi.getMCParticle();
+		    if (particle !=null){
+			if (TrackerClusterMap.containsKey(particle)) {
+			    TrackerClusterMap.get(particle).add(cluster);
+			} else {
+			    List<TrackerCluster> TrackerClusterList =new ArrayList();
+			    TrackerClusterList.add(cluster);
+			    TrackerClusterMap.put(particle,TrackerClusterList);
+			}
+		    } // end if MCparticle found
+		}
+            }// end loop over sensors 
+	} // loop over digi tracker hits 
+	System.out.println("Size of TrackerClusterMap  "+TrackerClusterMap.size());
+	// 
+	// Now loop over all the Tracker Hits:
+	//
+        for (Sensor sensor : hitsMap.keySet()) {
+	    for ( TrackerHit thit :  hitsMap.get(sensor)){
+		List< DigiTrackerHit > hitlist =  thit.getCluster().getDigiHits();
+		for ( DigiTrackerHit digi :  hitlist){
+		    MCParticle particle = digi.getMCParticle();
+		    if (particle !=null){
+			if (TrackerHitMap.containsKey(particle)) {
+			    TrackerHitMap.get(particle).add(thit);
+			} else {
+			    List<TrackerHit> TrackerHitList =new ArrayList();
+			    TrackerHitList.add(thit);
+			    TrackerHitMap.put(particle,TrackerHitList);
+			}
+		    } // end if MCparticle found
+		}
+            }// end loop over sensors 
+	} // loop over digi tracker hits 
+	System.out.println("Size of TrackerHitMap  "+TrackerHitMap.size());
+	//
+        // Put the Maps into the event:
+	//
+	System.out.println("Now adding the maps to the event: "  );
+	event.put("SimTrackerHitMap" , SimTrackerHitMap); 
+	event.put("DigiTrackerHitMap", DigiTrackerHitMap);
+	event.put("TrackerClusterMap", TrackerClusterMap);
+	event.put("TrackerHitMap"    , TrackerHitMap);    
+    }
+}
+
+
+
+
CVSspam 0.2.8