diff options
author | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
---|---|---|
committer | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
commit | 40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch) | |
tree | 4464880c571602d54f6ae114729bf62a89518057 /noao/digiphot/daophot/psf/dprmpsf.x | |
download | iraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz |
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'noao/digiphot/daophot/psf/dprmpsf.x')
-rw-r--r-- | noao/digiphot/daophot/psf/dprmpsf.x | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/noao/digiphot/daophot/psf/dprmpsf.x b/noao/digiphot/daophot/psf/dprmpsf.x new file mode 100644 index 00000000..dd76c4d4 --- /dev/null +++ b/noao/digiphot/daophot/psf/dprmpsf.x @@ -0,0 +1,156 @@ +include <imhdr.h> +include <fset.h> +include "../lib/daophotdef.h" +include "../lib/psfdef.h" + + +# DP_OPPSF -- Open the current psf image and the psf group file. + +procedure dp_oppsf (dao, psfim, opst, psfgr) + +pointer dao # pointer to the daophot structure +pointer psfim # pointer to the psf image +int opst # the psf star list descriptor +int psfgr # the psf group file descriptor + +pointer sp, str +int open(), dp_stati(), dp_pstati() +pointer immap(), tbtopn() + +begin + call smark (sp) + call salloc (str, SZ_FNAME, TY_CHAR) + + # Reopen the PSF star and group files. + call dp_stats (dao, OUTREJFILE, Memc[str], SZ_FNAME) + if (dp_stati (dao, TEXT) == YES) + opst = open (Memc[str], NEW_FILE, TEXT_FILE) + else + opst = tbtopn (Memc[str], NEW_FILE, 0) + call dp_stats (dao, OUTPHOTFILE, Memc[str], SZ_FNAME) + if (dp_stati (dao, TEXT) == YES) + psfgr = open (Memc[str], NEW_FILE, TEXT_FILE) + else + psfgr = tbtopn (Memc[str], NEW_FILE, 0) + + # Reopen the psf image. + call dp_stats (dao, PSFIMAGE, Memc[str], SZ_FNAME) + psfim = immap (Memc[str], NEW_IMAGE, dp_pstati (dao, LENUSERAREA)) + + call sfree (sp) +end + + +# DP_UPDATEPSF -- Update the psf on disk. + +bool procedure dp_updatepsf (dao, im, psfim, opst, psfgr, psf_new, psf_current, + psf_written) + +pointer dao # pointer to the daophot structure +pointer im # pointer to the input image +pointer psfim # pointer to the psf image +int opst # the psf star list file descriptor +int psfgr # the psf group file descriptor +bool psf_new # is the psf star list defined ? +bool psf_current # is the psf fit uptodate +bool psf_written # has the psf been saved on disk + +bool update +pointer sp, str +int dp_fitpsf() + +begin + call smark (sp) + call salloc (str, SZ_LINE, TY_CHAR) + + update = false + if (psfim == NULL) { + call printf ("Warning: The PSF image is undefined\n") + } else if (psfgr == NULL) { + call printf ("Warning: The PSF group file is undefined\n") + } else if (psf_new) { + call printf ("Warning: The PSF star list is undefined\n") + } else if (! psf_current) { + if (dp_fitpsf (dao, im, Memc[str], SZ_LINE) == OK) { + call dp_writepsf (dao, im, psfim) + call dp_wplist (dao, im, opst) + call dp_wneistars (dao, im, psfgr) + update = true + } else { + call printf ("%s\n") + call pargstr (Memc[str]) + } + } else if (! psf_written) { + call dp_writepsf (dao, im, psfim) + call dp_wplist (dao, im, opst) + call dp_wneistars (dao, im, psfgr) + update = true + } + + if (DP_VERBOSE(dao) == YES && update) { + call printf ("\nWriting PSF image %s\n") + call pargstr (IM_HDRFILE (psfim)) + call dp_stats (dao, OUTREJFILE, Memc[str], SZ_FNAME) + call printf ("Writing output PSF star list %s\n") + call pargstr (Memc[str]) + call dp_stats (dao, OUTPHOTFILE, Memc[str], SZ_FNAME) + call printf ("Writing output PSF star group file %s\n") + call pargstr (Memc[str]) + } + + call sfree (sp) + + return (update) +end + + +# DP_RMPSF -- Close and delete the psf image and the psf group file. + +procedure dp_rmpsf (dao, psfim, opst, psfgr) + +pointer dao # pointer to the daophot structure +pointer psfim # pointer to the psf image +int opst # the psf star list file descriptor +int psfgr # the psf group file descriptor + +pointer sp, temp +int dp_stati(), access() + +begin + call smark (sp) + call salloc (temp, SZ_FNAME, TY_CHAR) + + # Delete the psf star file. The access check is necessary because + # an empty tables file is automatically deleted by the system. + if (dp_stati (dao, TEXT) == YES) { + call fstats (opst, F_FILENAME, Memc[temp], SZ_FNAME) + call close (opst) + } else { + call tbtnam (opst, Memc[temp], SZ_FNAME) + call tbtclo (opst) + } + if (access (Memc[temp], 0, 0) == YES) + call delete (Memc[temp]) + opst = NULL + + # Delete the neighbours file. The access check is necessary because + # an empty tables file is automatically deleted by the system. + if (dp_stati (dao, TEXT) == YES) { + call fstats (psfgr, F_FILENAME, Memc[temp], SZ_FNAME) + call close (psfgr) + } else { + call tbtnam (psfgr, Memc[temp], SZ_FNAME) + call tbtclo (psfgr) + } + if (access (Memc[temp], 0, 0) == YES) + call delete (Memc[temp]) + psfgr = NULL + + # Delete the PSF image. + call strcpy (IM_HDRFILE(psfim), Memc[temp], SZ_FNAME) + call imunmap (psfim) + call imdelete (Memc[temp]) + psfim = NULL + + call sfree (sp) +end |