Commit in hps-java/src/main/java/org/lcsim/hps/users/omoreno on MAIN
SimpleSvtTrigger.java+136added 1.1
Driver to trigger the SVT if a "findable" track is present

hps-java/src/main/java/org/lcsim/hps/users/omoreno
SimpleSvtTrigger.java added at 1.1
diff -N SimpleSvtTrigger.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SimpleSvtTrigger.java	9 Nov 2012 01:44:11 -0000	1.1
@@ -0,0 +1,136 @@
+package org.lcsim.hps.users.omoreno;
+
+//--- java ---//
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+//--- 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;
+
+//--- hps-java ---//
+import org.lcsim.hps.recon.tracking.FindableTrack;
+import org.lcsim.hps.recon.tracking.SvtUtils;
+import org.lcsim.hps.recon.tracking.apv25.Apv25Full;
+
+public class SimpleSvtTrigger extends Driver {
+    
+    FindableTrack findable = null;
+    
+    int eventNumber = 0;
+    int numberOfSvtLayers = 12;
+    int numberOfSvtLayersHit = 10;
+    
+    boolean debug = false;
+    
+    //--- Setters ---//
+    //---------------//
+    
+    /**
+     * Enable/disable debug
+     */
+    public void setDebug(boolean debug){
+        this.debug = debug; 
+    }
+    
+    /**
+     * Set the number of SVT Layers
+     */
+    public void setNumberOfSvtLayers(int numberOfSvtLayers){
+        this.numberOfSvtLayers = numberOfSvtLayers;
+    }
+    
+    /**
+     * Set the number of SVT Layers that an MC particle should hit
+     */
+    public void setNumberOfSvtLayersHit(int numberOfSvtLayersHit){
+        this.numberOfSvtLayersHit = numberOfSvtLayersHit;
+    }
+    
+    /**
+     * Dflt Ctor 
+     */
+    public SimpleSvtTrigger(){ 
+    }
+    
+    /**
+     *
+     */
+    public SimpleSvtTrigger(int numberOfSvtLayers, int numberOfSvtLayersHit){
+        this.numberOfSvtLayers = numberOfSvtLayers;
+        this.numberOfSvtLayersHit = numberOfSvtLayersHit;
+    }
+
+    /**
+     * 
+     */
+    protected void process(EventHeader event){
+        
+        eventNumber++;
+        
+        // If the event doesn't contain SimTrackerHits; skip the event
+        if(!event.hasCollection(SimTrackerHit.class, "TrackerHits")) return;
+        List<SimTrackerHit> simHits = event.get(SimTrackerHit.class, "TrackerHits");
+        
+        // Get the MC Particles associated with the SimTrackerHits
+        List<MCParticle> mcParticles = event.getMCParticles();
+        if(debug){
+            String particleList = "[ ";
+            for(MCParticle mcParticle : mcParticles){
+                particleList += mcParticle.getPDGID() + ", ";
+            }
+            particleList += "]";
+            this.printDebug("MC Particles: " + particleList);
+        }
+        
+        // Check if the MC particle track should be found by the tracking algorithm
+        findable = new FindableTrack(event, simHits, numberOfSvtLayers);
+        
+        // Use an iterator to avoid ConcurrentModificationException
+        Iterator<MCParticle> mcParticleIterator = mcParticles.iterator();
+        while(mcParticleIterator.hasNext()){
+            MCParticle mcParticle = mcParticleIterator.next();
+            if(findable.isTrackFindable(mcParticle, numberOfSvtLayersHit)){
+                
+                // Check that all SimTrackerHits are within the same detector volume
+                Set<SimTrackerHit> trackerHits = findable.getSimTrackerHits(mcParticle);
+                if(this.isSameSvtVolume(trackerHits)){
+                    // If all hits lie within the same detector volume, then trigger the SVT
+                    // This is a redundant check but better safe than sorry
+                    this.printDebug("The SVT has been triggered on event: " + eventNumber);
+                    Apv25Full.readoutBit = true;
+                    break;
+                }
+            } else { 
+                mcParticleIterator.remove();
+            }
+        }
+    }
+    
+    /**
+     * Check that all SVT hits are within the same detector volume (either top or bottom)
+     * @param simTrackerHits
+     * @return true if the hits are within the same detector volume, false otherwise
+     */
+    private boolean isSameSvtVolume(Set<SimTrackerHit> simTrackerHits){
+        int volumeIndex = 0;
+        for(SimTrackerHit simTrackerHit : simTrackerHits){
+            if(SvtUtils.getInstance().isTopLayer((SiSensor) simTrackerHit.getDetectorElement())) volumeIndex++;
+            else volumeIndex--;
+        }
+        return Math.abs(volumeIndex) == simTrackerHits.size();
+    }
+    
+    /**
+     * print debug statements
+     */
+    public void printDebug(String debugStatement){
+        if(!debug) return;
+        System.out.println(this.getClass().getSimpleName() + ": " + debugStatement);     
+    }
+    
+}
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