diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
commit | fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch) | |
tree | bdda434976bc09c864f2e4fa6f16ba1952b1e555 /noao/imred/src/doslit/sbatch.cl | |
download | iraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz |
Initial commit
Diffstat (limited to 'noao/imred/src/doslit/sbatch.cl')
-rw-r--r-- | noao/imred/src/doslit/sbatch.cl | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/noao/imred/src/doslit/sbatch.cl b/noao/imred/src/doslit/sbatch.cl new file mode 100644 index 00000000..8e01b09e --- /dev/null +++ b/noao/imred/src/doslit/sbatch.cl @@ -0,0 +1,199 @@ +# SBATCH -- 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 sbatch () + +file objects {prompt="List of object spectra"} +real datamax {prompt="Max data value / cosmic ray threshold"} +file arcs1 {prompt="List of arc spectra"} +file arcref1 {prompt="Arc reference for dispersion solution"} +string arcrefs {prompt="Arc references\n"} + +file done {prompt="File of spectra already done"} +file logfile {prompt="Logfile"} + +bool redo {prompt="Redo operations?"} +bool update {prompt="Update spectra?"} +bool dispcor {prompt="Dispersion correct spectra?"} +bool extcor {prompt="Extinction correct spectra?"} +bool fluxcal1 {prompt="Flux calibrate spectra?"} + +bool newdisp, newsens, newarcs + +struct *fd1, *fd2, *fd3 + +begin + file temp, spec, specms, arc, arcms + bool reextract, extract, disp, ext, flux, log + string imtype, mstype, str1, str2, str3, str4 + int i + struct err + + imtype = "." // envget ("imtype") + i = stridx (",", imtype) + if (i > 0) + imtype = substr (imtype, 1, i-1) + mstype = ".ms" // imtype + temp = mktemp ("tmp$iraf") + + reextract = redo || (update && newdisp) + + fd1 = objects + 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\n", + spec, imtype) | scan (err) + print (err, >> logfile) + print ("Check setting of imtype", >> logfile) + next + } + specms = spec // mstype + + extract = no + disp = no + ext = no + flux = no + if (reextract || !access (specms)) + extract = yes + else { + hselect (specms, "dispcor", yes, > temp) + hselect (specms, "ex-flag", yes, >> temp) + hselect (specms, "ca-flag", yes, >> temp) + fd2 = temp + if (fscan (fd2, str1) == 1) { + extract = update && newdisp + if (update && !newdisp) + # We really should check if REFSPEC will assign + # different reference spectra. + ; + } else + disp = dispcor + if (fscan (fd2, str1) == 1) + extract = update && !extcor + else + ext = extcor + if (fscan (fd2, str1) == 1) + extract = update && (!fluxcal1 || newsens) + else + flux = fluxcal1 + fd2 = ""; delete (temp, verify=no) + } + + if (extract) { + disp = dispcor + ext = extcor + flux = fluxcal1 + } + + if (extract) { + if (access (specms)) + imdelete (specms, verify=no) + print ("Extract object spectrum ", spec, >> logfile) + hselect (spec, "date-obs,ut,exptime", yes, > temp) + hselect (spec, "ra,dec,epoch,st", yes, >> temp) + fd2 = temp + if (fscan (fd2, str1, 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 (fd2, str1, str2, str3, str4) == 4) + setairmass (spec, intype="beginning", + outtype="effective", exposure="exptime", + observatory=observatory, show=no, update=yes, + override=yes, >> logfile) + } + fd2 = ""; delete (temp, verify=no) + apslitproc (spec, saturation=datamax, verbose=no) + } + + if (disp) { + # Fix arc headers if necessary. + if (newarcs) { + fd2 = arcs1 + while (fscan (fd2, arc) != EOF) { + hselect (arc, "date-obs,ut,exptime", yes, > temp) + hselect (arc, "ra,dec,epoch,st", yes, >> temp) + fd3 = temp + if (fscan (fd3, str1, 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, str1, str2, str3, str4) == 4) + setairmass (arc, intype="beginning", + outtype="effective", exposure="exptime", + observatory=observatory, show=no, + update=yes, override=yes, >> logfile) + } + fd3 = ""; delete (temp, verify=no) + hedit (arc, "refspec1", arc, add=yes, verify=no, + show=no, update=yes) + } + fd2 = "" + newarcs = no + } + + print ("Assign arc spectra for ", spec, >> logfile) + refspectra (spec, references=arcrefs, + apertures="", refaps="", ignoreaps=no, + select=sparams.select, sort=sparams.sort, + group=sparams.group, time=sparams.time, + timewrap=sparams.timewrap, override=yes, confirm=no, + assign=yes, logfiles="STDOUT", verbose=no, + >> logfile) + + sdoarcs (spec, arcref1, reextract, logfile, yes) + + 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 { + print ("Dispersion correct ", spec, >> logfile) + dispcor (specms, "", linearize=sparams.linearize, + database=database, table=arcref1//mstype, + w1=INDEF, w2=INDEF, dw=INDEF, nw=INDEF, + log=sparams.log, flux=sparams.flux, samedisp=no, + global=no, ignoreaps=no, confirm=no, listonly=no, + verbose=no, logfile=logfile) + flpr + hedit (specms, "dispcor", 0, add=yes, verify=no, + show=no, update=yes) + disp = no + } + } + + if (!disp) { + if (ext) + print ("Extinction correct ", spec, >> logfile) + if (flux) + print ("Flux calibrate ", spec, >> logfile) + if (flux || ext) + calibrate (specms, "", extinct=extcor, flux=fluxcal1, + extinction=extinction, observatory=observatory, + ignoreaps=yes, sensitivity="sens", fnu=sparams.fnu, + >> logfile) + } + } + fd1 = "" + delete (objects, verify=no) + delete (arcs1, verify=no) + + if (access (done)) + delete (done, verify=no) + + flprcache (0) +end |