Print

Print


Author: [log in to unmask]
Date: Thu Sep 22 09:56:42 2016
New Revision: 4493

Log:
Driver to skim events from LCIO files

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

Added: java/trunk/recon/src/main/java/org/hps/recon/filtering/LcioEventSkimmer.java
 =============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/LcioEventSkimmer.java	(added)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/LcioEventSkimmer.java	Thu Sep 22 09:56:42 2016
@@ -0,0 +1,94 @@
+package org.hps.recon.filtering;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Scanner;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+
+/**
+ * Driver to skim selected events from LCIO files
+ *
+ * @author Norman A Graf
+ *
+ * @version $Id:
+ */
+public class LcioEventSkimmer extends Driver
+{
+
+    private Map<Integer, Set<Integer>> _eventsToSkimMap = new HashMap<Integer, Set<Integer>>();
+    private boolean skipEvent = true;
+    private int _numberOfEventsWritten;
+    private String _inputFileName;
+    private boolean _debug = false;
+
+    @Override
+    protected void startOfData()
+    {
+        try {
+            if (_debug) {
+                System.out.println(_inputFileName);
+            }
+            Scanner scan = new Scanner(new File(_inputFileName));
+            while (scan.hasNextLine()) {
+                int runNum = scan.nextInt();
+                int eventNum = scan.nextInt();
+                if (_debug) {
+                    System.out.println("run: " + runNum + " event " + eventNum);
+                }
+                if (_eventsToSkimMap.containsKey(runNum)) {
+                    _eventsToSkimMap.get(runNum).add(eventNum);
+                } else {
+                    _eventsToSkimMap.put(runNum, new TreeSet<Integer>());
+                    _eventsToSkimMap.get(runNum).add(eventNum);
+                }
+            }
+            scan.close();
+        } catch (FileNotFoundException ex) {
+            Logger.getLogger(LcioEventSkimmer.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        if (_debug) {
+            System.out.println(_eventsToSkimMap);
+        }
+    }
+
+    @Override
+    protected void process(EventHeader event)
+    {
+        skipEvent = true;
+        int runNum = event.getRunNumber();
+        int eventNum = event.getEventNumber();
+        if(_eventsToSkimMap.containsKey(runNum))
+        {
+           if(_eventsToSkimMap.get(runNum).contains(eventNum)) skipEvent = false; 
+        }
+        if (skipEvent) {
+            throw new Driver.NextEventException();
+        } else {
+            _numberOfEventsWritten++;
+        }
+    }
+
+    @Override
+    protected void endOfData()
+    {
+        System.out.println("Selected " + _numberOfEventsWritten + " events");
+    }
+
+    public void setRunAndEventsToStripFileName(String s)
+    {
+        _inputFileName = s;
+    }
+
+    public void setDebug(boolean b)
+    {
+        _debug = b;
+    }
+
+}