Print

Print


Commit in java/trunk/users/src/main/java/org/lcsim/hps/users/meeg on MAIN
FilterMCBunches.java+48-1307 -> 308
ecal pair filter

java/trunk/users/src/main/java/org/lcsim/hps/users/meeg
FilterMCBunches.java 307 -> 308
--- java/trunk/users/src/main/java/org/lcsim/hps/users/meeg/FilterMCBunches.java	2014-03-17 23:13:16 UTC (rev 307)
+++ java/trunk/users/src/main/java/org/lcsim/hps/users/meeg/FilterMCBunches.java	2014-03-18 01:06:55 UTC (rev 308)
@@ -46,7 +46,9 @@
         options.addOption(opt_e);
         //options.addOption(new Option("e", true, "Interval between non-empty events"));
         options.addOption(new Option("n", true, "Number of events to read"));
+        options.addOption(new Option("w", true, "Number of events to write"));
         options.addOption(new Option("a", false, "All events - no cuts"));
+        options.addOption(new Option("d", false, "Filter requiring enough ECal hit energy in both top and bottom"));
         options.addOption(new Option("t", false, "Filter requiring enough SimTrackerHits to make tracks in top and bottom"));
         options.addOption(new Option("r", false, "Filter requiring enough RawTrackerHits to make tracks in top and bottom"));
         options.addOption(new Option("p", false, "Filter requiring at least 2 particles with enough hits to make tracks"));
@@ -94,6 +96,13 @@
                 tester = new EcalEventTester(0.05);
             }
         }
+        if (cl.hasOption("d")) {
+            if (cl.hasOption("E")) {
+                tester = new EcalPairEventTester(Double.valueOf(cl.getOptionValue("E")));
+            } else {
+                tester = new EcalPairEventTester(0.05);
+            }
+        }
         if (cl.hasOption("t")) {
             if (cl.hasOption("L")) {
                 tester = new TrackerEventTester(Integer.valueOf(cl.getOptionValue("L")));
@@ -125,9 +134,13 @@
         }
 
         int nEvents = -1;
+        int nEventsToWrite = -1;
         if (cl.hasOption("n")) {
             nEvents = Integer.valueOf(cl.getOptionValue("n"));
         }
+        if (cl.hasOption("w")) {
+            nEventsToWrite = Integer.valueOf(cl.getOptionValue("w"));
+        }
         int readEvents = 0;
         int writtenEvents = 0;
 
@@ -176,6 +189,9 @@
                             throw new RuntimeException(e);
                         }
                     }
+                    if (nEventsToWrite != -1 && writtenEvents == nEventsToWrite) {
+                        break fileLoop;
+                    }
                 }
             }
             try {
@@ -261,6 +277,7 @@
     }
 
     private static class TrackerEventTester extends EventTester {
+
         private int hitsNeeded;
 
         public TrackerEventTester(int hitsNeeded) {
@@ -301,7 +318,7 @@
         @Override
         public boolean goodEvent(EventHeader event) {
             List<SimCalorimeterHit> ecalHits = event.getSimCalorimeterHits("EcalHits");
-            List<SimTrackerHit> trackerHits = event.getSimTrackerHits("TrackerHits");
+//            List<SimTrackerHit> trackerHits = event.getSimTrackerHits("TrackerHits");
 
             double maxE = 0;
             double totalE = 0;
@@ -319,6 +336,36 @@
         }
     }
 
+    private static class EcalPairEventTester extends EventTester {
+
+        double eCut;
+
+        public EcalPairEventTester(double eCut) {
+            this.eCut = eCut;
+            LCSimConditionsManagerImplementation.register();
+        }
+
+        @Override
+        public boolean goodEvent(EventHeader event) {
+            List<SimCalorimeterHit> ecalHits = event.getSimCalorimeterHits("EcalHits");
+//            List<SimTrackerHit> trackerHits = event.getSimTrackerHits("TrackerHits");
+
+            double topE = 0, botE = 0;
+            for (SimCalorimeterHit hit : ecalHits) {
+                if (hit.getIdentifierFieldValue("iy") > 0) {
+                    topE += hit.getRawEnergy();
+                } else {
+                    botE += hit.getRawEnergy();
+                }
+            }
+
+//        System.out.format("%d SimCalorimeterHits, %d SimTrackerHits, maxE %f, totalE %f\n", ecalHits.size(), trackerHits.size(), maxE, totalE);
+//        return (ecalHits.size() + trackerHits.size() != 0);
+//        return (totalE > 0.05 || !trackerHits.isEmpty());
+            return (topE > eCut && botE > eCut);
+        }
+    }
+
     private static class PairEventTester extends EventTester {
 
         private int hitsNeeded;
SVNspam 0.1