hps-java/src/main/java/org/lcsim/hps/recon/ecal
diff -u -r1.7 -r1.8
--- HPSEcalTimeEvolutionReadoutDriver.java 2 Sep 2011 21:17:49 -0000 1.7
+++ HPSEcalTimeEvolutionReadoutDriver.java 7 Sep 2011 00:22:55 -0000 1.8
@@ -1,84 +1,86 @@
-package org.lcsim.hps.recon.ecal;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.lcsim.event.CalorimeterHit;
-import org.lcsim.geometry.IDDecoder;
-import org.lcsim.hps.util.ClockSingleton;
-import org.lcsim.hps.util.RingBuffer;
-
-/**
- * Performs readout of ECal hits.
- * Simulates time evolution of preamp output pulse.
- *
- * @author Sho Uemura <[log in to unmask]>
- * @version $Id: HPSEcalTimeEvolutionReadoutDriver.java,v 1.7 2011/09/02 21:17:49 meeg Exp $
- */
-public class HPSEcalTimeEvolutionReadoutDriver extends HPSEcalReadoutDriver {
-
- //buffer for deposited energy
- Map<Long, RingBuffer> eDepMap = null;
- //length of ring buffer (in readout cycles)
- int bufferLength = 20;
- //shaper time constant in ns
- double t0 = 18.0;
-
- public HPSEcalTimeEvolutionReadoutDriver() {
- }
-
- public void setBufferLength(int bufferLength) {
- this.bufferLength = bufferLength;
- eDepMap = new HashMap<Long, RingBuffer>();
- }
-
- public List<HPSRawCalorimeterHit> readHits() {
- IDDecoder dec = ecal.getIDDecoder();
- List<HPSRawCalorimeterHit> hitList = new ArrayList<HPSRawCalorimeterHit>();
- for (Long cellID : eDepMap.keySet()) {
- RingBuffer eDepBuffer = eDepMap.get(cellID);
- if (eDepBuffer.currentValue() > threshold) {
- dec.setID(cellID);
- hitList.add(new HPSRawCalorimeterHit(eDepBuffer.currentValue(), dec.getPosition(), 0.0, cellID, hitType));
- }
- eDepBuffer.step();
- }
- return hitList;
- }
-
- public void putHits(List<CalorimeterHit> hits) {
- //fill the readout buffers
- for (CalorimeterHit hit : hits) {
- IDDecoder dec = ecal.getIDDecoder();
- dec.setID(hit.getCellID());
-// int ix = dec.getValue("ix");
-// int iy = dec.getValue("iy");
-// //temporary hack to disable crystals and flip X coordinate
-// int side = dec.getValue("side");
-// if (iy == 1 && ix * side >= -10 && ix * side <= -2)
-// continue;
-
- RingBuffer eDepBuffer = eDepMap.get(hit.getCellID());
- if (eDepBuffer == null) {
- eDepBuffer = new RingBuffer(bufferLength);
- eDepMap.put(hit.getCellID(), eDepBuffer);
- }
- for (int i = 0; i < bufferLength; i++) {
- eDepBuffer.addToCell(i, hit.getRawEnergy() * pulseAmplitude(i * ClockSingleton.getDt() * readoutCycle - hit.getTime()));
- }
- }
- }
-
- public void initReadout() {
- //initialize buffers
- eDepMap = new HashMap<Long, RingBuffer>();
- }
-
- private double pulseAmplitude(double time) {
- if (time < 0.0)
- return 0.0;
- return (time / t0) * Math.exp(1.0 - time / t0);
- }
+package org.lcsim.hps.recon.ecal;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.geometry.IDDecoder;
+import org.lcsim.hps.util.ClockSingleton;
+import org.lcsim.hps.util.RingBuffer;
+
+/**
+ * Performs readout of ECal hits.
+ * Simulates time evolution of preamp output pulse.
+ *
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: HPSEcalTimeEvolutionReadoutDriver.java,v 1.8 2011/09/07 00:22:55 meeg Exp $
+ */
+public class HPSEcalTimeEvolutionReadoutDriver extends HPSEcalReadoutDriver {
+
+ //buffer for deposited energy
+ Map<Long, RingBuffer> eDepMap = null;
+ //length of ring buffer (in readout cycles)
+ int bufferLength = 20;
+ //shaper time constant in ns
+ double t0 = 18.0;
+
+ public HPSEcalTimeEvolutionReadoutDriver() {
+ }
+
+ public void setBufferLength(int bufferLength) {
+ this.bufferLength = bufferLength;
+ eDepMap = new HashMap<Long, RingBuffer>();
+ }
+
+ public List<HPSRawCalorimeterHit> readHits() {
+ IDDecoder dec = ecal.getIDDecoder();
+ List<HPSRawCalorimeterHit> hitList = new ArrayList<HPSRawCalorimeterHit>();
+ for (Long cellID : eDepMap.keySet()) {
+ RingBuffer eDepBuffer = eDepMap.get(cellID);
+ if (eDepBuffer.currentValue() > threshold) {
+ dec.setID(cellID);
+// int ix = dec.getValue("ix");
+// int iy = dec.getValue("iy");
+// if (iy == 1 && ix == -2)
+// System.out.printf("Time %f, output signal %f\n", ClockSingleton.getTime(), eDepBuffer.currentValue());
+ hitList.add(new HPSRawCalorimeterHit(eDepBuffer.currentValue(), dec.getPosition(), 0.0, cellID, hitType));
+ }
+ eDepBuffer.step();
+ }
+ return hitList;
+ }
+
+ public void putHits(List<CalorimeterHit> hits) {
+ //fill the readout buffers
+ for (CalorimeterHit hit : hits) {
+ IDDecoder dec = ecal.getIDDecoder();
+ dec.setID(hit.getCellID());
+// int ix = dec.getValue("ix");
+// int iy = dec.getValue("iy");
+// if (iy == 1 && ix == -2)
+// System.out.printf("Time %f, input hit %f)\n", ClockSingleton.getTime() + hit.getTime(), hit.getRawEnergy());
+
+ RingBuffer eDepBuffer = eDepMap.get(hit.getCellID());
+ if (eDepBuffer == null) {
+ eDepBuffer = new RingBuffer(bufferLength);
+ eDepMap.put(hit.getCellID(), eDepBuffer);
+ }
+ for (int i = 0; i < bufferLength; i++) {
+ eDepBuffer.addToCell(i, hit.getRawEnergy() * pulseAmplitude(ClockSingleton.getDt() * ((i+1) * readoutCycle - ClockSingleton.getClock() % readoutCycle) - hit.getTime()));
+ }
+ }
+ }
+
+ public void initReadout() {
+ //initialize buffers
+ eDepMap = new HashMap<Long, RingBuffer>();
+ }
+
+ private double pulseAmplitude(double time) {
+ if (time < 0.0)
+ return 0.0;
+ return (time / t0) * Math.exp(1.0 - time / t0);
+ }
}
\ No newline at end of file