Commit in hps-java/src/main/java/org/lcsim/hps/users/omoreno on MAIN
SvtTrackRecoEfficiency.java+35-61.4 -> 1.5
Make the required number of layers hit by an MC particle settable

hps-java/src/main/java/org/lcsim/hps/users/omoreno
SvtTrackRecoEfficiency.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- SvtTrackRecoEfficiency.java	27 Sep 2012 06:55:57 -0000	1.4
+++ SvtTrackRecoEfficiency.java	2 Oct 2012 06:15:52 -0000	1.5
@@ -36,6 +36,7 @@
 import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
 import org.lcsim.geometry.Detector;
 
+import org.lcsim.hps.recon.tracking.HPSFittedRawTrackerHit;
 //--- hps-java ---//
 import org.lcsim.hps.recon.tracking.SvtUtils;
 import org.lcsim.hps.recon.tracking.TrackAnalysis;
@@ -45,7 +46,7 @@
 /**
  * 
  * @author Omar Moreno <[log in to unmask]>
- * @version $Id: SvtTrackRecoEfficiency.java,v 1.4 2012/09/27 06:55:57 omoreno Exp $ 
+ * @version $Id: SvtTrackRecoEfficiency.java,v 1.5 2012/10/02 06:15:52 omoreno Exp $ 
  */
 public class SvtTrackRecoEfficiency extends Driver {
 
@@ -105,6 +106,14 @@
     public void setMomentumOutputFile(String momentumOutputFile){
         this.momentumOutputFile = momentumOutputFile;
     }
+    
+    /**
+     * Set the required number of layers an MC particle must hit 
+     */
+    public void setTotalLayersHit(int totalLayersHit){
+        if(totalLayersHit%2 == 1) throw new RuntimeException(this.getClass().getSimpleName() + ": Total number of layers hit must be even");
+        this.totalLayersHit = totalLayersHit;
+    }
 
     /**
      * 
@@ -170,21 +179,33 @@
         }
 
         // The SimTrackerHits should not be stored for more than 200 events
-        if(eventNumber%500 == 0 && !simTrackerHits.isEmpty()){
+        if(eventNumber%200 == 0 && !simTrackerHits.isEmpty()){
             simTrackerHits.clear();
         }
 
         // Skip the event if it doesn't contain RawTrackerHits; Only interested in triggered events
         if(!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) return;
         
+        List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
+        for(RawTrackerHit rawHit : rawHits){
+            System.out.println(this.getClass().getSimpleName() + ": Sensor: " + SvtUtils.getInstance().getDescription((SiSensor) rawHit.getDetectorElement())
+                   + ": Raw hit channel: " + rawHit.getIdentifierFieldValue("strip"));
+        }
+        
+        List<HPSFittedRawTrackerHit> fittedRawHits = event.get(HPSFittedRawTrackerHit.class, "SVTFittedRawTrackerHits");
+        for(HPSFittedRawTrackerHit fittedRawHit : fittedRawHits){
+            System.out.println(this.getClass().getSimpleName() + ": Sensor: " + SvtUtils.getInstance().getDescription((SiSensor) fittedRawHit.getRawTrackerHit().getDetectorElement()) 
+                    + ": Raw hit channel: " + fittedRawHit.getRawTrackerHit().getIdentifierFieldValue("strip") + ": Fit" + fittedRawHit.getShapeFitParameters());
+        }
+        
         System.out.println(this.getClass().getSimpleName() + ": Number of SimTrackerHits: " + simTrackerHits.size());
         
         // Get the MC Particles associated with the SimTrackerHits
         List<MCParticle> mcParticles = new ArrayList<MCParticle>();
         System.out.print(this.getClass().getSimpleName() + ": MC Particles: ");
         for(SimTrackerHit simTrackerHit : simTrackerHits){
-            System.out.print(simTrackerHit.getMCParticle().getPDGID() + " ");
             if(mcParticles.contains(simTrackerHit.getMCParticle())) continue;
+            System.out.print(simTrackerHit.getMCParticle().getPDGID() + " ");
             mcParticles.add(simTrackerHit.getMCParticle());
         }
         System.out.print("\n");
@@ -196,10 +217,13 @@
         trackIsFindable = false;
         while(mcParticleIterator.hasNext()){
             MCParticle mcParticle = mcParticleIterator.next();
-            if(findable.isTrackFindable(mcParticle, 10)){
+            if(findable.isTrackFindable(mcParticle, totalLayersHit)){
                 
                 // Check that all SimTrackerHits are within the same detector volume
                 Set<SimTrackerHit> trackerHits = findable.getSimTrackerHits(mcParticle);
+                for(SimTrackerHit trackerHit : trackerHits){
+                    System.out.println(this.getClass().getSimpleName() + ": SimTrackerHit position: " + trackerHit.getPositionVec().toString());
+                }
                 if(this.isSameSvtVolume(trackerHits)){
                     if(debug) System.out.println(this.getClass().getSimpleName() + ": Track is findable ...");
                     findableTracks++;
@@ -214,13 +238,17 @@
         if(!event.hasCollection(Track.class, trackCollectionName) || !trackIsFindable) return;
         List<Track> tracks = event.get(Track.class, trackCollectionName);
         
+        System.out.println(this.getClass().getSimpleName() + ": Number of tracks: " + tracks.size());
+        
         if(mcParticles.isEmpty() && !tracks.isEmpty()){
             throw new RuntimeException(this.getClass().getSimpleName() + ": Tracks have no associated MC particle");
         }
         
+        List<HelicalTrackHit> stereoHits = event.get(HelicalTrackHit.class, stereoHitCollectionName);
+        System.out.println(this.getClass().getSimpleName() + ": Number of stereo hits: " + stereoHits.size());
+        
         // Relate a stereo hits to a SimTrackerHit; This is a required argument by TrackAnalysis
-        RelationalTable<HelicalTrackHit, MCParticle> hitToMC = 
-                stereoHitToMC(event.get(HelicalTrackHit.class, stereoHitCollectionName), simTrackerHits);
+        RelationalTable<HelicalTrackHit, MCParticle> hitToMC = stereoHitToMC(stereoHits, simTrackerHits);
         
         // Check if an MC particle is related to a found track
         for(Track track : tracks){
@@ -239,6 +267,7 @@
         
         if(trackingEfficiencyPlots){
             // If the list still contains MC Particles, a matching track wasn't found
+            System.out.println(this.getClass().getSimpleName() + ": No matching track found");
             for(MCParticle mcParticle : mcParticles){
                 aida.histogram1D("Tracking Efficiency").fill(mcParticle.getMomentum().magnitude(), 0);
                 aida.histogram1D("Momentum").fill(mcParticle.getMomentum().magnitude());
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