Index: /branches/rel10_ifa/psModules/src/objects/Makefile.am
===================================================================
--- /branches/rel10_ifa/psModules/src/objects/Makefile.am	(revision 6711)
+++ /branches/rel10_ifa/psModules/src/objects/Makefile.am	(revision 6712)
@@ -19,4 +19,5 @@
      pmSourceIO_OBJ.c \
      pmSourceIO_SX.c \
+     pmSourceIO_RAW.c \
      pmPSF.c \
      pmPSFtry.c \
@@ -46,3 +47,4 @@
      pmPSF.h \
      pmPSFtry.h \
-     pmGrowthCurve.h
+     pmGrowthCurve.h \
+     pmFPAviewObjectsIO.h
Index: /branches/rel10_ifa/psModules/src/objects/models/pmModel_QGAUSS.c
===================================================================
--- /branches/rel10_ifa/psModules/src/objects/models/pmModel_QGAUSS.c	(revision 6711)
+++ /branches/rel10_ifa/psModules/src/objects/models/pmModel_QGAUSS.c	(revision 6712)
@@ -105,4 +105,5 @@
     params[6] = 0.0;
     params[7] = 1.0;
+
     return(true);
 }
Index: /branches/rel10_ifa/psModules/src/objects/pmFPAviewReadObjects.c
===================================================================
--- /branches/rel10_ifa/psModules/src/objects/pmFPAviewReadObjects.c	(revision 6711)
+++ /branches/rel10_ifa/psModules/src/objects/pmFPAviewReadObjects.c	(revision 6712)
@@ -3,6 +3,6 @@
  *  @author EAM, IfA; GLG, MHPCC
  *
- *  @version $Revision: 1.1.2.3 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-03-14 02:21:07 $
+ *  @version $Revision: 1.1.2.4 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-03-28 02:14:56 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -125,9 +125,10 @@
         hdu = pmFPAviewThisHDU (view, file->fpa);
 
-        char *filename = pmFPAviewNameFromRule (file->filerule, view, file->fpa);
+        char *filename = pmFPAfileNameFromRule (file->filerule, file, view);
         file->fits = psFitsOpen (filename, "r");
         hdu->header = psFitsReadHeader (NULL, file->fits);
         psFitsClose (file->fits);
         sources  = pmSourcesReadCMP (filename, hdu->header);
+        psFree (filename);
         break;
 
@@ -136,12 +137,14 @@
         hdu = pmFPAviewThisHDU (view, file->fpa);
         if (hdu->header == NULL) {
-            char *headname = pmFPAviewNameFromRule (file->extxtra, view, file->fpa);
+            char *headname = pmFPAfileNameFromRule (file->extxtra, file, view);
             psFitsMoveExtName (file->fits, headname);
             hdu->header = psFitsReadHeader (NULL, file->fits);
+            psFree (headname);
         }
 
-        char *dataname = pmFPAviewNameFromRule (file->extrule, view, file->fpa);
+        char *dataname = pmFPAfileNameFromRule (file->extrule, file, view);
         psFitsMoveExtName (file->fits, dataname);
         sources  = pmSourcesReadCMF (file->fits, hdu->header);
+        psFree (dataname);
         break;
 
Index: /branches/rel10_ifa/psModules/src/objects/pmFPAviewWriteObjects.c
===================================================================
--- /branches/rel10_ifa/psModules/src/objects/pmFPAviewWriteObjects.c	(revision 6711)
+++ /branches/rel10_ifa/psModules/src/objects/pmFPAviewWriteObjects.c	(revision 6712)
@@ -3,6 +3,6 @@
  *  @author EAM, IfA; GLG, MHPCC
  *
- *  @version $Revision: 1.1.2.3 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-03-14 02:21:07 $
+ *  @version $Revision: 1.1.2.4 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-03-28 02:14:56 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -27,9 +27,35 @@
 #include "pmFPAviewObjectsIO.h"
 
+bool psFitsWriteHeaderNotImage (psFits *fits, psMetadata *header)
+{
+
+    int status = 0;
+    char fitsErr[1024];
+
+    psMetadataItem *mdi = NULL;
+    mdi = psMetadataLookup (header, "NAXIS");
+    if (mdi != NULL) {
+        mdi->data.S32 = 0;
+        mdi->type = PS_DATA_S32;
+    }
+
+    fits_create_img (fits->fd, SHORT_IMG, 0, NULL, &status);
+
+    if (status != 0) {
+        fits_get_errstatus (status, fitsErr);
+        psError (PS_ERR_IO, true, PS_ERRORTEXT_psFits_WRITE_FAILED, fitsErr);
+        exit (2);
+    }
+
+    psFitsWriteHeader (header, fits);
+
+    return true;
+}
+
 // Given a FITS file pointer, read the table of object data
 bool pmFPAviewWriteObjects (pmFPAview *view, pmFPAfile *file)
 {
 
-    pmFPA *fpa = view->fpa;
+    pmFPA *fpa = file->fpa;
 
     if (view->chip == -1) {
@@ -112,16 +138,26 @@
     char *headname;
     pmHDU *hdu;
+    pmHDU *phu;
 
     psArray *sources = psMetadataLookupPtr (&status, readout->analysis, "PSPHOT.SOURCES");
+    return true;
 
     switch (file->type) {
+    case PM_FPA_FILE_RAW:
+        filename = pmFPAfileNameFromRule (file->filerule, file, view);
+        pmSourcesWriteRAW (sources, filename);
+        psFree (filename);
+        break;
+
     case PM_FPA_FILE_OBJ:
-        filename = pmFPAviewNameFromRule (file->filerule, view, file->fpa);
+        filename = pmFPAfileNameFromRule (file->filerule, file, view);
         pmSourcesWriteOBJ (sources, filename);
+        psFree (filename);
         break;
 
     case PM_FPA_FILE_SX:
-        filename = pmFPAviewNameFromRule (file->filerule, view, file->fpa);
+        filename = pmFPAfileNameFromRule (file->filerule, file, view);
         pmSourcesWriteSX (sources, filename);
+        psFree (filename);
         break;
 
@@ -129,33 +165,46 @@
         // a SPLIT format : only one header and object table per file
         hdu = pmFPAviewThisHDU (view, file->fpa);
-        filename = pmFPAviewNameFromRule (file->filerule, view, file->fpa);
+        filename = pmFPAfileNameFromRule (file->filerule, file, view);
         pmSourcesWriteCMP (sources, filename, hdu->header);
+        psFree (filename);
         break;
 
     case PM_FPA_FILE_CMF:
-        // write header, if not yet written?
+        // write a PHU?
+        // write a header?
+        // write the data
+
+        // get the current header
         hdu = pmFPAviewThisHDU (view, file->fpa);
 
-        // XXX is this needed? is it automatically added?
-        // psMetadataAdd (header, PS_LIST_TAIL, "EXTEND", PS_DATA_BOOL | PS_META_REPLACE, "this file has extensions", true);
-
-        // I need a test to see if the Cell header has been written out
-        if (hdu->header) {
-            psMetadataItem *mdi = NULL;
-            headname = pmFPAviewNameFromRule (file->extxtra, view, file->fpa);
-
-            // set NAXIS to 0 (we don't write out the data array)
-            // XXX part of the header cleanup?
-            mdi = psMetadataLookup (hdu->header, "NAXIS");
-            mdi->data.S32 = 0;
-            mdi->type = PS_DATA_S32;
-
-            if (strcasecmp (headname, "PHU")) {
-                psMetadataAdd (hdu->header, PS_LIST_HEAD, "EXTNAME", PS_DATA_STRING, "extension name", headname);
-            }
-            psFitsWriteHeader (hdu->header, file->fits);
+        // if file does not yet have a PHU, write it to disk
+        if (file->phu == NULL) {
+            // get the corresponding phu
+            phu = pmFPAviewThisPHU (view, file->fpa);
+
+            // CMF always has extensions
+            psMetadataAdd (phu->header, PS_LIST_TAIL, "EXTEND", PS_DATA_BOOL | PS_META_REPLACE, "this file has extensions", true);
+            psFitsWriteHeaderNotImage (file->fits, phu->header);
+            file->phu = phu->header;
+            psTrace ("pmFPAfile", 5, "wrote phu %s (type: %d)\n", file->filename, file->type);
+
+            file->phu = phu->header;
         }
-        dataname = pmFPAviewNameFromRule (file->extrule, view, file->fpa);
+
+        // this this header block is new, write it to disk,
+        if (hdu->header != file->header) {
+            // determine name for header extension
+            headname = pmFPAfileNameFromRule (file->extxtra, file, view);
+            psMetadataAddStr (hdu->header, PS_LIST_TAIL, "EXTNAME", PS_META_REPLACE, "extension name", headname);
+            psFitsWriteHeaderNotImage (file->fits, hdu->header);
+            psTrace ("pmFPAfile", 5, "wrote ext head %s (type: %d)\n", file->filename, file->type);
+            file->header = hdu->header;
+            psFree (headname);
+        }
+
+        // write this table to disk
+        dataname = pmFPAfileNameFromRule (file->extrule, file, view);
         pmSourcesWriteCMF (file->fits, sources, hdu->header, dataname);
+        psFree (dataname);
         break;
 
Index: /branches/rel10_ifa/psModules/src/objects/pmSourceIO.c
===================================================================
--- /branches/rel10_ifa/psModules/src/objects/pmSourceIO.c	(revision 6711)
+++ /branches/rel10_ifa/psModules/src/objects/pmSourceIO.c	(revision 6712)
@@ -3,6 +3,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.1.2.2 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-03-09 03:14:23 $
+ *  @version $Revision: 1.1.2.3 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-03-28 02:14:56 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -53,25 +53,2 @@
 }
 
-/***** Text Output Methods *****/
-# if (0)
-    bool pmSourcesWriteText (psArray *sources, char *filename)
-{
-
-    char *name = (char *) psAlloc (strlen(filename) + 10);
-
-    sprintf (name, "%s.psf.dat", filename);
-    pmModelWritePSFs (sources, name);
-
-    sprintf (name, "%s.ext.dat", filename);
-    pmModelWriteEXTs (sources, name);
-
-    sprintf (name, "%s.nul.dat", filename);
-    pmModelWriteNULLs (sources, name);
-
-    sprintf (name, "%s.mnt.dat", filename);
-    pmMomentsWriteText (sources, name);
-
-    psFree (name);
-    return true;
-}
-# endif
Index: /branches/rel10_ifa/psModules/src/objects/pmSourceIO.h
===================================================================
--- /branches/rel10_ifa/psModules/src/objects/pmSourceIO.h	(revision 6711)
+++ /branches/rel10_ifa/psModules/src/objects/pmSourceIO.h	(revision 6712)
@@ -3,6 +3,6 @@
  *  @author EAM, IfA; GLG, MHPCC
  *
- *  @version $Revision: 1.1.2.1 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-03-09 03:14:23 $
+ *  @version $Revision: 1.1.2.2 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-03-28 02:14:56 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -14,6 +14,6 @@
 
 int pmSourceDophotType (pmSource *source);
-bool pmSourcesWriteText (psArray *sources, char *filename);
 
+bool pmSourcesWriteRAW (psArray *sources, char *filename);
 bool pmSourcesWriteOBJ (psArray *sources, char *filename);
 bool pmSourcesWriteSX (psArray *sources, char *filename);
@@ -24,3 +24,9 @@
 psArray *pmSourcesReadCMF (psFits *fits, psMetadata *header);
 
+bool pmSourcesWritePSFs (psArray *sources, char *filename);
+bool pmSourcesWriteEXTs (psArray *sources, char *filename);
+bool pmSourcesWriteNULLs (psArray *sources, char *filename);
+bool pmMomentsWriteText (psArray *sources, char *filename);
+bool pmPeaksWriteText (psArray *peaks, char *filename);
+
 # endif /* PM_SOURCE_IO_H */
Index: /branches/rel10_ifa/psModules/src/objects/pmSourceIO_CMF.c
===================================================================
--- /branches/rel10_ifa/psModules/src/objects/pmSourceIO_CMF.c	(revision 6711)
+++ /branches/rel10_ifa/psModules/src/objects/pmSourceIO_CMF.c	(revision 6712)
@@ -3,6 +3,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.1.2.3 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-03-09 04:25:03 $
+ *  @version $Revision: 1.1.2.4 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-03-28 02:14:56 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -87,6 +87,7 @@
     psMetadataAdd (theader, PS_LIST_HEAD, "EXTNAME", PS_DATA_STRING, "extension name", extname);
 
-    psFitsWriteHeader (header, fits);
     psFitsWriteTable (fits, theader, table);
+    psTrace ("pmFPAfile", 5, "wrote ext data %s\n", extname);
+
     return true;
 }
Index: /branches/rel10_ifa/psModules/src/objects/pmSourceIO_RAW.c
===================================================================
--- /branches/rel10_ifa/psModules/src/objects/pmSourceIO_RAW.c	(revision 6711)
+++ /branches/rel10_ifa/psModules/src/objects/pmSourceIO_RAW.c	(revision 6712)
@@ -1,7 +1,58 @@
+/** @file  pmSourceIO.c
+ *
+ *  @author EAM, IfA
+ *
+ *  @version $Revision: 1.1.2.2 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-03-28 02:14:56 $
+ *
+ *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include "pslib.h"
+#include "psLine.h"
+#include "psEllipse.h"
+#include "pmHDU.h"
+#include "pmFPA.h"
+#include "pmPeaks.h"
+#include "pmMoments.h"
+#include "pmGrowthCurve.h"
+#include "pmModel.h"
+#include "pmPSF.h"
+#include "pmSource.h"
+#include "pmModelGroup.h"
+#include "pmSourcePhotometry.h"
+#include "pmSourceIO.h"
+
+/***** Text Output Methods *****/
+bool pmSourcesWriteRAW (psArray *sources, char *filename)
+{
+
+    char *name = (char *) psAlloc (strlen(filename) + 10);
+
+    sprintf (name, "%s.psf.dat", filename);
+    pmSourcesWritePSFs (sources, name);
+
+    sprintf (name, "%s.ext.dat", filename);
+    pmSourcesWriteEXTs (sources, name);
+
+    sprintf (name, "%s.nul.dat", filename);
+    pmSourcesWriteNULLs (sources, name);
+
+    sprintf (name, "%s.mnt.dat", filename);
+    pmMomentsWriteText (sources, name);
+
+    psFree (name);
+    return true;
+}
+
 // write the PSF sources to an output file
-bool pmModelWritePSFs (psArray *sources, char *filename)
-{
-
-    double dPos, dMag;
+bool pmSourcesWritePSFs (psArray *sources, char *filename)
+{
+
+    double dPos;
     int i, j;
     FILE *f;
@@ -11,5 +62,5 @@
     f = fopen (filename, "w");
     if (f == NULL) {
-        psLogMsg ("pmModelWritePSFs", 3, "can't open output file for moments%s\n", filename);
+        psLogMsg (__func__, 3, "can't open output file for PSFs: %s\n", filename);
         return false;
     }
@@ -18,5 +69,5 @@
     for (i = 0; i < sources->n; i++) {
         pmSource *source = (pmSource *) sources->data[i];
-        if (source->type != PM_SOURCE_STAR)
+        if (source->type != PM_SOURCE_TYPE_STAR)
             continue;
         model = source->modelPSF;
@@ -29,8 +80,7 @@
         // dPos is positional error, dMag is mag error
         dPos = hypot (dPAR[2], dPAR[3]);
-        dMag = dPAR[1] / PAR[1];
 
         fprintf (f, "%7.1f %7.1f  %7.1f %8.4f  %7.4f %7.4f  ",
-                 PAR[2], PAR[3], PAR[0], source->fitMag, dMag, dPos);
+                 PAR[2], PAR[3], PAR[0], source->psfMag, source->errMag, dPos);
 
         for (j = 4; j < model->params->n; j++) {
@@ -54,8 +104,8 @@
 
 // dump the sources to an output file
-bool pmModelWriteEXTs (psArray *sources, char *filename)
-{
-
-    double dPos, dMag;
+bool pmSourcesWriteEXTs (psArray *sources, char *filename)
+{
+
+    double dPos;
     int i, j;
     FILE *f;
@@ -73,5 +123,5 @@
         pmSource *source = (pmSource *) sources->data[i];
 
-        if (source->type != PM_SOURCE_EXTENDED)
+        if (source->type != PM_SOURCE_TYPE_EXTENDED)
             continue;
         model = pmSourceMagnitudes (source, NULL, 0.0);
@@ -85,8 +135,7 @@
         // XXX these are hardwired for SGAUSS
         dPos = hypot ((dPAR[4] / PAR[4]), (dPAR[5] / PAR[5]));
-        dMag = dPAR[1] / PAR[1];
 
         fprintf (f, "%7.1f %7.1f  %7.1f %8.4f  %7.4f %7.4f  ",
-                 PAR[2], PAR[3], PAR[0], source->fitMag, dMag, dPos);
+                 PAR[2], PAR[3], PAR[0], source->extMag, source->errMag, dPos);
 
         for (j = 4; j < model->params->n; j++) {
@@ -111,5 +160,5 @@
 
 // dump the sources to an output file
-bool pmModelWriteNULLs (psArray *sources, char *filename)
+bool pmSourcesWriteNULLs (psArray *sources, char *filename)
 {
 
@@ -132,7 +181,7 @@
 
         // skip these sources (in PSF or EXT)
-        if (source->type == PM_SOURCE_STAR)
-            continue;
-        if (source->type == PM_SOURCE_EXTENDED)
+        if (source->type == PM_SOURCE_TYPE_STAR)
+            continue;
+        if (source->type == PM_SOURCE_TYPE_EXTENDED)
             continue;
 
