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