aboutsummaryrefslogtreecommitdiff
path: root/pkg/images/immatch/src/psfmatch/rgpcolon.x
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /pkg/images/immatch/src/psfmatch/rgpcolon.x
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'pkg/images/immatch/src/psfmatch/rgpcolon.x')
-rw-r--r--pkg/images/immatch/src/psfmatch/rgpcolon.x501
1 files changed, 501 insertions, 0 deletions
diff --git a/pkg/images/immatch/src/psfmatch/rgpcolon.x b/pkg/images/immatch/src/psfmatch/rgpcolon.x
new file mode 100644
index 00000000..8eefb22d
--- /dev/null
+++ b/pkg/images/immatch/src/psfmatch/rgpcolon.x
@@ -0,0 +1,501 @@
+include <imhdr.h>
+include <imset.h>
+include <error.h>
+include "psfmatch.h"
+
+# RG_PCOLON -- Show/set the psfmatch task algorithm parameters.
+
+procedure rg_pcolon (gd, pm, imr, reglist, impsf, im1, imk, imfourier, im2,
+ cmdstr, newref, newdata, newfourier, newfilter)
+
+pointer gd #I pointer to the graphics stream
+pointer pm #I pointer to psfmatch structure
+pointer imr #I pointer to the reference image
+int reglist #I the regions / psf list descriptor
+pointer impsf #I pointer to the regions list
+pointer im1 #I pointer to the input image
+pointer imk #I pointer to kernel image
+pointer imfourier #I pointer to fourier spectrum image
+pointer im2 #I pointer to the output image
+char cmdstr[ARB] #I command string
+int newref #I/O new reference image
+int newdata #I/O new input image
+int newfourier #I/O new FFT
+int newfilter #I/O new filter
+
+bool bval
+int ncmd, ival, stat, fd, ip
+pointer sp, cmd, str
+real rval
+bool itob()
+bool streq()
+int strdic(), nscan(), rg_pstati(), btoi(), rg_pregions(), fntopnb()
+int access(), rg_pmkregions(), open(), ctor()
+pointer immap()
+real rg_pstatr()
+errchk immap(), fntopnb()
+
+begin
+ call smark (sp)
+ call salloc (cmd, SZ_LINE, TY_CHAR)
+ call salloc (str, SZ_LINE, TY_CHAR)
+
+ # Get the command.
+ call sscan (cmdstr)
+ call gargwrd (Memc[cmd], SZ_LINE)
+ if (Memc[cmd] == EOS) {
+ call sfree (sp)
+ return
+ }
+
+ # Process the command.
+ ncmd = strdic (Memc[cmd], Memc[cmd], SZ_LINE, PMCMDS)
+ switch (ncmd) {
+ case PMCMD_REFIMAGE:
+ call gargwrd (Memc[cmd], SZ_LINE)
+ call rg_pstats (pm, REFIMAGE, Memc[str], SZ_FNAME)
+ if (imr == NULL || Memc[cmd] == EOS || streq (Memc[cmd],
+ Memc[str])) {
+ call printf ("%s: %s\n")
+ call pargstr (KY_REFIMAGE)
+ call pargstr (Memc[str])
+ } else {
+ if (imr != NULL) {
+ call imunmap (imr)
+ imr = NULL
+ }
+ iferr {
+ imr = immap (Memc[cmd], READ_ONLY, 0)
+ } then {
+ call erract (EA_WARN)
+ imr = immap (Memc[str], READ_ONLY, 0)
+ } else if (IM_NDIM(imr) > 2 || IM_NDIM(imr) != IM_NDIM(im1)) {
+ call printf (
+ "Reference image has the wrong number of dimensions\n")
+ call imunmap (imr)
+ imr = immap (Memc[str], READ_ONLY, 0)
+ } else {
+ call rg_psets (pm, REFIMAGE, Memc[cmd])
+ newref = YES; newdata = YES
+ newfourier = YES; newfilter = YES
+ }
+ }
+
+ case PMCMD_IMAGE:
+
+ call gargwrd (Memc[cmd], SZ_LINE)
+ call rg_pstats (pm, IMAGE, Memc[str], SZ_FNAME)
+ if (Memc[cmd] == EOS || streq (Memc[cmd], Memc[str])) {
+ call printf ("%s: %s\n")
+ call pargstr (KY_IMAGE)
+ call pargstr (Memc[str])
+ } else {
+ if (im1 != NULL) {
+ call imunmap (im1)
+ im1 = NULL
+ }
+ iferr {
+ im1 = immap (Memc[cmd], READ_ONLY, 0)
+ call imseti (im1, IM_TYBNDRY, BT_NEAREST)
+ if (IM_NDIM(im1) == 1)
+ call imseti (im1, IM_NBNDRYPIX, IM_LEN(im1,1))
+ else
+ call imseti (im1, IM_NBNDRYPIX,
+ max (IM_LEN(im1,1), IM_LEN(im1,2)))
+ } then {
+ call erract (EA_WARN)
+ im1 = immap (Memc[str], READ_ONLY, 0)
+ call imseti (im1, IM_TYBNDRY, BT_NEAREST)
+ if (IM_NDIM(im1) == 1)
+ call imseti (im1, IM_NBNDRYPIX, IM_LEN(im1,1))
+ else
+ call imseti (im1, IM_NBNDRYPIX,
+ max (IM_LEN(im1,1), IM_LEN(im1,2)))
+ } else if (IM_NDIM(im1) > 2 || IM_NDIM(im1) != IM_NDIM(imr)) {
+ call printf (
+ "Reference image has the wrong number of dimensions\n")
+ call imunmap (im1)
+ im1 = immap (Memc[str], READ_ONLY, 0)
+ call imseti (im1, IM_TYBNDRY, BT_NEAREST)
+ if (IM_NDIM(im1) == 1)
+ call imseti (im1, IM_NBNDRYPIX, IM_LEN(im1,1))
+ else
+ call imseti (im1, IM_NBNDRYPIX,
+ max (IM_LEN(im1,1), IM_LEN(im1,2)))
+ } else {
+ call rg_psets (pm, IMAGE, Memc[cmd])
+ newdata = YES; newref = YES
+ newfourier = YES; newfilter = YES
+ }
+ }
+
+ case PMCMD_PSFDATA:
+
+ call gargwrd (Memc[cmd], SZ_LINE)
+ call rg_pstats (pm, PSFDATA, Memc[str], SZ_FNAME)
+ if (reglist == NULL || nscan() == 1 || (streq (Memc[cmd],
+ Memc[str]) && Memc[cmd] != EOS)) {
+ call printf ("%s [string/file]: %s\n")
+ call pargstr (KY_PSFDATA)
+ call pargstr (Memc[str])
+ } else if (rg_pstati(pm, CONVOLUTION) == PM_CONIMAGE) {
+ call fntclsb (reglist)
+ iferr {
+ reglist = fntopnb (Memc[cmd], NO)
+ } then {
+ reglist = fntopnb (Memc[str], NO)
+ } else {
+ if (rg_pregions (reglist, imr, pm, 1, NO) > 0)
+ ;
+ call rg_psets (pm, PSFDATA, Memc[cmd])
+ newdata = YES; newref = YES
+ newfourier = YES; newfilter = YES
+ }
+ }
+
+ case PMCMD_PSFIMAGE:
+ call gargwrd (Memc[cmd], SZ_LINE)
+ call rg_pstats (pm, PSFIMAGE, Memc[str], SZ_FNAME)
+ if (impsf == NULL || Memc[cmd] == EOS || streq (Memc[cmd],
+ Memc[str])) {
+ call printf ("%s: %s\n")
+ call pargstr (KY_PSFIMAGE)
+ call pargstr (Memc[str])
+ } else {
+ if (impsf != NULL) {
+ call imunmap (impsf)
+ impsf = NULL
+ }
+ iferr {
+ impsf = immap (Memc[cmd], READ_ONLY, 0)
+ } then {
+ call erract (EA_WARN)
+ impsf = immap (Memc[str], READ_ONLY, 0)
+ } else if (IM_NDIM(impsf) > 2 || IM_NDIM(impsf) !=
+ IM_NDIM(imr)) {
+ call printf (
+ "PSF image has the wrong number of dimensions\n")
+ call imunmap (impsf)
+ impsf = immap (Memc[str], READ_ONLY, 0)
+ } else {
+ call rg_psets (pm, PSFIMAGE, Memc[cmd])
+ newref = YES; newdata = YES
+ newfourier = YES; newfilter = YES
+ }
+ }
+
+ case PMCMD_KERNEL:
+ call gargwrd (Memc[cmd], SZ_LINE)
+ call rg_pstats (pm, KERNEL, Memc[str], SZ_FNAME)
+ if (Memc[cmd] == EOS || streq (Memc[cmd], Memc[str])) {
+ call printf ("%s: %s\n")
+ call pargstr (KY_KERNEL)
+ call pargstr (Memc[str])
+ } else {
+ if (imk != NULL) {
+ call imunmap (imk)
+ call imdelete (Memc[str])
+ imk = NULL
+ }
+ iferr {
+ imk = immap (Memc[cmd], NEW_IMAGE, 0)
+ } then {
+ call erract (EA_WARN)
+ imk = NULL
+ call rg_psets (pm, KERNEL, "")
+ } else
+ call rg_psets (pm, KERNEL, Memc[cmd])
+ }
+
+
+ case PMCMD_OUTIMAGE:
+ call gargwrd (Memc[cmd], SZ_LINE)
+ call rg_pstats (pm, OUTIMAGE, Memc[str], SZ_FNAME)
+ if (im2 == NULL || Memc[cmd] == EOS || streq (Memc[cmd],
+ Memc[str])) {
+ call printf ("%s: %s\n")
+ call pargstr (KY_OUTIMAGE)
+ call pargstr (Memc[str])
+ } else {
+ if (im2 != NULL) {
+ call imunmap (im2)
+ im2 = NULL
+ }
+ iferr {
+ im2 = immap (Memc[cmd], NEW_COPY, im1)
+ } then {
+ call erract (EA_WARN)
+ im2 = immap (Memc[str], NEW_COPY, im1)
+ } else {
+ call rg_psets (pm, OUTIMAGE, Memc[cmd])
+ }
+ }
+
+ case PMCMD_DNX:
+ call gargi (ival)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_DNX)
+ call pargi (rg_pstati (pm, DNX))
+ } else {
+ if (mod (ival, 2) == 0)
+ ival = ival + 1
+ call rg_pseti (pm, DNX, ival)
+ newref = YES; newdata = YES; newfourier = YES; newfilter = YES
+ }
+
+ case PMCMD_DNY:
+ call gargi (ival)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_DNY)
+ call pargi (rg_pstati (pm, DNY))
+ } else {
+ if (mod (ival, 2) == 0)
+ ival = ival + 1
+ call rg_pseti (pm, DNY, ival)
+ newref = YES; newdata = YES; newfourier = YES; newfilter = YES
+ }
+
+ case PMCMD_PNX:
+ call gargi (ival)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_PNX)
+ call pargi (rg_pstati (pm, PNX))
+ } else {
+ if (mod (ival, 2) == 0)
+ ival = ival + 1
+ call rg_pseti (pm, PNX, min (ival, rg_pstati (pm, DNX)))
+ newref = YES; newdata = YES; newfourier = YES; newfilter = YES
+ }
+
+ case PMCMD_PNY:
+ call gargi (ival)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_PNY)
+ call pargi (rg_pstati (pm, PNY))
+ } else {
+ if (mod (ival, 2) == 0)
+ ival = ival + 1
+ call rg_pseti (pm, PNY, min (ival, rg_pstati(pm, DNY)))
+ newref = YES; newdata = YES; newfourier = YES; newfilter = YES
+ }
+
+ case PMCMD_CENTER:
+ call gargb (bval)
+ if (nscan() == 1) {
+ call printf ("%s = %b\n")
+ call pargstr (KY_CENTER)
+ call pargb (itob (rg_pstati (pm, CENTER)))
+ } else {
+ call rg_pseti (pm, CENTER, btoi (bval))
+ newfourier = YES; newfilter = YES
+ }
+
+ case PMCMD_BACKGRD:
+ call gargwrd (Memc[cmd], SZ_LINE)
+ if (Memc[cmd] == EOS) {
+ call rg_pstats (pm, BSTRING, Memc[str], SZ_FNAME)
+ call printf ("%s: %s\n")
+ call pargstr (KY_BACKGRD)
+ call pargstr (Memc[str])
+ } else {
+ stat = strdic (Memc[cmd], Memc[cmd], SZ_LINE, PM_BTYPES)
+ ip = 1
+ if (stat > 0) {
+ call rg_pseti (pm, BACKGRD, stat)
+ call rg_psets (pm, BSTRING, Memc[cmd])
+ newfourier = YES; newfilter = YES
+ } else if (ctor (str, ip, rval) > 0) {
+ call rg_psetr (pm, BVALUE, rval)
+ if (ctor (str, ip, rval) > 0) {
+ call rg_psetr (pm, BVALUER, rval)
+ call strcpy (str, PM_BSTRING(pm), SZ_FNAME)
+ call rg_pseti (pm, BACKGRD, PM_NUMBER)
+ } else {
+ call rg_psetr (pm, BVALUE, 0.0)
+ call rg_psetr (pm, BVALUER, 0.0)
+ }
+ }
+ }
+
+ case PMCMD_LOREJECT:
+ call gargr (rval)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_LOREJECT)
+ call pargr (rg_pstatr (pm, LOREJECT))
+ } else {
+ call rg_psetr (pm, LOREJECT, rval)
+ newfourier = YES; newfilter = YES
+ }
+
+ case PMCMD_HIREJECT:
+ call gargr (rval)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_HIREJECT)
+ call pargr (rg_pstatr (pm, HIREJECT))
+ } else {
+ call rg_psetr (pm, HIREJECT, rval)
+ newfourier = YES; newfilter = YES
+ }
+
+ case PMCMD_APODIZE:
+ call gargr (rval)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_APODIZE)
+ call pargr (rg_pstatr (pm, APODIZE))
+ } else {
+ call rg_psetr (pm, APODIZE, rval)
+ newfourier = YES; newfilter = YES
+ }
+
+ case PMCMD_CONVOLUTION:
+ if (Memc[cmd] == EOS) {
+ call rg_pstats (pm, CSTRING, Memc[str], SZ_LINE)
+ call printf ("%s: %s\n")
+ call pargstr (KY_CONVOLUTION)
+ call pargstr (Memc[str])
+ }
+
+ case PMCMD_UFLUXRATIO:
+ call gargr (rval)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_UFLUXRATIO)
+ call pargr (rg_pstatr (pm, UFLUXRATIO))
+ } else {
+ call rg_psetr (pm, UFLUXRATIO, rval)
+ newfourier = YES; newfilter = YES
+ }
+
+ case PMCMD_FILTER:
+ call gargwrd (Memc[cmd], SZ_LINE)
+ if (Memc[cmd] == EOS) {
+ call rg_pstats (pm, FSTRING, Memc[str], SZ_LINE)
+ call printf ("%s: %s\n")
+ call pargstr (KY_FILTER)
+ call pargstr (Memc[str])
+ } else {
+ stat = strdic (Memc[cmd], Memc[cmd], SZ_LINE, PM_FTYPES)
+ if (stat > 0) {
+ call rg_pseti (pm, FILTER, stat)
+ call rg_psets (pm, FSTRING, Memc[cmd])
+ }
+ newfilter = YES
+ }
+
+ case PMCMD_SXINNER:
+ call gargr (rval)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_SXINNER)
+ call pargr (rg_pstatr (pm, SXINNER))
+ } else {
+ call rg_psetr (pm, SXINNER, rval)
+ newfilter = YES
+ }
+
+ case PMCMD_SXOUTER:
+ call gargr (rval)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_SXOUTER)
+ call pargr (rg_pstatr (pm, SXOUTER))
+ } else {
+ call rg_psetr (pm, SXOUTER, rval)
+ newfilter = YES
+ }
+
+ case PMCMD_SYINNER:
+ call gargr (rval)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_SYINNER)
+ call pargr (rg_pstatr (pm, SYINNER))
+ } else {
+ call rg_psetr (pm, SYINNER, rval)
+ newfilter = YES
+ }
+
+ case PMCMD_SYOUTER:
+ call gargr (rval)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_SYOUTER)
+ call pargr (rg_pstatr (pm, SYOUTER))
+ } else {
+ call rg_psetr (pm, SYOUTER, rval)
+ newfilter = YES
+ }
+
+ case PMCMD_RADSYM:
+ call gargb (bval)
+ if (nscan() == 1) {
+ call printf ("%s = %b\n")
+ call pargstr (KY_RADSYM)
+ call pargb (itob (rg_pstati (pm, RADSYM)))
+ } else {
+ call rg_pseti (pm, RADSYM, btoi (bval))
+ newfilter = YES
+ }
+
+ case PMCMD_THRESHOLD:
+ call gargr (rval)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_THRESHOLD)
+ call pargr (rg_pstatr (pm, THRESHOLD))
+ } else {
+ call rg_psetr (pm, THRESHOLD, rval)
+ newfilter = YES
+ }
+
+ case PMCMD_NORMFACTOR:
+ call gargr (rval)
+ if (nscan() == 1) {
+ call printf ("%s = %g\n")
+ call pargstr (KY_NORMFACTOR)
+ call pargr (rg_pstatr (pm, NORMFACTOR))
+ } else {
+ call rg_psetr (pm, NORMFACTOR, rval)
+ newfilter = YES
+ }
+
+ case PMCMD_SHOW:
+ call gdeactivate (gd, 0)
+ call rg_pshow (pm)
+ call greactivate (gd, 0)
+
+ case PMCMD_MARK:
+ call gdeactivate (gd, 0)
+ call gargwrd (Memc[cmd], SZ_LINE)
+ if (Memc[cmd] == EOS) {
+ fd = NULL
+ } else if (access (Memc[cmd], 0, 0) == YES) {
+ call printf ("Warning: file %s already exists\n")
+ call pargstr (Memc[cmd])
+ fd = NULL
+ } else {
+ fd = open (Memc[cmd], NEW_FILE, TEXT_FILE)
+ }
+ call printf ("\n")
+ if (rg_pmkregions (fd, imr, pm, 1, MAX_NREGIONS) <= 0)
+ call printf ("The regions list is empty\n")
+ newdata = YES; newref = YES
+ newfourier = YES; newfilter = YES
+ call printf ("\n")
+ if (fd != NULL)
+ call close (fd)
+ call greactivate (gd, 0)
+
+ default:
+ call printf ("Unknown or ambiguous colon command\7\n")
+ }
+
+ call sfree (sp)
+end