Print

Print


Author: [log in to unmask]
Date: Wed Feb 11 14:19:37 2015
New Revision: 2112

Log:
running pedestal now in EcalRawConverter+Driver (disabled by default).

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 14:19:37 2015
@@ -1,14 +1,17 @@
 package org.hps.recon.ecal;
 
+import java.util.Map;
+
 import org.hps.conditions.database.TableConstants;
+import org.hps.conditions.ecal.EcalChannel;
 import org.hps.conditions.ecal.EcalChannelConstants;
 import org.hps.conditions.ecal.EcalConditions;
 import org.lcsim.conditions.ConditionsManager;
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.EventHeader;
 import org.lcsim.event.GenericObject;
 import org.lcsim.event.RawCalorimeterHit;
 import org.lcsim.event.RawTrackerHit;
-import org.lcsim.event.base.BaseCalorimeterHit;
 import org.lcsim.event.base.BaseRawCalorimeterHit;
 import org.lcsim.geometry.Detector;
 
@@ -24,6 +27,7 @@
  */
 public class EcalRawConverter {
 
+    private boolean useRunningPedestal = false;
     private boolean constantGain = false;
     private double gain;
     private boolean use2014Gain = true;
@@ -42,6 +46,36 @@
         this.use2014Gain = use2014Gain;
     }
 
+    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)
+    {
+        if (useRunningPedestal) {
+            if (event.hasItem("EcalRunningPedestals")) {
+                Map<EcalChannel, Double> runningPedMap=
+                        (Map<EcalChannel, Double>)
+                        event.get("EcalRunningPedestals");
+                EcalChannel chan = ecalConditions.getChannelCollection().
+                        findGeometric(hit.getCellID());
+                //System.err.println(" %%%%%%%%%%%%%%%%% "+chan.getChannelId()+" "+runningPedMap.get(chan));
+                if (!runningPedMap.containsKey(chan)){
+                    System.err.println("************** Missing Pedestal");
+                } else {
+                    return runningPedMap.get(chan);
+                }
+            } else {
+                System.err.println("*****************************************************************");
+                System.err.println("**  You Requested a Running Pedestal, but it is NOT available. **");
+                System.err.println("**     Reverting to the database. Only printing this ONCE.     **");
+                System.err.println("*****************************************************************");
+                useRunningPedestal = false;
+            }
+        }
+        return findChannel(hit.getCellID()).getCalibration().getPedestal();
+    }
     public short sumADC(RawTrackerHit hit) {
         EcalChannelConstants channelData = findChannel(hit.getCellID());
         double pedestal = channelData.getCalibration().getPedestal();
@@ -74,14 +108,14 @@
         //return h2;
     }
 
-    public CalorimeterHit HitDtoA(RawCalorimeterHit hit, GenericObject mode7Data, int window, double timeOffset) {
+    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();
+//        // 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 rawEnergy = adcToEnergy(adcSum, id);        
         return CalorimeterHitUtilities.create(rawEnergy, time + timeOffset, id);
                        

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 14:19:37 2015
@@ -51,6 +51,10 @@
         converter.setUse2014Gain(use2014Gain);
     }
 
+    public void setUseRunningPedestal(boolean useRunningPedestal) {
+        converter.setUseRunningPedestal(useRunningPedestal);
+    }
+
     public void setRunBackwards(boolean runBackwards) {
         this.runBackwards = runBackwards;
     }
@@ -203,7 +207,7 @@
                         }
                         GenericObject extraData = (GenericObject) rel.getTo();
                         CalorimeterHit newHit;
-                        newHit = converter.HitDtoA(hit, extraData, integralWindow, timeOffset);
+                        newHit = converter.HitDtoA(event,hit, extraData, integralWindow, timeOffset);
                         if (newHit.getRawEnergy() > threshold) {
                             if (applyBadCrystalMap && isBadCrystal(newHit)) {
                                 continue;