Print

Print


Commit in hps-java/src/main/java/org/lcsim/hps/filtering on MAIN
MinimumHitsFilter.java+77added 1.1
InTimeHitsFilter.java+98added 1.1
EventReconFilter.java+41added 1.1
+216
3 added files
Event filtering classes for HPS

hps-java/src/main/java/org/lcsim/hps/filtering
MinimumHitsFilter.java added at 1.1
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
InTimeHitsFilter.java added at 1.1
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
EventReconFilter.java added at 1.1
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


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