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 = list(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 = list(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 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 clawpack.visclaw.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 clawpack.visclaw.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