Index: trunk/psphot/src/psphotArguments.c
===================================================================
--- trunk/psphot/src/psphotArguments.c	(revision 5607)
+++ trunk/psphot/src/psphotArguments.c	(revision 5828)
@@ -5,72 +5,143 @@
 psMetadata *psphotArguments (int *argc, char **argv) {
 
-  int N;
-  unsigned int Nfail;
-  int mode = PS_DATA_STRING | PS_META_REPLACE;
+    int N;
+    unsigned int Nfail;
+    int mode = PS_DATA_STRING | PS_META_REPLACE;
 
-  // basic pslib options
-  fprintf (stderr, "starting... %s\n", psLibVersion());
-  psLogSetFormat ("M");
-  psArgumentVerbosity (argc, argv);
+    // basic pslib options
+    psLogSetFormat ("M");
+    psArgumentVerbosity (argc, argv);
 
-  // optional mask image - add to config
-  char *mask = NULL;
-  if ((N = psArgumentGet (*argc, argv, "-mask"))) {
-    psArgumentRemove (N, argc, argv);
-    mask = psStringCopy (argv[N]);
-    psArgumentRemove (N, argc, argv);
-  }
+    // optional mask image - add to config
+    char *mask = NULL;
+    if ((N = psArgumentGet (*argc, argv, "-mask"))) {
+	psArgumentRemove (N, argc, argv);
+	mask = psStringCopy (argv[N]);
+	psArgumentRemove (N, argc, argv);
+    }
 
-  // optional weight image - add to config
-  char *weight = NULL;
-  if ((N = psArgumentGet (*argc, argv, "-weight"))) {
-    psArgumentRemove (N, argc, argv);
-    weight = psStringCopy (argv[N]);
-    psArgumentRemove (N, argc, argv);
-  }
+    // optional weight image - add to config
+    char *weight = NULL;
+    if ((N = psArgumentGet (*argc, argv, "-weight"))) {
+	psArgumentRemove (N, argc, argv);
+	weight = psStringCopy (argv[N]);
+	psArgumentRemove (N, argc, argv);
+    }
 
-  // optional output residual image - add to config
-  char *resid = NULL;
-  if ((N = psArgumentGet (*argc, argv, "-resid"))) {
-    psArgumentRemove (N, argc, argv);
-    resid = psStringCopy (argv[N]);
-    psArgumentRemove (N, argc, argv);
-  }
+    // optional output residual image - add to config
+    char *resid = NULL;
+    if ((N = psArgumentGet (*argc, argv, "-resid"))) {
+	psArgumentRemove (N, argc, argv);
+	resid = psStringCopy (argv[N]);
+	psArgumentRemove (N, argc, argv);
+    }
 
-  // optional output residual image - add to config
-  char *photcode = NULL;
-  if ((N = psArgumentGet (*argc, argv, "-photcode"))) {
-    psArgumentRemove (N, argc, argv);
-    photcode = psStringCopy (argv[N]);
-    psArgumentRemove (N, argc, argv);
-  }
+    // optional analysis region - add to config
+    char *region = NULL;
+    if ((N = psArgumentGet (*argc, argv, "-region"))) {
+	psArgumentRemove (N, argc, argv);
+	region = psStringCopy (argv[N]);
+	psArgumentRemove (N, argc, argv);
+    }
 
-  if (*argc != 4) usage ();
+    // optional output residual image - add to config
+    char *photcode = NULL;
+    if ((N = psArgumentGet (*argc, argv, "-photcode"))) {
+	psArgumentRemove (N, argc, argv);
+	photcode = psStringCopy (argv[N]);
+	psArgumentRemove (N, argc, argv);
+    }
 
-  // load config information
-  psMetadata *config = psMetadataAlloc ();
-  psMetadataAdd (config, PS_LIST_HEAD, "PSF_MODEL", PS_DATA_METADATA_MULTI, "folder for psf model entries", NULL);
-  config = psMetadataConfigParse (config, &Nfail, argv[3], FALSE);
+    char *psffile = NULL;
+    if ((N = psArgumentGet (*argc, argv, "-psf"))) {
+	psArgumentRemove (N, argc, argv);
+	psffile = psStringCopy (argv[N]);
+	psArgumentRemove (N, argc, argv);
+    }
 
-  // identify input image & optional weight & mask images
-  // command-line entries override config-file entries
-  psMetadataAdd (config, PS_LIST_HEAD, "IMAGE",       mode, "", argv[1]);
-  psMetadataAdd (config, PS_LIST_HEAD, "OUTPUT_FILE", mode, "", argv[2]);
+    bool ModelTest = false;
+    float ModelTest_X, ModelTest_Y;
+    char *model = NULL;
+    char *fitset = NULL;
+    char *fitmode = NULL;
+    if ((N = psArgumentGet (*argc, argv, "-modeltest"))) {
+	ModelTest = true;
+	psArgumentRemove (N, argc, argv);
+	ModelTest_X = atof (argv[N]);
+	psArgumentRemove (N, argc, argv);
+	ModelTest_Y = atof (argv[N]);
+	psArgumentRemove (N, argc, argv);
 
-  if (mask != NULL) {
-    psMetadataAdd (config, PS_LIST_HEAD, "MASK_IMAGE", mode, "", mask);
-  }
-  if (weight != NULL) {
-    psMetadataAdd (config, PS_LIST_HEAD, "WEIGHT_IMAGE", mode, "", weight);
-  }
-  if (resid != NULL) {
-    psMetadataAdd (config, PS_LIST_HEAD, "RESID_IMAGE", mode, "", resid);
-  }
-  if (photcode != NULL) {
-    psMetadataAdd (config, PS_LIST_HEAD, "PHOTCODE", mode, "", photcode);
-  } else {
-    psMetadataAdd (config, PS_LIST_HEAD, "PHOTCODE", mode, "", "NONE");
-  }    
-  return (config);
+	if ((N = psArgumentGet (*argc, argv, "-model"))) {
+	    psArgumentRemove (N, argc, argv);
+	    model = psStringCopy (argv[N]);
+	    psArgumentRemove (N, argc, argv);
+	}
+
+	if ((N = psArgumentGet (*argc, argv, "-fitmode"))) {
+	    psArgumentRemove (N, argc, argv);
+	    fitmode = psStringCopy (argv[N]);
+	    psArgumentRemove (N, argc, argv);
+	}
+	if ((N = psArgumentGet (*argc, argv, "-fitset"))) {
+	    psArgumentRemove (N, argc, argv);
+	    fitset = psStringCopy (argv[N]);
+	    psArgumentRemove (N, argc, argv);
+	}
+    }
+
+    if (*argc != 4) usage ();
+
+    // load config information
+    psMetadata *config = psMetadataAlloc ();
+    psMetadataAdd (config, PS_LIST_HEAD, "PSF_MODEL", PS_DATA_METADATA_MULTI, "folder for psf model entries", NULL);
+    config = psMetadataConfigParse (config, &Nfail, argv[3], FALSE);
+
+    // identify input image & optional weight & mask images
+    // command-line entries override config-file entries
+    psMetadataAdd (config, PS_LIST_HEAD, "IMAGE",       mode, "", argv[1]);
+    psMetadataAdd (config, PS_LIST_HEAD, "OUTPUT_FILE", mode, "", argv[2]);
+
+    if (mask != NULL) {
+	psMetadataAdd (config, PS_LIST_HEAD, "MASK_IMAGE", mode, "", mask);
+    }
+    if (weight != NULL) {
+	psMetadataAdd (config, PS_LIST_HEAD, "WEIGHT_IMAGE", mode, "", weight);
+    }
+    if (resid != NULL) {
+	psMetadataAdd (config, PS_LIST_HEAD, "RESID_IMAGE", mode, "", resid);
+    }
+    if (region != NULL) {
+	psMetadataAdd (config, PS_LIST_HEAD, "ANALYSIS_REGION", mode, "", region);
+    }
+    if (photcode != NULL) {
+	psMetadataAdd (config, PS_LIST_HEAD, "PHOTCODE", mode, "", photcode);
+    } else {
+	psMetadataAdd (config, PS_LIST_HEAD, "PHOTCODE", mode, "", "NONE");
+    }    
+    if (psffile != NULL) {
+	psMetadataAdd (config, PS_LIST_HEAD, "PSF_INPUT_FILE", mode, "", psffile);
+    }
+
+    // model related options
+    if (ModelTest) {
+	psMetadataAdd (config, PS_LIST_HEAD, "TEST_FIT", PS_DATA_BOOL, "", true);
+
+	int fmode = PS_DATA_F32 | PS_META_REPLACE;
+	psMetadataAdd (config, PS_LIST_HEAD, "TEST_FIT_X", fmode, "", ModelTest_X);
+	psMetadataAdd (config, PS_LIST_HEAD, "TEST_FIT_Y", fmode, "", ModelTest_Y);
+
+	if (model != NULL) {
+	    psMetadataAdd (config, PS_LIST_HEAD, "TEST_FIT_MODEL", mode, "", model);
+	}
+
+	if (fitmode != NULL) {
+	    psMetadataAdd (config, PS_LIST_HEAD, "TEST_FIT_MODE", mode, "", fitmode);
+	}
+	if (fitset != NULL) {
+	    psMetadataAdd (config, PS_LIST_HEAD, "TEST_FIT_SET", mode, "", fitset);
+	}
+    }
+    return (config);
 }
 
