#Sample script to make a set of summary plots import math from javax.imageio import ImageIO from java.awt import RenderingHints from org.autoplot.pngwalk import ImageResize from org.das2.util import DasPNGEncoder, DasPNGConstants def myWriteToPng( filename, appmodel, ldom, width, height ): appmodel.waitUntilIdle(False); out= java.io.FileOutputStream( filename ) image = ldom.canvases[0].controller.dasCanvas.getImage(width, height); encoder = DasPNGEncoder(); encoder.addText( DasPNGConstants.KEYWORD_CREATION_TIME, java.util.Date().toString() ); encoder.write(image, out) out.close(); return image def doBatch( times, dom, params, mon ): java.io.File(params.outputFolder).mkdirs() java.io.File(params.outputFolder+'thumbs400/').mkdirs() n= len(times) mon.setTaskSize( n ) mon.started() mon.setProgressMessage('initializing child application') appmodel= ApplicationModel() appmodel.addDasPeersToApp() dom2= appmodel.getDocumentModel() mon.setProgressMessage('synchronize to this application') dom2.syncTo( dom, java.util.Arrays.asList( [ 'id' ]) ) for p in dom2.getPlotElements(): # kludge for bug 2985891 since bug after cleanup. p.controller.doResetRenderType( p.getRenderType() ) dom2.syncTo( dom, java.util.Arrays.asList( [ 'id' ]) ) mon.setProgressMessage('write ' + params.product + '.vap' ) thumbSize= 400 w0= dom2.canvases[0].width h0= dom2.canvases[0].height if ( params.createThumbs ): aspect= 1. * w0 / h0 thumbH= (int)( math.sqrt( thumbSize**2 / (aspect * aspect + 1. ) ) ) thumbW= (int) ( thumbH * aspect ) from org.virbo.autoplot.state import StatePersistence StatePersistence.saveState( java.io.File( params.outputFolder + params.product + '.vap' ), dom2 ); dom2.getController().waitUntilIdle(); mon.setProgressMessage('making images') tp= TimeParser.create(params.timeFormat) t0= java.lang.System.currentTimeMillis() count= 0 for i in times: count= count+1 if ( mon.cancelled ): break mon.setTaskProgress(count) dom2.timeRange= tp.parse(i).getTimeRange() mon.setProgressMessage('write '+ params.product + '_%s.png' % i ) image= myWriteToPng( '%s%s_%s.png' % ( params.outputFolder, params.product, i ), appmodel, dom2, w0, h0 ) if ( params.createThumbs ): thumb400= ImageResize.getScaledInstance( image, thumbW, thumbH, RenderingHints.VALUE_INTERPOLATION_BILINEAR, True ) ImageIO.write( thumb400, 'png', java.io.File( '%sthumbs400/%s_%s.png' % ( params.outputFolder, params.product, i ) ) ) imagesPerSec= count * 1000. / ( java.lang.System.currentTimeMillis()-t0 ) #etaSec= (n-count) / imagesPerSec #etaStr= org.das2.datum.DatumUtil.asOrderOneUnits( Units.seconds.createDatum(etaSec) ) mon.setAdditionalInfo( '(%.1f/sec)' % ( imagesPerSec ) ); mon.finished() # display a modal dialog to get parameters for creating the png walk. # @return a python class containing the parameters, or None if cancelled. def showPngWalkInfoDialog(): from javax.swing import JPanel, BoxLayout, JTextField, JLabel, JOptionPane, JCheckBox p= JPanel( ) p.layout= BoxLayout( p, BoxLayout.Y_AXIS ) p.add( JLabel( 'Filename Root:' ) ) fln_rootTf= JTextField( 'product' ) fln_rootTf.toolTipText='stem used to ensure unique filenames.' p.add( fln_rootTf ) p.add( JLabel( 'Output Folder:' ) ) home= java.lang.System.getProperty( 'user.home' ) + java.lang.System.getProperty( 'file.separator' ) home= home.replace('\\','/') outputFolderTf= JTextField( home + 'pngwalk/' ) p.add( outputFolderTf ) p.add( JLabel( 'Time Format:' ) ) timeFormatTf= JTextField( '%Y%m%d' ) p.add( timeFormatTf ) p.add( JLabel( 'Time Range:' ) ) timeRangeTf= JTextField( '2009' ) p.add( timeRangeTf ) createThumbsCb= JCheckBox( 'Create Thumbs', selected=True ) p.add( createThumbsCb ) outputFolder=0 timeRangeStr=0 fln_root=0 proceed= False if ( JOptionPane.showConfirmDialog( getViewWindow(), p, 'pngwalk options', JOptionPane.OK_CANCEL_OPTION )==JOptionPane.OK_OPTION ): class result: "result of dialog" outputFolder= outputFolderTf.text timeRangeStr= timeRangeTf.text product= fln_rootTf.text timeFormat= timeFormatTf.text createThumbs= createThumbsCb.selected return result else: return None from org.virbo.autoplot import ApplicationModel try: params except NameError: params=None if ( params==None or len(params)==0 ): params= showPngWalkInfoDialog() if ( params!=None or len(params)==0 ): from org.das2.components import DasProgressPanel if ( getViewWindow()==None ): mon= org.das2.util.monitor.NullProgressMonitor() else: mon= DasProgressPanel.createFramed( getViewWindow(),"running batch" ) times= generateTimeRanges( params.timeFormat, params.timeRangeStr ) doBatch( times, dom, params, mon ) if ( not mon.cancelled ): if ( params.outputFolder[1]==':' ): url= 'file:/'+params.outputFolder else: url= 'file:'+params.outputFolder from org.autoplot.pngwalk import PngWalkTool1 if ( getViewWindow()!=None ): PngWalkTool1.start( url + params.product + '_' + params.timeFormat + '.png', getViewWindow() )