Author: [log in to unmask] Date: Wed Sep 2 12:55:25 2015 New Revision: 3496 Log: added new driver PulserScalerAndEpicsFilter, which excludes every event except pulsers, scalers and epics events Added: java/trunk/recon/src/main/java/org/hps/recon/filtering/PulserScalerAndEpicsFilter.java Added: java/trunk/recon/src/main/java/org/hps/recon/filtering/PulserScalerAndEpicsFilter.java ============================================================================= --- java/trunk/recon/src/main/java/org/hps/recon/filtering/PulserScalerAndEpicsFilter.java (added) +++ java/trunk/recon/src/main/java/org/hps/recon/filtering/PulserScalerAndEpicsFilter.java Wed Sep 2 12:55:25 2015 @@ -0,0 +1,107 @@ +package org.hps.recon.filtering; + +//import org.hps.recon.ecal.triggerbank.AbstractIntData; +//import org.hps.recon.ecal.triggerbank.TIData; +//import org.lcsim.event.GenericObject; + +import java.io.File; +import java.io.IOException; + +import org.lcsim.event.Cluster; +import org.lcsim.event.EventHeader; +import org.lcsim.event.GenericObject; +import org.lcsim.lcio.LCIOReader; +import org.lcsim.lcio.LCIOWriter; +import org.lcsim.util.Driver; +import org.hps.conditions.ConditionsDriver; +import org.hps.recon.ecal.cluster.ClusterUtilities; +//import org.hps.recon.ecal.triggerbank.AbstractIntData; +//import org.hps.recon.ecal.triggerbank.TIData; + +import org.hps.record.triggerbank.AbstractIntData; +import org.hps.record.triggerbank.TIData; +import org.hps.record.epics.EpicsData; +import org.hps.record.scalers.ScalerData; + +public class PulserScalerAndEpicsFilter extends Driver{ + + public void process(EventHeader event) { + + // only keep pulser triggers: + if (!event.hasCollection(GenericObject.class,"TriggerBank")) + throw new Driver.NextEventException(); + boolean isPulser=false; + for (GenericObject gob : event.get(GenericObject.class,"TriggerBank")) + { + if (!(AbstractIntData.getTag(gob) == TIData.BANK_TAG)) continue; + TIData tid = new TIData(gob); + if (tid.isPulserTrigger()) + { + isPulser=true; + break; + } + } + + // don't drop any events with EPICS data or scalers data + // (could also do this via event tag=31) + final EpicsData edata = EpicsData.read(event); + if (edata != null) return; + + if( event.hasCollection(GenericObject.class, "ScalerData")) + return; + + if (!isPulser) throw new Driver.NextEventException(); + + + } + /** + * standalone way to run this: + * + * @param arg [0] inputFile [1] outputFile [2] run number [3] detectorName (optional, default = "HPS-EngRun2015-Nominal-v1") + * @throws IOException + */ + public static void main(String arg[]) throws IOException{ + ConditionsDriver hack = new ConditionsDriver(); + + String detectorName = "HPS-EngRun2015-Nominal-v1"; + if(arg.length >3) + hack.setDetectorName(arg[3]); + hack.setFreeze(true); + hack.setRunNumber(Integer.parseInt(arg[2])); + hack.initialize(); + PulserScalerAndEpicsFilter pf = new PulserScalerAndEpicsFilter(); + LCIOWriter writer = new LCIOWriter(arg[1]); + File file = new File(arg[0]); + LCIOReader reader = new LCIOReader(file); + System.out.println(file.getPath()); + int nEventsKept = 0; + int nEvents = 0; + try{ + while(true){ + try{ + + EventHeader eh = reader.read(); + if(eh.getEventNumber() %1000 == 0){ + //Driver.this. + System.out.println("PulserFitter:"); + System.out.println(" " + nEventsKept + " events kept"); + System.out.println(" " + nEvents + "events read"); + } + nEvents ++; + pf.process(eh); //might throw NextEventException + + nEventsKept++; + writer.write(eh); + }catch(Driver.NextEventException e){ + + } + } + }catch(IOException e){ + e.printStackTrace(); + reader.close(); + } + + + writer.close(); + } +}