aboutsummaryrefslogtreecommitdiff
path: root/noao/imred/src/fibers/batch.cl
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /noao/imred/src/fibers/batch.cl
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'noao/imred/src/fibers/batch.cl')
-rw-r--r--noao/imred/src/fibers/batch.cl297
1 files changed, 297 insertions, 0 deletions
diff --git a/noao/imred/src/fibers/batch.cl b/noao/imred/src/fibers/batch.cl
new file mode 100644
index 00000000..84b0a7b7
--- /dev/null
+++ b/noao/imred/src/fibers/batch.cl
@@ -0,0 +1,297 @@
+# BATCH -- Process spectra in batch.
+# This task is called in batch mode. It only processes objects
+# not previously processed unless the update or redo flags are set.
+
+procedure batch ()
+
+string objects {prompt="Object spectra"}
+real datamax {prompt="Max data value / cosmic ray threshold"}
+
+file response {prompt="Response spectrum"}
+string arcs1 {prompt="List of arc spectra"}
+string arcs2 {prompt="List of shift arc spectra"}
+file arcref1 {prompt="Arc reference for dispersion solution"}
+file arcref2 {prompt="Arc reference for dispersion solution"}
+file arcreplace {prompt="Special aperture replacements"}
+string arcrefs {prompt="Arc references"}
+string extn {prompt="Extraction extension"}
+
+file apidtable {prompt="Aperture identifications"}
+string objaps {prompt="Object apertures"}
+string skyaps {prompt="Sky apertures"}
+string arcaps {prompt="Arc apertures"}
+string objbeams {prompt="Object beam numbers"}
+string skybeams {prompt="Sky beam numbers"}
+string arcbeams {prompt="Arc beam numbers\n"}
+
+file done {prompt="File of spectra already done"}
+file logfile {prompt="Logfile"}
+
+bool redo {prompt="Redo operations?"}
+bool update {prompt="Update spectra?"}
+bool scattered {prompt="Subtracted scattered light?"}
+bool arcap {prompt="Use object apertures for arcs?"}
+bool dispcor {prompt="Dispersion correct spectra?"}
+bool savearcs {prompt="Save internal arcs?"}
+bool skyalign {prompt="Align sky lines?"}
+bool skysubtract {prompt="Subtract sky?"}
+bool saveskys {prompt="Save sky spectra?\n"}
+
+bool newaps, newresp, newdisp, newarcs
+
+struct *fd1, *fd2, *fd3
+
+begin
+ file objs, temp, temp1, spec, specms, arc
+ bool reextract, extract, scat, disp, sky, log
+ string imtype, mstype, str, str2, str3, str4
+ int i
+
+ imtype = "." // envget ("imtype")
+ i = stridx (",", imtype)
+ if (i > 0)
+ imtype = substr (imtype, 1, i-1)
+ mstype = ".ms" // imtype
+
+ objs = mktemp ("tmp$iraf")
+ temp = mktemp ("tmp$iraf")
+ temp1 = mktemp ("tmp$iraf")
+
+ # Initialize extraction to be noninteractive.
+ if (apscript.ansrecenter == "yes")
+ apscript.ansrecenter = "YES"
+ else if (apscript.ansrecenter == "no")
+ apscript.ansrecenter = "NO"
+ apscript.ansedit = "NO"
+ if (apscript.anstrace == "yes") {
+ apscript.anstrace = "YES"
+ apscript.ansfittrace = "NO"
+ } else if (apscript.anstrace == "no")
+ apscript.anstrace = "NO"
+
+ reextract = redo || (update && (newaps || newresp || newdisp))
+
+ getspec (objects, objs)
+ fd1 = objs
+ while (fscan (fd1, spec) != EOF) {
+ if (access (done)) {
+ fd2 = done
+ while (fscan (fd2, specms) != EOF)
+ if (spec == specms)
+ break
+ if (spec == specms)
+ next
+ fd2 = ""
+ }
+ if (!access (spec // imtype)) {
+ printf ("Object spectrum not found - %s%s\nCheck setting of imtype\n", spec, imtype, >> logfile)
+ next
+ }
+ specms = spec // mstype
+
+ scat = no
+ extract = no
+ disp = no
+ sky = no
+ if (scattered) {
+ if (redo && access (spec//"noscat"//imtype)) {
+ imdelete (spec, verify=no)
+ imrename (spec//"noscat", spec)
+ }
+ hselect (spec, "apscatte", yes) | scan (str)
+ if (nscan() == 0)
+ scat = yes
+ }
+ if (reextract || !access (specms) || (update && scat))
+ extract = yes
+ else {
+ hselect (specms, "dclog1", yes) | scan (str)
+ if (nscan () == 1) {
+ extract = update && newdisp
+ if (update && !newdisp)
+ # We really should check if REFSPEC will assign
+ # different reference spectra.
+ ;
+ } else
+ disp = dispcor
+
+ hselect (specms, "skysub", yes) | scan (str)
+ if (nscan() == 0)
+ sky = skysubtract
+ }
+
+ if (extract) {
+ disp = dispcor
+ sky = skysubtract
+ }
+
+ if (extract) {
+ if (access (specms))
+ imdelete (specms, verify=no)
+ if (scat) {
+ print ("Subtract scattered light from ", spec, >> logfile)
+ imrename (spec, spec//"noscat")
+ apscript (spec//"noscat", output=spec, ansextract="NO",
+ ansscat="YES", anssmooth="YES", verbose=no)
+ }
+ print ("Extract object spectrum ", spec, >> logfile)
+ hselect (spec, "date-obs,ut,exptime", yes, > temp1)
+ hselect (spec, "ra,dec,epoch,st", yes, >> temp1)
+ fd3 = temp1
+ if (fscan (fd3, str, str2, str3) == 3) {
+ setjd (spec, observatory=observatory, date="date-obs",
+ time="ut", exposure="exptime", jd="jd", hjd="",
+ ljd="ljd", utdate=yes, uttime=yes, listonly=no,
+ >> logfile)
+ if (fscan (fd3, str, str2, str3, str4) == 4)
+ setairmass (spec, intype="beginning",
+ outtype="effective", exposure="exptime",
+ observatory=observatory, show=no, update=yes,
+ override=yes, >> logfile)
+ }
+ fd3 = ""; delete (temp1, verify=no)
+ apscript (spec, nsubaps=params.nsubaps, saturation=datamax,
+ verbose=no)
+ sapertures (specms, apertures="", apidtable=apidtable,
+ wcsreset=no, verbose=no, beam=INDEF, dtype=INDEF, w1=INDEF,
+ dw=INDEF, z=INDEF, aplow=INDEF, aphigh=INDEF, title=INDEF)
+ if (response != "") {
+ if (params.nsubaps == 1)
+ sarith (specms, "/", response, specms, w1=INDEF,
+ w2=INDEF, apertures="", bands="", beams="",
+ apmodulus=0, reverse=no, ignoreaps=no,
+ format="multispec", renumber=no, offset=0,
+ clobber=yes, merge=no, errval=0, verbose=no)
+ else {
+ blkrep (response, temp, 1, params.nsubaps)
+ sarith (specms, "/", temp, specms, w1=INDEF,
+ w2=INDEF, apertures="", bands="", beams="",
+ apmodulus=0, reverse=no, ignoreaps=yes,
+ format="multispec", renumber=no, offset=0,
+ clobber=yes, merge=no, errval=0, verbose=no)
+ imdelete (temp, verify=no)
+ }
+ }
+ }
+
+ if (disp) {
+ # Fix arc headers if necessary.
+ if (newarcs) {
+ getspec (arcs1, temp)
+ fd2 = temp
+ while (fscan (fd2, arc) != EOF) {
+ hselect (arc, "date-obs,ut,exptime", yes, > temp1)
+ hselect (arc, "ra,dec,epoch,st", yes, >> temp1)
+ fd3 = temp1
+ if (fscan (fd3, str, str2, str3) == 3) {
+ setjd (arc, observatory=observatory, date="date-obs",
+ time="ut", exposure="exptime", jd="jd", hjd="",
+ ljd="ljd", utdate=yes, uttime=yes, listonly=no,
+ >> logfile)
+ if (fscan (fd3, str, str2, str3, str4) == 4)
+ setairmass (arc, intype="beginning",
+ outtype="effective", exposure="exptime",
+ observatory=observatory, show=no, update=yes,
+ override=yes, >> logfile)
+ }
+ fd3 = ""; delete (temp1, verify=no)
+ hedit (arc, "refspec1", arc, add=yes, verify=no,
+ show=no, update=yes)
+ hedit (arc, "arctype", "henear", add=yes, verify=no,
+ show=no, update=yes)
+ }
+ fd2 = ""; delete (temp, verify=no)
+ getspec (arcs2, temp)
+ fd2 = temp
+ while (fscan (fd2, arc) != EOF) {
+ hselect (arc, "date-obs,ut,exptime", yes, > temp1)
+ hselect (arc, "ra,dec,epoch,st", yes, >> temp1)
+ fd3 = temp1
+ if (fscan (fd3, str, str2, str3) == 3) {
+ setjd (arc, observatory=observatory,
+ date="date-obs", time="ut", exposure="exptime",
+ jd="jd", hjd="", ljd="ljd", utdate=yes,
+ uttime=yes, listonly=no, >> logfile)
+ if (fscan (fd3, str, str2, str3, str4) == 4)
+ setairmass (arc, intype="beginning",
+ outtype="effective", exposure="exptime",
+ observatory=observatory, show=no,
+ update=yes, override=yes, >> logfile)
+
+ }
+ fd3 = ""; delete (temp1, verify=no)
+ hedit (arc, "refspec1", arc, add=yes, verify=no,
+ show=no, update=yes)
+ hedit (arc, "arctype", "shift", add=yes, verify=no,
+ show=no, update=yes)
+ }
+ fd2 = ""; delete (temp, verify=no)
+ newarcs = no
+ }
+
+ print ("Assign arc spectra for ", spec, >> logfile)
+ refspectra (spec, references=arcrefs,
+ apertures="", refaps="", ignoreaps=no,
+ select=params.select, sort=params.sort,
+ group=params.group, time=params.time,
+ timewrap=params.timewrap, override=yes, confirm=no,
+ assign=yes, logfiles="STDOUT", verbose=no,
+ >> logfile)
+
+ doarcs (spec, response, arcref1, arcref2, extn, arcreplace,
+ apidtable, arcaps, arcbeams, savearcs, reextract, arcap,
+ logfile, yes, done)
+
+ hselect (specms, "refspec1", yes, > temp)
+ fd2 = temp
+ i = fscan (fd2, arc)
+ fd2 = ""; delete (temp, verify=no)
+ if (i < 1)
+ print ("No arc reference assigned for ", spec, >> logfile)
+ else {
+ if (skyalign)
+ doalign (spec, specms, "align"//extn//imtype,
+ arcref1//extn, logfile, yes)
+ print ("Dispersion correct ", spec, >> logfile)
+ dispcor (specms, "", linearize=params.linearize,
+ database=database, table=arcref1//extn, w1=INDEF,
+ w2=INDEF, dw=INDEF, nw=INDEF, log=params.log,
+ flux=params.flux, samedisp=no, global=no,
+ ignoreaps=no, confirm=no, listonly=no, verbose=no,
+ logfile=logfile)
+ if (params.nsubaps > 1) {
+ imrename (specms, temp, verbose=no)
+ scopy (temp, specms, w1=INDEF, w2=INDEF,
+ apertures="1-999", bands="", beams="", apmodulus=0,
+ offset=0, format="multispec", clobber=no, merge=no,
+ renumber=no, verbose=no)
+ blkavg (temp, temp, 1, params.nsubaps, option="sum")
+ imcopy (temp, specms//"[*,*]", verbose=no)
+ imdelete (temp, verify=no)
+ }
+ disp = no
+ }
+ }
+
+ if (sky && !disp) {
+ str = ""
+ if (skyaps != "")
+ str = "skyaps=" // skyaps
+ if (skybeams != "")
+ str = str // " skybeams=" // skybeams
+ print ("Sky subtract ", spec, ": ", str, >> logfile)
+ skysub (specms, output="", objaps=objaps, skyaps=skyaps,
+ objbeams=objbeams, skybeams=skybeams, skyedit=no,
+ combine=params.combine, reject=params.reject,
+ scale=params.scale, saveskys=saveskys, logfile=logfile)
+ hedit (specms, "skysub", str, add=yes, show=no, verify=no,
+ update=yes)
+ }
+ }
+ fd1 = ""; delete (objs, verify=no)
+
+ if (access (done))
+ delete (done, verify=no)
+
+ flprcache (0)
+end