Changeset 1155 for SHX


Ignore:
Timestamp:
03.02.2016 23:06:25 (4 years ago)
Author:
klaus
Message:

call command; event line parsing

Location:
SHX/trunk/SeismicHandler
Files:
2 added
5 edited

Legend:

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

    r1150 r1155  
    349349        'ev_line'         : (101, 'int',       0, 4), 
    350350        'ev_minmagn'      : (102, 'float',     4.5, 4 ), 
    351         'ev_offset'       : (103, 'float',     60., 4), 
     351        'ev_offset'       : (103, 'float',     90., 4), 
    352352        'ev_agency'       : (104, 'string',    'IRIS', 4), 
    353353        'ev_phase'        : (105, 'string',    'P', 4), 
  • SHX/trunk/SeismicHandler/basics/tools.py

    r1119 r1155  
    66 
    77import time 
    8 from obspy.core import AttribDict 
     8from obspy.core import AttribDict, UTCDateTime 
     9from obspy.sh.core import toUTCDateTime 
    910 
    1011__all__ = ["Property", "Singleton","timeit","timestore"] 
     
    206207        print "maxlocklength: %d" % self.maxlocklength 
    207208 
     209 
     210class EventTextParser: 
     211 
     212    def __init__( self, text ): 
     213        self.text = text 
     214        self.parser = [ 
     215            self.EmscWebline, 
     216            self.SzoWebline, 
     217        ] 
     218     
     219    def parse( self ): 
     220        for p in self.parser: 
     221            res = p(self.text) 
     222            if res: 
     223                return res 
     224        return None 
     225     
     226    def EmscWebline( self, text ): 
     227        """ 
     228        from EMSC website http://www.emsc-csem.org/Earthquake/seismologist.php 
     229        Example: 
     230        2016-02-03  17:59:43.5  37.07   N       141.24  E       10              M       4.8 ... 
     231        """ 
     232        tmp = self.text.split() 
     233        if len(tmp) < 6: 
     234            return None 
     235        signchar = tmp[3].upper() 
     236        if signchar not in ('N','S'): 
     237            return None 
     238        signlat = 1. 
     239        if signchar == 'S': 
     240            signlat = -1. 
     241        signchar = tmp[5].upper() 
     242        if signchar not in ('E','W'): 
     243            return None 
     244        signlon = 1. 
     245        if signchar == 'W': 
     246            signlon = -1. 
     247        datestr = tmp[0] 
     248        if datestr.count('-') != 2: 
     249            return None 
     250        try: 
     251            year, month, day = datestr.split('-') 
     252            day = int( day ) 
     253            month = int( month ) 
     254            year = int( year ) 
     255        except: 
     256            return None 
     257        timestr = tmp[1] 
     258        if timestr.count(':') != 2: 
     259            return None 
     260        try: 
     261            hour, minute, second = timestr.split(':') 
     262            hour = int( hour ) 
     263            minute = int( minute ) 
     264            second = float( second ) 
     265        except: 
     266            return None 
     267        try: 
     268            lat = float( tmp[2] ) 
     269        except: 
     270            return None 
     271        lat *= signlat 
     272        try: 
     273            lon = float( tmp[4] ) 
     274        except: 
     275            return None 
     276        lon *= signlon 
     277        intsec = int( second ) 
     278        fracsec = int( (second - float(intsec))*1000000 ) 
     279        return (UTCDateTime(year,month,day,hour,minute,intsec,fracsec),lat,lon) 
     280     
     281    def SzoWebline( self, text ): 
     282        """ 
     283        from SZO website: http://www.szgrf.bgr.de/analysis-reports/index.html 
     284        Example: 
     285        31-Jan-2016_18:43:07  -17.0   168.1   223.5f                BGR  ... 
     286        """ 
     287        tmp = self.text.split() 
     288        if len(tmp) < 3: 
     289            return None 
     290        origstr = tmp[0] 
     291        try: 
     292            origin = toUTCDateTime( origstr ) 
     293        except: 
     294            return None 
     295        if origin == None: 
     296            return None 
     297        try: 
     298            lat = float( tmp[1] ) 
     299            lon = float( tmp[2] ) 
     300        except: 
     301            return None 
     302        if abs(lat) > 95.: 
     303            return None 
     304        if lon < 0. or lon > 185.: 
     305            return None 
     306        return(origin,lat,lon) 
     307 
     308 
    208309timestore = TimeStore() 
    209310 
  • SHX/trunk/SeismicHandler/commands/fdsnws.py

    r1154 r1155  
    124124                st = client.get_waveforms_bulk( StringIO.StringIO(bulk) ) 
    125125            elif reqmode == 'bystationset': 
    126                 print "dbg: reqpars:", reqpars 
    127126                bulk = "" 
    128127                for netsta in reqpars: 
  • SHX/trunk/SeismicHandler/modules/stations.py

    r1149 r1155  
    343343        else: 
    344344            metalist = [meta] 
     345         
     346        if date == None: 
     347            # return first meta info found (to be used only for location 
     348            return metalist[0][0] 
    345349 
    346350        match = None 
  • SHX/trunk/SeismicHandler/modules/wx_.py

    r1154 r1155  
    1717from SeismicHandler.core import Traces, Overlays, traces_from_list 
    1818from SeismicHandler.basics.codes import NAME, VERSION 
    19 from SeismicHandler.basics.tools import get_default_attrib, timeit, timestore 
     19from SeismicHandler.basics.tools import get_default_attrib, timeit, timestore,\ 
     20    EventTextParser 
    2021from SeismicHandler.basics.analysispar import PhaseList, AnalysisPar 
    2122from obspy.core import read, UTCDateTime 
     
    21572158            'Prepare previous event time from list', self.OnPrevEvent ) 
    21582159        eventsMenu.AppendSeparator() 
     2160        self.addEntry( eventsMenu, 'Event Info Parser ...', 
     2161            'Read event from text line', self.EventInfoParser ) 
     2162        eventsMenu.AppendSeparator() 
    21592163        self.addEntry( eventsMenu, 'Locate Event\tl', 
    21602164            'Use phase list for locating event', self.OnLocateEvent ) 
     
    26312635        _sendShCommand( 'shx_menu_next_event -1' ) 
    26322636     
     2637    def EventInfoParser( self, e ): 
     2638        dlg = EventParseDialog( self ) 
     2639        dlg.ShowModal() 
     2640        dlg.Destroy() 
     2641 
    26332642    def OnLocateEvent( self, e ): 
    26342643        "plotterWindow: events menu entry." 
     
    29622971         
    29632972 
     2973class EventParseDialog(wx.Dialog): 
     2974 
     2975    def __init__( self, parent ): 
     2976        "ParamDialog: init method." 
     2977        wx.Dialog.__init__( self, parent, -1, title="Event Info Parser", 
     2978            style=wx.SUNKEN_BORDER )         
     2979        self.SetBackgroundColour( shxcolor1 ) 
     2980        height = 26 
     2981        btnwidth = 70 
     2982 
     2983        hbox = wx.BoxSizer( wx.HORIZONTAL ) 
     2984        okbtn = wx.Button( self, label='OK', pos=(50,70) ) 
     2985        self.Bind( wx.EVT_BUTTON, self.OnTextOk, okbtn ) 
     2986        hbox.Add( okbtn, 0, wx.ALL, 10 ) 
     2987        cbtn = wx.Button( self, label='Cancel', pos=(150,70) ) 
     2988        self.Bind( wx.EVT_BUTTON, self.OnTextCancel, cbtn ) 
     2989        hbox.Add( cbtn, 0, wx.ALL, 10 ) 
     2990 
     2991        vbox = wx.BoxSizer(wx.VERTICAL) 
     2992        vbox.Add( (5,5), 0, wx.ALL, 1 ) 
     2993        vbox.Add( wx.StaticText(self,label="reference station"), 0, wx.ALL, 3 ) 
     2994        self.text_refstat = wx.TextCtrl( self, value='gr.gra1', size=(60,height) ) 
     2995        vbox.Add( self.text_refstat, 0, wx.ALL, 3 ) 
     2996        vbox.Add( (5,5), 0, wx.ALL, 1 ) 
     2997        vbox.Add( wx.StaticText(self,label="event info"), 0, wx.ALL, 3 ) 
     2998        self.text_evinfo = wx.TextCtrl( self, value='', size=(200,height) ) 
     2999        vbox.Add( self.text_evinfo, 0, wx.ALL, 3 ) 
     3000        vbox.Add( (5,5), 0, wx.ALL, 1 ) 
     3001        vbox.Add( hbox, 0, wx.ALL, 3 ) 
     3002        vbox.Add( (5,5), 0, wx.ALL, 1 ) 
     3003        vbox.SetSizeHints(self) 
     3004        self.SetAutoLayout(True) 
     3005        self.SetSizer( vbox ) 
     3006        self.Layout() 
     3007     
     3008    def OnTextOk( self, e ): 
     3009        refstat = self.text_refstat.GetValue() 
     3010        evinfo = EventTextParser(self.text_evinfo.GetValue()).parse() 
     3011        if evinfo == None: 
     3012            plotter.showMessage( "Could not parse event line") 
     3013            self.Destroy() 
     3014            return 
     3015        origin, lat, lon = evinfo 
     3016        self.Destroy() 
     3017        cmd = "shx_util_eventinfo %s %s %g %g" % (refstat, 
     3018            fromUTCDateTime(origin),lat,lon) 
     3019        _sendShCommand( cmd ) 
     3020         
     3021    def OnTextCancel( self, e ): 
     3022        self.Destroy() 
     3023     
     3024 
    29643025def _absToRelTime( trc, abstime ): 
    29653026    "Convert absolute (trace) time to relative (time axis) time." 
Note: See TracChangeset for help on using the changeset viewer.