aboutsummaryrefslogtreecommitdiff
path: root/noao/digiphot/apphot/daofind/apfdfind.x
diff options
context:
space:
mode:
Diffstat (limited to 'noao/digiphot/apphot/daofind/apfdfind.x')
-rw-r--r--noao/digiphot/apphot/daofind/apfdfind.x213
1 files changed, 213 insertions, 0 deletions
diff --git a/noao/digiphot/apphot/daofind/apfdfind.x b/noao/digiphot/apphot/daofind/apfdfind.x
new file mode 100644
index 00000000..7778c946
--- /dev/null
+++ b/noao/digiphot/apphot/daofind/apfdfind.x
@@ -0,0 +1,213 @@
+include <imhdr.h>
+include "../lib/apphot.h"
+include "../lib/display.h"
+include "../lib/find.h"
+
+define HELPFILE "apphot$daofind/daofind.key"
+
+# AP_FDFIND -- Find objects in an image interactively.
+
+int procedure ap_fdfind (denname, skyname, ap, im, gd, id, out, boundary,
+ constant, save, skysave, interactive, cache)
+
+char denname[ARB] # name of density enhancement image
+char skyname[ARB] # name of the fitted sky image
+pointer ap # pointer to the apphot structure
+pointer im # pointer to the IRAF image
+pointer gd # pointer to the graphics stream
+pointer id # pointer to the image display stream
+int out # output file descriptor
+int boundary # type of boundary extension
+real constant # constatn for constant boundary extension
+int save # save convolved image
+int skysave # save the sky image
+int interactive # interactive mode
+int cache # cache the input image pixels
+
+real wx, wy
+pointer sp, cmd, root, den, sky
+int wcs, key, newimage, newden, newfit, stid, memstat, req_size, old_size
+int buf_size
+
+real apstatr()
+pointer ap_immap()
+int clgcur(), apgqverify(), apgtverify(), sizeof(), ap_memstat()
+
+begin
+ call smark (sp)
+ call salloc (cmd, SZ_LINE, TY_CHAR)
+ call salloc (root, SZ_FNAME, TY_CHAR)
+
+ # Initialize cursor command.
+ key = ' '
+ Memc[cmd] = EOS
+ call strcpy (" ", Memc[root], SZ_FNAME)
+
+ # Initialize fitting parameters.
+ den = NULL
+ sky = NULL
+ newimage = NO
+ newden = YES
+ newfit = YES
+ memstat = NO
+
+ # Loop over the cursor commands.
+ stid = 1
+ while (clgcur ("icommands", wx, wy, wcs, key, Memc[cmd], SZ_LINE) !=
+ EOF) {
+
+ # Store the current cursor coordinates.
+ call ap_vtol (im, wx, wy, wx, wy, 1)
+ call apsetr (ap, CWX, wx)
+ call apsetr (ap, CWY, wy)
+
+ # Process the colon commands.
+ switch (key) {
+
+ # Quit.
+ case 'q':
+ if (interactive == YES && apgqverify ("daofind",
+ ap, key) == YES) {
+ call sfree (sp)
+ if (den != NULL) {
+ call imunmap (den)
+ if (save == NO)
+ call imdelete (denname)
+ }
+ if (sky != NULL)
+ call imunmap (sky)
+ return (apgtverify (key))
+ } else {
+ if (den != NULL) {
+ call imunmap (den)
+ if (save == NO)
+ call imdelete (denname)
+ }
+ if (sky != NULL)
+ call imunmap (sky)
+ call sfree (sp)
+ return (YES)
+ }
+
+ # Get information on keystroke commands.
+ case '?':
+ if ((id != NULL) && (gd == id))
+ call gpagefile (id, HELPFILE, "")
+ else if (interactive == YES)
+ call pagefile (HELPFILE, "[space=morehelp,q=quit,?=help]")
+
+ # Plot a centered stellar radial profile
+ case 'd':
+ if (interactive == YES)
+ call ap_qrad (ap, im, wx, wy, gd)
+
+ # Interactively set the daofind parameters.
+ case 'i':
+ if (interactive == YES) {
+ call ap_fdradsetup (ap, im, wx, wy, gd, out, stid)
+ newden = YES
+ newfit = YES
+ }
+
+ # Verify the critical daofind parameters.
+ case 'v':
+ call ap_fdconfirm (ap)
+ newden = YES
+ newfit = YES
+
+ # Save daofind parameters in the pset files.
+ case 'w':
+ call ap_fdpars (ap)
+
+ # Process apphot : commands.
+ case ':':
+ call ap_fdcolon (ap, im, out, stid, Memc[cmd], newimage,
+ newden, newfit)
+
+ # Determine the viewport and data window of image display.
+ if (newimage == YES) {
+ if ((id != NULL) && (id != gd))
+ call ap_gswv (id, Memc[cmd], im, 4)
+ req_size = MEMFUDGE * (IM_LEN(im,1) * IM_LEN(im,2) *
+ sizeof (IM_PIXTYPE(im)) + 2 * IM_LEN(im,1) *
+ IM_LEN(im,2) * sizeof (TY_REAL))
+ memstat = ap_memstat (cache, req_size, old_size)
+ if (memstat == YES)
+ call ap_pcache (im, INDEFI, buf_size)
+ }
+ newimage = NO
+
+ # Find the stars.
+ case 'f', ' ':
+
+ if (newden == YES) {
+
+ if (den != NULL) {
+ call imunmap (den)
+ call imdelete (denname)
+ }
+ den = ap_immap (denname, im, ap, save)
+ if (memstat == YES)
+ call ap_pcache (den, INDEFI, buf_size)
+
+ if (sky != NULL)
+ call imunmap (sky)
+ if (skysave == YES) {
+ sky = ap_immap (skyname, im, ap, YES)
+ if (memstat == YES)
+ call ap_pcache (den, INDEFI, buf_size)
+ } else
+ sky = NULL
+ newden = NO
+
+ if (key == 'f') {
+ call ap_fdstars (im, ap, den, sky, NULL, id,
+ boundary, constant, NO, stid)
+ } else {
+ call ap_outmap (ap, out, Memc[root])
+ call ap_fdstars (im, ap, den, sky, out, id,
+ boundary, constant, NO, stid)
+ newfit = NO
+ }
+
+ } else if (newfit == YES) {
+
+ if (key == 'f') {
+ call ap_fdstars (im, ap, den, sky, NULL, id,
+ boundary, constant, YES, stid)
+ } else {
+ call ap_outmap (ap, out, Memc[root])
+ call ap_fdstars (im, ap, den, sky, out, id,
+ boundary, constant, YES, stid)
+ newfit = NO
+ }
+
+ } else {
+ call printf ("Detection parameters have not changed\n")
+ }
+
+ if (id != NULL) {
+ if (id == gd)
+ call gflush (id)
+ else
+ call gframe (id)
+ }
+
+ stid = 1
+ #newden = NO
+ #newfit = NO
+
+ default:
+ # do nothing
+ call printf ("Unknown or ambiguous keystroke command\n")
+ }
+
+ # Setup for the next object.
+ key = ' '
+ Memc[cmd] = EOS
+ call apsetr (ap, WX, apstatr (ap, CWX))
+ call apsetr (ap, WY, apstatr (ap, CWY))
+
+ }
+
+end