# title: Add Point Digitizer # label: Point Digitizer # Click events are registered on the tab "digitizer." If the data is a spectrogram, # report the Z value as well. Note this will not work with the pitch angle distribution. # This also provides feedback showing the digitized data and the data points selected in the # digitizer tab. typ= getParam( 'typ', 'Click', 'Digitizer Type', ['Click','Key'] ) from org.das2.components import DataPointRecorder from org.das2.qds import SemanticOps from org.das2.dataset import DataSetUpdateListener from org.das2.graph import SpectrogramRenderer import java.util.HashMap if ( len(dom.plotElements)<3 ): uri= dom.dataSourceFilters[0].uri setLayoutOverplot(3) plot(0,uri) dpr= DataPointRecorder() addTab( 'digitizer', dpr ) class MyUpdateListener( DataSetUpdateListener ): def dataSetUpdated( self, e ): ds= dpr.getDataPoints() print ds if ( ds!=None ): plot( 2, ds[:,0], ds[:,1], color=Color.GRAY, symbolSize=8, lineStyle='none' ) else: plot( 2, "" ) dpr.addDataSetUpdateListener( MyUpdateListener() ) class MySelectionListener(DataSetUpdateListener): def dataSetUpdated(self,event): ds= dpr.getSelectedDataPoints() if ( ds!=None ): plot( 1, ds[:,0], ds[:,1], color=Color.YELLOW, symbolSize=11, lineStyle='none' ) else: plot( 1, "" ) dpr.addSelectedDataSetUpdateListener( MySelectionListener() ) pp= dom.plots[0].controller.dasPlot from org.das2.event import DataPointSelectorMouseModule from org.das2.event import CrossHairRenderer dprr= CrossHairRenderer( pp,None,pp.getXAxis(),pp.getYAxis() ) mm= DataPointSelectorMouseModule( pp, None, dprr, 'digitizer' ) if ( typ=='Key' ): mm.setReleaseEvents(False) mm.setKeyEvents(True) mm.setDragEvents(False) else: mm.setReleaseEvents(True) mm.setKeyEvents(False) mm.setDragEvents(False) def dataPointSelected(event): x= event.getX() y= event.getY() if ( typ=='Key' ): map= java.util.HashMap() map['key']= event.getPlane('keyChar') dpr.addDataPoint( x, y, map ) else: dpr.addDataPoint( x, y ) pes= dom.controller.getPlotElementsFor(dom.plots[0]) if ( len(pes)==0 ): setStatus('no data found for plot') return ds= pes[0].controller.getDataSet() if ( ds==None ): setStatus('nothing plotted') return mm.dataPointSelected=dataPointSelected pp.dasMouseInputAdapter.primaryModule= mm # make sure the focus is on the 0th plot element. The 2nd will be the selected points and above that is the digitized. dom.controller.plotElement= dom.plotElements[0] import javax.swing.JOptionPane if ( typ=='Key' ): javax.swing.JOptionPane.showMessageDialog( getViewWindow(),'Click on the plot and press a key, and it will be recorded on the digitizer tab') else: javax.swing.JOptionPane.showMessageDialog( getViewWindow(),'Click on the plot, and it will be recorded on the digitizer tab') dom.plots[0].yaxis.autoRange= False