aboutsummaryrefslogtreecommitdiff
path: root/noao/digiphot/daophot/psf/dpdelstar.x
diff options
context:
space:
mode:
Diffstat (limited to 'noao/digiphot/daophot/psf/dpdelstar.x')
-rw-r--r--noao/digiphot/daophot/psf/dpdelstar.x112
1 files changed, 112 insertions, 0 deletions
diff --git a/noao/digiphot/daophot/psf/dpdelstar.x b/noao/digiphot/daophot/psf/dpdelstar.x
new file mode 100644
index 00000000..22ba579f
--- /dev/null
+++ b/noao/digiphot/daophot/psf/dpdelstar.x
@@ -0,0 +1,112 @@
+include <imhdr.h>
+include <mach.h>
+include "../lib/daophotdef.h"
+include "../lib/psfdef.h"
+
+# DP_DELSTAR -- Delete the star at the given position from the list of PSF
+# stars if it exists and passes the selection criteria.
+
+int procedure dp_delstar (dao, im, x, y, idnum, gd, showplots)
+
+pointer dao # pointer to daophot structure
+pointer im # pointer to image
+real x, y # position of proposed PSF star
+int idnum # id number of desired star
+pointer gd # pointer to the graphics stream
+bool showplots # show plots?
+
+real tx, ty
+pointer srim
+int starnum, saturated, x1, x2, y1, y2
+bool star_ok
+
+pointer dp_psubrast()
+int dp_locstar(), dp_idstar(), dp_pstati()
+
+begin
+ # Convert coordinates for display.
+ if (showplots)
+ call dp_ltov (im, x, y, tx, ty, 1)
+ else
+ call dp_wout (dao, im, x, y, tx, ty, 1)
+
+ # Check that the position of the star is within the image.
+ if (idnum == 0 && (x < 1.0 || x > real (IM_LEN(im,1)) || y < 1.0 || y >
+ real (IM_LEN(im,2)))) {
+ if (DP_VERBOSE(dao) == YES) {
+ call printf ("Star at %g,%g is outside the image\n")
+ call pargr (tx)
+ call pargr (ty)
+ }
+ return (ERR)
+ }
+
+ # Find the star in the aperture photometry list.
+ if (idnum == 0)
+ starnum = dp_locstar (dao, im, x, y)
+ else
+ starnum = dp_idstar (dao, im, idnum)
+ if (starnum == 0) {
+ if (DP_VERBOSE(dao) == YES) {
+ if (idnum > 0) {
+ call printf ("Star %d not found in the photometry file\n")
+ call pargi (idnum)
+ } else {
+ call printf (
+ "Star at %g,%g not found in the photometry file\n")
+ call pargr (tx)
+ call pargr (ty)
+ }
+ }
+ return (ERR)
+ } else if (starnum < 0 || starnum > dp_pstati (dao, PNUM)) {
+ if (DP_VERBOSE(dao) == YES) {
+ call printf ( "Star %d not found in the PSF star list\n")
+ call pargi (dp_pstati (dao, CUR_PSFID))
+ }
+ return (ERR)
+ }
+
+ # Get the data subraster, check for bad pixels and compute the min
+ # and max.
+ if (showplots) {
+ srim = dp_psubrast (dao, im, -MAX_REAL, MAX_REAL, x1, x2,
+ y1, y2, saturated)
+ if (srim == NULL) {
+ if (DP_VERBOSE(dao) == YES) {
+ call printf ("Star %d error reading data subraster\n")
+ call pargi (dp_pstati (dao, CUR_PSFID))
+ }
+ star_ok = false
+ } else {
+ call dp_showpsf (dao, im, Memr[srim], (x2 - x1 + 1),
+ (y2 - y1 + 1), x1, y1, gd, star_ok)
+ call mfree (srim, TY_REAL)
+ }
+ } else
+ star_ok = true
+
+ if (star_ok) {
+ if (DP_VERBOSE(dao) == YES) {
+ call printf ("PSF star %d saved by user\n")
+ call pargi (dp_pstati (dao, CUR_PSFID))
+ }
+ return (ERR)
+ }
+
+ # Delete the star from the list by moving it to the position
+ # currently occupied by PNUM and moving everything else up.
+ call dp_pfreorder (dao, dp_pstati (dao, CUR_PSF), dp_pstati (dao,
+ PNUM))
+
+ # Decrement the number of psf stars.
+ call dp_pseti (dao, PNUM, dp_pstati(dao, PNUM) - 1)
+
+ # Print message.
+ if (DP_VERBOSE(dao) == YES) {
+ call printf ("Star %d has been deleted from the PSF star list\n")
+ call pargi (dp_pstati (dao, CUR_PSFID))
+ }
+
+ return (OK)
+end