Print

Print


Author: [log in to unmask]
Date: Fri Feb  6 11:47:55 2015
New Revision: 2064

Log:
Removed indexing.

Modified:
    java/trunk/users/src/main/java/org/hps/users/baltzell/ECalRunningPedestalDriver.java
    java/trunk/users/src/main/java/org/hps/users/baltzell/EcalRawConverter_RunPed.java

Modified: java/trunk/users/src/main/java/org/hps/users/baltzell/ECalRunningPedestalDriver.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/baltzell/ECalRunningPedestalDriver.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/baltzell/ECalRunningPedestalDriver.java	Fri Feb  6 11:47:55 2015
@@ -7,7 +7,6 @@
 
 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.hps.recon.ecal.HitExtraData;
 import org.lcsim.conditions.ConditionsManager;
@@ -19,9 +18,10 @@
 import org.lcsim.util.Driver;
 
 /**
- * Calculate a running pedestal average for every channel from Mode7 FADCs.
+ * Calculate a running pedestal average for every channel from Mode7 FADCs. Uses
+ * pedestals from the database if not available from the data.
  * 
- * @version $Id: ECalRunningPedestalDriver.java,v 0.0 2015/01/31 00:00:00
+ * @version $Id: ECalRunningPedestalDriver.java,v 1.0 2015/02/06 00:00:00
  * @author <[log in to unmask]>
  */
 public class ECalRunningPedestalDriver extends Driver {
@@ -49,22 +49,16 @@
     private final int nChannels = 442;
 
     // running pedestal averages, one for each channel:
-    private List<Double> runningPedestals = new ArrayList<Double>(nChannels);
-
-    // FIXME:
+    private Map<EcalChannel, Double> runningPedestals = new HashMap<EcalChannel, Double>(nChannels);
+
     // recent event-by-event pedestals and timestamps:
-    private List<Integer>[] eventPedestals = (ArrayList<Integer>[]) new ArrayList[nChannels];
-    private List<Long>[] eventTimestamps = (ArrayList<Long>[]) new ArrayList[nChannels];
+    private Map<EcalChannel, List<Integer>> eventPedestals = new HashMap<EcalChannel, List<Integer>>();
+    private Map<EcalChannel, List<Long>> eventTimestamps = new HashMap<EcalChannel, List<Long>>();
 
     private boolean debug = false;
     private EcalConditions ecalConditions = null;
 
     public ECalRunningPedestalDriver() {
-        for (int ii = 0; ii < nChannels; ii++) {
-            eventPedestals[ii] = new ArrayList<>();
-            eventTimestamps[ii] = new ArrayList<>();
-            runningPedestals.add(-1.);
-        }
     }
 
     @Override
@@ -77,7 +71,10 @@
                 .getCachedConditions(EcalConditions.class,TableConstants.ECAL_CONDITIONS)
                 .getCachedData();
         for (int ii = 0; ii < nChannels; ii++) {
-            runningPedestals.set(ii,getStaticPedestal(ii + 1));
+            EcalChannel chan = findChannel(ii + 1);
+            runningPedestals.put(chan,getStaticPedestal(chan));
+            eventPedestals.put(chan,new ArrayList<Integer>());
+            eventTimestamps.put(chan,new ArrayList<Long>());
         }
         if (debug) {
             System.out.println("Running and static pedestals better match here:");
@@ -109,9 +106,14 @@
     }
 
     public void printPedestals() {
-        for (int ii = 0; ii < nChannels; ii++) {
-            System.out.printf("(%d,%.2f,%.2f) ",ii,runningPedestals.get(ii),
-                    getStaticPedestal(ii + 1));
+        for (int ii = 1; ii <= nChannels; ii++) {
+            EcalChannel chan = findChannel(ii);
+            if (!runningPedestals.containsKey(chan)) {
+                System.err.println("printPedestals:   Missing Channel:  " + ii);
+                continue;
+            }
+            System.out.printf("(%d,%.2f,%.2f) ",chan.getChannelId(),runningPedestals.get(chan),
+                    getStaticPedestal(chan));
         }
         System.out.printf("\n");
     }
@@ -119,32 +121,22 @@
     @Override
     protected void process(EventHeader event) {
 
-        if (!event.hasCollection(RawCalorimeterHit.class,rawCollectionName))
-            return;
-        if (!event.hasCollection(LCRelation.class,extraDataRelationsName))
-            return;
-
-        Map<RawCalorimeterHit, Double> pedMap = new HashMap<RawCalorimeterHit, Double>();
-
-        for (LCRelation rel : event.get(LCRelation.class,extraDataRelationsName)) {
-            RawCalorimeterHit hit = (RawCalorimeterHit) rel.getFrom();
-            GenericObject extraData = (GenericObject) rel.getTo();
-            updatePedestal(event,hit,extraData);
-            if (!pedMap.containsKey(hit))
-                pedMap.put(hit,getPedestal(hit));
-        }
-        event.put(runningPedestalsName,pedMap);
+        if (!event.hasCollection(RawCalorimeterHit.class,rawCollectionName)) {
+            if (!event.hasCollection(LCRelation.class,extraDataRelationsName)) {
+                for (LCRelation rel : event.get(LCRelation.class,extraDataRelationsName)) {
+                    RawCalorimeterHit hit = (RawCalorimeterHit) rel.getFrom();
+                    GenericObject extraData = (GenericObject) rel.getTo();
+                    updatePedestal(event,hit,extraData);
+                }
+            }
+        }
+        event.put(runningPedestalsName,runningPedestals);
         if (debug) {
             printPedestals();
         }
     }
 
     private void updatePedestal(EventHeader event, RawCalorimeterHit hit, GenericObject mode7data) {
-        final int ii = getChannelID(hit) - 1;
-        if (ii < 0 || ii >= nChannels) {
-            System.err.println(String.format("Event #%d, Invalid id: %d/%d ",
-                    event.getEventNumber(),ii + 1,+hit.getCellID()));
-        }
 
         final long timestamp = event.getTimeStamp();
         final int min = ((HitExtraData.Mode7Data) mode7data).getAmplLow();
@@ -154,35 +146,43 @@
         if (max <= 0)
             return;
 
+        EcalChannel chan = findChannel(hit);
+        if (chan == null) {
+            System.err.println("hit doesn't correspond to ecalchannel");
+            return;
+        }
+        List<Integer> peds = eventPedestals.get(chan);
+        List<Long> times = eventTimestamps.get(chan);
+
         // If new timestamp is older than previous one, restart pedestals.
         // This should never happen unless firmware counter cycles back to zero,
         // in which case it could be dealt with if max timestamp is known.
-        if (eventTimestamps[ii].size() > 0 && eventTimestamps[ii].get(0) > timestamp) {
+        if (times.size() > 0 && times.get(0) > timestamp) {
             System.err.println(String.format("Event #%d, Old Timestamp:  %d < %d",
-                    event.getEventNumber(),timestamp,eventTimestamps[ii].get(0)));
-            eventPedestals[ii].clear();
-            eventTimestamps[ii].clear();
+                    event.getEventNumber(),timestamp,times.get(0)));
+            peds.clear();
+            times.clear();
         }
 
         // add pedestal to the list:
-        eventPedestals[ii].add(min);
-        eventTimestamps[ii].add(timestamp);
-
-        if (eventPedestals[ii].size() > 1) {
+        peds.add(min);
+        times.add(timestamp);
+
+        if (peds.size() > 1) {
 
             // remove oldest pedestal if surpassed limit on #events:
-            if (eventPedestals[ii].size() > limitLookbackEvents
-                    || (maxLookbackEvents > 0 && eventPedestals[ii].size() > maxLookbackEvents)) {
-                eventPedestals[ii].remove(0);
-                eventTimestamps[ii].remove(0);
+            if (peds.size() > limitLookbackEvents
+                    || (maxLookbackEvents > 0 && peds.size() > maxLookbackEvents)) {
+                peds.remove(0);
+                times.remove(0);
             }
 
             // remove old pedestals surpassing limit on lookback time:
             if (maxLookbackTime > 0) {
-                while (eventTimestamps[ii].size() > 0) {
-                    if (eventTimestamps[ii].get(0) < timestamp - maxLookbackTime * 1e6) {
-                        eventTimestamps[ii].remove(0);
-                        eventPedestals[ii].remove(0);
+                while (times.size() > 1) {
+                    if (times.get(0) < timestamp - maxLookbackTime * 1e6) {
+                        times.remove(0);
+                        peds.remove(0);
                     } else {
                         break;
                     }
@@ -191,44 +191,73 @@
         }
 
         // Update running pedestal average:
-        if (eventPedestals[ii].size() >= minLookbackEvents) {
-            double avg = 0;
-            for (int jj = 0; jj < eventPedestals[ii].size(); jj++) {
-                avg += eventPedestals[ii].get(jj);
-            }
-            runningPedestals.set(ii,avg / eventPedestals[ii].size());
+        double ped = 0;
+        if (peds.size() >= minLookbackEvents) {
+            for (int jj = 0; jj < peds.size(); jj++) {
+                ped += peds.get(jj);
+            }
+            ped /= peds.size();
         } else {
-            runningPedestals.set(ii,getStaticPedestal(ii + 1));
-        }
-    }
-
-    public double getPedestal(int channel_id) {
-        return runningPedestals.get(channel_id - 1);
-        // final int nped = eventPedestals[channel_id - 1].size();
-        // if (nped < minLookbackEvents) return getStaticPedestal(channel_id);
-        // else return runningPedestals.get(channel_id - 1);
-    }
-
-    public double getPedestal(RawCalorimeterHit hit) {
-        return getPedestal(getChannelID(hit));
-    }
-
-    private double getStaticPedestal(int channel_id) {
-        EcalChannel cc = ecalConditions.getChannelCollection().findChannel(channel_id);
-        return ecalConditions.getChannelConstants(cc).getCalibration().getPedestal();
-    }
-
-    private double getStaticPedestal(RawCalorimeterHit hit) {
-        return getStaticPedestal(getChannelID(hit));
-    }
-
-    public int getChannelID(RawCalorimeterHit hit) {
-        return findChannel(hit.getCellID()).getCalibration().getChannelId();
-    }
-
-    public EcalChannelConstants findChannel(long cellID) {
-        return ecalConditions.getChannelConstants(ecalConditions.getChannelCollection()
-                .findGeometric(cellID));
-    }
+            ped = getStaticPedestal(chan);
+        }
+        runningPedestals.put(chan,ped);
+
+    }
+
+    public double getStaticPedestal(EcalChannel chan) {
+        return ecalConditions.getChannelConstants(chan).getCalibration().getPedestal();
+    }
+
+    public EcalChannel findChannel(int channel_id) {
+        return ecalConditions.getChannelCollection().findChannel(channel_id);
+    }
+
+    public EcalChannel findChannel(RawCalorimeterHit hit) {
+        return ecalConditions.getChannelCollection().findGeometric(hit.getCellID());
+    }
+
+    /*
+     * public double getPedestal(EcalChannel chan) { if
+     * (runningPedestals.containsKey(chan)) { return runningPedestals.get(chan);
+     * } else {
+     * System.err.println("RunningPedestalDriver:getPedestal:  Missing channel"
+     * ); return getStaticPedestal(chan); } } public double getPedestal(int
+     * channel_id) { return getPedestal(findChannel(channel_id)); } public
+     * double getPedestal(RawCalorimeterHit hit) { return
+     * getPedestal(getChannelID(hit)); }
+     * 
+     * private double getStaticNoise(int channel_id) { return
+     * getStaticCalibration(channel_id).getNoise(); }
+     * 
+     * private double getStaticPedestal(int channel_id) { return
+     * getStaticCalibration(channel_id).getPedestal(); } private double
+     * getStaticPedestal(RawCalorimeterHit hit) { return
+     * getStaticPedestal(getChannelID(hit)); }
+     * 
+     * private EcalCalibration getStaticCalibration(EcalChannel chan) { return
+     * ecalConditions.getChannelConstants(chan).getCalibration(); } private
+     * EcalCalibration getStaticCalibration(int channel_id) { return
+     * getStaticCalibration(findChannel(channel_id)); } private EcalCalibration
+     * getStaticCalibration(long cellID) { return
+     * getStaticCalibration(findChannel(cellID)); }
+     * 
+     * public int getChannelID(RawCalorimeterHit hit) { return
+     * findChannelConstants(hit.getCellID()).getCalibration().getChannelId(); }
+     * 
+     * public EcalChannelConstants findChannelConstants(long cellID) { return
+     * ecalConditions.getChannelConstants(findChannel(cellID)); }
+     * 
+     * public EcalChannelConstants findChannelConstants(int channel_id) { return
+     * ecalConditions.getChannelConstants(findChannel(channel_id)); }
+     * 
+     * public EcalChannel findChannel(long cellID) { return
+     * ecalConditions.getChannelCollection().findGeometric(cellID); }
+     * 
+     * public EcalChannel findChannel(int channel_id) { return
+     * ecalConditions.getChannelCollection().findChannel(channel_id); }
+     * 
+     * public EcalChannel findChannel(RawCalorimeterHit hit) { return
+     * findChannel(hit.getCellID()); }
+     */
 
 }

Modified: java/trunk/users/src/main/java/org/hps/users/baltzell/EcalRawConverter_RunPed.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/baltzell/EcalRawConverter_RunPed.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/baltzell/EcalRawConverter_RunPed.java	Fri Feb  6 11:47:55 2015
@@ -4,7 +4,7 @@
 import java.util.Map;
 
 import org.hps.conditions.database.TableConstants;
-import org.hps.conditions.ecal.EcalCalibration;
+import org.hps.conditions.ecal.EcalChannel;
 import org.hps.conditions.ecal.EcalChannelConstants;
 import org.hps.conditions.ecal.EcalConditions;
 import org.hps.recon.ecal.CalorimeterHitUtilities;
@@ -60,15 +60,24 @@
     public double getPedestal(EventHeader event,RawCalorimeterHit hit)
     {
         if (useRunningPedestal) {
-            if (event.hasCollection(Double.class,"EcalRunningPedestals")) {
-                Map<RawCalorimeterHit, Double> runningPedMap=
-                        (Map<RawCalorimeterHit, Double>)
+            if (event.hasItem("EcalRunningPedestals")) {
+                Map<EcalChannel, Double> runningPedMap=
+                        (Map<EcalChannel, Double>)
                         event.get("EcalRunningPedestals");
-                if (!runningPedMap.containsKey(hit)){
-                    System.err.println("Missing Key Dog");
+                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(hit);
+                    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();