Index: branches/eam_branches/ipp-20121130/ippToPsps/config/OB/tables.vot
===================================================================
--- branches/eam_branches/ipp-20121130/ippToPsps/config/OB/tables.vot	(revision 34755)
+++ branches/eam_branches/ipp-20121130/ippToPsps/config/OB/tables.vot	(revision 34839)
@@ -27,6 +27,6 @@
         <DESCRIPTION>flag indicating odd properties</DESCRIPTION>
       </FIELD>
-      <FIELD name="varFlag" arraysize="1" datatype="unsignedByte" unit="unknown">
-        <DESCRIPTION>variable in difference image detections</DESCRIPTION>
+      <FIELD name="qualityFlag" arraysize="1" datatype="unsignedByte" unit="unknown">
+        <DESCRIPTION>subset of objInfoFlag - flags related to goodness of object</DESCRIPTION>
       </FIELD>
       <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="unknown">
@@ -45,4 +45,13 @@
         <DESCRIPTION> Declination error</DESCRIPTION>
       </FIELD>
+      <FIELD name="cx" arraysize="1" datatype="double" unit="unknown"> 
+	<DESCRIPTION>Cartesian x</DESCRIPTION> 
+      </FIELD> 
+      <FIELD name="cy" arraysize="1" datatype="double" unit="unknown"> 
+        <DESCRIPTION>Cartesian y</DESCRIPTION> 
+      </FIELD> 
+      <FIELD name="cz" arraysize="1" datatype="double" unit="unknown"> 
+        <DESCRIPTION>Cartesian z</DESCRIPTION> 
+      </FIELD> 
       <FIELD name="lambda" arraysize="1" datatype="double" unit="degree">
         <DESCRIPTION> ecliptic longitude</DESCRIPTION>
@@ -284,4 +293,7 @@
       <FIELD name="consistencyFlag" arraysize="1" datatype="short" unit="unknown">
         <DESCRIPTION>Value computed from associated detections, it is originally given by IPP and should agree with the ODM validation</DESCRIPTION>
+      </FIELD>
+      <FIELD name="Random" arraysize="1" datatype="double" unit="unknown">
+        <DESCRIPTION>Random number between 0 and 1</DESCRIPTION>
       </FIELD>
       <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="unknown">
Index: branches/eam_branches/ipp-20121130/ippToPsps/jython/objectbatch.py
===================================================================
--- branches/eam_branches/ipp-20121130/ippToPsps/jython/objectbatch.py	(revision 34755)
+++ branches/eam_branches/ipp-20121130/ippToPsps/jython/objectbatch.py	(revision 34839)
@@ -134,5 +134,5 @@
                    ," + filter[1] + "80pct = MAG_80/1000 \
                    ," + filter[1] + "Flags = (0x7fff & FLAGS) | ((FLAGS >> 11) & 0x2000) \
-                   ," + filter[1] + "StackDetectID = STACK_DETECT_ID + " + str(filterID)
+                   ," + filter[1] + "StackDetectID = STACK_DETECT_ID"
 
             #self.logger.info(sql)
@@ -236,5 +236,5 @@
                ,ippObjID \
                ,objInfoFlag \
-               ,varFlag \
+               ,qualityFlag \
                ,surveyID \
                ,ra \
@@ -246,4 +246,5 @@
                ,sgSep \
                ,dataRelease \
+               ,Random \
                ) \
                SELECT \
@@ -251,5 +252,5 @@
                ,CAT_ID*1000000000 + OBJ_ID \
                ,FLAGS \
-               ,0 \
+               ,FLAGS >> 24 & 0xFF \
                ," + str(self.surveyID) + " \
                ,RA \
@@ -257,8 +258,9 @@
                ,RA_ERR \
                ,DEC_ERR \
-               ,NMEASURE \
+               ,0 \
                ,PSF_QF_PERF \
                ,STARGAL_SEP \
                , " + str(self.config.dataRelease) + "\
+               , RAND() \
                FROM " + cptTableName
 
Index: branches/eam_branches/ipp-20121130/ippToPsps/jython/stackbatch.py
===================================================================
--- branches/eam_branches/ipp-20121130/ippToPsps/jython/stackbatch.py	(revision 34755)
+++ branches/eam_branches/ipp-20121130/ippToPsps/jython/stackbatch.py	(revision 34839)
@@ -5,4 +5,5 @@
 
 import stilts
+import re
 from java.lang import *
 from java.sql import *
@@ -143,49 +144,134 @@
     '''
     def updateApFlxs(self, prefix, psfCondition):
+        #properly -999 these to start with:
 
         sql = "UPDATE StackApFlx AS a, SkyChip_xrad AS b SET \
-        "+prefix+"flxR1=b.APER_FLUX_1 / " + str(self.expTime) + ", \
-        "+prefix+"flxR1Err=b.APER_FLUX_ERR_1 / " + str(self.expTime) + ", \
-        "+prefix+"flxR1Std=b.APER_FLUX_STDEV_1 / " + str(self.expTime) + ", \
-        "+prefix+"flxR1Fill=b.APER_FILL_1, \
-        "+prefix+"flxR2=b.APER_FLUX_2 / " + str(self.expTime) + ", \
-        "+prefix+"flxR2Err=b.APER_FLUX_ERR_2 / " + str(self.expTime) + ", \
-        "+prefix+"flxR2Std=b.APER_FLUX_STDEV_2 / " + str(self.expTime) + ", \
-        "+prefix+"flxR2Fill=b.APER_FILL_2, \
-        "+prefix+"flxR3=b.APER_FLUX_3 / " + str(self.expTime) + ", \
-        "+prefix+"flxR3Err=b.APER_FLUX_ERR_3 / " + str(self.expTime) + ", \
-        "+prefix+"flxR3Std=b.APER_FLUX_STDEV_3 / " + str(self.expTime) + ", \
-        "+prefix+"flxR3Fill=b.APER_FILL_3, \
-        "+prefix+"flxR4=b.APER_FLUX_4 / " + str(self.expTime) + ", \
-        "+prefix+"flxR4Err=b.APER_FLUX_ERR_4 / " + str(self.expTime) + ", \
-        "+prefix+"flxR4Std=b.APER_FLUX_STDEV_4 / " + str(self.expTime) + ", \
-        "+prefix+"flxR4Fill=b.APER_FILL_4, \
-        "+prefix+"flxR5=b.APER_FLUX_5 / " + str(self.expTime) + ", \
-        "+prefix+"flxR5Err=b.APER_FLUX_ERR_5 / " + str(self.expTime) + ", \
-        "+prefix+"flxR5Std=b.APER_FLUX_STDEV_5 / " + str(self.expTime) + ", \
-        "+prefix+"flxR5Fill=b.APER_FILL_5, \
-        "+prefix+"flxR6=b.APER_FLUX_6 / " + str(self.expTime) + ", \
-        "+prefix+"flxR6Err=b.APER_FLUX_ERR_6 / " + str(self.expTime) + ", \
-        "+prefix+"flxR6Std=b.APER_FLUX_STDEV_6 / " + str(self.expTime) + ", \
-        "+prefix+"flxR6Fill=b.APER_FILL_6, \
-        "+prefix+"flxR7=b.APER_FLUX_7 / " + str(self.expTime) + ", \
-        "+prefix+"flxR7Err=b.APER_FLUX_ERR_7 / " + str(self.expTime) + ", \
-        "+prefix+"flxR7Std=b.APER_FLUX_STDEV_7 / " + str(self.expTime) + ", \
-        "+prefix+"flxR7Fill=b.APER_FILL_7, \
-        "+prefix+"flxR8=b.APER_FLUX_8 / " + str(self.expTime) + ", \
-        "+prefix+"flxR8Err=b.APER_FLUX_ERR_8 / " + str(self.expTime) + ", \
-        "+prefix+"flxR8Std=b.APER_FLUX_STDEV_8 / " + str(self.expTime) + ", \
-        "+prefix+"flxR8Fill=b.APER_FILL_8, \
-        "+prefix+"flxR9=b.APER_FLUX_9 / " + str(self.expTime) + ", \
-        "+prefix+"flxR9Err=b.APER_FLUX_ERR_9 / " + str(self.expTime) + ", \
-        "+prefix+"flxR9Std=b.APER_FLUX_STDEV_9 / " + str(self.expTime) + ", \
-        "+prefix+"flxR9Fill=b.APER_FILL_9, \
-        "+prefix+"flxR10=b.APER_FLUX_10 / " + str(self.expTime) + ", \
-        "+prefix+"flxR10Err=b.APER_FLUX_ERR_10 / " + str(self.expTime) + ", \
-        "+prefix+"flxR10Std=b.APER_FLUX_STDEV_10 / " + str(self.expTime) + ", \
-        "+prefix+"flxR10Fill=b.APER_FILL_10 \
-        WHERE a.ippDetectID=b.IPP_IDET AND b.PSF_FWHM "+psfCondition
-
-        self.scratchDb.execute(sql)
+        "+prefix+"flxR1=-999, \
+        "+prefix+"flxR1Err=-999, \
+        "+prefix+"flxR1Std=-999, \
+        "+prefix+"flxR1Fill=-999, \
+        "+prefix+"flxR2=-999, \
+        "+prefix+"flxR2Err=-999, \
+        "+prefix+"flxR2Std=-999, \
+        "+prefix+"flxR2Fill=-999, \
+        "+prefix+"flxR3=-999, \
+        "+prefix+"flxR3Err=-999, \
+        "+prefix+"flxR3Std=-999, \
+        "+prefix+"flxR3Fill=-999, \
+        "+prefix+"flxR4=-999, \
+        "+prefix+"flxR4Err=-999, \
+        "+prefix+"flxR4Std=-999, \
+        "+prefix+"flxR4Fill=-999, \
+        "+prefix+"flxR5=-999, \
+        "+prefix+"flxR5Err=-999, \
+        "+prefix+"flxR5Std=-999, \
+        "+prefix+"flxR5Fill=-999, \
+        "+prefix+"flxR6=-999, \
+        "+prefix+"flxR6Err=-999, \
+        "+prefix+"flxR6Std=-999, \
+        "+prefix+"flxR6Fill=-999, \
+        "+prefix+"flxR7=-999, \
+        "+prefix+"flxR7Err=-999, \
+        "+prefix+"flxR7Std=-999, \
+        "+prefix+"flxR7Fill=-999, \
+        "+prefix+"flxR8=-999, \
+        "+prefix+"flxR8Err=-999, \
+        "+prefix+"flxR8Std=-999, \
+        "+prefix+"flxR8Fill=-999, \
+        "+prefix+"flxR9=-999, \
+        "+prefix+"flxR9Err=-999, \
+        "+prefix+"flxR9Std=-999, \
+        "+prefix+"flxR9Fill=-999, \
+        "+prefix+"flxR10=-999, \
+        "+prefix+"flxR10Err=-999, \
+        "+prefix+"flxR10Std=-999, \
+        "+prefix+"flxR10Fill=-999 \
+        WHERE a.ippDetectID=b.IPP_IDET "
+        #self.logger.infoPair("sql", sql)
+        self.scratchDb.execute(sql)
+
+
+        #we have variable numbers of these columns. find out which are in use
+        sql = "DESCRIBE SkyChip_xrad 'aper_fill_%'"
+        rs = self.scratchDb.executeQuery(sql)
+        rs.first()
+        columns = []
+        column = rs.getString(1)
+        columns.append(column)
+        while (rs.next()):
+            column = rs.getString(1)
+            columns.append(column)
+        rs.close()
+
+        #use regex to leave just the numbers
+
+        numbers = []
+        for column in columns: 
+            number = re.sub("APER_FILL_","",column)
+            if (int(number) >= 1 and int(number) <=10):
+                numbers.append(number)
+                self.logger.infoPair("Aperture Numbers",number)
+
+        #generate the sql to do the necessary ops on the columns    
+        sql = "UPDATE StackApFlx AS a, SkyChip_xrad AS b SET "
+        cnt =0
+        for number in numbers:
+            if (cnt>0):
+                sql=sql+" , "
+            sql=sql+prefix+"flxR"+number+"=b.APER_FLUX_"+number +" / " + str(self.expTime) + ", "
+            sql=sql+prefix+"flxR"+number+"Err=b.APER_FLUX_ERR_"+number +" / " + str(self.expTime) + ", "
+            sql=sql+prefix+"flxR"+number+"Std=b.APER_FLUX_STDEV_"+number +" / " + str(self.expTime) + ", "
+            sql=sql+prefix+"flxR"+number+"Fill=b.APER_FILL_"+number + " "
+            cnt=cnt+1
+            
+        sql=sql+"WHERE a.ippDetectID=b.IPP_IDET AND b.PSF_FWHM "+psfCondition     
+        self.scratchDb.execute(sql)
+
+        #self.logger.infoPair("sql",sql)
+
+        #sql = "UPDATE StackApFlx AS a, SkyChip_xrad AS b SET \
+        #"+prefix+"flxR1=b.APER_FLUX_1 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR1Err=b.APER_FLUX_ERR_1 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR1Std=b.APER_FLUX_STDEV_1 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR1Fill=b.APER_FILL_1, \
+        #"+prefix+"flxR2=b.APER_FLUX_2 / " + str(self.expTime) + ", \
+        ##"+prefix+"flxR2Err=b.APER_FLUX_ERR_2 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR2Std=b.APER_FLUX_STDEV_2 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR2Fill=b.APER_FILL_2, \
+        #"+prefix+"flxR3=b.APER_FLUX_3 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR3Err=b.APER_FLUX_ERR_3 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR3Std=b.APER_FLUX_STDEV_3 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR3Fill=b.APER_FILL_3, \
+        #"+prefix+"flxR4=b.APER_FLUX_4 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR4Err=b.APER_FLUX_ERR_4 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR4Std=b.APER_FLUX_STDEV_4 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR4Fill=b.APER_FILL_4, \
+        #"+prefix+"flxR5=b.APER_FLUX_5 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR5Err=b.APER_FLUX_ERR_5 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR5Std=b.APER_FLUX_STDEV_5 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR5Fill=b.APER_FILL_5, \
+        #"+prefix+"flxR6=b.APER_FLUX_6 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR6Err=b.APER_FLUX_ERR_6 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR6Std=b.APER_FLUX_STDEV_6 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR6Fill=b.APER_FILL_6, \
+        #"+prefix+"flxR7=b.APER_FLUX_7 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR7Err=b.APER_FLUX_ERR_7 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR7Std=b.APER_FLUX_STDEV_7 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR7Fill=b.APER_FILL_7, \
+        #"+prefix+"flxR8=b.APER_FLUX_8 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR8Err=b.APER_FLUX_ERR_8 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR8Std=b.APER_FLUX_STDEV_8 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR8Fill=b.APER_FILL_8, \
+        #"+prefix+"flxR9=b.APER_FLUX_9 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR9Err=b.APER_FLUX_ERR_9 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR9Std=b.APER_FLUX_STDEV_9 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR9Fill=b.APER_FILL_9, \
+        #"+prefix+"flxR10=b.APER_FLUX_10 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR10Err=b.APER_FLUX_ERR_10 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR10Std=b.APER_FLUX_STDEV_10 / " + str(self.expTime) + ", \
+        #"+prefix+"flxR10Fill=b.APER_FILL_10 \
+        #WHERE a.ippDetectID=b.IPP_IDET AND b.PSF_FWHM "+psfCondition
+
+        #self.scratchDb.execute(sql)
 
     '''
@@ -395,5 +481,5 @@
                ,KRON_FLUX_ERR / " + str(self.expTime) + " \
                ,MOMENTS_R1 * 2.5 \
-               ,PSF_CHISQ \
+               ,PSF_CHISQ / PSF_NDOF \
                ,N_FRAMES \
                , '" + self.dateStr + "' \
Index: branches/eam_branches/ipp-20121130/ippToPsps/src/Dvo.c
===================================================================
--- branches/eam_branches/ipp-20121130/ippToPsps/src/Dvo.c	(revision 34755)
+++ branches/eam_branches/ipp-20121130/ippToPsps/src/Dvo.c	(revision 34839)
@@ -21,5 +21,7 @@
     if (this->mysql) mysql_close(this->mysql);
 
-    free(this);
+    // libohana redirects free and gets confused by thigns allocated by calloc
+    // so call the real free funtion through this warpper
+    real_free(this);
 }
 
@@ -94,19 +96,19 @@
                 PhotCode *code = GetPhotcodebyCode(meas->photcode);
                 sprintf(sql, 
-                        "INSERT INTO dvoDetection (imageID, ippDetectID, detectID, ippObjID, objID, flags, zp, zpErr, airMass, expTime, ra, dec_, raErr, decErr) VALUES (%d, %u, %lu, %lu, %lu, %u, %f, %f, %f, %f, %lf, %lf, %f %f)",
+                        "INSERT INTO dvoDetection (imageID, ippDetectID, detectID, ippObjID, objID, flags, zp, zpErr, airMass, expTime, ra, dec_, raErr, decErr) VALUES (%d, %u, %lu, %lu, %lu, %u, %f, %f, %f, %f, %lf, %lf, %f, %f)",
                         image->imageID,    // imageID
                         meas->detID,   // ippDetectID
                         meas->extID,   // detectID
                         (uint64_t)ave->catID*1000000000 + (uint64_t)ave->objID, // ippObjID
-                        dvoDetections[i].ave.extID,   // objID
-                        meas->dbFlags,                // flags
+                        ave->extID,   // objID
+                        meas->dbFlags,  // flags
                         code->C * 0.001 + code->K * (meas->airmass - 1) - meas->Mcal,   // zp
-                        meas->dMcal,                  // zpErr
+                        meas->dMcal,    // zpErr
                         meas->airmass,
                         pow(10.0, 0.4 * meas->dt),    // expTime
                         ave->R - meas->dR / 3600.,    // ra
                         ave->D - meas->dR / 3600.,    // dec
-                        meas->dXccd * meas->pltscale, // estimate of raErr
-                        meas->dYccd * meas->pltscale  // estimate of decErr
+                        meas->dXccd * 0.01 * fabs(meas->pltscale), // estimate of raErr
+                        meas->dYccd * 0.01 * fabs(meas->pltscale) // estimate of decErr
                         );
 
