aboutsummaryrefslogtreecommitdiff
path: root/noao/onedspec/rspectext.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/onedspec/rspectext.cl
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'noao/onedspec/rspectext.cl')
-rw-r--r--noao/onedspec/rspectext.cl115
1 files changed, 115 insertions, 0 deletions
diff --git a/noao/onedspec/rspectext.cl b/noao/onedspec/rspectext.cl
new file mode 100644
index 00000000..328ab59e
--- /dev/null
+++ b/noao/onedspec/rspectext.cl
@@ -0,0 +1,115 @@
+# RSPECTEXT -- Read a 1D ascii text spectrum into an image spectrum
+# The image is created from an optional header and the flux values
+# using RTEXTIMAGE. If there is no header the title, dispersion,
+# and flux calibration may be set. The dispersion can be defined
+# as linear, log linear, or from the wavelengths. The latter may be
+# used as a lookup table in the image header or used to interpolate
+# the spectrum to a linear wavelength dispersion.
+
+procedure rspectext (input, output)
+
+string input {prompt="Input list of text spectra"}
+string output {prompt="Output list of image spectra"}
+
+string title = "" {prompt="Spectrum title"}
+bool flux = no {prompt="Flux calibrated?"}
+string dtype = "linear" {prompt="Dispersion type",
+ enum="none|linear|log|nonlinear|interp"}
+real crval1 = 1. {prompt="Coordinate of first pixel"}
+real cdelt1 = 1. {prompt="Coordinate interval per pixel"}
+
+struct *fd1, *fd2
+
+begin
+ int dim
+ string specin, specout, spec, temp1, temp2, temp3, temp4
+ bool header=no
+ bool log=no
+
+ specin = mktemp ("tmp$iraf")
+ specout = mktemp ("tmp$iraf")
+ spec = mktemp ("tmp$iraf")
+ temp1 = mktemp ("tmp$iraf")
+ temp3 = mktemp ("iraf")
+ temp2 = "tmp$id"//temp3
+
+ # Expand the input and output lists.
+ files (input, sort=no, > specin)
+ files (output, sort=no, > specout)
+ join (specin, specout, output=spec, delim=" ", shortest=yes, verbose=yes)
+ delete (specin, verify-)
+ delete (specout, verify-)
+
+ # Go through each input and check for an existing output.
+ fd2 = spec
+ while (fscan (fd2, specin, specout) != EOF) {
+ if (access(specout)||access(specout//".imh")||access(specout//".hhh")) {
+ print ("Image "//specout//" already exists")
+ next
+ }
+
+ # Separate the header and flux values for RTEXTIMAGE and the
+ # wavelengths for later use.
+
+ rstext (specin, temp1, temp2, header=header) | scan (header, dim)
+
+ # Create the image from the header and flux values.
+ rtextimage (temp1, specout, otype="real", header=header, pixels=yes,
+ nskip=0, dim=dim)
+ fd1 = ""; delete (temp1, verify-)
+
+ # If there is no header setup the title, dispersion and flux.
+ # The dispersion may require using DISPCOR for nonlinear or
+ # resampled dispersion functions.
+
+ if (!header) {
+ hedit (specout, "title", title,
+ add+, addonly-, del-, update+, verify-, show-)
+ if (dtype == "linear") {
+ hedit (specout, "dc-flag", 0,
+ add+, addonly-, del-, update+, verify-, show-)
+ hedit (specout, "crpix1", 1.,
+ add+, addonly-, del-, update+, verify-, show-)
+ hedit (specout, "crval1", crval1,
+ add+, addonly-, del-, update+, verify-, show-)
+ hedit (specout, "cdelt1", cdelt1,
+ add+, addonly-, del-, update+, verify-, show-)
+ } else if (dtype == "log") {
+ hedit (specout, "dc-flag", 1,
+ add+, addonly-, del-, update+, verify-, show-)
+ hedit (specout, "crpix1", 1.,
+ add+, addonly-, del-, update+, verify-, show-)
+ hedit (specout, "crval1", crval1,
+ add+, addonly-, del-, update+, verify-, show-)
+ hedit (specout, "cdelt1", cdelt1,
+ add+, addonly-, del-, update+, verify-, show-)
+ } else if (dtype == "nonlinear") {
+ hedit (specout, "refspec1", temp3,
+ add+, addonly-, del-, update+, verify-, show-)
+ dispcor (specout, "", linearize=no, database="tmp$",
+ table="", w1=INDEF, w2=INDEF, dw=INDEF, nw=INDEF, log=log,
+ flux=no, samedisp=no, global=no, ignoreaps=no, confirm=no,
+ listonly=no, verbose=no, logfile="")
+ hedit (specout, "dclog1",
+ add-, addonly-, del+, update+, verify-, show-)
+ } else if (dtype == "interp") {
+ hedit (specout, "refspec1", temp3,
+ add+, addonly-, del-, update+, verify-, show-)
+ dispcor (specout, "", linearize=yes, database="tmp$",
+ table="", w1=INDEF, w2=INDEF, dw=INDEF, nw=INDEF, log=log,
+ flux=no, samedisp=no, global=no, ignoreaps=no, confirm=no,
+ listonly=no, verbose=no, logfile="")
+ hedit (specout, "dclog1",
+ add-, addonly-, del+, update+, verify-, show-)
+ }
+ if (flux) {
+ hedit (specout, "ca-flag", 0,
+ add+, addonly-, del-, update+, verify-, show-)
+ hedit (specout, "ex-flag", 0,
+ add+, addonly-, del-, update+, verify-, show-)
+ }
+ }
+ delete (temp2, verify-)
+ }
+ fd2=""; delete (spec, verify-)
+end