Index: /trunk/ippToPsps/config/tables.ST.vot
===================================================================
--- /trunk/ippToPsps/config/tables.ST.vot	(revision 36743)
+++ /trunk/ippToPsps/config/tables.ST.vot	(revision 36744)
@@ -124,7 +124,4 @@
         <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
-      </FIELD>
       <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
         <DESCRIPTION>survey flag identifier</DESCRIPTION>
@@ -151,4 +148,7 @@
         <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
       </FIELD> 
+      <FIELD name="gippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
       <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
@@ -283,4 +283,7 @@
         <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
       </FIELD>
+      <FIELD name="rippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
       <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
@@ -415,4 +418,7 @@
         <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
       </FIELD>
+      <FIELD name="iippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
       <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
@@ -547,4 +553,7 @@
         <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
       </FIELD>
+      <FIELD name="zippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
       <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
@@ -678,4 +687,7 @@
       <FIELD name="znFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
         <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
       </FIELD>
       <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
@@ -824,7 +836,4 @@
         <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
-      </FIELD>
       <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="0">
         <DESCRIPTION>survey flag identifier</DESCRIPTION>
@@ -857,4 +866,7 @@
         <DESCRIPTION>stack identifier</DESCRIPTION>
       </FIELD>
+      <FIELD name="gippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
       <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
@@ -974,5 +986,8 @@
         <DESCRIPTION>stack identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="rIppDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+      <FIELD name="rippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
       </FIELD>
@@ -1091,5 +1106,8 @@
         <DESCRIPTION>stack identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="iIppDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+      <FIELD name="iippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
       </FIELD>
@@ -1208,5 +1226,8 @@
         <DESCRIPTION>stack identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="zIppDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+      <FIELD name="zippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
       </FIELD>
@@ -1325,5 +1346,8 @@
         <DESCRIPTION>stack identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="yIppDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+      <FIELD name="yippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
       </FIELD>
@@ -1449,7 +1473,4 @@
         <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
-      </FIELD>
       <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
         <DESCRIPTION>survey flag identifier</DESCRIPTION>
@@ -1491,4 +1512,7 @@
         <DESCRIPTION>stack identifier</DESCRIPTION>
       </FIELD>
+      <FIELD name="gippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
       <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp detect identifier</DESCRIPTION>
@@ -2028,4 +2052,7 @@
         <DESCRIPTION>stack identifier</DESCRIPTION>
       </FIELD>
+      <FIELD name="rippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
       <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp detect identifier</DESCRIPTION>
@@ -2565,4 +2592,7 @@
         <DESCRIPTION>stack identifier</DESCRIPTION>
       </FIELD>
+      <FIELD name="iippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
       <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="-999">
         <DESCRIPTION>ipp detect identifier</DESCRIPTION>
@@ -3102,4 +3132,7 @@
         <DESCRIPTION>stack identifier</DESCRIPTION>
       </FIELD>
+      <FIELD name="zippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
       <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp detect identifier</DESCRIPTION>
@@ -3638,4 +3671,7 @@
       <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
       </FIELD>
       <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
Index: /trunk/ippToPsps/jython/detectionbatch.py
===================================================================
--- /trunk/ippToPsps/jython/detectionbatch.py	(revision 36743)
+++ /trunk/ippToPsps/jython/detectionbatch.py	(revision 36744)
@@ -410,4 +410,5 @@
         sql = "INSERT IGNORE INTO " + pspsTableName + " ( \
                ippDetectID \
+               ,randomDetID \
                ,filterID \
                ,surveyID \
@@ -442,8 +443,11 @@
                ,sky \
                ,skyErr \
+               ,pltScale \
+               ,posAngle \
                ,dataRelease \
                ) \
                SELECT \
                IPP_IDET \
+               , FLOOR(RAND()*9223372036854775807) \
                , " + str(self.filterID) + "\
                , " + str(self.surveyID) + " \
@@ -464,10 +468,10 @@
                ,MOMENTS_XY \
                ,MOMENTS_YY \
-               ,-999 \
-               ,-999 \
-               ,-999 \
-               ,-999 \
-               ,-999 \
-               ,-999 \
+               ,MOMENTS_R1 \
+               ,MOMENTS_RH \
+               ,MOMENTS_M3C \
+               ,MOMENTS_M3S \
+               ,MOMENTS_M4C \
+               ,MOMENTS_M4S \
                ,POW(10.0, -0.4 *AP_MAG) / " + self.header['EXPTIME'] + " \
                ,KRON_FLUX / " + self.header['EXPTIME'] + " \
@@ -478,4 +482,6 @@
                ,SKY  / " + self.header['EXPTIME'] + " \
                ,SKY_SIGMA  / " + self.header['EXPTIME'] + " \
+               ,PLTSCALE \
+               ,POSANGLE \
                , " + str(self.skychunk.dataRelease) + "\
                FROM " + ippTableName
@@ -932,4 +938,7 @@
         sql = "UPDATE FrameMeta SET nOTA = %d, numPhotoRef = %d" % (otaCount, self.totalNumPhotoRef)
         self.scratchDb.execute(sql)
+        #to make it stop
+        #test = self.scratchDb.getRowCount("Object")
+        #return False
         
         return True
@@ -1011,5 +1020,5 @@
 
        # XXX EAM NOTE : this is fragile : requires PS1_V4
-       columns = "IPP_IDET X_PSF Y_PSF X_PSF_SIG Y_PSF_SIG PSF_INST_MAG PSF_INST_MAG_SIG PSF_INST_FLUX PSF_INST_FLUX_SIG PEAK_FLUX_AS_MAG PSF_MAJOR PSF_MINOR PSF_THETA EXT_NSIGMA PSF_QF MOMENTS_XX MOMENTS_XY MOMENTS_YY AP_MAG KRON_FLUX KRON_FLUX_ERR FLAGS FLAGS2 SKY SKY_SIGMA EXT_NSIGMA PSF_QF_PERFECT PSF_CHISQ"
+       columns = "IPP_IDET X_PSF Y_PSF X_PSF_SIG Y_PSF_SIG PSF_INST_MAG PSF_INST_MAG_SIG PSF_INST_FLUX PSF_INST_FLUX_SIG PEAK_FLUX_AS_MAG PSF_MAJOR PSF_MINOR PSF_THETA EXT_NSIGMA PSF_QF MOMENTS_XX MOMENTS_XY MOMENTS_YY MOMENTS_R1 MOMENTS_RH MOMENTS_M3C MOMENTS_M3S MOMENTS_M4C MOMENTS_M4S AP_MAG KRON_FLUX KRON_FLUX_ERR FLAGS FLAGS2 SKY SKY_SIGMA EXT_NSIGMA PSF_QF_PERFECT PSF_CHISQ POSANGLE PLTSCALE"
 
        return super(DetectionBatch, self).importIppTables(columns, regex)
Index: /trunk/ippToPsps/jython/objectbatch.py
===================================================================
--- /trunk/ippToPsps/jython/objectbatch.py	(revision 36743)
+++ /trunk/ippToPsps/jython/objectbatch.py	(revision 36744)
@@ -108,5 +108,5 @@
     Inserts stuff for all mags
     '''
-    def insertMeanMags(self, cpsTable):
+    def updateMeanObjectFromCps(self, cpsTable):
 
         # list of all filters PSPS is interested in
@@ -130,12 +130,23 @@
 	    # from bit 24 to bit 13 so that it fits into the SMALLINT Object.Flags
 
-            sql = "UPDATE MeanObject JOIN ObjectThin using (objID) JOIN \
-                   " + cpsTable + " AS cps ON (cps.row = (ObjectThin.row* " + str(filterCount) + ")-(" + str(filterCount) + " - " + str(filter[0]) + ")) \
+            sql = "UPDATE MeanObject JOIN \
+                   " + cpsTable + " AS cps ON (cps.row = (MeanObject.row* " + str(filterCount) + ")-(" + str(filterCount) + " - " + str(filter[0]) + ")) \
                    SET \
-                   ObjectThin.n" + filter[1] + " = NCODE \
+                   MeanObject." + filter[1] + "QfPerfect = -999 \
                    ,MeanObject." + filter[1] + "MeanPSFMag = MAG \
                    ,MeanObject." + filter[1] + "MeanPSFMagErr = MAG_ERR \
                    ,MeanObject." + filter[1] + "MeanKronMag = MAG_KRON \
                    ,MeanObject." + filter[1] + "MeanKronMagErr = MAG_KRON_ERR \
+                   ,MeanObject." + filter[1] + "nIncPSFMag = -999 \
+                   ,MeanObject." + filter[1] + "MeanPSFMagStd = -999 \
+                   ,MeanObject." + filter[1] + "MinPSFMag = -999 \
+                   ,MeanObject." + filter[1] + "MaxPSFMag = -999 \
+                   ,MeanObject." + filter[1] + "nIncKronMag = -999 \
+                   ,MeanObject." + filter[1] + "MeanKronMag = -999 \
+                   ,MeanObject." + filter[1] + "MeanKronMagStd = -999 \
+                   ,MeanObject." + filter[1] + "MeanApMag = MAG_AP \
+                   ,MeanObject." + filter[1] + "MeanApMagErr = MAG_ERR \
+                   ,MeanObject." + filter[1] + "MeanApMagStd = MAG_STDEV \
+                   ,MeanObject." + filter[1] + "nIncApMag = -999 \
                    ,MeanObject." + filter[1] + "Flags = (0x7fff & FLAGS) | ((FLAGS >> 11) & 0x2000) "
 
@@ -143,15 +154,4 @@
             self.logger.info(sql)
             self.scratchDb.execute(sql)
-
-        self.logger.infoPair("Calculating nDetections from", "n[filters]")
-        for filter in filters:
-            # now do a sum of n[filters], but do not include the ones with -999
-            sql = "UPDATE ObjectThin join MeanObject using (objID)  \
-                   SET nDetections = nDetections + n" + filter[1] + " \
-                   WHERE n" + filter[1] + " != -999"
-            self.scratchDb.execute(sql)
-            
-
-
 
         # now set to null all MeanMagErr values > 0.5 (cut set by Gene, 2012-04-12)
@@ -164,4 +164,125 @@
                    WHERE " + filter[1] + "MeanPSFMagErr > " + str(cut)
             self.scratchDb.execute(sql)
+    '''
+    Inserts stuff for all mags
+    '''
+    def updateObjectThinFromCps(self, cpsTable):
+
+        # list of all filters PSPS is interested in
+        interestedFilters = ['g', 'r', 'i', 'z', 'y']
+        
+        filters = self.scratchDb.getOrderedListOfFiltersFromPhotcodesTable(interestedFilters)
+    
+        # get a count of the available filters
+        filterCount = self.scratchDb.getCountOfFiltersFromPhotcodesTable()
+        # filterCount = len(filters)
+
+        self.logger.infoPair("Available filters in Photcodes", filters)
+
+        # the 'code' now defines the order in the cps file that the mags are listed for a given filter
+        self.logger.infoPair("Adding magnitudes from", "cps table")
+        for filter in filters:
+
+            filterID = self.scratchDb.getFilterID(filter[1])
+
+            # NOTE: Manipulation of FLAGS from cpsTable is to move ID_SECF_OBJ_EXT flag (0x01000000)
+	    # from bit 24 to bit 13 so that it fits into the SMALLINT Object.Flags
+
+            sql = "UPDATE ObjectThin JOIN \
+                   " + cpsTable + " AS cps ON (cps.row = (ObjectThin.row* " + str(filterCount) + ")-(" + str(filterCount) + " - " + str(filter[0]) + ")) \
+                   SET \
+                   ObjectThin.n" + filter[1] + " = NCODE "
+            self.logger.info(sql)
+            self.scratchDb.execute(sql)
+
+        self.logger.infoPair("Calculating nDetections from", "n[filters]")
+        for filter in filters:
+            # now do a sum of n[filters], but do not include the ones with -999
+            sql = "UPDATE ObjectThin   \
+                   SET nDetections = nDetections + n" + filter[1] + " \
+                   WHERE n" + filter[1] + " != -999"
+            self.scratchDb.execute(sql)
+            
+
+
+    '''
+    give objectName to objectThin
+    '''
+    def updateObjName(self):
+    ##this is a 4 part update:
+        self.logger.infoPair("updating objName", "using stacks")
+    ## if we have a stackra and dec, use stackra and dec , dec >=0
+
+        sql = "update ObjectThin set objName =  concat('PS1.2 J', \
+        lpad(floor(raStack/15.),2,'0'), \
+        lpad((raStack/15.-(floor(raStack/15.)))*60. ,2,'0'), \
+        lpad(format(((raStack/15.-(floor(raStack/15.)))*60.-floor((raStack/15.-(floor(raStack/15.)))*60.))*60.,2),4,'0'), \
+        '+', \
+        lpad(floor(decStack),2,'0'), \
+        lpad((decStack-(floor(decStack)))*60. ,2,'0'), \
+        lpad(format(((decStack-(floor(decStack)))*60.-floor((decStack-(floor(decStack)))*60.))*60.,2),4,'0') \
+        ) where raStack > -999 and decStack > -999 and decStack >= 0"
+        try:
+            self.scratchDb.execute(sql)
+        except:
+            self.logger.errorPair("failed sql", sql)
+            return False
+
+
+    ## if we have a stackra and dec, use stackra and dec, dec < 0
+
+        sql = "update ObjectThin set objName =  concat('PS1.2 J', \
+        lpad(floor(raStack/15.),2,'0'), \
+        lpad((raStack/15.-(floor(raStack/15.)))*60. ,2,'0'), \
+        lpad(format(((raStack/15.-(floor(raStack/15.)))*60.-floor((raStack/15.-(floor(raStack/15.)))*60.))*60.,2),4,'0'), \
+        '-', \
+        lpad(floor(decStack),2,'0'), \
+        lpad((decStack-(floor(decStack)))*60. ,2,'0'), \
+        lpad(format(((decStack-(floor(decStack)))*60.-floor((decStack-(floor(decStack)))*60.))*60.,2),4,'0') \
+        ) where raStack > -999 and decStack > -999 and decStack <= 0"
+        try:
+            self.scratchDb.execute(sql)
+        except:
+            self.logger.errorPair("failed sql", sql)
+            return False
+        self.logger.infoPair("updating objName", "using means")
+    ## use mean ra and dec (dec >= 0)
+        sql = "update ObjectThin set objName =  concat('PS1.2 J', \
+        lpad(floor(raMean/15.),2,'0'), \
+        lpad((raMean/15.-(floor(raMean/15.)))*60. ,2,'0'), \
+        lpad(format(((raMean/15.-(floor(raMean/15.)))*60.-floor((raMean/15.-(floor(raMean/15.)))*60.))*60.,2),4,'0'), \
+        '+', \
+        lpad(floor(decMean),2,'0'), \
+        lpad((decMean-(floor(decMean)))*60. ,2,'0'), \
+        lpad(format(((decMean-(floor(decMean)))*60.-floor((decMean-(floor(decMean)))*60.))*60.,2),4,'0') \
+        ) where raMean > -999 and decMean > -999 and decMean >= 0"
+        try:
+            self.scratchDb.execute(sql)
+        except:
+            self.logger.errorPair("failed sql", sql)
+            return False
+ 
+    ## use mean ra and dec (dec < 0)
+
+        sql = "update ObjectThin set objName =  concat('PS1.2 J', \
+        lpad(floor(raMean/15.),2,'0'), \
+        lpad((raMean/15.-(floor(raMean/15.)))*60. ,2,'0'), \
+        lpad(format(((raMean/15.-(floor(raMean/15.)))*60.-floor((raMean/15.-(floor(raMean/15.)))*60.))*60.,2),4,'0'), \
+        '-', \
+        lpad(floor(decMean),2,'0'), \
+        lpad((decMean-(floor(decMean)))*60. ,2,'0'), \
+        lpad(format(((decMean-(floor(decMean)))*60.-floor((decMean-(floor(decMean)))*60.))*60.,2),4,'0') \
+        ) where raMean > -999 and decMean > -999 and decMean < 0"
+
+        try:
+            self.scratchDb.execute(sql)
+        except:
+            self.logger.errorPair("failed sql", sql)
+            return False
+
+
+
+
+
 
 
@@ -206,11 +327,21 @@
                ,randomID \
                ,batchID \
+               ,dvoRegionID \
                ,dataRelease \
                ,objInfoFlag \
                ,qualityFlag \
+               ,consistencyFlag \
+               ,raStack \
+               ,decStack \
+               ,raStackErr \
+               ,decStackErr \
                ,raMean \
                ,decMean \
                ,raMeanErr \
                ,decMeanErr \
+               ,raMeanStd \
+               ,decMeanStd \
+               ,nStackObjectRows \
+               ,nStackDetections \
                ,nDetections \
                 ) \
@@ -220,14 +351,24 @@
                ,CAT_ID*1000000000 + OBJ_ID \
                ," + str(self.surveyID) + " \
-               ,-999 \
-               , RAND() \
+               , -999 \
+               , FLOOR(RAND()*9223372036854775807) \
                , " + str(self.batchID) + "\
+               , -999 \
                , " + str(self.skychunk.dataRelease) + "\
                ,FLAGS \
                ,FLAGS >> 24 & 0xFF \
+               , 0 \
+               , -999 \
+               , -999 \
+               , -999 \
+               , -999 \
                ,RA \
                ,DEC_ \
                ,RA_ERR \
                ,DEC_ERR \
+               , -999 \
+               , -999 \
+               ,0 \
+               ,0 \
                ,0 \
                 FROM " + cptTableName
@@ -244,8 +385,13 @@
         self.scratchDb.addRowCountColumn(cpsTableName, "row")
 
- #       self.insertMeanMags(cpsTableName)
-
-#don't do this as we removed those columns.. 
-#        self.updateColors()
+##        self.insertMeanMags(cpsTableName)
+## this is the new version
+        self.logger.infoPair("update objName for ","objectThin")
+        self.updateObjName()
+
+
+        self.logger.infoPair("update ObjectThin from ","cps table")
+
+        self.updateObjectThinFromCps(cpsTableName)
 
         #objects can have out of range ra dec in dvo - need to find and kill them at the end
@@ -292,7 +438,8 @@
         self.logger.infoPair("Dropping row column from", "ObjectThin table")
         self.scratchDb.dropColumn("ObjectThin", "row")
-        self.logger.infoPair("Purging from scratch Db", self.region + " region")
-
-        self.dvoObjects.purgeRegion(self.region)
+        ##self.logger.infoPair("Purging from scratch Db", self.region + " region")
+
+        ##Don't do this till after MeanObject
+        ##self.dvoObjects.purgeRegion(self.region)
 
         self.setMinMaxObjID(["ObjectThin"])
@@ -304,6 +451,7 @@
     '''
     def populateMeanObjectTable(self):
-
-        self.logger.infoPair("Populating", "MeanObject")
+        cptTableName = self.scratchDb.getDbFriendlyTableName(self.region + ".cpt")
+        cpsTableName = self.scratchDb.getDbFriendlyTableName(self.region + ".cps")
+        self.logger.infoPair("Populating MeanObject from ", "ObjectThin")
 
         sql = "INSERT INTO MeanObject ( \
@@ -321,5 +469,15 @@
             return False
 
-        self.insertMeanMags("MeanObject")
+        self.logger.infoPair("Adding 'row' columns to", "MeanObject table")
+        self.scratchDb.addRowCountColumn("MeanObject", "row")
+ 
+
+        ##self.scratchDb.addRowCountColumn(cpsTableName, "row")
+        self.logger.infoPair("update MeanObjects from ","cps table")
+        self.updateMeanObjectFromCps(cpsTableName)
+
+        self.logger.infoPair("Dropping row column from", "MeanObject table")
+        self.scratchDb.dropColumn("MeanObject", "row")
+
         return True
 
@@ -372,8 +530,9 @@
         self.logger.infoPair("Number of duplicated objIDs removed", "%d out of %d" % ((rowCountBefore - rowCountAfter), rowCountBefore))
 
+        self.dvoObjects.purgeRegion(self.region)
 
         #this is abuse of something but this is how I get the object batches to crash to further investigate them
         
-        rowCountAfter = self.scratchDb.getRowCount("Object")
-        #return True
-        return False
+#        rowCountAfter = self.scratchDb.getRowCount("Object")
+        return True
+#        return False
Index: /trunk/ippToPsps/jython/stackbatch.py
===================================================================
--- /trunk/ippToPsps/jython/stackbatch.py	(revision 36743)
+++ /trunk/ippToPsps/jython/stackbatch.py	(revision 36744)
@@ -187,5 +187,5 @@
 
        # TODO this is the wrong way, but is consistent with SkyCell table in IN data
-       self.skycell = self.skycell[8:12]
+       self.skycell = self.skycell[8:]
        self.projectioncell = self.skycell
 
@@ -407,4 +407,11 @@
  # idk what to do about PET
 
+        sql = "DESCRIBE "+f+"SkyChip_xfit 'EXT_COVAR_%'"
+        rs = self.scratchDb.executeQuery(sql)
+        rs.first()
+        hasResult = rs.next()
+
+
+
         sql = "UPDATE StackModelFit AS a, " + f + "SkyChip_xfit AS b SET \
         "+f+model+"Radius=b.EXT_WIDTH_MAJ,  \
@@ -419,8 +426,14 @@
         self.scratchDb.execute(sql)
 
+
+
         # sersic fit has an extra parameter
         if (ippModelType == "PS_MODEL_SERSIC"):
+            extra_sql = ""
+            if hasResult:
+                extra_sql = ","+f+"serNuErr=SQRT(EXT_COVAR_07_07)"
             sql = "UPDATE StackModelFit AS a, "+ f+ "SkyChip_xfit AS b SET \
             "+f+"serNu=b.EXT_PAR_07   \
+            "+extra_sql+" \
             WHERE a."+f+"ippDetectID=b.IPP_IDET AND b.MODEL_TYPE = '"+ippModelType+"'"
 #           "+f+"serNuErr=SQRT(EXT_COVAR_07_07)  \
@@ -438,20 +451,25 @@
         # this should work : set header into (grizy)header and run from there
         if filterName == 'g.00000':
+            f = "g"
             self.header = self.gheader
             tablename = 'gStackMeta'
             stackmetaid = self.gstackID
         if filterName == 'r.00000':
+            f = "r"
             tablename = 'rStackMeta'
             self.header = self.rheader
             stackmetaid = self.rstackID
         if filterName == 'i.00000':
+            f = "i"
             tablename = 'iStackMeta'
             self.header = self.iheader
             stackmetaid = self.istackID
         if filterName == 'z.00000':
+            f = "z"
             tablename = 'zStackMeta'
             self.header = self.zheader
             stackmetaid = self.zstackID
         if filterName == 'y.00000':
+            f = "y"
             tablename = 'yStackMeta'
             self.header = self.yheader
@@ -470,4 +488,7 @@
         #make a table
 
+        filterid = self.scratchDb.getFilterID(f)
+        self.logger.infoPair("filterid is ",str(filterid))
+
         sql = "CREATE TABLE " + tablename + " LIKE StackMeta"
         try: self.scratchDb.execute(sql)
@@ -476,4 +497,5 @@
         sql = "INSERT INTO " + tablename + " (\
         stackMetaID \
+        ,filterID \
         ,skyCellID \
         ,photoCalID \
@@ -497,4 +519,5 @@
          ) VALUES ( \
         " + str(stackmetaid) + " \
+        , " + str(filterid) + "  \
         ," + self.skycell + " \
         ," + str(self.scratchDb.getPhotoCalID(self.header['IMAGEID'])) + " \
@@ -518,7 +541,9 @@
         )"
         self.scratchDb.execute(sql)
+
+
         self.scratchDb.updateAllRows(tablename, "batchID", str(self.batchID))
         self.scratchDb.updateAllRows(tablename, "surveyID", str(self.surveyID))
-        self.scratchDb.updateFilterID(tablename, filterName)
+    #    self.scratchDb.updateFilterID(tablename, self.scratchDb.getFilterID(filterName))
         self.scratchDb.updateAllRows(tablename, "dataRelease", str(self.skychunk.dataRelease))
         self.updateStackTypeID(tablename)
@@ -954,4 +979,35 @@
                     self.scratchDb.execute(sql)
 
+    ''' 
+    Generates the randomStackIds
+    '''
+    def populateRandomsAndSkyCellID(self):
+
+        self.logger.infoPair("Generating Randoms","for StackObject")
+        sql = "update StackObject set randomStackObjID = FLOOR(RAND()*9223372036854775807) \
+              ,skyCellID = " + str(self.skycell)+ " \
+              ,surveyID = " + str(self.surveyID) 
+        try:
+            self.scratchDb.execute(sql)
+        except:
+            self.logger.infoPair("failed sql", sql)
+
+    ''' 
+    copies randomStackIds from StackObject to tableName
+    '''
+    def copyRandomsAndSkyCellIDFromStackObject(self, tableName):
+
+        self.logger.infoPair("copying Randoms from StackObject to ", tableName)
+        sql = "update " + tableName + " join StackObject using (objID) \
+        set " + tableName + ".randomStackObjID = StackObject.randomStackObjID \
+        , " + tableName + ".skyCellID = StackObject.skyCellID \
+        , " + tableName + ".surveyID = StackObject.surveyID"
+        self.logger.infoPair("sql", sql)
+        try:
+            self.scratchDb.execute(sql)
+        except:
+            self.logger.infoPair("failed sql", sql)
+
+
         
     def populateStackIPPDetectIDFromDvo(self, tableName, all):
@@ -1012,4 +1068,5 @@
                       " + addsql + " \
                       a." + f + "stackDetectID = b.detectID,   \
+                      a." + f + "ippObjID = b.ippObjID, \
                       a." + f + "stackMetaID = " + str(stackmetaid) +  " \
                       WHERE a.objID = b.objID  AND b.imageID = " + str(imageID)
@@ -1188,4 +1245,5 @@
         self.scratchDb.createIndex("StackObject", "yippDetectID")
         self.populateStackObject()
+        self.populateRandomsAndSkyCellID()
         # stackObject should be done, pending a few NULL columns (need help)
 
@@ -1206,10 +1264,21 @@
             self.deleteNULLippDetectIDs("StackModelFit") 
         #populate stackModelFit
-            self.populateStackModelFit("g")
-            self.populateStackModelFit("r")
-            self.populateStackModelFit("i")
-            self.populateStackModelFit("z")
-            self.populateStackModelFit("y")
-
+            if self.gstackID > 0:
+                self.logger.infoPair("populating g filter for stackModelFit, stackmetaid =", self.gstackID)
+                self.populateStackModelFit("g")
+            if self.rstackID > 0: 
+                self.logger.infoPair("populating r filter for stackModelFit, stackmetaid =", self.rstackID)
+                self.populateStackModelFit("r")
+            if self.istackID > 0: 
+                self.logger.infoPair("populating i filter for stackModelFit, stackmetaid =", self.istackID)
+                self.populateStackModelFit("i")
+            if self.zstackID > 0: 
+                self.logger.infoPair("populating z filter for stackModelFit, stackmetaid =", self.zstackID)
+                self.populateStackModelFit("z")
+            if self.ystackID > 0: 
+                self.logger.infoPair("populating y filter for stackModelFit, stackmetaid =", self.ystackID)
+                self.populateStackModelFit("y")
+           
+            self.copyRandomsAndSkyCellIDFromStackObject("StackModelFit")
  
             self.logger.infoPair("populating ","StackApFlx")
@@ -1227,4 +1296,5 @@
             self.deleteNULLippDetectIDs("StackApFlx") 
             self.populateStackApFlx()
+            self.copyRandomsAndSkyCellIDFromStackObject("StackApFlx")
         #cull the entries that should not be (how?) 
         
