Index: /trunk/Ohana/src/addstar/src/mkcmf.c
===================================================================
--- /trunk/Ohana/src/addstar/src/mkcmf.c	(revision 38954)
+++ /trunk/Ohana/src/addstar/src/mkcmf.c	(revision 38955)
@@ -27,5 +27,5 @@
 int WriteXSRCtable (FILE *fits, char *extroot, double *X, double *Y, double *M, unsigned int *Flag, int Nstars, float zeroPt, float exptime);
 int WriteXFITtable (FILE *fits, char *extroot, double *X, double *Y, double *M, unsigned int *Flag, int Nstars);
-int WriteXRADtable (FILE *fits, char *extroot, double *X, double *Y, double *M, unsigned int *Flag, int Nstars);
+int WriteXRADtable (FILE *fits, char *extroot, double *X, double *Y, double *M, unsigned int *Flag, int Nstars, int Nrad);
 int WriteDETFtable (FILE *fits, char *extroot, double *X, double *Y, double *M, unsigned int *Flag, int Nstars);
 
@@ -477,5 +477,8 @@
   if (WriteXSRC) WriteXSRCtable (fits, extroot, X, Y, M, Flag, Nstars, zeroPt, exptime);
   if (WriteXFIT) WriteXFITtable (fits, extroot, X, Y, M, Flag, Nstars);
-  if (WriteXRAD) WriteXRADtable (fits, extroot, X, Y, M, Flag, Nstars);
+
+  if (WriteXRAD && isStack) WriteXRADtable (fits, extroot, X, Y, M, Flag, Nstars, 3);
+  if (WriteXRAD && isForcedWarp) WriteXRADtable (fits, extroot, X, Y, M, Flag, Nstars, 1);
+
   if (WriteDETF) WriteDETFtable (fits, extroot, X, Y, M, Flag, Nstars);
 
@@ -923,5 +926,5 @@
 
     stars[i].posangle = 10.0;
-    stars[i].pltscale = 0.25;
+    stars[i].pltscale = coords.cdelt1;
 
     stars[i].M = M[i];
@@ -1328,7 +1331,7 @@
       Y_EXT_SIG           [i] = FY * fSN;
       F25_ARATIO          [i] = 0.9;
-      F25_THETA           [i] = 10.0;
+      F25_THETA           [i] = 10.0; // seems to be in degrees in the cmfs
       PETRO_MAG           [i] = M[i] + zeroPt + magtime;
-      PETRO_MAG_ERR       [i] = 1.0 / fSN;
+      PETRO_MAG_ERR       [i] = 1.0 / fSN; // note that the real cmfs have PETRO_MAG_ERR inverted
       PETRO_RADIUS        [i] = 8.0;
       if (i == 2) {
@@ -1470,4 +1473,7 @@
       float fSN = 1.0 / sqrt(flux);
 
+      double ra, dec;
+      XY_to_RD (&ra, &dec, X[i], Y[i], &coords);
+
       IPP_IDET         [i] = i;
       X_EXT            [i] = X[i];
@@ -1476,6 +1482,6 @@
       Y_EXT_SIG        [i] = FY * fSN;
       SKY_EXT          [i] = 0.1;
-      RA_EXT           [i] = NAN;
-      DEC_EXT          [i] = NAN;
+      RA_EXT           [i] = ra;
+      DEC_EXT          [i] = dec;
       EXT_INST_MAG     [i] = M[i];
       EXT_INST_MAG_SIG [i] = fSN;
@@ -1490,8 +1496,8 @@
       EXT_WIDTH_MAJ    [i] = FX*2.8;
       EXT_WIDTH_MIN    [i] = FY*2.8;
-      EXT_THETA        [i] = 10.0;
-      EXT_WIDTH_MAJ_ERR[i] = FX*3.0;
-      EXT_WIDTH_MIN_ERR[i] = FY*3.0;
-      EXT_THETA_ERR    [i] = 0.5;
+      EXT_THETA        [i] = 0.57;
+      EXT_WIDTH_MAJ_ERR[i] = FX*0.28;
+      EXT_WIDTH_MIN_ERR[i] = FY*0.28;
+      EXT_THETA_ERR    [i] = 0.0057;
       EXT_PAR_07       [i] = NAN;
 
@@ -1537,5 +1543,7 @@
 }
 
-int WriteXRADtable (FILE *fits, char *extroot, double *X, double *Y, double *M, unsigned int *Flag, int Nstars) {
+static float psfFWHM[3] = {4.8, 6.0, 8.0};
+
+int WriteXRADtable (FILE *fits, char *extroot, double *X, double *Y, double *M, unsigned int *Flag, int Nstars, int Nrad) {
 
   int i, j, k;
@@ -1564,14 +1572,12 @@
 
     // create intermediate storage arrays
-    int    *IPP_IDET           ; ALLOCATE (IPP_IDET         ,  int   , 3*Nstars);
-    float  *X_APER             ; ALLOCATE (X_APER           ,  float , 3*Nstars);
-    float  *Y_APER             ; ALLOCATE (Y_APER           ,  float , 3*Nstars);
-    float  *PSF_FWHM           ; ALLOCATE (PSF_FWHM         ,  float , 3*Nstars);
-    float  *APER_FLUX          ; ALLOCATE (APER_FLUX        ,  float , 3*Nstars*9);
-    float  *APER_FLUX_ERR      ; ALLOCATE (APER_FLUX_ERR    ,  float , 3*Nstars*9);
-    float  *APER_FLUX_STDEV    ; ALLOCATE (APER_FLUX_STDEV  ,  float , 3*Nstars*9);
-    float  *APER_FILL          ; ALLOCATE (APER_FILL        ,  float , 3*Nstars*9);
-
-    float psfFWHM[3] = {4.8, 6.0, 8.0};
+    int    *IPP_IDET           ; ALLOCATE (IPP_IDET         ,  int   , Nrad*Nstars);
+    float  *X_APER             ; ALLOCATE (X_APER           ,  float , Nrad*Nstars);
+    float  *Y_APER             ; ALLOCATE (Y_APER           ,  float , Nrad*Nstars);
+    float  *PSF_FWHM           ; ALLOCATE (PSF_FWHM         ,  float , Nrad*Nstars);
+    float  *APER_FLUX          ; ALLOCATE (APER_FLUX        ,  float , Nrad*Nstars*9);
+    float  *APER_FLUX_ERR      ; ALLOCATE (APER_FLUX_ERR    ,  float , Nrad*Nstars*9);
+    float  *APER_FLUX_STDEV    ; ALLOCATE (APER_FLUX_STDEV  ,  float , Nrad*Nstars*9);
+    float  *APER_FILL          ; ALLOCATE (APER_FILL        ,  float , Nrad*Nstars*9);
 
     // assign the storage arrays
@@ -1580,6 +1586,6 @@
       // float fSN = 1.0 / sqrt(flux);
 
-      for (k = 0; k < 3; k++) {
-	int N = 3*i + k;
+      for (k = 0; k < Nrad; k++) {
+	int N = Nrad*i + k;
 	IPP_IDET         [N] = i;
 	X_APER           [N] = X[i];
@@ -1597,12 +1603,12 @@
 
     // set the table data
-    gfits_set_bintable_column (&header, &ftable, "IPP_IDET"         , IPP_IDET         , 3*Nstars);
-    gfits_set_bintable_column (&header, &ftable, "X_APER"           , X_APER           , 3*Nstars);
-    gfits_set_bintable_column (&header, &ftable, "Y_APER"           , Y_APER           , 3*Nstars);
-    gfits_set_bintable_column (&header, &ftable, "PSF_FWHM"         , PSF_FWHM         , 3*Nstars);
-    gfits_set_bintable_column (&header, &ftable, "APER_FLUX"        , APER_FLUX        , 3*Nstars);
-    gfits_set_bintable_column (&header, &ftable, "APER_FLUX_ERR"    , APER_FLUX_ERR    , 3*Nstars);
-    gfits_set_bintable_column (&header, &ftable, "APER_FLUX_STDEV"  , APER_FLUX_STDEV  , 3*Nstars);
-    gfits_set_bintable_column (&header, &ftable, "APER_FILL"        , APER_FILL        , 3*Nstars);
+    gfits_set_bintable_column (&header, &ftable, "IPP_IDET"         , IPP_IDET         , Nrad*Nstars);
+    gfits_set_bintable_column (&header, &ftable, "X_APER"           , X_APER           , Nrad*Nstars);
+    gfits_set_bintable_column (&header, &ftable, "Y_APER"           , Y_APER           , Nrad*Nstars);
+    gfits_set_bintable_column (&header, &ftable, "PSF_FWHM"         , PSF_FWHM         , Nrad*Nstars);
+    gfits_set_bintable_column (&header, &ftable, "APER_FLUX"        , APER_FLUX        , Nrad*Nstars);
+    gfits_set_bintable_column (&header, &ftable, "APER_FLUX_ERR"    , APER_FLUX_ERR    , Nrad*Nstars);
+    gfits_set_bintable_column (&header, &ftable, "APER_FLUX_STDEV"  , APER_FLUX_STDEV  , Nrad*Nstars);
+    gfits_set_bintable_column (&header, &ftable, "APER_FILL"        , APER_FILL        , Nrad*Nstars);
   }
   /**/
