diff options
Diffstat (limited to 'noao/imred/src/dofoe/arcrefs.cl')
-rw-r--r-- | noao/imred/src/dofoe/arcrefs.cl | 106 |
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 |