diff options
author | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
---|---|---|
committer | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
commit | 40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch) | |
tree | 4464880c571602d54f6ae114729bf62a89518057 /noao/onedspec/rspectext.cl | |
download | iraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz |
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'noao/onedspec/rspectext.cl')
-rw-r--r-- | noao/onedspec/rspectext.cl | 115 |
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 |