Print

Print


Author: [log in to unmask]
Date: Thu Apr 23 14:37:28 2015
New Revision: 2802

Log:
use new SVT pulse shape stuff in readout sim

Modified:
    java/trunk/tracking/src/main/java/org/hps/readout/svt/SimpleSvtReadout.java

Modified: java/trunk/tracking/src/main/java/org/hps/readout/svt/SimpleSvtReadout.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/readout/svt/SimpleSvtReadout.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/readout/svt/SimpleSvtReadout.java	Thu Apr 23 14:37:28 2015
@@ -26,6 +26,7 @@
 import org.hps.readout.ecal.ClockSingleton;
 import org.hps.readout.ecal.ReadoutTimestamp;
 import org.hps.readout.ecal.TriggerableDriver;
+import org.hps.recon.tracking.PulseShape;
 import org.hps.util.RandomGaussian;
 
 /**
@@ -39,6 +40,8 @@
     //--- Constants ---//
     //-----------------//
     private static final String SVT_SUBDETECTOR_NAME = "Tracker";
+
+    private PulseShape shape = new PulseShape.FourPole();
 
     private SimTrackerHitReadoutDriver readoutDriver = new SimTrackerHitReadoutDriver();
     private SiSensorSim siSimulation = new CDFSiSensorSim();
@@ -112,6 +115,19 @@
      */
     public void setVerbosity(int verbosity) {
         this.verbosity = verbosity;
+    }
+
+    public void setPulseShape(String pulseShape) {
+        switch (pulseShape) {
+            case "CR-RC":
+                shape = new PulseShape.CRRC();
+                break;
+            case "FourPole":
+                shape = new PulseShape.FourPole();
+                break;
+            default:
+                throw new RuntimeException("Unrecognized pulseShape: " + pulseShape);
+        }
     }
 
     /**
@@ -197,11 +213,12 @@
 
                 for (int sampleN = 0; sampleN < 6; sampleN++) {
                     double time = sampleN * HPSSVTConstants.SAMPLING_INTERVAL - timeOffset;
-                    double tp = sensor.getShapeFitParameters(channel)[HpsSiSensor.TP_INDEX];
-                    signal[sampleN] += amplitude * pulseAmplitude(time, tp);//add the pulse to the pedestal
+                    shape.setParameters(channel, (HpsSiSensor) sensor);
+                    signal[sampleN] += amplitude * shape.getAmplitudePeakNorm(time);//add the pulse to the pedestal
                     samples[sampleN] = (short) Math.round(signal[sampleN]);
-                    if (verbosity >= 1)
+                    if (verbosity >= 1) {
                         System.out.println("\t\tMaking samples: sample#" + sampleN + " has " + samples[sampleN] + " ADC counts");
+                    }
                 }
 
                 long channel_id = sensor.makeChannelID(channel);
@@ -292,18 +309,21 @@
 
     private boolean readoutCuts(RawTrackerHit hit) {
         if (enableThresholdCut && !samplesAboveThreshold(hit)) {
-            if (verbosity > 1)
+            if (verbosity > 1) {
                 System.out.println("Failed threshold cut");
+            }
             return false;
         }
         if (enablePileupCut && !pileupCut(hit)) {
-            if (verbosity > 1)
+            if (verbosity > 1) {
                 System.out.println("Failed pileup cut");
+            }
             return false;
         }
         if (dropBadChannels && !badChannelCut(hit)) {
-            if (verbosity > 1)
+            if (verbosity > 1) {
                 System.out.println("Failed bad channel cut");
+            }
             return false;
         }
         return true;
@@ -323,25 +343,28 @@
     private boolean samplesAboveThreshold(RawTrackerHit hit) {
         HpsSiSensor sensor = (HpsSiSensor) hit.getDetectorElement();
         int channel = hit.getIdentifierFieldValue("strip");
-        double pedestal = 0;
-        double noise = 0;
+        double pedestal;
+        double noise;
         int count = 0;
         short[] samples = hit.getADCValues();
         for (int sampleN = 0; sampleN < samples.length; sampleN++) {
             pedestal = sensor.getPedestal(channel, sampleN);
             noise = sensor.getNoise(channel, sampleN);
-            if (verbosity > 1)
+            if (verbosity > 1) {
                 System.out.format("%f, %f\n", samples[sampleN] - pedestal, noise * noiseThreshold);
-            if (samples[sampleN] - pedestal > noise * noiseThreshold)
+            }
+            if (samples[sampleN] - pedestal > noise * noiseThreshold) {
                 count++;
+            }
         }
         return count >= samplesAboveThreshold;
     }
 
     @Override
     protected void processTrigger(EventHeader event) {
-        if (noPileup)
+        if (noPileup) {
             return;
+        }
         //System.out.println("Got trigger");
 
         // Create a list to hold the analog data
@@ -372,8 +395,8 @@
                         double meanNoise = 0;
                         for (int sampleN = 0; sampleN < 6; sampleN++) {
                             double sampleTime = firstSample + sampleN * HPSSVTConstants.SAMPLING_INTERVAL;
-                            double tp = ((HpsSiSensor) sensor).getShapeFitParameters(channel)[HpsSiSensor.TP_INDEX];
-                            double signalAtTime = hit.amplitude * pulseAmplitude(sampleTime - hit.time, tp);
+                            shape.setParameters(channel, (HpsSiSensor) sensor);
+                            double signalAtTime = hit.amplitude * shape.getAmplitudePeakNorm(sampleTime - hit.time);
                             totalContrib += signalAtTime;
                             signal[sampleN] += signalAtTime;
                             meanNoise += ((HpsSiSensor) sensor).getNoise(channel, sampleN);
@@ -442,21 +465,17 @@
         @Override
         public int compareTo(Object o) {
             double deltaT = time - ((StripHit) o).time;
-            if (deltaT > 0)
+            if (deltaT > 0) {
                 return 1;
-            else if (deltaT < 0)
+            } else if (deltaT < 0) {
                 return -1;
-            else
+            } else {
                 return 0;
-        }
-    }
-
-    private double pulseAmplitude(double time, double tp) {
-        if (time <= 0.0)
-            return 0.0;
-        return (time / tp) * Math.exp(1.0 - time / tp);
-    }
-
+            }
+        }
+    }
+
+    @Override
     public int getTimestampType() {
         return ReadoutTimestamp.SYSTEM_TRACKER;
     }