Print

Print


Author: [log in to unmask]
Date: Thu Jul 16 11:48:29 2015
New Revision: 3261

Log:
more filters; add maxSize option for collection size

Added:
    java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalSinglesFilter.java
      - copied, changed from r3257, java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalPairsFilter.java
    java/trunk/recon/src/main/java/org/hps/recon/filtering/TriggerTypeFilter.java
      - copied, changed from r3257, java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalPairsFilter.java
Modified:
    java/trunk/recon/src/main/java/org/hps/recon/filtering/CollectionSizeFilter.java

Modified: java/trunk/recon/src/main/java/org/hps/recon/filtering/CollectionSizeFilter.java
 =============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/CollectionSizeFilter.java	(original)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/CollectionSizeFilter.java	Thu Jul 16 11:48:29 2015
@@ -4,8 +4,8 @@
 import org.lcsim.event.EventHeader;
 
 /**
- * Accept events where the specified collection exists and is of at least the
- * required size.
+ * Accept events where the specified collection exists and is of the required
+ * size range.
  *
  * @author Sho Uemura <[log in to unmask]>
  * @version $Id: $
@@ -14,6 +14,7 @@
 
     private String collectionName = "UnconstrainedV0Candidates";
     private int minSize = 1;
+    private int maxSize = Integer.MAX_VALUE;
 
     public void setCollectionName(String collectionName) {
         this.collectionName = collectionName;
@@ -23,12 +24,16 @@
         this.minSize = minSize;
     }
 
+    public void setMaxSize(int maxSize) {
+        this.maxSize = maxSize;
+    }
+
     @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) {
+            if (collection.size() < minSize || collection.size() > maxSize) {
                 skipEvent();
             }
         } else {

Copied: java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalSinglesFilter.java (from r3257, java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalPairsFilter.java)
 =============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalPairsFilter.java	(original)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalSinglesFilter.java	Thu Jul 16 11:48:29 2015
@@ -1,30 +1,72 @@
 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.
+ * Accept events containing an ECal cluster passing cuts.
  *
  * @author Sho Uemura <[log in to unmask]>
  * @version $Id: $
  */
-public class EcalPairsFilter extends EventReconFilter {
+public class EcalSinglesFilter extends EventReconFilter {
 
     private String clusterCollectionName = "EcalClusters";
-    private double maxDt = 5.0;
+    private double minX = -500;
+    private double maxX = 500;
+    private double minY = -500;
+    private double maxY = 500;
+    private int minSize = 3;
+    private int maxSize = 7;
+    private double minT = 42.0;
+    private double maxT = 59.0;
+    private double minE = 0.7;
+    private double maxE = 1.05;
 
     public void setClusterCollectionName(String clusterCollectionName) {
         this.clusterCollectionName = clusterCollectionName;
     }
 
-    public void setMaxDt(double maxDt) {
-        this.maxDt = maxDt;
+    public void setMinX(double minX) {
+        this.minX = minX;
+    }
+
+    public void setMaxX(double maxX) {
+        this.maxX = maxX;
+    }
+
+    public void setMinY(double minY) {
+        this.minY = minY;
+    }
+
+    public void setMaxY(double maxY) {
+        this.maxY = maxY;
+    }
+
+    public void setMinSize(int minSize) {
+        this.minSize = minSize;
+    }
+
+    public void setMaxSize(int maxSize) {
+        this.maxSize = maxSize;
+    }
+
+    public void setMinT(double minT) {
+        this.minT = minT;
+    }
+
+    public void setMaxT(double maxT) {
+        this.maxT = maxT;
+    }
+
+    public void setMinE(double minE) {
+        this.minE = minE;
+    }
+
+    public void setMaxE(double maxE) {
+        this.maxE = maxE;
     }
 
     @Override
@@ -32,27 +74,32 @@
         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>();
+            boolean acceptEvent = false;
             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;
+                int clusterSize = cluster.getCalorimeterHits().size();
+                double clusterTime = ClusterUtilities.getSeedHitTime(cluster);
+                if (clusterSize <= minSize || clusterSize >= maxSize) {
+                    continue;
                 }
+                if (clusterTime < minT || clusterTime > maxT) {
+                    continue;
+                }
+                if (cluster.getEnergy() < minE || cluster.getEnergy() > maxE) {
+                    continue;
+                }
+                if (cluster.getPosition()[0] < minX || cluster.getPosition()[0] > maxX) {
+                    continue;
+                }
+                if (cluster.getPosition()[1] < minY || cluster.getPosition()[1] > maxY) {
+                    continue;
+                }
+                acceptEvent = true;
             }
             if (!acceptEvent) {
                 skipEvent();
             }
         } else {
-                skipEvent();
+            skipEvent();
         }
         incrementEventPassed();
     }

Copied: java/trunk/recon/src/main/java/org/hps/recon/filtering/TriggerTypeFilter.java (from r3257, java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalPairsFilter.java)
 =============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalPairsFilter.java	(original)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/TriggerTypeFilter.java	Thu Jul 16 11:48:29 2015
@@ -1,59 +1,62 @@
 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.hps.recon.ecal.triggerbank.AbstractIntData;
+import org.hps.recon.ecal.triggerbank.TIData;
 import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
 
 /**
- * Accept events containing a pair of ECal clusters within a set time
- * coincidence.
+ * Accept events with the desired trigger bit.
  *
  * @author Sho Uemura <[log in to unmask]>
  * @version $Id: $
  */
-public class EcalPairsFilter extends EventReconFilter {
+public class TriggerTypeFilter extends EventReconFilter {
 
-    private String clusterCollectionName = "EcalClusters";
-    private double maxDt = 5.0;
+    TriggerType triggerType = TriggerType.all;
 
-    public void setClusterCollectionName(String clusterCollectionName) {
-        this.clusterCollectionName = clusterCollectionName;
+    public enum TriggerType {
+
+        all, singles0, singles1, pairs0, pairs1
     }
 
-    public void setMaxDt(double maxDt) {
-        this.maxDt = maxDt;
+    public void setTriggerType(String triggerType) {
+        this.triggerType = TriggerType.valueOf(triggerType);
     }
 
     @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 (event.hasCollection(GenericObject.class, "TriggerBank")) {
+            for (GenericObject data : event.get(GenericObject.class, "TriggerBank")) {
+                if (AbstractIntData.getTag(data) == TIData.BANK_TAG) {
+                    TIData triggerData = new TIData(data);
+                    if (!matchTriggerType(triggerData))//only process singles0 triggers...
+                    {
+                        skipEvent();
+                    }
                 }
             }
-            if (!acceptEvent) {
-                skipEvent();
-            }
         } else {
-                skipEvent();
+            skipEvent();
         }
         incrementEventPassed();
     }
+
+    public boolean matchTriggerType(TIData triggerData) {
+        switch (triggerType) {
+            case all:
+                return true;
+            case singles0:
+                return triggerData.isSingle0Trigger();
+            case singles1:
+                return triggerData.isSingle1Trigger();
+            case pairs0:
+                return triggerData.isPair0Trigger();
+            case pairs1:
+                return triggerData.isPair1Trigger();
+            default:
+                return false;
+        }
+    }
 }