aboutsummaryrefslogtreecommitdiff
path: root/noao/digiphot/photcal/mkimsets.cl
diff options
context:
space:
mode:
Diffstat (limited to 'noao/digiphot/photcal/mkimsets.cl')
-rw-r--r--noao/digiphot/photcal/mkimsets.cl186
1 files changed, 186 insertions, 0 deletions
diff --git a/noao/digiphot/photcal/mkimsets.cl b/noao/digiphot/photcal/mkimsets.cl
new file mode 100644
index 00000000..2d90a321
--- /dev/null
+++ b/noao/digiphot/photcal/mkimsets.cl
@@ -0,0 +1,186 @@
+# MKIMSETS -- Create an image set file which describes which images of a given
+# region of the sky form a complete observation.
+#
+# This script requires the IMAGES task HSELECT, the PTOOLS task DUMP, and
+# the PROTO task FIELDS. THE IRAF core system tasks UNIQUE (LISTS package),
+# FILES, DELETE, RENAME, CONCATENATE, and MATCH (SYSTEM package) and FSCAN,
+# ACCESS, MKTEMP and EDIT (LANGUAGE package) are also used.
+
+procedure mkimsets (imlist, idfilters, imsets)
+
+file imlist {prompt="The input image list"}
+string idfilters {prompt="The list of filter ids"}
+file imsets {prompt="The output image set file"}
+file imobsparams {"", prompt="The output image observing parameters file"}
+
+string input {"photfiles", enum="images|photfiles|user",
+ prompt="The source of the input image list"}
+string filter {prompt="The filter keyword"}
+string fields {"", prompt="Additional image list fields"}
+
+string sort {"", prompt="The image list field to be sorted on"}
+bool edit {yes, prompt="Edit the input image list before grouping"}
+bool rename {yes, prompt="Prompt the user for image set names"}
+bool review {yes, prompt="Review the image set file with the editor"}
+
+struct *list
+
+begin
+ # Declare local variables.
+ int tcolumn, nfields
+ string tlist, tidfilters, timsets, tobsparams, tfields, tfilter, tsort
+ string tfile1, tfile2, tstr
+
+ # Get the parameters.
+ tlist = imlist
+ tidfilters = idfilters
+ timsets = imsets
+ if (access (timsets)) {
+ error (1,
+ "The image observation set file " // timsets // " already exists")
+ }
+ tobsparams = imobsparams
+ if (access (tobsparams)) {
+ error (1,
+ "The observing parameters file " // tobsparams // " already exists")
+ }
+
+ # Create temporary file names to store the intermediate sets of images.
+
+ tfile1 = mktemp ("tmp$")
+
+ # Construct the initial list of images and write them to a file.
+ # Sort on the image name and remove duplicate lines.
+
+ if (input == "photfiles") {
+
+ tfilter = "IFILTER"
+ tfields = "ITIME,XAIRMASS,OTIME" // "," // fields
+ tbkeycol (tlist, "IMAGE," // tfilter // "," // tfields)
+ pdump (tlist, "IMAGE," // tfilter // "," // tfields,
+ "yes", headers=no, parameters=yes) |
+ system.sort ("STDIN", column=0, ignore_white=no,
+ numeric_sort=no, reverse_sort=no) |
+ unique ("STDIN", > tfile1)
+
+ } else if (input == "images") {
+
+ tfilter = filter
+ tfields = fields
+ hselect (tlist, "$I," // tfilter // "," // tfields, yes) |
+ system.sort ("STDIN", column=0, ignore_white=no,
+ numeric_sort=no, reverse_sort=no) |
+ unique ("STDIN", > tfile1)
+
+ } else if (input == "user") {
+
+ tfilter = filter
+ tfields = fields
+ fields (tlist, "1," // tfilter // "," // tfields,
+ lines="1-9999", quit_if_missing=no,
+ print_file_name=no) |
+ unique ("STDIN", > tfile1)
+
+ }
+
+ # Create temporary file names to store the intermediate sets of images.
+
+ tfile2 = mktemp ("tmp$")
+
+ # Determine the column to be sorted on and store it in the parameter
+ # tcolumn. The files routine breaks up the fields parameter into
+ # its component parts and removes any imbedded commas.
+
+ tsort = sort
+ if (tsort == "") {
+ tcolumn = 0
+ } else if (tsort == "image") {
+ tcolumn = 1
+ } else if (tsort == tfilter) {
+ tcolumn = 2
+ } else {
+ files (tfields, sort=no, > tfile2)
+ tcolumn = 0
+ nfields = 0
+ list = tfile2
+ while (fscan (list, tstr) != EOF) {
+ nfields = nfields + 1
+ if (tsort != tstr)
+ next
+ tcolumn = nfields + 2
+ break
+ }
+ list = ""
+ delete (tfile2, verify-, default_action+, allversions+,
+ subfiles+, >& "dev$null")
+ }
+
+ # Create a temporary file name to store the sorted list.
+
+ tfile2 = mktemp ("tmp$")
+
+ # Sort the image list on the user defined column.
+
+ if (tcolumn > 0) {
+ system.sort (tfile1, column=tcolumn, ignore_white-,
+ numeric_sort+, reverse_sort-, > tfile2)
+ delete (tfile1, verify-, default_action+, allversions+, subfiles+,
+ >& "dev$null")
+ rename (tfile2, tfile1)
+ }
+
+ # Insert an explanatory message at the beginning of the temporary
+ # image list file.
+
+ concatenate ("photcal$mkimsets/imlist.key" // "," // tfile1,
+ tfile2, out_type="in_type", append=no)
+ delete (tfile1, verify-, default_action+, allversions+, subfiles+,
+ >& "dev$null")
+
+ # Allow the user to edit the temporary image list file.
+
+ if (edit)
+ edit (tfile2)
+
+ # Group the images in the image list file and optionally supply a
+ # name for each image set.
+
+ tfile1 = mktemp ("tmp$")
+ imgroup (tfile2, timsets, tidfilters, rename=rename,
+ >& tfile1, > "STDOUT")
+
+ # Remove the leading message and write the output obsparams file.
+
+ if (tobsparams != "")
+ match ("^ \#", tfile2, metacharacters+, stop+,
+ print_file_names+, > tobsparams)
+
+ # Delete the temporary file.
+
+ delete (tfile2, verify-, default_action+, allversions+, subfiles+,
+ >& "dev$null")
+
+ # Allow the user to edit the new image sets file. If review is yes
+ # prepend the error message file to the image set file and enter
+ # the editor. Other wise simply type the error messages to the
+ # standard output.
+
+ if (review) {
+ concatenate ("photcal$mkimsets/imsets.key," // tfile1 //
+ "," // timsets, tfile2, out_type="in_type", append=no)
+ edit (tfile2)
+ delete (timsets, verify-, default_action+, allversions+, subfiles+,
+ >& "dev$null")
+ match ("^<", tfile2, metacharacters+, stop+, print_file_names+) |
+ match ("^ \#", "STDIN", metacharacters+, stop+, print_file_names+,
+ > timsets)
+ delete (tfile2, verify-, default_action+, allversions+, subfiles+,
+ >& "dev$null")
+ } else
+ type (tfile1)
+
+ # Delete the temporary file.
+
+ delete (tfile1, verify-, default_action+, allversions+, subfiles+,
+ >& "dev$null")
+end