aboutsummaryrefslogtreecommitdiff
path: root/noao/digiphot/daophot/daolib/dpgppars.x
diff options
context:
space:
mode:
Diffstat (limited to 'noao/digiphot/daophot/daolib/dpgppars.x')
-rw-r--r--noao/digiphot/daophot/daolib/dpgppars.x227
1 files changed, 227 insertions, 0 deletions
diff --git a/noao/digiphot/daophot/daolib/dpgppars.x b/noao/digiphot/daophot/daolib/dpgppars.x
new file mode 100644
index 00000000..f16fc59e
--- /dev/null
+++ b/noao/digiphot/daophot/daolib/dpgppars.x
@@ -0,0 +1,227 @@
+include <ctotok.h>
+include "../lib/daophotdef.h"
+
+# DP_GPPARS -- Procedure to fetch the daophot task parameters.
+
+procedure dp_gppars (dao)
+
+pointer dao # pointer to daophot structure
+
+int dp, dap
+pointer mp, str, tstr
+real scale, fwhmpsf, psfrad, matchrad, fitrad, annulus, dannulus, mergerad
+
+bool clgetb(), clgpsetb()
+int clgpseti(), btoi(), dp_fctdecode(), dp_strwrd()
+pointer clopset()
+real clgpsetr()
+
+begin
+ # Allocate working space.
+ call smark (mp)
+ call salloc (str, SZ_FNAME, TY_CHAR)
+ call salloc (tstr, SZ_FNAME, TY_CHAR)
+
+ # Open the daophot structure.
+ call dp_init (dao)
+
+ # Set the package parameter text and initialize the verbose switch.
+ call dp_seti (dao, TEXT, btoi (clgetb ("text")))
+ call dp_seti (dao, VERBOSE, btoi (false))
+
+ # Open the datapars parameter set.
+ dp = clopset ("datapars")
+
+ # Set the datapars parameters.
+ scale = clgpsetr (dp, "scale")
+ call dp_setr (dao, SCALE, scale)
+ fwhmpsf = clgpsetr (dp, "fwhmpsf")
+ call dp_setr (dao, SFWHMPSF, fwhmpsf)
+ call dp_setr (dao, MAXGDATA, clgpsetr (dp, "datamax"))
+ call dp_setr (dao, MINGDATA, clgpsetr (dp, "datamin"))
+
+ # Initialize the noise parameters.
+ call clgpset (dp, "ccdread", Memc[str], SZ_FNAME)
+ call dp_sets (dao, CCDREAD, Memc[str])
+ call dp_setr (dao, READNOISE, clgpsetr (dp, "readnoise"))
+ call clgpset (dp, "gain", Memc[str], SZ_FNAME)
+ call dp_sets (dao, CCDGAIN, Memc[str])
+ call dp_setr (dao, PHOTADU, clgpsetr (dp, "epadu"))
+
+ # Initialize the observing parameters. Note that whitespace
+ # is removed from the filter id.
+ call clgpset (dp, "exposure", Memc[str], SZ_FNAME)
+ call dp_sets (dao, EXPTIME, Memc[str])
+ call dp_setr (dao, ITIME, 1.0)
+ call clgpset (dp, "airmass", Memc[str], SZ_FNAME)
+ call dp_sets (dao, AIRMASS, Memc[str])
+ call dp_setr (dao, XAIRMASS, clgpsetr (dp, "xairmass"))
+ call clgpset (dp, "filter", Memc[str], SZ_FNAME)
+ call dp_sets (dao, FILTER, Memc[str])
+ call clgpset (dp, "ifilter", Memc[str], SZ_FNAME)
+ call dp_rmwhite (Memc[str], Memc[str], SZ_FNAME)
+ call dp_sets (dao, IFILTER, Memc[str])
+ call clgpset (dp, "obstime", Memc[str], SZ_FNAME)
+ call dp_sets (dao, OBSTIME, Memc[str])
+ call clgpset (dp, "otime", Memc[str], SZ_FNAME)
+ call dp_sets (dao, OTIME, Memc[str])
+
+ # Close the datapars parameter set.
+ call clcpset (dp)
+
+ # Open the daopars parameter set.
+ dap = clopset ("daopars")
+
+ # Set the psf fitting parameters.
+ call clgpset (dap, "function", Memc[tstr], SZ_FNAME)
+ if (dp_fctdecode (Memc[tstr], Memc[str], SZ_FNAME) <= 0)
+ call strcpy (",gauss,", Memc[str], SZ_FNAME)
+ call dp_sets (dao, FUNCLIST, Memc[str])
+ if (dp_strwrd (1, Memc[tstr], SZ_FNAME, Memc[str]) <= 0)
+ call strcpy ("gauss", Memc[tstr], SZ_FNAME)
+ call dp_sets (dao, FUNCTION, Memc[tstr])
+ call dp_seti (dao, VARORDER, clgpseti (dap, "varorder"))
+ #call dp_seti (dao, FEXPAND, btoi (clgpsetb (dap, "fexpand")))
+ call dp_seti (dao, FEXPAND, NO)
+ call dp_seti (dao, NCLEAN, clgpseti (dap, "nclean"))
+ call dp_seti (dao, SATURATED, btoi (clgpsetb (dap, "saturated")))
+ psfrad = clgpsetr (dap, "psfrad")
+ call dp_setr (dao, RPSFRAD, psfrad)
+ call dp_setr (dao, SPSFRAD, psfrad)
+ matchrad = clgpsetr (dap, "matchrad")
+ call dp_setr (dao, SMATCHRAD, matchrad)
+
+ # Set the fitting parameters.
+ fitrad = clgpsetr (dap, "fitrad")
+ call dp_setr (dao, SFITRAD, fitrad)
+ annulus = clgpsetr (dap, "sannulus")
+ call dp_setr (dao, SANNULUS, annulus)
+ dannulus = clgpsetr (dap, "wsannulus")
+ call dp_setr (dao, SDANNULUS, dannulus)
+ call dp_setr (dao, CRITSNRATIO, clgpsetr (dap, "critsnratio"))
+ call dp_seti (dao, MAXITER, clgpseti (dap, "maxiter"))
+ call dp_seti (dao, MAXGROUP, clgpseti (dap, "maxgroup"))
+ call dp_seti (dao, MAXNSTAR, clgpseti (dap, "maxnstar"))
+ call dp_seti (dao, RECENTER, btoi (clgpsetb (dap, "recenter")))
+ call dp_seti (dao, FITSKY, btoi (clgpsetb (dap, "fitsky")))
+ call dp_seti (dao, GROUPSKY, btoi (clgpsetb (dap, "groupsky")))
+ call dp_setr (dao, FLATERR, clgpsetr (dap, "flaterr"))
+ call dp_setr (dao, PROFERR, clgpsetr (dap, "proferr"))
+ call dp_setr (dao, CLIPRANGE, clgpsetr (dap, "cliprange"))
+ call dp_seti (dao, CLIPEXP, clgpseti (dap, "clipexp"))
+ mergerad = clgpsetr (dap, "mergerad")
+ call dp_setr (dao, SMERGERAD, mergerad)
+
+ # Close the daopars pset file.
+ call clcpset (dap)
+
+ # Compute the fwhmpsf, psf radius, fitting radius and matching radius
+ # in pixels and store.
+
+ call dp_setr (dao, FWHMPSF, fwhmpsf / scale)
+ call dp_setr (dao, PSFRAD, psfrad / scale)
+ call dp_setr (dao, MATCHRAD, matchrad / scale)
+ call dp_setr (dao, FITRAD, fitrad / scale)
+ call dp_setr (dao, ANNULUS, annulus / scale)
+ call dp_setr (dao, DANNULUS, dannulus / scale)
+ if (IS_INDEFR(mergerad))
+ call dp_setr (dao, MERGERAD, INDEFR)
+ else
+ call dp_setr (dao, MERGERAD, mergerad / scale)
+
+ call sfree (mp)
+end
+
+
+# DP_FCTDECODE -- Decode and re-encode the list of analytic functions to be
+# fit in a from suitable for use by strdic. If no valid psf types are included
+# in the list set the dictionary to the gaussian function.
+
+int procedure dp_fctdecode (instr, outstr, maxch)
+
+char instr[ARB] # the input list of functions
+char outstr[ARB] # the output list of functions
+int maxch # maximum size of the output string
+
+int ip, op, ntok, tok
+pointer sp, token
+int ctotok(), strdic(), gstrcpy, gstrcat()
+
+begin
+ call smark (sp)
+ call salloc (token, maxch, TY_CHAR)
+
+ outstr[1] = ','
+ outstr[2] = EOS
+ op = 2
+
+ ntok = 0
+ ip = 1
+ while (instr[ip] != EOS) {
+ tok = ctotok (instr, ip, Memc[token], maxch)
+ if (tok != TOK_IDENTIFIER)
+ next
+ if (strdic (Memc[token], Memc[token], maxch, FCTN_FTYPES) <= 0)
+ next
+ ntok = ntok + 1
+ op = op + gstrcpy (Memc[token], outstr[op], maxch - op + 1)
+ op = op + gstrcat (",", outstr[op], maxch - op + 1)
+ }
+
+ call sfree (sp)
+
+ return (ntok)
+end
+
+
+# DP_STRWRD -- Search a dictionary string for a given string index number.
+# This is the opposite function of strdic(), that returns the index for
+# given string. The entries in the dictionary string are separated by
+# a delimiter character which is the first character of the dictionary
+# string. The index of the string found is returned as the function value.
+# Otherwise, if there is no string for that index, a zero is returned.
+
+int procedure dp_strwrd (index, outstr, maxch, dict)
+
+int index # String index
+char outstr[ARB] # Output string as found in dictionary
+int maxch # Maximum length of output string
+char dict[ARB] # Dictionary string
+
+int i, len, start, count
+
+int strlen()
+
+begin
+ # Clear output string
+ outstr[1] = EOS
+
+ # Return if the dictionary is not long enough
+ if (dict[1] == EOS)
+ return (0)
+
+ # Initialize counters
+ count = 1
+ len = strlen (dict)
+
+ # Search the dictionary string. This loop only terminates
+ # successfully if the index is found. Otherwise the procedure
+ # returns with and error condition.
+ for (start = 2; count < index; start = start + 1) {
+ if (dict[start] == dict[1])
+ count = count + 1
+ if (start == len)
+ return (0)
+ }
+
+ # Extract the output string from the dictionary
+ for (i = start; dict[i] != EOS && dict[i] != dict[1]; i = i + 1) {
+ if (i - start + 1 > maxch)
+ break
+ outstr[i - start + 1] = dict[i]
+ }
+ outstr[i - start + 1] = EOS
+
+ # Return index for output string
+ return (count)
+end