Commit in hps-java/src/main/java/org/lcsim/hps/users/omoreno on MAIN | |||
SimpleSvtTrigger.java | +136 | added 1.1 |
Driver to trigger the SVT if a "findable" track is present
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); + } + +}
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