Changeset 1179 for SHX


Ignore:
Timestamp:
14.02.2016 00:21:18 (4 years ago)
Author:
klaus
Message:

extended functionality of read dialog

Location:
SHX/trunk/SeismicHandler/modules
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/SeismicHandler/modules/traces.py

    r1175 r1179  
    55#    http://www.seismic-handler.org/portal/wiki/Shx/LicenseTerms 
    66 
     7import os 
    78import numpy as np 
    89from obspy.core.util import AttribDict 
     
    3839        self.traces.overlays = OverlayTraces() 
    3940        self.netdict = {} 
     41        self.optchan = self.readOptChans() 
    4042 
    4143    def __getattr__(self, name): 
     
    133135        return self.netdict.get( station.upper(), None ) 
    134136     
     137    def getOptChan( self, station ): 
     138        return self.optchan.get( station, 'BH' ) 
     139     
    135140    def getMetaStatus( self, trace, addgain=False ): 
    136141        "Returns 0, 1 or 2 depending on metadata status." 
     
    191196                return True 
    192197        return False 
     198     
     199    def readOptChans( self ): 
     200        optcname = os.path.join(os.path.expanduser("~"), ".shx", "optchans.txt") 
     201        if not os.path.exists(optcname): 
     202            return {} 
     203        optdict = {} 
     204        for line in file(optcname): 
     205            if line.strip() == '' or line.startswith('#'): 
     206                continue 
     207            try: 
     208                station, optchan = line.split() 
     209            except: 
     210                continue 
     211            optdict[station] = chan 
     212        return optdict 
    193213 
    194214 
  • SHX/trunk/SeismicHandler/modules/wx_.py

    r1178 r1179  
    25742574        result = dlg.getResult() 
    25752575        keeptraces = True 
     2576        chanselect = '' 
    25762577        if result == None: 
    25772578            return 
     
    25822583                keeptraces = result[k] 
    25832584                continue 
     2585            elif k == 'chan_select': 
     2586                chanselect = result[k] 
     2587                continue 
    25842588            elif result[k] != '': 
    25852589                val = result[k] 
    25862590            else: 
    25872591                val = ";;" 
    2588             cmds.append( "param set %s %s" % (k,val) ) 
     2592            cmds.append( "@PARAM SET %s %s" % (k.upper(), 
     2593                val.replace('/','\\')) ) 
    25892594        if keeptraces: 
    2590             cmd = '\n'.join(cmds) 
    2591         else: 
    2592             cmd = '\n'.join(['del all','del h:all']+cmds) 
     2595            cmds = ['del all','del h:all'] + cmds 
     2596        if chanselect: 
     2597            cmds.append( 'chanselect %s' % chanselect ) 
     2598        cmd = '\n'.join(cmds) 
    25932599        _sendShCommand( cmd ) 
    25942600        # perform read 
  • SHX/trunk/SeismicHandler/modules/wxdialog.py

    r1178 r1179  
    55#    http://www.seismic-handler.org/portal/wiki/Shx/LicenseTerms 
    66 
     7import os 
    78from functools import partial 
    89import wx 
     
    1011from SeismicHandler.basics.tools import EventTextParser 
    1112from obspy.core import UTCDateTime 
    12 from obspy.sh.core import fromUTCDateTime 
     13from obspy.sh.core import fromUTCDateTime, toUTCDateTime 
    1314 
    1415 
     
    3233         
    3334        eh = 26 
    34         vspace = [(15,15), 0, wx.ALL, 1] 
     35        hboxspace = 5 
     36        linesep = 5 
     37        vspace = [(1,1), 0, wx.ALL, 1] 
    3538        inittime = self.ap.getValue( 'read_time' ) 
    3639        intime = wx.DateTime() 
     
    4245        inloc = self.ap.getValue( 'readws_loc' ) 
    4346        inchan = self.ap.getValue( 'readws_chan' ) 
     47        self.detlist = self.ap.getValue('ev_list').replace('\\','/') 
     48        self.detline = self.ap.getValue( 'ev_line' ) 
    4449     
    4550        # networks/station group 
     
    5661        vbox.Add( self.statnettext_ctrl, 0, 
    5762            wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
    58         stathbox.Add( vbox, 0, wx.ALL, 5 ) 
     63        stathbox.Add( vbox, 0, wx.ALL, hboxspace ) 
    5964        # Station 
    6065        vbox = wx.BoxSizer( wx.VERTICAL ) 
     
    6469        vbox.Add( self.statstattext_ctrl, 0, 
    6570            wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
    66         stathbox.Add( vbox, 0, wx.ALL, 5 ) 
     71        stathbox.Add( vbox, 0, wx.ALL, hboxspace ) 
    6772        # Location 
    6873        vbox = wx.BoxSizer( wx.VERTICAL ) 
     
    7277        vbox.Add( self.statloctext_ctrl, 0, 
    7378            wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
    74         stathbox.Add( vbox, 0, wx.ALL, 5 ) 
     79        stathbox.Add( vbox, 0, wx.ALL, hboxspace ) 
    7580        # Channels 
    7681        vbox = wx.BoxSizer( wx.VERTICAL ) 
     
    8085        vbox.Add( self.statchantext_ctrl, 0, 
    8186            wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
    82         stathbox.Add( vbox, 0, wx.ALL, 5 ) 
     87        stathbox.Add( vbox, 0, wx.ALL, hboxspace ) 
    8388        # Popup menu 
    8489        vbox = wx.BoxSizer( wx.VERTICAL ) 
     
    8994        vbox.Add( self.selpanel, 0, 
    9095            wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
    91         stathbox.Add( vbox, 0, wx.ALL, 5 ) 
     96        stathbox.Add( vbox, 0, wx.ALL, hboxspace ) 
    9297 
    9398        # Circular area 
     
    111116            wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
    112117        vbox.Add( hbox, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
    113         circhbox.Add( vbox, 0, wx.ALL, 5 ) 
     118        circhbox.Add( vbox, 0, wx.ALL, hboxspace ) 
    114119        # Longitude 
    115120        hbox = wx.BoxSizer( wx.HORIZONTAL ) 
     
    125130            wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
    126131        vbox.Add( hbox, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
    127         circhbox.Add( vbox, 0, wx.ALL, 5 ) 
     132        circhbox.Add( vbox, 0, wx.ALL, hboxspace ) 
    128133        # Radius 
    129134        hbox = wx.BoxSizer( wx.HORIZONTAL ) 
     
    139144            wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
    140145        vbox.Add( hbox, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
    141         circhbox.Add( vbox, 0, wx.ALL, 5 ) 
     146        circhbox.Add( vbox, 0, wx.ALL, hboxspace ) 
    142147 
    143148        # read date, time and length 
     
    150155            style=wx.DP_DEFAULT|wx.DP_SHOWCENTURY, size=(110,eh) ) 
    151156        vbox.Add( self.readdate_ctrl, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
    152         timehbox.Add( vbox, 0, wx.ALL, 5 ) 
     157        timehbox.Add( vbox, 0, wx.ALL, hboxspace ) 
    153158        # Hour 
    154159        vbox = wx.BoxSizer( wx.VERTICAL ) 
     
    158163            min=0, max=23, initial=inittime.hour, size=(50,eh) ) 
    159164        vbox.Add( self.readhour_ctrl, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
    160         timehbox.Add( vbox, 0, wx.ALL, 5 ) 
     165        timehbox.Add( vbox, 0, wx.ALL, hboxspace ) 
    161166        # Minute 
    162167        vbox = wx.BoxSizer( wx.VERTICAL ) 
     
    166171            min=0, max=59, initial=inittime.minute, size=(50,eh) ) 
    167172        vbox.Add( self.readminute_ctrl, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1) 
    168         timehbox.Add( vbox, 0, wx.ALL, 5 ) 
     173        timehbox.Add( vbox, 0, wx.ALL, hboxspace ) 
    169174        # Second 
    170175        vbox = wx.BoxSizer( wx.VERTICAL ) 
     
    174179            min=0, max=59, initial=inittime.second, size=(50,eh) ) 
    175180        vbox.Add( self.readsecond_ctrl, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1) 
    176         timehbox.Add( vbox, 0, wx.ALL, 5 ) 
     181        timehbox.Add( vbox, 0, wx.ALL, hboxspace ) 
    177182        # Read length 
    178183        vbox = wx.BoxSizer( wx.VERTICAL ) 
     
    182187            min=0, max=120, initial=6, size=(60,eh) ) 
    183188        vbox.Add( self.readlength_ctrl, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1) 
    184         timehbox.Add( vbox, 0, wx.ALL, 5 ) 
     189        timehbox.Add( vbox, 0, wx.ALL, hboxspace ) 
     190         
     191        # Detection list 
     192        dethbox = wx.BoxSizer( wx.HORIZONTAL ) 
     193        # Event List Button 
     194        vbox = wx.BoxSizer( wx.VERTICAL ) 
     195        label = os.path.basename(self.detlist) 
     196        self.detlistbtn = wx.Button( self, label=label ) 
     197        self.Bind( wx.EVT_BUTTON, self.OnDetlist, self.detlistbtn ) 
     198        vbox.Add( wx.StaticText(self,label='Change'), 0, 
     199            wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
     200        vbox.Add( self.detlistbtn, 1, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
     201        dethbox.Add( vbox, 1, wx.ALL, hboxspace ) 
     202        # Event List Line Counter 
     203        vbox = wx.BoxSizer( wx.VERTICAL ) 
     204        vbox.Add( wx.StaticText(self,label='Line'), 0, 
     205            wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1 ) 
     206        self.detline_ctrl = wx.SpinCtrl( self, style=wx.SP_ARROW_KEYS, 
     207            min=0, max=500, initial=self.detline, size=(60,eh) ) 
     208        vbox.Add( self.detline_ctrl, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 1) 
     209        dethbox.Add( vbox, 1, wx.ALL, hboxspace ) 
     210        self.Bind(wx.EVT_SPINCTRL, self.handlerDetline, self.detline_ctrl) 
    185211         
    186212        # Keep or delete existing traces 
     213        flaghbox = wx.BoxSizer( wx.HORIZONTAL ) 
    187214        self.keepcheck = wx.CheckBox(self,label='Keep Traces') 
    188215        self.keepcheck.SetValue( True ) 
     216        flaghbox.Add( self.keepcheck, 0, wx.ALL, hboxspace ) 
     217        self.chanselect_ctrl = wx.TextCtrl( self, value='HH,EH,BH,SH,DH', 
     218            size=(100,eh)) 
     219        flaghbox.Add( self.chanselect_ctrl, 0, wx.ALL, hboxspace ) 
     220        self.chanselectcheck = wx.CheckBox(self,label='Chan Select') 
     221        self.chanselectcheck.SetValue( False ) 
     222        self.chanselectcheck.Bind( wx.EVT_CHECKBOX, self.OnChanSelect, 
     223            self.chanselectcheck ) 
     224        self.chanselect_ctrl.Disable() 
     225        flaghbox.Add( self.chanselectcheck, 0, wx.ALL, hboxspace ) 
    189226 
    190227        # OK and Cancel buttons 
     
    192229        okbtn = wx.Button( self, label='OK' ) 
    193230        self.Bind( wx.EVT_BUTTON, self.OnReadOk, okbtn ) 
    194         hbox.Add( okbtn, 0, wx.ALL, 10 ) 
     231        hbox.Add( okbtn, 0, wx.ALL, hboxspace ) 
    195232        cbtn = wx.Button( self, label='Cancel' ) 
    196233        self.Bind( wx.EVT_BUTTON, self.OnReadCancel, cbtn ) 
    197         hbox.Add( cbtn, 0, wx.ALL, 10 ) 
     234        hbox.Add( cbtn, 0, wx.ALL, hboxspace ) 
    198235 
    199236        # Popup menu config         
     
    207244            item = self.popupmenu.Append( wx.ID_ANY, selection ) 
    208245            item.SetBackgroundColour( shxcolor1 ) 
    209             self.Bind( wx.EVT_MENU, partial(self.OnEntry,selection), item ) 
     246            self.Bind( wx.EVT_MENU, partial(self.OnPopupEntry,selection), item ) 
    210247         
    211248        # put everything together 
     
    216253        vbox.Add( stathbox, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 3 ) 
    217254        vbox.Add( *vspace ) 
    218         vbox.Add( wx.StaticLine(self, size=(400,1)), 0, wx.ALL, 5 ) 
     255        vbox.Add( wx.StaticLine(self, size=(400,1)), 0, wx.ALL, linesep ) 
    219256        vbox.Add( *vspace ) 
    220257        vbox.Add( self.circcheck, 0, 
     
    222259        vbox.Add( circhbox, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 3 ) 
    223260        vbox.Add( *vspace ) 
    224         vbox.Add( wx.StaticLine(self, size=(400,1)), 0, wx.ALL, 5 ) 
     261        vbox.Add( wx.StaticLine(self, size=(400,1)), 0, wx.ALL, linesep ) 
    225262        vbox.Add( *vspace ) 
    226263        vbox.Add( wx.StaticText(self,label='Read Time and Length'), 0, 
     
    228265        vbox.Add( timehbox, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 3 ) 
    229266        vbox.Add( *vspace ) 
    230         vbox.Add( wx.StaticLine(self, size=(400,1)), 0, wx.ALL, 5 ) 
     267        vbox.Add( wx.StaticLine(self, size=(400,1)), 0, wx.ALL, linesep ) 
     268        vbox.Add( *vspace ) 
     269        vbox.Add( wx.StaticText(self,label='Event List'), 0, 
     270            wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 3 ) 
     271        vbox.Add( dethbox, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 3 ) 
     272        vbox.Add( *vspace ) 
     273        vbox.Add( wx.StaticLine(self, size=(400,1)), 0, wx.ALL, linesep ) 
    231274        #vbox.Add( *vspace ) 
    232         vbox.Add( self.keepcheck, 0, 
     275        vbox.Add( flaghbox, 0, 
    233276            wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 3 ) 
    234277        #vbox.Add( *vspace ) 
    235         vbox.Add( wx.StaticLine(self, size=(400,1)), 0, wx.ALL, 5 ) 
     278        vbox.Add( wx.StaticLine(self, size=(400,1)), 0, wx.ALL, linesep ) 
    236279        vbox.Add( *vspace ) 
    237280        vbox.Add( hbox, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 3 ) 
     
    250293            readdate.GetDay(), self.readhour_ctrl.GetValue(), 
    251294            self.readminute_ctrl.GetValue(), self.readsecond_ctrl.GetValue() ) ) 
    252         self.result['read_length'] = self.readlength_ctrl.GetValue()*60 
     295        self.result['read_length'] = "%d" % (self.readlength_ctrl.GetValue()*60) 
    253296        if self.circcheck.GetValue(): 
    254             self.result['sta_latitude'] = self.circlat_fs.getValue() 
    255             self.result['sta_longitude'] = self.circlon_fs.getValue() 
    256             self.result['sta_radius'] = self.circrad_fs.getValue() 
     297            self.result['sta_latitude'] = "%g" % self.circlat_fs.getValue() 
     298            self.result['sta_longitude'] = "%g" % self.circlon_fs.getValue() 
     299            self.result['sta_radius'] = "%g" % self.circrad_fs.getValue() 
    257300        else: 
    258             self.result['sta_radius'] = 0. # disables reading circle area 
     301            self.result['sta_radius'] = "0." # disables reading circle area 
    259302        if self.statcheck.GetValue(): 
    260303            self.result['readws_net'] = self.statnettext_ctrl.GetValue() 
     
    265308            self.result['readws_net'] = '' # disable station/network reading 
    266309            #network = station = loc = chan = None 
     310        self.result['ev_line'] = "%d" % self.detline_ctrl.GetValue() 
     311        self.result['ev_list'] = self.detlist 
    267312        self.result['keep_traces'] = self.keepcheck.GetValue() 
     313        self.result['chan_select'] = self.chanselect_ctrl.GetValue() 
    268314        self.Destroy() 
    269315 
     
    314360        self.selpanel.PopupMenu(self.popupmenu, pos) 
    315361     
    316     def OnEntry( self, pname, e, *args ): 
     362    def OnPopupEntry( self, pname, e, *args ): 
     363        tmp = pname.split() 
     364        if len(tmp) == 4: 
     365            tmp.append( None ) 
     366        if len(tmp) != 5: 
     367            return 
     368        self.statnettext_ctrl.SetValue( tmp[0] ) 
     369        self.statstattext_ctrl.SetValue( tmp[1] ) 
     370        self.statloctext_ctrl.SetValue( tmp[2] ) 
     371        self.statchantext_ctrl.SetValue( tmp[3] ) 
     372        chanselect = tmp[4] 
     373        if chanselect == None: 
     374            return 
     375        if chanselect == '-': 
     376            self.chanselectcheck.SetValue( False ) 
     377            self.chanselect_ctrl.Disable() 
     378        else: 
     379            self.chanselectcheck.SetValue( True ) 
     380            self.chanselect_ctrl.Enable() 
     381            self.chanselect_ctrl.SetValue( chanselect ) 
     382     
     383    def OnDetlist( self, e ): 
     384        style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST 
     385        dlg = wx.FileDialog( self, "Select Event List", defaultDir=os.getcwd(), 
     386            style=style ) 
     387        dlg.ShowModal() 
     388        newdetlist = dlg.GetPath() 
     389        retcode = dlg.GetReturnCode() 
     390        dlg.Destroy() 
     391        if retcode != wx.ID_OK: 
     392            return 
     393        self.detlist = newdetlist 
     394        self.detlistbtn.SetLabel( os.path.basename(self.detlist) ) 
     395     
     396    def handlerDetline( self, e ): 
     397        wantline = e.GetInt() 
     398        if wantline == 0: 
     399            return 
     400        print "dbg: int", wantline 
     401        lineno = 0 
     402        line = None 
     403        for xline in file(self.detlist): 
     404            lineno += 1 
     405            if lineno == wantline: 
     406                line = xline.strip() 
     407                break 
     408        if line == None: 
     409            return 
    317410        try: 
    318             net, station, loc, chan = pname.split() 
     411            dtime = toUTCDateTime( line.split()[0] ) 
    319412        except: 
    320             return 
    321         self.statnettext_ctrl.SetValue( net ) 
    322         self.statstattext_ctrl.SetValue( station ) 
    323         self.statloctext_ctrl.SetValue( loc ) 
    324         self.statchantext_ctrl.SetValue( chan ) 
     413            print "dbg: cannot parse line", line 
     414            return 
     415        print "dbg: line", dtime 
     416        self.setTimeValues( dtime ) 
     417         
     418    def setTimeValues( self, dtime ): 
     419        wxtime = wx.DateTime() 
     420        wxtime.SetYear( dtime.year ) 
     421        wxtime.SetMonth( dtime.month-1 ) 
     422        wxtime.SetDay( dtime.day ) 
     423        self.readdate_ctrl.SetValue( wxtime ) 
     424        self.readhour_ctrl.SetValue( dtime.hour ) 
     425        self.readminute_ctrl.SetValue( dtime.minute ) 
     426        self.readsecond_ctrl.SetValue( dtime.second ) 
     427 
     428    def OnChanSelect( self, e ): 
     429        if self.chanselectcheck.GetValue(): 
     430            self.chanselect_ctrl.Enable() 
     431        else: 
     432            self.chanselect_ctrl.Disable() 
    325433 
    326434    def getResult( self ): 
Note: See TracChangeset for help on using the changeset viewer.