3 added files
hps-java/src/main/java/org/lcsim/hps/filtering
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;
+ }
+}
hps-java/src/main/java/org/lcsim/hps/filtering
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;
+ }
+}
hps-java/src/main/java/org/lcsim/hps/filtering
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();
+ }
+}
CVSspam 0.2.12