Index: trunk/ippToPsps/jython/stackbatch.py
===================================================================
--- trunk/ippToPsps/jython/stackbatch.py	(revision 36719)
+++ trunk/ippToPsps/jython/stackbatch.py	(revision 36723)
@@ -1015,23 +1015,50 @@
         self.scratchDb.updateAllRows(tableName, "dataRelease", str(self.skychunk.dataRelease))
         
-    def populateStackObjectCalib(self):
+    def populateStackObjectFromDvo(self):
 
         tableName = "StackObject"
         self.logger.infoPair("Processing table", tableName)
 
-        imageID = self.scratchDb.getImageIDFromExternID(self.header['IMAGEID'])
-        self.logger.infoPair("obtained","imageID")
-        sql = "UPDATE " + tableName + " AS a, "  + self.scratchDb.dvoDetectionTable + " AS b \
-            SET a.ra = b.ra, \
-            a.dec = b.dec_, \
-            a.raErr = b.raErr, \
-            a.decErr = b.decErr, \
-            a.zp = b.zp, \
-            a.expTime = b.expTime, \
-            a.airMass = b.airMass   \
-            WHERE a.stackDetectID = b.detectID \
-            AND b.imageID = " + str(imageID)
-        self.scratchDb.execute(sql)
-        self.scratchDb.updateAllRows(tableName, "dataRelease", str(self.skychunk.dataRelease))
+        filters = ['g','r','i','z','y']
+        
+        for f in filters:
+            skip = 0
+            #first: do we skip this filter
+            if f == 'g':
+                self.header = self.gheader
+                if self.gstackID < 0:
+                    skip = 1
+            elif f == 'r':
+                self.header = self.rheader
+                if self.rstackID < 0:
+                    skip = 1
+            elif f == 'i':
+                self.header = self.iheader
+                if self.istackID < 0:
+                    skip = 1
+            elif f == 'z':
+                self.header = self.zheader
+                if self.zstackID < 0:
+                    skip = 1
+            elif f == 'y':
+                self.header = self.yheader
+                if self.ystackID < 0:
+                    skip = 1
+            if skip == 0:        
+                imageID = self.scratchDb.getImageIDFromExternID(self.header['IMAGEID'])
+                self.logger.infoPair("obtained","imageID")
+                sql = "UPDATE " + tableName + " AS a, "  + self.scratchDb.dvoDetectionTable + " AS b \
+                      SET a." + f + "ra = b.ra, \
+                      a." + f + "dec = b.dec_, \
+                      a." + f + "raErr = b.raErr, \
+                      a." + f + "decErr = b.decErr, \
+                      a." + f + "zp = b.zp, \
+                      a." + f + "expTime = b.expTime, \
+                      a." + f + "stackDetectID = b.detectID   \
+                      WHERE a.objID = b.objID \
+                      AND b.imageID = " + str(imageID)
+            self.logger.infoPair('sql',sql)    
+            self.scratchDb.execute(sql)
+            self.scratchDb.updateAllRows(tableName, "dataRelease", str(self.skychunk.dataRelease))
 
         ## XXX write this with the select/insert
@@ -1091,6 +1118,7 @@
         sql = "INSERT IGNORE INTO " + table + " ( \
                objID ) \
-               SELECT (objID) FROM " + self.scratchDb.dvoDetectionTable + " ( \
-               WHERE b.imageID = " + str(imageID)
+               SELECT (objID) FROM " + self.scratchDb.dvoDetectionTable + "  \
+               WHERE " + self.scratchDb.dvoDetectionTable + ".imageID = " + str(imageID)
+        self.logger.infoPair("sql",sql)
         self.scratchDb.execute(sql)
     
@@ -1139,5 +1167,5 @@
     '''
     def populatePspsTables(self):
-        self.infoPair("starting","populatePspsTables");
+        self.logger.infoPair("starting","populatePspsTables");
         self.skipBatch = False
      
@@ -1182,5 +1210,14 @@
             self.insertDvoIDs("StackApFlx","y.00000")
 
-        self.logger.infoPair("populating","StackObject") 
+        self.logger.infoPair("populating","StackObject")
+        # need to index on objid or it is stupidly slow
+        self.scratchDb.createIndex("StackObject", "objID")
+        self.scratchDb.createIndex("StackModelFit", "objID")
+        self.scratchDb.createIndex("StackApFlx", "objID")
+
+
+
+        #ok, now we have the shell stackObjects - these need to be filled.
+        self.populateStackObjectFromDvo()
         self.populateStackObject()
         
