Index: trunk/ppSim/src/ppSimSetPSF.c
===================================================================
--- trunk/ppSim/src/ppSimSetPSF.c	(revision 26900)
+++ trunk/ppSim/src/ppSimSetPSF.c	(revision 30618)
@@ -23,4 +23,7 @@
     float theta    = psMetadataLookupF32(&status, recipe, "PSF.THETA"); // Seeing SIGMA (pixels)
 
+    float seeingMax = psMetadataLookupF32(&status, recipe, "SEEING.MAX"); // Seeing SIGMA (pixels)
+    bool seeingRamp = psMetadataLookupBool(&status, recipe, "SEEING.RAMP"); // Seeing SIGMA (pixels)
+
     char *psfModelName = psMetadataLookupStr(&status, recipe, "PSF.MODEL"); // Name of PSF model
     if (psfModelName == NULL) {
@@ -39,44 +42,99 @@
     int xSize = psMetadataLookupS32(NULL, chip->concepts, "CHIP.XSIZE");
     int ySize = psMetadataLookupS32(NULL, chip->concepts, "CHIP.YSIZE");
-    xSize = 1000;
-    ySize = 1000;
 
-    // no spatial variation
-    options->psfTrendMode = PM_TREND_POLY_ORD;
-    options->psfTrendNx = 0;
-    options->psfTrendNy = 0;
-    options->psfFieldNx = xSize;
-    options->psfFieldNy = ySize;
+    if (seeingRamp) {
+	psEllipseAxes axes;
+	psEllipsePol pol;
+	psEllipsePol polMax;
 
-    // generate the psf
-    psf = pmPSFAlloc (options);
+	// try spatial variation
+	options->psfTrendMode = PM_TREND_POLY_ORD;
+	options->psfTrendNx = 1;
+	options->psfTrendNy = 1;
+	options->psfFieldNx = xSize;
+	options->psfFieldNy = ySize;
 
-    psEllipseAxes axes;
-    psEllipsePol pol;
+	// generate the psf
+	psf = pmPSFAlloc (options);
 
-    // supply the semi-major axis (these are SIGMA values in PIXELS)
-    axes.major = seeing;
-    axes.minor = aRatio * seeing;
-    axes.theta = theta * PS_RAD_DEG;
+	// supply the semi-major axis (these are SIGMA values in PIXELS)
+	axes.major = seeing;
+	axes.minor = aRatio * seeing;
+	axes.theta = theta * PS_RAD_DEG;
 
-    pol = psEllipseAxesToPol (axes);
+	pol = psEllipseAxesToPol (axes);
     
-    param = psf->params->data[PM_PAR_E0];
-    param->poly->coeff[0][0] = pol.e0;
+	axes.major = seeingMax;
+	axes.minor = aRatio * seeingMax;
+	polMax = psEllipseAxesToPol (axes);
 
-    param = psf->params->data[PM_PAR_E1];
-    param->poly->coeff[0][0] = pol.e1;
+	param = psf->params->data[PM_PAR_E0];
+	param->poly->coeff[0][0] = pol.e0;
+	param->poly->coeff[1][0] = (polMax.e0 - pol.e0) / xSize;
+	param->poly->coeff[0][1] = (polMax.e0 - pol.e0) / ySize;
 
-    param = psf->params->data[PM_PAR_E2];
-    param->poly->coeff[0][0] = pol.e2;
+	param = psf->params->data[PM_PAR_E1];
+	param->poly->coeff[0][0] = pol.e1;
+	param->poly->coeff[1][0] = 0.0;
+	param->poly->coeff[0][1] = 0.0;
 
-    if (!strcasecmp (psfModelName, "PS_MODEL_QGAUSS")) {
-        param = psf->params->data[PM_PAR_7];
-        param->poly->coeff[0][0] = 1.0;
-    }
+	param = psf->params->data[PM_PAR_E2];
+	param->poly->coeff[0][0] = pol.e2;
+	param->poly->coeff[1][0] = 0.0;
+	param->poly->coeff[0][1] = 0.0;
 
-    if (!strcasecmp (psfModelName, "PS_MODEL_RGAUSS")) {
-        param = psf->params->data[PM_PAR_7];
-        param->poly->coeff[0][0] = 1.0;
+	if (!strcasecmp (psfModelName, "PS_MODEL_QGAUSS")) {
+	    param = psf->params->data[PM_PAR_7];
+	    param->poly->coeff[0][0] = 1.0;
+	    param->poly->coeff[1][0] = 0.0;
+	    param->poly->coeff[0][1] = 0.0;
+	}
+
+	if (!strcasecmp (psfModelName, "PS_MODEL_RGAUSS")) {
+	    param = psf->params->data[PM_PAR_7];
+	    param->poly->coeff[0][0] = 1.0;
+	    param->poly->coeff[1][0] = 0.0;
+	    param->poly->coeff[0][1] = 0.0;
+	}
+
+    } else {
+	psEllipseAxes axes;
+	psEllipsePol pol;
+
+	// no spatial variation
+	options->psfTrendMode = PM_TREND_POLY_ORD;
+	options->psfTrendNx = 0;
+	options->psfTrendNy = 0;
+	options->psfFieldNx = xSize;
+	options->psfFieldNy = ySize;
+
+	// generate the psf
+	psf = pmPSFAlloc (options);
+
+	// supply the semi-major axis (these are SIGMA values in PIXELS)
+	axes.major = seeing;
+	axes.minor = aRatio * seeing;
+	axes.theta = theta * PS_RAD_DEG;
+
+	pol = psEllipseAxesToPol (axes);
+    
+	param = psf->params->data[PM_PAR_E0];
+	param->poly->coeff[0][0] = pol.e0;
+
+	param = psf->params->data[PM_PAR_E1];
+	param->poly->coeff[0][0] = pol.e1;
+
+	param = psf->params->data[PM_PAR_E2];
+	param->poly->coeff[0][0] = pol.e2;
+
+	if (!strcasecmp (psfModelName, "PS_MODEL_QGAUSS")) {
+	    param = psf->params->data[PM_PAR_7];
+	    param->poly->coeff[0][0] = 1.0;
+	}
+
+	if (!strcasecmp (psfModelName, "PS_MODEL_RGAUSS")) {
+	    param = psf->params->data[PM_PAR_7];
+	    param->poly->coeff[0][0] = 1.0;
+	}
     }
 
