Print

Print


Author: [log in to unmask]
Date: Wed Sep 16 07:21:31 2015
New Revision: 3610

Log:
skim for fee events used for calibration

Added:
    java/trunk/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java

Added: java/trunk/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java
 =============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java	(added)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java	Wed Sep 16 07:21:31 2015
@@ -0,0 +1,55 @@
+package org.hps.recon.filtering;
+
+import org.hps.record.triggerbank.AbstractIntData;
+import org.hps.record.triggerbank.TIData;
+import org.lcsim.event.GenericObject;
+
+import org.lcsim.event.Cluster;
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+import org.hps.recon.ecal.cluster.ClusterUtilities;
+import org.hps.record.epics.EpicsData;
+public class FEEFilterDriver extends Driver
+{
+  public void process(EventHeader event) {
+
+    // only keep singles triggers:
+    if (!event.hasCollection(GenericObject.class,"TriggerBank"))
+      throw new Driver.NextEventException();
+    boolean isSingles=false;
+    for (GenericObject gob : event.get(GenericObject.class,"TriggerBank"))
+    {
+      if (!(AbstractIntData.getTag(gob) == TIData.BANK_TAG)) continue;
+      TIData tid = new TIData(gob);
+      if (tid.isSingle0Trigger()  || tid.isSingle1Trigger())
+      {
+        isSingles=true;
+        break;
+      }
+    }
+    if (!isSingles) throw new Driver.NextEventException();
+
+    // don't drop any events with EPICS data:
+    // (could also do this via event tag=31)
+    final EpicsData data = EpicsData.read(event);
+    if (data != null) return;
+
+    if (!event.hasCollection(Cluster.class, "EcalClusters"))
+      throw new Driver.NextEventException();
+    
+    for (Cluster cc : event.get(Cluster.class,"EcalClusters"))
+    {
+      // try to drop clusters:
+      //if (cc.getEnergy() < 0.6 ||
+      //    ClusterUtilities.findSeedHit(cc).getRawEnergy() < 0.4)
+      //  cc.Delete();
+
+      // keep events with a cluster over 600 MeV with seed over 400 MeV:
+      if (cc.getEnergy() > 0.6 && 
+          ClusterUtilities.findSeedHit(cc).getCorrectedEnergy() > 0.4)
+        return;
+    }
+
+    throw new Driver.NextEventException();
+  }
+}