Author: [log in to unmask]
Date: Wed Jan 27 04:50:01 2016
New Revision: 4147
Log:
adding cosmic filter
Added:
java/trunk/recon/src/main/java/org/hps/recon/filtering/CosmicPMTFilter.java
Added: java/trunk/recon/src/main/java/org/hps/recon/filtering/CosmicPMTFilter.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/CosmicPMTFilter.java (added)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/CosmicPMTFilter.java Wed Jan 27 04:50:01 2016
@@ -0,0 +1,58 @@
+package org.hps.recon.filtering;
+
+import org.hps.recon.ecal.FADCGenericHit;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
+import org.lcsim.util.Driver;
+
+public class CosmicPMTFilter extends Driver {
+
+ // class storing raw PMT readout:
+ static final String CLASSNAME="FADCGenericHits";
+
+ // hardware location of PMTs:
+ static final int CRATE=39;
+ static final int SLOT=20;
+ static final int CHANNELS[]={13,14};
+
+ // cuts on pulse integrals for cosmic signals (units ADC):
+ static final float CUTS[]={1534,3242};
+
+ // number of samples to use at beginning of window for pedestal:
+ static final int NPEDSAMP=20;
+
+ public void process(EventHeader event) {
+
+ // find PMT data:
+ FADCGenericHit pmt1=null,pmt2=null;
+ if (!event.hasCollection(GenericObject.class,CLASSNAME))
+ throw new Driver.NextEventException();
+ for (GenericObject gob : event.get(GenericObject.class,CLASSNAME)) {
+ FADCGenericHit hit=(FADCGenericHit)gob;
+ if (hit.getCrate()==CRATE && hit.getSlot()==SLOT) {
+ if (hit.getChannel()==CHANNELS[0]) pmt1=hit;
+ else if (hit.getChannel()==CHANNELS[1]) pmt2=hit;
+ }
+ }
+ if (pmt1==null || pmt2==null) throw new Driver.NextEventException();
+
+ // put cuts on pulse integrals:
+ float pulse1=getPulseIntegral(pmt1);
+ float pulse2=getPulseIntegral(pmt2);
+ if (pulse1<CUTS[0] || pulse2<CUTS[1]) throw new Driver.NextEventException();
+ }
+
+ public float getPulseIntegral(FADCGenericHit hh) {
+ float sum=0;
+ for (int samp : hh.getData()) sum+=samp;
+ return sum-getPedestal(hh)*hh.getData().length;
+ }
+
+ public float getPedestal(FADCGenericHit hh) {
+ if (hh.getData().length<NPEDSAMP)
+ throw new java.lang.RuntimeException("Not enough samples for pedestal.");
+ float sum=0;
+ for (int isamp=0; isamp<NPEDSAMP; isamp++) sum+=hh.getData()[isamp];
+ return sum/NPEDSAMP;
+ }
+}
|