java/trunk/users/src/main/java/org/lcsim/hps/users/gcharles
--- java/trunk/users/src/main/java/org/lcsim/hps/users/gcharles/FADCSignalAnalysis.java (rev 0)
+++ java/trunk/users/src/main/java/org/lcsim/hps/users/gcharles/FADCSignalAnalysis.java 2014-02-13 02:29:18 UTC (rev 221)
@@ -0,0 +1,73 @@
+package org.lcsim.hps.users.gcharles;
+
+import hep.aida.IHistogram1D;
+import java.util.List;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.EventHeader;
+import org.lcsim.hps.readout.ecal.FADCEcalReadoutDriver;
+import org.lcsim.hps.util.RingBuffer;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ * Saves histograms of FADC signal buffers before and after hits.
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: $
+ */
+public class FADCSignalAnalysis extends Driver {
+
+ private AIDA aida = AIDA.defaultInstance();
+ FADCEcalReadoutDriver readoutDriver = new FADCEcalReadoutDriver();
+
+ @Override
+ public void startOfData() {
+
+ add(readoutDriver);
+ readoutDriver.setCoincidenceWindow(2);
+ readoutDriver.setEcalName("Ecal");
+ readoutDriver.setEcalCollectionName("EcalHits");
+ readoutDriver.setEcalRawCollectionName("EcalRawHits");
+ readoutDriver.setConstantTriggerWindow(true);
+ readoutDriver.setScaleFactor(1);
+ //readoutDriver.setFixedGain(1.1);
+ readoutDriver.setUseCRRCShape(false);
+
+ super.startOfData();
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ if (event.hasCollection(CalorimeterHit.class, "EcalHits")) {
+ List<CalorimeterHit> hits = event.get(CalorimeterHit.class, "EcalHits");
+
+ for (CalorimeterHit hit : hits) {
+ hit.getCellID();
+ RingBuffer signalBuffer = readoutDriver.getSignalMap().get(hit.getCellID());
+ String name = String.format("pipeline x=%d, y=%d before hit in event %d, time %f, energy %f", hit.getIdentifierFieldValue("ix"), hit.getIdentifierFieldValue("iy"), event.getEventNumber(), hit.getRawEnergy(), hit.getTime());
+ IHistogram1D hist = aida.histogram1D(name, signalBuffer.getLength(), -0.5, signalBuffer.getLength() - 0.5);
+ for (int i = 0; i < signalBuffer.getLength(); i++) {
+ hist.fill(i, signalBuffer.getValue(i));
+ }
+ }
+ }
+
+
+ //now run the subdriver, so we can see the effect of adding the hits
+ super.process(event);
+
+
+ if (event.hasCollection(CalorimeterHit.class, "EcalHits")) {
+ List<CalorimeterHit> hits = event.get(CalorimeterHit.class, "EcalHits");
+
+ for (CalorimeterHit hit : hits) {
+ hit.getCellID();
+ RingBuffer signalBuffer = readoutDriver.getSignalMap().get(hit.getCellID());
+ String name = String.format("pipeline x=%d, y=%d after hit in event %d, time %f, energy %f", hit.getIdentifierFieldValue("ix"), hit.getIdentifierFieldValue("iy"), event.getEventNumber(), hit.getRawEnergy(), hit.getTime());
+ IHistogram1D hist = aida.histogram1D(name, signalBuffer.getLength(), -0.5, signalBuffer.getLength() - 0.5);
+ for (int i = 0; i < signalBuffer.getLength(); i++) {
+ hist.fill(i, signalBuffer.getValue(i));
+ }
+ }
+ }
+ }
+}