Index: /trunk/ippToPsps/config/tables.FW.vot
===================================================================
--- /trunk/ippToPsps/config/tables.FW.vot	(revision 38957)
+++ /trunk/ippToPsps/config/tables.FW.vot	(revision 38958)
@@ -187,4 +187,13 @@
         <DESCRIPTION>Error in PSF flux.</DESCRIPTION>
       </FIELD>
+      <FIELD name="xPosChip" arraysize="1" datatype="float" unit="raw pixels" default="-999">
+        <DESCRIPTION>PSF x position in original chip pixels.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yPosChip" arraysize="1" datatype="float" unit="raw pixels" default="-999">
+        <DESCRIPTION>PSF y position in original chip pixels.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="FccdID" arraysize="1" datatype="short" unit="dimensionsless" default="-999">
+        <DESCRIPTION>OTA identifier of original chip (see ImageMeta).</DESCRIPTION>
+      </FIELD>
       <FIELD name="FpsfMajorFWHM" arraysize="1" datatype="float" unit="arcsec" default="-999">
         <DESCRIPTION>PSF major axis FWHM.</DESCRIPTION>
Index: /trunk/ippToPsps/jython/batch.py
===================================================================
--- /trunk/ippToPsps/jython/batch.py	(revision 38957)
+++ /trunk/ippToPsps/jython/batch.py	(revision 38958)
@@ -466,4 +466,12 @@
         for table in tables:
 
+            # example of listing all columns in a table:
+            ## print "-----table: " + table.name
+            ## columns = table.columns()
+            ## for column in columns:
+            ##     print column
+            ## 
+            ## print "-----"
+
             # print "import smf table ", table
             match = re.match(filter, table.name)
@@ -475,5 +483,5 @@
 
             # print "read smf table ", table
-            self.logger.infoPair("read smf table", table)
+            self.logger.infoPair("read smf table", table.name)
 
             # drop any previous tables before import
Index: /trunk/ippToPsps/jython/detectionbatch.py
===================================================================
--- /trunk/ippToPsps/jython/detectionbatch.py	(revision 38957)
+++ /trunk/ippToPsps/jython/detectionbatch.py	(revision 38958)
@@ -46,14 +46,14 @@
 
        super(DetectionBatch, self).__init__(
-               logger,
-               config,
-               skychunk,
-               gpc1Db,
-               ippToPspsDb,
-               scratchDb,
-               camID,
-               batchID,
-               "P2", 
-               gpc1Db.getCameraStageSmf(camID,skychunk.P2_smf_version))
+           logger,
+           config,
+           skychunk,
+           gpc1Db,
+           ippToPspsDb,
+           scratchDb,
+           camID,
+           batchID,
+           "P2", 
+           gpc1Db.getCameraStageSmf(camID,skychunk.P2_smf_version))
 
        # get camera meta data
@@ -109,17 +109,13 @@
            self.logger.errorPair("Could not get", "FILTERID")
            raise
-       
+           
        # MJD-OBS is the exposure start, EXTIME / 172800 = (EXPTIME sec / 84600 sec/day) / 2
        self.obsTime = float(self.header['MJD-OBS']) + (float(self.header['EXPTIME']) / 172800.0)
-    
+       
        ## MEH md5sum options test 
-       self.md5sum = None
        self.md5sum = self.fits.getMd5sum()
-       #self.md5sum = self.fits.getMd5sumShell()
-       #self.md5sum = self.fits.getMd5sumFile()
-  
+       
        # set up some defauts
        self.totalNumPhotoRef = 0
-
 
        self.filter = self.header['FILTERID'][0:1]
@@ -198,4 +194,5 @@
         self.scratchDb.updateFilterID("FrameMeta", self.filter)
         self.scratchDb.updateAllRows("FrameMeta", "processingVersion", str(self.skychunk.processingVersion))
+        return True
 
     '''
@@ -344,15 +341,23 @@
         self.scratchDb.execute(sql)
 
+        print "---- inserted ImageMeta into mysql"
+
         self.scratchDb.updateRecalStats(tableName, header['IMAGEID'], str(pltscale));
         self.scratchDb.updateFilterID(tableName, self.filter)
         self.scratchDb.updateAllRows(tableName, "processingVersion", str(self.skychunk.processingVersion))
 
+        print "---- updated things"
+
         if 'NASTRO' in header: self.totalNumPhotoRef = self.totalNumPhotoRef + int(header['NASTRO'])
         self.scratchDb.replaceNullsInThisColumn(tableName, "polyOrder", "0")
 
+        print "---- completed ImageMeta"
+        return True
+
     '''
     Populates the ImageDetEffMeta table for this OTA
     '''
     def populateImageDetEffMetaTablePart1(self, ota, header):
+        print "---- *** populate ImageDetEffMetaTablePart1"
         ippTableName = ota + "_deteff"
         tableName = "ImageDetEffMeta_" + ota
@@ -384,4 +389,5 @@
 
         # for loop
+        return True
 
     '''
@@ -389,8 +395,10 @@
     '''
     def populateImageDetEffMetaTablePart2(self, ota):
+        print "---- *** populate ImageDetEffMetaTablePart2"
+
         ippTableName = ota + "_deteff"
         tableName = "ImageDetEffMeta_" + ota
 
-              # ok, this is a bit tricky - Ideally I just want this all in one table, however, the way the table is layed out is 90 degrees from how I want it.
+        # ok, this is a bit tricky - Ideally I just want this all in one table, however, the way the table is layed out is 90 degrees from how I want it.
         # the steps out of this mess are as follows:
         # give an index to XYxy_deteff (already done, called table_index)
@@ -424,4 +432,5 @@
                           self.logger.errorPair('failed sql: ', sql)
                           raise
+        return True
                
 
@@ -552,4 +561,5 @@
         # we don't delete these anymore
         results['NULLINSTFLUX'] = 0;
+        return True
 
     '''
@@ -580,4 +590,6 @@
 
         self.scratchDb.updateAllRows(tableName, "processingVersion", str(self.skychunk.processingVersion))
+        return True
+
     '''
     Populates the SkinnyObject table for this OTA
@@ -607,4 +619,5 @@
 
         self.scratchDb.updateAllRows(tableName, "processingVersion", str(self.skychunk.processingVersion))
+        return True
 
     '''
@@ -641,4 +654,5 @@
             
         # populate ImageMeta
+        # XXX EAM 20151024 : 
         if not self.populateImageMetaTable(chipname, header):
             self.logger.infoPair("skipping chip: ", chipname)
@@ -647,4 +661,5 @@
         self.updateImageID("ImageMeta_" + chipname, x, y) 
 
+        # XXX EAM 20151024 : problem is here?
         self.populateImageDetEffMetaTablePart1(chipname, header)
         self.updateImageID("ImageDetEffMeta_" + chipname, x, y)
@@ -693,5 +708,4 @@
         return True
 
-
     '''
     Applies indexes to the IPP tables
@@ -722,4 +736,6 @@
 
         self.logger.infoPair("created indexes on", "IPP tables")      
+        return True
+
 
     '''
@@ -771,4 +787,5 @@
 
         self.scratchDb.execute(sql)
+        return True
 
     '''
@@ -786,4 +803,5 @@
             self.logger.errorPair('failed sql',sql)
             raise
+        return True
         
     '''
@@ -1004,4 +1022,5 @@
 
         print "duplicates found: ", str(Nduplicates)
+        return True
 
     '''
@@ -1012,4 +1031,5 @@
         sql = "UPDATE " + tableName + " SET imageID = %d%d%d" % (self.expID, x, y) 
         self.scratchDb.execute(sql)
+        return True
 
     '''
@@ -1022,5 +1042,5 @@
             if table.name == "FrameMeta": self.scratchDb.reportNulls(table.name, showPartials)
             else: self.scratchDb.reportNulls(table.name + "_XY33", showPartials)
-
+        return True
 
     '''
Index: /trunk/ippToPsps/jython/diffbatch.py
===================================================================
--- /trunk/ippToPsps/jython/diffbatch.py	(revision 38957)
+++ /trunk/ippToPsps/jython/diffbatch.py	(revision 38958)
@@ -98,6 +98,4 @@
            self.number[num]= diffSkyFileID
 
-
-
            self.logger.infoPair("getting diff" ," metadata")
            self.logger.infoPair("for diff skyfile id ", str(diffSkyFileID))
@@ -106,4 +104,6 @@
            self.logger.infoPair("ok, I guess that worked","now doing this")
 
+           # this code is very fragile: it depends on the right order in the output 
+           # of the sql call in another file (see forcedwarpbatch.py for a better method)
            if not meta:
                self.logger.errorPair("Could not get", "diff metadata")
@@ -132,5 +132,5 @@
            self.logger.infoPair("TessName ",tessName)
            self.tessID[num] = self.scratchDb.getTessID(tessName)
-        
+
            self.logger.infoPair("TessName ",tessName)
        # XXX EAM 20140812 : I am hardwiring the parsing logic for RINGS vs LOCAL
@@ -325,6 +325,7 @@
             sqlLine.group("DapFlux",          "AP_FLUX / " + expTimeString)
             sqlLine.group("DapFluxErr",       "AP_FLUX_SIG / " + expTimeString)
-#           sqlLine.group("DapFillF",         "AP_NPIX / (3.14159265359 * AP_MAG_RADIUS * AP_MAG_RADIUS)")
-#       sqlLine.group("DapRadius",        "AP_MAG_RADIUS")
+
+        if self.haveApNpix[num]:
+            sqlLine.group("DapFillF", "AP_NPIX / (3.14159265359 * AP_MAG_RADIUS * AP_MAG_RADIUS)")
         sqlLine.group("DkronFlux",        "KRON_FLUX / " + expTimeString)
         sqlLine.group("DkronFluxErr",     "KRON_FLUX_ERR / " + expTimeString)
@@ -568,4 +569,7 @@
         self.logger.infoPair("Importing DF tables with table match expression: ", tableRE)
 
+        self.tablesLoaded = []
+        self.haveApNpix = {}
+
         count = 0
         for num in self.number:
@@ -581,4 +585,7 @@
                 return False
         
+            # this is an optional field, check for it in the table below
+            self.haveApNpix[num] = 0
+
             # count = 0
             for table in tables:
@@ -587,13 +594,20 @@
                 if not match: continue
 
-                self.logger.infoPair("Reading IPP table", table.name+"_"+str(num))
+                # check for AP_NPIX columns: missing for SAS39
+                if table.name == "SkyChip_psf":
+                    columns = table.columns()
+                    if 'AP_NPIX' in columns:
+                        self.haveApNpix[num] = 1
+
+                myTable = table.name + "_" + str(num)
+
+                self.logger.infoPair("Reading IPP table", myTable)
                 table = stilts.tpipe(table, cmd='addcol table_index $0')
                 table = stilts.tpipe(table, cmd='explodeall')
                   
-            # drop any previous tables before import
-                self.scratchDb.dropTable(table.name+"_"+str(num))
+                # drop any previous tables before import
+                self.scratchDb.dropTable(myTable)
                   
-                  
-            # IPP FITS files are littered with infinities, so remove these
+                # IPP FITS files are littered with infinities, so remove these
                 self.logger.info("Removing Infinity values from all columns")
                 table = stilts.tpipe(table, cmd='keepcols "' + columns + '"')
@@ -602,12 +616,14 @@
                   
                 try:
-                    table.write(self.scratchDb.url + '#' +  table.name+"_"+str(num))
+                    table.write(self.scratchDb.url + '#' +  myTable)
                     count = count + 1
                 except:
-                    self.logger.exception("Problem writing table '" +  table.name+"_"+str(num) + "' to the database")
+                    self.logger.exception("Problem writing table '" +  myTable + "' to the database")
                       
                 self.logger.infoPair("Done. Imported", "%d tables" % count)
                 self.indexIppTables(num)
                       
+                self.tablesLoaded.append(myTable)
+
         return True
 
Index: /trunk/ippToPsps/jython/fits.py
===================================================================
--- /trunk/ippToPsps/jython/fits.py	(revision 38957)
+++ /trunk/ippToPsps/jython/fits.py	(revision 38958)
@@ -8,5 +8,5 @@
 
 '''
-FITS file class, for reading silly headers and things
+FITS file class, for reading headers and things
 '''
 class Fits(object):
@@ -35,5 +35,5 @@
        #shutil.copy2(self.originalPath, self.localCopyPath)
 
-       # open the local copy and parse the ridiculou plain-text header
+       # open the local copy and parse the header
        #self.file = open(self.localCopyPath)
        self.file = open(self.originalPath)
@@ -45,24 +45,38 @@
        self.rewindToStart()
 
-
     '''
     Get md5sum for file 
     '''
     def getMd5sum(self):
-    	## memory inefficient all at once read but should be ok...
-    	md5 = hashlib.md5(open(self.originalPath,'rb').read())
-	return md5.hexdigest()
+        mode = "hashlib"
 
-    def getMd5sumShell(self):
-    	md5cmd = "md5sum %s" % (self.originalPath)
-	md5 = Popen(md5cmd, shell=True, stdout=PIPE).stdout.read()
-	return md5[0:32]
+        if mode == "hashlib":
+            ## memory-inefficient all-at-once read
+            ## XXX EAM: do we need to free the loaded file to prevent double-usage of memory
+            md5 = hashlib.md5(open(self.originalPath,'rb').read())
+            return md5.hexdigest()
 
-    def getMd5sumFile(self):
-    	## unclear if rb by default for file so maybe not best
-        md5 = hashlib.md5(self.file.read())
-	## if used, then need to move file pointer back to the start of the file for others to use
-	self.rewindToStart()
-        return md5.hexdigest()
+        if mode == "shell":
+            ## use external shell md5sum command: error handline needs to check the exit status
+            md5cmd = "md5sum %s" % (self.originalPath)
+            p = Popen(md5cmd, shell=True, stdout=PIPE)
+            p.wait()
+            if p.returncode < 0:
+                self.logger.errorPair("md5sum crashed: ", md5cmd)
+                os._exit(1)
+                
+            if p.returncode > 0:
+                self.logger.errorPair("md5sum error : ", md5cmd)
+                os._exit(1)
+
+            md5 = p.stdout.read()
+            return md5[0:32]
+
+        if mode == "file":
+            ## it is unclear if the open mode is 'rb' by default for file; this may fail otherwise
+            md5 = hashlib.md5(self.file.read())
+            ## if used, then need to move file pointer back to the start of the file for others to use
+            self.rewindToStart()
+            return md5.hexdigest()
 
     '''
Index: /trunk/ippToPsps/jython/forcedwarpbatch.py
===================================================================
--- /trunk/ippToPsps/jython/forcedwarpbatch.py	(revision 38957)
+++ /trunk/ippToPsps/jython/forcedwarpbatch.py	(revision 38958)
@@ -78,5 +78,5 @@
        self.expTime = {}
        self.analysisVer = {}
-       set.md5sum = {}
+       self.md5sum = {}
        self.tessName = {}
        self.obsTime = {}
@@ -385,4 +385,7 @@
         sqlLine.group("FpsfFlux",          "PSF_INST_FLUX / " + expTimeString)
         sqlLine.group("FpsfFluxErr",       "PSF_INST_FLUX_SIG / " + expTimeString)
+        sqlLine.group("xPosChip",          "SRC_CHIP_X")
+        sqlLine.group("yPosChip",          "SRC_CHIP_Y")
+        sqlLine.group("FccdID"  ,          "SRC_CHIP_NUM")
         sqlLine.group("FpsfMajorFWHM",     "PSF_FWHM_MAJ * abs(PLTSCALE)")
         sqlLine.group("FpsfMinorFWHM",     "PSF_FWHM_MIN * abs(PLTSCALE)")
Index: /trunk/ippToPsps/jython/stackbatch.py
===================================================================
--- /trunk/ippToPsps/jython/stackbatch.py	(revision 38957)
+++ /trunk/ippToPsps/jython/stackbatch.py	(revision 38958)
@@ -657,4 +657,7 @@
         magtime = "%.5f" % (2.5*math.log10(float(header['EXPTIME'])))
 
+        # XXX hard-wired platescale : 0.25 (could get this from header, but stacks have constant plate scale
+        pltscale = 0.25
+
         sqlLine = sqlUtility("UPDATE " + tablename + " AS a, " + cmfTable + " AS b SET")
 
@@ -665,10 +668,11 @@
         sqlLine.group("a." + filter + model + "MagErr",    "b.EXT_INST_MAG_SIG")
                       
-        sqlLine.group("a." + filter + model + "Radius",    "b.EXT_WIDTH_MAJ")
+        sqlLine.group("a." + filter + model + "Radius",    "b.EXT_WIDTH_MAJ     * " + str(pltscale))
+        sqlLine.group("a." + filter + model + "RadiusErr", "b.EXT_WIDTH_MAJ_ERR * " + str(pltscale))
+
         sqlLine.group("a." + filter + model + "Ab",        "b.EXT_WIDTH_MIN/b.EXT_WIDTH_MAJ")
+        sqlLine.group("a." + filter + model + "AbErr",     "sqrt(b.EXT_WIDTH_MIN_ERR * b.EXT_WIDTH_MIN_ERR + pow(b.EXT_WIDTH_MAJ_ERR * b.EXT_WIDTH_MIN / b.EXT_WIDTH_MAJ, 2.0)) / b.EXT_WIDTH_MAJ")
+
         sqlLine.group("a." + filter + model + "Phi",       "DEGREES(b.EXT_THETA)")
-
-        sqlLine.group("a." + filter + model + "RadiusErr", "b.EXT_WIDTH_MAJ_ERR")
-        sqlLine.group("a." + filter + model + "AbErr",     "b.EXT_WIDTH_MIN_ERR")
         sqlLine.group("a." + filter + model + "PhiErr",    "DEGREES(b.EXT_THETA_ERR)")
 
@@ -676,11 +680,4 @@
 
         # I have raExp = X_EXT
-
-        # This is tricky: RA_EXT is not defined for PS1_SV3 or PS1_V5, but X_EXT is
-        # XXX EAM 20140812: for PV3, update cmf output to define RA_EXT, DEC_EXT
-        ## sqlLine.group("a." + filter + model + "Ra",        "b.X_EXT")
-        ## sqlLine.group("a." + filter + model + "Dec",       "b.Y_EXT")
-        ## sqlLine.group("a." + filter + model + "RaErr",     "b.X_EXT_SIG") # need to modify by platescale
-        ## sqlLine.group("a." + filter + model + "DecErr",    "b.Y_EXT_SIG")
 
         # EAM 20150924: PV3 output cmfs were updated to include RA_EXT, DEC_EXT
@@ -712,6 +709,4 @@
 
         sqlLine.group("a." + filter + model + "Mag",       "a." + filter + model + "Mag       + b.zp")
-        sqlLine.group("a." + filter + model + "Radius",    "a." + filter + model + "Radius    * b.PLTSCALE")
-        sqlLine.group("a." + filter + model + "RadiusErr", "a." + filter + model + "RadiusErr * b.PLTSCALE")
 
         sql = sqlLine.makeEquals("WHERE a.objID = b.objID AND a." + filter + "ippDetectID = b.ippDetectID AND b.imageID = " + str(imageID))
@@ -837,4 +832,7 @@
         magtime = "%.5f" % (2.5*math.log10(float(header['EXPTIME'])))
 
+        # XXX hard-wired platescale : 0.25 (could get this from header, but stacks have constant plate scale
+        pltscale = 0.25
+
         self.logger.infoPair("Adding", "petrosians for extended sources")
         sqlLine = sqlUtility("UPDATE " + tablename + " AS a, " + cmfTable + " AS b SET")
@@ -842,39 +840,24 @@
         sqlLine.group("a."+filter+"haveData",         "'1'")
 
-        sqlLine.group("a." + filter + "petRadius",    "b.PETRO_RADIUS")
-        sqlLine.group("a." + filter + "petRadiusErr", "b.PETRO_RADIUS_ERR")
         sqlLine.group("a." + filter + "petMag",       "b.PETRO_MAG - " + hdrZP)  
         sqlLine.group("a." + filter + "petMagErr",    "1.0 / b.PETRO_MAG_ERR")  # still inverted? (yes)
-        sqlLine.group("a." + filter + "petR50",       "b.PETRO_RADIUS_50")
-        sqlLine.group("a." + filter + "petR50Err",    "b.PETRO_RADIUS_50_ERR")
-        sqlLine.group("a." + filter + "petR90",       "b.PETRO_RADIUS_90")
-        sqlLine.group("a." + filter + "petR90Err",    "b.PETRO_RADIUS_90_ERR")
+
+        sqlLine.group("a." + filter + "petRadius",    "b.PETRO_RADIUS        * " + str(pltscale))
+        sqlLine.group("a." + filter + "petRadiusErr", "b.PETRO_RADIUS_ERR    * " + str(pltscale))
+        sqlLine.group("a." + filter + "petR50",       "b.PETRO_RADIUS_50     * " + str(pltscale))
+        sqlLine.group("a." + filter + "petR50Err",    "b.PETRO_RADIUS_50_ERR * " + str(pltscale))
+        sqlLine.group("a." + filter + "petR90",       "b.PETRO_RADIUS_90     * " + str(pltscale))
+        sqlLine.group("a." + filter + "petR90Err",    "b.PETRO_RADIUS_90_ERR * " + str(pltscale))
         sqlLine.group("a." + filter + "petCf",        "b.PETRO_FILL")
 
         sql = sqlLine.makeEquals("WHERE a." + filter + "ippDetectID = b.IPP_IDET ")
-
-        try: self.scratchDb.execute(sql)
-        except:
-            self.logger.error("problem with SQL: " + sql)
-            raise
+        self.scratchDb.execute(sql)
 
         # modify petMag to apply the zero point
         sqlLine = sqlUtility("UPDATE " + tablename + " AS a, " + self.scratchDb.dvoDetectionTable + " as b SET")
-
         sqlLine.group("a." + filter + "petMag",       "a." + filter + "petMag    + b.zp")
-
-        sqlLine.group("a." + filter + "petRadius",    "a." + filter + "petRadius * b.PLTSCALE")
-        sqlLine.group("a." + filter + "petRadiusErr", "a." + filter + "petRadius * b.PLTSCALE")
-        sqlLine.group("a." + filter + "petR50",       "a." + filter + "petR50    * b.PLTSCALE")
-        sqlLine.group("a." + filter + "petR50Err",    "a." + filter + "petR50Err * b.PLTSCALE")
-        sqlLine.group("a." + filter + "petR90",       "a." + filter + "petR90    * b.PLTSCALE")
-        sqlLine.group("a." + filter + "petR90Err",    "a." + filter + "petR90Err * b.PLTSCALE")
-
         sql = sqlLine.makeEquals("WHERE a.objID = b.objID AND a." + filter + "ippDetectID = b.ippDetectID AND b.imageID = " + str(imageID))
 
-        try: self.scratchDb.execute(sql)
-        except:
-            self.logger.errorPair('failed sql',sql)
-            raise
+        self.scratchDb.execute(sql)
 
         # modify petRadiusErr if it is not set correctlyu
@@ -884,9 +867,5 @@
         sql = sqlLine.makeEquals("WHERE a." + filter + "petRadiusErr IS NULL")
 
-        try: self.scratchDb.execute(sql)
-        except:
-            self.logger.errorPair('failed sql',sql)
-            raise
-
+        self.scratchDb.execute(sql)
 
     '''
@@ -1171,22 +1150,9 @@
     def generateRandomIDs(self):
         sql = "UPDATE StackObjectThin set randomStackObjID = RAND("+str(self.batchID)+")"
-        try: self.scratchDb.execute(sql)
-        except:
-            self.logger.errorPair('failed sql',sql)
-            raise
-
+        self.scratchDb.execute(sql)
 
     def generateStackDetectRowIDsAndPspsUniqueIDs(self):
-#        sql = "UPDATE StackObjectThin join (select @r:=@r+1 rownum, objID from \
-#        (select @r:=0) r, StackObjectThin t) as foo using (objID) set \
-#        stackDetectRowID = ((" + str(self.batchID) + " << 32 ) + rownum), \
-#        uniquePspsSTid = ((" +str(self.batchID)+ "*1000000000 ) + rownum)";
         sql = "UPDATE StackObjectThin set uniquePspsSTid = (("+str(self.batchID)+"*1000000000 ) + row)"
-
-        try: self.scratchDb.execute(sql)
-        except:
-            self.logger.errorPair('failed sql',sql)
-            raise
-        
+        self.scratchDb.execute(sql)
 
     '''
@@ -1202,16 +1168,4 @@
         for filter in self.filters:
             self.scratchDb.addColumn("StackObjectThin", filter + "haveData", "tinyint")
-
- #       sqlLine = sqlUtility("INSERT INTO StackObjectThin (")
- #       
- #       sqlLine.group("objID",            "objID")
- #       sqlLine.group("ippObjID",         "ippObjID")
-#        sqlLine.group("ippDetectID", "ippDetectID") # added ippDetectID
- #       sqlLine.group("surveyID",         "'" + str(self.surveyID) + "'")
- #       sqlLine.group("tessID",           "'" + str(self.tessID) + "'")
- #       sqlLine.group("projectionID",     "'" + str(self.projectionID) + "'")
- #       sqlLine.group("skyCellID",        "'" + str(self.skycellID) + "'")
- #       sqlLine.group("processingVersion",      "'" + str(self.skychunk.processingVersion) + "'")
-   #     sqlLine.group("randomStackObjID", "FLOOR(RAND()*9223372036854775807)")
 
         whereClause = " WHERE ("
@@ -1231,12 +1185,7 @@
         sql = "insert into StackObjectThin (objID, ippDetectID, ippObjID) select distinct objID, ippDetectID, ippObjID from dvoDetectionFull " + whereClause;
 
-  #      sql = sqlLine.makeRaw(") SELECT DISTINCT ", "FROM " + self.scratchDb.dvoDetectionTable + whereClause)
-
-        try: self.scratchDb.execute(sql)
-        except:
-            self.logger.errorPair('failed sql',sql)
-            raise
-
-# ok, now add surveyID, tessID, projectionID, skycellID, dtaRelease
+        self.scratchDb.execute(sql)
+
+        # ok, now add surveyID, tessID, projectionID, skycellID, dtaRelease
 
         sql = "update StackObjectThin set surveyID = "+str(self.surveyID) +"\
@@ -1246,18 +1195,13 @@
               , processingVersion = '" + str(self.skychunk.processingVersion)  +"'"
               
-        try: self.scratchDb.execute(sql)
-        except:
-            self.logger.errorPair('failed sql',sql)
-            raise
-
- # ok, now fill g/r/i/z/yippDetectID using objID and detectID and image ID
+        self.scratchDb.execute(sql)
+
+        # ok, now fill g/r/i/z/yippDetectID using objID and detectID and image ID
 
         for filter in self.filters:
             sql = "update StackObjectThin join "+self.scratchDb.dvoDetectionTable +" using (objID, ippDetectID) set "+filter+"ippDetectID = ippDetectID \
                   where " + self.scratchDb.dvoDetectionTable + ".imageID = " + str(imageID)
-            try: self.scratchDb.execute(sql)
-            except:
-                self.logger.errorPair('failed sql',sql)
-                raise
+            self.scratchDb.execute(sql)
+
         self.scratchDb.dropColumn("StackObjectThin", "ippDetectID")
 
@@ -1277,20 +1221,12 @@
             fields += filter + "ippDetectID, "
             fields += filter + "stackDetectID, "
-#            fields += filter + "StackDetectRowID, " 
             fields += filter + "stackImageID " # careful here: do not add comma to last entry
             if (i < len(self.filters) - 1):
                 fields += ", "
 
-        #if (table == "StackObjectAttributes"):
-        #    fields += ", stackDetectRowID "
         sql  = "INSERT INTO " + table + " (" + fields + ") "
         sql += "SELECT " + fields + " FROM " + mainTable
 
-        try: self.scratchDb.execute(sql)
-        except:
-            self.logger.errorPair('failed sql',sql)
-            raise
-
-
+        self.scratchDb.execute(sql)
         
     '''
@@ -1428,8 +1364,5 @@
                 self.tablesLoaded.append(myTable)
 
-        # XXX validate required tables (do we need _psf?, _xsrc? etc)
-
         self.logger.infoPair("Done. Imported", "%d tables" % count)
         self.indexIppTables()
-#        return False
         return True
