Print

Print


Author: [log in to unmask]
Date: Wed Feb 11 18:38:01 2015
New Revision: 2119

Log:
implementing time-walk correction for Mode-3 data, disabled by default in EcalRawConverter

Modified:
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java	Wed Feb 11 18:38:01 2015
@@ -27,6 +27,7 @@
  */
 public class EcalRawConverter {
 
+    private boolean useTimeWalkCorrection = false;
     private boolean useRunningPedestal = false;
     private boolean constantGain = false;
     private double gain;
@@ -49,9 +50,17 @@
     public void setUseRunningPedestal(boolean useRunningPedestal) {
         this.useRunningPedestal=useRunningPedestal;
     }
-   
-    // Choose whether to use static pedestal from database or running pedestal (NAB Feb 11, 2015):
-    public double getPedestal(EventHeader event,RawCalorimeterHit hit)
+    
+    public void setUseTimeWalkCorrection(boolean useTimeWalkCorrection) {
+        this.useTimeWalkCorrection=useTimeWalkCorrection;
+    }
+  
+    /*
+     * NAB 2015/02/11 
+     * Choose whether to use static pedestal from database or running pedestal.
+     * This can only used for Mode-7 data.
+     */
+    public double getMode7Pedestal(EventHeader event,RawCalorimeterHit hit)
     {
         if (useRunningPedestal) {
             if (event.hasItem("EcalRunningPedestals")) {
@@ -94,32 +103,37 @@
         return CalorimeterHitUtilities.create(rawEnergy, time, id);
     }
 
+    /*
+     * This HitDtoA is for Mode-3 data at least, but definitely not Mode-7.
+     * A time-walk correction can be applied.  (NAB 2015/02/11).
+     */
     public CalorimeterHit HitDtoA(RawCalorimeterHit hit, int window, double timeOffset) {
         if (hit.getTimeStamp() % 64 != 0) {
             System.out.println("unexpected timestamp " + hit.getTimeStamp());
         }
         double time = hit.getTimeStamp() / 16.0;
         long id = hit.getCellID();
-        // Get the channel data.
         EcalChannelConstants channelData = findChannel(id);
         double adcSum = hit.getAmplitude() - window * channelData.getCalibration().getPedestal();
         double rawEnergy = adcToEnergy(adcSum, id);
+        if (useTimeWalkCorrection) {
+           time = EcalTimeWalk.correctTimeWalk(time,rawEnergy);
+        }
         return CalorimeterHitUtilities.create(rawEnergy, time + timeOffset, id);
-        //return h2;
     }
 
+    /*
+     * This HitDtoA is exclusively for Mode-7 data, hence the GenericObject parameter.
+     * The decision to call this method is made in EcalRawConverterDriver based on the
+     * format of the input EVIO data.  EventHeader is also passed in order to allow access
+     * to running pedestals, which is only applicable to Mode-7 data.  (NAB, 2015/02/11)
+     */
     public CalorimeterHit HitDtoA(EventHeader event,RawCalorimeterHit hit, GenericObject mode7Data, int window, double timeOffset) {
         double time = hit.getTimeStamp() / 16.0; //timestamps use the full 62.5 ps resolution
         long id = hit.getCellID();
-//        // Get the channel data.
-//        EcalChannelConstants channelData = findChannel(id);
-//        double adcSum = hit.getAmplitude() - window * channelData.getCalibration().getPedestal();
-//        double adcSum = hit.getAmplitude() - window * Mode7Data.getAmplLow(mode7Data);                              //A.C. is this the proper way to pedestal subtract in mode 7?
-        double adcSum = hit.getAmplitude() - window * getPedestal(event,hit);
+        double adcSum = hit.getAmplitude() - window * getMode7Pedestal(event,hit);
         double rawEnergy = adcToEnergy(adcSum, id);        
         return CalorimeterHitUtilities.create(rawEnergy, time + timeOffset, id);
-                       
-        //return h2;
     }
 
     public RawCalorimeterHit HitAtoD(CalorimeterHit hit, int window) {

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java	Wed Feb 11 18:38:01 2015
@@ -51,6 +51,9 @@
         converter.setUse2014Gain(use2014Gain);
     }
 
+    public void setUseTimeWalkCorrection(boolean useTimeWalkCorrection) {
+        converter.setUseTimeWalkCorrection(useTimeWalkCorrection);
+    }
     public void setUseRunningPedestal(boolean useRunningPedestal) {
         converter.setUseRunningPedestal(useRunningPedestal);
     }