From fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 8 Jul 2015 20:46:52 -0400 Subject: Initial commit --- noao/digiphot/daophot/daoedit/t_daoedit.x | 317 ++++++++++++++++++++++++++++++ 1 file changed, 317 insertions(+) create mode 100644 noao/digiphot/daophot/daoedit/t_daoedit.x (limited to 'noao/digiphot/daophot/daoedit/t_daoedit.x') diff --git a/noao/digiphot/daophot/daoedit/t_daoedit.x b/noao/digiphot/daophot/daoedit/t_daoedit.x new file mode 100644 index 00000000..8c92e969 --- /dev/null +++ b/noao/digiphot/daophot/daoedit/t_daoedit.x @@ -0,0 +1,317 @@ +include +include +include "../lib/daophotdef.h" +include "daoedit.h" + +define HELPFILE "daophot$daoedit/daoedit.key" +define IHELPFILE "daophot$daoedit/daoedit.key" + +# T_DAOEDIT -- Edit the DAOPHOT parameters interactively using the image +# display and a radial profile plot. + +procedure t_daoedit () + +pointer image # the name of the input image +int cache # cache the image pixels +pointer graphics # the graphics device +pointer display # the image display + +real wx, wy, xlast, ylast +pointer sp, cmd, im, gd, id +int wcs, key, redraw, gcurtype, curtype, xwcs, ywcs, lastkey +int req_size, memstat, old_size, buf_size + +pointer immap(), gopen() +int dp_gcur(), btoi(), sizeof(), dp_memstat() +bool clgetb(), streq() +errchk gopen() + +data gcurtype /'g'/ + +begin + call smark (sp) + call salloc (image, SZ_FNAME, TY_CHAR) + call salloc (graphics, SZ_FNAME, TY_CHAR) + call salloc (display, SZ_FNAME, TY_CHAR) + call salloc (cmd, SZ_LINE, TY_CHAR) + + call clgstr ("image", Memc[image], SZ_FNAME) + im = immap (Memc[image], READ_ONLY, 0) + + call clgstr ("graphics", Memc[graphics], SZ_FNAME) + iferr (gd = gopen (Memc[graphics], AW_DEFER+NEW_FILE, STDGRAPH)) + gd = NULL + call clgstr ("display", Memc[display], SZ_FNAME) + if (Memc[display] == EOS) + id = NULL + else if (streq (Memc[graphics], Memc[display])) + id = gd + else { + iferr { + id = gopen (Memc[display], APPEND, STDIMAGE) + } then { + call eprintf ( + "Warning: Graphics overlay not available for display device.\n") + id = NULL + } + } + cache = btoi (clgetb ("cache")) + + # Set up the display coordinate system. + if ((id != NULL) && (id != gd)) + call dp_gswv (id, Memc[image], im, 4) + + # Cache the input image pixels. + req_size = MEMFUDGE * IM_LEN(im,1) * IM_LEN(im,2) * + sizeof (IM_PIXTYPE(im)) + memstat = dp_memstat (cache, req_size, old_size) + if (memstat == YES) + call dp_pcache (im, INDEFI, buf_size) + + xlast = INDEFR + ylast = INDEFR + lastkey = INDEFI + xwcs = WCS_XPIX + ywcs = WCS_YCOUNT + curtype = 'i' + redraw = NO + + while (dp_gcur (curtype, wx, wy, wcs, key, Memc[cmd], SZ_LINE) != EOF) { + + # Convert the cursor coordinates if necessary. + if (curtype == 'i') + call dp_vtol (im, wx, wy, wx, wy, 1) + + switch (key) { + + # Print help page. + case '?': + if (curtype == 'i') { + call pagefile (HELPFILE, "[space=cmhelp,q=quit,?=help]") + } else if (curtype == 'g') { + #call greactivate (gd, 0) + call gpagefile (gd, HELPFILE, "") + } + + + # Quit the program. + case 'q': + break + + # Toggle between the image display and graphics cursor. + case 'g': + if (curtype == 'i') { + call greactivate (gd, 0) + curtype = 'g' + } else { + call gdeactivate (gd, 0) + curtype = 'i' + } + + # Toggle between the pixel and scale units plot scale in x. + case 'x': + if (xwcs == WCS_XPIX) + xwcs = WCS_XSCALE + else if (xwcs == WCS_XSCALE) + xwcs = WCS_XPIX + redraw = YES + + # Toggle between the counts and norm plot scale in y. + case 'y': + if (ywcs == WCS_YCOUNT) + ywcs = WCS_YNORM + else if (ywcs == WCS_YNORM) + ywcs = WCS_YCOUNT + redraw = YES + + case 'a': + if (curtype == 'i') { + if (lastkey == 'a') + call dp_erprofile (NULL, id, NO, xwcs, ywcs, im, wx, wy) + else + call dp_erprofile (NULL, id, YES, xwcs, ywcs, im, + wx, wy) + } else { + call dp_erprofile (NULL, id, NO, xwcs, ywcs, im, + xlast, ylast) + } + + case 'r': + if (curtype == 'i') { + xlast = wx + ylast = wy + } + redraw = YES + + case 'i': + if (curtype == 'i') { + xlast = wx + ylast = wy + } + xwcs = WCS_XPIX + ywcs = WCS_YCOUNT + redraw = YES + + case ':': + call dp_ecolon (Memc[cmd], gd, redraw) + + default: + call printf ("Unknown or ambiguous keystroke command\7\n") + } + + # Draw the plot. + if (redraw == YES) { + call dp_erprofile (gd, id, NO, xwcs, ywcs, im, xlast, ylast) + if (key == 'i') + call dp_isetup (gcurtype, gd) + redraw = NO + if (curtype == 'i') + call gdeactivate (gd, 0) + } + + lastkey = key + } + + if (id == gd && gd != NULL) { + call gclose (gd) + } else { + if (gd != NULL) + call gclose (gd) + if (id != NULL) + call gclose (id) + } + + call imunmap (im) + + # Uncache memory. + call fixmem (old_size) + + call sfree (sp) +end + + +# DP_GCUR --Get a SETPARS cursor value. + +int procedure dp_gcur (curtype, x, y, wcs, key, strval, maxch) + +int curtype # cursor type +real x, y # cursor position +int wcs # cursor wcs +int key # keystroke value of cursor event +char strval[ARB] # string value, if any +int maxch # max chars out + +int nitems +int clgcur() + +begin + # Initialize. + strval[1] = EOS + + # Get a cursor values from the desired cursor parameter. + switch (curtype) { + case 'i': + nitems = clgcur ("icommands", x, y, wcs, key, strval, maxch) + case 'g': + nitems = clgcur ("gcommands", x, y, wcs, key, strval, maxch) + } + + return (nitems) +end + + +# DP_ISETUP -- Setup the daophot parameters interactively using a +# radial profile plot. + +procedure dp_isetup (curtype, gd) + +int curtype # the cursor type graphics or display +pointer gd # pointer to the graphics stream + +int wcs, key +pointer sp, cmd +real wx, wy +int dp_gcur() + +begin + call smark (sp) + call salloc (cmd, SZ_LINE, TY_CHAR) + + call printf ( + "Interactive setup menu (?=help, spbar=default, q=quit):\n") + while (dp_gcur (curtype, wx, wy, wcs, key, Memc[cmd], + SZ_LINE) != EOF) { + switch (key) { + case '?': + call gpagefile (gd, IHELPFILE, "") + case 'q': + break + case 'f': + call dp_mfwhmpsf(gd) + call dp_cfwhmpsf() + case 's': + call dp_msigma(gd) + call dp_csigma() + case 'u': + call dp_mdmax(gd) + call dp_cdmax() + case 'l': + call dp_mdmin(gd) + call dp_cdmin() + case 'c': + call dp_mcbox(gd) + call dp_ccbox() + case 'n': + call dp_mrclean(gd) + call dp_crclean() + case 'p': + call dp_mrclip(gd) + call dp_crclip() + case 'a': + call dp_mannulus(gd) + call dp_cannulus() + case 'd': + call dp_mdannulus(gd) + call dp_cdannulus() + case 'g': + call dp_mrgrow(gd) + call dp_crgrow() + case 'r': + call dp_maper(gd) + call dp_caper() + case 'w': + call dp_mpsfrad(gd) + call dp_cpsfrad() + case 'b': + call dp_mfitrad(gd) + call dp_cfitrad() + case ' ': + call dp_mfwhmpsf(gd) + call dp_mcbox(gd) + call dp_mannulus(gd) + call dp_mdannulus(gd) + call dp_maper(gd) + call dp_mpsfrad(gd) + call dp_mfitrad(gd) + call gdeactivate(gd, 0) + call dp_cbanner() + call dp_cfwhmpsf() + call dp_ccbox() + call dp_cannulus() + call dp_cdannulus() + call dp_caper() + call dp_cpsfrad() + call dp_cfitrad() + call greactivate(gd, 0) + default: + call printf ( + "Interactive setup menu (?=help, spbar=default, q=quit):\n") + } + call printf ( + "Interactive setup menu (?=help, spbar=default, q=quit):\n") + } + + if (curtype == 'i') + call gdeactivate (gd, 0) + call sfree (sp) +end -- cgit