Index: trunk/psLib/src/imageops/psImageMap.c
===================================================================
--- trunk/psLib/src/imageops/psImageMap.c	(revision 15841)
+++ trunk/psLib/src/imageops/psImageMap.c	(revision 19960)
@@ -7,6 +7,6 @@
  *  @author Eugene Magnier, IfA
  *
- *  @version $Revision: 1.8 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-12-15 01:20:03 $
+ *  @version $Revision: 1.9 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2008-10-07 22:23:06 $
  *
  *  Copyright 2007 Institute for Astronomy, University of Hawaii
@@ -37,8 +37,6 @@
 #include "psImageMap.h"
 
-static void psImageMapFree(psImageMap *map) {
-
-    if (!map) return;
-
+static void imageMapFree(psImageMap *map)
+{
     psFree(map->map);
     psFree(map->error);
@@ -49,14 +47,15 @@
 }
 
-psImageMap *psImageMapAlloc(const psImage *field, psImageBinning *binning, psStats *stats) {
-    PS_ASSERT_IMAGE_NON_NULL(field, NULL);
-    assert (binning);
-    assert (stats);
-
-    psImageMap *map = (psImageMap*)psAlloc(sizeof(psImageMap));
-    psMemSetDeallocator(map, (psFreeFunc)psImageMapFree);
-
-    map->binning = psMemIncrRefCounter (binning);
-    map->stats   = psMemIncrRefCounter (stats);
+psImageMap *psImageMapAlloc(const psImage *field, psImageBinning *binning, psStats *stats)
+{
+    psAssert(field, "Require field image");
+    psAssert(binning, "Require binning");
+    // stats may be NULL
+
+    psImageMap *map = psAlloc(sizeof(psImageMap));
+    psMemSetDeallocator(map, (psFreeFunc)imageMapFree);
+
+    map->binning = psMemIncrRefCounter(binning);
+    map->stats   = psMemIncrRefCounter(stats);
 
     map->col0 = field->col0;
@@ -65,12 +64,12 @@
     map->numRows = field->numRows;
 
-    map->map     = psImageAlloc (binning->nXruff, binning->nYruff, PS_TYPE_F32);
-    psImageInit (map->map, 0.0);
-
-    map->error   = psImageAlloc (binning->nXruff, binning->nYruff, PS_TYPE_F32);
-    psImageInit (map->error, 0.0);
-
-    psImageBinningSetScale (map->binning, PS_IMAGE_BINNING_CENTER);
-    psImageBinningSetSkipByOffset (map->binning, map->col0, map->row0);
+    map->map = psImageAlloc(binning->nXruff, binning->nYruff, PS_TYPE_F32);
+    psImageInit(map->map, 0.0);
+
+    map->error = psImageAlloc(binning->nXruff, binning->nYruff, PS_TYPE_F32);
+    psImageInit(map->error, 0.0);
+
+    psImageBinningSetScale(map->binning, PS_IMAGE_BINNING_CENTER);
+    psImageBinningSetSkipByOffset(map->binning, map->col0, map->row0);
 
     return map;
@@ -80,24 +79,29 @@
 {
     PS_ASSERT_PTR(ptr, false);
-    return ( psMemGetDeallocator(ptr) == (psFreeFunc) psImageMapFree);
+    return (psMemGetDeallocator(ptr) == (psFreeFunc)imageMapFree);
 }
 
 // allocate the image map using the psImageBinning supplied
-psImageMap *psImageMapNoImageAlloc(psImageBinning *binning, psStats *stats) {
-
-    assert (binning);
-    assert (stats);
-
-    psImageMap *map = (psImageMap*)psAlloc(sizeof(psImageMap));
-    psMemSetDeallocator(map, (psFreeFunc)psImageMapFree);
-
-    map->stats   = psMemIncrRefCounter (stats);
-    map->binning = psMemIncrRefCounter (binning);
-
-    map->map     = psImageAlloc (binning->nXruff, binning->nYruff, PS_TYPE_F32);
-    psImageInit (map->map, 0.0);
-
-    map->error   = psImageAlloc (binning->nXruff, binning->nYruff, PS_TYPE_F32);
-    psImageInit (map->error, 0.0);
+psImageMap *psImageMapNoImageAlloc(psImageBinning *binning, psStats *stats)
+{
+    psAssert(binning, "Require binning");
+    // stats may be NULL
+
+    psImageMap *map = psAlloc(sizeof(psImageMap));
+    psMemSetDeallocator(map, (psFreeFunc)imageMapFree);
+
+    map->binning = psMemIncrRefCounter(binning);
+    map->stats   = psMemIncrRefCounter(stats);
+
+    map->col0 = 0;
+    map->row0 = 0;
+    map->numCols = 0;
+    map->numRows = 0;
+
+    map->map = psImageAlloc(binning->nXruff, binning->nYruff, PS_TYPE_F32);
+    psImageInit(map->map, 0.0);
+
+    map->error = psImageAlloc(binning->nXruff, binning->nYruff, PS_TYPE_F32);
+    psImageInit(map->error, 0.0);
 
     return map;
@@ -106,14 +110,14 @@
 bool psImageMapModifyScale(psImageMap *map, int nXruff, int nYruff)
 {
-    assert (map);
+    PS_ASSERT_IMAGE_MAP_NON_NULL(map, false);
 
     map->binning->nXruff = nXruff;
     map->binning->nYruff = nYruff;
 
-    psImageRecycle (map->map, nXruff, nYruff, PS_TYPE_F32);
-    psImageRecycle (map->error, nXruff, nYruff, PS_TYPE_F32);
-
-    psImageBinningSetScale (map->binning, PS_IMAGE_BINNING_CENTER);
-    psImageBinningSetSkipByOffset (map->binning, map->col0, map->row0);
+    map->map = psImageRecycle(map->map, nXruff, nYruff, PS_TYPE_F32);
+    map->error = psImageRecycle(map->error, nXruff, nYruff, PS_TYPE_F32);
+
+    psImageBinningSetScale(map->binning, PS_IMAGE_BINNING_CENTER);
+    psImageBinningSetSkipByOffset(map->binning, map->col0, map->row0);
 
     return true;
@@ -125,5 +129,19 @@
                         const psVector *f, const psVector *df, float badFrac)
 {
-    // XXX asserts
+    PS_ASSERT_IMAGE_MAP_NON_NULL(map, false);
+    PS_ASSERT_IMAGE_MAP_STATS(map, false);
+    PS_ASSERT_VECTOR_NON_NULL(x, false);
+    PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F32, false);
+    PS_ASSERT_VECTOR_NON_NULL(y, false);
+    PS_ASSERT_VECTOR_TYPE(y, PS_TYPE_F32, false);
+    PS_ASSERT_VECTORS_SIZE_EQUAL(x, y, false);
+    PS_ASSERT_VECTOR_NON_NULL(f, false);
+    PS_ASSERT_VECTOR_TYPE(f, PS_TYPE_F32, false);
+    PS_ASSERT_VECTORS_SIZE_EQUAL(x, f, false);
+    if (df) {
+        PS_ASSERT_VECTOR_NON_NULL(df, false);
+        PS_ASSERT_VECTOR_TYPE(df, PS_TYPE_F32, false);
+        PS_ASSERT_VECTORS_SIZE_EQUAL(x, df, false);
+    }
 
     psImage *mask = psImageAlloc (map->map->numCols, map->map->numRows, PS_TYPE_MASK);
@@ -260,5 +278,19 @@
                              const psVector *f, const psVector *df, float badFrac)
 {
-    // XXX Asserts
+    PS_ASSERT_IMAGE_MAP_NON_NULL(map, false);
+    PS_ASSERT_IMAGE_MAP_STATS(map, false);
+    PS_ASSERT_VECTOR_NON_NULL(x, false);
+    PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F32, false);
+    PS_ASSERT_VECTOR_NON_NULL(y, false);
+    PS_ASSERT_VECTOR_TYPE(y, PS_TYPE_F32, false);
+    PS_ASSERT_VECTORS_SIZE_EQUAL(x, y, false);
+    PS_ASSERT_VECTOR_NON_NULL(f, false);
+    PS_ASSERT_VECTOR_TYPE(f, PS_TYPE_F32, false);
+    PS_ASSERT_VECTORS_SIZE_EQUAL(x, f, false);
+    if (df) {
+        PS_ASSERT_VECTOR_NON_NULL(df, false);
+        PS_ASSERT_VECTOR_TYPE(df, PS_TYPE_F32, false);
+        PS_ASSERT_VECTORS_SIZE_EQUAL(x, df, false);
+    }
 
     int nXruff, nYruff;
@@ -304,21 +336,20 @@
 
 // x,y are in fractional pixel coords of the fine image (pixel center: 0.5)
-double psImageMapEval(const psImageMap *map, float x, float y) {
-
-    double result;
-
-    result = psImageUnbinPixel_V2(x, y, map->map, map->binning);
-
-    return result;
-}
-
-psVector *psImageMapEvalVector(const psImageMap *map, const psVector *x, const psVector *y) {
-
-    assert (x);
-    assert (y);
-    assert (x->n == y->n);
-    assert (map);
-
-    psVector *result = psVectorAlloc (x->n, PS_TYPE_F32);
+double psImageMapEval(const psImageMap *map, float x, float y)
+{
+    // This may be called in a type loop, so no assertions
+    return psImageUnbinPixel_V2(x, y, map->map, map->binning);
+}
+
+psVector *psImageMapEvalVector(const psImageMap *map, const psVector *x, const psVector *y)
+{
+    PS_ASSERT_IMAGE_MAP_NON_NULL(map, NULL);
+    PS_ASSERT_VECTOR_NON_NULL(x, NULL);
+    PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F32, NULL);
+    PS_ASSERT_VECTOR_NON_NULL(y, NULL);
+    PS_ASSERT_VECTOR_TYPE(y, PS_TYPE_F32, NULL);
+    PS_ASSERT_VECTORS_SIZE_EQUAL(x, y, NULL);
+
+    psVector *result = psVectorAlloc(x->n, PS_TYPE_F32); // Results to return
 
     for (int i = 0; i < x->n; i++) {
