def writediaglog(dlogfile,date,caldate,clobber,logfile,verbose,status): # overwrite old diagnostic html file if it exists line = ' ' if (status == 0): status = saltio.overwrite(dlogfile,clobber,logfile) # open diagnostic log html file if (status == 0): saltprint.log(logfile,'SALTHTML -- creating InstrumentDiagnostics' + date + '.html',verbose) outfile, status = saltio.openascii(dlogfile,'w',logfile) # write html header if (status == 0): status = htmlheader(outfile,date,caldate,'InstrumentDiagnostics',0,logfile) # content pending outfile.write('Content pending\n') # write html footer if (status == 0): status = htmlfooter(outfile,logfile) # close htmlfile if (status == 0): status = saltio.closeascii(outfile,logfile) return status
def writeenvlog(elogfile,date,caldate,clobber,logfile,verbose,status): # overwrite old environemnt log html file if it exists line = ' ' if (status == 0): status = saltio.overwrite(elogfile,clobber,logfile) # open environment log html file if (status == 0): saltprint.log(logfile,'SALTHTML -- creating EnvironmentLog' + date + '.html',verbose) outfile, status = saltio.openascii(elogfile,'w',logfile) # write html header if (status == 0): status = htmlheader(outfile,date,caldate,'EnvironmentLog',0,logfile) # content pending outfile.write('Content pending\n') # write html footer if (status == 0): status = htmlfooter(outfile,logfile) # close htmlfile if (status == 0): status = saltio.closeascii(outfile,logfile) return status
def htmlfooter(file,logfile): file.write("\n</pre>\n") file.write("\n</font></center>\n\n") file.write(" </div>\n") file.write(" </div>\n") file.write(" <div id=\"footer\">\n") file.write(" © SAAO 2007\n") file.write(" </div>\n") file.write(" </td>\n") file.write(" </tr>\n") file.write("</table>\n") file.write("</body>\n") file.write("</html>\n") status = saltio.closeascii(file,logfile) return status
def writepipelog(plogfile,date,caldate,clobber,logfile,verbose,status): # overwrite old pipeline log html file if it exists line = ' ' if (status == 0): status = saltio.overwrite(plogfile,clobber,logfile) # open pipeline log html file if (status == 0): saltprint.log(logfile,'SALTHTML -- creating PipelineLog' + date + '.html',verbose) outfile, status = saltio.openascii(plogfile,'w',logfile) # write html header if (status == 0): status = htmlheader(outfile,date,caldate,'PipelineLog',0,logfile) # nightlog file exists? if (status == 0): if (not os.path.isfile(logfile)): message = 'WARNING: SALTHTML -- pipeline log does not exist' else: # open nightlog file if (status == 0): infile, status = saltio.openascii(logfile,'r',logfile) # append night log to html file if (status == 0): while line: line = infile.readline() outfile.write(line) # write html footer if (status == 0): status = htmlfooter(outfile,logfile) # close htmlfile if (status == 0): status = saltio.closeascii(outfile,logfile) return status
def mkheader(file,keyword,value,comment,verbose,logfile): """create keyword with mkheader IRAF tool i.e. without opening the whole file""" status = 0 message = 'SALTKEY.MKHEADER: Created keyword ' + keyword + ' in ' + file try: tmpfile, status = saltio.tmpfile('.',False,logfile) tmp, status = saltio.openascii(tmpfile,'w',logfile) tmp.write('%-8s= \'%-18s\' / %-s\n' % (keyword,value,comment)) status = saltio.closeascii(tmp,logfile) iraf.noao.artdata.mkheader(file,tmpfile,append='y',verbose='n') saltio.delete(tmpfile,False,logfile) saltprint.log(logfile,message,verbose) except: message = 'ERROR -- SALTKEY.MKHEADER: Cannot edit keyword ' + keyword message += ' in ' + file status = saltprint.err(logfile,message) return status
def salthtml(propcode,scamobslog,rssobslog, hrsobslog, htmlpath,nightlog,readme,clobber,logfile,verbose): # set up filenames = [] proposers = [] propids = [] instrumes = [] objects = [] ras = [] decs = [] detmodes = [] ccdtypes = [] ccdsums = [] gainsets = [] rospeeds = [] filters = [] gratings = [] gr_angles = [] ar_angles = [] time_obss = [] date_obss = [] exptimes = [] hours = [] filename = {} proposer = {} propid = {} instrume = {} object = {} ra = {} dec = {} detmode = {} ccdsum = {} ccdtype = {} gainset = {} rospeed = {} filter = {} grating = {} gr_angle = {} ar_angle = {} time_obs = {} exptime = {} status=0 # test the logfile logfile = saltio.logname(logfile) # log the call saltprint.line(logfile,verbose) history = 'SALTHTML -- ' history += 'scamobslog='+scamobslog+' ' history += 'rssobslog='+rssobslog+' ' history += 'htmlpath='+htmlpath+' ' history += 'nightlog='+nightlog+' ' history += 'readme='+readme+' ' yn = 'n' if (clobber): yn = 'y' history += 'clobber='+yn+' ' history += 'logfile='+logfile+' ' yn = 'n' if (verbose): yn = 'y' history += 'verbose='+yn saltprint.log(logfile,history,verbose) # start time saltprint.time('\nSALTHTML -- started at',logfile,verbose) saltprint.log(logfile,' ',verbose) # are the arguments defined if (status == 0): pids,status = saltio.argunpack('propcode',propcode ,logfile) if (status == 0): status = saltio.argdefined('scamobslog',scamobslog,logfile) if (status == 0): status = saltio.argdefined('rssobslog',rssobslog,logfile) if (status == 0): status = saltio.argdefined('htmlpath',htmlpath,logfile) # check htmlpath exists, ends with a "/" and convert to absolute path if (status == 0): htmlpath, status = saltio.abspath(htmlpath,logfile) # check observation log files exist if (status == 0 and scamobslog.upper() != 'NONE'): status = saltio.fileexists(scamobslog,logfile) if (status == 0 and rssobslog.upper() != 'NONE'): status = saltio.fileexists(rssobslog,logfile) # read observation logs for obslog in [scamobslog, rssobslog, hrsobslog]: if (status == 0 and obslog.upper() != 'NONE'): struct,status = saltio.openfits(obslog,logfile) if (status == 0 and obslog.upper() != 'NONE'): obstab,status = saltio.readtab(struct[1],obslog,logfile) if (status == 0 and obslog.upper() != 'NONE'): status = saltio.closefits(struct,logfile) if (status == 0 and obslog.upper() != 'NONE'): filenames.extend(obstab.field('filename')) objects.extend(obstab.field('object')) ras.extend(obstab.field('ra')) decs.extend(obstab.field('dec')) instrumes.extend(obstab.field('instrume')) proposers.extend(obstab.field('proposer')) propids.extend(obstab.field('propid')) ccdtypes.extend(obstab.field('ccdtype')) ccdsums.extend(obstab.field('ccdsum')) gainsets.extend(obstab.field('gainset')) rospeeds.extend(obstab.field('rospeed')) detmodes.extend(obstab.field('detmode')) filters.extend(obstab.field('filter')) time_obss.extend(obstab.field('time-obs')) date_obss.extend(obstab.field('date-obs')) exptimes.extend(obstab.field('exptime')) if (obslog == rssobslog): gratings.extend(obstab.field('grating')) gr_angles.extend(obstab.field('gr-angle')) ar_angles.extend(obstab.field('ar-angle')) else: for i in range(len(filenames)): gratings.append(' ') gr_angles.append(0.) ar_angles.append(0.) # Create the list of proposals if (status == 0): pids,status=saltio.cleanpropcode(pids, propids, logfile) # date of observations date, caldate = salttime.date_obs2yyyymmdd(date_obss[0]) # sort into chronological order for i in range(len(filenames)): hours.append(salttime.time_obs2hr(time_obss[i])) if (hours[i] < 12.): hours[i] += 24 filename[str(hours[i])] = filenames[i] object[str(hours[i])] = objects[i] ra[str(hours[i])] = ras[i] dec[str(hours[i])] = decs[i] instrume[str(hours[i])] = instrumes[i] proposer[str(hours[i])] = proposers[i] propid[str(hours[i])] = propids[i] ccdsum[str(hours[i])] = ccdsums[i].replace(' ','x') ccdtype[str(hours[i])] = ccdtypes[i] gainset[str(hours[i])] = gainsets[i] rospeed[str(hours[i])] = rospeeds[i] detmode[str(hours[i])] = detmodes[i] filter[str(hours[i])] = filters[i] time_obs[str(hours[i])] = time_obss[i] grating[str(hours[i])] = gratings[i] gr_angle[str(hours[i])] = gr_angles[i] ar_angle[str(hours[i])] = ar_angles[i] exptime[str(hours[i])] = exptimes[i] if (instrume[str(hours[i])] == 'SALTICAM'): instrume[str(hours[i])] = 'SCM' if ('Video Mode' in detmode[str(hours[i])]): detmode[str(hours[i])] = 'VI' if ('Slot Mode' in detmode[str(hours[i])]): detmode[str(hours[i])] = 'SL' if ('Frame Transfer' in detmode[str(hours[i])]): detmode[str(hours[i])] = 'FT' if ('Normal' in detmode[str(hours[i])]): detmode[str(hours[i])] = 'IM' if ('Bright' in gainset[str(hours[i])]): gainset[str(hours[i])] = 'BR' if ('Faint' in gainset[str(hours[i])]): gainset[str(hours[i])] = 'FA' if ('Fast' in rospeed[str(hours[i])]): rospeed[str(hours[i])] = 'FA' if ('Slow' in rospeed[str(hours[i])]): rospeed[str(hours[i])] = 'SL' if ('OBJECT' not in ccdtype[str(hours[i])].upper() and 'UNKNOWN' in proposer[str(hours[i])].upper()): proposer[str(hours[i])] = '' hours.sort() # create HTML directory in datapath and define html files docpath = htmlpath + 'doc/' if (status == 0 and not os.path.exists(docpath)): status = saltio.createdir(docpath,False,logfile) htmlfile = docpath + 'ObservationSequence' + date +'.html' notefile = docpath + 'CapeTownNotes' + date + '.html' nlogfile = docpath + 'AstronomersLog' + date + '.html' plogfile = docpath + 'PipelineLog' + date + '.html' elogfile = docpath + 'EnvironmentLog' + date + '.html' dlogfile = docpath + 'InstrumentDiagnostics' + date + '.html' # Copy css and banner images to the doc directory if (status == 0): status=saltio.copy(iraf.osfn('pipetools$html/style.css'),docpath,False,logfile) status=saltio.copy(iraf.osfn('pipetools$html/style_home.css'),docpath,False,logfile) status=saltio.copy(iraf.osfn('pipetools$html/header_salt.jpg'),docpath,False,logfile) # write observation log html file if (status == 0): status = writeobslog(htmlfile,filename,object,ra,dec,instrume,detmode,filter,ccdsum, gainset,rospeed,grating,gr_angle,ar_angle,exptime,time_obs,proposer, propid,hours,date,caldate,clobber,logfile,verbose,status) # write readme html file if (status == 0): status = writecapetownnotes(notefile,readme,date,caldate,clobber,logfile,verbose,status) # write nightlog html file if (status == 0): status = writenightlog(nlogfile,nightlog,date,caldate,clobber,logfile,verbose,status) # write pipeline log html file if (status == 0): status = writepipelog(plogfile,date,caldate,clobber,logfile,verbose,status) # write environment log html file if (status == 0): status = writeenvlog(elogfile,date,caldate,clobber,logfile,verbose,status) # write instrument diagnostics html file if (status == 0): status = writediaglog(dlogfile,date,caldate,clobber,logfile,verbose,status) # copy html files to PI directories if (status == 0): saltprint.log(logfile,' ',verbose) for pids in set(propids): for pid in pids.split(','): pid = pid.strip().upper() pidpath = htmlpath + pid if (os.path.exists(pidpath)): if (os.path.exists(pidpath+'/doc')): for file in glob.glob(pidpath+'/doc/*'): status = saltio.delete(file,False,logfile) status = saltio.deletedir(pidpath+'/doc',logfile) status = saltio.copydir(docpath,pidpath+'/doc',verbose,logfile) if (status == 0): infile, status = saltio.openascii(pidpath+'/doc/CapeTownNotes'+date+'.html','r',logfile) if (status == 0): saltio.delete(pidpath+'/doc/CapeTownNotes'+date+'.html',False,logfile) if (status == 0): outfile, status = saltio.openascii(pidpath+'/doc/CapeTownNotes'+date+'.html','w',logfile) if (status == 0): for line in infile: #line = line.replace('SALT user','Dr ' + string.capwords(pi.lower())) #line = line.replace('yourname',pi) line = line.replace('yyyymmdd',date) outfile.write(line) status = saltio.closeascii(outfile,logfile) # end time if (status == 0): saltprint.time('\nSALTHTML -- completed at',logfile,verbose) else: saltprint.time('\nSALTHTML -- aborted at',logfile,verbose)