aboutsummaryrefslogtreecommitdiff
path: root/noao/imred/irred/mosproc.cl
diff options
context:
space:
mode:
Diffstat (limited to 'noao/imred/irred/mosproc.cl')
-rw-r--r--noao/imred/irred/mosproc.cl172
1 files changed, 172 insertions, 0 deletions
diff --git a/noao/imred/irred/mosproc.cl b/noao/imred/irred/mosproc.cl
new file mode 100644
index 00000000..3fa89405
--- /dev/null
+++ b/noao/imred/irred/mosproc.cl
@@ -0,0 +1,172 @@
+# MOSPROC - Sky subtract, flat field and transpose images before mosaicing.
+
+procedure mosproc (input, output, nxsub, nysub)
+
+string input {prompt="Input images"}
+string output {prompt="Output image"}
+int nxsub {8, prompt="Number of subrasters in x"}
+int nysub {8, prompt="Number of subrasters in y"}
+
+bool skysubtract {yes, prompt="Sky subtract images before mosaicing"}
+string sky {"", prompt="Sky image to subtract"}
+string exclude {"", prompt="Input images excluded from sky frame"}
+string expname {"EXPTIME", prompt="Image exposure time keywords"}
+
+bool flatten {yes, prompt="Flatten images before mosaicing"}
+string flat {"", prompt="Flat field image"}
+bool transpose {no, prompt="Transpose images before mosaicing?"}
+
+string trim_section {"[*,*]", prompt="Input image section to be extracted"}
+string corner {"lr", prompt="Starting corner for the mosaic"}
+string direction {"row", prompt="Starting direction for the mosaic"}
+bool raster {no, prompt="Raster scan?"}
+string median_section {"", prompt="Input subraster section for median ?"}
+bool subtract {no, prompt="Substract median from each subraster?"}
+real oval {-1.0, prompt="Mosaic border pixel values"}
+
+bool delete {yes, prompt="Delete temporary images?"}
+file logfile {"STDOUT", prompt="Log file name"}
+
+struct *list1, *list2
+
+begin
+ file tmpimg, tmptmp, tmpred, tmpexc
+ int nx, ny, i, nin, lo, hi
+ string skyframe, normframe, in, out, img, delim, junk
+
+ tmpimg = mktemp ("MOS")
+ tmptmp = mktemp ("MOS")
+ tmpred = mktemp ("MOS")
+ tmpexc = mktemp ("tmp$MOS")
+
+ # Get positional parameters
+ in = input
+ out = output
+ nx = nxsub
+ ny = nysub
+
+ # Expand input file name list removing the ".imh" extensions.
+ sections (in, option="fullname", > tmptmp)
+ list1 = tmptmp
+ for (nin = 0; fscan (list1, img) != EOF; nin += 1) {
+ i = strlen (img)
+ if (substr (img, i-3, i) == ".imh")
+ img = substr (img, 1, i-4)
+ print (img, >> tmpimg)
+ print (img // ".red", >> tmpred)
+ }
+ list1 = ""; delete (tmptmp, ver-, >& "dev$null")
+
+ # Expand the range of images to skip.
+ if (skysubtract && sky != "") {
+
+ skyframe = sky
+ imarith ("@"//tmpimg, "-", skyframe, "@"//tmpred, title="",
+ divzero=0., hparams="", pixtype="", calctype="", verbose+,
+ noact-, >> logfile)
+
+ } else if (skysubtract) {
+
+ print (exclude, ",") | translit ("", "^-,0-9", del+) |
+ translit ("", "-", "!", del-) | tokens (new-) |
+ translit ("", "\n,", " \n", del-, > tmpexc)
+
+ type (tmpexc, >> logfile)
+
+ list1 = tmpexc
+ while (fscan (list1, lo, delim, hi, junk) != EOF) {
+ if (nscan() == 0)
+ next
+ else if (nscan() == 1 && lo >= 1)
+ print (lo, >> tmptmp)
+ else if (nscan() == 3) {
+ lo = min (max (lo, 1), nin); hi = min (max (hi, 1), nin)
+ for (i = lo; i <= hi; i += 1)
+ print (i, >> tmptmp)
+ }
+ }
+ list1 = ""; delete (tmpexc, ver-, >& "dev$null")
+
+ if (access (tmptmp)) {
+ sort (tmptmp, col=0, ign+, num+, rev-) | unique (> tmpexc)
+ delete (tmptmp, ver-, >& "dev$null")
+
+ list1 = tmpimg; list2 = tmpexc; junk = fscan (list2, nin)
+ for (i = 1; fscan (list1, img) != EOF; i += 1) {
+ if (i == nin) {
+ junk = fscan (list2, nin)
+ next
+ }
+ print (img, >> tmptmp)
+ }
+ list1 = ""; list2 = ""; delete (tmpexc, ver-, >& "dev$null")
+ } else
+ tmptmp = tmpimg
+
+ skyframe = out // ".sky"
+
+ imcombine ("@"//tmptmp, skyframe, rejmask="", plfile="", sigma="",
+ logfile=logfile, combine="median", reject="none", project=no,
+ outtype="real", offsets="none", masktype="none", maskvalue=0.0,
+ blank=-1.0, scale="exposure", zero="none", weight="exposure",
+ statsec="", expname=expname, lthreshold=INDEF,
+ hthreshold=INDEF, nlow=1, nhigh=1, nkeep=1, mclip=yes,
+ lsigma=3.0, hsigma=3.0, rdnoise="0.0", gain="1.0", snoise="0.0",
+ sigscale=0.1, pclip=-0.5, grow=0)
+ print ("\n", >> logfile)
+ imarith ("@"//tmpimg, "-", skyframe, "@"//tmpred, title="",
+ divzero=0., hparams="", pixtype="", calctype="", verbose+,
+ noact-, >> logfile)
+
+ } else {
+
+ skyframe = ""
+ imcopy ("@"//tmpimg, "@"//tmpred, verbose-)
+ }
+
+ if (flatten) {
+ if (flat != "") {
+ print ("\n", >> logfile)
+ flatten ("@"//tmpred, flat, minflat=INDEF, pixtype="",
+ keeplog=yes, logfile=logfile)
+ } else if (skyframe != "") {
+ print ("\n", >> logfile)
+ normframe = out // ".norm"
+ imcopy (skyframe, normframe, verbose-)
+ bscale (normframe, normframe, bzero="0.0", bscale="mode",
+ section="", step=10, lower=INDEF, upper=INDEF,
+ verbose+, >>logfile)
+ print ("\n", >> logfile)
+ flatten ("@"//tmpred, normframe, minflat=INDEF, pixtype="",
+ keeplog=yes, logfile=logfile)
+ }
+ }
+
+ if (transpose) {
+ print ("\nTRANSPOSE: Transpose images", >> logfile)
+ time (, >> logfile)
+ imtrans ("@"//tmpred, "@"//tmpred)
+ time (, >> logfile)
+ print ("TRANSPOSE: done", >> logfile)
+ }
+
+ print ("\nIRMOSAIC: Mosaic images", >> logfile)
+ time (, >> logfile)
+ irmosaic ("@"//tmpred, out, "db"//out, nx, ny,
+ trim_section=trim_section, null_input="", corner=corner,
+ direction=direction, raster=raster, nxover=-1, nyover=-1,
+ nimcols=INDEF, nimrows=INDEF, oval=oval,
+ median_section=median_section, sub=subtract, opixtype="r",
+ verbose+, >> logfile)
+ time (, >> logfile)
+ print ("IRMOSAIC: done", >> logfile)
+
+ if (delete) {
+ if (access (tmpred))
+ imdelete ("@"//tmpred, ver-, >& "dev$null")
+ }
+
+ delete (tmpimg, ver-, >& "dev$null")
+ delete (tmptmp, ver-, >& "dev$null")
+ delete (tmpred, ver-, >& "dev$null")
+end