Changeset 1123


Ignore:
Timestamp:
18.01.2016 13:01:34 (4 years ago)
Author:
klaus
Message:

write file dialog; delete traces; mindate/maxdate on events command

Location:
SHX/trunk/SeismicHandler
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/SeismicHandler/basics/analysispar.py

    r1118 r1123  
    205205 
    206206 
     207PIDX_ORDER = 0 
     208PIDX_TYPE = 1 
     209PIDX_DEFAULT = 2 
     210 
    207211class AnalysisPar: 
    208212    "Holds analysis parameters. Updated via command line interface." 
     
    210214    __metaclass__ = Singleton 
    211215 
    212     # Definition of parameter types. 
     216    # Definition of parameters and their types and defaults. 
    213217    pardef = { 
    214218        # analysis results 
    215         'fk_slowness'     : ('float',     None), 
    216         'fk_azimuth'      : ('float',     None), 
    217         'epi_latitude'    : ('float',     None), 
    218         'epi_longitude'   : ('float',     None), 
     219        'fk_slowness'     : ( 10, 'float',     None), 
     220        'fk_azimuth'      : ( 20, 'float',     None), 
     221        'epi_latitude'    : ( 30, 'float',     None), 
     222        'epi_longitude'   : ( 40, 'float',     None), 
    219223        # processing parameters 
    220         'read_time'       : ('datetime',  None), 
    221         'fdsn_server'     : ('string',    'bgr'), 
    222         'fk_max_slowness' : ('float',     15.0), 
    223         'fk_min_freq'     : ('float',     0.4), 
    224         'fk_max_freq'     : ('float',     3.0), 
     224        'read_time'       : ( 50, 'datetime',  None), 
     225        'read_length'     : ( 51, 'float',     420.), 
     226        'fdsn_server'     : ( 60, 'string',    'bgr'), 
     227        'fk_max_slowness' : ( 70, 'float',     15.0), 
     228        'fk_min_freq'     : ( 80, 'float',     0.4), 
     229        'fk_max_freq'     : ( 90, 'float',     3.0), 
    225230    } 
    226231 
    227232    def __init__( self ): 
    228233        self.pardict = {} 
     234        self.resetParams() 
     235     
     236    def resetParams( self ): 
    229237        for name in self.pardef.keys(): 
    230             self.pardict[name] = self.pardef[name][1] 
     238            self.pardict[name] = self.pardef[name][PIDX_DEFAULT] 
    231239     
    232240    def setValueFromString( self, parname, value ): 
     
    234242        if not parname in self.pardict.keys(): 
    235243            raise ShxError( "unknown analysis parameter '%s'" % parname ) 
    236         partype = self.pardef[parname][0] 
     244        partype = self.pardef[parname][PIDX_TYPE] 
    237245        if partype == 'datetime': 
    238246            try: 
     
    272280        if not parname in self.pardict.keys(): 
    273281            raise ShxError( "unknown analysis parameter '%s'" % parname ) 
    274         partype = self.pardef[parname][0] 
     282        partype = self.pardef[parname][PIDX_TYPE] 
    275283        if partype == 'datetime': 
    276284            try: 
     
    294302                % self.partype[parname] 
    295303     
     304    def sortedParams( self ): 
     305        sk = [(self.pardef[k][PIDX_ORDER],k) for k in self.pardef.keys()] 
     306        sk.sort() 
     307        return zip(*sk)[1] 
     308     
    296309    def dump( self ): 
    297310        ret = "" 
    298         for name in self.pardict.keys(): 
     311        for name in self.sortedParams(): 
    299312            ret += "%s\t%s\n" % (name,self.getValueAsString(name)) 
    300313        return ret 
  • SHX/trunk/SeismicHandler/commands/events.py

    r1101 r1123  
    1313from obspy.core.util.geodetics import gps2DistAzimuth 
    1414from obspy.taup import TauPyModel 
    15 from obspy.sh.core import fromUTCDateTime 
     15from obspy.sh.core import toUTCDateTime, fromUTCDateTime 
    1616 
    1717DEG_TO_KM = 111.19 
     
    7373        "ADDR", 
    7474        "SKIPNODEPTH", 
     75        "MINDATE", 
     76        "MAXDATE", 
    7577    ] 
    7678 
     
    114116        if self.qualifiers["ADDR"]: 
    115117            fdsnadr = self.qualifiers["ADDR"] 
     118        if self.qualifiers["MINDATE"]: 
     119            evpar['starttime'] = toUTCDateTime( self.qualifiers["MINDATE"] ) 
     120        if self.qualifiers["MAXDATE"]: 
     121            evpar['endtime'] = toUTCDateTime( self.qualifiers["MAXDATE"] ) 
    116122         
    117123        # assume that then the first (and only) origin is the preferred one 
  • SHX/trunk/SeismicHandler/commands/param.py

    r1117 r1123  
    3636    redraw = False 
    3737     
    38     legalcmds = ('set','get','dump','save','load') 
     38    legalcmds = ('set','get','dump','save','load','reset') 
    3939 
    4040    def __init__(self, *args, **kwargs): 
     
    7171            analysispar.load( fname ) 
    7272            self.redraw = True 
     73        elif subcmd == 'reset': 
     74            analysispar.reset() 
    7375        else: 
    7476            print "This cannot happen, program bug in param.py" 
  • SHX/trunk/SeismicHandler/commands/reado.py

    r1101 r1123  
    6464    def load(filename, trclist="all", start=None, stop=None ): 
    6565        """ 
    66         Read datet fileusing obspy read. 
    67  
    68         Data is read into an ObsPy stream. 
     66        Read data file using obspy read. 
    6967        """ 
    7068        log_message("info.command.reado", "Reading '%s'..." % filename) 
  • SHX/trunk/SeismicHandler/commands/writeo.py

    r1108 r1123  
    4444        "Write data to file." 
    4545 
    46         outfile = self.parameters[0] 
     46        outfile = self.parameters[0].replace('\\','/') 
    4747        traces = traces_from_list(self.parameters[1]) 
    4848        format = self.parameters[2] 
  • SHX/trunk/SeismicHandler/modules/wx_.py

    r1120 r1123  
    6161        self.wheelpos = 0 
    6262        self.timewindow = (None,None) 
     63        self.last_number_of_traces = 0 
    6364 
    6465        # temporary layer for mouse motion 
     
    251252            if evt.RightIsDown(): 
    252253                self.ZoomWindow = None 
     254                if plotter: 
     255                    plotter.setZoomWindow( None, None, None ) 
    253256                if self.zoomwdwwidth == 0.: 
    254257                    self.__zoombox( dc, self.dragStart, (x, y), 
     
    323326                    + trace.get_info('t-origin') 
    324327                erel = end - trace.stats.starttime + trace.get_info('t-origin') 
    325                 plotter.setZoomWindow( srel, erel ) 
     328                plotter.setZoomWindow( trace.index(True), srel, erel ) 
    326329 
    327330    def OnMouseLeftUp(self, evt): 
     
    332335            self._releaseMouse(evt) 
    333336            self.dragStart = None 
     337             
     338        #print "dbg: double buffered", self.IsDoubleBuffered() 
    334339 
    335340        #if self.mousedouble: 
     
    639644                                   (shx_graphics.midpoint, relpos + STATION_INFO)) 
    640645        return x, y 
    641  
     646     
    642647    #@timeit 
    643648    def load(self, fnames=[]): 
     
    793798                self.zoomwdwwidth = 0 
    794799                self.ZoomWindow = None 
     800                if plotter: 
     801                    plotter.setZoomWindow( None, None, None ) 
    795802 
    796803 
     
    826833        width, height = self.GetVirtualSize() 
    827834        numTraces = len(self.traces) - Overlays.numberOfOverlays() 
     835        # delete zoom window if number of traces has changed 
     836        if self.last_number_of_traces != numTraces and self.ZoomWindow: 
     837            self.ZoomWindow = None 
     838            if plotter: 
     839                plotter.setZoomWindow( None, None, None ) 
     840        self.last_number_of_traces = numTraces 
    828841        globalnorm = self._normtype.startswith("A") 
    829842 
     
    12511264            # time window changed, delete zoom box 
    12521265            self.ZoomWindow = None 
     1266            if plotter: 
     1267                plotter.setZoomWindow( None, None, None ) 
    12531268 
    12541269     
     
    12911306        self._user_selection = 999. 
    12921307        self._zoomwdw = None 
     1308        self._seltrace = None 
    12931309        self.flag_beam = False 
    12941310        self.flag_norm = False 
    12951311        self.flag_overlap = True 
    12961312     
     1313    def showMessage( self, msg, error=False ): 
     1314        mode = wx.OK 
     1315        if error: 
     1316            mode |= wx.ICON_ERROR 
     1317        dlg = wx.MessageDialog(self, msg, "An error occured!", mode ) 
     1318        dlg.ShowModal() 
     1319        dlg.Destroy() 
     1320         
    12971321    def addMenuEntries( self ): 
    12981322        menubar = wx.MenuBar() 
     
    13011325        self.addEntry( fileMenu, 'Read Data File(s)', 
    13021326            'Read data file(s) in one of various formats', self.OnReadDataFile ) 
     1327        self.addEntry( fileMenu, 'Write Data File', 
     1328            'Write all traces into file. Specify format as extension.', 
     1329            self.OnWriteDataFile ) 
    13031330        self.addEntry( fileMenu, '&Quit\tCtrl+Q', 'Quit Graphics', self.OnQuit ) 
    13041331        # window menu 
     
    13181345        self.addEntry( tracesMenu, '&Demean\tCtrl+D', 
    13191346            'Remove mean value from all traces', self.OnDemean ) 
    1320         self.addEntry( tracesMenu, 'Sort by Distance', 
     1347        self.addEntry( tracesMenu, '&Sort by Distance\tCtrl+S', 
    13211348            'Sort traces by distance', self.OnSortByDistance ) 
     1349        self.addEntry( tracesMenu, 'Delete Selected Trace', 
     1350            'Delete trace with zoom window', self.OnDeleteTrace ) 
     1351        self.addEntry( tracesMenu, 'Delete Selected And Above', 
     1352            'Delete trace with zoom window and all above', 
     1353            self.OnDeleteTraceAndAbove ) 
    13221354        # array menu 
    13231355        arrayMenu = wx.Menu() 
     
    13901422    def OnDemean( self, e ): 
    13911423        _sendShCommand( 'demean all' ) 
     1424     
     1425    def OnDeleteTrace( self, e ): 
     1426        if self._seltrace == None: 
     1427            self.showMessage( "no trace selected" ) 
     1428        else: 
     1429            _sendShCommand( "del %d" % self._seltrace ) 
     1430 
     1431    def OnDeleteTraceAndAbove( self, e ): 
     1432        if self._seltrace == None: 
     1433            self.showMessage( "no trace selected" ) 
     1434        else: 
     1435            _sendShCommand( "del |%d|-|$dsptrcs|" % self._seltrace ) 
    13921436 
    13931437    def OnTest1( self, e ): 
     
    14051449    def OnReadDataFile( self, e ): 
    14061450        "Read one or more data files." 
    1407         dlg = wx.FileDialog( self, "Select Data File", defaultDir=os.getcwd() ) 
     1451        style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST 
     1452        dlg = wx.FileDialog( self, "Select Data File", defaultDir=os.getcwd(), 
     1453            style=style ) 
    14081454        dlg.ShowModal() 
    14091455        filelist = dlg.GetPaths() 
     
    14161462        _sendShCommand( cmd ) 
    14171463     
     1464    def OnWriteDataFile( self, e ): 
     1465        "Writes all traces to file." 
     1466        legal_formats = ('mseed','q','gse','gse2','sac') 
     1467        style = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT 
     1468        dlg = wx.FileDialog( self, "Select Output File", defaultDir=os.getcwd(), 
     1469            style=style ) 
     1470        dlg.ShowModal() 
     1471        outfile = dlg.GetPath() 
     1472        retcode = dlg.GetReturnCode() 
     1473        dlg.Destroy() 
     1474        if retcode != wx.ID_OK: 
     1475            return 
     1476        format = os.path.splitext(outfile)[1].lstrip('.').lower() 
     1477        if format not in legal_formats: 
     1478            msg = "Format '%s' not supported. Nothing written." % format 
     1479            self.showMessage( msg, error=True ) 
     1480            return 
     1481        cmd = "@WRITEO %s ALL %s" % (outfile.replace('/','\\'),format.upper()) 
     1482        _sendShCommand( cmd ) 
     1483     
    14181484    def OnSortByDistance( self, e ): 
    14191485        ap = AnalysisPar() 
     
    14211487        lon = ap.getValueAsString( 'epi_longitude' ) 
    14221488        if not lat or not lon: 
     1489            self.showMessage( "no epicenter defined" ) 
    14231490            return 
    14241491        _sendShCommand( "sort_by_distance %s %s" % (lat,lon) ) 
     
    14681535        self.canvas.OnSize(None) 
    14691536     
    1470     def setZoomWindow( self, start, end ): 
     1537    def setZoomWindow( self, trace, start, end ): 
     1538        self._seltrace = trace 
    14711539        self._zoomwdw = (start,end) 
    14721540 
     
    14741542    "Send command to command line interpreter." 
    14751543    wx.BeginBusyCursor() 
    1476     msgs.sendMessage("ui.command", cmd=cmdstring, name=name ) 
     1544    try: 
     1545        msgs.sendMessage("ui.command", cmd=cmdstring, name=name ) 
     1546        exc = None 
     1547    except Exception as exc: 
     1548        pass 
    14771549    wx.EndBusyCursor() 
     1550    if exc: 
     1551        raise exc 
    14781552 
    14791553 
Note: See TracChangeset for help on using the changeset viewer.