Index: trunk/Ohana/src/libdvo/Makefile
===================================================================
--- trunk/Ohana/src/libdvo/Makefile	(revision 6678)
+++ trunk/Ohana/src/libdvo/Makefile	(revision 6683)
@@ -41,4 +41,5 @@
 $(SRC)/dvo_convert_loneos.$(ARCH).o    \
 $(SRC)/dvo_convert_panstarrs.$(ARCH).o \
+$(SRC)/dvo_convert_pmtest.$(ARCH).o \
 $(SRC)/skyregion_io.$(ARCH).o    \
 $(SRC)/skyregion_gsc.$(ARCH).o    \
@@ -51,4 +52,5 @@
 $(ASRC)/average-elixir.$(ARCH).o \
 $(ASRC)/average-panstarrs.$(ARCH).o \
+$(ASRC)/average-pmtest.$(ARCH).o \
 $(ASRC)/secfilt.$(ARCH).o \
 $(ASRC)/secfilt-loneos.$(ARCH).o \
Index: trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvo.h	(revision 6678)
+++ trunk/Ohana/src/libdvo/include/dvo.h	(revision 6683)
@@ -6,7 +6,9 @@
 # define DVO_H
 
-# define ELIXIR 1
-# define PANSTARRS 0
-# define LONEOS 0
+/*
+  # define ELIXIR 1
+  # define PANSTARRS 0
+  # define LONEOS 0
+*/
 
 /*** named data values (convert all to enums?) ***/
@@ -16,5 +18,5 @@
 
 /* DVO table formats */
-enum {DVO_FORMAT_UNDEF, DVO_FORMAT_INTERNAL, DVO_FORMAT_ELIXIR, DVO_FORMAT_LONEOS, DVO_FORMAT_PANSTARRS} DVOTableFormat;
+enum {DVO_FORMAT_UNDEF, DVO_FORMAT_INTERNAL, DVO_FORMAT_ELIXIR, DVO_FORMAT_LONEOS, DVO_FORMAT_PANSTARRS, DVO_FORMAT_PMTEST} DVOTableFormat;
 
 /* image data modes in RegImage */
@@ -63,10 +65,10 @@
 /* some subtle distinctions between the blend flags:
    BLEND_IMAGE: the star on an image is matched with more 
-      than one star in the catalog (image has worse seeing than catalog)
+   than one star in the catalog (image has worse seeing than catalog)
    BLEND_CATALOG: the star in the catalog is matched with more 
-      than one star on the image (image has better seeing than catalog)
+   than one star on the image (image has better seeing than catalog)
    CALIBRATED: relative photometry has been performed on this measurement
    BLEND_IMAGE_NEIGHBOR: the star on an image is matched with more 
-      than one star in the catalog, but not in the same catalog file.
+   than one star in the catalog, but not in the same catalog file.
 */
 
@@ -285,7 +287,9 @@
 Average *AverageElixirToInternal (AverageElixir *in, int Nvalues);
 Average *AveragePanstarrsToInternal (AveragePanstarrs *in, int Nvalues);
+Average *AveragePMtestToInternal (AveragePMtest *in, int Nvalues);
 AverageLoneos *AverageInternalToLoneos (Average *in, int Nvalues);
 AverageElixir *AverageInternalToElixir (Average *in, int Nvalues);
 AveragePanstarrs *AverageInternalToPanstarrs (Average *in, int Nvalues);
+AveragePMtest *AverageInternalToPMtest (Average *in, int Nvalues);
 
 Measure *FtableToMeasure (FTable *ftable, int *Nmeasure, int *format);
Index: trunk/Ohana/src/libdvo/src/LoadPhotcodes.c
===================================================================
--- trunk/Ohana/src/libdvo/src/LoadPhotcodes.c	(revision 6678)
+++ trunk/Ohana/src/libdvo/src/LoadPhotcodes.c	(revision 6683)
@@ -630,6 +630,6 @@
     Ns2 = photcodes[0].hashNsec[code[0].c2];
   
-    m1 = (Ns1 == -1) ? average[0].M_PS : secfilt[Ns1].M_PS;
-    m2 = (Ns2 == -1) ? average[0].M_PS : secfilt[Ns2].M_PS;
+    m1 = (Ns1 == -1) ? average[0].M : secfilt[Ns1].M_PS;
+    m2 = (Ns2 == -1) ? average[0].M : secfilt[Ns2].M_PS;
     mc = ((m1 == NO_MAG_PS) || (m2 == NO_MAG_PS)) ? NO_MAG_PS : (m1 - m2);
     return (mc);
@@ -647,5 +647,5 @@
   } else {
     Ns = photcodes[0].hashNsec[color[0].code];
-    m1 = (Ns == -1) ? average[0].M_PS : secfilt[Ns].M_PS;
+    m1 = (Ns == -1) ? average[0].M : secfilt[Ns].M_PS;
   }	
 
@@ -661,5 +661,5 @@
   } else {
     Ns = photcodes[0].hashNsec[color[0].code];
-    m2 = (Ns == -1) ? average[0].M_PS : secfilt[Ns].M_PS;
+    m2 = (Ns == -1) ? average[0].M : secfilt[Ns].M_PS;
   }	
   mc = ((m1 == NO_MAG_PS) || (m2 == NO_MAG_PS)) ? NO_MAG_PS : (m1 - m2);
@@ -675,5 +675,5 @@
 
   Ns = photcodes[0].hashNsec[code[0].code];
-  Mave = (Ns == -1) ? average[0].M_PS : secfilt[Ns].M_PS;
+  Mave = (Ns == -1) ? average[0].M : secfilt[Ns].M_PS;
   Mref = Mave + F_PS*code[0].C;
 
@@ -699,5 +699,5 @@
 
   Ns = photcodes[0].hashNsec[code[0].code];
-  Mave = (Ns == -1) ? average[0].M_PS : secfilt[Ns].M_PS;
+  Mave = (Ns == -1) ? average[0].M : secfilt[Ns].M_PS;
   return (Mave);
 }
@@ -710,5 +710,5 @@
 
   Ns = photcodes[0].hashNsec[code[0].code];
-  dM  = (Ns == -1) ? average[0].dM_PS : secfilt[Ns].dM_PS;
+  dM  = (Ns == -1) ? average[0].dM : secfilt[Ns].dM_PS;
   return (dM);
 }
@@ -746,8 +746,8 @@
   } else {
     Ns = photcodes[0].hashNsec[code[0].code];
-    M1 = (Ns == -1) ? average[0].M_PS : secfilt[Ns].M_PS;
+    M1 = (Ns == -1) ? average[0].M : secfilt[Ns].M_PS;
   }	
 
- filter1:
+filter1:
   code = GetPhotcodebyCode (c2);
   if (code == NULL) return (FALSE);
@@ -762,8 +762,8 @@
   } else {
     Ns = photcodes[0].hashNsec[code[0].code];
-    M2 = (Ns == -1) ? average[0].M_PS : secfilt[Ns].M_PS;
+    M2 = (Ns == -1) ? average[0].M : secfilt[Ns].M_PS;
   }	
   
- filter2:
+filter2:
 
   dM = M1 - M2;
@@ -776,8 +776,8 @@
 
 # code name     type  zero  airmass  offset  c1 c2  slope  <color>  primary
-  1    B        pri   24.0  0.15     -       -  -   -      -        -
-  2    B        pri   24.0  0.15     -       -  -   -      -        -
-  3    B1       sec   22.5  0.18     0.15    1  2   0.10   0.50     1
-  1000 USNO_B   ref   -     -        -       -  -   -      -        -
+1    B        pri   24.0  0.15     -       -  -   -      -        -
+2    B        pri   24.0  0.15     -       -  -   -      -        -
+3    B1       sec   22.5  0.18     0.15    1  2   0.10   0.50     1
+1000 USNO_B   ref   -     -        -       -  -   -      -        -
 
 */
Index: trunk/Ohana/src/libdvo/src/dvo_catalog_raw.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_catalog_raw.c	(revision 6678)
+++ trunk/Ohana/src/libdvo/src/dvo_catalog_raw.c	(revision 6683)
@@ -32,4 +32,5 @@
     if (!strcmp (format, "ELIXIR")) catalog[0].catformat = DVO_FORMAT_ELIXIR;
     if (!strcmp (format, "PANSTARRS")) catalog[0].catformat = DVO_FORMAT_PANSTARRS;
+    if (!strcmp (format, "PMTEST")) catalog[0].catformat = DVO_FORMAT_PMTEST;
     if (catalog[0].catformat != DVO_FORMAT_UNDEF) goto got_format;
   }
@@ -71,4 +72,9 @@
     case DVO_FORMAT_PANSTARRS:
       AverageSize = sizeof(AveragePanstarrs);
+      MeasureSize = sizeof(MeasurePanstarrs);
+      SecFiltSize = sizeof (SecFiltPanstarrs);
+      break;
+    case DVO_FORMAT_PMTEST:
+      AverageSize = sizeof(AveragePMtest);
       MeasureSize = sizeof(MeasurePanstarrs);
       SecFiltSize = sizeof (SecFiltPanstarrs);
@@ -157,5 +163,5 @@
 
   if (VERBOSE) fprintf (stderr, "read %d stars from catalog file %s (%d measurements, %d missing, %d secondary filters)\n", 
-	   catalog[0].Naverage, catalog[0].filename, catalog[0].Nmeasure, catalog[0].Nmissing, catalog[0].Nsecfilt);
+			catalog[0].Naverage, catalog[0].filename, catalog[0].Nmeasure, catalog[0].Nmissing, catalog[0].Nsecfilt);
 
   /* check data integrity */
@@ -198,4 +204,5 @@
   if (catalog[0].catformat == DVO_FORMAT_ELIXIR)    fits_modify (&catalog[0].header, "FORMAT", "%s", 1, "ELIXIR");
   if (catalog[0].catformat == DVO_FORMAT_PANSTARRS) fits_modify (&catalog[0].header, "FORMAT", "%s", 1, "PANSTARRS");
+  if (catalog[0].catformat == DVO_FORMAT_PMTEST)    fits_modify (&catalog[0].header, "FORMAT", "%s", 1, "PMTEST");
 
   /* rewind file pointers and truncate file */
@@ -243,4 +250,5 @@
   AverageLoneos *tmpAverageLoneos;
   AveragePanstarrs *tmpAveragePanstarrs;
+  AveragePMtest *tmpAveragePMtest;
 
   switch (format) {
@@ -287,4 +295,15 @@
       free (tmpAveragePanstarrs);
       break;
+    case DVO_FORMAT_PMTEST:
+      ALLOCATE (tmpAveragePMtest, AveragePMtest, MAX (Naverage, 1));
+      nitems = fread (tmpAveragePMtest, sizeof(AveragePMtest), Naverage, f);
+      if (nitems != Naverage) {
+	fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
+	return (NULL);
+      }
+      fits_convert_AveragePMtest (tmpAveragePMtest, sizeof(AveragePMtest), Naverage);
+      average = AveragePMtestToInternal (tmpAveragePMtest, Naverage);
+      free (tmpAveragePMtest);
+      break;
     default:
       fprintf (stderr, "error reading measures\n");
@@ -302,4 +321,5 @@
   AverageLoneos *tmpAverageLoneos;
   AveragePanstarrs *tmpAveragePanstarrs;
+  AveragePMtest *tmpAveragePMtest;
 
   switch (format) {
@@ -342,4 +362,14 @@
       }
       break;
+    case DVO_FORMAT_PMTEST:
+      tmpAveragePMtest = AverageInternalToPMtest (average, Naverage);
+      fits_convert_AveragePMtest (tmpAveragePMtest, sizeof(AveragePMtest), Naverage);
+      nitems = fwrite (tmpAveragePMtest, sizeof(AveragePMtest), Naverage, f);
+      free (tmpAveragePMtest);
+      if (nitems != Naverage) {
+	fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
+	return (FALSE);
+      }
+      break;
     default:
       fprintf (stderr, "error writing averages\n");
@@ -392,4 +422,5 @@
       break;
     case DVO_FORMAT_PANSTARRS:
+    case DVO_FORMAT_PMTEST:
       ALLOCATE (tmpMeasurePanstarrs, MeasurePanstarrs, MAX (Nmeasure, 1));
       nitems = fread (tmpMeasurePanstarrs, sizeof(MeasurePanstarrs), Nmeasure, f);
@@ -448,4 +479,5 @@
       break;
     case DVO_FORMAT_PANSTARRS:
+    case DVO_FORMAT_PMTEST:
       tmpMeasurePanstarrs = MeasureInternalToPanstarrs (measure, Nmeasure);
       fits_convert_MeasurePanstarrs (tmpMeasurePanstarrs, sizeof(MeasurePanstarrs), Nmeasure);
@@ -507,4 +539,5 @@
       break;
     case DVO_FORMAT_PANSTARRS:
+    case DVO_FORMAT_PMTEST:
       ALLOCATE (tmpSecFiltPanstarrs, SecFiltPanstarrs, MAX (Nsecfilt, 1));
       nitems = fread (tmpSecFiltPanstarrs, sizeof(SecFiltPanstarrs), Nsecfilt, f);
@@ -563,4 +596,5 @@
       break;
     case DVO_FORMAT_PANSTARRS:
+    case DVO_FORMAT_PMTEST:
       tmpSecFiltPanstarrs = SecFiltInternalToPanstarrs (secfilt, Nsecfilt);
       fits_convert_SecFiltPanstarrs (tmpSecFiltPanstarrs, sizeof(SecFiltPanstarrs), Nsecfilt);
Index: trunk/Ohana/src/libdvo/src/dvo_convert.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert.c	(revision 6678)
+++ trunk/Ohana/src/libdvo/src/dvo_convert.c	(revision 6683)
@@ -6,5 +6,5 @@
    The TYPE-Ftable conversions functions create output tables in the format requested
    by the 'format' function parameter.
- */
+*/
 
 /** this file might be more readable if I use macros for the repetative
@@ -52,4 +52,12 @@
     return (average);
   }
+  if (!strcmp (extname, "DVO_AVERAGE_PMTEST")) {
+    AveragePMtest *tmpAverage;
+    tmpAverage = fits_table_get_AveragePMtest (ftable, Naverage, NULL);
+    average = AveragePMtestToInternal (tmpAverage, *Naverage);
+    free (tmpAverage);
+    *format = DVO_FORMAT_PMTEST;
+    return (average);
+  }
 
   fprintf (stderr, "table format unknown: %s\n", extname);
@@ -64,4 +72,5 @@
   AverageLoneos *tmpAverageLoneos ;
   AveragePanstarrs *tmpAveragePanstarrs;
+  AveragePMtest *tmpAveragePMtest;
 
   /* convert from the internal format */
@@ -84,4 +93,9 @@
       fits_table_set_AveragePanstarrs (ftable, tmpAveragePanstarrs, Naverage);
       free (tmpAveragePanstarrs);
+      break;
+    case DVO_FORMAT_PMTEST:
+      tmpAveragePMtest = AverageInternalToPMtest (average, Naverage);
+      fits_table_set_AveragePMtest (ftable, tmpAveragePMtest, Naverage);
+      free (tmpAveragePMtest);
       break;
     default:
@@ -125,5 +139,5 @@
     return (measure);
   }
-  if (!strcmp (extname, "DVO_MEASURE_PANSTARRS")) {
+  if (!strcmp (extname, "DVO_MEASURE_PANSTARRS") || !strcmp (extname, "DVO_MEASURE_PMTEST")) {
     MeasurePanstarrs *tmpMeasure;
     tmpMeasure = fits_table_get_MeasurePanstarrs (ftable, Nmeasure, NULL);
@@ -162,4 +176,5 @@
       break;
     case DVO_FORMAT_PANSTARRS:
+    case DVO_FORMAT_PMTEST:
       tmpMeasurePanstarrs = MeasureInternalToPanstarrs (measure, Nmeasure);
       fits_table_set_MeasurePanstarrs (ftable, tmpMeasurePanstarrs, Nmeasure);
@@ -206,5 +221,5 @@
     return (secfilt);
   }
-  if (!strcmp (extname, "DVO_SECFILT_PANSTARRS")) {
+  if (!strcmp (extname, "DVO_SECFILT_PANSTARRS") || !strcmp (extname, "DVO_SECFILT_PMTEST")) {
     SecFiltPanstarrs *tmpSecFilt;
     tmpSecFilt = fits_table_get_SecFiltPanstarrs (ftable, Nsecfilt, NULL);
@@ -243,4 +258,5 @@
       break;
     case DVO_FORMAT_PANSTARRS:
+    case DVO_FORMAT_PMTEST:
       tmpSecFiltPanstarrs = SecFiltInternalToPanstarrs (secfilt, Nsecfilt);
       fits_table_set_SecFiltPanstarrs (ftable, tmpSecFiltPanstarrs, Nsecfilt);
@@ -297,5 +313,5 @@
     goto set_header;
   }
-  if (!strcmp (extname, "DVO_IMAGE_PANSTARRS")) {
+  if (!strcmp (extname, "DVO_IMAGE_PANSTARRS") || !strcmp (extname, "DVO_IMAGE_PMTEST")) {
     ImagePanstarrs *tmpimage;
     *format = DVO_FORMAT_PANSTARRS;
@@ -344,4 +360,5 @@
       break;
     case DVO_FORMAT_PANSTARRS:
+    case DVO_FORMAT_PMTEST:
       tmpImagePanstarrs = ImageInternalToPanstarrs ((Image *) ftable[0].buffer, Nimage);
       free (ftable[0].buffer);
@@ -358,4 +375,7 @@
 int ImageToVtable (VTable *vtable, Header *theader, int format) {
 
+  ImageElixir *tmpImageElixir;
+  ImageLoneos *tmpImageLoneos;
+  ImagePanstarrs *tmpImagePanstarrs;
   int i, Nrow, Nimage;
 
@@ -363,73 +383,67 @@
 
   /* convert from the internal format */
-  if (format == DVO_FORMAT_INTERNAL) {
-    for (i = 0; i < Nrow; i++) {
-      fits_convert_Image ((Image *) vtable[0].buffer[i], sizeof(Image), 1);
-    }
-    return (TRUE);
-  }
-  if (format == DVO_FORMAT_ELIXIR) {
-    ImageElixir *tmpImage;
-
-    /* convert table rows from internal to external format */
-    for (i = 0; i < Nrow; i++) {
-      tmpImage = ImageInternalToElixir ((Image *) vtable[0].buffer[i], 1);
-      fits_convert_ImageElixir (tmpImage, sizeof(ImageElixir), 1);
-      free (vtable[0].buffer[i]);
-      vtable[0].buffer[i] = (char *) tmpImage;
-    }
-
-    /* convert header from old format to new format */
-    fits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
-
-    fits_free_header (theader);
-    fits_table_mkheader_ImageElixir (theader);
-
-    fits_modify (theader, "NAXIS2", "%d", 1, Nimage);
-    theader[0].Naxis[1] = Nimage;
-    vtable[0].size = fits_matrix_size (theader);
-    return (TRUE);
-  }
-  if (format == DVO_FORMAT_LONEOS) {
-    ImageLoneos *tmpImage;
-
-    /* convert table rows from internal to external format */
-    for (i = 0; i < Nrow; i++) {
-      tmpImage = ImageInternalToLoneos ((Image *) vtable[0].buffer[i], 1);
-      fits_convert_ImageLoneos (tmpImage, sizeof(ImageLoneos), 1);
-      free (vtable[0].buffer[i]);
-      vtable[0].buffer[i] = (char *) tmpImage;
-    }
-
-    /* convert header from old format to new format */
-    fits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
-
-    fits_free_header (theader);
-    fits_table_mkheader_ImageLoneos (theader);
-
-    fits_modify (theader, "NAXIS2", "%d", 1, Nimage);
-    theader[0].Naxis[1] = Nimage;
-    vtable[0].size = fits_matrix_size (theader);
-    return (TRUE);
-  }
-  if (format == DVO_FORMAT_PANSTARRS) {
-    ImagePanstarrs *tmpImage;
-
-    /* convert table rows from internal to external format */
-    for (i = 0; i < Nrow; i++) {
-      tmpImage = ImageInternalToPanstarrs ((Image *) vtable[0].buffer[i], 1);
-      fits_convert_ImagePanstarrs (tmpImage, sizeof(ImagePanstarrs), 1);
-      free (vtable[0].buffer[i]);
-      vtable[0].buffer[i] = (char *) tmpImage;
-    }
-
-    /* convert header from old format to new format */
-    fits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
-    fits_free_header (theader);
-    fits_table_mkheader_ImagePanstarrs (theader);
-    fits_modify (theader, "NAXIS2", "%d", 1, Nimage);
-    theader[0].Naxis[1] = Nimage;
-    vtable[0].size = fits_matrix_size (theader);
-    return (TRUE);
+  switch (format) {
+    case DVO_FORMAT_INTERNAL:
+      for (i = 0; i < Nrow; i++) {
+	fits_convert_Image ((Image *) vtable[0].buffer[i], sizeof(Image), 1);
+      }
+      return (TRUE);
+    case DVO_FORMAT_ELIXIR:
+      /* convert table rows from internal to external format */
+      for (i = 0; i < Nrow; i++) {
+	tmpImageElixir = ImageInternalToElixir ((Image *) vtable[0].buffer[i], 1);
+	fits_convert_ImageElixir (tmpImageElixir, sizeof(ImageElixir), 1);
+	free (vtable[0].buffer[i]);
+	vtable[0].buffer[i] = (char *) tmpImageElixir;
+      }
+
+      /* convert header from old format to new format */
+      fits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
+
+      fits_free_header (theader);
+      fits_table_mkheader_ImageElixir (theader);
+
+      fits_modify (theader, "NAXIS2", "%d", 1, Nimage);
+      theader[0].Naxis[1] = Nimage;
+      vtable[0].size = fits_matrix_size (theader);
+      return (TRUE);
+    case DVO_FORMAT_LONEOS:
+      /* convert table rows from internal to external format */
+      for (i = 0; i < Nrow; i++) {
+	tmpImageLoneos = ImageInternalToLoneos ((Image *) vtable[0].buffer[i], 1);
+	fits_convert_ImageLoneos (tmpImageLoneos, sizeof(ImageLoneos), 1);
+	free (vtable[0].buffer[i]);
+	vtable[0].buffer[i] = (char *) tmpImageLoneos;
+      }
+
+      /* convert header from old format to new format */
+      fits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
+
+      fits_free_header (theader);
+      fits_table_mkheader_ImageLoneos (theader);
+
+      fits_modify (theader, "NAXIS2", "%d", 1, Nimage);
+      theader[0].Naxis[1] = Nimage;
+      vtable[0].size = fits_matrix_size (theader);
+      return (TRUE);
+    case DVO_FORMAT_PANSTARRS:
+      /* convert table rows from internal to external format */
+      for (i = 0; i < Nrow; i++) {
+	tmpImagePanstarrs = ImageInternalToPanstarrs ((Image *) vtable[0].buffer[i], 1);
+	fits_convert_ImagePanstarrs (tmpImagePanstarrs, sizeof(ImagePanstarrs), 1);
+	free (vtable[0].buffer[i]);
+	vtable[0].buffer[i] = (char *) tmpImagePanstarrs;
+      }
+
+      /* convert header from old format to new format */
+      fits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
+      fits_free_header (theader);
+      fits_table_mkheader_ImagePanstarrs (theader);
+      fits_modify (theader, "NAXIS2", "%d", 1, Nimage);
+      theader[0].Naxis[1] = Nimage;
+      vtable[0].size = fits_matrix_size (theader);
+      return (TRUE);
+    default:
+      break;
   }
   fprintf (stderr, "table format unknown (image vtable)\n");
Index: trunk/Ohana/src/libdvo/src/dvo_convert_elixir.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_elixir.c	(revision 6678)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_elixir.c	(revision 6683)
@@ -68,8 +68,8 @@
 
   for (i = 0; i < Nvalues; i++) {
-    out[i].R_PS    = in[i].R;      
-    out[i].D_PS    = in[i].D;      
-    out[i].M_PS    = in[i].M  * 0.001;      
-    out[i].dM_PS   = in[i].dM * 0.001;      
+    out[i].R       = in[i].R;      
+    out[i].D       = in[i].D;      
+    out[i].M       = in[i].M  * 0.001;      
+    out[i].dM      = in[i].dM * 0.001;      
     out[i].Xp      = in[i].Xp;     
     out[i].Xm      = in[i].Xm;     
@@ -80,4 +80,14 @@
     out[i].missing = in[i].missing;
     out[i].Xg      = in[i].Xg;
+
+    /* these don't exist in Elixir */
+    out[i].dR      = 0;
+    out[i].dD      = 0;
+    out[i].uR      = 0;
+    out[i].uD      = 0;
+    out[i].duR     = 0;
+    out[i].duD     = 0;
+    out[i].P       = 0;
+    out[i].dP      = 0;
   }
   return (out);
@@ -93,8 +103,8 @@
 
   for (i = 0; i < Nvalues; i++) {
-    out[i].R       = in[i].R_PS;      
-    out[i].D       = in[i].D_PS;      
-    out[i].M       = in[i].M_PS  * 1000.0;      
-    out[i].dM      = in[i].dM_PS * 1000.0;
+    out[i].R       = in[i].R;      
+    out[i].D       = in[i].D;      
+    out[i].M       = in[i].M  * 1000.0;      
+    out[i].dM      = in[i].dM * 1000.0;
     out[i].Xp      = in[i].Xp;     
     out[i].Xm      = in[i].Xm;     
Index: trunk/Ohana/src/libdvo/src/dvo_convert_loneos.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_loneos.c	(revision 6678)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_loneos.c	(revision 6683)
@@ -67,7 +67,7 @@
 
   for (i = 0; i < Nvalues; i++) {
-    out[i].R_PS    = in[i].R;      
-    out[i].D_PS    = in[i].D;      
-    out[i].M_PS    = in[i].M * 0.001;      
+    out[i].R       = in[i].R;      
+    out[i].D       = in[i].D;      
+    out[i].M       = in[i].M * 0.001;      
     out[i].Xp      = in[i].Xp;     
     out[i].Xm      = in[i].Xm;     
@@ -79,5 +79,13 @@
 
     /* these don't exist in Loneos */
-    out[i].dM_PS   = 0xffff;
+    out[i].dR      = 0;
+    out[i].dD      = 0;
+    out[i].uR      = 0;
+    out[i].uD      = 0;
+    out[i].duR     = 0;
+    out[i].duD     = 0;
+    out[i].P       = 0;
+    out[i].dP      = 0;
+    out[i].dM      = 0xffff;
     out[i].Xg      = 0xffff;
   }
@@ -94,7 +102,7 @@
 
   for (i = 0; i < Nvalues; i++) {
-    out[i].R       = in[i].R_PS;      
-    out[i].D       = in[i].D_PS;      
-    out[i].M       = in[i].M_PS * 1000.0;      
+    out[i].R       = in[i].R;      
+    out[i].D       = in[i].D;      
+    out[i].M       = in[i].M * 1000.0;      
     out[i].Xp      = in[i].Xp;     
     out[i].Xm      = in[i].Xm;     
Index: trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs.c	(revision 6678)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs.c	(revision 6683)
@@ -70,8 +70,8 @@
 
   for (i = 0; i < Nvalues; i++) {
-    out[i].R_PS    = in[i].R;      
-    out[i].D_PS    = in[i].D;      
-    out[i].M_PS    = in[i].M;      
-    out[i].dM_PS   = in[i].dM;
+    out[i].R       = in[i].R;      
+    out[i].D       = in[i].D;      
+    out[i].M       = in[i].M;      
+    out[i].dM      = in[i].dM;
     out[i].Xp      = in[i].Xp;     
     out[i].Xm      = in[i].Xm;     
@@ -82,4 +82,14 @@
     out[i].offset  = in[i].offset; 
     out[i].missing = in[i].missing;
+
+    /* these don't exist in Panstarrs */
+    out[i].dR      = 0;
+    out[i].dD      = 0;
+    out[i].uR      = 0;
+    out[i].uD      = 0;
+    out[i].duR     = 0;
+    out[i].duD     = 0;
+    out[i].P       = 0;
+    out[i].dP      = 0;
   }
   return (out);
@@ -95,8 +105,8 @@
 
   for (i = 0; i < Nvalues; i++) {
-    out[i].R       = in[i].R_PS;      
-    out[i].D       = in[i].D_PS;      
-    out[i].M       = in[i].M_PS;      
-    out[i].dM      = in[i].dM_PS;
+    out[i].R       = in[i].R;      
+    out[i].D       = in[i].D;      
+    out[i].M       = in[i].M;      
+    out[i].dM      = in[i].dM;
     out[i].Xp      = in[i].Xp;     
     out[i].Xm      = in[i].Xm;     
Index: trunk/Ohana/src/libdvo/src/dvo_convert_pmtest.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_pmtest.c	(revision 6683)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_pmtest.c	(revision 6683)
@@ -0,0 +1,72 @@
+# include <dvo.h>
+
+/* convert panstarrs-format averages to internal averages */
+Average *AveragePMtestToInternal (AveragePMtest *in, int Nvalues) {
+
+  int i;
+  Average *out;
+
+  ALLOCATE (out, Average, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    out[i].R       = in[i].R;      
+    out[i].D       = in[i].D;      
+    out[i].dR      = in[i].dR;      
+    out[i].dD      = in[i].dD;      
+
+    out[i].uR      = in[i].uR;      
+    out[i].uD      = in[i].uD;      
+    out[i].duR     = in[i].duR;      
+    out[i].duD     = in[i].duD;      
+    out[i].P       = in[i].P;      
+    out[i].dP      = in[i].dP;      
+
+    out[i].M       = in[i].M;      
+    out[i].dM      = in[i].dM;
+    out[i].Xp      = in[i].Xp;     
+    out[i].Xm      = in[i].Xm;     
+    out[i].Xg      = in[i].Xg;
+    out[i].Nm      = in[i].Nm;     
+    out[i].Nn      = in[i].Nn;     
+    out[i].code    = in[i].code;   
+    out[i].offset  = in[i].offset; 
+    out[i].missing = in[i].missing;
+  }
+  return (out);
+}
+
+/* convert internal averages to panstarrs-format averages */
+AveragePMtest *AverageInternalToPMtest (Average *in, int Nvalues) {
+
+  int i;
+  AveragePMtest *out;
+
+  ALLOCATE (out, AveragePMtest, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    out[i].R       = in[i].R;      
+    out[i].D       = in[i].D;      
+    out[i].dR      = in[i].dR;      
+    out[i].dD      = in[i].dD;      
+
+    out[i].uR      = in[i].uR;      
+    out[i].uD      = in[i].uD;      
+    out[i].duR     = in[i].duR;      
+    out[i].duD     = in[i].duD;      
+    out[i].P       = in[i].P;      
+    out[i].dP      = in[i].dP;      
+
+    out[i].M       = in[i].M;      
+    out[i].dM      = in[i].dM;
+    out[i].Xp      = in[i].Xp;     
+    out[i].Xm      = in[i].Xm;     
+    out[i].Xg      = in[i].Xg;
+    out[i].Nm      = in[i].Nm;     
+    out[i].Nn      = in[i].Nn;     
+    out[i].code    = in[i].code;   
+    out[i].offset  = in[i].offset; 
+    out[i].missing = in[i].missing;
+  }
+  return (out);
+}
+
