Ignore:
Timestamp:
15.01.2016 18:16:48 (4 years ago)
Author:
klaus
Message:

analysisparameters, command param; more menu entries

File:
1 edited

Legend:

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

    r1101 r1117  
    44#    license information please see license.txt and visit 
    55#    http://www.seismic-handler.org/portal/wiki/Shx/LicenseTerms 
     6# 
     7# K. Stammler, 8-Jan-2016 
    68 
    79""" 
     
    911""" 
    1012 
    11  
     13import pickle 
    1214from SeismicHandler.basics import Singleton 
    13  
     15from SeismicHandler.basics.error import ShxError 
     16from obspy.core import UTCDateTime 
     17from obspy.sh.core import toUTCDateTime, fromUTCDateTime 
    1418 
    1519PICKTYPE_MANUAL = 1 
     
    3337} 
    3438 
     39 
     40#------------------------------------------------------------------------------- 
    3541 
    3642 
     
    4955        # phase weight 
    5056        self.weight = weight 
     57 
     58 
     59#------------------------------------------------------------------------------- 
    5160 
    5261 
     
    193202 
    194203 
    195 if __name__ == "__main__": 
    196     phaselist = PhaseList() 
     204#------------------------------------------------------------------------------- 
     205 
     206 
     207class AnalysisPar: 
     208    "Holds analysis parameters. Updated via command line interface." 
     209 
     210    __metaclass__ = Singleton 
     211 
     212    # Definition of parameter types. 
     213    pardef = { 
     214        # analysis results 
     215        'fk_slowness'     : ('float',     None), 
     216        'fk_azimuth'      : ('float',     None), 
     217        'epi_latitude'    : ('float',     None), 
     218        'epi_longitude'   : ('float',     None), 
     219        # processing parameters 
     220        'read_time'       : ('datetime',  None), 
     221        'fdsn_server'     : ('string',    'bgr'), 
     222        'fk_max_slowness' : ('float',     15.0), 
     223        'fk_min_req'      : ('float',     0.4), 
     224        'fk_max_freq'     : ('float',     3.0), 
     225    } 
     226 
     227    def __init__( self ): 
     228        self.pardict = {} 
     229        for name in self.pardef.keys(): 
     230            self.pardict[name] = self.pardef[name][1] 
     231     
     232    def setValueFromString( self, parname, value ): 
     233        "Set parameter value according to given types." 
     234        if not parname in self.pardict.keys(): 
     235            raise ShxError( "unknown analysis parameter '%s'" % parname ) 
     236        partype = self.pardef[parname][0] 
     237        if partype == 'datetime': 
     238            try: 
     239                self._setValue( parname, toUTCDateTime(value) ) 
     240            except: 
     241                raise ShxError( "cannot parse time '%s'" % value ) 
     242        elif partype == 'string': 
     243            self._setValue( parname, value ) 
     244        elif partype == 'float': 
     245            try: 
     246                self._setValue( parname, float(value) ) 
     247            except: 
     248                raise ShxError( "need float here '%s'" % value ) 
     249        elif partype == 'int': 
     250            try: 
     251                self._setValue( parname, int(value) ) 
     252            except: 
     253                raise ShxError( "need int here '%s'" % value ) 
     254        else: 
     255            print "Program Bug: illegal parameter type '%s'" \ 
     256                % self.partype[parname] 
     257     
     258    def _setValue( self, parname, value ): 
     259        "Set parameter value. Value to be set over command line only." 
     260        if not parname in self.pardict.keys(): 
     261            raise ShxError( "unknown analysis parameter '%s'" % parname ) 
     262        self.pardict[parname] = value 
     263     
     264    def getValue( self, parname ): 
     265        "Get parameter value." 
     266        if not parname in self.pardict.keys(): 
     267            raise ShxError( "unknown analysis parameter '%s'" % parname ) 
     268        return self.pardict[parname] 
     269     
     270    def getValueAsString( self, parname ): 
     271        "Return current parameter value." 
     272        if not parname in self.pardict.keys(): 
     273            raise ShxError( "unknown analysis parameter '%s'" % parname ) 
     274        partype = self.pardef[parname][0] 
     275        if partype == 'datetime': 
     276            try: 
     277                return fromUTCDateTime( self.getValue(parname) ) 
     278            except: 
     279                return "" 
     280        elif partype == 'string': 
     281            return self.getValue( parname ) 
     282        elif partype == 'float': 
     283            try: 
     284                return "%g" % self.getValue(parname) 
     285            except: 
     286                return "" 
     287        elif partype == 'int': 
     288            try: 
     289                return "%d" % self.getValue(parname) 
     290            except: 
     291                return "" 
     292        else: 
     293            print "Program Bug: illegal parameter type '%s'" \ 
     294                % self.partype[parname] 
     295     
     296    def dump( self ): 
     297        ret = "" 
     298        for name in self.pardict.keys(): 
     299            ret += "%s\t%s\n" % (name,self.getValueAsString(name)) 
     300        return ret 
     301     
     302    def save( self, fname ): 
     303        fp = open( fname, 'w' ) 
     304        pickle.dump( analysispar.pardict, fp ) 
     305        pickle.dump( phaselist.phasedict, fp ) 
     306        fp.close() 
     307     
     308    def load( self, fname ): 
     309        global phaselist, analysispar 
     310        fp = open( fname ) 
     311        analysispar.pardict = pickle.load( fp ) 
     312        phaselist.phasedict = pickle.load( fp ) 
     313        fp.close() 
     314         
     315 
     316 
     317#------------------------------------------------------------------------------- 
     318 
     319phaselist = PhaseList() 
     320analysispar = AnalysisPar() 
     321 
Note: See TracChangeset for help on using the changeset viewer.