Index: trunk/ippToPsps/jython/stackbatch.py
===================================================================
--- trunk/ippToPsps/jython/stackbatch.py	(revision 39101)
+++ trunk/ippToPsps/jython/stackbatch.py	(revision 39103)
@@ -65,4 +65,9 @@
        self.md5sum = {}
        self.stackEpochs = {}
+       self.expTime = {}
+       self.zpImage = {}
+       self.zpError = {}
+       self.magref = {}
+       self.nInjected = {}
 
        # we have two sets of imageIDs here:
@@ -116,4 +121,16 @@
 
            self.stackEpochs[filter] = self.getKeyFloat(header, "%.10f", 'MJD-OBS')
+
+           self.expTime[filter] = self.getKeyFloat(header, "%.8f", 'EXPTIME')
+           self.zpImage[filter] = self.getKeyFloat(header, "%.8f", 'ZPT_OBS')
+           self.zpError[filter] = self.getKeyFloat(header, "%.8f", 'ZPT_ERR')
+
+           deteffHeader = self.fits[filter].findAndReadHeader("SkyChip.deteff", self.config.test)
+           if not deteffHeader:
+               if self.config.test: self.logger.errorPair("No header found for Skychip.deteff for", filter)
+               return False
+
+           self.magref[filter] = self.getKeyFloat(deteffHeader, "%.8f", 'DETEFF.MAGREF')
+           self.nInjected[filter] = int(self.getKeyInt(deteffHeader, 0, 'DETEFF.NUM'))
 
 	   ## MEH -- md5sum test
@@ -268,18 +285,8 @@
         
         # Convert detectionThreshold to appropriate magnitudes
-        # Grab this from the appropriate extension.
-
-# CZW 20151110 This is broken.
-#        deteffHeader = self.fits[filter].findAndReadHeader("SkyChip.deteff", self.config.test)
-#        if not deteffHeader:
-#            if self.config.test: self.logger.errorPair("No header found for Skychip.deteff for", filter)
-#            return False
-# CZW This is the workaround
-
-        deteffHeader = header
-        detectionThreshold = self.getKeyFloat(deteffHeader, "%.8f", 'DETEFF.MAGREF')
-        expTime = self.getKeyFloat(header, "%.8f", 'EXPTIME')
-        zp      = self.getKeyFloat(header, "%.8f", 'ZPT_OBS')
-        zpErr   = self.getKeyFloat(header, "%.8f", 'ZPT_ERR')
+        magref  = self.magref[filter]
+        expTime = self.expTime[filter]
+        zp      = self.zpImage[filter]
+        zpErr   = self.zpError[filter]
 
         # zp correction should comes from DVO (unless image is not in DVO)
@@ -288,6 +295,6 @@
             zpImage = zp
 
-        detectionThreshold = detectionThreshold + zpImage + 2.5 * math.log10(expTime)
-        
+        detectionThreshold = magref + zpImage + 2.5 * math.log10(expTime)
+
         # insert stack metadata into table
         sqlLine = sqlUtility("INSERT INTO " + tablename + " (")
@@ -305,5 +312,5 @@
 	sqlLine.group("md5sum",             str(self.md5sum[filter]))
         sqlLine.group("detectionThreshold", detectionThreshold)
-        sqlLine.group("expTime",            self.getKeyFloat(header, "%.5f", 'EXPTIME'))  
+        sqlLine.group("expTime",            expTime)
         sqlLine.group("psfModelID",         psfmodelID)           
         sqlLine.group("psfFWHM",            psfFWHM)
@@ -481,5 +488,5 @@
 
             header = self.headerSet[filter]
-            exptime = self.getKeyFloat(header, "%.5f", "EXPTIME")
+            exptime = self.expTime[filter]
             expTimeString = str(exptime)
 
@@ -850,6 +857,6 @@
         ## XXX is this statement true: is FPA.ZP + 2.5log(exptime) applied to PETRO_MAG?
 
-        hdrZP   = "%.5f" % float(header['FPA.ZP'])
-        magtime = "%.5f" % (2.5*math.log10(float(header['EXPTIME'])))
+        hdrZP   = str(self.zpImage[filter])
+        # magtime = "%.5f" % (2.5*math.log10(self.expTime[filter]))
 
         # XXX hard-wired platescale : 0.25 (could get this from header, but stacks have constant plate scale
@@ -1135,5 +1142,5 @@
                 
                 field = "EXP_%04d" % input
-                expTime = self.getKeyFloat(header, "%6.3f", field)
+                expTime = self.getKeyFloat(header, "%6.3f", field) # exptime of INPUT image, not stack
                 
                 field = "AIR_%04d" % input
@@ -1183,41 +1190,23 @@
             except: pass
 
-
-            header = self.headerSet[filter]
-
             # Convert detectionThreshold to appropriate magnitudes
-            # Grab this from the appropriate extension.
-# CZW 20151110 This is broken.
-#            deteffHeader = self.fits[filter].findAndReadHeader("SkyChip.deteff", self.config.test)
-#            if not deteffHeader:
-#                if self.config.test: self.logger.errorPair("No header found for Skychip.deteff for", filter)
-#                return False
-# CZW This is the workaround
-            
-            deteffHeader = header
-            detectionThreshold = self.getKeyFloat(deteffHeader, "%.8f", 'DETEFF.MAGREF')
-            expTime = self.getKeyFloat(header, "%.8f", 'EXPTIME')
-            zp      = self.getKeyFloat(header, "%.8f", 'ZPT_OBS')
-            zpErr   = self.getKeyFloat(header, "%.8f", 'ZPT_ERR')
-
-        # zp correction should comes from DVO (unless image is not in DVO)
-            zpImage = self.scratchDb.getImageZeroPoint(stackID)
+            magref  = self.magref[filter]
+            expTime = self.expTime[filter]
+            zp      = self.zpImage[filter]
+            zpErr   = self.zpError[filter]
+
+            # zp correction should comes from DVO (unless image is not in DVO)
+            zpImage = self.scratchDb.getImageZeroPoint(stackImageID)
             if zpImage < 0.0:
                 zpImage = zp
 
-            detectionThreshold = detectionThreshold + zpImage + 2.5 * math.log10(expTime)
-            nInjected = int(self.getKeyInt(deteffHeader, 0, 'DETEFF.NUM'))
-
-            zpImage = self.scratchDb.getImageZeroPoint(stackImageID)
-            if zpImage < 0.0:
-                zpImage = 0.0
-            magref = self.getKeyFloat(header,"%.8f","DETEFF.MAGREF") + zpImage
+            detectionThreshold = magref + zpImage + 2.5 * math.log10(expTime)
+            nInjected = self.nInjected[filter]
 
             sqlLine = sqlUtility("INSERT INTO " + ippTableName + "(")
             sqlLine.group("stackImageID", str(stackImageID))
-            sqlLine.group("magref",       magref)
+            sqlLine.group("magref",       detectionThreshold)
             sqlLine.group("nInjected",    nInjected)
             sql = sqlLine.make(") VALUES ( ", ")")
-            
 
             try: self.scratchDb.execute(sql)
