Commit in hps-java/src/main/java/org/lcsim/hps/filtering on MAIN | |||
MinimumHitsFilter.java | +77 | added 1.1 | |
InTimeHitsFilter.java | +98 | added 1.1 | |
EventReconFilter.java | +41 | added 1.1 | |
+216 |
Event filtering classes for HPS
diff -N MinimumHitsFilter.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ MinimumHitsFilter.java 29 Apr 2013 17:36:23 -0000 1.1 @@ -0,0 +1,77 @@
+/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package org.lcsim.hps.filtering; + +import java.util.List; +import org.lcsim.detector.identifier.IIdentifier; +import org.lcsim.detector.tracker.silicon.ChargeCarrier; +import org.lcsim.detector.tracker.silicon.SiSensor; +import org.lcsim.detector.tracker.silicon.SiSensorElectrodes; +import org.lcsim.detector.tracker.silicon.SiTrackerIdentifierHelper; +import org.lcsim.event.EventHeader; +import org.lcsim.event.RawTrackerHit; +import org.lcsim.geometry.Detector; +import org.lcsim.hps.recon.tracking.SvtUtils; + +/** + + @author mgraham + @version $Id: + */ +public class MinimumHitsFilter extends EventReconFilter{ + + private int minSiLayers=10; + private String rawTrackerHitCollectionName="SVTRawTrackerHits"; + + @Override + public void process(EventHeader event){ + incrementEventProcessed(); + if(!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) + skipEvent(); + + List<RawTrackerHit> rawHits=event.get(RawTrackerHit.class, rawTrackerHitCollectionName); + + int totalTopHit=0; + int totalBotHit=0; + + int nlayersTopHit=0; + int nlayersBotHit=0; + int[] layersTop={0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0}; + int[] layersBot={0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0}; + + for(RawTrackerHit hit : rawHits){ + int layerNumber=hit.getLayerNumber(); + boolean isTop=isHitOnTop(hit); + if(isTop){ + totalTopHit++; + layersTop[layerNumber-1]++; + } else{ + totalBotHit++; + layersBot[layerNumber-1]++; + } + + } + //require hits in the first minSiLayers for both top and bottom planes + for(int i=0;i<minSiLayers;i++){ + if(layersTop[i]==0)skipEvent(); + if(layersBot[i]==0)skipEvent(); + } + + incrementEventPassed(); + } + + + private boolean isHitOnTop(RawTrackerHit hit){ + SiSensor sensor=(SiSensor) hit.getDetectorElement(); + IIdentifier id=hit.getIdentifier(); + SiTrackerIdentifierHelper _sid_helper=(SiTrackerIdentifierHelper) sensor.getIdentifierHelper(); + + ChargeCarrier carrier=ChargeCarrier.getCarrier(_sid_helper.getSideValue(id)); + SiSensorElectrodes electrodes=((SiSensor) hit.getDetectorElement()).getReadoutElectrodes(carrier); + if(!SvtUtils.getInstance().isTopLayer(sensor)) + return false; + return true; + } +}
diff -N InTimeHitsFilter.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ InTimeHitsFilter.java 29 Apr 2013 17:36:23 -0000 1.1 @@ -0,0 +1,98 @@
+/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package org.lcsim.hps.filtering; + +import java.util.List; +import org.lcsim.detector.identifier.IIdentifier; +import org.lcsim.detector.tracker.silicon.ChargeCarrier; +import org.lcsim.detector.tracker.silicon.SiSensor; +import org.lcsim.detector.tracker.silicon.SiSensorElectrodes; +import org.lcsim.detector.tracker.silicon.SiTrackerIdentifierHelper; +import org.lcsim.event.EventHeader; +import org.lcsim.event.RawTrackerHit; +import org.lcsim.geometry.Detector; +import org.lcsim.hps.recon.tracking.HPSFittedRawTrackerHit; +import org.lcsim.hps.recon.tracking.SvtUtils; + +/** + + @author mgraham + @version $Id: + */ +public class InTimeHitsFilter extends EventReconFilter{ + + private int minSiLayers=10; + private String hitCollectionName="SVTFittedRawTrackerHits"; + private double hitTimeCut=999; + + public void setClusterTimeCut(double dtCut){ + this.hitTimeCut=dtCut; + } + + + @Override + public void process(EventHeader event){ + incrementEventProcessed(); + if(!event.hasCollection(HPSFittedRawTrackerHit.class, hitCollectionName)) + skipEvent(); + if(hitTimeCut<0) //why are you even doing this??? + return; + + List<HPSFittedRawTrackerHit> hits=event.get(HPSFittedRawTrackerHit.class, hitCollectionName); + + int totalTopHit=0; + int totalBotHit=0; + + int nlayersTopHit=0; + int nlayersBotHit=0; + int[] layersTop={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + int[] layersBot={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + + for(HPSFittedRawTrackerHit hit : hits){ + boolean timeCut=inTime(hit.getT0()); +// System.out.println("t0 =" + hit.getT0()); + if(timeCut){ + RawTrackerHit rth=hit.getRawTrackerHit(); + int layerNumber=rth.getLayerNumber(); + boolean isTop=isHitOnTop(rth); + if(isTop){ + totalTopHit++; + layersTop[layerNumber-1]++; + } else{ + totalBotHit++; + layersBot[layerNumber-1]++; + } + } + } + //require hits in the first minSiLayers for both top and bottom planes + for(int i=0; i<minSiLayers; i++){ + if(layersTop[i]==0) + skipEvent(); + if(layersBot[i]==0) + skipEvent(); + } + + incrementEventPassed(); + } + + + + private boolean inTime(double t0){ + return Math.abs(t0)<hitTimeCut; + + } + + private boolean isHitOnTop(RawTrackerHit hit){ + SiSensor sensor=(SiSensor) hit.getDetectorElement(); + IIdentifier id=hit.getIdentifier(); + SiTrackerIdentifierHelper _sid_helper=(SiTrackerIdentifierHelper) sensor.getIdentifierHelper(); + + ChargeCarrier carrier=ChargeCarrier.getCarrier(_sid_helper.getSideValue(id)); + SiSensorElectrodes electrodes=((SiSensor) hit.getDetectorElement()).getReadoutElectrodes(carrier); + if(!SvtUtils.getInstance().isTopLayer(sensor)) + return false; + return true; + } +}
diff -N EventReconFilter.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ EventReconFilter.java 29 Apr 2013 17:36:23 -0000 1.1 @@ -0,0 +1,41 @@
+/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package org.lcsim.hps.filtering; + +import org.lcsim.util.Driver; + +/** + + @author mgraham + @version $Id: + */ +public class EventReconFilter extends Driver{ + + private int nprocessed=0; + private int npassed=0; + + public EventReconFilter(){ + } + + public void endOfData(){ + System.out.println(this.getClass().getSimpleName()+" Summary: "); + System.out.println("events processed = "+nprocessed); + System.out.println("events passed = "+npassed); + System.out.println(" rejection = "+((double) npassed)/nprocessed); + + } + + public void incrementEventProcessed(){ + nprocessed++; + } + + public void incrementEventPassed(){ + npassed++; + } + + public void skipEvent(){ + throw new Driver.NextEventException(); + } +}
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