aboutsummaryrefslogtreecommitdiff
path: root/noao/astcat/src/agetcat/t_agetcat.x
diff options
context:
space:
mode:
Diffstat (limited to 'noao/astcat/src/agetcat/t_agetcat.x')
-rw-r--r--noao/astcat/src/agetcat/t_agetcat.x251
1 files changed, 251 insertions, 0 deletions
diff --git a/noao/astcat/src/agetcat/t_agetcat.x b/noao/astcat/src/agetcat/t_agetcat.x
new file mode 100644
index 00000000..5f888eef
--- /dev/null
+++ b/noao/astcat/src/agetcat/t_agetcat.x
@@ -0,0 +1,251 @@
+include "../../lib/astrom.h"
+
+define SZ_HDRTEXT (5 * SZ_LINE)
+
+procedure t_agetcat()
+
+pointer sp, output, hdrtext, str1, str2, at, cq, res, cres
+int i, j, nfields, catlist, outlist, infd, outfd, nlines
+bool standard, filter, update, verbose
+pointer cq_map(), cq_query, cq_fquery(), at_tquery()
+int at_rclist(), at_ocatlist(), at_catlist(), fntlenb(), cq_setcat()
+int fntrfnb(), open(), at_rcquery(), access(), at_gcathdr()
+bool clgetb()
+errchk open()
+
+begin
+ # Allocate some working memory.
+ call smark (sp)
+ call salloc (output, SZ_FNAME, TY_CHAR)
+ call salloc (str1, SZ_FNAME, TY_CHAR)
+ call salloc (str2, SZ_FNAME, TY_CHAR)
+ call salloc (hdrtext, SZ_HDRTEXT, TY_CHAR)
+
+ # Initalize the data structures
+ call at_aginit (at)
+
+ # Get the iportant query parameters.
+ call clgstr ("regions", Memc[str1], SZ_FNAME)
+ call clgstr ("output", Memc[output], SZ_FNAME)
+
+ # Get the mode parameters.
+ standard = clgetb ("standard")
+ filter = clgetb ("filter")
+ update = clgetb ("update")
+ verbose = clgetb ("verbose")
+
+ # Allocate the astrometry structure and read in the algorithm
+ # parameters. This must be done before the field centers are
+ # decoded.
+ call at_gapars (at)
+
+ # Print the field center parameters.
+ #call at_rcshow (at)
+ # Print the filtering parameters.
+ #call at_fsshow (at)
+ # Print the wcs parameters.
+ #call at_wcshow (at)
+ # Print the image parameters.
+ #call at_imshow (at)
+
+ # Get the field center list.
+ nfields = at_rclist (at, Memc[str1])
+ if (nfields <= 0) {
+ if (verbose)
+ call printf ("The field center list is empty\n")
+ call at_agfree (at)
+ call sfree (sp)
+ return
+ }
+
+ # Print the field center symbol table.
+ #call at_stshow (at)
+
+ # Get the catalog list.
+ call clgstr ("catalogs", Memc[str1], SZ_FNAME)
+ call clgstr ("catdb", Memc[str2], SZ_FNAME)
+ catlist = at_catlist (Memc[str1], Memc[str2])
+ if (fntlenb (catlist) <= 0) {
+ if (verbose)
+ call printf ("The catalog list is empty\n")
+ call fntclsb (catlist)
+ call at_agfree (at)
+ call sfree (sp)
+ return
+ }
+ call at_sets (at, CATALOGS, Memc[str1])
+ call at_sets (at, CATDB, Memc[str2])
+
+
+ # Print the i/o parameters.
+ #call at_ioshow (at)
+
+ # Create the output catalog file list.
+ outlist = at_ocatlist (at, catlist, Memc[output], "default", "cat", NO)
+ if (fntlenb (outlist) <= 0) {
+ if (verbose)
+ call printf ("The output file list is empty\n")
+ call fntclsb (outlist)
+ call fntclsb (catlist)
+ call at_agfree (at)
+ call sfree (sp)
+ return
+ }
+ call at_sets (at, OUTPUT, Memc[output])
+
+ # Open the catalog database.
+ cq = cq_map (Memc[str2], READ_ONLY)
+ if (verbose) {
+ call printf ("\nOpening catalog database %s\n")
+ call pargstr (Memc[str2])
+ }
+
+ # Loop over the catalog list.
+ do i = 1, fntlenb (catlist) {
+
+ # Get the catalog name and save it.
+ if (fntrfnb (catlist, i, Memc[str2], SZ_FNAME) == EOF)
+ break
+ if (access (Memc[str2], READ_ONLY, TEXT_FILE) == YES) {
+ if (cq_setcat (cq, "filename@noao") <= 0) {
+ if (verbose) {
+ call printf ("Skipping catalog %s\n")
+ call pargstr (Memc[str2])
+ call flush (STDOUT)
+ }
+ next
+ } else {
+ call at_sets (at, CATNAME, Memc[str2])
+ if (verbose) {
+ call printf ("Selecting catalog %s\n")
+ call pargstr (Memc[str2])
+ call flush (STDOUT)
+ }
+ }
+ } else if (cq_setcat (cq, Memc[str2]) <= 0) {
+ if (verbose) {
+ call printf ("Skipping catalog %s\n")
+ call pargstr (Memc[str2])
+ call flush (STDOUT)
+ }
+ next
+ } else {
+ call at_sets (at, CATNAME, Memc[str2])
+ if (verbose) {
+ call printf ("Selecting catalog %s\n")
+ call pargstr (Memc[str2])
+ call flush (STDOUT)
+ }
+ }
+
+ # Loop over the field centers.
+ do j = 1, nfields {
+
+ # Get the output file name.
+ if (fntrfnb (outlist, (i - 1) * nfields + j, Memc[str1],
+ SZ_FNAME) == EOF)
+ break
+ call at_sets (at, OUTFNAME, Memc[str1])
+
+ # Open the output file.
+ iferr {
+ outfd = open (Memc[str1], NEW_FILE, TEXT_FILE)
+ } then {
+ if (verbose) {
+ call printf (" Unable to open output file %s\n")
+ call pargstr (Memc[str1])
+ }
+ break
+ }
+
+ if (access (Memc[str2], READ_ONLY, TEXT_FILE) == YES) {
+
+ # Read the catalog header.
+ infd = open (Memc[str2], READ_ONLY, TEXT_FILE)
+ nlines = at_gcathdr (infd, Memc[hdrtext], SZ_HDRTEXT)
+ call close (infd)
+ if (nlines <= 0) {
+ if (verbose)
+ call printf (" Unable to read catalog header\n")
+ break
+ }
+
+ # Copy the catalog file into the query structure.
+ cres = cq_fquery (cq, Memc[str2], Memc[hdrtext])
+ if (cres == NULL) {
+ call printf (" Catalog query failed\n")
+ break
+ }
+
+ # Extract the requested data.
+ res = at_tquery (at, cq, cres, Memc[hdrtext], nlines, j)
+ if (res == NULL) {
+ if (verbose)
+ call printf (" Catalog query failed\n")
+ break
+ }
+
+ } else {
+
+ # Format the query.
+ if (at_rcquery (at, cq, j) == ERR) {
+ if (verbose)
+ call printf (" Unable to format network query\n")
+ break
+ }
+
+ # Query the catalog.
+ res = cq_query (cq)
+ if (res == NULL) {
+ if (verbose)
+ call printf (" Network query failed\n")
+ break
+ }
+ }
+
+ # Write the output file.
+ if (filter) {
+ if (verbose) {
+ call printf (" Filtering region %d to file %s\n")
+ call pargi (j)
+ call pargstr (Memc[str1])
+ call flush (STDOUT)
+ }
+ call at_wfilrecs (outfd, at, res, standard)
+ } else {
+ if (verbose) {
+ call printf (" Copying region %d to file %s\n")
+ call pargi (j)
+ call pargstr (Memc[str1])
+ call flush (STDOUT)
+ }
+ call at_wnofilrecs (outfd, res, standard)
+ }
+
+ # Close the output file.
+ call close (outfd)
+
+ # Close the query structure.
+ call cq_rclose (res)
+
+ }
+
+ }
+
+ # Close the catalog database.
+ call cq_unmap (cq)
+
+ # Update the algorithm parameters.
+ if (update)
+ call at_gppars (at)
+
+ # Close the catalog and output file lists.
+ call fntclsb (outlist)
+ call fntclsb (catlist)
+
+ # Free the astrometry structure.
+ call at_agfree (at)
+
+ # Free the working memory.
+ call sfree (sp)
+end