Author: [log in to unmask] Date: Mon Dec 7 11:34:19 2015 New Revision: 4015 Log: filter on hits per sensor. Added: java/trunk/recon/src/main/java/org/hps/recon/filtering/SvtHitMultiplicityFilter.java Added: java/trunk/recon/src/main/java/org/hps/recon/filtering/SvtHitMultiplicityFilter.java ============================================================================= --- java/trunk/recon/src/main/java/org/hps/recon/filtering/SvtHitMultiplicityFilter.java (added) +++ java/trunk/recon/src/main/java/org/hps/recon/filtering/SvtHitMultiplicityFilter.java Mon Dec 7 11:34:19 2015 @@ -0,0 +1,73 @@ +/** + * + */ +package org.hps.recon.filtering; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.lcsim.event.EventHeader; +import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D; + +/** + * + * Filter events based on max nr of strip hits + * + * @author Per Hansson Adrian <[log in to unmask]> + * + */ +public class SvtHitMultiplicityFilter extends EventReconFilter { + + private final static String stripClusterCollectionName = "StripClusterer_SiTrackerHitStrip1D"; + private int hitsPerSensor = 1; + + + @Override + protected void process(EventHeader event) { + + incrementEventProcessed(); + + // Make sure there are any strips in the event + if(!event.hasCollection(SiTrackerHitStrip1D.class, stripClusterCollectionName)) + skipEvent(); + + // Find all strip clusters in the events + List<SiTrackerHitStrip1D> stripClusters = event.get(SiTrackerHitStrip1D.class, stripClusterCollectionName); + + + Map<String, List<SiTrackerHitStrip1D> > sensorHitMap= new HashMap< String, List<SiTrackerHitStrip1D> >(); + + for(SiTrackerHitStrip1D cluster : stripClusters) { + String sensorName = cluster.getRawHits().get(0).getDetectorElement().getName(); + + List<SiTrackerHitStrip1D> hits = sensorHitMap.get(sensorName); + if(hits == null) { + hits = new ArrayList<SiTrackerHitStrip1D>(); + } + hits.add(cluster); + } + + + // go through and check that the number of hits for each layer is what's required + for(Map.Entry<String, List<SiTrackerHitStrip1D>> entry : sensorHitMap.entrySet()) { + if( entry.getValue().size() != hitsPerSensor) + skipEvent(); + } + + + + + + incrementEventPassed(); + + } + + public void setHitsPerSensor(int hitsPerSensor) { + this.hitsPerSensor = hitsPerSensor; + } + + + +}