aboutsummaryrefslogtreecommitdiff
path: root/noao/twodspec/multispec/t_newextract.x
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/twodspec/multispec/t_newextract.x
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'noao/twodspec/multispec/t_newextract.x')
-rw-r--r--noao/twodspec/multispec/t_newextract.x99
1 files changed, 99 insertions, 0 deletions
diff --git a/noao/twodspec/multispec/t_newextract.x b/noao/twodspec/multispec/t_newextract.x
new file mode 100644
index 00000000..0e695222
--- /dev/null
+++ b/noao/twodspec/multispec/t_newextract.x
@@ -0,0 +1,99 @@
+include <imhdr.h>
+include "ms.h"
+
+# T_NEW_EXTRACTION -- Create a new extraction database.
+#
+# This is the first step in using the MULTISPEC package. The new database
+# may be created from scratch or intialized from an template image.
+
+procedure t_new_extraction ()
+
+# Task parameters:
+char image[SZ_FNAME] # Multi-spectra image
+char template[SZ_FNAME] # Template image
+int samples[3, MAX_RANGES] # Sample line range array
+
+char comment[SZ_LINE]
+char database[SZ_FNAME], old_database[SZ_FNAME]
+pointer im, ms
+
+bool strne()
+int clgranges(), expand_ranges()
+pointer immap(), msmap()
+
+begin
+ # Get database and image name. Map the image and check that
+ # it is two dimensional.
+ call clgstr ("image", image, SZ_FNAME)
+ im = immap (image, READ_ONLY, 0)
+ if (IM_NDIM(im) != 2)
+ call error (MS_ERROR, "Image file must be two dimensional.")
+
+ # Get the template image name.
+ call clgstr ("template", template, SZ_FNAME)
+
+ if (strne (template, "")) {
+ # If a template is given then map the template and check
+ # that the new image dimensions agree with the old dimensions.
+
+ ms = msmap (template, READ_ONLY, 0)
+ if ((MS_LEN(ms, 1) != IM_LEN(im, 1)) ||
+ (MS_LEN(ms, 2) != IM_LEN(im, 2)))
+ call error (MS_ERROR,
+ "New image size does not agree with the old image size.")
+ call msunmap (ms)
+
+ # Copy the old database. Map the new database and clear the
+ # the old comments before adding a new comment.
+
+ call sprintf (database, SZ_FNAME, "%s.db")
+ call pargstr (image)
+ call sprintf (old_database, SZ_FNAME, "%s.db")
+ call pargstr (template)
+ call fcopy (old_database, database)
+
+ ms = msmap (image, READ_WRITE, 0)
+ COMMENT(ms, 1) = EOS
+ call sprintf (comment, SZ_LINE,
+ "Database initialized from the template image %s.")
+ call pargstr (template)
+ call history (ms, comment)
+
+ } else {
+ # For a new database initialize the header parameters.
+ ms = msmap (image, NEW_FILE, MS_DB_ENTRIES)
+ MS_LEN(ms, 1) = IM_LEN(im, 1)
+ MS_LEN(ms, 2) = IM_LEN(im, 2)
+ MS_NSPECTRA(ms) = 0
+
+ # Get the sample line ranges and set the number of sample lines
+ # in the database header.
+ MS_NSAMPLES(ms) = clgranges ("sample_lines", 1, MS_LEN (ms, 2),
+ samples, MAX_RANGES)
+
+ # Make an entry in the database for the sample lines and then
+ # access the entry in order to allocate memory for the sample
+ # line array.
+ call dbenter (MS_DB(ms), NAME(ms, SAMPLE), MS_NSAMPLES(ms)*SZ_INT,1)
+ call msgsample (ms)
+
+ # Expand the sample line range array into the sample line array.
+ # Then put the sample line array in the database.
+ MS_NSAMPLES(ms) = expand_ranges (samples, LINE(ms, 1),
+ MS_NSAMPLES(ms))
+ call mspsample (ms)
+
+ # Add a history line.
+ call history (ms, "New MULTISPEC database created.")
+ }
+
+ # Set the image name and image title in the database.
+ call strcpy (image, MS_IMAGE(ms), SZ_MS_IMAGE)
+ call strcpy (IM_TITLE(im), MS_TITLE(ms), SZ_MS_TITLE)
+
+ # Close image and database. Write the database header record before
+ # closing the database.
+ call imunmap (im)
+ call msphdr (ms)
+ call msunmap (ms)
+end