source: SHX/trunk/SeismicHandler/commands/param.py @ 1139

Revision 1139, 5.2 KB checked in by klaus, 4 years ago (diff)

phase menu; BP filter; bugfix in recover; quick save and recover

Line 
1# -*- coding: utf-8 -*-
2
3#    This file is part of Seismic Handler eXtended (SHX). For terms of use and
4#    license information please see license.txt and visit
5#    http://www.seismic-handler.org/portal/wiki/Shx/LicenseTerms
6
7from SeismicHandler.basics.command import BaseCommand
8from SeismicHandler.basics.analysispar import AnalysisPar
9from SeismicHandler.basics.error import ShxError
10from SeismicHandler.basics.messages import ui_event
11from SeismicHandler.modules.traces import traces_from_list
12from obspy.sh.core import fromUTCDateTime
13
14provides = {"param": "param"}
15class param(BaseCommand):
16    """
17    URI:http://www.seismic-handler.org/portal/wiki/ShParam
18    """
19    numberOfParameters = [1,2,3]
20    parameterQueries = [
21        {
22            "text": "subcmd",
23            "type": "str",
24            "question": False,
25        },
26        {
27            "text": "parameter name",
28            "type": "str",
29            "question": False,
30        },
31        {
32            "text": "parameter value/output variable",
33            "type": "str",
34            "question": False,
35        },
36    ]
37    known_qualifiers = [
38        "APPEND",
39    ]
40    redraw = False
41   
42    legalcmds = {
43        'set'        : 3,
44        'get'        : 3,
45        'dump'       : 1,
46        'save'       : 2,
47        'saveascmd'  : 2,
48        'savetraces' : 2,
49        'load'       : 2,
50        'reset'      : 1,
51    }
52
53    def __init__(self, *args, **kwargs):
54        # unroll args & kwargs
55        BaseCommand.__init__(self, *args, **kwargs)
56
57    #@timeit
58    def run(self):
59        subcmd = self.parameters[0].lower()
60        if subcmd not in self.legalcmds.keys():
61            raise ShxError( "illegal param subcmd '%s'" % subcmd )
62        if len(self.parameters) != self.legalcmds[subcmd]:
63            raise ShxError( "need %d parameters" % self.legalcmds[subcmd] )
64        if len(self.parameters) == 1:
65            pass
66        elif len(self.parameters) == 2:
67            subcmd, name = self.parameters
68            name = name.replace('\\','/')
69        else:
70            subcmd, name, value = self.parameters
71            name = name.lower()
72        subcmd = subcmd.lower()
73        analysispar = AnalysisPar()
74       
75        if self.qualifiers["APPEND"]:
76            wopen = 'a'
77        else:
78            wopen = 'w'
79
80        if subcmd == 'set':
81            analysispar.setValueFromString( name, value )
82            ui_event( "updateparams" )
83        elif subcmd == 'get':
84            symbname = value
85            if not symbname.startswith('&'):
86                raise ShxError( "syntax error in output variable '%s'"
87                    % symbname )
88            setattr(self.symbols, symbname[1:],
89                analysispar.getValueAsString(name) )
90        elif subcmd == 'dump':
91            print analysispar.dump()
92        elif subcmd == 'save':
93            analysispar.save( name, wopen=wopen )
94        elif subcmd == 'saveascmd':
95            analysispar.saveascmd( name, wopen=wopen )
96        elif subcmd == 'load':
97            analysispar.load( name )
98            self.redraw = True
99            ui_event( "updateparams" )
100        elif subcmd == 'reset':
101            analysispar.reset()
102            ui_event( "updateparams" )
103        elif subcmd == 'savetraces':
104            saveTraces( name, wopen=wopen )
105        else:
106            print "This cannot happen, program bug in param.py"
107            return
108
109
110def saveTraces( fname, wopen='w' ):
111    savecmd = []
112    for trc in traces_from_list('all'):
113        src = trc.get_info('DATASOURCE').split()
114        if len(src) == 0:
115            continue
116        rdcmd = src[0].upper()
117        if rdcmd == 'FDSNWS':
118            net = trc.stats.network
119            if net == "":
120                net = ';;'
121            loc = trc.stats.location
122            if loc == "":
123                loc = ';;'
124            srv = src[1]  # FDSN server is second word
125            tcmd = "fdsnws %s %s %s %s %s %g /addr=%s" % (net,trc.stats.station,
126                loc,trc.stats.channel,fromUTCDateTime(trc.stats.starttime),
127                (trc.stats.endtime-trc.stats.starttime),srv)
128        elif rdcmd == 'FETCH':
129            chan = trc.stats.channel[:-1]
130            comp = trc.stats.channel[-1]
131            tcmd = "fetch %s.%s.%s %s %s %s %g" % (trc.stats.network,
132                trc.stats.station,trc.stats.location,chan,comp,
133                fromUTCDateTime(trc.stats.starttime),
134                (trc.stats.endtime-trc.stats.starttime))
135        elif rdcmd == 'READO':
136            tcmd = '@READO %s' % src[1].replace('/','\\')
137        elif rdcmd == 'READ':
138            tcmd = '@READ %s' % src[1].replace('/','\\')
139        elif rdcmd == 'READS':
140            chan = trc.stats.channel[:-1]
141            comp = trc.stats.channel[-1]
142            tcmd = 's %s %s %g %s %s %s' % (src[1],
143                fromUTCDateTime(trc.stats.starttime),
144                (trc.stats.endtime-trc.stats.starttime),trc.stats.station,
145                comp,chan)
146        else:
147            print "unknown data source '%s'" % src
148            continue
149        if tcmd not in savecmd:
150            savecmd.append( tcmd )
151    fp = open( fname, wopen )
152    for cmd in savecmd:
153        fp.write( "%s\n" % cmd )
154    fp.close()
155       
156
157if __name__ == "__main__":
158    import doctest
159    doctest.testmod(exclude_empty=True)
Note: See TracBrowser for help on using the repository browser.