aboutsummaryrefslogtreecommitdiff
path: root/noao/imred/src/dofoe/arcrefs.cl
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 /noao/imred/src/dofoe/arcrefs.cl
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'noao/imred/src/dofoe/arcrefs.cl')
-rw-r--r--noao/imred/src/dofoe/arcrefs.cl106
1 files changed, 106 insertions, 0 deletions
diff --git a/noao/imred/src/dofoe/arcrefs.cl b/noao/imred/src/dofoe/arcrefs.cl
new file mode 100644
index 00000000..fa8f950a
--- /dev/null
+++ b/noao/imred/src/dofoe/arcrefs.cl
@@ -0,0 +1,106 @@
+# ARCREFS -- Determine dispersion relation for reference arc.
+
+procedure arcrefs (arcref, arcaps, arcbeams, response, done, log1, log2)
+
+file arcref
+string arcaps
+string arcbeams
+file response
+file done
+file log1
+file log2
+
+struct *fd
+
+begin
+ string arcrefec, arcec, temp, str, imtype
+ int i, dc
+ bool log
+
+ temp = mktemp ("tmp$iraf")
+
+ # Extract the primary arc reference spectrum. Determine the
+ # dispersion function with ECIDENTIFY/ECREIDENTIFY. Set the wavelength
+ # parameters with ECDISPCOR.
+
+ imtype = "." // envget ("imtype")
+ i = stridx (",", imtype)
+ if (i > 0)
+ imtype = substr (imtype, 1, i-1)
+ arcrefec = arcref // ".ec"
+ if (arcaps != "" || arcbeams != "")
+ arcec = arcref // "arc.ec"
+ else
+ arcec = ""
+ if (!access (arcrefec//imtype)) {
+ print ("Extract arc reference image ", arcref) | tee (log1)
+ apscript (arcref, ansrecenter="NO", ansresize="NO", ansedit="NO",
+ anstrace="NO", background="none", clean=no, weights="none")
+ if (response != "")
+ sarith (arcrefec, "/", response, arcrefec, w1=INDEF, w2=INDEF,
+ apertures="", bands="", beams="", apmodulus=0, reverse=no,
+ ignoreaps=no, format="multispec", renumber=no, offset=0,
+ clobber=yes, merge=no, errval=0, verbose=no)
+ if (arcec != "") {
+ scopy (arcrefec, arcec, w1=INDEF, w2=INDEF, apertures=arcaps,
+ bands="", beams=arcbeams, apmodulus=0, offset=0,
+ format="multispec", clobber=yes, merge=no, renumber=yes,
+ verbose=no)
+ scopy (arcrefec, "", w1=INDEF, w2=INDEF, apertures="!"//arcaps,
+ bands="", beams=arcbeams, apmodulus=0, offset=0,
+ format="multispec", clobber=yes, merge=no, renumber=yes,
+ verbose=no)
+ }
+ }
+
+ # Get the dispersion parameters from the header. These are
+ # used for all further spectra and also flag whether this
+ # spectrum has been processed. If the parameters are missing
+ # the spectrum needs to have the dispersion function and
+ # wavelength scale determined. The HEDIT is needed because
+ # in some cases the user may exit IDENTIFY without updating
+ # the database (if the image was deleted but the database
+ # entry was not).
+
+ hselect (arcrefec, "dc-flag", yes, > temp)
+ fd = temp
+ dc = -1
+ i = fscan (fd, dc)
+ fd = ""; delete (temp, verify=no)
+ if (dc == -1) {
+ print ("Determine dispersion solution for ", arcref) | tee (log1)
+ delete (database//"/ec"//arcref//".ec*", verify=no)
+ ecidentify (arcrefec, database=database,
+ coordlist=params.coordlist, match=params.match,
+ maxfeatures=100, zwidth=10., ftype="emission",
+ fwidth=params.fwidth, cradius=params.cradius,
+ threshold=params.threshold, minsep=2.,
+ function=params.i_function, xorder=params.i_xorder,
+ yorder=params.i_yorder, niterate=params.i_niterate,
+ lowreject=params.i_low, highreject=params.i_high,
+ autowrite=yes)
+ if (arcec != "") {
+ ecreidentify (arcec, arcrefec, shift=0., cradius=params.cradius,
+ threshold=params.threshold, refit=yes, database=database,
+ logfiles=log1//","//log2)
+ imdelete (arcec, verify=no)
+ }
+ hedit (arcrefec, "refspec1", arcref // ".ec", add=yes,
+ show=no, verify=no, update=yes)
+ }
+
+ # Dispersion correct the reference arc. Set the newdisp flag.
+
+ if (dc == -1) {
+ dispcor (arcrefec, "", linearize=params.linearize,
+ database=database, table="", w1=INDEF, w2=INDEF, dw=INDEF,
+ nw=INDEF, log=params.log, flux=params.flux, samedisp=no,
+ global=no, ignoreaps=no, confirm=no, listonly=no, verbose=yes,
+ logfile=log1, > log2)
+ hedit (arcrefec, "dc-flag", 0, add=yes, verify=no,
+ show=no, update=yes)
+ proc.newdisp = yes
+ }
+
+ print (arcref, >> done)
+end