aboutsummaryrefslogtreecommitdiff
path: root/noao/nproto/mkms.cl
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /noao/nproto/mkms.cl
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'noao/nproto/mkms.cl')
-rw-r--r--noao/nproto/mkms.cl104
1 files changed, 104 insertions, 0 deletions
diff --git a/noao/nproto/mkms.cl b/noao/nproto/mkms.cl
new file mode 100644
index 00000000..2944bca1
--- /dev/null
+++ b/noao/nproto/mkms.cl
@@ -0,0 +1,104 @@
+# MKMS -- Simple script to make a multispec file from separate 1D spectra.
+# The task SCOPY will make a multispec file but it does not handle associated
+# arrays such as background and errors. This task builds on SCOPY by adding
+# the associated arrays in the proper format.
+#
+# This task does very little error checking. The various lists are assumed
+# to be null (i.e. "") or have the same number of spectra. The associated
+# spectra are also assumed to have matching dispersions with their primary
+# spectrum.
+#
+# To install MKMS copy the script to your home or other directory. Load the
+# onedspec package. Add the task with the command "task mkms=home$mkms.cl".
+# Note you can replace the home$ with the full or logical path to another
+# directory if the script is not in your home directory. The steps of
+# loading onedspec and defining the script task may be done in the login.cl
+# or loginuser.cl file for permanent use.
+
+procedure mkms (output, spectra, raw, background, sigma)
+
+file output {prompt="Output multispec file"}
+string spectra {prompt="List of primary spectra"}
+string raw {prompt="List of raw (secondary) spectra"}
+string background {prompt="List of background spectra"}
+string sigma {prompt="List of sigma spectra"}
+
+begin
+ file out, temp1, temp2, temp3, temp4, temp5
+ string in, outlist, bandid
+ int nspec, nbands
+
+ # Temporary files in the current directory.
+ temp1 = mktemp ("temp")
+ temp2 = mktemp ("temp")
+ temp3 = mktemp ("temp")
+ temp4 = mktemp ("temp")
+ temp5 = mktemp ("temp")
+
+ # Get query parameters once and do a simple check for input.
+ out = output
+ in = spectra
+ if (in == "")
+ error (1, "No primary spectra specified")
+
+ # Load ONEDSPEC if not already loaded.
+ if (!defpac ("onedspec"))
+ onedspec
+
+ # Create the primary multispec format from 1D spectra using SCOPY.
+ scopy (in, temp1, w1=INDEF, w2=INDEF, apertures="", bands="",
+ beams="", apmodulus=0, format="multispec", renumber=yes,
+ offset=0, clobber=no, merge=no, rebin=yes, verbose=no)
+ hedit (temp1, "bandid1", "spectrum", add+, verify-, show-, update+)
+
+ # Determine the number of spectra and initialize the bands accumulators.
+ nspec = 1
+ hselect (temp1, "naxis2", yes) | scan (nspec)
+ nbands = 1
+ outlist = temp1
+
+ # Create bands if specified. Don't worry about headers since the
+ # header of the primary multispec format will be inherited.
+
+ in = raw
+ if (in != "") {
+ imstack (in, temp2, title="*", pixtype="*")
+ outlist = outlist // "," // temp2
+ nbands = nbands + 1
+ printf ("bandid%d\n", nbands) | scan (bandid)
+ hedit (temp1, bandid, "raw", add+, verify-, show-, update+)
+ }
+ in = background
+ if (in != "") {
+ imstack (in, temp3, title="*", pixtype="*")
+ outlist = outlist // "," // temp3
+ nbands = nbands + 1
+ printf ("bandid%d\n", nbands) | scan (bandid)
+ hedit (temp1, bandid, "background", add+, verify-, show-, update+)
+ }
+ in = sigma
+ if (in != "") {
+ imstack (in, temp4, title="*", pixtype="*")
+ outlist = outlist // "," // temp4
+ nbands = nbands + 1
+ printf ("bandid%d\n", nbands) | scan (bandid)
+ hedit (temp1, bandid, "sigma", add+, verify-, show-, update+)
+ }
+
+ # Make the final output format. Adjust dimensions are needed.
+ # A multispec file maybe 1D, 2D, or 3D depending on the content.
+
+ if (nbands == 1)
+ imcopy (temp1, out, verbose-)
+ else {
+ if (nspec == 1) {
+ imrename (temp1, temp5, verbose-)
+ imstack (temp5, temp1, title="*", pixtype="*")
+ imdelete (temp5, verify-)
+ }
+ imstack (outlist, out, title="*", pixtype="*")
+ }
+
+ # Finish up.
+ imdelete (outlist, verify-)
+end