Index: /branches/eam_branches/eam_branch_20090312/psastro/src/psastro.h
===================================================================
--- /branches/eam_branches/eam_branch_20090312/psastro/src/psastro.h	(revision 23335)
+++ /branches/eam_branches/eam_branch_20090312/psastro/src/psastro.h	(revision 23336)
@@ -61,10 +61,10 @@
 bool              psPlaneDistortIsIdentity (psPlaneDistort *distort);
 
-psArray          *psastroLoadRefstars (pmConfig *config);
+psArray          *psastroLoadRefstars (pmConfig *config, const char *source);
 bool              psastroChipAstrom (pmConfig *config);
 bool              psastroOneChip (pmFPA *fpa, pmChip *chip, psArray *refset, psArray *rawset, psMetadata *recipe, psMetadata *updates);
 bool              psastroOneChipGrid (pmFPA *fpa, pmChip *chip, psArray *refset, psArray *rawset, psMetadata *recipe, psMetadata *updates);
 bool              psastroOneChipFit (pmFPA *fpa, pmChip *chip, psArray *refset, psArray *rawset, psMetadata *recipe, psMetadata *updates);
-bool              psastroChooseRefstars (pmConfig *config, psArray *refs);
+bool              psastroChooseRefstars (pmConfig *config, psArray *refs, const char *source);
 bool              psastroRefstarSubset (pmReadout *readout);
 pmLumFunc        *psastroLuminosityFunction (psArray *stars, pmLumFunc *rawFunc);
@@ -121,4 +121,5 @@
 bool              psastroDumpCorners (char *filenameU, char *filenameD, pmFPA *fpa);
 
+char             *psastroSetMagLimit (float *minMag, float *maxRho, pmConfig *config, const char *source);
 
 psArray          *psastroReadGetstarCatalog (psFits *fits);
@@ -133,4 +134,11 @@
 bool psastroZeroPointFromRecipe (float *zeropt, float *exptime, pmFPA *fpa, psMetadata *recipe);
 
+// psastroExtract functions
+bool psastroExtractAnalysis (pmConfig *config);
+psImage *psastroExtractStar (psImage *input, float x, float y, float dX, float dY);
+bool psastroExtractParseCamera (pmConfig *config);
+bool psastroExtractDataLoad (pmConfig *config);
+pmConfig *psastroExtractArguments (int argc, char **argv);
+
 ///@}
 # endif /* PSASTRO_H */
Index: /branches/eam_branches/eam_branch_20090312/psastro/src/psastroAnalysis.c
===================================================================
--- /branches/eam_branches/eam_branch_20090312/psastro/src/psastroAnalysis.c	(revision 23335)
+++ /branches/eam_branches/eam_branch_20090312/psastro/src/psastroAnalysis.c	(revision 23336)
@@ -45,5 +45,5 @@
 
     // load the reference stars overlapping the data stars
-    psArray *refs = psastroLoadRefstars(config);
+    psArray *refs = psastroLoadRefstars(config, "PSASTRO.INPUT");
     if (!refs) {
         psError (PSASTRO_ERR_UNKNOWN, false, "failed to load reference data\n");
@@ -56,9 +56,10 @@
     }
 
-    if (!psastroChooseRefstars (config, refs)) {
+    if (!psastroChooseRefstars (config, refs, "PSASTRO.INPUT")) {
         psError (PSASTRO_ERR_UNKNOWN, false, "failed to select reference data for chips\n");
         psFree(refs);
         return false;
     }
+    psFree (refs);  // refs of interest are saved on readout->analysis
 
     // check the command-line arguments first
@@ -79,5 +80,4 @@
         if (!psastroChipAstrom (config)) {
             psError (PSASTRO_ERR_UNKNOWN, false, "failed to perform single chip astrometry\n");
-            psFree(refs);
             return false;
         }
@@ -86,5 +86,4 @@
         if (!psastroMosaicAstrom (config)) {
             psError (PSASTRO_ERR_UNKNOWN, false, "failed to perform mosaic camera astrometry\n");
-            psFree(refs);
             return false;
         }
@@ -100,5 +99,4 @@
     // psastroStackAstrom (config, refs);
 
-    psFree (refs);
     return true;
 }
Index: /branches/eam_branches/eam_branch_20090312/psastro/src/psastroChooseRefstars.c
===================================================================
--- /branches/eam_branches/eam_branch_20090312/psastro/src/psastroChooseRefstars.c	(revision 23335)
+++ /branches/eam_branches/eam_branch_20090312/psastro/src/psastroChooseRefstars.c	(revision 23336)
@@ -20,5 +20,5 @@
 }
 
-bool psastroChooseRefstars (pmConfig *config, psArray *refs) {
+bool psastroChooseRefstars (pmConfig *config, psArray *refs, const char *source) {
 
     bool status;
@@ -35,5 +35,5 @@
 
     // select the input data sources
-    pmFPAfile *input = psMetadataLookupPtr (NULL, config->files, "PSASTRO.INPUT");
+    pmFPAfile *input = psMetadataLookupPtr (NULL, config->files, source);
     if (!input) {
         psError(PSASTRO_ERR_CONFIG, true, "Can't find input data!\n");
Index: /branches/eam_branches/eam_branch_20090312/psastro/src/psastroLoadRefstars.c
===================================================================
--- /branches/eam_branches/eam_branch_20090312/psastro/src/psastroLoadRefstars.c	(revision 23335)
+++ /branches/eam_branches/eam_branch_20090312/psastro/src/psastroLoadRefstars.c	(revision 23336)
@@ -14,7 +14,5 @@
 # define ELIXIR_MODE 1
 
-char *psastroSetMagLimit (float *minMag, float *maxRho, pmConfig *config);
-
-psArray *psastroLoadRefstars (pmConfig *config) {
+psArray *psastroLoadRefstars (pmConfig *config, const char *source) {
 
     int fd;
@@ -69,5 +67,5 @@
     float minMag;
     float maxRho;
-    char *photcode = psastroSetMagLimit (&minMag, &maxRho, config);
+    char *photcode = psastroSetMagLimit (&minMag, &maxRho, config, source);
     PS_ASSERT (photcode, NULL);
 
@@ -240,5 +238,5 @@
   goto escape; }
 
-char *psastroSetMagLimit (float *minMag, float *maxRho, pmConfig *config) {
+char *psastroSetMagLimit (float *minMag, float *maxRho, pmConfig *config, const char *source) {
 
     bool status;
@@ -249,5 +247,5 @@
 
     // select the input data sources
-    pmFPAfile *input = psMetadataLookupPtr (NULL, config->files, "PSASTRO.INPUT");
+    pmFPAfile *input = psMetadataLookupPtr (NULL, config->files, source);
     if (!input) {
         psLogMsg ("psastro", PS_LOG_DETAIL, "no supplied reference header data");
