def fg2html(self, framenos='all'): if self.plotdir is None: self.plotdir = '_fgplots_fg%s' % str(self.fgno).zfill(2) startdir = os.getcwd() self.outdir = os.path.abspath(self.outdir) plotpages.cd_with_mkdir(self.plotdir, overwrite=True) self.save_png = True ppd = plotpages.PlotPagesData() ppd.timeframes_frametimes = {} if framenos == 'all': framenos = range(1, 200) for frameno in framenos: try: grid, solution = self.get_frame(frameno) t = solution.t ppd.timeframes_frametimes[frameno] = t self.plotfg(frameno) except IOError: break draw() os.chdir(startdir) ppd.plotdir = self.plotdir ppd.html_index_fname = "_PlotIndex_FixedGrid%s.html" \ % str(self.fgno).zfill(2) ppd.html_index_title = "Fixed Grids Plot Index" ppd.timeframes_prefix = 'FixedGrid%sFrame' % str(self.fgno).zfill(2) ppd.html_homelink = "_PlotIndex.html" ppd.timeframes_fignames[150] = 'Surface' ppd.timeframes_fignames[151] = 'Inundation' ppd.timeframes_fignames[152] = 'Exposed seafloor' plotpages.timeframes2html(ppd)
def fg2html(self,framenos='all'): if self.plotdir is None: self.plotdir='_fgplots_fg%s' % str(self.fgno).zfill(2) startdir = os.getcwd() self.outdir = os.path.abspath(self.outdir) plotpages.cd_with_mkdir(self.plotdir, overwrite=True) self.save_png = True ppd = plotpages.PlotPagesData() ppd.timeframes_frametimes = {} if framenos=='all': framenos = range(1,200) for frameno in framenos: try: grid, solution = self.get_frame(frameno) t = solution.t ppd.timeframes_frametimes[frameno] = t self.plotfg(frameno) except IOError: break draw() os.chdir(startdir) ppd.plotdir = self.plotdir ppd.html_index_fname = "_PlotIndex_FixedGrid%s.html" \ % str(self.fgno).zfill(2) ppd.html_index_title = "Fixed Grids Plot Index" ppd.timeframes_prefix='FixedGrid%sFrame' % str(self.fgno).zfill(2) ppd.html_homelink = "_PlotIndex.html" ppd.timeframes_fignames[150] = 'Surface' ppd.timeframes_fignames[151] = 'Inundation' ppd.timeframes_fignames[152] = 'Exposed seafloor' plotpages.timeframes2html(ppd)
def fg2html(fgno=1, outdir='_output'): plotdir = '_fgplots_fg%s' % fgno startdir = os.getcwd() outdir = os.path.abspath(outdir) plotpages.cd_with_mkdir(plotdir, overwrite=True) for frameno in range(1, 100): try: fg = plotfg(fgno, frameno, outdir, save_png=True) except IOError: break draw() os.chdir(startdir) ppd = plotpages.PlotPagesData() ppd.timeframes_prefix = 'FixedGrid%sFrame' % str(fgno).zfill(2) plotpages.timeframes2html(ppd)
def fg2html(fgno=1, outdir='_output'): plotdir='_fgplots_fg%s' % fgno startdir = os.getcwd() outdir = os.path.abspath(outdir) plotpages.cd_with_mkdir(plotdir, overwrite=True) for frameno in range(1,100): try: fg = plotfg(fgno, frameno, outdir, save_png=True) except IOError: break draw() os.chdir(startdir) ppd = plotpages.PlotPagesData() ppd.timeframes_prefix='FixedGrid%sFrame' % str(fgno).zfill(2) plotpages.timeframes2html(ppd)
def printgauges(plotdata=None, verbose=True): # ====================================================================== """ Produce a set of png files for all the figures specified by plotdata. Also produce a set of html files for viewing the figures and navigating between them. These will all be in directorey plotdata.plotdir. The ClawPlotData object plotdata will be initialized by a call to function setplot unless plotdata.setplot=False. If plotdata.setplot=True then it is assumed that the current directory contains a module setplot.py that defines this function. If plotdata.setplot is a string then it is assumed this is the name of a module to import that contains the function setplot. If plotdata.setplot is a function then this function will be used. """ import glob from pyclaw.plotters.data import ClawPlotData if not sys.modules.has_key("matplotlib"): print "*** Error: matplotlib not found, no plots will be done" return plotdata if not isinstance(plotdata, ClawPlotData): print "*** Error, plotdata must be an object of type ClawPlotData" return plotdata plotdata._mode = "printframes" plotdata = call_setplot(plotdata.setplot, plotdata) try: plotdata.rundir = os.path.abspath(plotdata.rundir) plotdata.outdir = os.path.abspath(plotdata.outdir) plotdata.plotdir = os.path.abspath(plotdata.plotdir) framenos = plotdata.print_framenos # frames to plot framenos = plotdata.print_framenos # frames to plot fignos = plotdata.print_fignos # figures to plot at each frame fignames = {} # names to use in html files rundir = plotdata.rundir # directory containing *.data files outdir = plotdata.outdir # directory containing fort.* files plotdir = plotdata.plotdir # where to put png and html files overwrite = plotdata.overwrite # ok to overwrite? msgfile = plotdata.msgfile # where to write error messages except: print "*** Error in printframes: plotdata missing attribute" print " *** plotdata = ", plotdata return plotdata if fignos == "all": fignos = plotdata._fignos # for (figname,plotfigure) in plotdata.plotfigure_dict.iteritems(): # fignos.append(plotfigure.figno) # filter out the fignos that will be empty, i.e. plotfigure._show=False. plotdata = set_show(plotdata) fignos_to_show = [] for figname in plotdata._fignames: figno = plotdata.plotfigure_dict[figname].figno if (figno in fignos) and plotdata.plotfigure_dict[figname]._show: fignos_to_show.append(figno) fignos = fignos_to_show # figure out what type each figure is: fignos_each_frame = [] fignos_each_gauge = [] fignos_each_run = [] for figno in fignos: figname = plotdata._figname_from_num[figno] if plotdata.plotfigure_dict[figname].type == "each_frame": fignos_each_frame.append(figno) if plotdata.plotfigure_dict[figname].type == "each_gauge": fignos_each_gauge.append(figno) if plotdata.plotfigure_dict[figname].type == "each_run": fignos_each_run.append(figno) rootdir = os.getcwd() # annoying fix needed when EPD is used for plotting under cygwin: if rootdir[0:9] == "C:\cygwin" and outdir[0:9] != "C:\cygwin": outdir = "C:\cygwin" + outdir plotdata.outdir = outdir if rootdir[0:9] == "C:\cygwin" and rundir[0:9] != "C:\cygwin": rundir = "C:\cygwin" + rundir plotdata.rundir = rundir if rootdir[0:9] == "C:\cygwin" and plotdir[0:9] != "C:\cygwin": plotdir = "C:\cygwin" + plotdir plotdata.plotdir = plotdir try: os.chdir(rundir) except: print "*** Error: cannot move to run directory ", rundir print "rootdir = ", rootdir return plotdata if msgfile != "": sys.stdout = open(msgfile, "w") sys.stderr = sys.stdout try: plotpages.cd_plotdir(plotdata) except: print "*** Error, aborting plotframes" return plotdata framefiles = glob.glob(os.path.join(plotdir, "frame*.png")) + glob.glob( os.path.join(plotdir, "frame*.html")) if overwrite: # remove any old versions: for file in framefiles: os.remove(file) else: if len(framefiles) > 1: print "*** Remove frame*.png and frame*.html and try again," print " or use overwrite=True in call to printframes" return plotdata # Create each of the figures # --------------------------- try: os.chdir(outdir) except: print "*** Error printframes: cannot move to outdir = ", outdir return plotdata fortfile = {} pngfile = {} frametimes = {} import glob for file in glob.glob("fort.q*"): frameno = int(file[7:10]) fortfile[frameno] = file for figno in fignos_each_frame: pngfile[frameno, figno] = "frame" + file[-4:] + "fig%s.png" % figno if len(fortfile) == 0: print "*** No fort.q files found in directory ", os.getcwd() return plotdata # Discard frames that are not from latest run, based on # file modification time: framenos = only_most_recent(framenos, plotdata.outdir) numframes = len(framenos) print "Will plot %i frames numbered:" % numframes, framenos print "Will make %i figure(s) for each frame, numbered: " % len( fignos_each_frame), fignos_each_frame # fignames = {} # for figname in plotdata._fignames: # figno = plotdata.plotfigure_dict[figname].figno # fignames[figno] = figname # use new attribute: fignames = plotdata._figname_from_num for frameno in framenos: frametimes[frameno] = plotdata.getframe(frameno, plotdata.outdir).t plotdata.timeframes_framenos = framenos plotdata.timeframes_frametimes = frametimes plotdata.timeframes_fignos = fignos_each_frame plotdata.timeframes_fignames = fignames # Gauges: gaugenos = plotdata.print_gaugenos # Make html files for time frame figures: # --------------------------------------- os.chdir(plotdir) if plotdata.html: plotpages.timeframes2html(plotdata) # Make png files for all frames and gauges: # ----------------------------------------- if not plotdata.printfigs: print "Using previously printed figure files" else: print "Now making png files for all figures..." for frameno in framenos: plotframe(frameno, plotdata, verbose) print "Frame %i at time t = %s" % (frameno, frametimes[frameno]) for gaugeno in gaugenos: plotgauge(gaugeno, plotdata, verbose) print "Gauge %i " % gaugeno if plotdata.latex: plotpages.timeframes2latex(plotdata) # Movie: # ------- if plotdata.gif_movie: print "Making gif movies. This may take some time...." for figno in fignos_each_frame: try: os.system("convert -delay 20 frame*fig%s.png moviefig%s.gif" % (figno, figno)) print " Created moviefig%s.gif" % figno except: print "*** Error creating moviefig%s.gif" % figno os.chdir(rootdir) # print out pointers to html index page: path_to_html_index = os.path.join(os.path.abspath(plotdata.plotdir), plotdata.html_index_fname) plotpages.print_html_pointers(path_to_html_index) # reset stdout for future print statements sys.stdout = sys.__stdout__ return plotdata
def printgauges(plotdata=None, verbose=True): #====================================================================== """ Produce a set of png files for all the figures specified by plotdata. Also produce a set of html files for viewing the figures and navigating between them. These will all be in directorey plotdata.plotdir. The ClawPlotData object plotdata will be initialized by a call to function setplot unless plotdata.setplot=False. If plotdata.setplot=True then it is assumed that the current directory contains a module setplot.py that defines this function. If plotdata.setplot is a string then it is assumed this is the name of a module to import that contains the function setplot. If plotdata.setplot is a function then this function will be used. """ import glob from pyclaw.plotters.data import ClawPlotData if not sys.modules.has_key('matplotlib'): print '*** Error: matplotlib not found, no plots will be done' return plotdata if not isinstance(plotdata,ClawPlotData): print '*** Error, plotdata must be an object of type ClawPlotData' return plotdata plotdata._mode = 'printframes' plotdata = call_setplot(plotdata.setplot, plotdata) try: plotdata.rundir = os.path.abspath(plotdata.rundir) plotdata.outdir = os.path.abspath(plotdata.outdir) plotdata.plotdir = os.path.abspath(plotdata.plotdir) framenos = plotdata.print_framenos # frames to plot framenos = plotdata.print_framenos # frames to plot fignos = plotdata.print_fignos # figures to plot at each frame fignames = {} # names to use in html files rundir = plotdata.rundir # directory containing *.data files outdir = plotdata.outdir # directory containing fort.* files plotdir = plotdata.plotdir # where to put png and html files overwrite = plotdata.overwrite # ok to overwrite? msgfile = plotdata.msgfile # where to write error messages except: print '*** Error in printframes: plotdata missing attribute' print ' *** plotdata = ',plotdata return plotdata if fignos == 'all': fignos = plotdata._fignos #for (figname,plotfigure) in plotdata.plotfigure_dict.iteritems(): # fignos.append(plotfigure.figno) # filter out the fignos that will be empty, i.e. plotfigure._show=False. plotdata = set_show(plotdata) fignos_to_show = [] for figname in plotdata._fignames: figno = plotdata.plotfigure_dict[figname].figno if (figno in fignos) and plotdata.plotfigure_dict[figname]._show: fignos_to_show.append(figno) fignos = fignos_to_show # figure out what type each figure is: fignos_each_frame = [] fignos_each_gauge = [] fignos_each_run = [] for figno in fignos: figname = plotdata._figname_from_num[figno] if plotdata.plotfigure_dict[figname].type == 'each_frame': fignos_each_frame.append(figno) if plotdata.plotfigure_dict[figname].type == 'each_gauge': fignos_each_gauge.append(figno) if plotdata.plotfigure_dict[figname].type == 'each_run': fignos_each_run.append(figno) rootdir = os.getcwd() # annoying fix needed when EPD is used for plotting under cygwin: if rootdir[0:9] == 'C:\cygwin' and outdir[0:9] != 'C:\cygwin': outdir = 'C:\cygwin' + outdir plotdata.outdir = outdir if rootdir[0:9] == 'C:\cygwin' and rundir[0:9] != 'C:\cygwin': rundir = 'C:\cygwin' + rundir plotdata.rundir = rundir if rootdir[0:9] == 'C:\cygwin' and plotdir[0:9] != 'C:\cygwin': plotdir = 'C:\cygwin' + plotdir plotdata.plotdir = plotdir try: os.chdir(rundir) except: print '*** Error: cannot move to run directory ',rundir print 'rootdir = ',rootdir return plotdata if msgfile != '': sys.stdout = open(msgfile, 'w') sys.stderr = sys.stdout try: plotpages.cd_plotdir(plotdata) except: print "*** Error, aborting plotframes" return plotdata framefiles = glob.glob(os.path.join(plotdir,'frame*.png')) + \ glob.glob(os.path.join(plotdir,'frame*.html')) if overwrite: # remove any old versions: for file in framefiles: os.remove(file) else: if len(framefiles) > 1: print "*** Remove frame*.png and frame*.html and try again," print " or use overwrite=True in call to printframes" return plotdata # Create each of the figures #--------------------------- try: os.chdir(outdir) except: print '*** Error printframes: cannot move to outdir = ',outdir return plotdata fortfile = {} pngfile = {} frametimes = {} import glob for file in glob.glob('fort.q*'): frameno = int(file[7:10]) fortfile[frameno] = file for figno in fignos_each_frame: pngfile[frameno,figno] = 'frame' + file[-4:] + 'fig%s.png' % figno if len(fortfile) == 0: print '*** No fort.q files found in directory ', os.getcwd() return plotdata # Discard frames that are not from latest run, based on # file modification time: framenos = only_most_recent(framenos, plotdata.outdir) numframes = len(framenos) print "Will plot %i frames numbered:" % numframes, framenos print 'Will make %i figure(s) for each frame, numbered: ' \ % len(fignos_each_frame), fignos_each_frame #fignames = {} #for figname in plotdata._fignames: #figno = plotdata.plotfigure_dict[figname].figno #fignames[figno] = figname # use new attribute: fignames = plotdata._figname_from_num for frameno in framenos: frametimes[frameno] = plotdata.getframe(frameno, plotdata.outdir).t plotdata.timeframes_framenos = framenos plotdata.timeframes_frametimes = frametimes plotdata.timeframes_fignos = fignos_each_frame plotdata.timeframes_fignames = fignames # Gauges: gaugenos = plotdata.print_gaugenos # Make html files for time frame figures: # --------------------------------------- os.chdir(plotdir) if plotdata.html: plotpages.timeframes2html(plotdata) # Make png files for all frames and gauges: # ----------------------------------------- if not plotdata.printfigs: print "Using previously printed figure files" else: print "Now making png files for all figures..." for frameno in framenos: plotframe(frameno, plotdata, verbose) print 'Frame %i at time t = %s' % (frameno, frametimes[frameno]) for gaugeno in gaugenos: plotgauge(gaugeno, plotdata, verbose) print 'Gauge %i ' % gaugeno if plotdata.latex: plotpages.timeframes2latex(plotdata) # Movie: #------- if plotdata.gif_movie: print 'Making gif movies. This may take some time....' for figno in fignos_each_frame: try: os.system('convert -delay 20 frame*fig%s.png moviefig%s.gif' \ % (figno,figno)) print ' Created moviefig%s.gif' % figno except: print '*** Error creating moviefig%s.gif' % figno os.chdir(rootdir) # print out pointers to html index page: path_to_html_index = os.path.join(os.path.abspath(plotdata.plotdir), \ plotdata.html_index_fname) plotpages.print_html_pointers(path_to_html_index) # reset stdout for future print statements sys.stdout = sys.__stdout__ return plotdata