Index: /trunk/Ohana/src/gastro/Makefile
===================================================================
--- /trunk/Ohana/src/gastro/Makefile	(revision 8513)
+++ /trunk/Ohana/src/gastro/Makefile	(revision 8514)
@@ -26,6 +26,4 @@
 $(SRC)/gstars.$(ARCH).o \
 $(SRC)/gargs.$(ARCH).o \
-$(SRC)/gregions2.$(ARCH).o \
-$(SRC)/gcatalog.$(ARCH).o \
 $(SRC)/gcenter.$(ARCH).o \
 $(SRC)/granges.$(ARCH).o \
@@ -40,8 +38,13 @@
 $(SRC)/greference.$(ARCH).o \
 $(SRC)/getusno.$(ARCH).o \
+$(SRC)/getgsc.$(ARCH).o \
+$(SRC)/getptolemy.$(ARCH).o \
 $(SRC)/plotstuff.$(ARCH).o \
-$(SRC)/gptolemy.$(ARCH).o \
-$(SRC)/g2mass.$(ARCH).o \
 $(SRC)/misc.$(ARCH).o
+
+#$(SRC)/gregions2.$(ARCH).o \
+#$(SRC)/gcatalog.$(ARCH).o \
+#$(SRC)/gptolemy.$(ARCH).o \
+#$(SRC)/g2mass.$(ARCH).o \
 
 gastro: $(BIN)/gastro.$(ARCH)
Index: /trunk/Ohana/src/gastro/include/gastro.h
===================================================================
--- /trunk/Ohana/src/gastro/include/gastro.h	(revision 8513)
+++ /trunk/Ohana/src/gastro/include/gastro.h	(revision 8514)
@@ -44,5 +44,5 @@
 double F_DEC;
 
-char GSCFILE[256], GSC_DIR[256], LONEOS_REGION_FILE[256];
+char GSCFILE[256], GSCDIR[256], LONEOS_REGION_FILE[256];
 double ASEC_PIX;
 char ROUGH_ASTROMETRY[64];
@@ -80,17 +80,9 @@
 } USNOstats;
 
-typedef struct {
-  char name[10];
-  double RA[2], DEC[2];
-} CatalogRegion;
-
 /*  this seems to be a problem: is not included from math.h with the -ansi flag */
 extern double hypot PROTO((double, double));
 
-char    **find_dec_bands      PROTO((CatalogRegion area, char **names, int *Nnames));
-char    **gregions	      PROTO((CatStats *catstats, int *nnames));
-char    **load_ra_blocks      PROTO((int Ndec, CatalogRegion area, char **names, int *Ntnames));
-SStars   *get_catalog_stars   PROTO((double *, double *, double *, int, double, double, double, double, int *));
-SStars   *get_stars           PROTO((char *, int *));
+SStars   *getptolemy          PROTO((CatStats *catstats, int *NSTARS));
+SStars   *getgsc              PROTO((CatStats *catstats, int *NSTARS));
 USNOdata *getusno	      PROTO((USNOstats *usnostats, CatStats *catstats, int *Nusno));
 SStars   *gstars	      PROTO((char *file, int *NSTARS, Coords *coords, int *NX, int *NY, double *dNdM));
@@ -101,17 +93,10 @@
 void 	  PrepPlotting	      PROTO((int Npts, Graphdata *graphmode, int N));
 void 	  XDead		      PROTO(());
-void 	  ahelp		      PROTO(());
 void   	  alter_header        PROTO((char *, char **, int, double, double, double, double, double, double, double, double, int));
 void 	  area_of_region      PROTO((CatStats *region));
-void   	  args                PROTO((int *, char **));
 void 	  define_region	      PROTO((CatStats *catstats, Coords *coords, int NX, int NY));
-void   	  delta               PROTO((SStars *, SStars *, int, int, double *, double *, double *, double *));
-int 	  dms_to_ddd	      PROTO((double *Value, char *string));
-void   	  extract_catalog     PROTO((char *, double **, double **, double **, int *));
 void   	  find_shift          PROTO((SStars *, SStars *, int, int, double, double, int *, double *, double *, double *));
-int 	  g2mass	      PROTO((char *fullpath, SStars **stars, int *Nstars));
 void 	  gargs		      PROTO((int *argc, char **argv, Coords *coords));
 int 	  gaussj	      PROTO((double **a, int n, double **b, int m));
-int 	  gcatalog	      PROTO((char *filename, SStars **stars, int *Nstars));
 int 	  gcenter	      PROTO((SStars *stars1in, SStars *stars2, int N1, int N2, Coords *coords, int NX, int NY, double *dR));
 int 	  get_region_coords   PROTO((double *ra, double *dec, int rnumber, char *side));
@@ -120,5 +105,4 @@
 void 	  gheader	      PROTO((char *file, Coords coords, double dR, int Nmatch));
 void 	  gproject	      PROTO((SStars *catalog, SStars **stars, int Ncat, int *Nstars, Coords *coords, int NX, int NY, double dNdM, int N1));
-int 	  gptolemy	      PROTO((char *fullpath, SStars **stars, int *Nstars));
 void 	  granges	      PROTO((SStars *stars1, SStars *stars2, int N1, int N2, int NPIX, double *gx, double *gy, double *gx0, double *gy0));
 int 	  greference	      PROTO((SStars **cat, int *Ncat, Coords *coords, int NX, int NY));
@@ -129,14 +113,8 @@
 int 	  mk_vector	      PROTO((int n, int m, int norder));
 int 	  open_graph	      PROTO((int N));
-int 	  parse_GSC_line      PROTO((CatalogRegion *region, char *line));
 void   	  precess             PROTO((double *, double *, double, double));
-void   	  ralter_header       PROTO((char *, char *, double, double, double, double, double, double, double, double, int));
 void   	  ranges              PROTO((SStars *, SStars *, int, int, double *, double *, double *, double *, double, double));
-void   	  rargs               PROTO((int *, char **));
 void 	  rotate	      PROTO((SStars *stars, int Nstars, double angle, int Xo, int Yo));
 void 	  sort_stars	      PROTO((SStars *stars, int N));
 void      sort_lists          PROTO((double *X, double *Y, int *S, int N));
 void   	  stats               PROTO((char *, double *, double *, double *, double *, double));
-int 	  str_to_radec	      PROTO((double *ra, double *dec, char *str1, char *str2));
-void 	  svd		      PROTO((double ** matrix, int N, double **vector, int M));
-void 	  svdcmp	      PROTO((double **a, int m, int n, double **w, double **v));
Index: /trunk/Ohana/src/gastro/src/ConfigInit.c
===================================================================
--- /trunk/Ohana/src/gastro/src/ConfigInit.c	(revision 8513)
+++ /trunk/Ohana/src/gastro/src/ConfigInit.c	(revision 8514)
@@ -15,40 +15,34 @@
   if (VERBOSE) fprintf (stderr, "loaded config file: %s\n", file);
 
-  ScanConfig (config, "OFFSET_RADIUS",     "%lf", 0, &SEARCH_RADIUS);
-  ScanConfig (config, "MIN_MATCHES",       "%d",  0, &MIN_MATCHES);
-  ScanConfig (config, "DEFAULT_RADIUS",    "%lf", 0, &DEFAULT_RADIUS);
-  ScanConfig (config, "MINIMUM_RADIUS",    "%lf", 0, &MINIMUM_RADIUS);
-  ScanConfig (config, "MAX_ERROR",         "%lf", 0, &MAX_ERROR);
-  ScanConfig (config, "MAX_NONLINEAR",     "%lf", 0, &MAX_NONLINEAR);
-  ScanConfig (config, "MAX_PRECISE",       "%lf", 0, &MIN_PRECISE);
-  ScanConfig (config, "CCD_PC1_1",         "%lf", 0, &CCD_PC1_1);
-  ScanConfig (config, "CCD_PC2_2",         "%lf", 0, &CCD_PC2_2);
-  ScanConfig (config, "CCD_PC1_2",         "%lf", 0, &CCD_PC1_2);
-  ScanConfig (config, "CCD_PC2_1",         "%lf", 0, &CCD_PC2_1);
-  ScanConfig (config, "ASEC_PIX",          "%lf", 0, &ASEC_PIX);
-  ScanConfig (config, "NFIELD",            "%lf", 0, &NFIELD);
-  ScanConfig (config, "NPOLYTERMS",        "%d",  0, &NPOLYTERMS);
-  ScanConfig (config, "MMIN",              "%lf", 0, &MMIN);
-  ScanConfig (config, "ROT_ZERO",          "%lf", 0, &ROT_ZERO);
-  ScanConfig (config, "dROT",              "%lf", 0, &dROT);
-  ScanConfig (config, "NROT",              "%d",  0, &NROT);
-  ScanConfig (config, "POLAR_ALIGNMENT",   "%d",  0, &POLAR_ALIGNMENT);
-  ScanConfig (config, "GSCFILE",           "%s",  0, GSCFILE);
-  ScanConfig (config, "GSCDIR",            "%s",  0, GSC_DIR);
-  ScanConfig (config, "POLAR_AXIS_RA",     "%lf", 0, &POLE_RA);
-  ScanConfig (config, "POLAR_AXIS_DEC",    "%lf", 0, &POLE_DEC);
-  ScanConfig (config, "RA_OFFSET",         "%lf", 0, &RA_OFFSET);
-  ScanConfig (config, "DEC_OFFSET",        "%lf", 0, &DEC_OFFSET);
-  ScanConfig (config, "LONEOS_REGIONS",    "%s",  0, LONEOS_REGION_FILE);
-  ScanConfig (config, "USNO_CDROM",        "%s",  0, CDROM);
-  ScanConfig (config, "ASTRO_REFCAT",      "%s",  0, REFCAT);
-  ScanConfig (config, "CATDIR",            "%s",  0, CATDIR);
-  ScanConfig (config, "CATMODE",                "%s",  0, CATMODE);
-  ScanConfig (config, "CATFORMAT",              "%s",  0, CATFORMAT);
-  ScanConfig (config, "ROUGH_ASTROMETRY",  "%s",  0, ROUGH_ASTROMETRY);
-  ScanConfig (config, "PHOTCODE_FILE",     "%s",  0, PhotCodeFile);
+  ScanConfig (config, "OFFSET_RADIUS",     "%lf", 0, &SEARCH_RADIUS);   // max allowed offset in gcenter
+  ScanConfig (config, "MIN_MATCHES",       "%d",  0, &MIN_MATCHES);     // min allowed fitted stars 
+  ScanConfig (config, "DEFAULT_RADIUS",    "%lf", 0, &DEFAULT_RADIUS);  // starting radius for matched fit
+  ScanConfig (config, "MINIMUM_RADIUS",    "%lf", 0, &MINIMUM_RADIUS);  // min allowed radius for matched fit
+  ScanConfig (config, "MAX_ERROR",         "%lf", 0, &MAX_ERROR);       // max allowed error for valid solution
+  ScanConfig (config, "MAX_NONLINEAR",     "%lf", 0, &MAX_NONLINEAR);   // max allowed shear |(11*22 - 12*21) / (L1*L2)|
+  ScanConfig (config, "CCD_PC1_1",         "%lf", 0, &CCD_PC1_1);       // guess if WCS is missing
+  ScanConfig (config, "CCD_PC2_2",         "%lf", 0, &CCD_PC2_2);       // guess if WCS is missing
+  ScanConfig (config, "CCD_PC1_2",         "%lf", 0, &CCD_PC1_2);       // guess if WCS is missing
+  ScanConfig (config, "CCD_PC2_1",         "%lf", 0, &CCD_PC2_1);       // guess if WCS is missing
+  ScanConfig (config, "ASEC_PIX",          "%lf", 0, &ASEC_PIX);        // guess if WCS is missing
+  ScanConfig (config, "NFIELD",            "%lf", 0, &NFIELD);          // search region in field units
+  ScanConfig (config, "NPOLYTERMS",        "%d",  0, &NPOLYTERMS);      // fit order
+  ScanConfig (config, "ROT_ZERO",          "%lf", 0, &ROT_ZERO);        // rotation search region
+  ScanConfig (config, "dROT",              "%lf", 0, &dROT);            // rotation search region
+  ScanConfig (config, "NROT",              "%d",  0, &NROT);            // rotation search region
+  ScanConfig (config, "POLAR_ALIGNMENT",   "%d",  0, &POLAR_ALIGNMENT); // apply polar alignment correction
+  ScanConfig (config, "POLAR_AXIS_RA",     "%lf", 0, &POLE_RA);         // true coords of pole (should be HA, not RA)
+  ScanConfig (config, "POLAR_AXIS_DEC",    "%lf", 0, &POLE_DEC);        // true coords of pole
+  ScanConfig (config, "RA_OFFSET",         "%lf", 0, &RA_OFFSET);       // ?? not well defined (should be euler angle)
+  ScanConfig (config, "DEC_OFFSET",        "%lf", 0, &DEC_OFFSET);      // ?? not well defined (should be euler angle)
+  ScanConfig (config, "LONEOS_REGIONS",    "%s",  0, LONEOS_REGION_FILE); // table of LONEOS regions to fix guess astrometry
 
-  if (*CATMODE == 0) strcpy (CATMODE, "RAW");
-  if (*CATFORMAT == 0) strcpy (CATFORMAT, "ELIXIR");
+  ScanConfig (config, "GSCFILE",           "%s",  0, GSCFILE);          // location of sky table
+  ScanConfig (config, "GSCDIR",            "%s",  0, GSCDIR);           // location of HST GSC data 
+  ScanConfig (config, "USNO_CDROM",        "%s",  0, CDROM);            // location of USNO A data (USNO_A_DIR in gastro2)
+  ScanConfig (config, "ASTRO_REFCAT",      "%s",  0, REFCAT);           // which astrometry catalog to use
+  ScanConfig (config, "CATDIR",            "%s",  0, CATDIR);           // location of ptolemy-format ref data
+  ScanConfig (config, "ROUGH_ASTROMETRY",  "%s",  0, ROUGH_ASTROMETRY); // where to get initial guess (header, config)
+  ScanConfig (config, "PHOTCODE_FILE",     "%s",  0, PhotCodeFile);     // location of photcode table to convert supplied photcode
 
   if (strcasecmp (ROUGH_ASTROMETRY, "header") && 
Index: unk/Ohana/src/gastro/src/delta.number
===================================================================
--- /trunk/Ohana/src/gastro/src/delta.number	(revision 8513)
+++ 	(revision )
@@ -1,41 +1,0 @@
-# include "astro.h"
-# define FIND_SHIFT(A,B) \
-  find_shift (stars1, stars2, N1, N2, (A), (B), &N, &dX, &dY); \
-  if (N > n) { \
-    *Rx =  (A); \
-    *Ry =  (B); \
-    *dx = dX; \
-    *dy = dY; \
-      n = N; \
-  }
-
-void delta (stars1, stars2, N1, N2, dx, dy, Rx, Ry)
-Stars stars1[], stars2[];
-int N1, N2; 
-double *dx, *dy, *Rx, *Ry; 
-{
-  
-  int N, n;
-  double dX, dY, RX, RY;
-
-  n = 0;
-  RX = *Rx;
-  RY = *Ry;
-  FIND_SHIFT( 0.9*RX,  0.9*RY);
-  FIND_SHIFT(-0.9*RX,  0.9*RY);
-  FIND_SHIFT( 0.9*RX, -0.9*RY);
-  FIND_SHIFT(-0.9*RX, -0.9*RY);
-
-  FIND_SHIFT( 1.0*RX,  1.0*RY);
-  FIND_SHIFT(-1.0*RX,  1.0*RY);
-  FIND_SHIFT( 1.0*RX, -1.0*RY);
-  FIND_SHIFT(-1.0*RX, -1.0*RY);
-
-  FIND_SHIFT( 1.1*RX,  1.1*RY);
-  FIND_SHIFT(-1.1*RX,  1.1*RY);
-  FIND_SHIFT( 1.1*RX, -1.1*RY);
-  FIND_SHIFT(-1.1*RX, -1.1*RY);
-  
-  fprintf (stderr, "USING: %f %f %f %f\n", *dx, *dy, *Rx, *Ry);
-
-}
Index: unk/Ohana/src/gastro/src/g2mass.c
===================================================================
--- /trunk/Ohana/src/gastro/src/g2mass.c	(revision 8513)
+++ 	(revision )
@@ -1,45 +1,0 @@
-# include "gastro.h"
-
-/* filename has path to GSC, strip off path, use filename with CATDIR path */
-
-int g2mass (char *fullpath, SStars **stars, int *Nstars) {
-  
-  int nstar, NSTARS;
-  float ra, dec, mag;
-  FILE *f;
-
-  f = fopen (fullpath, "r");
-  if (f == (FILE *) NULL) {
-    fprintf (stderr, "can't load catalog data\n");
-    return (FALSE);
-  }
-
-  /* for now, 2Mass data is just stored in a plain file with 
-     ra, dec, mag */
-
-  nstar = *Nstars;
-  NSTARS = *Nstars + 1000;
-  if (*Nstars == 0) {
-    ALLOCATE (stars[0], SStars, NSTARS);
-  } else {
-    REALLOCATE (stars[0], SStars, NSTARS);
-  }
-
-  while (fscanf (f, "%f %f %f", &ra, &dec, &mag) != EOF) {
-    stars[0][nstar].X = ra;
-    stars[0][nstar].Y = dec;
-    stars[0][nstar].mag = mag;
-    nstar ++;
-    if (nstar == NSTARS) {
-      NSTARS += 1000;
-      REALLOCATE (stars[0], SStars, NSTARS);
-    }
-  }
-
-  fclose (f);
-
-  *Nstars = nstar;
-  
-  return (TRUE);
-  
-}
Index: unk/Ohana/src/gastro/src/gcatalog.c
===================================================================
--- /trunk/Ohana/src/gastro/src/gcatalog.c	(revision 8513)
+++ 	(revision )
@@ -1,43 +1,0 @@
-# include "gastro.h"
-# define BYTES_STAR 23
-# define BLOCK 1000
-# define DNSTARS 1000
-
-int gcatalog (char *filename, SStars **stars, int *Nstars) {
-  
-  int i, NSTARS, nstar, Nbytes, nbytes;
-  char *buffer;
-  FILE *f;
-
-  if (*Nstars == 0) ALLOCATE (*stars, SStars, 1);
-  nstar = *Nstars;
-  NSTARS = nstar + DNSTARS;
-
-  f = fopen (filename, "r");
-  if (f == NULL) {
-    fprintf (stderr, "ERROR: can't find catalog file %s\n", filename);
-    return (FALSE);
-  }
-  
-  ALLOCATE (buffer, char, (BLOCK*BYTES_STAR));
-  Nbytes = BLOCK*BYTES_STAR;
-  REALLOCATE (*stars, SStars, NSTARS);
-  while ((nbytes = fread (buffer, 1, Nbytes, f)) > 0) {
-    for (i = 0; i < nbytes / BYTES_STAR; i++) {
-      dparse (&(*stars)[nstar].X,   1, &buffer[i*BYTES_STAR]);
-      dparse (&(*stars)[nstar].Y,   2, &buffer[i*BYTES_STAR]);
-      dparse (&(*stars)[nstar].mag, 3, &buffer[i*BYTES_STAR]);
-      nstar++;
-      if (nstar == NSTARS - 1) {
-	NSTARS += DNSTARS;
-	REALLOCATE (*stars, SStars, NSTARS);
-      }
-    }
-  }
-  free (buffer);
-  REALLOCATE (*stars, SStars, nstar);
-  *Nstars = nstar;
-  
-  return (TRUE);
-  
-}
Index: /trunk/Ohana/src/gastro/src/getgsc.c
===================================================================
--- /trunk/Ohana/src/gastro/src/getgsc.c	(revision 8514)
+++ /trunk/Ohana/src/gastro/src/getgsc.c	(revision 8514)
@@ -0,0 +1,86 @@
+# include "gastro.h"
+# define BYTES_STAR 23
+# define BLOCK 1000
+
+SStars *rd_gsc (char *filename, int *Nstars);
+
+SStars *getgsc (CatStats *catstats, int *NSTARS) {
+  
+  int i, j, k, Ns, Ngsc, Nstars; 
+  SStars *gsc;
+  SStars *stars;
+  SkyList *skylist;
+  SkyTable *sky;
+  SkyRegion patch;
+
+  patch.Rmin = catstats[0].RA[0];
+  patch.Rmax = catstats[0].RA[1];
+  patch.Dmin = catstats[0].DEC[0];
+  patch.Dmax = catstats[0].DEC[1];
+
+  /* load regions from GSC table, restrict to patch */
+  sky = SkyTableFromGSC (GSCFILE, SKY_DEPTH_HST, VERBOSE);
+  SkyTableSetFilenames (sky, GSCDIR, "cpt");
+  skylist = SkyListByPatch (sky, -1, &patch);
+  
+  Nstars = 0;
+  ALLOCATE (stars, SStars, 1);
+
+  for (i = 0; i < skylist[0].Nregions; i++) {
+    gsc = rd_gsc (skylist[0].filename[i], &Ngsc);
+
+    Ns = Nstars;
+    Nstars += Ngsc;
+
+    REALLOCATE (stars, SStars, MAX (1, Nstars));
+    for (k = Ns, j = 0; j < Ngsc; k++, j++) {
+      stars[k].X   = gsc[j].X;
+      stars[k].Y   = gsc[j].Y;
+      stars[k].mag = gsc[j].mag;
+    }      
+    free (gsc);
+  }
+  SkyTableFree (sky);
+
+  *NSTARS = Nstars;
+  return (stars);
+}  
+
+SStars *rd_gsc (char *filename, int *Nstars) {
+  
+  SStars *stars;
+  int i, NSTAR, nstar, Nbytes, nbytes;
+  char *buffer;
+  FILE *f;
+
+  f = fopen (filename, "r");
+  if (f == NULL) {
+    fprintf (stderr, "ERROR: can't find catalog file %s\n", filename);
+    exit (1);
+  }
+  
+  nstar = 0;
+  NSTAR = 1000;
+  ALLOCATE (stars, SStars, NSTAR);
+
+  ALLOCATE (buffer, char, (BLOCK*BYTES_STAR));
+  Nbytes = BLOCK*BYTES_STAR;
+
+  while ((nbytes = fread (buffer, 1, Nbytes, f)) > 0) {
+    for (i = 0; i < nbytes / BYTES_STAR; i++) {
+      dparse (&stars[nstar].X, 1, &buffer[i*BYTES_STAR]);
+      dparse (&stars[nstar].Y, 2, &buffer[i*BYTES_STAR]);
+      dparse (&stars[nstar].mag, 3, &buffer[i*BYTES_STAR]);
+      nstar++;
+      if (nstar == NSTAR) {
+	NSTAR += 1000;
+	REALLOCATE (stars, SStars, NSTAR);
+      }
+    }
+  }
+
+  free (buffer);
+
+  *Nstars = nstar;
+  return (stars);
+}
Index: /trunk/Ohana/src/gastro/src/getptolemy.c
===================================================================
--- /trunk/Ohana/src/gastro/src/getptolemy.c	(revision 8514)
+++ /trunk/Ohana/src/gastro/src/getptolemy.c	(revision 8514)
@@ -0,0 +1,60 @@
+# include "gastro.h"
+
+SStars *getptolemy (CatStats *catstats, int *NSTARS) {
+  
+  int i, j, k, Ns, Nstars; 
+  Catalog catalog;
+  SStars *stars;
+  SkyList *skylist;
+  SkyTable *sky;
+  SkyRegion patch;
+
+  patch.Rmin = catstats[0].RA[0];
+  patch.Rmax = catstats[0].RA[1];
+  patch.Dmin = catstats[0].DEC[0];
+  patch.Dmax = catstats[0].DEC[1];
+
+  Nstars = 0;
+  ALLOCATE (stars, SStars, 1);
+
+  /* load regions from GSC table, restrict to patch */
+  sky = SkyTableLoadOptimal (CATDIR, NULL, GSCFILE, SKY_DEPTH_HST, VERBOSE);
+  SkyTableSetFilenames (sky, CATDIR, "cpt");
+  skylist = SkyListByPatch (sky, -1, &patch);
+  
+  for (i = 0; i <skylist[0].Nregions; i++) {
+    // set the parameters which guide catalog open/load/create
+    catalog.filename  = skylist[0].filename[i];
+    catalog.catflags  = LOAD_AVES | LOAD_MEAS;
+    catalog.Nsecfilt  = 0;
+
+    // an error exit status here is a significant error
+    if (!dvo_catalog_open (&catalog, skylist[0].regions[i], VERBOSE, "w")) {
+      fprintf (stderr, "ERROR: failure to open catalog file %s\n", catalog.filename);
+      exit (2);
+    }
+    dvo_catalog_unlock (&catalog);
+
+    // Nave_disk == 0 implies an empty catalog file
+    // for only_match, skip empty catalogs
+    if (!catalog.Nave_disk) {
+      dvo_catalog_free (&catalog);
+      continue;
+    }
+
+    Ns = Nstars;
+    Nstars += catalog.Naverage;
+
+    REALLOCATE (stars, SStars, MAX (1, Nstars));
+    for (k = Ns, j = 0; j < catalog.Naverage; k++, j++) {
+      stars[k].X = catalog.average[j].R;
+      stars[k].Y = catalog.average[j].D;
+      stars[k].mag = catalog.measure[catalog.average[j].offset].M_PS;
+    }      
+    dvo_catalog_free (&catalog);
+  }
+
+  if (VERBOSE) fprintf (stderr, "%d stars from PTOLEMY\n", Nstars);
+  *NSTARS = Nstars;
+  return (stars);
+}  
Index: unk/Ohana/src/gastro/src/gptolemy.c
===================================================================
--- /trunk/Ohana/src/gastro/src/gptolemy.c	(revision 8513)
+++ 	(revision )
@@ -1,85 +1,0 @@
-# include "gastro.h"
-
-/* filename has path to GSC, strip off path, use filename with CATDIR path */
-
-int gptolemy (char *fullpath, SStars **stars, int *Nstars) {
-  
-  int i, Nsec, NSTARS, nstar;
-  char filename[256], *fileroot, *filepath, *subdir;
-  Catalog catalog;
-
-  filepath = pathname (fullpath);
-  fileroot = filebasename (fullpath);
-  subdir = filebasename (filepath);
-  sprintf (filename, "%s/%s/%s", CATDIR, subdir, fileroot);
-
-  catalog.filename = filename;
-  switch (lock_catalog (&catalog, LCK_SOFT)) {
-    case 0:
-    case 2:
-      fprintf (stderr, "can't load catalog data\n");
-      return (FALSE);
-    case 1:
-      break;
-  }
-
-  /* CATMODE and CATFORMAT determined from catalog */
-  catalog.catflags = LOAD_AVES | LOAD_MEAS;
-  if (!load_catalog (&catalog, FALSE)) {
-    fprintf (stderr, "can't load catalog data\n");
-    return (FALSE);
-  }
-  unlock_catalog (&catalog);
-
-  nstar = *Nstars;
-  NSTARS = *Nstars + catalog.Naverage;
-  if (*Nstars == 0) {
-    ALLOCATE (stars[0], SStars, NSTARS);
-  } else {
-    REALLOCATE (stars[0], SStars, NSTARS);
-  }
-
-  Nsec = catalog.Nsecfilt;
-
-  /* select all entries, ignore magnitudes */
-  for (i = 0; i < catalog.Naverage; i++, nstar++) {
-    stars[0][nstar].X = catalog.average[i].R;
-    stars[0][nstar].Y = catalog.average[i].D;
-    stars[0][nstar].mag = catalog.measure[catalog.average[i].offset].M_PS;
-  }
-
-  /* select only entries with valid magnitudes */ 
-# if (0)  
-  for (i = 0; i < catalog.Naverage; i++, nstar++) {
-    stars[0][nstar].X = catalog.average[i].R;
-    stars[0][nstar].Y = catalog.average[i].D;
-    GotIt = FALSE;
-    if (catalog.average[i].M != NO_MAG) {
-      stars[0][nstar].mag = catalog.average[i].M;
-      GotIt = TRUE;
-    }
-    for (j = 0; !GotIt && (j < Nsec); j++) {
-      if (catalog.secfilt[i*Nsec + j].M_PS != NO_MAG) {
-	stars[0][nstar].mag = catalog.secfilt[i*Nsec + j].M_PS;
-	GotIt = TRUE;
-      }
-    }
-    if (!GotIt) nstar --; /* skip this star */
-  }
-# endif
-
-  free (catalog.average);
-
-  *Nstars = nstar;
-  
-  return (TRUE);
-  
-}
-
-/* this function is still only occasionally used.  there is some trouble with the
-   issue of magnitudes.  do we depend on the existence of an 'average.M' value, 
-   or not?
-
-   should this be selectable?
-
-*/
Index: /trunk/Ohana/src/gastro/src/greference.c
===================================================================
--- /trunk/Ohana/src/gastro/src/greference.c	(revision 8513)
+++ /trunk/Ohana/src/gastro/src/greference.c	(revision 8514)
@@ -6,9 +6,6 @@
 int greference (SStars **cat, int *Ncat, Coords *coords, int NX, int NY) {
 
-  char **regions;
-  int  i, Nregions, Nusno;
+  int  i;
   CatStats catstats;
-  USNOstats usnostats;
-  USNOdata *usno;
 
   if (VERBOSE) fprintf (stderr, "\nloading astrometric reference data from %s\n", REFCAT); 
@@ -17,4 +14,5 @@
 
   define_region (&catstats, coords, NX, NY);
+  ALLOCATE (*cat, SStars, 1);
 
   /* get stars from the USNO catalog for the given region */
@@ -27,41 +25,46 @@
     /* if RA crosses 0,360 boundary, do 2 passes */
     if (catstats.RA[0] > catstats.RA[1]) {
-        CatStats substats;
-	USNOdata *usno1, *usno2;
-	int Nusno1, Nusno2;
+      int Nusno1, Nusno2;
+      USNOdata *usno1, *usno2;
+      USNOstats usnostats;
+      CatStats substats;
 
-	substats = catstats;
-	substats.RA[0] = 0.0;
-	usno1 = getusno (&usnostats, &substats, &Nusno1);
+      substats = catstats;
+      substats.RA[0] = 0.0;
+      usno1 = getusno (&usnostats, &substats, &Nusno1);
 
-	substats = catstats;
-	substats.RA[1] = 360.0;
-	usno2 = getusno (&usnostats, &substats, &Nusno2);
+      substats = catstats;
+      substats.RA[1] = 360.0;
+      usno2 = getusno (&usnostats, &substats, &Nusno2);
 
-	ALLOCATE (*cat, SStars, MAX (Nusno1 + Nusno2, 1));
-	for (i = 0; i < Nusno1; i++) {
-	  cat[0][i].X = usno1[i].R;
-	  cat[0][i].Y = usno1[i].D;
-	  cat[0][i].mag = fabs(usno1[i].r);
-	}      
-	for (i = Nusno1; i < Nusno2; i++) {
-	  cat[0][i].X = usno2[i].R;
-	  cat[0][i].Y = usno2[i].D;
-	  cat[0][i].mag = fabs(usno2[i].r);
-	}      
-	*Ncat = Nusno1 + Nusno2;
-	free (usno1);
-	free (usno2);
+      REALLOCATE (*cat, SStars, MAX (Nusno1 + Nusno2, 1));
+      for (i = 0; i < Nusno1; i++) {
+	cat[0][i].X = usno1[i].R;
+	cat[0][i].Y = usno1[i].D;
+	cat[0][i].mag = fabs(usno1[i].r);
+      }      
+      for (i = Nusno1; i < Nusno2; i++) {
+	cat[0][i].X = usno2[i].R;
+	cat[0][i].Y = usno2[i].D;
+	cat[0][i].mag = fabs(usno2[i].r);
+      }      
+      *Ncat = Nusno1 + Nusno2;
+      free (usno1);
+      free (usno2);
     } else {
-	usno = getusno (&usnostats, &catstats, &Nusno);
+      int Nusno;
+      USNOdata *usno;
+      USNOstats usnostats;
 
-	ALLOCATE (*cat, SStars, MAX (Nusno, 1));
-	for (i = 0; i < Nusno; i++) {
-	  cat[0][i].X = usno[i].R;
-	  cat[0][i].Y = usno[i].D;
-	  cat[0][i].mag = fabs(usno[i].r);
-	}      
-	*Ncat = Nusno;
-	free (usno);
+      usno = getusno (&usnostats, &catstats, &Nusno);
+
+      REALLOCATE (*cat, SStars, MAX (Nusno, 1));
+      for (i = 0; i < Nusno; i++) {
+	cat[0][i].X = usno[i].R;
+	cat[0][i].Y = usno[i].D;
+	cat[0][i].mag = fabs(usno[i].r);
+      }      
+      *Ncat = Nusno;
+      free (usno);
     }
     if (VERBOSE) fprintf (stderr, "%d stars from USNO 1.0\n", *Ncat);
@@ -69,29 +72,22 @@
 
   if (!strcmp (REFCAT, "GSC") || !strcmp (REFCAT, "BOTH")) {
-    regions = gregions (&catstats, &Nregions);
-    for (i = 0; i < Nregions; i++) {
-      if (!gcatalog (regions[i], cat, Ncat))       
-	return (FALSE);
+    int j, Ngsc;
+    SStars *gsc;
+
+    gsc = getgsc (&catstats, &Ngsc);
+    REALLOCATE (*cat, SStars, MAX (Ngsc + *Ncat, 1));
+    for (j = *Ncat, i = 0; i < Ngsc; i++) {
+      cat[0][j] = gsc[i];
     }
-    if (VERBOSE) fprintf (stderr, "%d stars from HST GSC\n", *Ncat);
+    if (VERBOSE) fprintf (stderr, "%d stars from HST GSC\n", Ngsc);
+    *Ncat += Ngsc;
   }
 
   if (!strcmp (REFCAT, "PTOLEMY")) {
-    regions = gregions (&catstats, &Nregions);
-    for (i = 0; i < Nregions; i++) {
-      if (!gptolemy (regions[i], cat, Ncat)) continue;
-    }
+    free (*cat);
+    *cat = getptolemy (&catstats, Ncat);
     if (VERBOSE) fprintf (stderr, "%d stars from PTOLEMY\n", *Ncat);
   }
-
-  if (!strcmp (REFCAT, "2MASS")) {
-    /* this needs to be written to handle the complete 2mass catalog.
-       at the moment, I only have a small subset */
-    if (!g2mass ("/data/milo/eugene/elixir/refs/2mass/2mass.dat", cat, Ncat)) exit (1);
-    if (VERBOSE) fprintf (stderr, "%d stars from 2MASS\n", *Ncat);
-  }
-
   return (TRUE);
-
 }
 
@@ -110,6 +106,6 @@
       XY_to_RD (&R, &D, X, Y, coords);
       /* coords returns a region all in same phase 
-      while (R < 0.0)    R += 360.0;
-      while (R >= 360.0) R -= 360.0;
+	 while (R < 0.0)    R += 360.0;
+	 while (R >= 360.0) R -= 360.0;
       */
       catstats[0].RA[0]  = MIN (catstats[0].RA[0], R);
Index: unk/Ohana/src/gastro/src/gregions2.c
===================================================================
--- /trunk/Ohana/src/gastro/src/gregions2.c	(revision 8513)
+++ 	(revision )
@@ -1,242 +1,0 @@
-# include "gastro.h"
-
-# define NDECBANDS 12
-double DecBand[] = {0.0, +7.5, +15.0, +22.5, +30.0, +37.5, +45.0, +52.5, +60.0, +67.5, +75.0, +82.5, +90.0,
-		    0.0, -7.5, -15.0, -22.5, -30.0, -37.5, -45.0, -52.5, -60.0, -67.5, -75.0, -82.5, -90.0};
-
-int NDecLines[] =  {593, 584, 551, 530, 522, 465, 406, 362, 280, 198, 123, 24, 0, 
-		    597, 578, 574, 577, 534, 499, 442, 376, 294, 212, 144, 48, 0};
-
-int NRaBlocks [] = {48, 47, 45, 43, 40, 36, 32, 28, 21, 15, 9, 3, 0, 
-		    48, 47, 45, 43, 40, 36, 32, 28, 21, 15, 9, 3, 0};
-
-char *Dec2Sections[] = {"n0000", "n0730", "n1500", "n2230", "n3000", "n3730", "n4500", 
-			"n5230", "n6000", "n6730", "n7500", "n8230", "weirdness", 
-			"s0000", "s0730", "s1500", "s2230", "s3000", "s3730", "s4500", 
-			"s5230", "s6000", "s6730", "s7500", "s8230", "weirdness"};
-
-/* given RA[0] - RA[1] & DEC[0] - DEC[1], return all that fall in range */
-char **gregions (CatStats *catstats, int *nnames) {
-  
-  CatalogRegion area;
-  double dtmp;
-  int i, Nnames;
-  char **names, file[256];
-
-  Nnames = 0;
-  ALLOCATE (names, char *, 1);
-
-  /* force RA[i] to be in range 0 - 360 */
-  while (catstats[0].RA[0] > 360.0) { catstats[0].RA[0] -= 360.0; }
-  while (catstats[0].RA[0] < 0.0)   { catstats[0].RA[0] += 360.0; }
-     
-  while (catstats[0].RA[1] > 360.0) { catstats[0].RA[1] -= 360.0; }
-  while (catstats[0].RA[1] < 0.0)   { catstats[0].RA[1] += 360.0; }
-     
-  /* force DEC[0] < DEC[1] */
-  if (catstats[0].DEC[0] > catstats[0].DEC[1]) {
-    dtmp = catstats[0].DEC[0];
-    catstats[0].DEC[0] = catstats[0].DEC[1];
-    catstats[0].DEC[1] = dtmp;
-  }
-
-  /* include the pole if dec > 86.25 is included (ADD SOUTH POLE!)  */
-  if (catstats[0].DEC[1] > 86.25) {
-    sprintf (file, "n8230/pole");
-    names[Nnames] = strcreate (file);
-    Nnames ++;
-  }
-  
-  /* if RA[0] > RA[1], split in two passes */
-  if (catstats[0].RA[0] > catstats[0].RA[1]) {
-    area.RA[0]  = 0.0;
-    area.RA[1]  = catstats[0].RA[1];
-    area.DEC[0] = catstats[0].DEC[0]; 
-    area.DEC[1] = catstats[0].DEC[1];
-    names = find_dec_bands (area, names, &Nnames);
-
-    area.RA[0]  = catstats[0].RA[0];
-    area.RA[1]  = 360.0;
-    area.DEC[0] = catstats[0].DEC[0]; 
-    area.DEC[1] = catstats[0].DEC[1];
-    names = find_dec_bands (area, names, &Nnames);
-
-  } else {
-
-    area.RA[0]  = catstats[0].RA[0];
-    area.RA[1]  = catstats[0].RA[1];
-    area.DEC[0] = catstats[0].DEC[0]; 
-    area.DEC[1] = catstats[0].DEC[1];
-    names = find_dec_bands (area, names, &Nnames);
-  }
-
-  /* add the full path to the short names */
-  for (i = 0; i < Nnames; i++) {
-    sprintf (file, "%s/%s.cpt", GSC_DIR, names[i]);
-    free (names[i]);
-    names[i] = strcreate (file);
-  }
-
-  *nnames = Nnames;
-  return (names);
-
-}
-
-/* given an area [RA[0] - RA[1], DEC[0] - DEC[1],
-   where 0.0 < RA[0] < RA[1] < 360.0 
-   and -90.0 < (DEC[0], DEC[1]) < 90.0 
-   and DEC[0] < DEC[1]
-   search through the dec bands to identify ones which overlap the area */
-
-/* must pass in an allocted pointer names, and Nnames contains the number so far */
-char **find_dec_bands (CatalogRegion area, char **names, int *Nnames) {
-
-  int i;
-
-  /* for NORTH region (DecBand[i] < DecBand[i+1]) */
-  for (i = 0; i < NDECBANDS; i++) {
-    if ((area.DEC[1] > DecBand[i]) || (area.DEC[0] < DecBand[i+1])) {
-      names = load_ra_blocks (i, area, names, Nnames);
-    }
-  }
-
-  /* for SOUTH region (DecBand[i] > DecBand[i+1]) */
-  for (i = NDECBANDS+1; i < 2*NDECBANDS; i++) {
-    if ((area.DEC[0] < DecBand[i]) || (area.DEC[1] > DecBand[i+1])) {
-      names = load_ra_blocks (i, area, names, Nnames);
-    }
-  }
-
-  return (names);
-}
-
-
-/* given the number of a DecBlock and a defined area, return all area names in that block */
-/* area is defined so that RA[0] < RA[1], DEC[0] < DEC[1] */
-char **load_ra_blocks (int Ndec, CatalogRegion area, char **names, int *Ntnames) {
-
-  CatalogRegion region;
-  int i, Nlines, Nnames;
-  char *buffer, file[256];
-  FILE *f;
-
-  /* open file */ 
-  f = fopen (GSCFILE, "r");
-  if (f == NULL) {
-    fprintf (stderr, "ERROR: can't find GSC regions file %s\n", GSCFILE);
-    exit (0);
-  }
-
-  /* count lines before Dec Band */
-  Nlines = 0;
-  for (i = 0; i < Ndec; i++) Nlines += NDecLines[i];
-
-  /* seek to start of Dec Band */
-  fseek (f, 5*2880 + 48*Nlines, SEEK_SET);
-  
-  /* load data into buffer */
-  Nlines = NDecLines[Ndec];
-  ALLOCATE (buffer, char, 48*Nlines);
-  fread (buffer, 48*Nlines, 1, f);
-  fclose (f);
-
-  /* must pass in a pointer which is already allocated */
-  Nnames = *Ntnames;
-  REALLOCATE (names, char *, MAX (Nnames + Nlines, 1));
-
-  for (i = 0; i < Nlines; i++) {
-    parse_GSC_line (&region, &buffer[i*48]);
-    if (area.RA[0] > region.RA[1]) continue;
-    if (area.RA[1] < region.RA[0]) continue;
-    if (area.DEC[0] > region.DEC[1]) continue;
-    if (area.DEC[1] < region.DEC[0]) continue;
-    sprintf (file, "%s/%s", Dec2Sections[Ndec], region.name);
-    names[Nnames] = strcreate (file);
-    Nnames ++;
-  }
-
-  free (buffer);
-  REALLOCATE (names, char *, MAX (Nnames, 1));
-  *Ntnames = Nnames;
-  return (names);
-
-}
-
-/* parse the GSC line, placing values in 'region'.
-   force RA[0] < RA[1], DEC[0] < DEC[1] */
-int parse_GSC_line (CatalogRegion *region, char *line) {
-  
-  double v0, s, dtmp;
-  char tmp[10];
-
-  /* copy name (4 chars) */
-  bzero (region[0].name, 10);
-  strncpy (region[0].name, &line[1], 4);
-
-  /* get RA[0] */
-  bzero (tmp, 10);
-  strncpy (tmp, &line[7], 2);
-  v0 = atof (tmp);
-  
-  bzero (tmp, 10);
-  strncpy (tmp, &line[10], 2);
-  v0 += atof (tmp) / 60.0;
-  
-  bzero (tmp, 10);
-  strncpy (tmp, &line[13], 5);
-  v0 += atof (tmp) / 3600.0;
-  region[0].RA[0] = v0 * 15.0;
-
-  /* get RA[1] */
-  bzero (tmp, 10);
-  strncpy (tmp, &line[19], 2);
-  v0 = atof (tmp);
-  
-  bzero (tmp, 10);
-  strncpy (tmp, &line[22], 2);
-  v0 += atof (tmp) / 60.0;
-  
-  bzero (tmp, 10);
-  strncpy (tmp, &line[25], 5);
-  v0 += atof (tmp) / 3600.0;
-  region[0].RA[1] = v0 * 15.0;
-
-  /* this only happens at the 0,360 boundary */
-  if (region[0].RA[1] < region[0].RA[0]) region[0].RA[1] += 360.0;
-
-  /* get DEC[0] */
-  if (line[31] == '-') s = -1;
-  else s = +1;
-
-  bzero (tmp, 10);
-  strncpy (tmp, &line[32], 2);
-  v0 = atof (tmp);
-  
-  bzero (tmp, 10);
-  strncpy (tmp, &line[35], 2);
-  v0 += atof (tmp) / 60.0;
-  region[0].DEC[0] = s * v0;
-
-  /* get DEC[1] */
-  if (line[40] == '-') s = -1;
-  else s = +1;
-
-  bzero (tmp, 10);
-  strncpy (tmp, &line[41], 2);
-  v0 = atof (tmp);
-  
-  bzero (tmp, 10);
-  strncpy (tmp, &line[44], 2);
-  v0 += atof (tmp) / 60.0;
-  region[0].DEC[1] = s * v0;
-
-  if (region[0].DEC[0] > region[0].DEC[1]) {
-    dtmp = region[0].DEC[1];
-    region[0].DEC[1] = region[0].DEC[0];
-    region[0].DEC[0] = dtmp;
-  }
-
-  return (TRUE);
-
-}
-
Index: /trunk/Ohana/src/gastro/src/misc.c
===================================================================
--- /trunk/Ohana/src/gastro/src/misc.c	(revision 8513)
+++ /trunk/Ohana/src/gastro/src/misc.c	(revision 8514)
@@ -35,89 +35,4 @@
 }
 
-/***** convert [-]00:00:00 to 0.0000 ****/
-int dms_to_ddd (double *Value, char *string) {
-  
-  int valid, neg, status;
-  double tmp, value;
-  char *p1, *p2, *px;
-
-  valid = FALSE; 
-  neg = FALSE;
-  stripwhite (string);
-  p1 = string;
-  px = string + strlen(string);
-
-  if (string[0] == '-') { 
-    valid = TRUE; 
-    neg = TRUE;
-    p1 = &string[1];
-  }
-  if (string[0] == '+') { 
-    valid = TRUE; 
-    neg = FALSE;
-    p1 = &string[1];
-  }
-  if (isdigit(string[0])) { 
-    valid = TRUE;
-    p1 = &string[0];
-  }
-  if (!valid) { return (FALSE); }
-
-  status = 1;
-  tmp = strtod (p1, &p2);
-  if (p2 == p1) return (FALSE); /* entry not a number: +fred */
-  value = tmp;
-  if (p2 == px) goto escape;    /* entry only number: +1.0 */ 
-  p1 = p2 + 1;
-
-  tmp = strtod (p1, &p2);
-  if (p2 == p1) goto escape;    /* entry not a number: +1:fred */
-  status = 2;
-  value += tmp / 60.0;
-  if (p2 == px) goto escape;    /* entry only number: +1:1 */
-  p1 = p2 + 1;
-
-  tmp = strtod (p1, &p2);
-  if (p2 == p1) goto escape;    /* entry not a number: +1:1:fred */
-  value += tmp / 3600.0;
-
- escape:
-  if (neg) {
-    value *= -1;
-  }
-  *Value = value;
-
-  return (status);
-}
-
-/**********/
-int str_to_radec (double *ra, double *dec, char *str1, char *str2) {
-
-  double Ra, Dec;
-
-  *ra = *dec = 0;
-  switch (dms_to_ddd (&Ra, str1)) {
-  case 0:
-    fprintf (stderr, "syntax error in RA\n");
-    return (FALSE);
-  case 1:
-    break;
-  case 2:
-    Ra = Ra * 15;
-    break;
-  }
-  switch (dms_to_ddd (&Dec, str2)) {
-  case 0:
-    fprintf (stderr, "syntax error in DEC\n");
-    return (FALSE);
-  case 1:
-  case 2:
-    break;
-  }
-  *ra = Ra;
-  *dec = Dec;
-  return (TRUE);
-}
-
 void area_of_region (CatStats *region) {
   
