Print

Print


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