Index: /trunk/Ohana/src/addstar/Makefile
===================================================================
--- /trunk/Ohana/src/addstar/Makefile	(revision 42820)
+++ /trunk/Ohana/src/addstar/Makefile	(revision 42821)
@@ -96,4 +96,5 @@
 $(SRC)/find_matches_refstars.$(ARCH).o \
 $(SRC)/find_matches_closest_refstars.$(ARCH).o \
+$(SRC)/photcodes.$(ARCH).o \
 $(SRC)/getgsc.$(ARCH).o \
 $(SRC)/getusno.$(ARCH).o \
@@ -151,4 +152,5 @@
 $(SRC)/find_matches_refstars.$(ARCH).o \
 $(SRC)/find_subset.$(ARCH).o \
+$(SRC)/photcodes.$(ARCH).o \
 $(SRC)/getgsc.$(ARCH).o \
 $(SRC)/getusno.$(ARCH).o \
@@ -181,4 +183,5 @@
 $(SRC)/find_matches_refstars.$(ARCH).o \
 $(SRC)/find_subset.$(ARCH).o \
+$(SRC)/photcodes.$(ARCH).o \
 $(SRC)/getgsc.$(ARCH).o \
 $(SRC)/getusno.$(ARCH).o \
Index: /trunk/Ohana/src/addstar/include/addstar.h
===================================================================
--- /trunk/Ohana/src/addstar/include/addstar.h	(revision 42820)
+++ /trunk/Ohana/src/addstar/include/addstar.h	(revision 42821)
@@ -142,4 +142,5 @@
 int     OLD_RESORT;
 int     READ_XRAD_DATA;
+int     CONVOLVED_APERTURES;
 int     DIFF_WITH_INV;
 
@@ -344,4 +345,7 @@
 void GetConfig (char *config, char *field, char *format, int N, void *ptr);
 
+int isGPC1warp (int photcode);
+int isGPC1stack (int photcode);
+
 /** 
     there is an inconsistency to be resolved: fixed structures (like Image)
Index: /trunk/Ohana/src/addstar/src/ReadStarsFITS.c
===================================================================
--- /trunk/Ohana/src/addstar/src/ReadStarsFITS.c	(revision 42820)
+++ /trunk/Ohana/src/addstar/src/ReadStarsFITS.c	(revision 42821)
@@ -1290,5 +1290,5 @@
     // this is may optionally be replaced by the internal sequence (see FilterStars.c)
     catalog->measure[i].detID      = ps1data[i].detID; 
-
+    
     dvo_lensing_init (&catalog->lensing[i]);
 
Index: /trunk/Ohana/src/addstar/src/ReadXradFITS.c
===================================================================
--- /trunk/Ohana/src/addstar/src/ReadXradFITS.c	(revision 42820)
+++ /trunk/Ohana/src/addstar/src/ReadXradFITS.c	(revision 42821)
@@ -97,80 +97,137 @@
   // first entry and compare to the rest
 
-  float fwhmValues[3];
-  fwhmValues[0] = PSFfwhm[0];
-  fwhmValues[1] = PSFfwhm[1];
-  fwhmValues[2] = PSFfwhm[2];
-
-  int i;
   int Nap = 0; 
-  for (i = 0; i < catalog->Nmeasure; i++) {
-    dvo_lensing_init (&catalog->lensing[i]);
-
-    if (catalog->measure[i].detID < RadID[Nap]) {
-      continue;
+
+  if (CONVOLVED_APERTURES) {
+    // XXX code to support the 3 convolved apertures
+
+    float fwhmValues[3];
+    fwhmValues[0] = PSFfwhm[0];
+    fwhmValues[1] = PSFfwhm[1];
+    fwhmValues[2] = PSFfwhm[2];
+
+    for (int i = 0; i < catalog->Nmeasure; i++) {
+      dvo_lensing_init (&catalog->lensing[i]);
+
+      if (catalog->measure[i].detID < RadID[Nap]) {
+	continue;
+	// this is a psf measurement which does not have a radial aperture
+      }
+      if (catalog->measure[i].detID > RadID[Nap]) {
+	myAbort("radial apertures for source not in psf list? sources out of order?  seems like a bug\n");
+	// this could be a radial aperture which does not have a PSF source, but that is not possible
+      }
+
+      // confirm the 3 FWHM values:
+      myAssert (fwhmValues[0] == PSFfwhm[Nap+0], "FWHM mismatch %f vs %f", fwhmValues[0], PSFfwhm[Nap+0]);
+      myAssert (fwhmValues[1] == PSFfwhm[Nap+1], "FWHM mismatch %f vs %f", fwhmValues[1], PSFfwhm[Nap+1]);
+      myAssert (fwhmValues[2] == PSFfwhm[Nap+2], "FWHM mismatch %f vs %f", fwhmValues[2], PSFfwhm[Nap+2]);
+
+      // EAM 2022.02.17 : here is the comment for the PV3 load:
+      // XXX this is all hard-wired and should make use of the headers. 
+      // psphot cmfs have 5 radial apertures:
+      // array 0, 1, 2, 3, 4
+      // SDSS  3, 4, 5, 6, 7
+
+      // EAM 2022.02.17 : here is the situation for UNIONS DR3:
+      // we have 3 convolutions (raw, 6", 8")
+      // for each we have 6 apertures with max radii of (4, 8, 16, 32, 48, 64) pixels = (1, 2, 4, 8, 12, 16) arcsec
+      // I am going to save (4, 16, 32) which have index of (0, 2, 3)
+
+# define RAD_0 0
+# define RAD_1 2
+# define RAD_2 3
+      catalog->lensing[i]. F_ApR5    = AperFlux   [(Nap + 0)*Ncol + RAD_0];
+      catalog->lensing[i].dF_ApR5    = AperFluxErr[(Nap + 0)*Ncol + RAD_0];
+      catalog->lensing[i].sF_ApR5    = AperFluxStd[(Nap + 0)*Ncol + RAD_0];
+      catalog->lensing[i].fF_ApR5    = AperFill   [(Nap + 0)*Ncol + RAD_0];
+				   
+      catalog->lensing[i]. F_ApR6    = AperFlux   [(Nap + 0)*Ncol + RAD_1];
+      catalog->lensing[i].dF_ApR6    = AperFluxErr[(Nap + 0)*Ncol + RAD_1];
+      catalog->lensing[i].sF_ApR6    = AperFluxStd[(Nap + 0)*Ncol + RAD_1];
+      catalog->lensing[i].fF_ApR6    = AperFill   [(Nap + 0)*Ncol + RAD_1];
+				   
+      catalog->lensing[i]. F_ApR7    = AperFlux   [(Nap + 0)*Ncol + RAD_2];
+      catalog->lensing[i].dF_ApR7    = AperFluxErr[(Nap + 0)*Ncol + RAD_2];
+      catalog->lensing[i].sF_ApR7    = AperFluxStd[(Nap + 0)*Ncol + RAD_2];
+      catalog->lensing[i].fF_ApR7    = AperFill   [(Nap + 0)*Ncol + RAD_2];
+
+      catalog->lensing[i]. F_ApR5_C1 = AperFlux   [(Nap + 1)*Ncol + RAD_0];
+      catalog->lensing[i].dF_ApR5_C1 = AperFluxErr[(Nap + 1)*Ncol + RAD_0];
+      catalog->lensing[i]. F_ApR6_C1 = AperFlux   [(Nap + 1)*Ncol + RAD_1];
+      catalog->lensing[i].dF_ApR6_C1 = AperFluxErr[(Nap + 1)*Ncol + RAD_1];
+      catalog->lensing[i]. F_ApR7_C1 = AperFlux   [(Nap + 1)*Ncol + RAD_2];
+      catalog->lensing[i].dF_ApR7_C1 = AperFluxErr[(Nap + 1)*Ncol + RAD_2];
+
+      catalog->lensing[i]. F_ApR5_C2 = AperFlux   [(Nap + 2)*Ncol + RAD_0];
+      catalog->lensing[i].dF_ApR5_C2 = AperFluxErr[(Nap + 2)*Ncol + RAD_0];
+      catalog->lensing[i]. F_ApR6_C2 = AperFlux   [(Nap + 2)*Ncol + RAD_1];
+      catalog->lensing[i].dF_ApR6_C2 = AperFluxErr[(Nap + 2)*Ncol + RAD_1];
+      catalog->lensing[i]. F_ApR7_C2 = AperFlux   [(Nap + 2)*Ncol + RAD_2];
+      catalog->lensing[i].dF_ApR7_C2 = AperFluxErr[(Nap + 2)*Ncol + RAD_2];
+
+      catalog->lensing[i].detID = catalog->measure[i].detID;
+
+      // XXX set the measure, object, etc ID values here
+      // catalog->lensing[i].objID : set in find_matches_closest.c
+      // catalog->lensing[i].catID : set in find_matches_closest.c
+      // catalog->lensing[i].averef : set in find_matches_closest.c
+      // catalog->lensing[i].imageID : set in FilterStars.c and UpdateImageIDs.c
+
+      Nap += 3;
+    }
+  } else {
+    // PSF values for unconvolve data are undefined ?
+
+    for (int i = 0; i < catalog->Nmeasure; i++) {
+      dvo_lensing_init (&catalog->lensing[i]);
+
       // this is a psf measurement which does not have a radial aperture
+      if (catalog->measure[i].detID < RadID[Nap]) { continue; }
+
+      // this could be a radial aperture which does not have a PSF source, but that is not possible
+      if (catalog->measure[i].detID > RadID[Nap]) {
+	myAbort("radial apertures for source not in psf list? sources out of order?  seems like a bug\n");
+      }
+
+      // EAM 2022.02.17 : here is the comment for the PV3 load:
+      // XXX this is all hard-wired and should make use of the headers. 
+      // psphot cmfs have 5 radial apertures:
+      // array 0, 1, 2, 3, 4
+      // SDSS  3, 4, 5, 6, 7
+
+      // EAM 2022.02.17 : here is the situation for UNIONS DR4:
+      // we have 1 convolution (raw)
+      // for each we have 6 apertures with max radii of (4, 8, 16, 32, 48, 64) pixels = (1, 2, 4, 8, 12, 16) arcsec
+      // I am going to save (4, 16, 32) which have index of (0, 2, 3)
+
+# define RAD_0 0
+# define RAD_1 2
+# define RAD_2 3
+      catalog->lensing[i]. F_ApR5    = AperFlux   [(Nap + 0)*Ncol + RAD_0];
+      catalog->lensing[i].dF_ApR5    = AperFluxErr[(Nap + 0)*Ncol + RAD_0];
+      catalog->lensing[i].sF_ApR5    = AperFluxStd[(Nap + 0)*Ncol + RAD_0];
+      catalog->lensing[i].fF_ApR5    = AperFill   [(Nap + 0)*Ncol + RAD_0];
+				   
+      catalog->lensing[i]. F_ApR6    = AperFlux   [(Nap + 0)*Ncol + RAD_1];
+      catalog->lensing[i].dF_ApR6    = AperFluxErr[(Nap + 0)*Ncol + RAD_1];
+      catalog->lensing[i].sF_ApR6    = AperFluxStd[(Nap + 0)*Ncol + RAD_1];
+      catalog->lensing[i].fF_ApR6    = AperFill   [(Nap + 0)*Ncol + RAD_1];
+				   
+      catalog->lensing[i]. F_ApR7    = AperFlux   [(Nap + 0)*Ncol + RAD_2];
+      catalog->lensing[i].dF_ApR7    = AperFluxErr[(Nap + 0)*Ncol + RAD_2];
+      catalog->lensing[i].sF_ApR7    = AperFluxStd[(Nap + 0)*Ncol + RAD_2];
+      catalog->lensing[i].fF_ApR7    = AperFill   [(Nap + 0)*Ncol + RAD_2];
+
+      catalog->lensing[i].detID = catalog->measure[i].detID;
+
+      // XXX set the measure, object, etc ID values here
+      // catalog->lensing[i].objID : set in find_matches_closest.c
+      // catalog->lensing[i].catID : set in find_matches_closest.c
+      // catalog->lensing[i].averef : set in find_matches_closest.c
+      // catalog->lensing[i].imageID : set in FilterStars.c and UpdateImageIDs.c
+
+      Nap += 1;
     }
-    if (catalog->measure[i].detID > RadID[Nap]) {
-      myAbort("radial apertures for source not in psf list? sources out of order?  seems like a bug\n");
-      // this could be a radial aperture which does not have a PSF source, but that is not possible
-    }
-
-    // confirm the 3 FWHM values:
-    myAssert (fwhmValues[0] == PSFfwhm[Nap+0], "FWHM mismatch %f vs %f", fwhmValues[0], PSFfwhm[Nap+0]);
-    myAssert (fwhmValues[1] == PSFfwhm[Nap+1], "FWHM mismatch %f vs %f", fwhmValues[1], PSFfwhm[Nap+1]);
-    myAssert (fwhmValues[2] == PSFfwhm[Nap+2], "FWHM mismatch %f vs %f", fwhmValues[2], PSFfwhm[Nap+2]);
-
-    // EAM 2022.02.17 : here is the comment for the PV3 load:
-    // XXX this is all hard-wired and should make use of the headers. 
-    // psphot cmfs have 5 radial apertures:
-    // array 0, 1, 2, 3, 4
-    // SDSS  3, 4, 5, 6, 7
-
-    // EAM 2022.02.17 : here is the situation for UNIONS DR3:
-    // we have 3 convolutions (raw, 6", 8")
-    // for each we have 6 apertures with max radii of (4, 8, 16, 32, 48, 64) pixels = (1, 2, 4, 8, 12, 16) arcsec
-    // I am going to save (4, 16, 32) which have index of (0, 2, 3)
-
-    # define RAD_0 0
-    # define RAD_1 2
-    # define RAD_2 3
-    catalog->lensing[i]. F_ApR5    = AperFlux   [(Nap + 0)*Ncol + RAD_0];
-    catalog->lensing[i].dF_ApR5    = AperFluxErr[(Nap + 0)*Ncol + RAD_0];
-    catalog->lensing[i].sF_ApR5    = AperFluxStd[(Nap + 0)*Ncol + RAD_0];
-    catalog->lensing[i].fF_ApR5    = AperFill   [(Nap + 0)*Ncol + RAD_0];
-				   
-    catalog->lensing[i]. F_ApR6    = AperFlux   [(Nap + 0)*Ncol + RAD_1];
-    catalog->lensing[i].dF_ApR6    = AperFluxErr[(Nap + 0)*Ncol + RAD_1];
-    catalog->lensing[i].sF_ApR6    = AperFluxStd[(Nap + 0)*Ncol + RAD_1];
-    catalog->lensing[i].fF_ApR6    = AperFill   [(Nap + 0)*Ncol + RAD_1];
-				   
-    catalog->lensing[i]. F_ApR7    = AperFlux   [(Nap + 0)*Ncol + RAD_2];
-    catalog->lensing[i].dF_ApR7    = AperFluxErr[(Nap + 0)*Ncol + RAD_2];
-    catalog->lensing[i].sF_ApR7    = AperFluxStd[(Nap + 0)*Ncol + RAD_2];
-    catalog->lensing[i].fF_ApR7    = AperFill   [(Nap + 0)*Ncol + RAD_2];
-
-    catalog->lensing[i]. F_ApR5_C1 = AperFlux   [(Nap + 1)*Ncol + RAD_0];
-    catalog->lensing[i].dF_ApR5_C1 = AperFluxErr[(Nap + 1)*Ncol + RAD_0];
-    catalog->lensing[i]. F_ApR6_C1 = AperFlux   [(Nap + 1)*Ncol + RAD_1];
-    catalog->lensing[i].dF_ApR6_C1 = AperFluxErr[(Nap + 1)*Ncol + RAD_1];
-    catalog->lensing[i]. F_ApR7_C1 = AperFlux   [(Nap + 1)*Ncol + RAD_2];
-    catalog->lensing[i].dF_ApR7_C1 = AperFluxErr[(Nap + 1)*Ncol + RAD_2];
-
-    catalog->lensing[i]. F_ApR5_C2 = AperFlux   [(Nap + 2)*Ncol + RAD_0];
-    catalog->lensing[i].dF_ApR5_C2 = AperFluxErr[(Nap + 2)*Ncol + RAD_0];
-    catalog->lensing[i]. F_ApR6_C2 = AperFlux   [(Nap + 2)*Ncol + RAD_1];
-    catalog->lensing[i].dF_ApR6_C2 = AperFluxErr[(Nap + 2)*Ncol + RAD_1];
-    catalog->lensing[i]. F_ApR7_C2 = AperFlux   [(Nap + 2)*Ncol + RAD_2];
-    catalog->lensing[i].dF_ApR7_C2 = AperFluxErr[(Nap + 2)*Ncol + RAD_2];
-
-    catalog->lensing[i].detID = catalog->measure[i].detID;
-
-    // XXX set the measure, object, etc ID values here
-    // catalog->lensing[i].objID : set in find_matches_closest.c
-    // catalog->lensing[i].catID : set in find_matches_closest.c
-    // catalog->lensing[i].averef : set in find_matches_closest.c
-    // catalog->lensing[i].imageID : set in FilterStars.c and UpdateImageIDs.c
-
-    Nap += 3;
   }
   myAssert (Nap == Nrow, "did we go too far???");
Index: /trunk/Ohana/src/addstar/src/args.c
===================================================================
--- /trunk/Ohana/src/addstar/src/args.c	(revision 42820)
+++ /trunk/Ohana/src/addstar/src/args.c	(revision 42821)
@@ -91,4 +91,9 @@
     remove_argument (N, &argc, argv);
     READ_XRAD_DATA = TRUE;
+  }
+  CONVOLVED_APERTURES = FALSE;
+  if ((N = get_argument (argc, argv, "-convolved-ap"))) {
+    remove_argument (N, &argc, argv);
+    CONVOLVED_APERTURES = TRUE;
   }
   DIFF_WITH_INV = FALSE;
@@ -304,4 +309,10 @@
   }
   /* force using single time from PHU */
+  FORCE_SINGLE_TIME = FALSE;
+  if ((N = get_argument (argc, argv, "-force-single-time"))) {
+    FORCE_SINGLE_TIME = TRUE;
+    remove_argument (N, &argc, argv);
+  }
+  /* accept bad header astrometry */
   FORCE_SINGLE_TIME = FALSE;
   if ((N = get_argument (argc, argv, "-force-single-time"))) {
Index: /trunk/Ohana/src/addstar/src/find_matches_closest.c
===================================================================
--- /trunk/Ohana/src/addstar/src/find_matches_closest.c	(revision 42820)
+++ /trunk/Ohana/src/addstar/src/find_matches_closest.c	(revision 42821)
@@ -248,8 +248,27 @@
       /* in UPDATE mode, this value is not saved; use relphot to recalculate */
       if (Nsec > -1) { 
+	if (isGPC1warp(tgtcat[0].measure[Nmeas].photcode)) {
+	  if (FALSE && isnan(tgtcat[0].secfilt[n*Nsecfilt+Nsec].MpsfWrp)) {
+	    tgtcat[0].secfilt[n*Nsecfilt+Nsec].MpsfWrp  = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_PSF);
+	    tgtcat[0].secfilt[n*Nsecfilt+Nsec].MkronWrp = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_KRON);
+	    tgtcat[0].secfilt[n*Nsecfilt+Nsec].MapWrp   = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_APER);
+	  }
+	  goto set_average;
+	}
+	if (isGPC1stack(tgtcat[0].measure[Nmeas].photcode)) {
+	  if (FALSE && isnan(tgtcat[0].secfilt[n*Nsecfilt+Nsec].MpsfStk)) {
+	    tgtcat[0].secfilt[n*Nsecfilt+Nsec].MpsfStk  = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_PSF);
+	    tgtcat[0].secfilt[n*Nsecfilt+Nsec].MkronStk = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_KRON);
+	    tgtcat[0].secfilt[n*Nsecfilt+Nsec].MapStk   = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_APER);
+	  }
+	  goto set_average;
+	}
 	if (isnan(tgtcat[0].secfilt[n*Nsecfilt+Nsec].MpsfChp)) {
-	  tgtcat[0].secfilt[n*Nsecfilt+Nsec].MpsfChp = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_PSF);
-	}
-      }
+	  tgtcat[0].secfilt[n*Nsecfilt+Nsec].MpsfChp  = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_PSF);
+	  tgtcat[0].secfilt[n*Nsecfilt+Nsec].MkronChp = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_KRON);
+	  tgtcat[0].secfilt[n*Nsecfilt+Nsec].MapChp   = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_APER);
+	}
+      }
+    set_average:
 
       /* Nm is updated, but not written out in -update mode (for existing entries)
@@ -352,6 +371,23 @@
       /* in UPDATE mode, this value is not saved; use relphot to recalculate */
       if (Nsec > -1) { 
-	tgtcat[0].secfilt[Nave*Nsecfilt+Nsec].MpsfChp = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_PSF);
-      }
+	if (isGPC1warp(tgtcat[0].measure[Nmeas].photcode)) {
+	  // tgtcat[0].secfilt[Nave*Nsecfilt+Nsec].MpsfWrp  = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_PSF);
+	  // tgtcat[0].secfilt[Nave*Nsecfilt+Nsec].MkronWrp = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_KRON);
+	  // tgtcat[0].secfilt[Nave*Nsecfilt+Nsec].MapWrp   = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_APER);
+	  goto set_average_2;
+	}
+	if (isGPC1stack(tgtcat[0].measure[Nmeas].photcode)) {
+	  // tgtcat[0].secfilt[Nave*Nsecfilt+Nsec].MpsfStk  = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_PSF);
+	  // tgtcat[0].secfilt[Nave*Nsecfilt+Nsec].MkronStk = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_KRON);
+	  // tgtcat[0].secfilt[Nave*Nsecfilt+Nsec].MapStk   = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_APER);
+	  goto set_average_2;
+	}
+	if (isnan(tgtcat[0].secfilt[Nave*Nsecfilt+Nsec].MpsfChp)) {
+	  tgtcat[0].secfilt[Nave*Nsecfilt+Nsec].MpsfChp  = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_PSF);
+	  tgtcat[0].secfilt[Nave*Nsecfilt+Nsec].MkronChp = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_KRON);
+	  tgtcat[0].secfilt[Nave*Nsecfilt+Nsec].MapChp   = PhotCat (&tgtcat[0].measure[Nmeas], MAG_CLASS_APER);
+	}
+      }
+    set_average_2:
 
       Nmeas ++;
Index: /trunk/Ohana/src/addstar/src/photcodes.c
===================================================================
--- /trunk/Ohana/src/addstar/src/photcodes.c	(revision 42821)
+++ /trunk/Ohana/src/addstar/src/photcodes.c	(revision 42821)
@@ -0,0 +1,37 @@
+# include "addstar.h"
+
+// for now (20140710) I need to identify gpc1 & gpc2 stacks explicitly.  generalize in the future
+int isGPC1stack (int photcode) {
+
+  // 11000 : GPC1.g.SkyChip
+  // 11001 : VARIOUS.g.SkyChip (output of xcamera stacks)
+  // 14100 : SIMTEST.g.SkyChip
+  // 31000 : GPC2.g.SkyChip
+  
+  if ((photcode == 11000) || (photcode == 11001) || (photcode == 14100) || (photcode == 31000)) return TRUE; // g-band
+  if ((photcode == 11100) || (photcode == 11101) || (photcode == 14200) || (photcode == 31100)) return TRUE; // r-band
+  if ((photcode == 11200) || (photcode == 11201) || (photcode == 14300) || (photcode == 31200)) return TRUE; // i-band
+  if ((photcode == 11300) || (photcode == 11301) || (photcode == 14400) || (photcode == 31300)) return TRUE; // z-band
+  if ((photcode == 11400) || (photcode == 11401) || (photcode == 14500) || (photcode == 31400)) return TRUE; // y-band
+  if ((photcode == 11500) || (photcode == 11501) || (photcode == 14600) || (photcode == 31500)) return TRUE; // w-band
+
+  return FALSE;
+}
+
+// for now (20140710) I need to identify gpc1 & gpc2 warps explicitly.  generalize in the future
+int isGPC1warp (int photcode) {
+
+  // 12000 : GPC1.g.ForcedWarp
+  // 15100 : SIMTEST.g.ForcedWarp
+  // 32000 : GPC2.g.ForcedWarp
+
+  if ((photcode == 12000) || (photcode == 15100) || (photcode == 32000)) return TRUE; // g-band
+  if ((photcode == 12100) || (photcode == 15200) || (photcode == 32100)) return TRUE; // r-band
+  if ((photcode == 12200) || (photcode == 15300) || (photcode == 32200)) return TRUE; // i-band
+  if ((photcode == 12300) || (photcode == 15400) || (photcode == 32300)) return TRUE; // z-band
+  if ((photcode == 12400) || (photcode == 15500) || (photcode == 32400)) return TRUE; // y-band
+  if ((photcode == 12500) || (photcode == 15600) || (photcode == 32500)) return TRUE; // w-band
+
+  return FALSE;
+}
+
Index: /trunk/Ohana/src/dvomerge/src/dvomergeUpdate_catalogs.c
===================================================================
--- /trunk/Ohana/src/dvomerge/src/dvomergeUpdate_catalogs.c	(revision 42820)
+++ /trunk/Ohana/src/dvomerge/src/dvomergeUpdate_catalogs.c	(revision 42821)
@@ -2,4 +2,5 @@
 # define DEBUG 1
 # define MACHINE_GROUPS 1
+# define MEMCHECK_VERBOSE 0
 
 // in parallel mode, the target database may be distributed, while the input database is
Index: /trunk/Ohana/src/dvomerge/src/merge_catalogs_old.c
===================================================================
--- /trunk/Ohana/src/dvomerge/src/merge_catalogs_old.c	(revision 42820)
+++ /trunk/Ohana/src/dvomerge/src/merge_catalogs_old.c	(revision 42821)
@@ -497,4 +497,5 @@
       int outputIndex;
       if (secfiltMap) {
+	if (secfiltMap[j] < 0) continue;  // skip secfilt entries from input that are not in the output
         outputIndex = (Nave * NsecfiltOut) + secfiltMap[j];
       } else {
Index: /trunk/Ohana/src/getstar/include/getstar.h
===================================================================
--- /trunk/Ohana/src/getstar/include/getstar.h	(revision 42820)
+++ /trunk/Ohana/src/getstar/include/getstar.h	(revision 42821)
@@ -35,4 +35,7 @@
 PhotCode *photcode;
 
+float EpochMJD;
+time_t EpochUnix;
+
 int  args             	     PROTO((int argc, char **argv));
 int  ConfigInit       	     PROTO((int *argc, char **argv));
Index: /trunk/Ohana/src/getstar/src/args.c
===================================================================
--- /trunk/Ohana/src/getstar/src/args.c	(revision 42820)
+++ /trunk/Ohana/src/getstar/src/args.c	(revision 42821)
@@ -37,4 +37,13 @@
     VERBOSE = TRUE;
     remove_argument (N, &argc, argv);
+  }
+
+  EpochUnix = 0;
+  EpochMJD = NAN;
+  if ((N = get_argument (argc, argv, "-epoch-mjd"))) {
+    remove_argument (N, &argc, argv);
+    EpochMJD = atof (argv[N]);
+    remove_argument (N, &argc, argv);
+    EpochUnix = ohana_mjd_to_sec (EpochMJD);
   }
 
Index: /trunk/Ohana/src/getstar/src/write_getstar_ps1_dev_0.c
===================================================================
--- /trunk/Ohana/src/getstar/src/write_getstar_ps1_dev_0.c	(revision 42820)
+++ /trunk/Ohana/src/getstar/src/write_getstar_ps1_dev_0.c	(revision 42821)
@@ -45,4 +45,16 @@
     output[i].R        = average[i].R;
     output[i].D        = average[i].D;
+    if (isfinite(EpochMJD) && isfinite(average[i].uR) && isfinite(average[i].uD)) {
+      // RA(epoch) = RA(mean) + uR*(t - Tmean)/cos(dec)
+      // XXX how does this behave near dec = 90?
+      // double dT = (EpochUnix - average[i].Tmean) / (86400*365.25);
+      // XXX refcat 20220324.v0 does not have Tmean correctly set to 2016.0 = MJD 57388.0
+      // NOTE average[i].Tmean is in UNIX, but here I am using the MJD of the Gaia DR3 reference epoch
+      double dT = (EpochMJD - 57388.0) / 365.25;
+      double dR = average[i].uR * dT / cos(RAD_DEG*average[i].D) / 3600.0;
+      double dD = average[i].uD * dT / 3600.0;
+      output[i].R += dR;
+      output[i].D += dD;
+    }
 
     output[i].code     = average[i].flags;
Index: /trunk/Ohana/src/kapa2/Makefile
===================================================================
--- /trunk/Ohana/src/kapa2/Makefile	(revision 42820)
+++ /trunk/Ohana/src/kapa2/Makefile	(revision 42821)
@@ -10,5 +10,9 @@
 SRC	=	$(HOME)/src
 INC	=	$(HOME)/include
+DATA    =       $(DESTDATA)/kapa
 include ../../Makefile.Common
+
+%.c : %.c.in
+	sed "s|@DATADIR@|$(DATA)|" $< > $@
 
 # programs may add their own internal requirements here
@@ -21,5 +25,5 @@
 
 kapa: $(BIN)/kapa.$(ARCH)
-install: $(DESTBIN)/kapa
+install: $(DESTBIN)/kapa cmaps
 
 PDF = \
@@ -100,10 +104,17 @@
 $(SRC)/CheckButtons.$(ARCH).o             $(SRC)/InvertButton.$(ARCH).o       \
 $(SRC)/UpdatePointer.$(ARCH).o            $(SRC)/JPEGit24.$(ARCH).o           \
-$(SRC)/ButtonFunctions.$(ARCH).o    \
-$(SRC)/SetChannel.$(ARCH).o         \
+$(SRC)/ButtonFunctions.$(ARCH).o          $(SRC)/FindColormap.$(ARCH).o       \
 $(SRC)/SetColorScale.$(ARCH).o            $(SRC)/ColorCube.$(ARCH).o          \
-$(SRC)/ColorHistogram.$(ARCH).o           $(SRC)/CreateWide.$(ARCH).o
+$(SRC)/ColorHistogram.$(ARCH).o           $(SRC)/CreateWide.$(ARCH).o         \
+$(SRC)/SetChannel.$(ARCH).o
 
 OBJ  =  $(KAPA) $(PDF) $(BDRAW) $(PSFILES)
+
+cmaps: 
+	@echo "installing colormaps for kapa"
+	@if [ ! -d $(DATA)/colormaps ]; then mkdir -p $(DATA)/colormaps; fi
+	@if [   -d $(HOME)/colormaps ]; then rm -f $(HOME)/colormaps/*~; fi
+	@if [   -d $(HOME)/colormaps ]; then rm -f $(HOME)/colormaps/#*; fi
+	@if [   -d $(HOME)/colormaps ]; then for i in `find $(HOME)/colormaps -name CVS -prune -o -type f -print`; do cp -f $$i $(DATA)/colormaps; done; fi
 
 # dependancy rules for include files ########################
@@ -116,2 +127,4 @@
 
 $(BIN)/kapa.$(ARCH): $(OBJ)
+
+.PRECIOUS: $(SRC)/FindColormap.c
Index: /trunk/Ohana/src/kapa2/colormaps/brewer.ygb.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/brewer.ygb.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/brewer.ygb.cm	(revision 42821)
@@ -0,0 +1,11 @@
+0.00000, 1.00000, 1.00000, 1.00000
+0.09091, 0.99609, 0.99609, 0.84766
+0.18182, 0.92578, 0.96875, 0.69141
+0.27273, 0.77734, 0.91016, 0.70312
+0.36364, 0.49609, 0.80078, 0.73047
+0.45455, 0.25391, 0.71094, 0.76562
+0.54545, 0.11328, 0.56641, 0.75000
+0.63636, 0.13281, 0.36719, 0.65625
+0.72727, 0.14453, 0.20312, 0.57812
+0.81818, 0.03125, 0.11328, 0.34375
+1.00000, 0.00000, 0.00000, 0.00000
Index: /trunk/Ohana/src/kapa2/colormaps/brewer.ygb.rev.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/brewer.ygb.rev.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/brewer.ygb.rev.cm	(revision 42821)
@@ -0,0 +1,13 @@
+0.00000, 0.00000, 0.00000, 0.00000
+0.09091, 0.03125, 0.11328, 0.34375
+0.18182, 0.14453, 0.20312, 0.57812
+0.27273, 0.13281, 0.36719, 0.65625
+0.36364, 0.11328, 0.56641, 0.75000
+0.45455, 0.25391, 0.71094, 0.76562
+0.54545, 0.49609, 0.80078, 0.73047
+0.75000, 0.77734, 0.91016, 0.70312
+0.85000, 0.92578, 0.96875, 0.69141
+0.95000, 0.99609, 0.99609, 0.84766
+1.00000, 0.99609, 0.99609, 0.95000
+# 1.00000, 1.00000, 1.00000, 1.00000
+# 1.00000, 0.99609, 0.99609, 0.84766
Index: /trunk/Ohana/src/kapa2/colormaps/cividis.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/cividis.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/cividis.cm	(revision 42821)
@@ -0,0 +1,257 @@
+# https://arxiv.org/abs/1712.01662
+0.004 0.000 0.125 0.297
+0.008 0.000 0.125 0.305
+0.012 0.000 0.129 0.312
+0.016 0.000 0.133 0.316
+0.020 0.000 0.137 0.324
+0.023 0.000 0.137 0.332
+0.027 0.000 0.141 0.336
+0.031 0.000 0.145 0.344
+0.035 0.000 0.148 0.352
+0.039 0.000 0.148 0.355
+0.043 0.000 0.152 0.363
+0.047 0.000 0.156 0.371
+0.051 0.000 0.156 0.379
+0.055 0.000 0.160 0.387
+0.059 0.000 0.164 0.391
+0.062 0.000 0.164 0.398
+0.066 0.000 0.168 0.406
+0.070 0.000 0.172 0.414
+0.074 0.000 0.176 0.422
+0.078 0.000 0.176 0.426
+0.082 0.000 0.180 0.430
+0.086 0.000 0.180 0.434
+0.090 0.000 0.184 0.434
+0.094 0.000 0.184 0.434
+0.098 0.000 0.188 0.434
+0.102 0.000 0.191 0.434
+0.105 0.000 0.191 0.434
+0.109 0.000 0.195 0.430
+0.113 0.000 0.199 0.430
+0.117 0.000 0.203 0.430
+0.121 0.000 0.203 0.430
+0.125 0.004 0.207 0.430
+0.129 0.023 0.211 0.430
+0.133 0.039 0.215 0.426
+0.137 0.055 0.215 0.426
+0.141 0.070 0.219 0.426
+0.145 0.082 0.223 0.426
+0.148 0.090 0.223 0.426
+0.152 0.102 0.227 0.422
+0.156 0.109 0.230 0.422
+0.160 0.117 0.234 0.422
+0.164 0.125 0.234 0.422
+0.168 0.133 0.238 0.422
+0.172 0.141 0.242 0.422
+0.176 0.148 0.242 0.422
+0.180 0.152 0.246 0.422
+0.184 0.160 0.250 0.418
+0.188 0.168 0.254 0.418
+0.191 0.172 0.254 0.418
+0.195 0.180 0.258 0.418
+0.199 0.184 0.262 0.418
+0.203 0.191 0.266 0.418
+0.207 0.195 0.266 0.418
+0.211 0.199 0.270 0.418
+0.215 0.207 0.273 0.418
+0.219 0.211 0.273 0.418
+0.223 0.215 0.277 0.418
+0.227 0.219 0.281 0.418
+0.230 0.227 0.285 0.418
+0.234 0.230 0.285 0.418
+0.238 0.234 0.289 0.418
+0.242 0.238 0.293 0.418
+0.246 0.242 0.293 0.418
+0.250 0.250 0.297 0.418
+0.254 0.254 0.301 0.418
+0.258 0.258 0.305 0.418
+0.262 0.262 0.305 0.418
+0.266 0.266 0.309 0.418
+0.270 0.270 0.312 0.418
+0.273 0.273 0.312 0.418
+0.277 0.277 0.316 0.418
+0.281 0.281 0.320 0.418
+0.285 0.285 0.324 0.418
+0.289 0.289 0.324 0.418
+0.293 0.293 0.328 0.418
+0.297 0.297 0.332 0.418
+0.301 0.301 0.332 0.418
+0.305 0.305 0.336 0.418
+0.309 0.309 0.340 0.422
+0.312 0.312 0.344 0.422
+0.316 0.316 0.344 0.422
+0.320 0.320 0.348 0.422
+0.324 0.324 0.352 0.422
+0.328 0.328 0.352 0.422
+0.332 0.332 0.355 0.422
+0.336 0.336 0.359 0.422
+0.340 0.340 0.363 0.426
+0.344 0.344 0.363 0.426
+0.348 0.348 0.367 0.426
+0.352 0.352 0.371 0.426
+0.355 0.355 0.371 0.426
+0.359 0.359 0.375 0.426
+0.363 0.363 0.379 0.430
+0.367 0.367 0.383 0.430
+0.371 0.371 0.383 0.430
+0.375 0.371 0.387 0.430
+0.379 0.375 0.391 0.430
+0.383 0.379 0.395 0.434
+0.387 0.383 0.395 0.434
+0.391 0.387 0.398 0.434
+0.395 0.391 0.402 0.434
+0.398 0.395 0.402 0.434
+0.402 0.398 0.406 0.438
+0.406 0.402 0.410 0.438
+0.410 0.406 0.414 0.438
+0.414 0.406 0.414 0.438
+0.418 0.410 0.418 0.441
+0.422 0.414 0.422 0.441
+0.426 0.418 0.426 0.441
+0.430 0.422 0.426 0.445
+0.434 0.426 0.430 0.445
+0.438 0.430 0.434 0.445
+0.441 0.434 0.434 0.445
+0.445 0.434 0.438 0.449
+0.449 0.438 0.441 0.449
+0.453 0.441 0.445 0.449
+0.457 0.445 0.445 0.453
+0.461 0.449 0.449 0.453
+0.465 0.453 0.453 0.457
+0.469 0.457 0.457 0.457
+0.473 0.457 0.457 0.457
+0.477 0.461 0.461 0.461
+0.480 0.465 0.465 0.461
+0.484 0.469 0.469 0.461
+0.488 0.473 0.469 0.465
+0.492 0.477 0.473 0.465
+0.496 0.480 0.477 0.465
+0.500 0.480 0.480 0.469
+0.504 0.484 0.480 0.469
+0.508 0.488 0.484 0.469
+0.512 0.492 0.488 0.469
+0.516 0.496 0.492 0.469
+0.520 0.500 0.492 0.469
+0.523 0.504 0.496 0.469
+0.527 0.508 0.500 0.469
+0.531 0.512 0.504 0.469
+0.535 0.516 0.504 0.469
+0.539 0.520 0.508 0.469
+0.543 0.523 0.512 0.469
+0.547 0.527 0.516 0.469
+0.551 0.531 0.520 0.469
+0.555 0.535 0.520 0.469
+0.559 0.539 0.523 0.469
+0.562 0.543 0.527 0.469
+0.566 0.547 0.531 0.469
+0.570 0.551 0.531 0.469
+0.574 0.555 0.535 0.469
+0.578 0.559 0.539 0.469
+0.582 0.562 0.543 0.469
+0.586 0.566 0.547 0.469
+0.590 0.570 0.547 0.469
+0.594 0.574 0.551 0.469
+0.598 0.578 0.555 0.469
+0.602 0.582 0.559 0.469
+0.605 0.586 0.559 0.465
+0.609 0.590 0.562 0.465
+0.613 0.594 0.566 0.465
+0.617 0.598 0.570 0.465
+0.621 0.602 0.574 0.465
+0.625 0.605 0.574 0.465
+0.629 0.609 0.578 0.465
+0.633 0.613 0.582 0.465
+0.637 0.617 0.586 0.461
+0.641 0.621 0.590 0.461
+0.645 0.625 0.594 0.461
+0.648 0.629 0.594 0.461
+0.652 0.633 0.598 0.461
+0.656 0.637 0.602 0.457
+0.660 0.641 0.605 0.457
+0.664 0.645 0.609 0.457
+0.668 0.648 0.609 0.457
+0.672 0.652 0.613 0.457
+0.676 0.656 0.617 0.453
+0.680 0.660 0.621 0.453
+0.684 0.664 0.625 0.453
+0.688 0.668 0.629 0.453
+0.691 0.672 0.629 0.449
+0.695 0.676 0.633 0.449
+0.699 0.680 0.637 0.449
+0.703 0.684 0.641 0.449
+0.707 0.688 0.645 0.445
+0.711 0.691 0.648 0.445
+0.715 0.695 0.648 0.445
+0.719 0.703 0.652 0.441
+0.723 0.707 0.656 0.441
+0.727 0.711 0.660 0.441
+0.730 0.715 0.664 0.438
+0.734 0.719 0.668 0.438
+0.738 0.723 0.668 0.438
+0.742 0.727 0.672 0.434
+0.746 0.730 0.676 0.434
+0.750 0.734 0.680 0.430
+0.754 0.738 0.684 0.430
+0.758 0.742 0.688 0.430
+0.762 0.746 0.691 0.426
+0.766 0.750 0.691 0.426
+0.770 0.754 0.695 0.422
+0.773 0.758 0.699 0.422
+0.777 0.762 0.703 0.422
+0.781 0.770 0.707 0.418
+0.785 0.773 0.711 0.418
+0.789 0.777 0.715 0.414
+0.793 0.781 0.719 0.414
+0.797 0.785 0.719 0.410
+0.801 0.789 0.723 0.410
+0.805 0.793 0.727 0.406
+0.809 0.797 0.730 0.406
+0.812 0.801 0.734 0.402
+0.816 0.805 0.738 0.402
+0.820 0.812 0.742 0.398
+0.824 0.816 0.746 0.398
+0.828 0.820 0.750 0.395
+0.832 0.824 0.750 0.395
+0.836 0.828 0.754 0.391
+0.840 0.832 0.758 0.387
+0.844 0.836 0.762 0.387
+0.848 0.840 0.766 0.383
+0.852 0.844 0.770 0.379
+0.855 0.848 0.773 0.379
+0.859 0.855 0.777 0.375
+0.863 0.859 0.781 0.375
+0.867 0.863 0.785 0.371
+0.871 0.867 0.789 0.367
+0.875 0.871 0.793 0.363
+0.879 0.875 0.793 0.363
+0.883 0.879 0.797 0.359
+0.887 0.887 0.801 0.355
+0.891 0.891 0.805 0.355
+0.895 0.895 0.809 0.352
+0.898 0.898 0.812 0.348
+0.902 0.902 0.816 0.344
+0.906 0.906 0.820 0.340
+0.910 0.910 0.824 0.336
+0.914 0.918 0.828 0.336
+0.918 0.922 0.832 0.332
+0.922 0.926 0.836 0.328
+0.926 0.930 0.840 0.324
+0.930 0.934 0.844 0.320
+0.934 0.938 0.848 0.316
+0.938 0.941 0.852 0.312
+0.941 0.949 0.855 0.309
+0.945 0.953 0.859 0.305
+0.949 0.957 0.863 0.301
+0.953 0.961 0.867 0.297
+0.957 0.965 0.871 0.293
+0.961 0.973 0.875 0.285
+0.965 0.977 0.875 0.281
+0.969 0.980 0.879 0.277
+0.973 0.984 0.883 0.273
+0.977 0.988 0.887 0.270
+0.980 0.996 0.891 0.262
+0.984 0.996 0.895 0.258
+0.988 0.996 0.898 0.258
+0.992 0.996 0.902 0.262
+0.996 0.996 0.906 0.266
+1.000 0.996 0.910 0.270
Index: /trunk/Ohana/src/kapa2/colormaps/colormap.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/colormap.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/colormap.cm	(revision 42821)
@@ -0,0 +1,3 @@
+0.00 1.0 1.0 1.0
+0.50 0.5 0.5 1.0
+1.00 0.0 0.0 1.0
Index: /trunk/Ohana/src/kapa2/colormaps/div.lanl.blueorange.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/div.lanl.blueorange.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/div.lanl.blueorange.cm	(revision 42821)
@@ -0,0 +1,51 @@
+# LANL Asymmetric Blue/Orange Divergent W5
+# original order is rgb
+# NaN recommendation: r="0.250004" g="0" b="0"
+# 0.020833 0.349020  0.129412  0.000000
+0.000000 0.349020  0.129412  0.000000
+0.045000 0.400000  0.101961  0.003923
+0.069167 0.470588  0.090196  0.015686
+0.093333 0.549020  0.070588  0.027451
+0.117500 0.619608  0.043137  0.062745
+0.141667 0.690196  0.062745  0.125490
+0.165833 0.741176  0.074509  0.184314
+0.190000 0.788235  0.094117  0.266667
+0.214167 0.811765  0.113725  0.345098
+0.238333 0.831373  0.133333  0.411765
+0.262500 0.850980  0.145098  0.474510
+0.286667 0.870588  0.156863  0.549020
+0.310833 0.878431  0.168627  0.619608
+0.335000 0.890196  0.196078  0.658824
+0.359167 0.909804  0.235294  0.717647
+0.383333 0.929412  0.278431  0.776471
+0.403333 0.949020  0.321569  0.823529
+0.425833 0.968627  0.407843  0.874510
+0.450000 0.980392  0.509804  0.917647
+0.475000 0.988235  0.643137  0.956863
+#0.488333 0.992157  0.713725  0.964706
+#0.503333 0.988235  0.870588  0.980392
+# 0.504167 1.000000  1.000000  1.000000
+0.505000 0.913725  0.937255  0.988235
+0.520000 0.827451  0.886275  0.980392
+0.534167 0.764706  0.866667  0.980392
+0.549167 0.658824  0.843137  0.980392
+0.565833 0.572549  0.835294  0.964706
+0.589167 0.423529  0.874510  0.941176
+0.606667 0.262745  0.862745  0.901961
+0.630000 0.070588  0.870588  0.854902
+0.650833 0.050980  0.850980  0.800000
+0.680000 0.023529  0.831373  0.709804
+0.710000 0.031373  0.811765  0.615686
+0.745833 0.031373  0.788235  0.537255
+0.770000 0.039216  0.768627  0.466667
+0.794167 0.050980  0.741176  0.396078
+0.818333 0.054902  0.709804  0.317647
+0.842500 0.054902  0.678431  0.243137
+0.866667 0.043137  0.639216  0.164706
+0.890833 0.031373  0.600000  0.098039
+0.915000 0.039216  0.560784  0.039216
+0.939167 0.105882  0.509804  0.050980
+0.963333 0.113725  0.450980  0.023529
+1.000000 0.125490  0.380392  0.000000
+
+# 0.987500 0.125490  0.380392  0.000000
Index: /trunk/Ohana/src/kapa2/colormaps/div.redblack.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/div.redblack.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/div.redblack.cm	(revision 42821)
@@ -0,0 +1,19 @@
+# create F 0 1.1 {1/11}
+# vlist B  31  43  77 130 199 255 224 186 135  77  26
+# vlist R 103 178 214 244 253 255 224 186 135  77  26
+# vlist G   0  24  96 165 219 255 224 186 135  77  26
+# set r = R / 256
+# set g = G / 256
+# set b = B / 256
+# print F r b g
+0.000000 0.402344 0.121094 0.000000 
+0.100000 0.695312 0.167969 0.093750 
+0.200000 0.835938 0.300781 0.375000 
+0.300000 0.953125 0.507812 0.644531 
+0.400000 0.988281 0.777344 0.855469 
+0.500000 0.996094 0.996094 0.996094 
+0.600000 0.875000 0.875000 0.875000 
+0.700000 0.726562 0.726562 0.726562 
+0.800000 0.527344 0.527344 0.527344 
+0.900000 0.300781 0.300781 0.300781 
+1.000000 0.101562 0.101562 0.101562 
Index: /trunk/Ohana/src/kapa2/colormaps/div.redblue.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/div.redblue.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/div.redblue.cm	(revision 42821)
@@ -0,0 +1,11 @@
+0.000000 0.402344 0.121094 0.000000 
+0.100000 0.695312 0.167969 0.093750 
+0.200000 0.835938 0.300781 0.375000 
+0.300000 0.953125 0.507812 0.644531 
+0.400000 0.988281 0.777344 0.855469 
+0.500000 0.964844 0.964844 0.964844 
+0.600000 0.816406 0.937500 0.894531 
+0.700000 0.570312 0.867188 0.769531 
+0.800000 0.261719 0.761719 0.574219 
+0.900000 0.128906 0.671875 0.398438 
+1.000000 0.019531 0.378906 0.187500 
Index: /trunk/Ohana/src/kapa2/colormaps/fake_parula.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/fake_parula.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/fake_parula.cm	(revision 42821)
@@ -0,0 +1,256 @@
+ 0.26710521,  0.03311059,  0.6188155 
+ 0.26493929,  0.04780926,  0.62261795
+ 0.26260545,  0.06084214,  0.62619176
+ 0.26009691,  0.07264411,  0.62951561
+ 0.25740785,  0.08360391,  0.63256745
+ 0.25453369,  0.09395358,  0.63532497
+ 0.25147146,  0.10384228,  0.6377661 
+ 0.24822014,  0.11337029,  0.6398697 
+ 0.24478105,  0.12260661,  0.64161629
+ 0.24115816,  0.131599  ,  0.6429888 
+ 0.23735836,  0.14038009,  0.64397346
+ 0.23339166,  0.14897137,  0.64456048
+ 0.22927127,  0.15738602,  0.64474476
+ 0.22501278,  0.16563165,  0.64452595
+ 0.22063349,  0.17371215,  0.64390834
+ 0.21616055,  0.18162302,  0.64290515
+ 0.21161851,  0.18936156,  0.64153295
+ 0.20703353,  0.19692415,  0.63981287
+ 0.20243273,  0.20430706,  0.63776986
+ 0.19784363,  0.211507  ,  0.63543183
+ 0.19329361,  0.21852157,  0.63282872
+ 0.18880937,  0.2253495 ,  0.62999156
+ 0.18442119,  0.23198815,  0.62695569
+ 0.18014936,  0.23844124,  0.62374886
+ 0.17601569,  0.24471172,  0.62040016
+ 0.17204028,  0.25080356,  0.61693715
+ 0.16824123,  0.25672163,  0.6133854 
+ 0.16463462,  0.26247158,  0.60976836
+ 0.16123449,  0.26805963,  0.60610723
+ 0.15805279,  0.27349243,  0.60242099
+ 0.15509948,  0.27877688,  0.59872645
+ 0.15238249,  0.28392004,  0.59503836
+ 0.14990781,  0.28892902,  0.59136956
+ 0.14767951,  0.29381086,  0.58773113
+ 0.14569979,  0.29857245,  0.58413255
+ 0.1439691 ,  0.30322055,  0.58058191
+ 0.14248613,  0.30776167,  0.57708599
+ 0.14124797,  0.31220208,  0.57365049
+ 0.14025018,  0.31654779,  0.57028011
+ 0.13948691,  0.32080454,  0.5669787 
+ 0.13895174,  0.32497744,  0.56375063
+ 0.13863958,  0.32907012,  0.56060453
+ 0.138537  ,  0.3330895 ,  0.55753513
+ 0.13863384,  0.33704026,  0.55454374
+ 0.13891931,  0.34092684,  0.55163126
+ 0.13938212,  0.34475344,  0.54879827
+ 0.14001061,  0.34852402,  0.54604503
+ 0.14079292,  0.35224233,  0.54337156
+ 0.14172091,  0.35590982,  0.54078769
+ 0.14277848,  0.35953205,  0.53828312
+ 0.14395358,  0.36311234,  0.53585661
+ 0.1452346 ,  0.36665374,  0.5335074 
+ 0.14661019,  0.3701591 ,  0.5312346 
+ 0.14807104,  0.37363011,  0.52904278
+ 0.1496059 ,  0.3770697 ,  0.52692951
+ 0.15120289,  0.3804813 ,  0.52488853
+ 0.15285214,  0.38386729,  0.52291854
+ 0.15454421,  0.38722991,  0.52101815
+ 0.15627225,  0.39056998,  0.5191937 
+ 0.15802555,  0.39389087,  0.5174364 
+ 0.15979549,  0.39719482,  0.51574311
+ 0.16157425,  0.40048375,  0.51411214
+ 0.16335571,  0.40375871,  0.51254622
+ 0.16513234,  0.40702178,  0.51104174
+ 0.1668964 ,  0.41027528,  0.50959299
+ 0.16864151,  0.41352084,  0.50819797
+ 0.17036277,  0.41675941,  0.50685814
+ 0.1720542 ,  0.41999269,  0.50557008
+ 0.17370932,  0.42322271,  0.50432818
+ 0.17532301,  0.42645082,  0.50313007
+ 0.17689176,  0.42967776,  0.50197686
+ 0.17841013,  0.43290523,  0.5008633 
+ 0.17987314,  0.43613477,  0.49978492
+ 0.18127676,  0.43936752,  0.49873901
+ 0.18261885,  0.44260392,  0.49772638
+ 0.18389409,  0.44584578,  0.49673978
+ 0.18509911,  0.44909409,  0.49577605
+ 0.18623135,  0.4523496 ,  0.494833  
+ 0.18728844,  0.45561305,  0.49390803
+ 0.18826671,  0.45888565,  0.49299567
+ 0.18916393,  0.46216809,  0.49209268
+ 0.18997879,  0.46546084,  0.49119678
+ 0.19070881,  0.46876472,  0.49030328
+ 0.19135221,  0.47208035,  0.48940827
+ 0.19190791,  0.47540815,  0.48850845
+ 0.19237491,  0.47874852,  0.4876002 
+ 0.19275204,  0.48210192,  0.48667935
+ 0.19303899,  0.48546858,  0.48574251
+ 0.19323526,  0.48884877,  0.48478573
+ 0.19334062,  0.49224271,  0.48380506
+ 0.19335574,  0.49565037,  0.4827974 
+ 0.19328143,  0.49907173,  0.48175948
+ 0.19311664,  0.50250719,  0.48068559
+ 0.192864  ,  0.50595628,  0.47957408
+ 0.19252521,  0.50941877,  0.47842186
+ 0.19210087,  0.51289469,  0.47722441
+ 0.19159194,  0.516384  ,  0.47597744
+ 0.19100267,  0.51988593,  0.47467988
+ 0.19033595,  0.52340005,  0.47332894
+ 0.18959113,  0.5269267 ,  0.47191795
+ 0.18877336,  0.530465  ,  0.47044603
+ 0.18788765,  0.53401416,  0.46891178
+ 0.18693822,  0.53757359,  0.46731272
+ 0.18592276,  0.54114404,  0.46563962
+ 0.18485204,  0.54472367,  0.46389595
+ 0.18373148,  0.5483118 ,  0.46207951
+ 0.18256585,  0.55190791,  0.4601871 
+ 0.18135481,  0.55551253,  0.45821002
+ 0.18011172,  0.55912361,  0.45615277
+ 0.17884392,  0.56274038,  0.45401341
+ 0.17755858,  0.56636217,  0.45178933
+ 0.17625543,  0.56998972,  0.44946971
+ 0.174952  ,  0.57362064,  0.44706119
+ 0.17365805,  0.57725408,  0.44456198
+ 0.17238403,  0.58088916,  0.4419703 
+ 0.17113321,  0.58452637,  0.43927576
+ 0.1699221 ,  0.58816399,  0.43648119
+ 0.1687662 ,  0.5918006 ,  0.43358772
+ 0.16767908,  0.59543526,  0.43059358
+ 0.16667511,  0.59906699,  0.42749697
+ 0.16575939,  0.60269653,  0.42428344
+ 0.16495764,  0.6063212 ,  0.42096245
+ 0.16428695,  0.60993988,  0.41753246
+ 0.16376481,  0.61355147,  0.41399151
+ 0.16340924,  0.61715487,  0.41033757
+ 0.16323549,  0.62074951,  0.40656329
+ 0.16326148,  0.62433443,  0.40266378
+ 0.16351136,  0.62790748,  0.39864431
+ 0.16400433,  0.63146734,  0.39450263
+ 0.16475937,  0.63501264,  0.39023638
+ 0.16579502,  0.63854196,  0.38584309
+ 0.16712921,  0.64205381,  0.38132023
+ 0.168779  ,  0.64554661,  0.37666513
+ 0.17075915,  0.64901912,  0.37186962
+ 0.17308572,  0.65246934,  0.36693299
+ 0.1757732 ,  0.65589512,  0.36185643
+ 0.17883344,  0.65929449,  0.3566372 
+ 0.18227669,  0.66266536,  0.35127251
+ 0.18611159,  0.66600553,  0.34575959
+ 0.19034516,  0.66931265,  0.34009571
+ 0.19498285,  0.67258423,  0.3342782 
+ 0.20002863,  0.67581761,  0.32830456
+ 0.20548509,  0.67900997,  0.3221725 
+ 0.21135348,  0.68215834,  0.31587999
+ 0.2176339 ,  0.68525954,  0.30942543
+ 0.22432532,  0.68831023,  0.30280771
+ 0.23142568,  0.69130688,  0.29602636
+ 0.23893914,  0.69424565,  0.28906643
+ 0.2468574 ,  0.69712255,  0.28194103
+ 0.25517514,  0.69993351,  0.27465372
+ 0.26388625,  0.70267437,  0.26720869
+ 0.27298333,  0.70534087,  0.25961196
+ 0.28246016,  0.70792854,  0.25186761
+ 0.29232159,  0.71043184,  0.2439642 
+ 0.30253943,  0.71284765,  0.23594089
+ 0.31309875,  0.71517209,  0.22781515
+ 0.32399522,  0.71740028,  0.21959115
+ 0.33520729,  0.71952906,  0.21129816
+ 0.3467003 ,  0.72155723,  0.20298257
+ 0.35846225,  0.72348143,  0.19466318
+ 0.3704552 ,  0.72530195,  0.18639333
+ 0.38264126,  0.72702007,  0.17822762
+ 0.39499483,  0.72863609,  0.17020921
+ 0.40746591,  0.73015499,  0.1624122 
+ 0.42001969,  0.73158058,  0.15489659
+ 0.43261504,  0.73291878,  0.14773267
+ 0.44521378,  0.73417623,  0.14099043
+ 0.45777768,  0.73536072,  0.13474173
+ 0.47028295,  0.73647823,  0.1290455 
+ 0.48268544,  0.73753985,  0.12397794
+ 0.49497773,  0.73854983,  0.11957878
+ 0.5071369 ,  0.73951621,  0.11589589
+ 0.51913764,  0.74044827,  0.11296861
+ 0.53098624,  0.74134823,  0.11080237
+ 0.5426701 ,  0.74222288,  0.10940411
+ 0.55417235,  0.74308049,  0.10876749
+ 0.56550904,  0.74392086,  0.10885609
+ 0.57667994,  0.74474781,  0.10963233
+ 0.58767906,  0.74556676,  0.11105089
+ 0.59850723,  0.74638125,  0.1130567 
+ 0.609179  ,  0.74719067,  0.11558918
+ 0.61969877,  0.74799703,  0.11859042
+ 0.63007148,  0.74880206,  0.12200388
+ 0.64030249,  0.74960714,  0.12577596
+ 0.65038997,  0.75041586,  0.12985641
+ 0.66034774,  0.75122659,  0.1342004 
+ 0.67018264,  0.75203968,  0.13876817
+ 0.67990043,  0.75285567,  0.14352456
+ 0.68950682,  0.75367492,  0.14843886
+ 0.69900745,  0.75449768,  0.15348445
+ 0.70840781,  0.75532408,  0.15863839
+ 0.71771325,  0.75615416,  0.16388098
+ 0.72692898,  0.75698787,  0.1691954 
+ 0.73606001,  0.75782508,  0.17456729
+ 0.74511119,  0.75866562,  0.17998443
+ 0.75408719,  0.75950924,  0.18543644
+ 0.76299247,  0.76035568,  0.19091446
+ 0.77183123,  0.76120466,  0.19641095
+ 0.78060815,  0.76205561,  0.20191973
+ 0.78932717,  0.76290815,  0.20743538
+ 0.79799213,  0.76376186,  0.21295324
+ 0.8066067 ,  0.76461631,  0.21846931
+ 0.81517444,  0.76547101,  0.22398014
+ 0.82369877,  0.76632547,  0.2294827 
+ 0.832183  ,  0.7671792 ,  0.2349743 
+ 0.8406303 ,  0.76803167,  0.24045248
+ 0.84904371,  0.76888236,  0.24591492
+ 0.85742615,  0.76973076,  0.25135935
+ 0.86578037,  0.77057636,  0.25678342
+ 0.87410891,  0.77141875,  0.2621846 
+ 0.88241406,  0.77225757,  0.26755999
+ 0.89070781,  0.77308772,  0.27291122
+ 0.89898836,  0.77391069,  0.27823228
+ 0.90725475,  0.77472764,  0.28351668
+ 0.91550775,  0.77553893,  0.28875751
+ 0.92375722,  0.7763404 ,  0.29395046
+ 0.9320227 ,  0.77712286,  0.29909267
+ 0.94027715,  0.7779011 ,  0.30415428
+ 0.94856742,  0.77865213,  0.3091325 
+ 0.95686038,  0.7793949 ,  0.31397459
+ 0.965222  ,  0.7800975 ,  0.31864342
+ 0.97365189,  0.78076521,  0.32301107
+ 0.98227405,  0.78134549,  0.32678728
+ 0.99136564,  0.78176999,  0.3281624 
+ 0.99505988,  0.78542889,  0.32106514
+ 0.99594185,  0.79046888,  0.31648808
+ 0.99646635,  0.79566972,  0.31244662
+ 0.99681528,  0.80094905,  0.30858532
+ 0.9970578 ,  0.80627441,  0.30479247
+ 0.99724883,  0.81161757,  0.30105328
+ 0.99736711,  0.81699344,  0.29725528
+ 0.99742254,  0.82239736,  0.29337235
+ 0.99744736,  0.82781159,  0.28943391
+ 0.99744951,  0.83323244,  0.28543062
+ 0.9973953 ,  0.83867931,  0.2812767 
+ 0.99727248,  0.84415897,  0.27692897
+ 0.99713953,  0.84963903,  0.27248698
+ 0.99698641,  0.85512544,  0.26791703
+ 0.99673736,  0.86065927,  0.26304767
+ 0.99652358,  0.86616957,  0.25813608
+ 0.99622774,  0.87171946,  0.25292044
+ 0.99590494,  0.87727931,  0.24750009
+ 0.99555225,  0.88285068,  0.2418514 
+ 0.99513763,  0.8884501 ,  0.23588062
+ 0.99471252,  0.89405076,  0.2296837 
+ 0.99421873,  0.89968246,  0.2230963 
+ 0.99370185,  0.90532165,  0.21619768
+ 0.99313786,  0.91098038,  0.2088926 
+ 0.99250707,  0.91666811,  0.20108214
+ 0.99187888,  0.92235023,  0.19290417
+ 0.99110991,  0.92809686,  0.18387963
+ 0.99042108,  0.93379995,  0.17458127
+ 0.98958484,  0.93956962,  0.16420166
+ 0.98873988,  0.94533859,  0.15303117
+ 0.98784836,  0.95112482,  0.14074826
+ 0.98680727,  0.95697596,  0.12661626
Index: /trunk/Ohana/src/kapa2/colormaps/inferno.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/inferno.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/inferno.cm	(revision 42821)
@@ -0,0 +1,256 @@
+0.001462, 0.000466, 0.013866
+0.002267, 0.001270, 0.018570
+0.003299, 0.002249, 0.024239
+0.004547, 0.003392, 0.030909
+0.006006, 0.004692, 0.038558
+0.007676, 0.006136, 0.046836
+0.009561, 0.007713, 0.055143
+0.011663, 0.009417, 0.063460
+0.013995, 0.011225, 0.071862
+0.016561, 0.013136, 0.080282
+0.019373, 0.015133, 0.088767
+0.022447, 0.017199, 0.097327
+0.025793, 0.019331, 0.105930
+0.029432, 0.021503, 0.114621
+0.033385, 0.023702, 0.123397
+0.037668, 0.025921, 0.132232
+0.042253, 0.028139, 0.141141
+0.046915, 0.030324, 0.150164
+0.051644, 0.032474, 0.159254
+0.056449, 0.034569, 0.168414
+0.061340, 0.036590, 0.177642
+0.066331, 0.038504, 0.186962
+0.071429, 0.040294, 0.196354
+0.076637, 0.041905, 0.205799
+0.081962, 0.043328, 0.215289
+0.087411, 0.044556, 0.224813
+0.092990, 0.045583, 0.234358
+0.098702, 0.046402, 0.243904
+0.104551, 0.047008, 0.253430
+0.110536, 0.047399, 0.262912
+0.116656, 0.047574, 0.272321
+0.122908, 0.047536, 0.281624
+0.129285, 0.047293, 0.290788
+0.135778, 0.046856, 0.299776
+0.142378, 0.046242, 0.308553
+0.149073, 0.045468, 0.317085
+0.155850, 0.044559, 0.325338
+0.162689, 0.043554, 0.333277
+0.169575, 0.042489, 0.340874
+0.176493, 0.041402, 0.348111
+0.183429, 0.040329, 0.354971
+0.190367, 0.039309, 0.361447
+0.197297, 0.038400, 0.367535
+0.204209, 0.037632, 0.373238
+0.211095, 0.037030, 0.378563
+0.217949, 0.036615, 0.383522
+0.224763, 0.036405, 0.388129
+0.231538, 0.036405, 0.392400
+0.238273, 0.036621, 0.396353
+0.244967, 0.037055, 0.400007
+0.251620, 0.037705, 0.403378
+0.258234, 0.038571, 0.406485
+0.264810, 0.039647, 0.409345
+0.271347, 0.040922, 0.411976
+0.277850, 0.042353, 0.414392
+0.284321, 0.043933, 0.416608
+0.290763, 0.045644, 0.418637
+0.297178, 0.047470, 0.420491
+0.303568, 0.049396, 0.422182
+0.309935, 0.051407, 0.423721
+0.316282, 0.053490, 0.425116
+0.322610, 0.055634, 0.426377
+0.328921, 0.057827, 0.427511
+0.335217, 0.060060, 0.428524
+0.341500, 0.062325, 0.429425
+0.347771, 0.064616, 0.430217
+0.354032, 0.066925, 0.430906
+0.360284, 0.069247, 0.431497
+0.366529, 0.071579, 0.431994
+0.372768, 0.073915, 0.432400
+0.379001, 0.076253, 0.432719
+0.385228, 0.078591, 0.432955
+0.391453, 0.080927, 0.433109
+0.397674, 0.083257, 0.433183
+0.403894, 0.085580, 0.433179
+0.410113, 0.087896, 0.433098
+0.416331, 0.090203, 0.432943
+0.422549, 0.092501, 0.432714
+0.428768, 0.094790, 0.432412
+0.434987, 0.097069, 0.432039
+0.441207, 0.099338, 0.431594
+0.447428, 0.101597, 0.431080
+0.453651, 0.103848, 0.430498
+0.459875, 0.106089, 0.429846
+0.466100, 0.108322, 0.429125
+0.472328, 0.110547, 0.428334
+0.478558, 0.112764, 0.427475
+0.484789, 0.114974, 0.426548
+0.491022, 0.117179, 0.425552
+0.497257, 0.119379, 0.424488
+0.503493, 0.121575, 0.423356
+0.509730, 0.123769, 0.422156
+0.515967, 0.125960, 0.420887
+0.522206, 0.128150, 0.419549
+0.528444, 0.130341, 0.418142
+0.534683, 0.132534, 0.416667
+0.540920, 0.134729, 0.415123
+0.547157, 0.136929, 0.413511
+0.553392, 0.139134, 0.411829
+0.559624, 0.141346, 0.410078
+0.565854, 0.143567, 0.408258
+0.572081, 0.145797, 0.406369
+0.578304, 0.148039, 0.404411
+0.584521, 0.150294, 0.402385
+0.590734, 0.152563, 0.400290
+0.596940, 0.154848, 0.398125
+0.603139, 0.157151, 0.395891
+0.609330, 0.159474, 0.393589
+0.615513, 0.161817, 0.391219
+0.621685, 0.164184, 0.388781
+0.627847, 0.166575, 0.386276
+0.633998, 0.168992, 0.383704
+0.640135, 0.171438, 0.381065
+0.646260, 0.173914, 0.378359
+0.652369, 0.176421, 0.375586
+0.658463, 0.178962, 0.372748
+0.664540, 0.181539, 0.369846
+0.670599, 0.184153, 0.366879
+0.676638, 0.186807, 0.363849
+0.682656, 0.189501, 0.360757
+0.688653, 0.192239, 0.357603
+0.694627, 0.195021, 0.354388
+0.700576, 0.197851, 0.351113
+0.706500, 0.200728, 0.347777
+0.712396, 0.203656, 0.344383
+0.718264, 0.206636, 0.340931
+0.724103, 0.209670, 0.337424
+0.729909, 0.212759, 0.333861
+0.735683, 0.215906, 0.330245
+0.741423, 0.219112, 0.326576
+0.747127, 0.222378, 0.322856
+0.752794, 0.225706, 0.319085
+0.758422, 0.229097, 0.315266
+0.764010, 0.232554, 0.311399
+0.769556, 0.236077, 0.307485
+0.775059, 0.239667, 0.303526
+0.780517, 0.243327, 0.299523
+0.785929, 0.247056, 0.295477
+0.791293, 0.250856, 0.291390
+0.796607, 0.254728, 0.287264
+0.801871, 0.258674, 0.283099
+0.807082, 0.262692, 0.278898
+0.812239, 0.266786, 0.274661
+0.817341, 0.270954, 0.270390
+0.822386, 0.275197, 0.266085
+0.827372, 0.279517, 0.261750
+0.832299, 0.283913, 0.257383
+0.837165, 0.288385, 0.252988
+0.841969, 0.292933, 0.248564
+0.846709, 0.297559, 0.244113
+0.851384, 0.302260, 0.239636
+0.855992, 0.307038, 0.235133
+0.860533, 0.311892, 0.230606
+0.865006, 0.316822, 0.226055
+0.869409, 0.321827, 0.221482
+0.873741, 0.326906, 0.216886
+0.878001, 0.332060, 0.212268
+0.882188, 0.337287, 0.207628
+0.886302, 0.342586, 0.202968
+0.890341, 0.347957, 0.198286
+0.894305, 0.353399, 0.193584
+0.898192, 0.358911, 0.188860
+0.902003, 0.364492, 0.184116
+0.905735, 0.370140, 0.179350
+0.909390, 0.375856, 0.174563
+0.912966, 0.381636, 0.169755
+0.916462, 0.387481, 0.164924
+0.919879, 0.393389, 0.160070
+0.923215, 0.399359, 0.155193
+0.926470, 0.405389, 0.150292
+0.929644, 0.411479, 0.145367
+0.932737, 0.417627, 0.140417
+0.935747, 0.423831, 0.135440
+0.938675, 0.430091, 0.130438
+0.941521, 0.436405, 0.125409
+0.944285, 0.442772, 0.120354
+0.946965, 0.449191, 0.115272
+0.949562, 0.455660, 0.110164
+0.952075, 0.462178, 0.105031
+0.954506, 0.468744, 0.099874
+0.956852, 0.475356, 0.094695
+0.959114, 0.482014, 0.089499
+0.961293, 0.488716, 0.084289
+0.963387, 0.495462, 0.079073
+0.965397, 0.502249, 0.073859
+0.967322, 0.509078, 0.068659
+0.969163, 0.515946, 0.063488
+0.970919, 0.522853, 0.058367
+0.972590, 0.529798, 0.053324
+0.974176, 0.536780, 0.048392
+0.975677, 0.543798, 0.043618
+0.977092, 0.550850, 0.039050
+0.978422, 0.557937, 0.034931
+0.979666, 0.565057, 0.031409
+0.980824, 0.572209, 0.028508
+0.981895, 0.579392, 0.026250
+0.982881, 0.586606, 0.024661
+0.983779, 0.593849, 0.023770
+0.984591, 0.601122, 0.023606
+0.985315, 0.608422, 0.024202
+0.985952, 0.615750, 0.025592
+0.986502, 0.623105, 0.027814
+0.986964, 0.630485, 0.030908
+0.987337, 0.637890, 0.034916
+0.987622, 0.645320, 0.039886
+0.987819, 0.652773, 0.045581
+0.987926, 0.660250, 0.051750
+0.987945, 0.667748, 0.058329
+0.987874, 0.675267, 0.065257
+0.987714, 0.682807, 0.072489
+0.987464, 0.690366, 0.079990
+0.987124, 0.697944, 0.087731
+0.986694, 0.705540, 0.095694
+0.986175, 0.713153, 0.103863
+0.985566, 0.720782, 0.112229
+0.984865, 0.728427, 0.120785
+0.984075, 0.736087, 0.129527
+0.983196, 0.743758, 0.138453
+0.982228, 0.751442, 0.147565
+0.981173, 0.759135, 0.156863
+0.980032, 0.766837, 0.166353
+0.978806, 0.774545, 0.176037
+0.977497, 0.782258, 0.185923
+0.976108, 0.789974, 0.196018
+0.974638, 0.797692, 0.206332
+0.973088, 0.805409, 0.216877
+0.971468, 0.813122, 0.227658
+0.969783, 0.820825, 0.238686
+0.968041, 0.828515, 0.249972
+0.966243, 0.836191, 0.261534
+0.964394, 0.843848, 0.273391
+0.962517, 0.851476, 0.285546
+0.960626, 0.859069, 0.298010
+0.958720, 0.866624, 0.310820
+0.956834, 0.874129, 0.323974
+0.954997, 0.881569, 0.337475
+0.953215, 0.888942, 0.351369
+0.951546, 0.896226, 0.365627
+0.950018, 0.903409, 0.380271
+0.948683, 0.910473, 0.395289
+0.947594, 0.917399, 0.410665
+0.946809, 0.924168, 0.426373
+0.946392, 0.930761, 0.442367
+0.946403, 0.937159, 0.458592
+0.946903, 0.943348, 0.474970
+0.947937, 0.949318, 0.491426
+0.949545, 0.955063, 0.507860
+0.951740, 0.960587, 0.524203
+0.954529, 0.965896, 0.540361
+0.957896, 0.971003, 0.556275
+0.961812, 0.975924, 0.571925
+0.966249, 0.980678, 0.587206
+0.971162, 0.985282, 0.602154
+0.976511, 0.989753, 0.616760
+0.982257, 0.994109, 0.631017
+0.988362, 0.998364, 0.644924
Index: /trunk/Ohana/src/kapa2/colormaps/magma.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/magma.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/magma.cm	(revision 42821)
@@ -0,0 +1,256 @@
+0.001462, 0.000466, 0.013866
+0.002258, 0.001295, 0.018331
+0.003279, 0.002305, 0.023708
+0.004512, 0.003490, 0.029965
+0.005950, 0.004843, 0.037130
+0.007588, 0.006356, 0.044973
+0.009426, 0.008022, 0.052844
+0.011465, 0.009828, 0.060750
+0.013708, 0.011771, 0.068667
+0.016156, 0.013840, 0.076603
+0.018815, 0.016026, 0.084584
+0.021692, 0.018320, 0.092610
+0.024792, 0.020715, 0.100676
+0.028123, 0.023201, 0.108787
+0.031696, 0.025765, 0.116965
+0.035520, 0.028397, 0.125209
+0.039608, 0.031090, 0.133515
+0.043830, 0.033830, 0.141886
+0.048062, 0.036607, 0.150327
+0.052320, 0.039407, 0.158841
+0.056615, 0.042160, 0.167446
+0.060949, 0.044794, 0.176129
+0.065330, 0.047318, 0.184892
+0.069764, 0.049726, 0.193735
+0.074257, 0.052017, 0.202660
+0.078815, 0.054184, 0.211667
+0.083446, 0.056225, 0.220755
+0.088155, 0.058133, 0.229922
+0.092949, 0.059904, 0.239164
+0.097833, 0.061531, 0.248477
+0.102815, 0.063010, 0.257854
+0.107899, 0.064335, 0.267289
+0.113094, 0.065492, 0.276784
+0.118405, 0.066479, 0.286321
+0.123833, 0.067295, 0.295879
+0.129380, 0.067935, 0.305443
+0.135053, 0.068391, 0.315000
+0.140858, 0.068654, 0.324538
+0.146785, 0.068738, 0.334011
+0.152839, 0.068637, 0.343404
+0.159018, 0.068354, 0.352688
+0.165308, 0.067911, 0.361816
+0.171713, 0.067305, 0.370771
+0.178212, 0.066576, 0.379497
+0.184801, 0.065732, 0.387973
+0.191460, 0.064818, 0.396152
+0.198177, 0.063862, 0.404009
+0.204935, 0.062907, 0.411514
+0.211718, 0.061992, 0.418647
+0.218512, 0.061158, 0.425392
+0.225302, 0.060445, 0.431742
+0.232077, 0.059889, 0.437695
+0.238826, 0.059517, 0.443256
+0.245543, 0.059352, 0.448436
+0.252220, 0.059415, 0.453248
+0.258857, 0.059706, 0.457710
+0.265447, 0.060237, 0.461840
+0.271994, 0.060994, 0.465660
+0.278493, 0.061978, 0.469190
+0.284951, 0.063168, 0.472451
+0.291366, 0.064553, 0.475462
+0.297740, 0.066117, 0.478243
+0.304081, 0.067835, 0.480812
+0.310382, 0.069702, 0.483186
+0.316654, 0.071690, 0.485380
+0.322899, 0.073782, 0.487408
+0.329114, 0.075972, 0.489287
+0.335308, 0.078236, 0.491024
+0.341482, 0.080564, 0.492631
+0.347636, 0.082946, 0.494121
+0.353773, 0.085373, 0.495501
+0.359898, 0.087831, 0.496778
+0.366012, 0.090314, 0.497960
+0.372116, 0.092816, 0.499053
+0.378211, 0.095332, 0.500067
+0.384299, 0.097855, 0.501002
+0.390384, 0.100379, 0.501864
+0.396467, 0.102902, 0.502658
+0.402548, 0.105420, 0.503386
+0.408629, 0.107930, 0.504052
+0.414709, 0.110431, 0.504662
+0.420791, 0.112920, 0.505215
+0.426877, 0.115395, 0.505714
+0.432967, 0.117855, 0.506160
+0.439062, 0.120298, 0.506555
+0.445163, 0.122724, 0.506901
+0.451271, 0.125132, 0.507198
+0.457386, 0.127522, 0.507448
+0.463508, 0.129893, 0.507652
+0.469640, 0.132245, 0.507809
+0.475780, 0.134577, 0.507921
+0.481929, 0.136891, 0.507989
+0.488088, 0.139186, 0.508011
+0.494258, 0.141462, 0.507988
+0.500438, 0.143719, 0.507920
+0.506629, 0.145958, 0.507806
+0.512831, 0.148179, 0.507648
+0.519045, 0.150383, 0.507443
+0.525270, 0.152569, 0.507192
+0.531507, 0.154739, 0.506895
+0.537755, 0.156894, 0.506551
+0.544015, 0.159033, 0.506159
+0.550287, 0.161158, 0.505719
+0.556571, 0.163269, 0.505230
+0.562866, 0.165368, 0.504692
+0.569172, 0.167454, 0.504105
+0.575490, 0.169530, 0.503466
+0.581819, 0.171596, 0.502777
+0.588158, 0.173652, 0.502035
+0.594508, 0.175701, 0.501241
+0.600868, 0.177743, 0.500394
+0.607238, 0.179779, 0.499492
+0.613617, 0.181811, 0.498536
+0.620005, 0.183840, 0.497524
+0.626401, 0.185867, 0.496456
+0.632805, 0.187893, 0.495332
+0.639216, 0.189921, 0.494150
+0.645633, 0.191952, 0.492910
+0.652056, 0.193986, 0.491611
+0.658483, 0.196027, 0.490253
+0.664915, 0.198075, 0.488836
+0.671349, 0.200133, 0.487358
+0.677786, 0.202203, 0.485819
+0.684224, 0.204286, 0.484219
+0.690661, 0.206384, 0.482558
+0.697098, 0.208501, 0.480835
+0.703532, 0.210638, 0.479049
+0.709962, 0.212797, 0.477201
+0.716387, 0.214982, 0.475290
+0.722805, 0.217194, 0.473316
+0.729216, 0.219437, 0.471279
+0.735616, 0.221713, 0.469180
+0.742004, 0.224025, 0.467018
+0.748378, 0.226377, 0.464794
+0.754737, 0.228772, 0.462509
+0.761077, 0.231214, 0.460162
+0.767398, 0.233705, 0.457755
+0.773695, 0.236249, 0.455289
+0.779968, 0.238851, 0.452765
+0.786212, 0.241514, 0.450184
+0.792427, 0.244242, 0.447543
+0.798608, 0.247040, 0.444848
+0.804752, 0.249911, 0.442102
+0.810855, 0.252861, 0.439305
+0.816914, 0.255895, 0.436461
+0.822926, 0.259016, 0.433573
+0.828886, 0.262229, 0.430644
+0.834791, 0.265540, 0.427671
+0.840636, 0.268953, 0.424666
+0.846416, 0.272473, 0.421631
+0.852126, 0.276106, 0.418573
+0.857763, 0.279857, 0.415496
+0.863320, 0.283729, 0.412403
+0.868793, 0.287728, 0.409303
+0.874176, 0.291859, 0.406205
+0.879464, 0.296125, 0.403118
+0.884651, 0.300530, 0.400047
+0.889731, 0.305079, 0.397002
+0.894700, 0.309773, 0.393995
+0.899552, 0.314616, 0.391037
+0.904281, 0.319610, 0.388137
+0.908884, 0.324755, 0.385308
+0.913354, 0.330052, 0.382563
+0.917689, 0.335500, 0.379915
+0.921884, 0.341098, 0.377376
+0.925937, 0.346844, 0.374959
+0.929845, 0.352734, 0.372677
+0.933606, 0.358764, 0.370541
+0.937221, 0.364929, 0.368567
+0.940687, 0.371224, 0.366762
+0.944006, 0.377643, 0.365136
+0.947180, 0.384178, 0.363701
+0.950210, 0.390820, 0.362468
+0.953099, 0.397563, 0.361438
+0.955849, 0.404400, 0.360619
+0.958464, 0.411324, 0.360014
+0.960949, 0.418323, 0.359630
+0.963310, 0.425390, 0.359469
+0.965549, 0.432519, 0.359529
+0.967671, 0.439703, 0.359810
+0.969680, 0.446936, 0.360311
+0.971582, 0.454210, 0.361030
+0.973381, 0.461520, 0.361965
+0.975082, 0.468861, 0.363111
+0.976690, 0.476226, 0.364466
+0.978210, 0.483612, 0.366025
+0.979645, 0.491014, 0.367783
+0.981000, 0.498428, 0.369734
+0.982279, 0.505851, 0.371874
+0.983485, 0.513280, 0.374198
+0.984622, 0.520713, 0.376698
+0.985693, 0.528148, 0.379371
+0.986700, 0.535582, 0.382210
+0.987646, 0.543015, 0.385210
+0.988533, 0.550446, 0.388365
+0.989363, 0.557873, 0.391671
+0.990138, 0.565296, 0.395122
+0.990871, 0.572706, 0.398714
+0.991558, 0.580107, 0.402441
+0.992196, 0.587502, 0.406299
+0.992785, 0.594891, 0.410283
+0.993326, 0.602275, 0.414390
+0.993834, 0.609644, 0.418613
+0.994309, 0.616999, 0.422950
+0.994738, 0.624350, 0.427397
+0.995122, 0.631696, 0.431951
+0.995480, 0.639027, 0.436607
+0.995810, 0.646344, 0.441361
+0.996096, 0.653659, 0.446213
+0.996341, 0.660969, 0.451160
+0.996580, 0.668256, 0.456192
+0.996775, 0.675541, 0.461314
+0.996925, 0.682828, 0.466526
+0.997077, 0.690088, 0.471811
+0.997186, 0.697349, 0.477182
+0.997254, 0.704611, 0.482635
+0.997325, 0.711848, 0.488154
+0.997351, 0.719089, 0.493755
+0.997351, 0.726324, 0.499428
+0.997341, 0.733545, 0.505167
+0.997285, 0.740772, 0.510983
+0.997228, 0.747981, 0.516859
+0.997138, 0.755190, 0.522806
+0.997019, 0.762398, 0.528821
+0.996898, 0.769591, 0.534892
+0.996727, 0.776795, 0.541039
+0.996571, 0.783977, 0.547233
+0.996369, 0.791167, 0.553499
+0.996162, 0.798348, 0.559820
+0.995932, 0.805527, 0.566202
+0.995680, 0.812706, 0.572645
+0.995424, 0.819875, 0.579140
+0.995131, 0.827052, 0.585701
+0.994851, 0.834213, 0.592307
+0.994524, 0.841387, 0.598983
+0.994222, 0.848540, 0.605696
+0.993866, 0.855711, 0.612482
+0.993545, 0.862859, 0.619299
+0.993170, 0.870024, 0.626189
+0.992831, 0.877168, 0.633109
+0.992440, 0.884330, 0.640099
+0.992089, 0.891470, 0.647116
+0.991688, 0.898627, 0.654202
+0.991332, 0.905763, 0.661309
+0.990930, 0.912915, 0.668481
+0.990570, 0.920049, 0.675675
+0.990175, 0.927196, 0.682926
+0.989815, 0.934329, 0.690198
+0.989434, 0.941470, 0.697519
+0.989077, 0.948604, 0.704863
+0.988717, 0.955742, 0.712242
+0.988367, 0.962878, 0.719649
+0.988033, 0.970012, 0.727077
+0.987691, 0.977154, 0.734536
+0.987387, 0.984288, 0.742002
+0.987053, 0.991438, 0.749504
Index: /trunk/Ohana/src/kapa2/colormaps/magma2.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/magma2.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/magma2.cm	(revision 42821)
@@ -0,0 +1,256 @@
+0.001462,0.000466,0.0184388297872,
+0.002258,0.001295,0.0243763297872,
+0.003279,0.002305,0.0315265957447,
+0.004512,0.00349,0.0398470744681,
+0.00595,0.004843,0.049375,
+0.007588,0.006356,0.0598045212766,
+0.009426,0.008022,0.0702712765957,
+0.011465,0.009828,0.0807845744681,
+0.013708,0.011771,0.0913125,
+0.016156,0.01384,0.101865691489,
+0.018815,0.016026,0.112478723404,
+0.021692,0.01832,0.123151595745,
+0.024792,0.020715,0.133877659574,
+0.028123,0.023201,0.14466356383,
+0.031696,0.025765,0.15553856383,
+0.03552,0.028397,0.166501329787,
+0.039608,0.03109,0.177546542553,
+0.04383,0.03383,0.188678191489,
+0.048062,0.036607,0.199902925532,
+0.05232,0.039407,0.211224734043,
+0.056615,0.04216,0.222667553191,
+0.060949,0.044794,0.234214095745,
+0.06533,0.047318,0.245867021277,
+0.069764,0.049726,0.257626329787,
+0.074257,0.052017,0.269494680851,
+0.078815,0.054184,0.281472074468,
+0.083446,0.056225,0.293557180851,
+0.088155,0.058133,0.305747340426,
+0.092949,0.059904,0.318037234043,
+0.097833,0.061531,0.330421542553,
+0.102815,0.06301,0.342890957447,
+0.107899,0.064335,0.3554375,
+0.113094,0.065492,0.368063829787,
+0.118405,0.066479,0.380746010638,
+0.123833,0.067295,0.393456117021,
+0.12938,0.067935,0.406174202128,
+0.135053,0.068391,0.418882978723,
+0.140858,0.068654,0.431566489362,
+0.146785,0.068738,0.44416356383,
+0.152839,0.068637,0.456654255319,
+0.159018,0.068354,0.469,
+0.165308,0.067911,0.481138297872,
+0.171713,0.067305,0.493046542553,
+0.178212,0.066576,0.504650265957,
+0.184801,0.065732,0.515921542553,
+0.19146,0.064818,0.52679787234,
+0.198177,0.063862,0.537246010638,
+0.204935,0.062907,0.54722606383,
+0.211718,0.061992,0.55671143617,
+0.218512,0.061158,0.565680851064,
+0.225302,0.060445,0.574125,
+0.232077,0.059889,0.582041223404,
+0.238826,0.059517,0.589436170213,
+0.245543,0.059352,0.596324468085,
+0.25222,0.059415,0.602723404255,
+0.258857,0.059706,0.608656914894,
+0.265447,0.060237,0.61414893617,
+0.271994,0.060994,0.619228723404,
+0.278493,0.061978,0.62392287234,
+0.284951,0.063168,0.628259308511,
+0.291366,0.064553,0.632263297872,
+0.29774,0.066117,0.63596143617,
+0.304081,0.067835,0.639377659574,
+0.310382,0.069702,0.642534574468,
+0.316654,0.07169,0.64545212766,
+0.322899,0.073782,0.64814893617,
+0.329114,0.075972,0.650647606383,
+0.335308,0.078236,0.652957446809,
+0.341482,0.080564,0.655094414894,
+0.347636,0.082946,0.657075797872,
+0.353773,0.085373,0.658910904255,
+0.359898,0.087831,0.660609042553,
+0.366012,0.090314,0.662180851064,
+0.372116,0.092816,0.663634308511,
+0.378211,0.095332,0.664982712766,
+0.384299,0.097855,0.66622606383,
+0.390384,0.100379,0.667372340426,
+0.396467,0.102902,0.668428191489,
+0.402548,0.10542,0.669396276596,
+0.408629,0.10793,0.670281914894,
+0.414709,0.110431,0.671093085106,
+0.420791,0.11292,0.671828457447,
+0.426877,0.115395,0.672492021277,
+0.432967,0.117855,0.673085106383,
+0.439062,0.120298,0.67361037234,
+0.445163,0.122724,0.674070478723,
+0.451271,0.125132,0.674465425532,
+0.457386,0.127522,0.67479787234,
+0.463508,0.129893,0.675069148936,
+0.46964,0.132245,0.675277925532,
+0.47578,0.134577,0.675426861702,
+0.481929,0.136891,0.675517287234,
+0.488088,0.139186,0.675546542553,
+0.494258,0.141462,0.675515957447,
+0.500438,0.143719,0.675425531915,
+0.506629,0.145958,0.67527393617,
+0.512831,0.148179,0.675063829787,
+0.519045,0.150383,0.674791223404,
+0.52527,0.152569,0.674457446809,
+0.531507,0.154739,0.6740625,
+0.537755,0.156894,0.673605053191,
+0.544015,0.159033,0.673083776596,
+0.550287,0.161158,0.672498670213,
+0.556571,0.163269,0.671848404255,
+0.562866,0.165368,0.671132978723,
+0.569172,0.167454,0.670352393617,
+0.57549,0.16953,0.669502659574,
+0.581819,0.171596,0.66858643617,
+0.588158,0.173652,0.667599734043,
+0.594508,0.175701,0.666543882979,
+0.600868,0.177743,0.665417553191,
+0.607238,0.179779,0.664218085106,
+0.613617,0.181811,0.662946808511,
+0.620005,0.18384,0.66160106383,
+0.626401,0.185867,0.660180851064,
+0.632805,0.187893,0.658686170213,
+0.639216,0.189921,0.657114361702,
+0.645633,0.191952,0.655465425532,
+0.652056,0.193986,0.653738031915,
+0.658483,0.196027,0.651932180851,
+0.664915,0.198075,0.65004787234,
+0.671349,0.200133,0.648082446809,
+0.677786,0.202203,0.646035904255,
+0.684224,0.204286,0.643908244681,
+0.690661,0.206384,0.641699468085,
+0.697098,0.208501,0.639408244681,
+0.703532,0.210638,0.637033244681,
+0.709962,0.212797,0.634575797872,
+0.716387,0.214982,0.632034574468,
+0.722805,0.217194,0.629409574468,
+0.729216,0.219437,0.626700797872,
+0.735616,0.221713,0.623909574468,
+0.742004,0.224025,0.621034574468,
+0.748378,0.226377,0.61807712766,
+0.754737,0.228772,0.61503856383,
+0.761077,0.231214,0.611917553191,
+0.767398,0.233705,0.608716755319,
+0.773695,0.236249,0.6054375,
+0.779968,0.238851,0.602081117021,
+0.786212,0.241514,0.59864893617,
+0.792427,0.244242,0.595136968085,
+0.798608,0.24704,0.591553191489,
+0.804752,0.249911,0.587901595745,
+0.810855,0.252861,0.584182180851,
+0.816914,0.255895,0.580400265957,
+0.822926,0.259016,0.576559840426,
+0.828886,0.262229,0.572664893617,
+0.834791,0.26554,0.56871143617,
+0.840636,0.268953,0.564715425532,
+0.846416,0.272473,0.560679521277,
+0.852126,0.276106,0.556613031915,
+0.857763,0.279857,0.552521276596,
+0.86332,0.283729,0.548408244681,
+0.868793,0.287728,0.544285904255,
+0.874176,0.291859,0.540166223404,
+0.879464,0.296125,0.536061170213,
+0.884651,0.30053,0.531977393617,
+0.889731,0.305079,0.527928191489,
+0.8947,0.309773,0.523929521277,
+0.899552,0.314616,0.519996010638,
+0.904281,0.31961,0.51613962766,
+0.908884,0.324755,0.512377659574,
+0.913354,0.330052,0.508727393617,
+0.917689,0.3355,0.505206117021,
+0.921884,0.341098,0.501829787234,
+0.925937,0.346844,0.498615691489,
+0.929845,0.352734,0.495581117021,
+0.933606,0.358764,0.492740691489,
+0.937221,0.364929,0.490115691489,
+0.940687,0.371224,0.487715425532,
+0.944006,0.377643,0.485553191489,
+0.94718,0.384178,0.483644946809,
+0.95021,0.39082,0.482005319149,
+0.953099,0.397563,0.480635638298,
+0.955849,0.4044,0.479546542553,
+0.958464,0.411324,0.478742021277,
+0.960949,0.418323,0.478231382979,
+0.96331,0.42539,0.478017287234,
+0.965549,0.432519,0.478097074468,
+0.967671,0.439703,0.478470744681,
+0.96968,0.446936,0.479136968085,
+0.971582,0.45421,0.480093085106,
+0.973381,0.46152,0.48133643617,
+0.975082,0.468861,0.48286037234,
+0.97669,0.476226,0.484662234043,
+0.97821,0.483612,0.48673537234,
+0.979645,0.491014,0.489073138298,
+0.981,0.498428,0.491667553191,
+0.982279,0.505851,0.494513297872,
+0.983485,0.51328,0.497603723404,
+0.984622,0.520713,0.500928191489,
+0.985693,0.528148,0.504482712766,
+0.9867,0.535582,0.508257978723,
+0.987646,0.543015,0.512247340426,
+0.988533,0.550446,0.516442819149,
+0.989363,0.557873,0.520839095745,
+0.990138,0.565296,0.525428191489,
+0.990871,0.572706,0.530204787234,
+0.991558,0.580107,0.535160904255,
+0.992196,0.587502,0.540291223404,
+0.992785,0.594891,0.545589095745,
+0.993326,0.602275,0.551050531915,
+0.993834,0.609644,0.556666223404,
+0.994309,0.616999,0.562433510638,
+0.994738,0.62435,0.568347074468,
+0.995122,0.631696,0.574402925532,
+0.99548,0.639027,0.580594414894,
+0.99581,0.646344,0.586916223404,
+0.996096,0.653659,0.593368351064,
+0.996341,0.660969,0.599946808511,
+0.99658,0.668256,0.606638297872,
+0.996775,0.675541,0.613449468085,
+0.996925,0.682828,0.620380319149,
+0.997077,0.690088,0.627408244681,
+0.997186,0.697349,0.634550531915,
+0.997254,0.704611,0.641801861702,
+0.997325,0.711848,0.649140957447,
+0.997351,0.719089,0.656589095745,
+0.997351,0.726324,0.664132978723,
+0.997341,0.733545,0.67176462766,
+0.997285,0.740772,0.679498670213,
+0.997228,0.747981,0.6873125,
+0.997138,0.75519,0.695220744681,
+0.997019,0.762398,0.703219414894,
+0.996898,0.769591,0.711292553191,
+0.996727,0.776795,0.719466755319,
+0.996571,0.783977,0.727703457447,
+0.996369,0.791167,0.736035904255,
+0.996162,0.798348,0.744441489362,
+0.995932,0.805527,0.752928191489,
+0.99568,0.812706,0.761496010638,
+0.995424,0.819875,0.770132978723,
+0.995131,0.827052,0.778857712766,
+0.994851,0.834213,0.787642287234,
+0.994524,0.841387,0.796519946809,
+0.994222,0.84854,0.805446808511,
+0.993866,0.855711,0.814470744681,
+0.993545,0.862859,0.823535904255,
+0.99317,0.870024,0.832698138298,
+0.992831,0.877168,0.841900265957,
+0.99244,0.88433,0.851195478723,
+0.992089,0.89147,0.860526595745,
+0.991688,0.898627,0.869949468085,
+0.991332,0.905763,0.879400265957,
+0.99093,0.912915,0.8889375,
+0.99057,0.920049,0.898503989362,
+0.990175,0.927196,0.908146276596,
+0.989815,0.934329,0.917816489362,
+0.989434,0.94147,0.927551861702,
+0.989077,0.948604,0.937317819149,
+0.988717,0.955742,0.947130319149,
+0.988367,0.962878,0.956980053191,
+0.988033,0.970012,0.966857712766,
+0.987691,0.977154,0.976776595745,
+0.987387,0.984288,0.986704787234,
+0.987053,0.991438,0.996680851064,
Index: /trunk/Ohana/src/kapa2/colormaps/plasma.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/plasma.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/plasma.cm	(revision 42821)
@@ -0,0 +1,256 @@
+0.050383, 0.029803, 0.527975
+0.063536, 0.028426, 0.533124
+0.075353, 0.027206, 0.538007
+0.086222, 0.026125, 0.542658
+0.096379, 0.025165, 0.547103
+0.105980, 0.024309, 0.551368
+0.115124, 0.023556, 0.555468
+0.123903, 0.022878, 0.559423
+0.132381, 0.022258, 0.563250
+0.140603, 0.021687, 0.566959
+0.148607, 0.021154, 0.570562
+0.156421, 0.020651, 0.574065
+0.164070, 0.020171, 0.577478
+0.171574, 0.019706, 0.580806
+0.178950, 0.019252, 0.584054
+0.186213, 0.018803, 0.587228
+0.193374, 0.018354, 0.590330
+0.200445, 0.017902, 0.593364
+0.207435, 0.017442, 0.596333
+0.214350, 0.016973, 0.599239
+0.221197, 0.016497, 0.602083
+0.227983, 0.016007, 0.604867
+0.234715, 0.015502, 0.607592
+0.241396, 0.014979, 0.610259
+0.248032, 0.014439, 0.612868
+0.254627, 0.013882, 0.615419
+0.261183, 0.013308, 0.617911
+0.267703, 0.012716, 0.620346
+0.274191, 0.012109, 0.622722
+0.280648, 0.011488, 0.625038
+0.287076, 0.010855, 0.627295
+0.293478, 0.010213, 0.629490
+0.299855, 0.009561, 0.631624
+0.306210, 0.008902, 0.633694
+0.312543, 0.008239, 0.635700
+0.318856, 0.007576, 0.637640
+0.325150, 0.006915, 0.639512
+0.331426, 0.006261, 0.641316
+0.337683, 0.005618, 0.643049
+0.343925, 0.004991, 0.644710
+0.350150, 0.004382, 0.646298
+0.356359, 0.003798, 0.647810
+0.362553, 0.003243, 0.649245
+0.368733, 0.002724, 0.650601
+0.374897, 0.002245, 0.651876
+0.381047, 0.001814, 0.653068
+0.387183, 0.001434, 0.654177
+0.393304, 0.001114, 0.655199
+0.399411, 0.000859, 0.656133
+0.405503, 0.000678, 0.656977
+0.411580, 0.000577, 0.657730
+0.417642, 0.000564, 0.658390
+0.423689, 0.000646, 0.658956
+0.429719, 0.000831, 0.659425
+0.435734, 0.001127, 0.659797
+0.441732, 0.001540, 0.660069
+0.447714, 0.002080, 0.660240
+0.453677, 0.002755, 0.660310
+0.459623, 0.003574, 0.660277
+0.465550, 0.004545, 0.660139
+0.471457, 0.005678, 0.659897
+0.477344, 0.006980, 0.659549
+0.483210, 0.008460, 0.659095
+0.489055, 0.010127, 0.658534
+0.494877, 0.011990, 0.657865
+0.500678, 0.014055, 0.657088
+0.506454, 0.016333, 0.656202
+0.512206, 0.018833, 0.655209
+0.517933, 0.021563, 0.654109
+0.523633, 0.024532, 0.652901
+0.529306, 0.027747, 0.651586
+0.534952, 0.031217, 0.650165
+0.540570, 0.034950, 0.648640
+0.546157, 0.038954, 0.647010
+0.551715, 0.043136, 0.645277
+0.557243, 0.047331, 0.643443
+0.562738, 0.051545, 0.641509
+0.568201, 0.055778, 0.639477
+0.573632, 0.060028, 0.637349
+0.579029, 0.064296, 0.635126
+0.584391, 0.068579, 0.632812
+0.589719, 0.072878, 0.630408
+0.595011, 0.077190, 0.627917
+0.600266, 0.081516, 0.625342
+0.605485, 0.085854, 0.622686
+0.610667, 0.090204, 0.619951
+0.615812, 0.094564, 0.617140
+0.620919, 0.098934, 0.614257
+0.625987, 0.103312, 0.611305
+0.631017, 0.107699, 0.608287
+0.636008, 0.112092, 0.605205
+0.640959, 0.116492, 0.602065
+0.645872, 0.120898, 0.598867
+0.650746, 0.125309, 0.595617
+0.655580, 0.129725, 0.592317
+0.660374, 0.134144, 0.588971
+0.665129, 0.138566, 0.585582
+0.669845, 0.142992, 0.582154
+0.674522, 0.147419, 0.578688
+0.679160, 0.151848, 0.575189
+0.683758, 0.156278, 0.571660
+0.688318, 0.160709, 0.568103
+0.692840, 0.165141, 0.564522
+0.697324, 0.169573, 0.560919
+0.701769, 0.174005, 0.557296
+0.706178, 0.178437, 0.553657
+0.710549, 0.182868, 0.550004
+0.714883, 0.187299, 0.546338
+0.719181, 0.191729, 0.542663
+0.723444, 0.196158, 0.538981
+0.727670, 0.200586, 0.535293
+0.731862, 0.205013, 0.531601
+0.736019, 0.209439, 0.527908
+0.740143, 0.213864, 0.524216
+0.744232, 0.218288, 0.520524
+0.748289, 0.222711, 0.516834
+0.752312, 0.227133, 0.513149
+0.756304, 0.231555, 0.509468
+0.760264, 0.235976, 0.505794
+0.764193, 0.240396, 0.502126
+0.768090, 0.244817, 0.498465
+0.771958, 0.249237, 0.494813
+0.775796, 0.253658, 0.491171
+0.779604, 0.258078, 0.487539
+0.783383, 0.262500, 0.483918
+0.787133, 0.266922, 0.480307
+0.790855, 0.271345, 0.476706
+0.794549, 0.275770, 0.473117
+0.798216, 0.280197, 0.469538
+0.801855, 0.284626, 0.465971
+0.805467, 0.289057, 0.462415
+0.809052, 0.293491, 0.458870
+0.812612, 0.297928, 0.455338
+0.816144, 0.302368, 0.451816
+0.819651, 0.306812, 0.448306
+0.823132, 0.311261, 0.444806
+0.826588, 0.315714, 0.441316
+0.830018, 0.320172, 0.437836
+0.833422, 0.324635, 0.434366
+0.836801, 0.329105, 0.430905
+0.840155, 0.333580, 0.427455
+0.843484, 0.338062, 0.424013
+0.846788, 0.342551, 0.420579
+0.850066, 0.347048, 0.417153
+0.853319, 0.351553, 0.413734
+0.856547, 0.356066, 0.410322
+0.859750, 0.360588, 0.406917
+0.862927, 0.365119, 0.403519
+0.866078, 0.369660, 0.400126
+0.869203, 0.374212, 0.396738
+0.872303, 0.378774, 0.393355
+0.875376, 0.383347, 0.389976
+0.878423, 0.387932, 0.386600
+0.881443, 0.392529, 0.383229
+0.884436, 0.397139, 0.379860
+0.887402, 0.401762, 0.376494
+0.890340, 0.406398, 0.373130
+0.893250, 0.411048, 0.369768
+0.896131, 0.415712, 0.366407
+0.898984, 0.420392, 0.363047
+0.901807, 0.425087, 0.359688
+0.904601, 0.429797, 0.356329
+0.907365, 0.434524, 0.352970
+0.910098, 0.439268, 0.349610
+0.912800, 0.444029, 0.346251
+0.915471, 0.448807, 0.342890
+0.918109, 0.453603, 0.339529
+0.920714, 0.458417, 0.336166
+0.923287, 0.463251, 0.332801
+0.925825, 0.468103, 0.329435
+0.928329, 0.472975, 0.326067
+0.930798, 0.477867, 0.322697
+0.933232, 0.482780, 0.319325
+0.935630, 0.487712, 0.315952
+0.937990, 0.492667, 0.312575
+0.940313, 0.497642, 0.309197
+0.942598, 0.502639, 0.305816
+0.944844, 0.507658, 0.302433
+0.947051, 0.512699, 0.299049
+0.949217, 0.517763, 0.295662
+0.951344, 0.522850, 0.292275
+0.953428, 0.527960, 0.288883
+0.955470, 0.533093, 0.285490
+0.957469, 0.538250, 0.282096
+0.959424, 0.543431, 0.278701
+0.961336, 0.548636, 0.275305
+0.963203, 0.553865, 0.271909
+0.965024, 0.559118, 0.268513
+0.966798, 0.564396, 0.265118
+0.968526, 0.569700, 0.261721
+0.970205, 0.575028, 0.258325
+0.971835, 0.580382, 0.254931
+0.973416, 0.585761, 0.251540
+0.974947, 0.591165, 0.248151
+0.976428, 0.596595, 0.244767
+0.977856, 0.602051, 0.241387
+0.979233, 0.607532, 0.238013
+0.980556, 0.613039, 0.234646
+0.981826, 0.618572, 0.231287
+0.983041, 0.624131, 0.227937
+0.984199, 0.629718, 0.224595
+0.985301, 0.635330, 0.221265
+0.986345, 0.640969, 0.217948
+0.987332, 0.646633, 0.214648
+0.988260, 0.652325, 0.211364
+0.989128, 0.658043, 0.208100
+0.989935, 0.663787, 0.204859
+0.990681, 0.669558, 0.201642
+0.991365, 0.675355, 0.198453
+0.991985, 0.681179, 0.195295
+0.992541, 0.687030, 0.192170
+0.993032, 0.692907, 0.189084
+0.993456, 0.698810, 0.186041
+0.993814, 0.704741, 0.183043
+0.994103, 0.710698, 0.180097
+0.994324, 0.716681, 0.177208
+0.994474, 0.722691, 0.174381
+0.994553, 0.728728, 0.171622
+0.994561, 0.734791, 0.168938
+0.994495, 0.740880, 0.166335
+0.994355, 0.746995, 0.163821
+0.994141, 0.753137, 0.161404
+0.993851, 0.759304, 0.159092
+0.993482, 0.765499, 0.156891
+0.993033, 0.771720, 0.154808
+0.992505, 0.777967, 0.152855
+0.991897, 0.784239, 0.151042
+0.991209, 0.790537, 0.149377
+0.990439, 0.796859, 0.147870
+0.989587, 0.803205, 0.146529
+0.988648, 0.809579, 0.145357
+0.987621, 0.815978, 0.144363
+0.986509, 0.822401, 0.143557
+0.985314, 0.828846, 0.142945
+0.984031, 0.835315, 0.142528
+0.982653, 0.841812, 0.142303
+0.981190, 0.848329, 0.142279
+0.979644, 0.854866, 0.142453
+0.977995, 0.861432, 0.142808
+0.976265, 0.868016, 0.143351
+0.974443, 0.874622, 0.144061
+0.972530, 0.881250, 0.144923
+0.970533, 0.887896, 0.145919
+0.968443, 0.894564, 0.147014
+0.966271, 0.901249, 0.148180
+0.964021, 0.907950, 0.149370
+0.961681, 0.914672, 0.150520
+0.959276, 0.921407, 0.151566
+0.956808, 0.928152, 0.152409
+0.954287, 0.934908, 0.152921
+0.951726, 0.941671, 0.152925
+0.949151, 0.948435, 0.152178
+0.946602, 0.955190, 0.150328
+0.944152, 0.961916, 0.146861
+0.941896, 0.968590, 0.140956
+0.940015, 0.975158, 0.131326
Index: /trunk/Ohana/src/kapa2/colormaps/test.redshades.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/test.redshades.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/test.redshades.cm	(revision 42821)
@@ -0,0 +1,11 @@
+0.00000, 0.00000, 0.00000, 0.00000, 
+0.09091, 0.34375, 0.11328, 0.03125, 
+0.18182, 0.57812, 0.20312, 0.14453, 
+0.27273, 0.65625, 0.36719, 0.13281, 
+0.36364, 0.75000, 0.56641, 0.11328, 
+0.45455, 0.76562, 0.71094, 0.25391, 
+0.54545, 0.73047, 0.80078, 0.49609, 
+0.75000, 0.70312, 0.91016, 0.77734, 
+0.85000, 0.69141, 0.96875, 0.92578, 
+0.95000, 0.84766, 0.99609, 0.99609, 
+1.00000, 0.95000, 0.99609, 0.99609, 
Index: /trunk/Ohana/src/kapa2/colormaps/viridis.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/viridis.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/viridis.cm	(revision 42821)
@@ -0,0 +1,256 @@
+0.267004, 0.004874, 0.329415
+0.268510, 0.009605, 0.335427
+0.269944, 0.014625, 0.341379
+0.271305, 0.019942, 0.347269
+0.272594, 0.025563, 0.353093
+0.273809, 0.031497, 0.358853
+0.274952, 0.037752, 0.364543
+0.276022, 0.044167, 0.370164
+0.277018, 0.050344, 0.375715
+0.277941, 0.056324, 0.381191
+0.278791, 0.062145, 0.386592
+0.279566, 0.067836, 0.391917
+0.280267, 0.073417, 0.397163
+0.280894, 0.078907, 0.402329
+0.281446, 0.084320, 0.407414
+0.281924, 0.089666, 0.412415
+0.282327, 0.094955, 0.417331
+0.282656, 0.100196, 0.422160
+0.282910, 0.105393, 0.426902
+0.283091, 0.110553, 0.431554
+0.283197, 0.115680, 0.436115
+0.283229, 0.120777, 0.440584
+0.283187, 0.125848, 0.444960
+0.283072, 0.130895, 0.449241
+0.282884, 0.135920, 0.453427
+0.282623, 0.140926, 0.457517
+0.282290, 0.145912, 0.461510
+0.281887, 0.150881, 0.465405
+0.281412, 0.155834, 0.469201
+0.280868, 0.160771, 0.472899
+0.280255, 0.165693, 0.476498
+0.279574, 0.170599, 0.479997
+0.278826, 0.175490, 0.483397
+0.278012, 0.180367, 0.486697
+0.277134, 0.185228, 0.489898
+0.276194, 0.190074, 0.493001
+0.275191, 0.194905, 0.496005
+0.274128, 0.199721, 0.498911
+0.273006, 0.204520, 0.501721
+0.271828, 0.209303, 0.504434
+0.270595, 0.214069, 0.507052
+0.269308, 0.218818, 0.509577
+0.267968, 0.223549, 0.512008
+0.266580, 0.228262, 0.514349
+0.265145, 0.232956, 0.516599
+0.263663, 0.237631, 0.518762
+0.262138, 0.242286, 0.520837
+0.260571, 0.246922, 0.522828
+0.258965, 0.251537, 0.524736
+0.257322, 0.256130, 0.526563
+0.255645, 0.260703, 0.528312
+0.253935, 0.265254, 0.529983
+0.252194, 0.269783, 0.531579
+0.250425, 0.274290, 0.533103
+0.248629, 0.278775, 0.534556
+0.246811, 0.283237, 0.535941
+0.244972, 0.287675, 0.537260
+0.243113, 0.292092, 0.538516
+0.241237, 0.296485, 0.539709
+0.239346, 0.300855, 0.540844
+0.237441, 0.305202, 0.541921
+0.235526, 0.309527, 0.542944
+0.233603, 0.313828, 0.543914
+0.231674, 0.318106, 0.544834
+0.229739, 0.322361, 0.545706
+0.227802, 0.326594, 0.546532
+0.225863, 0.330805, 0.547314
+0.223925, 0.334994, 0.548053
+0.221989, 0.339161, 0.548752
+0.220057, 0.343307, 0.549413
+0.218130, 0.347432, 0.550038
+0.216210, 0.351535, 0.550627
+0.214298, 0.355619, 0.551184
+0.212395, 0.359683, 0.551710
+0.210503, 0.363727, 0.552206
+0.208623, 0.367752, 0.552675
+0.206756, 0.371758, 0.553117
+0.204903, 0.375746, 0.553533
+0.203063, 0.379716, 0.553925
+0.201239, 0.383670, 0.554294
+0.199430, 0.387607, 0.554642
+0.197636, 0.391528, 0.554969
+0.195860, 0.395433, 0.555276
+0.194100, 0.399323, 0.555565
+0.192357, 0.403199, 0.555836
+0.190631, 0.407061, 0.556089
+0.188923, 0.410910, 0.556326
+0.187231, 0.414746, 0.556547
+0.185556, 0.418570, 0.556753
+0.183898, 0.422383, 0.556944
+0.182256, 0.426184, 0.557120
+0.180629, 0.429975, 0.557282
+0.179019, 0.433756, 0.557430
+0.177423, 0.437527, 0.557565
+0.175841, 0.441290, 0.557685
+0.174274, 0.445044, 0.557792
+0.172719, 0.448791, 0.557885
+0.171176, 0.452530, 0.557965
+0.169646, 0.456262, 0.558030
+0.168126, 0.459988, 0.558082
+0.166617, 0.463708, 0.558119
+0.165117, 0.467423, 0.558141
+0.163625, 0.471133, 0.558148
+0.162142, 0.474838, 0.558140
+0.160665, 0.478540, 0.558115
+0.159194, 0.482237, 0.558073
+0.157729, 0.485932, 0.558013
+0.156270, 0.489624, 0.557936
+0.154815, 0.493313, 0.557840
+0.153364, 0.497000, 0.557724
+0.151918, 0.500685, 0.557587
+0.150476, 0.504369, 0.557430
+0.149039, 0.508051, 0.557250
+0.147607, 0.511733, 0.557049
+0.146180, 0.515413, 0.556823
+0.144759, 0.519093, 0.556572
+0.143343, 0.522773, 0.556295
+0.141935, 0.526453, 0.555991
+0.140536, 0.530132, 0.555659
+0.139147, 0.533812, 0.555298
+0.137770, 0.537492, 0.554906
+0.136408, 0.541173, 0.554483
+0.135066, 0.544853, 0.554029
+0.133743, 0.548535, 0.553541
+0.132444, 0.552216, 0.553018
+0.131172, 0.555899, 0.552459
+0.129933, 0.559582, 0.551864
+0.128729, 0.563265, 0.551229
+0.127568, 0.566949, 0.550556
+0.126453, 0.570633, 0.549841
+0.125394, 0.574318, 0.549086
+0.124395, 0.578002, 0.548287
+0.123463, 0.581687, 0.547445
+0.122606, 0.585371, 0.546557
+0.121831, 0.589055, 0.545623
+0.121148, 0.592739, 0.544641
+0.120565, 0.596422, 0.543611
+0.120092, 0.600104, 0.542530
+0.119738, 0.603785, 0.541400
+0.119512, 0.607464, 0.540218
+0.119423, 0.611141, 0.538982
+0.119483, 0.614817, 0.537692
+0.119699, 0.618490, 0.536347
+0.120081, 0.622161, 0.534946
+0.120638, 0.625828, 0.533488
+0.121380, 0.629492, 0.531973
+0.122312, 0.633153, 0.530398
+0.123444, 0.636809, 0.528763
+0.124780, 0.640461, 0.527068
+0.126326, 0.644107, 0.525311
+0.128087, 0.647749, 0.523491
+0.130067, 0.651384, 0.521608
+0.132268, 0.655014, 0.519661
+0.134692, 0.658636, 0.517649
+0.137339, 0.662252, 0.515571
+0.140210, 0.665859, 0.513427
+0.143303, 0.669459, 0.511215
+0.146616, 0.673050, 0.508936
+0.150148, 0.676631, 0.506589
+0.153894, 0.680203, 0.504172
+0.157851, 0.683765, 0.501686
+0.162016, 0.687316, 0.499129
+0.166383, 0.690856, 0.496502
+0.170948, 0.694384, 0.493803
+0.175707, 0.697900, 0.491033
+0.180653, 0.701402, 0.488189
+0.185783, 0.704891, 0.485273
+0.191090, 0.708366, 0.482284
+0.196571, 0.711827, 0.479221
+0.202219, 0.715272, 0.476084
+0.208030, 0.718701, 0.472873
+0.214000, 0.722114, 0.469588
+0.220124, 0.725509, 0.466226
+0.226397, 0.728888, 0.462789
+0.232815, 0.732247, 0.459277
+0.239374, 0.735588, 0.455688
+0.246070, 0.738910, 0.452024
+0.252899, 0.742211, 0.448284
+0.259857, 0.745492, 0.444467
+0.266941, 0.748751, 0.440573
+0.274149, 0.751988, 0.436601
+0.281477, 0.755203, 0.432552
+0.288921, 0.758394, 0.428426
+0.296479, 0.761561, 0.424223
+0.304148, 0.764704, 0.419943
+0.311925, 0.767822, 0.415586
+0.319809, 0.770914, 0.411152
+0.327796, 0.773980, 0.406640
+0.335885, 0.777018, 0.402049
+0.344074, 0.780029, 0.397381
+0.352360, 0.783011, 0.392636
+0.360741, 0.785964, 0.387814
+0.369214, 0.788888, 0.382914
+0.377779, 0.791781, 0.377939
+0.386433, 0.794644, 0.372886
+0.395174, 0.797475, 0.367757
+0.404001, 0.800275, 0.362552
+0.412913, 0.803041, 0.357269
+0.421908, 0.805774, 0.351910
+0.430983, 0.808473, 0.346476
+0.440137, 0.811138, 0.340967
+0.449368, 0.813768, 0.335384
+0.458674, 0.816363, 0.329727
+0.468053, 0.818921, 0.323998
+0.477504, 0.821444, 0.318195
+0.487026, 0.823929, 0.312321
+0.496615, 0.826376, 0.306377
+0.506271, 0.828786, 0.300362
+0.515992, 0.831158, 0.294279
+0.525776, 0.833491, 0.288127
+0.535621, 0.835785, 0.281908
+0.545524, 0.838039, 0.275626
+0.555484, 0.840254, 0.269281
+0.565498, 0.842430, 0.262877
+0.575563, 0.844566, 0.256415
+0.585678, 0.846661, 0.249897
+0.595839, 0.848717, 0.243329
+0.606045, 0.850733, 0.236712
+0.616293, 0.852709, 0.230052
+0.626579, 0.854645, 0.223353
+0.636902, 0.856542, 0.216620
+0.647257, 0.858400, 0.209861
+0.657642, 0.860219, 0.203082
+0.668054, 0.861999, 0.196293
+0.678489, 0.863742, 0.189503
+0.688944, 0.865448, 0.182725
+0.699415, 0.867117, 0.175971
+0.709898, 0.868751, 0.169257
+0.720391, 0.870350, 0.162603
+0.730889, 0.871916, 0.156029
+0.741388, 0.873449, 0.149561
+0.751884, 0.874951, 0.143228
+0.762373, 0.876424, 0.137064
+0.772852, 0.877868, 0.131109
+0.783315, 0.879285, 0.125405
+0.793760, 0.880678, 0.120005
+0.804182, 0.882046, 0.114965
+0.814576, 0.883393, 0.110347
+0.824940, 0.884720, 0.106217
+0.835270, 0.886029, 0.102646
+0.845561, 0.887322, 0.099702
+0.855810, 0.888601, 0.097452
+0.866013, 0.889868, 0.095953
+0.876168, 0.891125, 0.095250
+0.886271, 0.892374, 0.095374
+0.896320, 0.893616, 0.096335
+0.906311, 0.894855, 0.098125
+0.916242, 0.896091, 0.100717
+0.926106, 0.897330, 0.104071
+0.935904, 0.898570, 0.108131
+0.945636, 0.899815, 0.112838
+0.955300, 0.901065, 0.118128
+0.964894, 0.902323, 0.123941
+0.974417, 0.903590, 0.130215
+0.983868, 0.904867, 0.136897
+0.993248, 0.906157, 0.143936
Index: /trunk/Ohana/src/kapa2/colormaps/vista.cm
===================================================================
--- /trunk/Ohana/src/kapa2/colormaps/vista.cm	(revision 42821)
+++ /trunk/Ohana/src/kapa2/colormaps/vista.cm	(revision 42821)
@@ -0,0 +1,7 @@
+0.10 0.5 0.8 0.0
+0.28 0.0 1.0 0.2
+0.35 0.2 1.0 0.7
+0.45 0.0 0.0 1.0
+0.60 1.0 0.0 0.9
+0.75 0.6 0.0 0.0
+0.90 0.8 0.0 0.0
Index: /trunk/Ohana/src/kapa2/include/constants.h
===================================================================
--- /trunk/Ohana/src/kapa2/include/constants.h	(revision 42820)
+++ /trunk/Ohana/src/kapa2/include/constants.h	(revision 42821)
@@ -54,4 +54,14 @@
 } KapaChannels;
 
+typedef enum {
+  KAPA_CM_NONE,
+  KAPA_CM_RAW,
+  KAPA_CM_CSV,
+  KAPA_CM_CET,
+  KAPA_CM_CET_REV,
+  KAPA_CM_LEGACY,
+  KAPA_CM_STATIC,
+} KapaColorMapMode;
+
 // use an enum to identify the 3 dimensions:
 typedef enum {
Index: /trunk/Ohana/src/kapa2/include/prototypes.h
===================================================================
--- /trunk/Ohana/src/kapa2/include/prototypes.h	(revision 42820)
+++ /trunk/Ohana/src/kapa2/include/prototypes.h	(revision 42821)
@@ -328,2 +328,7 @@
 int ResizeByImage (int sock);
 
+char *ParseColormapName (char *name, KapaColorMapMode *mode);
+int CheckFileAccess (char *name);
+char *FindColormap (char *name);
+char *ParseColormapModeFromEnum (KapaColorMapMode mode);
+void ListColormaps (void);
Index: /trunk/Ohana/src/kapa2/src/FindColormap.c.in
===================================================================
--- /trunk/Ohana/src/kapa2/src/FindColormap.c.in	(revision 42821)
+++ /trunk/Ohana/src/kapa2/src/FindColormap.c.in	(revision 42821)
@@ -0,0 +1,178 @@
+# include "Ximage.h"
+# include <glob.h>
+
+// look for the colormap files in the local directory first, then
+// in the directory given by @DATADIR@
+// XXX : probably need to check the input name length
+
+// XXX it would help to be able to list the existing colormaps
+// XXX it would help to be able to recognize the colormap format
+// or better yet have kapa recognize the type from the file
+
+char *ParseColormapName (char *name, KapaColorMapMode *mode) {
+
+  *mode = KAPA_CM_STATIC;
+
+  if (!strncmp (name, "file:", 5)) *mode = KAPA_CM_RAW;
+  if (!strncmp (name, "lgcy:", 5)) *mode = KAPA_CM_LEGACY;
+  if (!strncmp (name, "cetf:", 5)) *mode = KAPA_CM_CET;
+  if (!strncmp (name, "cetr:", 5)) *mode = KAPA_CM_CET_REV;
+  if (!strncmp (name, "csvf:", 5)) *mode = KAPA_CM_CSV;
+  
+  // the output name needs to be allocated so it can be freed above
+  if (*mode == KAPA_CM_STATIC) return (strcreate (name));
+
+  return (strcreate (&name[5]));
+}
+
+static char *KAPA_CM_NAME_NONE   = "none";
+static char *KAPA_CM_NAME_STATIC = "static";
+static char *KAPA_CM_NAME_RAW    = "raw";
+static char *KAPA_CM_NAME_LGCY   = "lgcy";
+static char *KAPA_CM_NAME_CETF   = "cetf";
+static char *KAPA_CM_NAME_CETR   = "cetr";
+static char *KAPA_CM_NAME_CSVF   = "csvf";
+
+char *ParseColormapModeFromEnum (KapaColorMapMode mode) {
+
+  if (mode == KAPA_CM_NONE)    { return KAPA_CM_NAME_NONE; }
+  if (mode == KAPA_CM_STATIC)  { return KAPA_CM_NAME_STATIC; }
+  if (mode == KAPA_CM_RAW)     { return KAPA_CM_NAME_RAW;    }
+  if (mode == KAPA_CM_LEGACY)  { return KAPA_CM_NAME_LGCY;   }
+  if (mode == KAPA_CM_CET)     { return KAPA_CM_NAME_CETF;   }
+  if (mode == KAPA_CM_CET_REV) { return KAPA_CM_NAME_CETR;   }
+  if (mode == KAPA_CM_CSV)     { return KAPA_CM_NAME_CSVF;   }
+  return NULL;
+}
+
+int CheckColormapFileFormat (char *filename) {
+  
+  // is the name one of the static colormaps?
+  int isStatic = FALSE;
+  isStatic = isStatic || !strcasecmp (filename, "fullcolor");
+  isStatic = isStatic || !strcasecmp (filename, "ruffcolor");
+  isStatic = isStatic || !strcasecmp (filename, "grayscale");
+  isStatic = isStatic || !strcasecmp (filename, "greyscale");
+  isStatic = isStatic || !strcasecmp (filename, "-grayscale");
+  isStatic = isStatic || !strcasecmp (filename, "-greyscale");
+  isStatic = isStatic || !strcasecmp (filename, "Heat");
+  isStatic = isStatic || !strcasecmp (filename, "Rainbow");
+  isStatic = isStatic || !strcasecmp (filename, "anuenue");
+  if (isStatic) return KAPA_CM_STATIC;
+
+  // open the file
+  
+  FILE *f = fopen (filename, "r");
+  if (!f) {
+    fprintf (stderr, "failed to open colormap file %s\n", filename);
+    return FALSE;
+  }
+
+  char line[1024];
+
+  // read until we get a line which is not blank or commented out
+  while (scan_line_maxlen (f, line, 1024) != EOF) {
+
+    // scan past leading whitespace
+    char *p = line;
+    while ((*p != 0) && OHANA_WHITESPACE(*p)) { p++; }
+    if (*p == 0) { continue; }
+
+    // skip any lines with comment character:
+    if (*p == '#') { continue; }
+
+    float fracIndex, fracRed, fracBlue, fracGreen;
+
+    // we have a line to test:
+    int Nscan1 = sscanf (line, "%f,%f,%f,%f", &fracIndex, &fracRed, &fracGreen, &fracBlue);
+    int Nscan2 = sscanf (line, "%f,%f,%f", &fracRed, &fracGreen, &fracBlue);
+    int Nscan3 = sscanf (line, "%f %f %f %f", &fracIndex, &fracRed, &fracBlue, &fracGreen);
+
+    // the scanf does not require the comma, can 
+    if (Nscan1 == 4) { return KAPA_CM_CSV; }
+    if (Nscan2 == 3) { return KAPA_CM_CET; } // could also be CET_REV
+    if (Nscan3 == 4) { return KAPA_CM_RAW; } // could also be LEGACY
+
+    fclose (f);
+    return KAPA_CM_NONE;
+  }
+  fclose (f);
+  return KAPA_CM_NONE;
+}
+
+int CheckFileAccess (char *name) {
+  
+  static int gotIDs = FALSE;
+  struct stat filestat;
+  static uid_t uid;
+  static gid_t gid;
+  int status;
+  
+  // only do this once, should not change while program is running
+  if (!gotIDs) {
+    uid = getuid();
+    gid = getgid();
+    gotIDs = TRUE;
+  }
+
+  /* check permission to read file */
+  status = stat (name, &filestat);
+  if (status == 0) { /* file exists, are permissions OK? */
+    if (((uid == filestat.st_uid) && (filestat.st_mode & S_IRUSR)) ||
+	((gid == filestat.st_gid) && (filestat.st_mode & S_IRGRP)) || 
+	(                            (filestat.st_mode & S_IROTH))) {
+      return (TRUE);
+    } 
+  }
+  return (FALSE);
+}
+
+// returns the name of an existing file
+char *FindColormap (char *name) {
+
+  static char *datadir = "@DATADIR@/colormaps";
+
+  char *filename;
+  int Nbytes;
+
+  // make a copy of the file name if it is found locally
+  if (CheckFileAccess (name)) {
+    fprintf (stderr, "found local: %s\n", name);
+    return (strcreate (name));
+  }
+
+  // name is like
+  Nbytes = strlen(datadir) + strlen(name) + 2;
+  ALLOCATE (filename, char, Nbytes);
+  snprintf (filename, Nbytes, "%s/%s", datadir, name);
+    
+  // make a copy of the file name if it is found locally
+  if (CheckFileAccess (filename)) {
+    fprintf (stderr, "found installed: %s\n", filename);
+    return (strcreate (filename));
+  }
+
+  return NULL;
+}
+
+// returns the name of an existing file
+void ListColormaps (void) {
+
+  static char *datadir = "@DATADIR@/colormaps";
+  char dataglob[1024];
+
+  sprintf (dataglob, "%s/*.cm", datadir);
+
+  glob_t globList;
+
+  // parse the filename as a glob
+  globList.gl_offs = 0;
+  glob (dataglob, 0, NULL, &globList);
+
+  int Nfile = globList.gl_pathc;
+  for (int i = 0; i < Nfile; i++) {
+    int format = CheckColormapFileFormat (globList.gl_pathv[i]);
+    fprintf (stderr, "%s : %s\n", globList.gl_pathv[i], ParseColormapModeFromEnum (format));
+  }
+}
+
Index: /trunk/Ohana/src/kapa2/src/SetColormap.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/SetColormap.c	(revision 42820)
+++ /trunk/Ohana/src/kapa2/src/SetColormap.c	(revision 42821)
@@ -21,4 +21,9 @@
   float scale, blueRef, redRef, greenRef;
   Graphic *graphic;
+
+  if (inName && !strcasecmp(inName, "list")) {
+    ListColormaps ();
+    return TRUE;
+  }
 
   graphic = GetGraphic();
@@ -214,107 +219,139 @@
 
   /* anuenue */
-  if (!strncmp (graphic->colormapName, "file:", 5) || 
-      !strncmp (graphic->colormapName, "lgcy:", 5) || 
-      !strncmp (graphic->colormapName, "cetf:", 5) || 
-      !strncmp (graphic->colormapName, "cetr:", 5) || 
-      !strncmp (graphic->colormapName, "csvf:", 5)) {
-
-    FILE *f = fopen (&graphic->colormapName[5], "r");
-    if (!f) {
-      fprintf (stderr, "failed to open colormap file %s\n", &graphic->colormapName[5]);
+  KapaColorMapMode mode = KAPA_CM_STATIC;
+
+  // we should already have handled the static colormaps by this point
+  char *basename = ParseColormapName (graphic->colormapName, &mode);
+  if (mode == KAPA_CM_STATIC) {
+    fprintf (stderr, "unknown static colormap name %s\n", graphic->colormapName);
+    free (basename);
+    return FALSE;
+  }    
+
+  // look in local directory and installation directory
+  char *truename = FindColormap (basename);
+  FREE (basename);
+
+  if (!truename) {
+      fprintf (stderr, "cannot find colormap file %s\n", &graphic->colormapName[5]);
       return FALSE;
-    }
-    char line[1024];
-
-    int lastIndex = 0;
-    float lastRed = 0.0;
-    float lastBlue = 0.0;
-    float lastGreen = 0.0;
-
-    int isCSV = !strncmp (graphic->colormapName, "csvf:", 5);
-    int isCET = !strncmp (graphic->colormapName, "cetf:", 5);
-    int isCETRev = !strncmp (graphic->colormapName, "cetr:", 5);
-    int isLegacy = !strncmp (graphic->colormapName, "lgcy:", 5);
-
-    float fracIndex, fracRed, fracBlue, fracGreen;
-
-    if (isCET || isCETRev) fracIndex = 0.0;
-
-    while (scan_line_maxlen (f, line, 1024) != EOF) {
-      // file contains f R G B : f = 0.0 - 1.0, R,G,B = 0.0 - 1.0
-
-      int Nscan;
-      if (isCSV) {
-	Nscan = sscanf (line, "%f,%f,%f,%f", &fracIndex, &fracRed, &fracGreen, &fracBlue);
-	if (Nscan != 4) continue;
-      }
-      if (isCET || isCETRev) {
-	Nscan = sscanf (line, "%f,%f,%f", &fracRed, &fracGreen, &fracBlue);
-	fracIndex += 1.0 / 256.0;
-	if (Nscan != 3) continue;
-      }
-      if (isLegacy) {
-	Nscan = sscanf (line, "%f %f %f %f", &fracIndex, &fracRed, &fracBlue, &fracGreen);
-	if (Nscan != 4) continue;
-      }
-      if (!isCSV && !isLegacy && !isCET && !isCETRev) {
-	Nscan = sscanf (line, "%f %f %f %f", &fracIndex, &fracRed, &fracGreen, &fracBlue);
-	if (Nscan != 4) continue;
-      }
-
-      int nextIndex = fracIndex * MaxValue;
-      if (nextIndex <= lastIndex) {
-	lastRed = fracRed;
-	lastBlue = fracBlue;
-	lastGreen = fracGreen;
-	continue;
-      }
-      float dRdI = (fracRed   - lastRed)   / (float) (nextIndex - lastIndex);
-      float dBdI = (fracBlue  - lastBlue)  / (float) (nextIndex - lastIndex);
-      float dGdI = (fracGreen - lastGreen) / (float) (nextIndex - lastIndex);
-      for (i = lastIndex; i < nextIndex; i++) {
-	float redValue   = 0xffff * (dRdI * (i - lastIndex) + lastRed);
-	float blueValue  = 0xffff * (dBdI * (i - lastIndex) + lastBlue);
-	float greenValue = 0xffff * (dGdI * (i - lastIndex) + lastGreen);
-	SETVALUE (graphic[0].cmap[i].red,   redValue,   0, 0xffff);
-	SETVALUE (graphic[0].cmap[i].blue,  blueValue,  0, 0xffff);
-	SETVALUE (graphic[0].cmap[i].green, greenValue, 0, 0xffff);
-      }
+  }
+  
+  FILE *f = fopen (truename, "r");
+  if (!f) {
+    fprintf (stderr, "failed to open colormap file %s\n", truename);
+    FREE (truename);
+    return FALSE;
+  }
+  FREE (truename);
+
+  char line[1024];
+  
+  int lastIndex = 0;
+  float lastRed = 0.0;
+  float lastBlue = 0.0;
+  float lastGreen = 0.0;
+  
+  float fracIndex, fracRed, fracBlue, fracGreen;
+
+  if (mode == KAPA_CM_CET || mode == KAPA_CM_CET_REV) fracIndex = 0.0;
+
+  int checkFormat = TRUE;
+
+  while (scan_line_maxlen (f, line, 1024) != EOF) {
+    // file contains f R G B : f = 0.0 - 1.0, R,G,B = 0.0 - 1.0
+    // skip any lines with comment character:
+
+    char *p = line;
+    while ((*p != 0) && OHANA_WHITESPACE(*p)) { p++; }
+    if (*p == 0) { continue; }
+    if (*p == '#') { continue; }
+
+    // attempt to confirm the format (and warn if it does not seem to match)
+    if (checkFormat) {
+      int Nscan1 = sscanf (line, "%f,%f,%f,%f", &fracIndex, &fracRed, &fracGreen, &fracBlue);
+      int Nscan2 = sscanf (line, "%f,%f,%f", &fracRed, &fracGreen, &fracBlue);
+      int Nscan3 = sscanf (line, "%f %f %f %f", &fracIndex, &fracRed, &fracBlue, &fracGreen);
+
+      if (Nscan1 == 4) {
+	if (mode != KAPA_CM_CSV) { fprintf (stderr, "warning: %s appears to be format csvf: not %s\n line: %s\n", graphic->colormapName, ParseColormapModeFromEnum(mode), line); }
+      }
+      if (Nscan2 == 3) {
+	if ((mode != KAPA_CM_CET) && (mode != KAPA_CM_CET_REV)) { fprintf (stderr, "warning: %s appears to be format cetf: or cetf: not %s\n line: %s\n", graphic->colormapName, ParseColormapModeFromEnum(mode), line); }
+      }
+      if (Nscan3 == 4) {
+	if (mode != KAPA_CM_RAW) { fprintf (stderr, "warning: %s appears to be format file: not %s\n line: %s\n", graphic->colormapName, ParseColormapModeFromEnum(mode), line); }
+      }
+      checkFormat = FALSE;
+    }
+
+    int Nscan;
+    if (mode == KAPA_CM_CSV) {
+      Nscan = sscanf (line, "%f,%f,%f,%f", &fracIndex, &fracRed, &fracGreen, &fracBlue);
+      if (Nscan != 4) continue;
+    }
+    if ((mode == KAPA_CM_CET || mode == KAPA_CM_CET_REV)) {
+      Nscan = sscanf (line, "%f,%f,%f", &fracRed, &fracGreen, &fracBlue);
+      fracIndex += 1.0 / 256.0;
+      if (Nscan != 3) continue;
+    }
+    if (mode == KAPA_CM_LEGACY) {
+      Nscan = sscanf (line, "%f %f %f %f", &fracIndex, &fracRed, &fracBlue, &fracGreen);
+      if (Nscan != 4) continue;
+    }
+    if (mode == KAPA_CM_RAW) {
+      Nscan = sscanf (line, "%f %f %f %f", &fracIndex, &fracRed, &fracGreen, &fracBlue);
+      if (Nscan != 4) continue;
+    }
+    
+    int nextIndex = fracIndex * MaxValue;
+    if (nextIndex <= lastIndex) {
       lastRed = fracRed;
       lastBlue = fracBlue;
       lastGreen = fracGreen;
-      lastIndex = nextIndex;
-    }
-    fclose (f);
-
-    if ((int) (MaxValue*fracIndex) < MaxValue) {
-      float dRdI = (1.0 - lastRed)   / (float) (MaxValue - lastIndex);
-      float dBdI = (1.0 - lastBlue)  / (float) (MaxValue - lastIndex);
-      float dGdI = (1.0 - lastGreen) / (float) (MaxValue - lastIndex);
-      for (i = lastIndex; i < MaxValue; i++) {
-	float redValue   = 0xffff * (dRdI * (i - lastIndex) + lastRed);
-	float blueValue  = 0xffff * (dBdI * (i - lastIndex) + lastBlue);
-	float greenValue = 0xffff * (dGdI * (i - lastIndex) + lastGreen);
-	SETVALUE (graphic[0].cmap[i].red,   redValue,   0, 0xffff);
-	SETVALUE (graphic[0].cmap[i].blue,  blueValue,  0, 0xffff);
-	SETVALUE (graphic[0].cmap[i].green, greenValue, 0, 0xffff);
-      }
-    }
-
-    // reverse the color sequence:
-    if (isCETRev) {
-      for (i = 0; i < MaxValue / 2; i++) {  
-	unsigned short tmp;
-	// fprintf (stderr, "swap: %d %d\n", graphic[0].cmap[i].red, graphic[0].cmap[MaxValue - 1 - i].red);
-	tmp = graphic[0].cmap[i].red;   graphic[0].cmap[i].red   = graphic[0].cmap[MaxValue - 1 - i].red;   graphic[0].cmap[MaxValue - 1 - i].red   = tmp;
-	tmp = graphic[0].cmap[i].blue;  graphic[0].cmap[i].blue  = graphic[0].cmap[MaxValue - 1 - i].blue;  graphic[0].cmap[MaxValue - 1 - i].blue  = tmp;
-	tmp = graphic[0].cmap[i].green; graphic[0].cmap[i].green = graphic[0].cmap[MaxValue - 1 - i].green; graphic[0].cmap[MaxValue - 1 - i].green = tmp;
-      }
-    }
-
-    goto store_colors;
-  }
-
-  return (FALSE);
+      continue;
+    }
+    float dRdI = (fracRed   - lastRed)   / (float) (nextIndex - lastIndex);
+    float dBdI = (fracBlue  - lastBlue)  / (float) (nextIndex - lastIndex);
+    float dGdI = (fracGreen - lastGreen) / (float) (nextIndex - lastIndex);
+    for (i = lastIndex; i < nextIndex; i++) {
+      float redValue   = 0xffff * (dRdI * (i - lastIndex) + lastRed);
+      float blueValue  = 0xffff * (dBdI * (i - lastIndex) + lastBlue);
+      float greenValue = 0xffff * (dGdI * (i - lastIndex) + lastGreen);
+      SETVALUE (graphic[0].cmap[i].red,   redValue,   0, 0xffff);
+      SETVALUE (graphic[0].cmap[i].blue,  blueValue,  0, 0xffff);
+      SETVALUE (graphic[0].cmap[i].green, greenValue, 0, 0xffff);
+    }
+    lastRed = fracRed;
+    lastBlue = fracBlue;
+    lastGreen = fracGreen;
+    lastIndex = nextIndex;
+  }
+  fclose (f);
+
+  if ((int) (MaxValue*fracIndex) < MaxValue) {
+    float dRdI = (1.0 - lastRed)   / (float) (MaxValue - lastIndex);
+    float dBdI = (1.0 - lastBlue)  / (float) (MaxValue - lastIndex);
+    float dGdI = (1.0 - lastGreen) / (float) (MaxValue - lastIndex);
+    for (i = lastIndex; i < MaxValue; i++) {
+      float redValue   = 0xffff * (dRdI * (i - lastIndex) + lastRed);
+      float blueValue  = 0xffff * (dBdI * (i - lastIndex) + lastBlue);
+      float greenValue = 0xffff * (dGdI * (i - lastIndex) + lastGreen);
+      SETVALUE (graphic[0].cmap[i].red,   redValue,   0, 0xffff);
+      SETVALUE (graphic[0].cmap[i].blue,  blueValue,  0, 0xffff);
+      SETVALUE (graphic[0].cmap[i].green, greenValue, 0, 0xffff);
+    }
+  }
+
+  // reverse the color sequence:
+  if (mode == KAPA_CM_CET_REV) {
+    for (i = 0; i < MaxValue / 2; i++) {  
+      unsigned short tmp;
+      // fprintf (stderr, "swap: %d %d\n", graphic[0].cmap[i].red, graphic[0].cmap[MaxValue - 1 - i].red);
+      tmp = graphic[0].cmap[i].red;   graphic[0].cmap[i].red   = graphic[0].cmap[MaxValue - 1 - i].red;   graphic[0].cmap[MaxValue - 1 - i].red   = tmp;
+      tmp = graphic[0].cmap[i].blue;  graphic[0].cmap[i].blue  = graphic[0].cmap[MaxValue - 1 - i].blue;  graphic[0].cmap[MaxValue - 1 - i].blue  = tmp;
+      tmp = graphic[0].cmap[i].green; graphic[0].cmap[i].green = graphic[0].cmap[MaxValue - 1 - i].green; graphic[0].cmap[MaxValue - 1 - i].green = tmp;
+    }
+  }
 
  store_colors:
@@ -333,3 +370,2 @@
   return (TRUE);
 }
-
Index: /trunk/Ohana/src/libdvo/include/dvodb.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/dvodb.h	(revision 42820)
+++ /trunk/Ohana/src/libdvo/include/dvodb.h	(revision 42821)
@@ -547,5 +547,5 @@
 
 dbValue      dbExtractAverages      PROTO((Average *average, SecFilt *secfilt, Measure *measure, Lensobj *lensobj, StarPar *starpar, GalPhot *galphot, dbField *field));
-dbValue      dbExtractMeasures      PROTO((Average *average, SecFilt *secfilt, Measure *measure, Lensing *lensing, StarPar *starpar, dbField *field));
+dbValue      dbExtractMeasures      PROTO((Average *average, SecFilt *secfilt, Lensobj *lensobj, Measure *measure, Lensing *lensing, StarPar *starpar, GalPhot *galphot, dbField *field));
 dbValue      dbExtractImages        PROTO((Image *image, off_t Nimage, off_t N, dbField *field));
 
Index: /trunk/Ohana/src/libdvo/include/libdvo_astro.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/libdvo_astro.h	(revision 42820)
+++ /trunk/Ohana/src/libdvo/include/libdvo_astro.h	(revision 42821)
@@ -20,4 +20,5 @@
   PROJ_TNX, // zenithal
   PROJ_DIS, // zenithal (TAN + polyterms)
+  PROJ_CAR, // cartesian (Plat-Carre)
   PROJ_LIN, // cartesian
   PROJ_PLY, // cartesian (allow polyterms)
Index: /trunk/Ohana/src/libdvo/src/cmf-ps1-v5-r0.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/cmf-ps1-v5-r0.c	(revision 42820)
+++ /trunk/Ohana/src/libdvo/src/cmf-ps1-v5-r0.c	(revision 42821)
@@ -96,14 +96,14 @@
     SWAP_BYTE (236); // SRC_CHIP_Y      
     SWAP_BYTE (238); // PADDING3        
-    SWAP_WORD (242); // MOMENTS_R1
-    SWAP_WORD (246); // MOMENTS_RH
-    SWAP_WORD (250); // KRON_FLUX
-    SWAP_WORD (254); // KRON_FLUX_ERR
-    SWAP_WORD (258); // KRON_FLUX_INNER
-    SWAP_WORD (262); // KRON_FLUX_OUTER
-    SWAP_WORD (266); // SKY_LIMIT_RAD
-    SWAP_WORD (270); // SKY_LIMIT_FLUX
-    SWAP_WORD (274); // SKY_LIMIT_SLOPE
-    SWAP_WORD (278); // FLAGS
+    SWAP_WORD (240); // MOMENTS_R1
+    SWAP_WORD (244); // MOMENTS_RH
+    SWAP_WORD (248); // KRON_FLUX
+    SWAP_WORD (252); // KRON_FLUX_ERR
+    SWAP_WORD (256); // KRON_FLUX_INNER
+    SWAP_WORD (260); // KRON_FLUX_OUTER
+    SWAP_WORD (264); // SKY_LIMIT_RAD
+    SWAP_WORD (268); // SKY_LIMIT_FLUX
+    SWAP_WORD (272); // SKY_LIMIT_SLOPE
+    SWAP_WORD (276); // FLAGS
     SWAP_WORD (280); // FLAGS2
     SWAP_BYTE (284); // N_FRAMES
Index: /trunk/Ohana/src/libdvo/src/coordops.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/coordops.c	(revision 42820)
+++ /trunk/Ohana/src/libdvo/src/coordops.c	(revision 42821)
@@ -1072,4 +1072,5 @@
   if (!strncmp(&ctype[4], "-TNX", 4)) return PROJ_TNX;
   if (!strncmp(&ctype[4], "-DIS", 4)) return PROJ_DIS;
+  if (!strncmp(&ctype[4], "-CAR", 4)) return PROJ_CAR;
   if (!strncmp(&ctype[4], "-LIN", 4)) return PROJ_LIN;
   if (!strncmp(&ctype[0], "GENE", 4)) return PROJ_LIN; // note ctype[0]
@@ -1094,4 +1095,5 @@
     case PROJ_TNX: strcpy(&ctype[4], "-TNX"); return TRUE;
     case PROJ_DIS: strcpy(&ctype[4], "-DIS"); return TRUE;
+    case PROJ_CAR: strcpy(&ctype[4], "-CAR"); return TRUE;
     case PROJ_LIN: strcpy(&ctype[4], "-LIN"); return TRUE;
     case PROJ_PLY: strcpy(&ctype[4], "-PLY"); return TRUE;
@@ -1118,4 +1120,5 @@
     case PROJ_DIS:
       return PROJ_MODE_ZENITHAL;
+    case PROJ_CAR: 
     case PROJ_LIN: 
     case PROJ_PLY: 
Index: /trunk/Ohana/src/libdvo/src/dbExtractMeasures.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 42820)
+++ /trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 42821)
@@ -85,5 +85,5 @@
 
 /* return measure.field based on the selection */
-dbValue dbExtractMeasures (Average *average, SecFilt *secfilt, Measure *measure, Lensing *lensing, StarPar *starpar, dbField *field) {
+dbValue dbExtractMeasures (Average *average, SecFilt *secfilt, Lensobj *lensobj, Measure *measure, Lensing *lensing, StarPar *starpar, GalPhot *galphot, dbField *field) {
 
   int Nsec;
@@ -264,63 +264,69 @@
 	  
 	  // the following values come from the mean lensobj table
-	case MAG_OPTION_X11_SM_OBJ: 
-	case MAG_OPTION_X12_SM_OBJ: 
-	case MAG_OPTION_X22_SM_OBJ: 
-	case MAG_OPTION_E1_SM_OBJ: 
-	case MAG_OPTION_E2_SM_OBJ: 
-	case MAG_OPTION_X11_SH_OBJ: 
-	case MAG_OPTION_X12_SH_OBJ: 
-	case MAG_OPTION_X22_SH_OBJ: 
-	case MAG_OPTION_E1_SH_OBJ: 
-	case MAG_OPTION_E2_SH_OBJ: 
-	case MAG_OPTION_X11_SM_PSF: 
-	case MAG_OPTION_X12_SM_PSF: 
-	case MAG_OPTION_X22_SM_PSF: 
-	case MAG_OPTION_E1_SM_PSF: 
-	case MAG_OPTION_E2_SM_PSF: 
-	case MAG_OPTION_X11_SH_PSF: 
-	case MAG_OPTION_X12_SH_PSF: 
-	case MAG_OPTION_X22_SH_PSF: 
-	case MAG_OPTION_E1_SH_PSF: 
-	case MAG_OPTION_E2_SH_PSF: 
-
-	case MAG_OPTION_E1_PSF: 
-	case MAG_OPTION_E2_PSF: 
-
-	case MAG_OPTION_F_AP_R5: 
-	case MAG_OPTION_F_ERR_AP_R5: 
-	case MAG_OPTION_F_STDEV_AP_R5: 
-	case MAG_OPTION_F_FILL_AP_R5: 
-	case MAG_OPTION_F_AP_R6: 
-	case MAG_OPTION_F_ERR_AP_R6: 
-	case MAG_OPTION_F_STDEV_AP_R6: 
-	case MAG_OPTION_F_FILL_AP_R6: 
-	case MAG_OPTION_F_AP_R7: 
-	case MAG_OPTION_F_ERR_AP_R7: 
-	case MAG_OPTION_F_STDEV_AP_R7: 
-	case MAG_OPTION_F_FILL_AP_R7: 
-	case MAG_OPTION_E1: 
-	case MAG_OPTION_E2: 
-
-	case MAG_OPTION_GAL_MAG:       
-	case MAG_OPTION_GAL_MAG_ERR:   
-	case MAG_OPTION_GAL_MAJ:       
-	case MAG_OPTION_GAL_MAJ_ERR:   
-	case MAG_OPTION_GAL_MIN:       
-	case MAG_OPTION_GAL_MIN_ERR:   
-	case MAG_OPTION_GAL_THETA:     
-	case MAG_OPTION_GAL_THETA_ERR: 
-	case MAG_OPTION_GAL_INDEX:     
-	case MAG_OPTION_GAL_CHISQ:     
-	case MAG_OPTION_GAL_NPIX:      
-	case MAG_OPTION_GAL_FLAGS:      
-	case MAG_OPTION_GAL_TYPE:      
-	case MAG_OPTION_GAL_OBJ_ID:
-	case MAG_OPTION_GAL_CAT_ID:
-	case MAG_OPTION_GAL_DET_ID:
-	case MAG_OPTION_GAL_IMAGE_ID:
-
-	case MAG_OPTION_NONE:
-	  break;
+	  // g:X11_SM_OBJ, etc, are only valid for average 
+	case MAG_OPTION_X11_SM_OBJ: { value.Flt = LensValue_X11_sm_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X12_SM_OBJ: { value.Flt = LensValue_X12_sm_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X22_SM_OBJ: { value.Flt = LensValue_X22_sm_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E1_SM_OBJ:  { value.Flt = LensValue_E1_sm_obj  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2_SM_OBJ:  { value.Flt = LensValue_E2_sm_obj  (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_X11_SH_OBJ: { value.Flt = LensValue_X11_sh_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X12_SH_OBJ: { value.Flt = LensValue_X12_sh_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X22_SH_OBJ: { value.Flt = LensValue_X22_sh_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E1_SH_OBJ:  { value.Flt = LensValue_E1_sh_obj  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2_SH_OBJ:  { value.Flt = LensValue_E2_sh_obj  (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_X11_SM_PSF: { value.Flt = LensValue_X11_sm_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X12_SM_PSF: { value.Flt = LensValue_X12_sm_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X22_SM_PSF: { value.Flt = LensValue_X22_sm_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E1_SM_PSF:  { value.Flt = LensValue_E1_sm_psf  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2_SM_PSF:  { value.Flt = LensValue_E2_sm_psf  (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_X11_SH_PSF: { value.Flt = LensValue_X11_sh_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X12_SH_PSF: { value.Flt = LensValue_X12_sh_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X22_SH_PSF: { value.Flt = LensValue_X22_sh_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E1_SH_PSF:  { value.Flt = LensValue_E1_sh_psf  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2_SH_PSF:  { value.Flt = LensValue_E2_sh_psf  (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_F_AP_R5:       { value.Flt = LensValue_F_ApR5  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_ERR_AP_R5:   { value.Flt = LensValue_dF_ApR5 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_STDEV_AP_R5: { value.Flt = LensValue_sF_ApR5 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_FILL_AP_R5:  { value.Flt = LensValue_fF_ApR5 (field->photcode, lensobj, average->Nlensobj); break; }
+												
+	case MAG_OPTION_F_AP_R6:       { value.Flt = LensValue_F_ApR6  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_ERR_AP_R6:   { value.Flt = LensValue_dF_ApR6 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_STDEV_AP_R6: { value.Flt = LensValue_sF_ApR6 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_FILL_AP_R6:  { value.Flt = LensValue_fF_ApR6 (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_F_AP_R7:       { value.Flt = LensValue_F_ApR7  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_ERR_AP_R7:   { value.Flt = LensValue_dF_ApR7 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_STDEV_AP_R7: { value.Flt = LensValue_sF_ApR7 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_FILL_AP_R7:  { value.Flt = LensValue_fF_ApR7 (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_E1:  	       { value.Flt = LensValue_E1      (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2:  	       { value.Flt = LensValue_E2      (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_GAL_MAG:      { value.Flt = GalphotValue_GAL_MAG      (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_MAG_ERR:  { value.Flt = GalphotValue_GAL_MAG_ERR  (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_MAJ:      { value.Flt = GalphotValue_GAL_MAJ      (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_MAJ_ERR:  { value.Flt = GalphotValue_GAL_MAJ_ERR  (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_MIN:      { value.Flt = GalphotValue_GAL_MIN      (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_MIN_ERR:  { value.Flt = GalphotValue_GAL_MIN_ERR  (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_THETA:    { value.Flt = GalphotValue_GAL_THETA    (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_THETA_ERR:{ value.Flt = GalphotValue_GAL_THETA_ERR(field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_INDEX:    { value.Flt = GalphotValue_GAL_INDEX    (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_CHISQ:    { value.Flt = GalphotValue_GAL_CHISQ    (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_NPIX:     { value.Flt = GalphotValue_GAL_NPIX     (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_TYPE:     { value.Flt = GalphotValue_GAL_TYPE     (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_FLAGS:    { value.Flt = GalphotValue_GAL_FLAGS    (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+
+	case MAG_OPTION_GAL_OBJ_ID:   { value.Flt = GalphotValue_GAL_OBJ_ID   (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_CAT_ID:   { value.Flt = GalphotValue_GAL_CAT_ID   (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_DET_ID:   { value.Flt = GalphotValue_GAL_DET_ID   (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_IMAGE_ID: { value.Flt = GalphotValue_GAL_IMAGE_ID (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+
+	case MAG_OPTION_E1_PSF: break;
+	case MAG_OPTION_E2_PSF: break;
+	case MAG_OPTION_NONE: break;
       }
       break;
Index: /trunk/Ohana/src/libdvo/src/dvo_photcode_utils.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_photcode_utils.c	(revision 42820)
+++ /trunk/Ohana/src/libdvo/src/dvo_photcode_utils.c	(revision 42821)
@@ -1,3 +1,10 @@
 # include <dvo.h>
+
+/* the photcode table includes a number of SEC types, photcodes->Nsecfilt
+   hashNsec[code] returns the number in the sequence 0 - Nsecfilt for a given SEC code
+*/
+
+// these APIs originally just matched by number of the code, but they should
+// match by the *name* of the photcode (e.g., g = g)
 
 // Create a map between the secfilt values from one photcode table to another
@@ -11,20 +18,17 @@
   // loop over entries in the input table
   for (i = 0; i < NsecfiltIn; i++) {
-    int code  = input[0].codeNsec[i];
+    int inseq  = input[0].codeNsec[i];
+    myAssert (inseq > -1, "invalid SEC");
+    int incode   = input[0].hashcode[inseq];
     int entry = -1;
     // find the matching entry in the output table
     for (j = 0; j < NsecfiltOut; j++) {
-      int outcode = output[0].codeNsec[j];
-      if (code == outcode) {
-	 entry = j;
-	 break;
-      }
+      int outseq = output[0].codeNsec[j];
+      myAssert (outseq > -1, "invalid SEC");
+      int outcode   = output[0].hashcode[outseq];
+      if (strcmp (input[0].code[incode].name, output[0].code[outcode].name)) continue;
+      entry = j;
+      break;
     }
-    // if (entry == -1) {
-    //   // entry is missing fail (no printfs in this file)
-    //   free(map);
-    //   return(FALSE);
-    // }
-
     // if entry is still -1, we will skip this one (not map into the output db)
     map[i] = entry;
Index: /trunk/Ohana/src/libkapa/src/IOfuncs.c
===================================================================
--- /trunk/Ohana/src/libkapa/src/IOfuncs.c	(revision 42820)
+++ /trunk/Ohana/src/libkapa/src/IOfuncs.c	(revision 42821)
@@ -89,4 +89,8 @@
   if (Nbytes == 0) {
     return TRUE;
+  }
+  if (Nbytes < 0) {
+    fprintf (stderr, "error in kapa communication (KiiScanMessage) %s\n", buffer);
+    return FALSE;
   }
 
Index: /trunk/Ohana/src/libkapa/src/KapaWindow.c
===================================================================
--- /trunk/Ohana/src/libkapa/src/KapaWindow.c	(revision 42820)
+++ /trunk/Ohana/src/libkapa/src/KapaWindow.c	(revision 42821)
@@ -259,4 +259,6 @@
 		  data[0].formatYm, data[0].formatYp);
 
+  memset (&data[0].coords, 0, sizeof(data[0].coords));
+
   KiiScanMessage (fd, "%f %f %f %f", 
 		  &data[0].coords.pc1_1, &data[0].coords.pc2_2,
@@ -301,5 +303,8 @@
   KiiSendCommand (fd, 4, "GSTY"); 
   
-  KapaScanGraphData (fd, data);
+  if (!KapaScanGraphData (fd, data)) {
+    fprintf (stderr, "error getting graph data KapaGetGraphData (sent GSTY)\n");
+    return FALSE;
+  }
 
   KiiWaitAnswer (fd, "DONE");
Index: /trunk/Ohana/src/libohana/include/ohana.h
===================================================================
--- /trunk/Ohana/src/libohana/include/ohana.h	(revision 42820)
+++ /trunk/Ohana/src/libohana/include/ohana.h	(revision 42821)
@@ -170,20 +170,20 @@
 
 /* if your build crashes on OFF_T_MODE, you probably need to add your 64bit hardware to this list */
-# ifdef _LARGEFILE_SOURCE
+# if defined(_LARGEFILE_SOURCE) && !defined(OFF_T_FMT)
 #  define OFF_T_FMT "%jd"
 # endif
 
-# ifdef lin64
+# if defined(lin64) && !defined(OFF_T_FMT)
 #  define OFF_T_FMT "%jd"
 # endif
 
 // mac is annoying
-# ifdef _DARWIN_C_SOURCE
+# if defined(_DARWIN_C_SOURCE) && !defined(OFF_T_FMT)
 #  define OFF_T_FMT "%lld"
 # endif
-# ifdef darwin_x86
+# if defined(darwin_x86) && !defined(OFF_T_FMT)
 #  define OFF_T_FMT "%lld"
 # endif
-# ifdef darwin
+# if defined(darwin) && !defined(OFF_T_FMT)
 #  define OFF_T_FMT "%lld"
 # endif
Index: /trunk/Ohana/src/libohana/src/ohana_allocate.c
===================================================================
--- /trunk/Ohana/src/libohana/src/ohana_allocate.c	(revision 42820)
+++ /trunk/Ohana/src/libohana/src/ohana_allocate.c	(revision 42821)
@@ -448,4 +448,6 @@
   int status = TRUE;
 
+  OhanaMemblock *prevBlock = NULL;
+
   while (thisBlock) {
 
@@ -475,4 +477,5 @@
     Nbytes += thisBlock->size;
 
+    prevBlock = thisBlock; // save for debugging
     thisBlock = thisBlock->prevBlock;
   }
@@ -480,5 +483,6 @@
   if (Ntotal || VERBOSE) {
     fprintf (stderr, "%zd memory blocks allocated (%zd bytes total), %zd good, %zd bad ", Ntotal, Nbytes, Ngood, Nbad);
-    fprintf (stderr, "@ %s:%d (%s)\n", myFile, myLine, myFunc);
+    fprintf (stderr, "@ %s:%d (%s) ", myFile, myLine, myFunc);
+    fprintf (stderr, "(%zd penultimate block)\n", (size_t) prevBlock);
   }
 
Index: /trunk/Ohana/src/opihi/cmd.astro/cdensify.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/cdensify.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/cdensify.c	(revision 42821)
@@ -1,3 +1,4 @@
 # include "data.h"
+# define dCOS(A)   ((double) cos ((double)RAD_DEG*A))
 
 # define CHECKVAL(ARG) if (!isfinite(ARG)) { gprint (GP_ERR, "illegal value for %s: %f\n", #ARG, ARG); return (FALSE); }
@@ -116,4 +117,7 @@
   PutCoords (&newcoords, &bf[0].header);
   
+  // use the mask to prevent double-counting
+  ALLOCATE_PTR (mask, char, Nx*Ny); 
+
   float scalescale = scale*scale;
   float scale2 = (scale + 1.0) * (scale + 1.0);
@@ -142,7 +146,13 @@
     coords.crval1 = rn;
     coords.crval2 = *d;
+    
+    // XXX do not oversample by more than a factor of 10
+    float dXn = dX * MAX(fabs(dCOS(*d)), 0.1);
 
     float F = 1.0;
     if (vv) { F = isFloatScale ? Fs[i] : Is[i]; }
+
+    // reset the mask so we do not double-count
+    memset (mask, 0, Nx*Ny);
 
     switch (PSFTYPE) {
@@ -162,5 +172,5 @@
 	break;
       case IS_SQUARE:
-	for (ix = -scale; ix <= scale; ix += dX) {
+	for (ix = -scale; ix <= scale; ix += dXn) {
 	  for (iy = -scale; iy <= scale; iy += dY) {
 	    double rp, dp;
@@ -184,6 +194,6 @@
 	break;
       case IS_CIRCLE:
-	for (ix = -scale; ix <= scale; ix += dX) {
-	  for (iy = -scale; iy <= scale; iy += dY) {
+	for (ix = -scale - dXn; ix <= scale + dXn; ix += dXn) {
+	  for (iy = -scale - dY; iy <= scale + dY; iy += dY) {
 	    float r2 = ix*ix + iy*iy;
 	    double rp, dp;
@@ -199,4 +209,6 @@
 	    if (Xb < 0) continue;
 	    if (Yb < 0) continue;
+	    if (mask[Xb + Yb*Nx]) continue;
+	    mask[Xb + Yb*Nx] = 1;
 	    if (vv) {
 	      val[Xb + Yb*Nx] += Normalize ? fCircle*F : F;
@@ -208,5 +220,5 @@
 	break;
       case IS_GAUSS:
-	for (ix = -3.0*scale; ix <= 3.0*scale; ix += dX) {
+	for (ix = -3.0*scale; ix <= 3.0*scale; ix += dXn) {
 	  for (iy = -3.0*scale; iy <= 3.0*scale; iy += dY) {
 	    float r2 = ix*ix + iy*iy;
@@ -232,4 +244,6 @@
     }
   }
+
+  free (mask);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-fgauss-pol.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-fgauss-pol.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-fgauss-pol.c	(revision 42821)
@@ -51,4 +51,14 @@
   set_variable ("Zpk",  par[5]);
   set_variable ("Sg",   par[6]);
+
+  /*
+  set_variable ("dXg",   dpar[0]);
+  set_variable ("dYg",   dpar[1]);
+  set_variable ("dSXg",  NAN);
+  set_variable ("dSYg",  NAN);
+  set_variable ("dSXYg", NAN);
+  set_variable ("dZpk",  dpar[5]);
+  set_variable ("dSg",   dpar[6]);
+  */
 }
 
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-fgauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-fgauss.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-fgauss.c	(revision 42821)
@@ -39,4 +39,14 @@
   set_variable ("Zpk",  par[5]);
   set_variable ("Sg",   par[6]);
+
+/*
+  set_variable ("dXg",   dpar[0]);
+  set_variable ("dYg",   dpar[1]);
+  set_variable ("dSXg",  2.35 / dpar[2]);
+  set_variable ("dSYg",  2.35 / dpar[3]);
+  set_variable ("dSXYg", dpar[4]);
+  set_variable ("dZpk",  dpar[5]);
+  set_variable ("dSg",   dpar[6]);
+*/
 }
 
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss-psf.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss-psf.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss-psf.c	(revision 42821)
@@ -35,4 +35,11 @@
   set_variable ("Zpk",  par[2]);
   set_variable ("Sg",   par[3]);
+
+/*
+  set_variable ("dXg",   dpar[0]);
+  set_variable ("dYg",   dpar[1]);
+  set_variable ("dZpk",  dpar[2]);
+  set_variable ("dSg",   dpar[3]);
+*/
 }
 
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss.c	(revision 42821)
@@ -37,4 +37,14 @@
   set_variable ("Zpk",  par[5]);
   set_variable ("Sg",   par[6]);
+
+/*
+  set_variable ("dXg",   dpar[0]);
+  set_variable ("dYg",   dpar[1]);
+  set_variable ("dSXg",  2.35 / dpar[2]);
+  set_variable ("dSYg",  2.35 / dpar[3]);
+  set_variable ("dSXYg", dpar[4]);
+  set_variable ("dZpk",  dpar[5]);
+  set_variable ("dSg",   dpar[6]);
+*/
 }
 
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-q2gauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-q2gauss.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-q2gauss.c	(revision 42821)
@@ -41,4 +41,15 @@
   set_variable ("Sg",   par[6]);
   set_variable ("Sr", par[7]);
+
+/*
+  set_variable ("dXg",   dpar[0]);
+  set_variable ("dYg",   dpar[1]);
+  set_variable ("dSXg",  2.35 / dpar[2]);
+  set_variable ("dSYg",  2.35 / dpar[3]);
+  set_variable ("dSXYg", dpar[4]);
+  set_variable ("dZpk",  dpar[5]);
+  set_variable ("dSg",   dpar[6]);
+  set_variable ("dSr",   dpar[7]);
+*/
 }
 
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-qfgauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-qfgauss.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-qfgauss.c	(revision 42821)
@@ -41,4 +41,14 @@
   set_variable ("Zpk",  par[5]);
   set_variable ("Sg",   par[6]);
+
+/*
+  set_variable ("dXg",   dpar[0]);
+  set_variable ("dYg",   dpar[1]);
+  set_variable ("dSXg",  2.35 / dpar[2]);
+  set_variable ("dSYg",  2.35 / dpar[3]);
+  set_variable ("dSXYg", dpar[4]);
+  set_variable ("dZpk",  dpar[5]);
+  set_variable ("dSg",   dpar[6]);
+*/
 }
 
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss-psf.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss-psf.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss-psf.c	(revision 42821)
@@ -38,4 +38,11 @@
   set_variable ("Zpk", par[2]);
   set_variable ("Sg",  par[3]);
+
+  /*
+  set_variable ("dXg",  dpar[0]);
+  set_variable ("dYg",  dpar[1]);
+  set_variable ("dZpk", dpar[2]);
+  set_variable ("dSg",  dpar[3]);
+  */
 }
 
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss.c	(revision 42821)
@@ -41,4 +41,15 @@
   set_variable ("Sg",   par[6]);
   set_variable ("Sr",   par[7]);
+
+/*
+  set_variable ("dXg",   dpar[0]);
+  set_variable ("dYg",   dpar[1]);
+  set_variable ("dSXg",  2.35 / dpar[2]);
+  set_variable ("dSYg",  2.35 / dpar[3]);
+  set_variable ("dSXYg", dpar[4]);
+  set_variable ("dZpk",  dpar[5]);
+  set_variable ("dSg",   dpar[6]);
+  set_variable ("dSr",   dpar[7]);
+*/
 }
 
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-qrgauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-qrgauss.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-qrgauss.c	(revision 42821)
@@ -42,4 +42,15 @@
   set_variable ("Sg",   par[6]);
   set_variable ("Npow", par[7]);
+
+/*
+  set_variable ("dXg",   dpar[0]);
+  set_variable ("dYg",   dpar[1]);
+  set_variable ("dSXg",  2.35 / dpar[2]);
+  set_variable ("dSYg",  2.35 / dpar[3]);
+  set_variable ("dSXYg", dpar[4]);
+  set_variable ("dZpk",  dpar[5]);
+  set_variable ("dSg",   dpar[6]);
+  set_variable ("dNpow",   dpar[7]);
+*/
 }
 
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-r2gauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-r2gauss.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-r2gauss.c	(revision 42821)
@@ -85,3 +85,16 @@
   set_variable ("SYf", 2.35 * sqrt(2.0) / par[8]);
   set_variable ("SXYf", par[9]);
+
+/*
+  set_variable ("dXg",   dpar[0]);
+  set_variable ("dYg",   dpar[1]);
+  set_variable ("dSXg",  2.35 * sqrt(2.0) / dpar[2]);
+  set_variable ("dSYg",  2.35 * sqrt(2.0) / dpar[3]);
+  set_variable ("dSXYg", dpar[4]);
+  set_variable ("dZpk",  dpar[5]);
+  set_variable ("dSg",   dpar[6]);
+  set_variable ("dSXf", 2.35 * sqrt(2.0) / dpar[7]);
+  set_variable ("dSYf", 2.35 * sqrt(2.0) / dpar[8]);
+  set_variable ("dSXYf", dpar[9]);
+*/
 }
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-rgauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-rgauss.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-rgauss.c	(revision 42821)
@@ -42,4 +42,15 @@
   set_variable ("Sg",   par[6]);
   set_variable ("Sr",   par[7]);
+
+/*
+  set_variable ("dXg",   dpar[0]);
+  set_variable ("dYg",   dpar[1]);
+  set_variable ("dSXg",  2.35 / dpar[2]);
+  set_variable ("dSYg",  2.35 / dpar[3]);
+  set_variable ("dSXYg", dpar[4]);
+  set_variable ("dZpk",  dpar[5]);
+  set_variable ("dSg",   dpar[6]);
+  set_variable ("dSr",   dpar[7]);
+*/
 }
 
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-sgauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-sgauss.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-sgauss.c	(revision 42821)
@@ -49,4 +49,17 @@
   set_variable ("SYf", 2.35 / par[8]);
   set_variable ("SXYf", par[9]);
+
+/*
+  set_variable ("dXg",   dpar[0]);
+  set_variable ("dYg",   dpar[1]);
+  set_variable ("dSXg",  2.35 / dpar[2]);
+  set_variable ("dSYg",  2.35 / dpar[3]);
+  set_variable ("dSXYg", dpar[4]);
+  set_variable ("dZpk",  dpar[5]);
+  set_variable ("dSg",   dpar[6]);
+  set_variable ("dSXf", 2.35 / dpar[7]);
+  set_variable ("dSYf", 2.35 / dpar[8]);
+  set_variable ("dSXYf", dpar[9]);
+*/
 }
 
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-tgauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-tgauss.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-tgauss.c	(revision 42821)
@@ -80,3 +80,16 @@
   set_variable ("SYf",  2.35 * sqrt(2.0) / par[8]);
   set_variable ("SXYf", par[9]);
+
+/*
+  set_variable ("dXg",   dpar[0]);
+  set_variable ("dYg",   dpar[1]);
+  set_variable ("dSXg",  2.35 * sqrt(2.0) / dpar[2]);
+  set_variable ("dSYg",  2.35 * sqrt(2.0) / dpar[3]);
+  set_variable ("dSXYg", dpar[4]);
+  set_variable ("dZpk",  dpar[5]);
+  set_variable ("dSg",   dpar[6]);
+  set_variable ("dSXf",  2.35 * sqrt(2.0) / dpar[7]);
+  set_variable ("dSYf",  2.35 * sqrt(2.0) / dpar[8]);
+  set_variable ("dSXYf", dpar[9]);
+*/
 }
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit-vgauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit-vgauss.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit-vgauss.c	(revision 42821)
@@ -69,3 +69,15 @@
   set_variable ("SXf", par[7]);
   set_variable ("SYf", par[8]);
+
+  /*
+  set_variable ("dXg",   dpar[0]);
+  set_variable ("dYg",   dpar[1]);
+  set_variable ("dSXg",  2.35 / dpar[2]);
+  set_variable ("dSYg",  2.35 / dpar[3]);
+  set_variable ("dSXYg", dpar[4]);
+  set_variable ("dZpk",  dpar[5]);
+  set_variable ("dSg",   dpar[6]);
+  set_variable ("dSXf",  dpar[7]);
+  set_variable ("dSYf",  dpar[8]);
+  */
 }
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit.c	(revision 42821)
@@ -13,4 +13,16 @@
   }
 
+  Buffer *var = NULL;
+  if ((N = get_argument (argc, argv, "-var-image"))) {
+    remove_argument (N, &argc, argv);
+    var = SelectBuffer (argv[N], OLDBUFFER, TRUE);
+    if (!var) {
+      gprint (GP_ERR, "unknown buffer for variance %s\n", argv[N]);
+      FREE (Save);
+      return (FALSE);
+    }
+    remove_argument (N, &argc, argv);
+  }
+
   int Insert = FALSE;
   if ((N = get_argument (argc, argv, "-insert"))) {
@@ -18,4 +30,5 @@
     Insert = TRUE;
     if (Save) { gprint (GP_ERR, "-save and -insert are mutually exclusive\n"); free (Save); return (FALSE); }
+    if (var)  { gprint (GP_ERR, "-save and -var-image are mutually exclusive\n"); return (FALSE); }
   }
 
@@ -40,4 +53,5 @@
     Gain = atof(argv[N]);
     remove_argument (N, &argc, argv);
+    if (var) { gprint (GP_ERR, "warning: -var-image selected, -gain will have no effect\n"); }
   }
 
@@ -48,4 +62,5 @@
     RDnoise = atof(argv[N]);
     remove_argument (N, &argc, argv);
+    if (var) { gprint (GP_ERR, "warning: -var-image selected, -rdnoise will have no effect\n"); }
   }
 
@@ -140,4 +155,5 @@
     if (j + sy >= Ny) continue;
     float *V = (float *)(buf[0].matrix.buffer) + (j+sy)*buf[0].matrix.Naxis[0] + sx; 
+    float *dV = (var) ? ((float *)(var[0].matrix.buffer) + (j+sy)*var[0].matrix.Naxis[0] + sx) : NULL;
     for (int i = 0; i < dX; i++) {
       if (i + sx < 0) continue;
@@ -145,5 +161,9 @@
       if (*V > SatThreshold) goto next; // skip pixels above threshold
       if (!isfinite(*V)) goto next; // skip nan pixels
-      dz[N] = (SQ(RDnoise) + MAX(0.0, *V/Gain)); // treat negative pixels as pure read noise
+      if (dV) {
+	dz[N] = *dV;
+      } else {
+	dz[N] = (SQ(RDnoise) + MAX(0.0, *V/Gain)); // treat negative pixels as pure read noise
+      }
       if (dz[N] <= 0) goto next;
       dz[N] = 1.0 / dz[N];
@@ -154,4 +174,5 @@
     next:
       V++;
+      if (dV) { dV++; }
     }
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/mkgauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/mkgauss.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/mkgauss.c	(revision 42821)
@@ -11,4 +11,5 @@
   Buffer *buf;
 
+  // if TRUE, integrated flux is Flux, else Io is Flux
   int Normalize = FALSE;
   if ((N = get_argument (argc, argv, "-norm"))) {
@@ -16,4 +17,13 @@
     remove_argument (N, &argc, argv);
   }    
+
+  // Io or integrated flux (depending on value of Normalize)
+  float Flux = 1.0;
+  if ((N = get_argument (argc, argv, "-flux"))) {
+    remove_argument (N, &argc, argv);
+    Flux = atof(argv[N]);
+    remove_argument (N, &argc, argv);
+  }    
+
 
   // this should be Nx/2, Ny/2 if not set
@@ -29,4 +39,7 @@
   if ((argc < 3) || (argc > 5)) {
     gprint (GP_ERR, "USAGE: mkgauss (buffer) (sigma) [[sy/sx] angle]\n");
+    gprint (GP_ERR, " -flux flux : integral or peak is flux (default is 1.0)\n");
+    gprint (GP_ERR, " -norm : integral is flux (else peak)\n");
+    gprint (GP_ERR, " -c X Y : place center at X,Y\n");
     return (FALSE);
   }
@@ -66,5 +79,5 @@
   /* f = exp (-r), r = (x^2 / 2Sx) + (y^2 / 2Sy) + Sxy*x*y */
 
-  double Io = Normalize ? 1.0 / (2.0 * M_PI * Sig_x * Sig_y) : 1.0;
+  double Io = Normalize ? Flux / (2.0 * M_PI * Sig_x * Sig_y) : Flux;
 
   in = (float *) buf[0].matrix.buffer;
Index: /trunk/Ohana/src/opihi/cmd.astro/region.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/region.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.astro/region.c	(revision 42821)
@@ -160,6 +160,8 @@
     if (!strcasecmp (argv[CtypeArg], "PAR")) { strcpy (graphmode.coords.ctype, "DEC--PAR"); goto got_ctype; }
     if (!strcasecmp (argv[CtypeArg], "MOL")) { strcpy (graphmode.coords.ctype, "DEC--MOL"); goto got_ctype; }
+    if (!strcasecmp (argv[CtypeArg], "LIN")) { strcpy (graphmode.coords.ctype, "DEC--LIN"); goto got_ctype; }
+    if (!strcasecmp (argv[CtypeArg], "CAR")) { strcpy (graphmode.coords.ctype, "DEC--CAT"); goto got_ctype; }
     gprint (GP_ERR, "ERROR: invalid projection type %s\n", argv[CtypeArg]);
-    gprint (GP_ERR, "allowed values: TAN, SIN, ARC, STG, ZEA, AIT, GLS, PAR, MOL\n");
+    gprint (GP_ERR, "allowed values: TAN, SIN, ARC, STG, ZEA, AIT, GLS, PAR, MOL, LIN, CAR\n");
     return FALSE;
   }
Index: /trunk/Ohana/src/opihi/cmd.data/Makefile
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/Makefile	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.data/Makefile	(revision 42821)
@@ -67,4 +67,5 @@
 $(SRC)/ungridify.$(ARCH).o     \
 $(SRC)/histogram.$(ARCH).o	\
+$(SRC)/histbins.$(ARCH).o	\
 $(SRC)/tdhistogram.$(ARCH).o	\
 $(SRC)/hermitian1d.$(ARCH).o	\
@@ -80,4 +81,5 @@
 $(SRC)/imresample.$(ARCH).o	\
 $(SRC)/imcollapse.$(ARCH).o	\
+$(SRC)/impoints.$(ARCH).o	\
 $(SRC)/integrate.$(ARCH).o	\
 $(SRC)/interpolate.$(ARCH).o	\
Index: /trunk/Ohana/src/opihi/cmd.data/histbins.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/histbins.c	(revision 42821)
+++ /trunk/Ohana/src/opihi/cmd.data/histbins.c	(revision 42821)
@@ -0,0 +1,47 @@
+# include "data.h"
+
+int histbins (int argc, char **argv) {
+  
+  Vector *vals, *mins, *maxs, *out;
+
+  if (argc != 5) {
+    gprint (GP_ERR, "USAGE: histbins <values> <output> <binmin> <binmax>\n");
+    gprint (GP_ERR, "  count <values> in each bin defined by the limit vectors\n");
+    return (FALSE);
+  }
+
+  if ((vals = SelectVector (argv[1], OLDVECTOR, TRUE)) == NULL) return (FALSE);
+  if ((mins = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
+  if ((maxs = SelectVector (argv[4], OLDVECTOR, TRUE)) == NULL) return (FALSE);
+  if (mins[0].Nelements != maxs[0].Nelements) {
+    gprint (GP_ERR, "binmin and binmax number of elements don't match\n");
+    return (FALSE);
+  }
+  if ((out = SelectVector (argv[2], ANYVECTOR, TRUE)) == NULL) return (FALSE);
+
+  REQUIRE_VECTOR_FLT (vals, FALSE); 
+  REQUIRE_VECTOR_FLT (mins, FALSE); 
+  REQUIRE_VECTOR_FLT (maxs, FALSE); 
+
+  int Nbins = mins->Nelements;
+  ResetVector (out, OPIHI_FLT, Nbins);
+  bzero (out[0].elements.Flt, sizeof(opihi_flt)*out[0].Nelements);
+
+  opihi_flt *V = vals[0].elements.Flt;
+
+  // this function allows the bins to be completely arbitrary and potentially overlapping
+  // find all bins which contain each value
+  for (int i = 0; i < vals->Nelements; i++, V++) {
+    opihi_flt *S = mins[0].elements.Flt;
+    opihi_flt *E = maxs[0].elements.Flt;
+    opihi_flt *O = out[0].elements.Flt;
+    for (int j = 0; j < mins->Nelements; j++, S++, E++, O++) {
+      // note lower bound is inclusive, upper bound is exclusive:
+      if (*V <  *S) continue;
+      if (*V >= *E) continue;
+      *O += 1.0;
+    }
+  }      
+  return (TRUE);
+}
+
Index: /trunk/Ohana/src/opihi/cmd.data/impoints.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/impoints.c	(revision 42821)
+++ /trunk/Ohana/src/opihi/cmd.data/impoints.c	(revision 42821)
@@ -0,0 +1,47 @@
+# include "data.h"
+
+// insert the vector values into the image
+int impoints (int argc, char **argv) {
+  
+  Vector *vecx = NULL, *vecy = NULL, *vecf = NULL;
+  Buffer *buff;
+
+  if (argc < 4) {
+    gprint (GP_ERR, "USAGE: impoints (buffer) <xvec> <yvec> [fvec]\n");
+    gprint (GP_ERR, " inserts the points in the image, using the value in fvec if supplied (else 1)\n");
+    return (FALSE);
+  }
+
+  if ((buff = SelectBuffer (argv[1], OLDBUFFER, TRUE)) == NULL) return (FALSE);
+  if ((vecx = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return (FALSE);
+  if ((vecy = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
+
+  // require vecx and vecy to be same length and floats
+
+
+  if (argc == 5) {
+      if ((vecf = SelectVector (argv[4], OLDVECTOR, TRUE)) == NULL) return (FALSE);
+  }
+
+  float *image = (float *) buff[0].matrix.buffer;
+  int Nx = buff[0].matrix.Naxis[0];
+  int Ny = buff[0].matrix.Naxis[1];
+
+  for (int i = 0; i < vecx->Nelements; i++) {
+
+      int ix = vecx->elements.Flt[i];
+      int iy = vecy->elements.Flt[i];
+
+      if (ix < 0) continue;
+      if (iy < 0) continue;
+      if (ix >= Nx) continue;
+      if (iy >= Ny) continue;
+
+      if (vecf) {
+	  image[ix + iy*Nx] += vecf->elements.Flt[i];
+      } else {
+	  image[ix + iy*Nx] ++;
+      }
+  }
+  return (TRUE);
+}
Index: /trunk/Ohana/src/opihi/cmd.data/init.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/init.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.data/init.c	(revision 42821)
@@ -56,4 +56,5 @@
 int ungridify        PROTO((int, char **));
 int histogram        PROTO((int, char **));
+int histbins         PROTO((int, char **));
 int tdhistogram      PROTO((int, char **));
 int hermitian1d      PROTO((int, char **));
@@ -70,4 +71,5 @@
 int imresample       PROTO((int, char **));
 int imcollapse       PROTO((int, char **));
+int impoints         PROTO((int, char **));
 int integrate        PROTO((int, char **));
 int interpolate      PROTO((int, char **));
@@ -265,4 +267,5 @@
   {1, "header",       header,           "print image header"},
   {1, "histogram",    histogram,        "generate histogram from vector"},
+  {1, "histbins",     histbins,         "generate histogram from vector, bins specified by vectors"},
   {1, "tdhistogram",  tdhistogram,      "generate 2D histogram image from vector set"},
   {1, "hermitian1d",  hermitian1d,      "generate 1-D Hermitian Polynomial"},
@@ -281,4 +284,5 @@
   {1, "imconvolve",   imconvolve,       "full 2D real-space convolution"},
   {1, "imstats",      imstats,          "statistics on a portion of an image"},
+  {1, "impoints",     impoints,         "insert points into an image by vector pair"},
   {1, "integrate",    integrate,        "integrate a vector"},
   {1, "interpolate_presort",  interpolate_presort,      "interpolate between vector pairs"},
Index: /trunk/Ohana/src/opihi/cmd.data/interpolate_presort.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/interpolate_presort.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.data/interpolate_presort.c	(revision 42821)
@@ -17,5 +17,5 @@
   /** check basic syntax **/
   if (argc != 5) {
-    gprint (GP_ERR, "USAGE: interpolate Xi Yi Xo Yo\n");
+    gprint (GP_ERR, "USAGE: interpolate Xi Yi Xo Yo [-fill-ends]\n");
     gprint (GP_ERR, "  Xi Yi - sorted reference vectors\n");
     gprint (GP_ERR, "  Xo    - output positions (vector)\n");
@@ -23,4 +23,5 @@
     gprint (GP_ERR, "  (vectors must be pre-sorted)\n");
     gprint (GP_ERR, "  (use 'threshold' to interpolate to a value)\n");
+    gprint (GP_ERR, "  -fill-ends : values outside of range are set to end-point values\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/vgroup.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/vgroup.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/cmd.data/vgroup.c	(revision 42821)
@@ -70,5 +70,7 @@
   ALLOCATE (values, double, xin[0].Nelements);
 
-  for (i = 0; i < xout[0].Nelements - 1; i++) {
+  // if we specify binsize, then we need to examine all bins
+  int Nout = isnan(binsize) ? xout[0].Nelements - 1 : xout[0].Nelements;
+  for (i = 0; i < Nout; i++) {
     if (isnan(binsize)) {
       xmin = xout[0].elements.Flt[i];
@@ -81,6 +83,6 @@
     N = 0;
     for (j = 0; j < xin[0].Nelements; j++) {
-      if (xin[0].elements.Flt[j] < xmin) continue;
-      if (xin[0].elements.Flt[j] > xmax) continue;
+      if (xin[0].elements.Flt[j] <  xmin) continue;
+      if (xin[0].elements.Flt[j] >= xmax) continue;
       if (yin) {
 	values[N] = yin[0].elements.Flt[j];
Index: /trunk/Ohana/src/opihi/dvo/avperiodogram.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/avperiodogram.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/dvo/avperiodogram.c	(revision 42821)
@@ -274,5 +274,5 @@
 	// The first 3 values[] / fields[] will be time, mag, dmag
 	for (off_t n = 0; n < Nmfields; n++) {
-	  mvalues[n] = dbExtractMeasures (average, secfilt, &measure[k], NULL, NULL, &mfields[n]);
+	  mvalues[n] = dbExtractMeasures (average, secfilt, NULL, &measure[k], NULL, NULL, NULL, &mfields[n]);
 	}
 	if (!dbBooleanCond (mstack, Nmstack, mvalues)) continue;
Index: /trunk/Ohana/src/opihi/dvo/avperiodomatch.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/avperiodomatch.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/dvo/avperiodomatch.c	(revision 42821)
@@ -302,5 +302,5 @@
 	// The first 3 values[] / fields[] will be time, mag, dmag
 	for (off_t n = 0; n < Nmfields; n++) {
-	  mvalues[n] = dbExtractMeasures (average, secfilt, &measure[k], NULL, NULL, &mfields[n]);
+	  mvalues[n] = dbExtractMeasures (average, secfilt, NULL, &measure[k], NULL, NULL, NULL, &mfields[n]);
 	}
 	if (!dbBooleanCond (mstack, Nmstack, mvalues)) continue;
Index: /trunk/Ohana/src/opihi/dvo/avselect.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/avselect.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/dvo/avselect.c	(revision 42821)
@@ -17,9 +17,10 @@
   int VERBOSE;
   char name[1024];
-  float RADIUS;
+  opihi_flt RADIUS;
 
   Catalog catalog;
 
   Vector **vec, **invec, *RAvec, *DECvec, *IDXvec, *RADvec;
+  Vector *RINvec = NULL;
   dbField *fields;
   dbValue *values;
@@ -102,7 +103,17 @@
   }
 
-  RADIUS = atof (argv[1]);
-
-  /* load regions which contain all supplied RA,DEC coordinates */
+  if (SelectScalar (argv[1], &RADIUS)) {
+    remove_argument (1, &argc, argv);
+  } else {
+    gprint (GP_ERR, " RADIUS must be a numerical value\n");
+    goto help;
+    if ((RINvec = SelectVector (argv[1], ANYVECTOR, TRUE)) == NULL) goto help;
+    RADIUS = 0.0; // find the max radius for region selection:
+    for (i = 0; i < RINvec->Nelements; i++) {
+      RADIUS = MAX(RINvec->elements.Flt[i], RADIUS);
+    }
+  }
+
+  /* load regions which contain all supplied RA,DEC coordinates (for RINvec, uses max radius) */
   if ((skylist = SelectRegionsByCoordVectorsAndRadius (RAvec, DECvec, RADIUS/3600.0)) == NULL) goto escape;
 
@@ -167,7 +178,4 @@
     return status;
   }
-
-  RADIUS = atof (argv[1]);
-  remove_argument (1, &argc, argv);
 
   // parse the fields to be extracted and returned
Index: /trunk/Ohana/src/opihi/dvo/gstar.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/gstar.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/dvo/gstar.c	(revision 42821)
@@ -401,4 +401,7 @@
 	  gprint (GP_LOG, "%20s ",     date);
 	  gprint (GP_LOG, "%f   ",     catalog.average[k].Trange / 86400.0);
+
+	  gprint (GP_LOG, "%ld ", catalog.average[k].extID);
+	  // gprint (GP_LOG, "0x%16x ", catalog.average[k].extID);
 	}
 
Index: /trunk/Ohana/src/opihi/dvo/mextract.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/mextract.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/dvo/mextract.c	(revision 42821)
@@ -221,6 +221,8 @@
   }
 
+  int needLensobj = dbFieldNeedLensobj (fields, Nfields);
   int needLensing = dbFieldNeedLensing (fields, Nfields);
   int needStarpar = dbFieldNeedStarpar (fields, Nfields, FALSE);
+  int needGalphot = dbFieldNeedGalphot (fields, Nfields);
 
   // the lensing table does not have a good index to/from the measure table.  if we need lensing
@@ -247,5 +249,7 @@
     catalog.catflags = DVO_LOAD_AVERAGE | DVO_LOAD_MEASURE | DVO_LOAD_SECFILT;
     catalog.catflags |= needLensing ? DVO_LOAD_LENSING : DVO_SKIP_LENSING;
+    catalog.catflags |= needLensobj ? DVO_LOAD_LENSOBJ : DVO_SKIP_LENSOBJ;
     catalog.catflags |= needStarpar ? DVO_LOAD_STARPAR : DVO_SKIP_STARPAR;
+    catalog.catflags |= needGalphot ? DVO_LOAD_GALPHOT : DVO_SKIP_GALPHOT;
     catalog.Nsecfilt = Nsecfilt;
 
@@ -297,6 +301,12 @@
 	dbExtractMeasuresInitMeas (); // reset counters for saved fields  (costs very little
 
-	int Nstarpar = average->starparOffset;
-	StarPar *starpar = needStarpar && average->Nstarpar ? &catalog.starpar[Nstarpar] : NULL;
+	int nStar = average->starparOffset;
+	StarPar *starpar = needStarpar && average->Nstarpar ? &catalog.starpar[nStar] : NULL;
+
+	int nLens = average->lensobjOffset;
+	Lensobj *lensobj = needLensobj && average->Nlensobj ? &catalog.lensobj[nLens] : NULL;
+
+	int nPhot = average->galphotOffset;
+	GalPhot *galphot = needGalphot && average->Ngalphot ? &catalog.galphot[nPhot] : NULL;
 
 	Lensing *lensing = NULL;
@@ -313,5 +323,5 @@
 
 	for (n = 0; n < Nfields; n++) {
-	  values[n] = dbExtractMeasures (average, secfilt, &catalog.measure[m], lensing, starpar, &fields[n]);
+	  values[n] = dbExtractMeasures (average, secfilt, lensobj, &catalog.measure[m], lensing, starpar, galphot, &fields[n]);
 	}
 	// fprintf (stderr, "object: ave: %f, cat: %f, averef %d\n", fields[n].name, values[2], values[3], catalog.measure[m].averef);
Index: /trunk/Ohana/src/opihi/dvo/mmatch.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/mmatch.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/dvo/mmatch.c	(revision 42821)
@@ -232,6 +232,8 @@
   ALLOCATE (index, off_t, Nelem);
 
-  // int needLensing = dbFieldNeedLensing (fields, Nfields);
+  int needLensobj = dbFieldNeedLensobj (fields, Nfields);
+//int needLensing = dbFieldNeedLensing (fields, Nfields);
   int needStarpar = dbFieldNeedStarpar (fields, Nfields, FALSE);
+  int needGalphot = dbFieldNeedGalphot (fields, Nfields);
 
   // grab data from all selected sky regions
@@ -249,5 +251,7 @@
     catalog.filename = HOST_ID ? hostfile : skylist[0].filename[i];
     catalog.catflags = DVO_LOAD_AVERAGE | DVO_LOAD_SECFILT | DVO_LOAD_MEASURE;
+    catalog.catflags |= needLensobj ? DVO_LOAD_LENSOBJ : DVO_SKIP_LENSOBJ;
     catalog.catflags |= needStarpar ? DVO_LOAD_STARPAR : DVO_SKIP_STARPAR;
+    catalog.catflags |= needGalphot ? DVO_LOAD_GALPHOT : DVO_SKIP_GALPHOT;
     catalog.Nsecfilt = Nsecfilt;
 
@@ -289,6 +293,12 @@
 	Average *average = &catalog.average[Ncat];
 
-	int Nstarpar = average->starparOffset;
-	StarPar *starpar = needStarpar ? &catalog.starpar[Nstarpar] : NULL;
+	int nStar = average->starparOffset;
+	StarPar *starpar = needStarpar && average->Nstarpar ? &catalog.starpar[nStar] : NULL;
+
+	int nLens = average->lensobjOffset;
+	Lensobj *lensobj = needLensobj && average->Nlensobj ? &catalog.lensobj[nLens] : NULL;
+
+	int nPhot = average->galphotOffset;
+	GalPhot *galphot = needGalphot && average->Ngalphot ? &catalog.galphot[nPhot] : NULL;
 
 	// int Nlensing = average->lensobjOffset;
@@ -299,5 +309,5 @@
 
 	for (n = 0; n < Nfields; n++) {
-	  values[n] = dbExtractMeasures (average, secfilt, &catalog.measure[m], NULL, starpar, &fields[n]);
+	  values[n] = dbExtractMeasures (average, secfilt, lensobj, &catalog.measure[m], NULL, starpar, galphot, &fields[n]);
 	}
 
Index: /trunk/Ohana/src/opihi/dvo/mmextract.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/mmextract.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/dvo/mmextract.c	(revision 42821)
@@ -174,6 +174,8 @@
   }
 
-  // int needLensing = dbFieldNeedLensing (fields, Nfields);
+  int needLensobj = dbFieldNeedLensobj (fields, Nfields);
+//int needLensing = dbFieldNeedLensing (fields, Nfields);
   int needStarpar = dbFieldNeedStarpar (fields, Nfields, FALSE);
+  int needGalphot = dbFieldNeedGalphot (fields, Nfields);
 
   // grab data from all selected sky regions
@@ -185,4 +187,8 @@
     catalog.filename = skylist[0].filename[i];
     catalog.catflags = DVO_LOAD_AVERAGE | DVO_LOAD_MEASURE | DVO_LOAD_SECFILT;
+//  catalog.catflags |= needLensing ? DVO_LOAD_LENSING : DVO_SKIP_LENSING;
+    catalog.catflags |= needLensobj ? DVO_LOAD_LENSOBJ : DVO_SKIP_LENSOBJ;
+    catalog.catflags |= needStarpar ? DVO_LOAD_STARPAR : DVO_SKIP_STARPAR;
+    catalog.catflags |= needGalphot ? DVO_LOAD_GALPHOT : DVO_SKIP_GALPHOT;
     catalog.Nsecfilt = Nsecfilt;
 
@@ -220,6 +226,12 @@
 	Average *average = &catalog.average[j];
 
-	int Nstarpar = average->starparOffset;
-	StarPar *starpar = needStarpar ? &catalog.starpar[Nstarpar] : NULL;
+	int nStar = average->starparOffset;
+	StarPar *starpar = needStarpar && average->Nstarpar ? &catalog.starpar[nStar] : NULL;
+
+	int nLens = average->lensobjOffset;
+	Lensobj *lensobj = needLensobj && average->Nlensobj ? &catalog.lensobj[nLens] : NULL;
+
+	int nPhot = average->galphotOffset;
+	GalPhot *galphot = needGalphot && average->Ngalphot ? &catalog.galphot[nPhot] : NULL;
 
 	// int Nlensing = average->lensobjOffset;
@@ -231,5 +243,5 @@
 	for (n = 0; n < Nfields; n++) {
 	  // values needs to be a pointer to a type with FLT and INT (with a union, we would save a bit of memory...)
-	  values[n] = dbExtractMeasures (average, secfilt, &catalog.measure[m], NULL, starpar, &fields[n]);
+	  values[n] = dbExtractMeasures (average, secfilt, lensobj, &catalog.measure[m], NULL, starpar, galphot, &fields[n]);
 	}
 	// fprintf (stderr, "object: ave: %f, cat: %f, averef %d\n", fields[n].name, values[2], values[3], catalog.measure[m].averef);
Index: /trunk/Ohana/src/opihi/lib.data/mrq2dmin.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.data/mrq2dmin.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/lib.data/mrq2dmin.c	(revision 42821)
@@ -17,4 +17,5 @@
 static opihi_flt *parmax = NULL;
 
+/** only used locally **/
 opihi_flt mrq2dcof (opihi_flt *x, opihi_flt *t, opihi_flt *y, opihi_flt *dy, int Npts, 
 	      opihi_flt *par, int Npar, opihi_flt **ta, opihi_flt **tb, 
@@ -60,4 +61,5 @@
 }
 
+/** only used in imfit-test.c ?? **/
 opihi_flt mrq2dchi (opihi_flt *x, opihi_flt *t, opihi_flt *y, opihi_flt *dy, int Npts, 
 		opihi_flt *par, int Npar, 
@@ -126,4 +128,6 @@
     chisq = ochisq;
   }
+
+  /* note that the parameter errors are sqrt(alpha[j][j]) */
 
   return (chisq);
Index: /trunk/Ohana/src/opihi/lib.data/spline.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.data/spline.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/lib.data/spline.c	(revision 42821)
@@ -113,7 +113,19 @@
   opihi_flt dx, a, b, value;
   
-  // saturate correction at high and low ends
-  if (X < x[0]) return y[0];
-  if (X > x[N-1]) return y[N-1];
+  // linear extrapolation past endpoints
+  if (X < x[0]) {
+    hi = 1;
+    lo = 0;
+    goto evaluate;
+    // alternative: saturate correction at high and low ends
+    // return y[0]; 
+  }
+  if (X > x[N-1]) {
+    hi = N - 1;
+    lo = N - 2;
+    goto evaluate;
+    // alternative: saturate correction at high and low ends
+    // return y[N-1];
+  }
 
   /* find correct element in array (x must be sorted) */
@@ -128,4 +140,6 @@
     }
   }
+
+evaluate:
 
   /* error condition: duplicate abssisca */
Index: /trunk/Ohana/src/opihi/lib.shell/convert_to_RPN.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/convert_to_RPN.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/lib.shell/convert_to_RPN.c	(revision 42821)
@@ -77,4 +77,6 @@
     if (!strcmp (argv[i], "isflt"))  { type = ST_UNARY; goto gotit; }
     if (!strcmp (argv[i], "length")) { type = ST_UNARY; goto gotit; }
+    if (!strcmp (argv[i], "toupper")) { type = ST_UNARY; goto gotit; }
+    if (!strcmp (argv[i], "tolower")) { type = ST_UNARY; goto gotit; }
 
     /* binary operations */
Index: /trunk/Ohana/src/opihi/lib.shell/stack_math.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/stack_math.c	(revision 42820)
+++ /trunk/Ohana/src/opihi/lib.shell/stack_math.c	(revision 42821)
@@ -1615,16 +1615,14 @@
   int i, Nx;
   
+  // handle string vectors in the L_unary function
+  if (V1->vector->type == OPIHI_STR) {
+    int status = L_unary (OUT, V1, op);
+    return status;
+  }
+
   Nx = V1[0].vector[0].Nelements;
 
   OUT[0].vector = InitVector ();
   OUT[0].type = ST_VECTOR_TMP; /*** <<--- says this is a temporary matrix ***/
-
-  if (V1->vector->type == OPIHI_STR) {
-    ResetVector (OUT->vector, V1->vector->type, V1->vector->Nelements);
-    for (i = 0; i < V1->vector->Nelements; i++) {
-      OUT->vector->elements.Str[i] = strcreate (V1->vector->elements.Str[i]);
-    }
-    goto escape;
-  }
 
 # define V_FUNC(OP,FTYPE) {						\
@@ -1744,4 +1742,22 @@
     for (int i = 0; i < Nx; i++) {			
       Ov[i] = strcreate (Iv[i]);
+    }									
+    goto escape;							
+  }
+  if (!strcmp (op, "toupper")) {
+    for (int i = 0; i < Nx; i++) {			
+      Ov[i] = strcreate (Iv[i]);
+      for (int j = 0; Ov[i][j]; j++) {
+	Ov[i][j] = toupper ((unsigned int) Ov[i][j]);
+      }
+    }									
+    goto escape;							
+  }
+  if (!strcmp (op, "tolower")) {
+    for (int i = 0; i < Nx; i++) {			
+      Ov[i] = strcreate (Iv[i]);
+      for (int j = 0; Ov[i][j]; j++) {
+	Ov[i][j] = tolower ((unsigned int) Ov[i][j]);
+      }
     }									
     goto escape;							
Index: /trunk/Ohana/src/opihi/test/cdensify.sh
===================================================================
--- /trunk/Ohana/src/opihi/test/cdensify.sh	(revision 42821)
+++ /trunk/Ohana/src/opihi/test/cdensify.sh	(revision 42821)
@@ -0,0 +1,51 @@
+
+macro init
+  $STEP = 10
+  create Rraw 0 360 $STEP
+  delete Rtst Dtst
+  for Draw -90 90 $STEP
+    set Draw = $Draw + zero(Rraw)
+    concat Rraw Rtst
+    concat Draw Dtst
+  end
+end
+
+macro go
+  resize 2200 900
+  region 180 0 100 AIT
+# region 180 0 100 LIN
+
+  cgrid -c red
+  box -ticks 0000 -labels 0000
+# section default -imtool none
+  section default -imtool +y
+  parity 0 1
+
+  cdensify Itst Rtst Dtst -psf circle -scale 3 -raw
+  
+  tv Itst 0 2
+end
+
+macro init.rnd
+  create seq 0 100000
+  set Rtst = 360*rnd(seq)
+  set Dtst = dasin(2*rnd(seq) - 1)
+end
+
+macro go.rnd
+  resize 2200 900
+# region 180 0 100 AIT
+  region 180 0 100 LIN
+
+  cgrid -c red
+  box -ticks 0000 -labels 0000
+# section default -imtool none
+  section default -imtool +y
+  parity 0 1
+
+  date
+  cdensify Itst Rtst Dtst -psf circle -scale 1.6 -raw
+  date
+  
+  tv Itst 0 2
+end
Index: /trunk/Ohana/src/relphot/include/relphot.h
===================================================================
--- /trunk/Ohana/src/relphot/include/relphot.h	(revision 42820)
+++ /trunk/Ohana/src/relphot/include/relphot.h	(revision 42821)
@@ -417,6 +417,11 @@
 int IS_DIFF_DB;
 
+double MAG_MIN;
 double MAG_LIM;
 double SIGMA_LIM;
+
+double STAR_MAX_PSF_KRON;
+double PSF_QF_MIN;
+
 double IMAGE_SCATTER;
 double IMAGE_OFFSET;
@@ -471,4 +476,5 @@
 int    RESET_FLATCORR;
 int    REPAIR_WARPS;
+int    USE_REF_EQUIV;
 int    PRESERVE_PS1;
 int    REQUIRE_PSFFIT;
@@ -486,4 +492,6 @@
 double IMAGE_GOOD_FRACTION;
 int    CALIBRATE_STACKS_AND_WARPS;
+int    CALIBRATE_WARPS_LIKE_CHIPS;
+int    CALIBRATE_STACKS_LIKE_CHIPS;
 
 int    KEEP_UBERCAL;
Index: /trunk/Ohana/src/relphot/src/ConfigInit.c
===================================================================
--- /trunk/Ohana/src/relphot/src/ConfigInit.c	(revision 42820)
+++ /trunk/Ohana/src/relphot/src/ConfigInit.c	(revision 42821)
@@ -23,6 +23,12 @@
   if (VERBOSE) fprintf (stderr, "loaded config file: %s\n", file);
 
-  GetConfig (config, "MAG_LIM",                "%lf", 0, &MAG_LIM);
-  GetConfig (config, "SIGMA_LIM",              "%lf", 0, &SIGMA_LIM);
+  // the following cuts are limit the objects used to calculate the image zero points.
+  // These are used in bcatalog.c and apply to Mcat (nominal measurement magnitude)
+  GetConfig (config, "SIGMA_LIM",              "%lf",    0, &SIGMA_LIM);
+  GetConfig (config, "MAG_LIM",                "%lf",    0, &MAG_LIM);
+
+  DefConfig ("MAG_MIN",                        "%lf", 15.0, MAG_MIN);
+  DefConfig ("STAR_MAX_PSF_KRON",              "%lf",  0.2, STAR_MAX_PSF_KRON);
+  DefConfig ("PSF_QF_MIN",                     "%lf", 0.95, PSF_QF_MIN);
 
   DefConfig ("STAR_SCATTER",                    "%lf",  0.1, STAR_SCATTER);
Index: /trunk/Ohana/src/relphot/src/ImageOps.c
===================================================================
--- /trunk/Ohana/src/relphot/src/ImageOps.c	(revision 42820)
+++ /trunk/Ohana/src/relphot/src/ImageOps.c	(revision 42821)
@@ -531,6 +531,9 @@
 
   // until the analysis has converged a bit, do not use the IRLS analysis
-  // default is MaxIterations = 10
-  if (UseStandardOLS(ZPT_IMAGES)) {
+  // default is MaxIterations = 10.
+
+  // However, for stack and warp calibration, we are not iteratively solving for the
+  // zero points.  In this case, use IRLS in a single pass
+  if (!CALIBRATE_STACKS_AND_WARPS && UseStandardOLS(ZPT_IMAGES)) {
     brightStars.MaxIterations = 0;
     kronStars.MaxIterations = 0;
@@ -672,5 +675,5 @@
 
       if ((image[i].imageID == TEST_IMAGE1) || (image[i].imageID == TEST_IMAGE2)) {
-	fprintf (stderr, "%1d, %3d : %3d, %3d : %10.6f %10.6f : %6.3f  %6.3f  %6.3f  %6.3f  %6.3f : %6.3f\n", (int) i, (int) j, (int) c, (int) m, catalog[c].averageT[n].R, catalog[c].averageT[n].D, MsysKron, MrelKron, Mmos, Mgrid, Mflat, kronStars.alldata->yVector[Nkron]);
+	fprintf (stderr, "%1d, %3d : %3d, %3d : %10.6f %10.6f : %6.3f %6.3f | %6.3f %6.3f | %6.3f %6.3f %6.3f %6.3f | %5.3f\n", (int) i, (int) j, (int) c, (int) m, catalog[c].averageT[n].R, catalog[c].averageT[n].D, MsysPSF, MrelPSF, MsysKron, MrelKron, Mmos, Mgrid, Mflat, Moff, psfStars.alldata->dyVector[Nref]);
       }
 
@@ -702,17 +705,5 @@
     if (mark) continue;
 
-    // use liststats to find the 20-pct, median, 80-pct points
-    StatType stats;
-    liststats_setmode (&stats, "MEDIAN");
-    liststats (psfStars.alldata->yVector, NULL, NULL, Nref, &stats);
-    double altSigma = (stats.Upper80 - stats.Lower20) / 1.6;  // 20% to 80% encompasses 60% of the values, corresponds to the range (-0.85 sigma : +0.85 sigma)
-
-    // soften the individual errors with 10% of the scatter above
-    for (j = 0; j < Nref; j++) {
-      double newSigma = hypot(psfStars.alldata->dyVector[j], 0.1*altSigma);
-      psfStars.alldata->dyVector[j] = newSigma;
-    }
-
-    // soften the errors based on the scatter
+    // soften the errors based on the core scatter
     FitDataSetSoften (&psfStars, Nref);
 
Index: /trunk/Ohana/src/relphot/src/StarOps.c
===================================================================
--- /trunk/Ohana/src/relphot/src/StarOps.c	(revision 42820)
+++ /trunk/Ohana/src/relphot/src/StarOps.c	(revision 42821)
@@ -34,5 +34,8 @@
 }  
 
-// 
+// Nsecfilt is a property of the photcode table.  we only need to retrieve it once.
+static int Nsecfilt = -1;
+
+// return the average photometry for this measurement
 float getMrel (Catalog *catalog, off_t meas, int cat, dvoMagClassType class, dvoMagSourceType source) {
 
@@ -41,6 +44,16 @@
 
   int ecode = GetPhotcodeEquivCodebyCode (photcode);
+  if (USE_REF_EQUIV) {
+    // tie this photometry to an alternative refernce
+    // (e.g., tie UDR4.i to PV3.i)
+    int refcode = GetPhotcodeEquivCodebyCode (ecode);
+    if (refcode < 0) return NAN;
+    ecode = refcode;
+  }
+
   int Nsec = GetPhotcodeNsec(ecode);
-  int Nsecfilt = GetPhotcodeNsecfilt ();
+  if (Nsec < 0) return NAN;
+
+  if (Nsecfilt < 0) { Nsecfilt = GetPhotcodeNsecfilt (); }
 
   int entry = Nsecfilt*ave+Nsec;
@@ -312,5 +325,5 @@
   }
 
-  int Nsecfilt = GetPhotcodeNsecfilt ();
+  if (Nsecfilt < 0) { Nsecfilt = GetPhotcodeNsecfilt (); }
 
   SetMrelInfo summary, results;
@@ -334,5 +347,5 @@
   int i;
 
-  int Nsecfilt = GetPhotcodeNsecfilt ();
+  if (Nsecfilt < 0) { Nsecfilt = GetPhotcodeNsecfilt (); }
 
   SetMrelInfo summary, results;
@@ -424,5 +437,5 @@
   ThreadInfo *threadinfo = data;
 
-  int Nsecfilt = GetPhotcodeNsecfilt ();
+  if (Nsecfilt < 0) { Nsecfilt = GetPhotcodeNsecfilt (); }
 
   SetMrelInfo results;
@@ -451,5 +464,5 @@
   off_t k;
 
-  int Nsecfilt = GetPhotcodeNsecfilt ();
+  if (Nsecfilt < 0) { Nsecfilt = GetPhotcodeNsecfilt (); }
 
   off_t m = average[0].measureOffset;
@@ -559,5 +572,5 @@
   off_t j;
 
-  int Nsecfilt = GetPhotcodeNsecfilt ();
+  if (Nsecfilt < 0) { Nsecfilt = GetPhotcodeNsecfilt (); }
 
   for (i = 0; i < Ncatalog; i++) {
@@ -601,5 +614,5 @@
   ALLOCATE (slist, double, Ntot);
 
-  int Nsecfilt = GetPhotcodeNsecfilt ();
+  if (Nsecfilt < 0) { Nsecfilt = GetPhotcodeNsecfilt (); }
 
   // eliminate bad stars using the stats for a single secfilt at a time
@@ -666,5 +679,5 @@
   // N1 = N2 = N3 = N4 = N0 = 0;
 
-  int Nsecfilt = GetPhotcodeNsecfilt ();
+  if (Nsecfilt < 0) { Nsecfilt = GetPhotcodeNsecfilt (); }
 
   Ntot = 0;
@@ -719,5 +732,5 @@
   StatType stats;
 
-  int Nsecfilt = GetPhotcodeNsecfilt ();
+  if (Nsecfilt < 0) { Nsecfilt = GetPhotcodeNsecfilt (); }
 
   Ntot = 0;
@@ -760,5 +773,5 @@
   StatType stats;
 
-  int Nsecfilt = GetPhotcodeNsecfilt ();
+  if (Nsecfilt < 0) { Nsecfilt = GetPhotcodeNsecfilt (); }
 
   Ntot = 0;
@@ -805,5 +818,5 @@
   ALLOCATE (Mlist, double, NBIN);
 
-  int Nsecfilt = GetPhotcodeNsecfilt ();
+  if (Nsecfilt < 0) { Nsecfilt = GetPhotcodeNsecfilt (); }
 
   int Ns;
@@ -840,5 +853,5 @@
   Graphdata graphdata;
 
-  int Nsecfilt = GetPhotcodeNsecfilt ();
+  if (Nsecfilt < 0) { Nsecfilt = GetPhotcodeNsecfilt (); }
 
   Ntotal = 0;
@@ -911,5 +924,5 @@
   return;
 
-  int Nsecfilt = GetPhotcodeNsecfilt ();
+  if (Nsecfilt < 0) { Nsecfilt = GetPhotcodeNsecfilt (); }
 
   FILE *fout = NULL;
Index: /trunk/Ohana/src/relphot/src/args.c
===================================================================
--- /trunk/Ohana/src/relphot/src/args.c	(revision 42820)
+++ /trunk/Ohana/src/relphot/src/args.c	(revision 42821)
@@ -237,4 +237,9 @@
   }
 
+  USE_REF_EQUIV = FALSE;
+  if ((N = get_argument (argc, argv, "-use-ref-equiv"))) {
+    remove_argument (N, &argc, argv);
+    USE_REF_EQUIV = TRUE;
+  }
   PRESERVE_PS1 = FALSE;
   if ((N = get_argument (argc, argv, "-preserve-ps1"))) {
@@ -521,4 +526,19 @@
     remove_argument (N, &argc, argv);
     USE_REFERENCE_WEIGHT = TRUE;
+  }
+
+  /* Normally, stacks and warps are treated differently from chips.  In this case, 
+     WHAT IS DIFFERENT?
+   */
+
+  CALIBRATE_WARPS_LIKE_CHIPS = FALSE;
+  if ((N = get_argument (argc, argv, "-calibrate-warps-like-chips"))) {
+    remove_argument (N, &argc, argv);
+    CALIBRATE_WARPS_LIKE_CHIPS = TRUE;
+  }
+  CALIBRATE_STACKS_LIKE_CHIPS = FALSE;
+  if ((N = get_argument (argc, argv, "-calibrate-stacks-like-chips"))) {
+    remove_argument (N, &argc, argv);
+    CALIBRATE_STACKS_LIKE_CHIPS = TRUE;
   }
 
@@ -836,4 +856,9 @@
   }
 
+  USE_REF_EQUIV = FALSE;
+  if ((N = get_argument (argc, argv, "-use-ref-equiv"))) {
+    remove_argument (N, &argc, argv);
+    USE_REF_EQUIV = TRUE;
+  }
   PRESERVE_PS1 = FALSE;
   if ((N = get_argument (argc, argv, "-preserve-ps1"))) {
@@ -978,4 +1003,15 @@
   }
 
+  CALIBRATE_WARPS_LIKE_CHIPS = FALSE;
+  if ((N = get_argument (argc, argv, "-calibrate-warps-like-chips"))) {
+    remove_argument (N, &argc, argv);
+    CALIBRATE_WARPS_LIKE_CHIPS = TRUE;
+  }
+  CALIBRATE_STACKS_LIKE_CHIPS = FALSE;
+  if ((N = get_argument (argc, argv, "-calibrate-stacks-like-chips"))) {
+    remove_argument (N, &argc, argv);
+    CALIBRATE_STACKS_LIKE_CHIPS = TRUE;
+  }
+
   STAGES = STAGE_CHIP | STAGE_WARP | STAGE_STACK;
   if ((N = get_argument (argc, argv, "-skip-chip"))) {
Index: /trunk/Ohana/src/relphot/src/bcatalog.c
===================================================================
--- /trunk/Ohana/src/relphot/src/bcatalog.c	(revision 42820)
+++ /trunk/Ohana/src/relphot/src/bcatalog.c	(revision 42821)
@@ -1,3 +1,23 @@
 # include "relphot.h"
+
+# define BAD_COUNT(FIELD) \
+  badCount.FIELD ++; \
+  if (doTest1 && (catalog[0].measure[offset].imageID == TEST_IMAGE1)) { badTest1.FIELD ++; } \
+  if (doTest2 && (catalog[0].measure[offset].imageID == TEST_IMAGE2)) { badTest2.FIELD ++; }
+
+typedef struct {
+  int Ncode;
+  int Ntime;
+  int Ndophot;
+  int Nmag;
+  int Nsigma;
+  int Nimag;
+  int Nfew;
+  int Ngalaxy;
+  int Npsfqf;
+  int Nnan;
+  int Nbad;
+  int Npoor;
+} MyBadCountType;
 
 int LimitDensityCatalog_ByNmeasure (Catalog *subcatalog, Catalog *oldcatalog);
@@ -9,5 +29,6 @@
   off_t NAVERAGE, NMEASURE, Naverage, Nmeasure, Nm;
   float mag;
-  int Ncode, Ntime, Ndophot, Nmag, Nsigma, Nimag, Nfew, Ngalaxy, Npsfqf, Nnan, Nbad, Npoor;
+
+  // int Ncode, Ntime, Ndophot, Nmag, Nsigma, Nimag, Nfew, Ngalaxy, Npsfqf, Nnan, Nbad, Npoor;
 
   int Nsecfilt = GetPhotcodeNsecfilt ();
@@ -26,5 +47,15 @@
   int NmMin = catalog[0].Nmeasure;
 
-  Ncode = Ntime = Ndophot = Nmag = Nsigma = Nimag = Nfew = Npsfqf = Ngalaxy = Nnan = Nbad = Npoor = 0;
+  MyBadCountType badCount = {0,0,0, 0,0,0, 0,0,0, 0,0,0};
+  MyBadCountType badTest1 = {0,0,0, 0,0,0, 0,0,0, 0,0,0};
+  MyBadCountType badTest2 = {0,0,0, 0,0,0, 0,0,0, 0,0,0};
+
+  int doTest1 = (TEST_IMAGE1 >= 0);
+  int doTest2 = (TEST_IMAGE2 >= 0);
+
+  FILE *ftest1 = (doTest1) ? fopen ("test1.meas.dat", "a") : NULL;
+  FILE *ftest2 = (doTest2) ? fopen ("test2.meas.dat", "a") : NULL;
+
+  // Ncode = Ntime = Ndophot = Nmag = Nsigma = Nimag = Nfew = Npsfqf = Ngalaxy = Nnan = Nbad = Npoor = 0;
 
   // copy the following fields to the subcatalog:
@@ -57,4 +88,17 @@
 
       offset = catalog[0].average[i].measureOffset + j;
+
+      if (doTest1) {
+	Measure *m = &catalog[0].measure[offset];
+	if (m->imageID == TEST_IMAGE1) {
+	  fprintf (ftest1, "%5d %5d %5d | %5d %12d %5.3f %5.3f %5.3f %5.3f %4.3f %4.3f 0x%08x\n", m->detID, m->objID, m->catID, m->photcode, m->t, m->M, m->Map, m->Mkron, m->dM, m->psfQF, m->psfQFperf, m->photFlags);
+	}
+      }
+      if (doTest2) {
+	Measure *m = &catalog[0].measure[offset];
+	if (m->imageID == TEST_IMAGE2) {
+	  fprintf (ftest2, "%5d %5d %5d | %5d %12d %5.3f %5.3f %5.3f %5.3f %4.3f %4.3f 0x%08x\n", m->detID, m->objID, m->catID, m->photcode, m->t, m->M, m->Map, m->Mkron, m->dM, m->psfQF, m->psfQFperf, m->photFlags);
+	}
+      }
 
       /* select measurements by photcode */
@@ -69,5 +113,5 @@
       }
       if (!found) {
-	Ncode ++; 
+	BAD_COUNT(Ncode);
 	continue; 
       }
@@ -75,34 +119,34 @@
       /* select measurements by time */
       if (TimeSelect) {
-	if (catalog[0].measure[offset].t < TSTART) { Ntime ++; continue; }
-	if (catalog[0].measure[offset].t > TSTOP)  { Ntime ++; continue; }
+	if (catalog[0].measure[offset].t < TSTART) { BAD_COUNT(Ntime); continue; }
+	if (catalog[0].measure[offset].t > TSTOP)  { BAD_COUNT(Ntime); continue; }
       }
 
       /* select measurements by quality */
-      if (DophotSelect && ((catalog[0].measure[offset].photFlags >> 16) != DophotValue)) { Ndophot ++; continue; }
+      if (DophotSelect && ((catalog[0].measure[offset].photFlags >> 16) != DophotValue)) { BAD_COUNT(Ndophot); continue; }
 
       float Maper = USE_APER_FOR_STARGAL ? catalog[0].measure[offset].Map : catalog[0].measure[offset].Mkron;
 
       // skip garbage measurements
-      if (isnan(catalog[0].measure[offset].psfQF)     || (catalog[0].measure[offset].psfQF < 0.95))     { Npsfqf ++; continue; }
-      if (isnan(catalog[0].measure[offset].psfQFperf) || (catalog[0].measure[offset].psfQFperf < 0.95)) { Npsfqf ++; continue; }
-      if (isnan(catalog[0].measure[offset].M)) { Nnan ++; continue; }
-      if (isnan(Maper)) { Nnan ++; continue; }
+      if (isnan(catalog[0].measure[offset].psfQF)     || (catalog[0].measure[offset].psfQF     < PSF_QF_MIN)) { BAD_COUNT(Npsfqf); continue; }
+      if (isnan(catalog[0].measure[offset].psfQFperf) || (catalog[0].measure[offset].psfQFperf < PSF_QF_MIN)) { BAD_COUNT(Npsfqf); continue; }
+      if (isnan(catalog[0].measure[offset].M)) { BAD_COUNT(Nnan); continue; }
+      if (isnan(Maper)) { BAD_COUNT(Nnan); continue; }
 
       // require 0x01 in photFlags (fitted with a PSF) -- add to the test data
-      if (REQUIRE_PSFFIT && (catalog[0].measure[offset].photFlags & 0x01) == 0) { Nbad ++; continue; }
+      if (REQUIRE_PSFFIT && (catalog[0].measure[offset].photFlags & 0x01) == 0) { BAD_COUNT(Nbad); continue; }
 
       // very loose cut on PSF - APER mag (Map or Mkron) -- this lightly rejects galaxies & other oddities
       float Mkp = catalog[0].measure[offset].M - Maper;
-      if (fabs(Mkp) > 1.0) { Nbad ++; continue; }
+      if (fabs(Mkp) > 1.0) { BAD_COUNT(Nbad); continue; }
 
       if (catalog[0].measure[offset].photFlags & code->photomBadMask) { 
-	Nbad++; 
+	BAD_COUNT(Nbad); 
 	continue;
       }
-      if (catalog[0].measure[offset].photFlags & code->photomPoorMask) { Npoor++; continue;}
+      if (catalog[0].measure[offset].photFlags & code->photomPoorMask) { BAD_COUNT(Npoor); continue;}
 
       // weak test for galaxies
-      if (Mkp > 0.5) {
+      if (Mkp > STAR_MAX_PSF_KRON) {
 	nEXT ++;
       } else {
@@ -112,15 +156,23 @@
       /* select measurements by mag limit */
       mag = PhotCat (&catalog[0].measure[offset], MAG_CLASS_PSF);
-      if (mag > MAG_LIM) { Nmag ++; continue; } 
+      if (mag > MAG_LIM) { BAD_COUNT(Nmag); continue; } 
+      if (mag < MAG_MIN) { BAD_COUNT(Nmag); continue; } 
+      // note that these two cuts are applied to all photcodes. these are also applied to
+      // the nominal apparent mags : if the expected sensitivity is very different between
+      // different filters, or if exposure times have a large range, these cuts may not be
+      // effective (or may exclude too much).
 
       /* select measurements by measurement error */
-      if ((SIGMA_LIM > 0) && (catalog[0].measure[offset].dM > SIGMA_LIM)) { Nsigma ++; continue; }
+      if ((SIGMA_LIM > 0) && (catalog[0].measure[offset].dM > SIGMA_LIM)) { BAD_COUNT(Nsigma); continue; }
 
       /* select measurements by mag limit */
       if (ImagSelect) {
 	mag = PhotInst (&catalog[0].measure[offset], MAG_CLASS_PSF);
-	if (mag < ImagMin) { Nimag ++; continue; }
-	if (mag > ImagMax) { Nimag ++; continue; }
-      }
+	if (mag < ImagMin) { BAD_COUNT(Nimag); continue; }
+	if (mag > ImagMax) { BAD_COUNT(Nimag); continue; }
+      }
+      // note that instrumental mag cuts are reasonable for individual exposures using the same
+      // detector, but are probably not appropriate for stacks with a large range of the number
+      // of inputs.  
 
       // count this measurement as valid for this secfilt entry
@@ -147,5 +199,5 @@
     if (nEXT >= nPSF) {
       Nmeasure -= Nm;
-      Ngalaxy ++;
+      badCount.Ngalaxy++;
       continue; 
     }
@@ -157,5 +209,5 @@
     if (Nm <= STAR_TOOFEW) { /* enough measurements total? */
       Nmeasure -= Nm;
-      Nfew ++;
+      badCount.Nfew++;
       continue; 
     }
@@ -167,5 +219,5 @@
     if (!anySecfiltGood) {
       Nmeasure -= Nm;
-      Nfew ++;
+      badCount.Nfew++;
       continue; 
     }
@@ -204,5 +256,14 @@
 	     subcatalog[0].Naverage,  subcatalog[0].Nmeasure,  catalog[0].Naverage, catalog[0].Nmeasure, catalog[0].filename, NmMin, NmMax);
     fprintf (stderr, "rejections: %d stars have too few measures:\n   %d code, %d time, %d dophot, %d mag, %d sigma, %d imag, %d psfqf, %d Nnan, %d galaxies, %d bad, %d poor\n", 
-	     Nfew, Ncode, Ntime, Ndophot, Nmag, Nsigma, Nimag, Npsfqf, Nnan, Ngalaxy, Nbad, Npoor);
+	     badCount.Nfew, badCount.Ncode, badCount.Ntime, badCount.Ndophot, badCount.Nmag, badCount.Nsigma, badCount.Nimag, badCount.Npsfqf, badCount.Nnan, badCount.Ngalaxy, badCount.Nbad, badCount.Npoor);
+  }
+
+  if (doTest1) {
+    fprintf (stderr, "TEST1 rejections: %d stars have too few measures: %d code, %d time, %d dophot, %d mag, %d sigma, %d imag, %d psfqf, %d Nnan, %d galaxies, %d bad, %d poor\n", 
+	     badTest1.Nfew, badTest1.Ncode, badTest1.Ntime, badTest1.Ndophot, badTest1.Nmag, badTest1.Nsigma, badTest1.Nimag, badTest1.Npsfqf, badTest1.Nnan, badTest1.Ngalaxy, badTest1.Nbad, badTest1.Npoor);
+  }
+  if (doTest2) {
+    fprintf (stderr, "TEST2 rejections: %d stars have too few measures: %d code, %d time, %d dophot, %d mag, %d sigma, %d imag, %d psfqf, %d Nnan, %d galaxies, %d bad, %d poor\n", 
+	     badTest2.Nfew, badTest2.Ncode, badTest2.Ntime, badTest2.Ndophot, badTest2.Nmag, badTest2.Nsigma, badTest2.Nimag, badTest2.Npsfqf, badTest2.Nnan, badTest2.Ngalaxy, badTest2.Nbad, badTest2.Npoor);
   }
 
@@ -212,5 +273,8 @@
   }
 
-  free (Nvalid)
+  free (Nvalid);
+
+  if (ftest1) { fclose (ftest1); }
+  if (ftest2) { fclose (ftest2); }
 
   return (TRUE);
Index: /trunk/Ohana/src/relphot/src/extra.c
===================================================================
--- /trunk/Ohana/src/relphot/src/extra.c	(revision 42820)
+++ /trunk/Ohana/src/relphot/src/extra.c	(revision 42821)
@@ -70,13 +70,20 @@
 }
 
-// for now (20140710) I need to identify gpc1 stacks explicitly.  generalize in the future
+// for now (20140710) I need to identify gpc1 & gpc2 stacks explicitly.  generalize in the future
 int isGPC1stack (int photcode) {
 
-  if ((photcode == 11000) || (photcode == 14100)) return TRUE; // g-band
-  if ((photcode == 11100) || (photcode == 14200)) return TRUE; // r-band
-  if ((photcode == 11200) || (photcode == 14300)) return TRUE; // i-band
-  if ((photcode == 11300) || (photcode == 14400)) return TRUE; // z-band
-  if ((photcode == 11400) || (photcode == 14500)) return TRUE; // y-band
-  if ((photcode == 11500) || (photcode == 14600)) return TRUE; // w-band
+  // 11000 : GPC1.g.SkyChip
+  // 11001 : VARIOUS.g.SkyChip (output of xcamera stacks)
+  // 14100 : SIMTEST.g.SkyChip
+  // 31000 : GPC2.g.SkyChip
+  
+  if (CALIBRATE_STACKS_LIKE_CHIPS) return FALSE;
+
+  if ((photcode == 11000) || (photcode == 11001) || (photcode == 14100) || (photcode == 31000)) return TRUE; // g-band
+  if ((photcode == 11100) || (photcode == 11101) || (photcode == 14200) || (photcode == 31100)) return TRUE; // r-band
+  if ((photcode == 11200) || (photcode == 11201) || (photcode == 14300) || (photcode == 31200)) return TRUE; // i-band
+  if ((photcode == 11300) || (photcode == 11301) || (photcode == 14400) || (photcode == 31300)) return TRUE; // z-band
+  if ((photcode == 11400) || (photcode == 11401) || (photcode == 14500) || (photcode == 31400)) return TRUE; // y-band
+  if ((photcode == 11500) || (photcode == 11501) || (photcode == 14600) || (photcode == 31500)) return TRUE; // w-band
 
   return FALSE;
@@ -85,4 +92,13 @@
 // for now (20140710) I need to identify gpc1 stacks explicitly.  generalize in the future
 int isGPC1warp (int photcode) {
+
+  if (CALIBRATE_WARPS_LIKE_CHIPS) return FALSE;
+
+  // 11000 : GPC1.g.SkyChip
+  // 14100 : SIMTEST.g.SkyChip
+
+  // 12000 : GPC1.g.ForcedWarp
+  // 15100 : SIMTEST.g.ForcedWarp
+  // 32000 : GPC2.g.ForcedWarp
 
   // diff warps get stack-like photcodes (kind of lame)
@@ -97,10 +113,10 @@
   }
 
-  if ((photcode == 12000) || (photcode == 15100)) return TRUE; // g-band
-  if ((photcode == 12100) || (photcode == 15200)) return TRUE; // r-band
-  if ((photcode == 12200) || (photcode == 15300)) return TRUE; // i-band
-  if ((photcode == 12300) || (photcode == 15400)) return TRUE; // z-band
-  if ((photcode == 12400) || (photcode == 15500)) return TRUE; // y-band
-  if ((photcode == 12500) || (photcode == 15600)) return TRUE; // w-band
+  if ((photcode == 12000) || (photcode == 15100) || (photcode == 32000)) return TRUE; // g-band
+  if ((photcode == 12100) || (photcode == 15200) || (photcode == 32100)) return TRUE; // r-band
+  if ((photcode == 12200) || (photcode == 15300) || (photcode == 32200)) return TRUE; // i-band
+  if ((photcode == 12300) || (photcode == 15400) || (photcode == 32300)) return TRUE; // z-band
+  if ((photcode == 12400) || (photcode == 15500) || (photcode == 32400)) return TRUE; // y-band
+  if ((photcode == 12500) || (photcode == 15600) || (photcode == 32500)) return TRUE; // w-band
 
   return FALSE;
Index: /trunk/Ohana/src/relphot/src/fit1d_irls.c
===================================================================
--- /trunk/Ohana/src/relphot/src/fit1d_irls.c	(revision 42820)
+++ /trunk/Ohana/src/relphot/src/fit1d_irls.c	(revision 42821)
@@ -374,5 +374,6 @@
   StatType stats;
   liststats_setmode (&stats, "MEDIAN");
-  liststats (dataset->alldata->yVector, NULL, NULL, Nvalues, &stats);
+  liststats (dataset->alldata->yVector, dataset->alldata->dyVector, NULL, Nvalues, &stats);
+  // liststats sorts yVector and dyVector together
 
   double altSigma = (stats.Upper80 - stats.Lower20) / 1.6;  // 20% to 80% encompasses 60% of the values, corresponds to the range (-0.85 sigma : +0.85 sigma)
@@ -380,5 +381,5 @@
   // soften the individual errors with 10% of the scatter above
   for (int j = 0; j < Nvalues; j++) {
-    double newSigma = hypot(dataset->alldata->dyVector[j], 0.1*altSigma);
+    double newSigma = hypot(dataset->alldata->dyVector[j], 0.5*altSigma);
     dataset->alldata->dyVector[j] = newSigma;
   }
Index: /trunk/Ohana/src/relphot/src/initialize.c
===================================================================
--- /trunk/Ohana/src/relphot/src/initialize.c	(revision 42820)
+++ /trunk/Ohana/src/relphot/src/initialize.c	(revision 42821)
@@ -50,11 +50,12 @@
       fprintf (stderr, "DophotSelect: FALSE\n");
     }
-    fprintf (stderr, "PSF_QF limit: 0.85 (hardwired)\n");
+    fprintf (stderr, "PSF_QF limit: %f\n", PSF_QF_MIN);
 
     // fprintf (stderr, "Photom Bad Mask: 0x%08x, Photom Poor Mask: 0x%08x\n");
 
-    fprintf (stderr, "MAG_LIM: %f, SIGMA_LIM: %f\n", MAG_LIM, SIGMA_LIM);
+    fprintf (stderr, "MAG_MIN: %f, MAG_LIM: %f, SIGMA_LIM: %f\n", MAG_MIN, MAG_LIM, SIGMA_LIM);
     fprintf (stderr, "INST_MAG_MIN: %f, INST_MAG_MAX: %f\n", ImagMin, ImagMax);
 
+    fprintf (stderr, "STAR_MAX_PSF_KRON: %f\n", STAR_MAX_PSF_KRON);
     fprintf (stderr, "STAR_TOOFEW: %d\n", STAR_TOOFEW);
 
Index: /trunk/Ohana/src/relphot/src/load_catalogs.c
===================================================================
--- /trunk/Ohana/src/relphot/src/load_catalogs.c	(revision 42820)
+++ /trunk/Ohana/src/relphot/src/load_catalogs.c	(revision 42821)
@@ -151,5 +151,7 @@
     // TimeSelect -time
     // DophotSelect
-    // (note that psfQF is applied rigidly at 0.85, as is the galaxy test)
+    // PSF_QF_MIN
+    // STAR_MAX_PSF_KRON
+    // MAG_MIN
     // MAG_LIM
     // SIGMA_LIM
@@ -158,6 +160,8 @@
 
     char *command = NULL;
-    strextend (&command, "relphot_client %s -load %s -hostID %d -D CATDIR %s -hostdir %s -region %f %f %f %f -D CAMERA %s -D MAG_LIM %f -D SIGMA_LIM %f", 
-	      PhotcodeList, table->hosts[i].results, table->hosts[i].hostID, CATDIR, table->hosts[i].pathname, UserPatch.Rmin, UserPatch.Rmax, UserPatch.Dmin, UserPatch.Dmax, CAMERA, MAG_LIM, SIGMA_LIM);
+    strextend (&command, "relphot_client %s -load %s -hostID %d -D CATDIR %s -hostdir %s", PhotcodeList, table->hosts[i].results, table->hosts[i].hostID, CATDIR, table->hosts[i].pathname);
+    strextend (&command, "-region %f %f %f %f -D CAMERA %s", UserPatch.Rmin, UserPatch.Rmax, UserPatch.Dmin, UserPatch.Dmax, CAMERA);
+    strextend (&command, "-D MAG_MIN %f -D MAG_LIM %f -D SIGMA_LIM %f", MAG_MIN, MAG_LIM, SIGMA_LIM);
+    strextend (&command, "-D STAR_MAX_PSF_KRON %f -D PSF_QF_MIN %f", STAR_MAX_PSF_KRON, PSF_QF_MIN);
 
     if (VERBOSE)       	     { strextend (&command, "-v"); }
Index: /trunk/Ohana/src/relphot/src/reload_catalogs.c
===================================================================
--- /trunk/Ohana/src/relphot/src/reload_catalogs.c	(revision 42820)
+++ /trunk/Ohana/src/relphot/src/reload_catalogs.c	(revision 42821)
@@ -251,4 +251,6 @@
     if (!(STAGES & STAGE_WARP))  { strextend (&command, "-skip-warp"); }
     if (!(STAGES & STAGE_STACK)) { strextend (&command, "-skip-stack"); }
+    if (CALIBRATE_WARPS_LIKE_CHIPS) { strextend (&command, "-calibrate-warps-like-chips"); }
+    if (CALIBRATE_STACKS_LIKE_CHIPS) { strextend (&command, "-calibrate-stacks-like-chips"); }
 
     // deprecate
Index: /trunk/Ohana/src/relphot/src/relphot.c
===================================================================
--- /trunk/Ohana/src/relphot/src/relphot.c	(revision 42820)
+++ /trunk/Ohana/src/relphot/src/relphot.c	(revision 42821)
@@ -33,7 +33,8 @@
   
   switch (mode) {
-    case UPDATE_IMAGES:
+    case UPDATE_IMAGES: // -images
       // calculate zero points for images (may group by exposure [mosaic], night [tgroups]; may measure flat-correction)
-      // IF CALLED WITH NLOOP == 0, DOES NOT LOAD bcatalog, just loads image table and generates ImageSubset.dat
+      // IF CALLED WITH NLOOP == 0 (and NOT -only-stacks-and-warps), this step DOES NOT LOAD bcatalog.  Instead it just loads
+      // the image table and applies the Mcal values to the measurements.  In parallel context, it generates ImageSubset.dat.
       // If called with -update, calls reload_catalogs() just like apply_offsets, UNLESS -only-stacks-and-warps is selected
       relphot_images (skylist);
Index: /trunk/Ohana/src/tools/src/mpcorb_predict.c
===================================================================
--- /trunk/Ohana/src/tools/src/mpcorb_predict.c	(revision 42820)
+++ /trunk/Ohana/src/tools/src/mpcorb_predict.c	(revision 42821)
@@ -51,5 +51,5 @@
 PlanetDatum mpcorb_predict (Planets *planet, double mjdObs, int FullCalc);
 
-Planets *mpcorb_read_text (char *filename, int *nplanets);
+Planets *mpcorb_read_text (char *filename, int *nplanets, int noHeader);
 Planets *mpcorb_read_fits (char *filename, int *nplanets);
 void     mpcorb_save_fits (char *filename, Planets *planets, int Nplanets);
@@ -73,4 +73,7 @@
 
 int main (int argc, char **argv) {
+
+  if (get_argument (argc, argv, "-h")) goto usage;
+  if (get_argument (argc, argv, "--help")) goto usage;
 
   // XXX test
@@ -84,5 +87,5 @@
     // load the planets
     int Nplanets = 0;
-    Planets *planets = mpcorb_read_text (filename, &Nplanets);
+    Planets *planets = mpcorb_read_text (filename, &Nplanets, FALSE);
     for (int i = 0; i < 10; i++) {
       // if it is in the region, use the more accurate calculation
@@ -92,6 +95,5 @@
   }
 
-  if ((argc != 9) && (argc != 10)) goto usage;
-
+  if (argc < 2) goto usage;
   if (!strcasecmp (argv[1], "trange")) mpcorb_trange (argc, argv);
   if (!strcasecmp (argv[1], "moment")) mpcorb_moment (argc, argv);
@@ -99,9 +101,16 @@
 usage:
   fprintf (stderr, "USAGE: %s trange (MPCORB.DAT) (Tmin) (Tmax) (Rmin) (Rmax) (Dmin) (Dmax) (range.fits)\n", argv[0]);
-  fprintf (stderr, "USAGE: %s moment (range.fits) (Tobs) (Rmin) (Rmax) (Dmin) (Dmax) (output)\n", argv[0]);
+  fprintf (stderr, "USAGE: %s moment (range.fits) (Tobs) (Rmin) (Rmax) (Dmin) (Dmax) (output)\n\n", argv[0]);
 
   fprintf (stderr, " trange : generate a table of asteroid orbital elements which fall within the region at Tmin or Tmax (in MJD)\n");
-  fprintf (stderr, " moment : generate a table of asteroid positions which fall within the region at Tobs (in MJD)\n");
-
+  fprintf (stderr, " moment : generate a table of asteroid positions which fall within the region at Tobs (in MJD)\n\n");
+
+  fprintf (stderr, " Tmin, Tmax, Tobs are in MJD; Rmin, Rmax, Dmin, Dmax are in decimal degrees\n");
+  fprintf (stderr, " Orbital predictions are valid for the PS1 site\n");
+
+  fprintf (stderr, " trange options:\n");
+  fprintf (stderr, " -no-header (for files other than MPCORB.DAT)\n");
+  fprintf (stderr, " -min-obs (Nobs) : minimum number of observations to keep object\n");
+  fprintf (stderr, " -min-opp (Nopp) : minimum number of oppositions to keep object\n");
   exit (2);
 }
@@ -110,5 +119,25 @@
 void mpcorb_trange (int argc, char **argv) {
 
-  if (argc != 10) Shutdown ("USAGE: %s trange (MPCORB.DAT) (Tmin) (Tmax) (Rmin) (Rmax) (Dmin) (Dmax) (range.fits)\n", argv[0]);
+  int N;
+  
+  int noHeader = FALSE;
+  if ((N = get_argument (argc, argv, "-no-header"))) {
+    remove_argument (N, &argc, argv);
+    noHeader = TRUE;
+  }
+  int MIN_OBS = 0;
+  if ((N = get_argument (argc, argv, "-min-obs"))) {
+    remove_argument (N, &argc, argv);
+    MIN_OBS = atoi(argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+  int MIN_OPP = 0;
+  if ((N = get_argument (argc, argv, "-min-opp"))) {
+    remove_argument (N, &argc, argv);
+    MIN_OPP = atoi(argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
+  if (argc != 10) Shutdown ("USAGE: %s trange (MPCORB.DAT) (Tmin) (Tmax) (Rmin) (Rmax) (Dmin) (Dmax) (range.fits) [-no-header] [-min-obs] [-min-opp]\n", argv[0]);
 
   char  *filename = argv[2];
@@ -122,5 +151,5 @@
 
   int Nplanets = 0;
-  Planets *planets = mpcorb_read_text (filename, &Nplanets);
+  Planets *planets = mpcorb_read_text (filename, &Nplanets, noHeader);
   if (VERBOSE) fprintf (stderr, "loaded %d planets\n", Nplanets);
 
@@ -133,6 +162,7 @@
     if (i % 1000 == 0) fprintf (stderr, ".");
 
-    // XXX make these quality cuts user options
-    if (SKIP_BAD && ((planets[i].Nobs < 20) || (planets[i].Nopp < 2))) continue;
+    // skip poor-quality observations
+    if (planets[i].Nobs < MIN_OBS) continue;
+    if (planets[i].Nopp < MIN_OPP) continue;
 
     // is the object in the region for the start of the period?
@@ -804,5 +834,5 @@
 
 // read the full MPCORB file, storing desired information in Planets structure
-Planets *mpcorb_read_text (char *filename, int *nplanets) {
+Planets *mpcorb_read_text (char *filename, int *nplanets, int noHeader) {
 
   ALLOCATE_PTR (buffer, char, NBYTE);
@@ -838,6 +868,8 @@
 
       Nline ++;
-      if ((Nline > 43) && (q - p > 5)) {
+      int doParse = (noHeader || (Nline > 43));
+      if (doParse && (q - p > 5)) {
 	mpcorb_parseline (p, &planets[Nplanets], Nbyte - offset);
+	if ((Nplanets < 10) && DEBUG) fprintf (stderr, "object: %s", planets[Nplanets].ID);
 	Nplanets ++;
 	CHECK_REALLOCATE (planets, Planets, NPLANETS, Nplanets, 10000);
