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; + } + +}