Index: trunk/psModules/src/astrom/pmAstrometryModel.c
===================================================================
--- trunk/psModules/src/astrom/pmAstrometryModel.c	(revision 41285)
+++ trunk/psModules/src/astrom/pmAstrometryModel.c	(revision 41286)
@@ -518,4 +518,7 @@
 
     // convert the toFPA transfomations to fromFPA transformations
+    // we need a higher order transformation to model the inverse transformation
+    // is +4 too large?
+    // XXX EAM : hold off on high-order inverse chip fromFPA
     for (int i = 0; i < file->fpa->chips->n; i++) {
         pmChip *chip = file->fpa->chips->data[i];
@@ -523,5 +526,7 @@
         psRegion *region = pmChipPixels (chip);
         psFree (chip->fromFPA);
-        chip->fromFPA = psPlaneTransformInvert(NULL, chip->toFPA, *region, 50);
+//	psPlaneTransform *myPT = psPlaneTransformAlloc(chip->toFPA->x->nX+4, chip->toFPA->x->nY+4);
+	psPlaneTransform *myPT = NULL;
+        chip->fromFPA = psPlaneTransformInvert(myPT, chip->toFPA, *region, 50);
         psFree (region);
     }
@@ -582,5 +587,7 @@
     psRegion *region = pmAstromFPAExtent (file->fpa);
     psFree (file->fpa->fromTPA);
-    file->fpa->fromTPA = psPlaneTransformInvert(NULL, file->fpa->toTPA, *region, 50);
+    psPlaneTransform *myPT = psPlaneTransformAlloc(file->fpa->toTPA->x->nX+4, file->fpa->toTPA->x->nY+4);
+    file->fpa->fromTPA = psPlaneTransformInvert(myPT, file->fpa->toTPA, *region, 50);
+    psFree (myPT);
 
     psFree (model);
@@ -711,14 +718,25 @@
     }
     
+    // EAM 20200208 note: the toTPA versions of the transformation are more fundamental (the are used for the WCS conversion)
+    // we should rotate the toTPA transformation and not the fromFPA.  I believe the sign is reversed, so test this
+
     // XXX we've swapped the sign and parity of POS (add to model)
     // apply true posangle = -(POS - POS_ZERO)
     psLogMsg ("psModules.astrom", 4, "Position Angle: %f, Model Position Angle Zero Point: %f\n", POS, PosZero);
-    psPlaneTransform *fromTPA = psPlaneTransformRotate (NULL, file->fpa->fromTPA, rotatorParity * (PosZero - POS));
+
+//    psPlaneTransform *fromTPA = psPlaneTransformRotate (NULL, file->fpa->fromTPA, rotatorParity * (PosZero - POS));
+//    psFree (file->fpa->fromTPA);
+//    file->fpa->fromTPA = fromTPA;
+
+    psPlaneTransform *toTPA = psPlaneTransformRotate (NULL, file->fpa->toTPA, rotatorParity * (POS - PosZero));
+    psFree (file->fpa->toTPA);
+    file->fpa->toTPA = toTPA;
+
+    // the inverse transformation requires a higher order model to fit the direct transformation sufficiently well
+    psRegion *region = pmAstromFPAExtent (file->fpa);
     psFree (file->fpa->fromTPA);
-    file->fpa->fromTPA = fromTPA;
-
-    psRegion *region = pmAstromFPAExtent (file->fpa);
-    psFree (file->fpa->toTPA);
-    file->fpa->toTPA = psPlaneTransformInvert(NULL, file->fpa->fromTPA, *region, 50);
+    psPlaneTransform *myPT = psPlaneTransformAlloc(file->fpa->toTPA->x->nX+4, file->fpa->toTPA->x->nY+4);
+    file->fpa->fromTPA = psPlaneTransformInvert(myPT, file->fpa->toTPA, *region, 50);
+    psFree (myPT);
     psFree (region);
 
