Commit in hps-java/src/main/java/org/lcsim/hps/users/omoreno on MAIN
SvtTrackRecoEfficiency.java+182added 1.1
Driver to find track reconstruction efficiency

hps-java/src/main/java/org/lcsim/hps/users/omoreno
SvtTrackRecoEfficiency.java added at 1.1
diff -N SvtTrackRecoEfficiency.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SvtTrackRecoEfficiency.java	18 Sep 2012 23:14:28 -0000	1.1
@@ -0,0 +1,182 @@
+package org.lcsim.hps.users.omoreno;
+
+//--- java ---//
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.ArrayList;
+
+//--- lcsim ---//
+import org.lcsim.util.Driver;
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.Track;
+
+//--- hps-java ---//
+import org.lcsim.hps.recon.tracking.SvtUtils;
+import org.lcsim.hps.recon.tracking.TrackUtils;
+
+/**
+ * 
+ * @author Omar Moreno <[log in to unmask]>
+ * @version $Id: SvtTrackRecoEfficiency.java,v 1.1 2012/09/18 23:14:28 omoreno Exp $ 
+ */
+public class SvtTrackRecoEfficiency extends Driver {
+
+    // Map to store SimTrackerHits for a given event
+    TreeMap<Integer, List<SimTrackerHit>> eventToSimTrackerHits = new TreeMap<Integer, List<SimTrackerHit>>();
+    TrackUtils trkUtils = new TrackUtils();
+
+    // Collection Names
+    String simTrackerHitCollectionName = "TrackerHits";
+    String rawTrackerHitCollectionName = "SVTRawTrackerHits";
+    String trackCollectionName = "MatchedTracks";
+
+    int eventNumber = 0;
+    //    List<Integer> topSimTrackerHits = new ArrayList<Integer>(10);
+    //    List<Integer> bottomSimTrackerHits = new ArrayList<Integer>(10);
+    int[] topSimTrackerHits;
+    int[] bottomSimTrackerHits;
+    double topPossibleTracks, bottomPossibleTracks, possibleTracks;
+    double totalTopTracks, totalBottomTracks, totalTracks;
+
+
+    boolean debug = false;
+
+    /**
+     *  Enable/Disable debug
+     */
+    public void setDebug(boolean debug){
+        this.debug = debug;
+    }
+
+    /**
+     * Dflt Ctor
+     */
+    public SvtTrackRecoEfficiency(){
+    }
+
+    public void process(EventHeader event){
+
+        eventNumber++;
+
+        // If the event contains SimTrackerHits store them
+        if(event.hasCollection(SimTrackerHit.class, simTrackerHitCollectionName)){
+            List<SimTrackerHit> simTrackerHits = event.get(SimTrackerHit.class, simTrackerHitCollectionName);
+            eventToSimTrackerHits.put(eventNumber, simTrackerHits);
+            System.out.println(this.getClass().getSimpleName() + ": Event: " + eventNumber + " Number of SimTrackerHits:  " + simTrackerHits.size());
+
+        }
+
+        // The SimTrackerHits should not be stored for more than 200 events
+        if(!eventToSimTrackerHits.isEmpty()){
+            Integer firstEvent = eventToSimTrackerHits.firstKey();
+            if(firstEvent.intValue() + 200 < eventNumber){
+                eventToSimTrackerHits.remove(firstEvent);
+            }
+        }
+
+        // If the event doesn't contain RawTrackerHits skip it
+        if(!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) return;
+
+        if(eventToSimTrackerHits.isEmpty()){
+            throw new RuntimeException(this.getClass().getSimpleName() + ": There are no SimTrackerHits associated with the RawTrackerHits");
+        }
+
+        List<SimTrackerHit> simTrackerHits = eventToSimTrackerHits.get(eventToSimTrackerHits.firstKey());
+        for(SimTrackerHit simTrackerHit : simTrackerHits){
+            MCParticle particle = simTrackerHit.getMCParticle();
+            System.out.println(this.getClass().getSimpleName() + ": MC Particle: " + particle.getPDGID());
+            System.out.println(this.getClass().getSimpleName() + ": SimTrackerHit: " + SvtUtils.getInstance().getDescription((SiSensor) simTrackerHit.getDetectorElement()));
+        }
+
+        this.countHitsPerLayer(simTrackerHits);
+
+        // Check if a track should be found
+        if(this.hasConsecutiveHits(topSimTrackerHits)){
+            topPossibleTracks++; 
+            possibleTracks++;
+            System.out.println(this.getClass().getSimpleName() + ": Found Top Possible Track");
+        } else if(this.hasConsecutiveHits(bottomSimTrackerHits)){
+            bottomPossibleTracks++;
+            System.out.println(this.getClass().getSimpleName() + ": Found Bottom Possible Track");
+            possibleTracks++;
+        } else {
+            return;
+        }
+
+        // Get the RawTrackerHits from the event
+//        List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
+//        for(RawTrackerHit rawHit : rawHits){
+//            System.out.println(this.getClass().getSimpleName() + ": RawTrackerHit: " + SvtUtils.getInstance().getDescription((SiSensor) rawHit.getDetectorElement()));
+//        }
+
+        // If consecutive hits were found, check if a track was also found
+        if(!event.hasCollection(Track.class, trackCollectionName)) return;
+
+        List<Track> tracks = event.get(Track.class, trackCollectionName);
+
+        for(Track track : tracks){
+            trkUtils.setTrack(track);
+            if(trkUtils.getZ0() > 0){
+                totalTopTracks++;
+                System.out.println(this.getClass().getSimpleName() + ": Found Top Track");
+            }
+            else{
+                totalBottomTracks++;
+                System.out.println(this.getClass().getSimpleName() + ": Found Bottom Track");
+            }
+            totalTracks++;
+        }
+    }
+
+    /**
+     *
+     */
+    private boolean hasConsecutiveHits(int[] topSimTrackerHits2){
+      for(int index = 0; index < topSimTrackerHits2.length; index++){
+        if(topSimTrackerHits2[index] == 0) return false;
+      } 
+     return true; 
+    }
+
+    /**
+     *
+     */
+    private void countHitsPerLayer(List<SimTrackerHit> simTrackerHits){
+        topSimTrackerHits = new int[10];
+        bottomSimTrackerHits = new int[10];
+
+        SiSensor sensor = null;
+        for(SimTrackerHit simTrackerHit : simTrackerHits){
+            // The only hits of interest are those created by an electron (or positron)
+            if(Math.abs(simTrackerHit.getMCParticle().getPDGID()) != 11) continue;
+            sensor = (SiSensor) simTrackerHit.getDetectorElement();
+            if(SvtUtils.getInstance().isTopLayer(sensor)){
+                topSimTrackerHits[SvtUtils.getInstance().getLayerNumber(sensor) - 1]++;
+            } else {
+                bottomSimTrackerHits[SvtUtils.getInstance().getLayerNumber(sensor) - 1]++;
+            }
+        }
+    }
+
+   @Override
+    public void endOfData(){
+        System.out.println("%===============================================================%");
+        System.out.println("%============== Track Reconstruction Efficiencies ==============%");
+        System.out.println("%===============================================================%\n%");
+        if(possibleTracks > 0){
+            System.out.println("% Total Track Reconstruction Efficiency: " + (totalTracks/possibleTracks)*100 + "%");
+        }
+        if(topPossibleTracks > 0){
+            System.out.println("% Top Track Reconstruction Efficiency: " + (totalTopTracks/topPossibleTracks)*100 + "%");
+        }
+        if(bottomPossibleTracks > 0){
+            System.out.println("% Bottom Track Reconstruction Efficiency: " + (totalBottomTracks/bottomPossibleTracks)*100 + "%");
+        }
+        System.out.println("%\n%===============================================================%");
+    } 
+}
CVSspam 0.2.12


Use REPLY-ALL to reply to list

To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1