Author: [log in to unmask]
Date: Mon Jun 22 16:34:50 2015
New Revision: 3182
Log:
add filters I've been using
Added:
java/trunk/recon/src/main/java/org/hps/recon/filtering/CollectionSizeFilter.java
java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalPairsFilter.java
java/trunk/recon/src/main/java/org/hps/recon/filtering/SVTSmallHitsFilter.java
Added: java/trunk/recon/src/main/java/org/hps/recon/filtering/CollectionSizeFilter.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/CollectionSizeFilter.java (added)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/CollectionSizeFilter.java Mon Jun 22 16:34:50 2015
@@ -0,0 +1,39 @@
+package org.hps.recon.filtering;
+
+import java.util.List;
+import org.lcsim.event.EventHeader;
+
+/**
+ * Accept events where the specified collection exists and is of at least the
+ * required size.
+ *
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: $
+ */
+public class CollectionSizeFilter extends EventReconFilter {
+
+ private String collectionName = "UnconstrainedV0Candidates";
+ private int minSize = 1;
+
+ public void setCollectionName(String collectionName) {
+ this.collectionName = collectionName;
+ }
+
+ public void setMinSize(int minSize) {
+ this.minSize = minSize;
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ incrementEventProcessed();
+ if (event.hasCollection(Object.class, collectionName)) {
+ List<Object> collection = event.get(Object.class, collectionName);
+ if (collection.size() < minSize) {
+ skipEvent();
+ }
+ } else {
+ skipEvent();
+ }
+ incrementEventPassed();
+ }
+}
Added: java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalPairsFilter.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalPairsFilter.java (added)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalPairsFilter.java Mon Jun 22 16:34:50 2015
@@ -0,0 +1,59 @@
+package org.hps.recon.filtering;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.hps.recon.ecal.cluster.ClusterUtilities;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.EventHeader;
+
+/**
+ * Accept events containing a pair of ECal clusters within a set time
+ * coincidence.
+ *
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: $
+ */
+public class EcalPairsFilter extends EventReconFilter {
+
+ private String clusterCollectionName = "EcalClusters";
+ private double maxDt = 5.0;
+
+ public void setClusterCollectionName(String clusterCollectionName) {
+ this.clusterCollectionName = clusterCollectionName;
+ }
+
+ public void setMaxDt(double maxDt) {
+ this.maxDt = maxDt;
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ incrementEventProcessed();
+ if (event.hasCollection(Cluster.class, clusterCollectionName)) {
+ List<Cluster> clusters = event.get(Cluster.class, clusterCollectionName);
+ if (clusters.size() < 2) {
+ skipEvent();
+ }
+ List<Double> clusterTimes = new ArrayList<Double>();
+ for (Cluster cluster : clusters) {
+ clusterTimes.add(ClusterUtilities.getSeedHitTime(cluster));
+ }
+ Collections.sort(clusterTimes);
+ boolean acceptEvent = false;
+ for (int i = 0; i < clusterTimes.size() - 1; i++) {
+ double dt = clusterTimes.get(i + 1) - clusterTimes.get(i);
+// System.out.println(dt);
+ if (dt < maxDt) {
+ acceptEvent = true;
+ }
+ }
+ if (!acceptEvent) {
+ skipEvent();
+ }
+ } else {
+ skipEvent();
+ }
+ incrementEventPassed();
+ }
+}
Added: java/trunk/recon/src/main/java/org/hps/recon/filtering/SVTSmallHitsFilter.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/SVTSmallHitsFilter.java (added)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/SVTSmallHitsFilter.java Mon Jun 22 16:34:50 2015
@@ -0,0 +1,77 @@
+package org.hps.recon.filtering;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.RawTrackerHit;
+
+/**
+ * Reject events with noise hits in the SVT. This cut rejects events affected by
+ * burst-mode noise.
+ *
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: $
+ */
+public class SVTSmallHitsFilter extends EventReconFilter {
+
+ @Override
+ public void process(EventHeader event) {
+ incrementEventProcessed();
+
+ if (event.hasCollection(RawTrackerHit.class, "SVTRawTrackerHits")) {
+ // Get RawTrackerHit collection from event.
+ List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, "SVTRawTrackerHits");
+
+ if (countSmallHits(rawHits) > 3) {
+ skipEvent();
+ }
+ } else {
+ skipEvent();
+ }
+ incrementEventPassed();
+ }
+
+ public static int countSmallHits(List<RawTrackerHit> rawHits) {
+ int smallHitCount = 0;
+ Map<HpsSiSensor, Set<Integer>> hitMap = new HashMap<HpsSiSensor, Set<Integer>>();
+
+ for (RawTrackerHit hit : rawHits) {
+ HpsSiSensor sensor = (HpsSiSensor) hit.getDetectorElement();
+ Set<Integer> hitStrips = hitMap.get(sensor);
+ if (hitStrips == null) {
+ hitStrips = new HashSet<Integer>();
+ hitMap.put(sensor, hitStrips);
+ }
+ int strip = hit.getIdentifierFieldValue("strip");
+ hitStrips.add(strip);
+ }
+
+ for (RawTrackerHit hit : rawHits) {
+ if (isSmallHit(hitMap, hit)) {
+ smallHitCount++;
+ }
+ }
+ return smallHitCount;
+ }
+
+ public static boolean isSmallHit(Map<HpsSiSensor, Set<Integer>> hitMap, RawTrackerHit hit) {
+ HpsSiSensor sensor = (HpsSiSensor) hit.getDetectorElement();
+ int strip = hit.getIdentifierFieldValue("strip");
+ double pedestal = sensor.getPedestal(strip, 0);
+ double noise = sensor.getNoise(strip, 0);
+
+ if (hitMap.get(sensor) != null && (hitMap.get(sensor).contains(strip - 1) || hitMap.get(sensor).contains(strip + 1))) {
+ return false;
+ }
+ for (int i = 0; i < 6; i++) {
+ if (hit.getADCValues()[i] > pedestal + 4.0 * noise) {
+ return false;
+ }
+ }
+ return true;
+ }
+}
|