Changeset 841 for SHX/trunk


Ignore:
Timestamp:
11/08/12 15:02:02 (8 years ago)
Author:
marcus
Message:
  • added filter method "simulate" to core methods
  • update trace.index
Location:
SHX/trunk/SeismicHandler
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/SeismicHandler/commands/al.py

    r731 r841  
    4646            except AttributeError: 
    4747                log_message("warning.al", 
    48                               "info not found at trace no %u" % (t.index() + 1)) 
     48                              "info not found at trace no %u" % t.index(True)) 
    4949                continue 
    5050 
     
    5454                ShxError( 
    5555                    "no absolute time information in info entry" + \ 
    56                     " '%s' at trace no %u." % (timeinfo, t.index() + 1) 
     56                    " '%s' at trace no %u." % (timeinfo, t.index(True)) 
    5757                ) 
    5858 
     
    6060 
    6161            log_message("debug.al", 
    62                "T-ORIGIN of trace no %i set to %.2f" % (t.index() + 1, torigin)) 
     62               "T-ORIGIN of trace no %i set to %.2f" % (t.index(True), torigin)) 
    6363 
    6464 
  • SHX/trunk/SeismicHandler/commands/fili.py

    r722 r841  
    4545            raise NotImplementedError("Compressing filters is not supported.") 
    4646 
     47        _type = self.parameters[0] 
     48        filters = self.parameters[1:] 
     49        chain = self.load(filters, _type) 
     50        set_runtime("FILTER:%s" % _type, chain) 
     51 
     52    @staticmethod 
     53    def load(filters, _type="F"): 
     54        """ 
     55        Load filter files into chain. 
     56        """ 
    4757        extensions = { 
    4858            "F": "FLF", 
     
    5060            "D": "FLT", 
    5161        } 
    52         _type = self.parameters[0] 
    53         filters = self.parameters[1:] 
    5462 
    5563        chain = [] 
     
    7684                        "error opening input file: %s" % fullpath, status=2003) 
    7785 
    78         set_runtime("FILTER:%s" % _type, chain) 
     86        return chain 
    7987 
    8088 
  • SHX/trunk/SeismicHandler/commands/filter_.py

    r769 r841  
    6666                raise ShxError("float conversion error", status=1108) 
    6767        else: 
    68             _start = 0 
     68            _start = None 
     69            _stop = None 
    6970 
    7071        _type = self.parameters[0] 
     
    7576        if not filterset: 
    7677            raise ShxError("no filter read in", status=2009) 
     78         
     79        newtraces = [] 
     80        msg = "applied filter to trace no %u" 
     81        for t in traces: 
     82            newtraces.append( 
     83                       self.filter(t, filterset, _start, _stop, taper, tapval)) 
     84            log_message("debug.filter", msg % t.index(True)) 
     85        add_traces(newtraces) 
    7786 
    78         newtraces = [] 
    79         for t in traces: 
    80             torigin = t.get_info("t-origin") 
    81             for _f in filterset: 
    82                 # act on copy but remember original 
    83                 if _start: 
    84                     tf = t.slice( 
    85                         t.stats.starttime + _start - torigin, 
    86                         t.stats.starttime + _stop - torigin 
    87                     ) 
    88                 else: 
    89                     tf = t.copy() 
    90                 tf.shx.original = t 
     87    @staticmethod 
     88    def filter(trace, filterset, _start=None, _stop=None, taper=False, 
     89                                                                  tapval=None): 
     90        """ 
     91        Perform filter operation for one trace. 
     92        """ 
    9193 
    92                 for f in _f: 
    93                     simfilter = { 
    94                         'poles': f.output_coeff, 
    95                         'zeros': f.input_coeff, 
    96                         'gain': 1, 
    97                         'sensitivity': f.normalization, 
    98                     } 
     94        torigin = trace.get_info("t-origin") 
     95        for _f in filterset: 
     96            # act on copy but remember original 
     97            if _start is not None: 
     98                tf = trace.slice( 
     99                    trace.stats.starttime + _start - torigin, 
     100                    trace.stats.starttime + _stop - torigin 
     101                ) 
     102            else: 
     103                _start = 0 
     104                tf = trace.copy() 
     105            tf.shx.original = trace 
    99106 
    100                     tf.simulate( 
    101                         paz_simulate=simfilter, 
    102                         taper=taper, 
    103                         taper_fraction=tapval, 
    104                         shsim=True 
    105                     ) 
     107            for f in _f: 
     108                simfilter = { 
     109                    'poles': f.output_coeff, 
     110                    'zeros': f.input_coeff, 
     111                    'gain': 1, 
     112                    'sensitivity': f.normalization, 
     113                } 
    106114 
    107                     msg = "%s filtered by %s" % (tf.id, f.filename) 
    108                     log_message("debug.filter", msg) 
     115                tf.simulate( 
     116                    paz_simulate=simfilter, 
     117                    taper=taper, 
     118                    taper_fraction=tapval, 
     119                    shsim=True 
     120                ) 
    109121 
    110                 # retain SH data standard 
    111                 tf.data = np.require(tf.data, "float32") 
     122                msg = "%s filtered by %s" % (tf.id, f.filename) 
     123                log_message("debug.filter", msg) 
    112124 
    113                 if _start > torigin: 
    114                     tf.set_info("t-origin", _start) 
    115                 new_starttime(t, tf, _start) 
    116                 newtraces.append(tf) 
     125            # retain SH data standard 
     126            tf.data = np.require(tf.data, "float32") 
    117127 
    118         add_traces(newtraces) 
     128            if _start > torigin: 
     129                tf.set_info("t-origin", _start) 
     130            new_starttime(trace, tf, _start) 
     131 
     132        return tf 
    119133 
    120134 
  • SHX/trunk/SeismicHandler/commands/shift.py

    r729 r841  
    4747            t.set_info("t-origin", t.get_info("t-origin") + value) 
    4848 
    49             msg = "trace %u shifted by %.2f seconds" % (t.index() + 1, value) 
     49            msg = "trace %u shifted by %.2f seconds" % (t.index(True), value) 
    5050            log_message("debug.shift", msg) 
    5151 
  • SHX/trunk/SeismicHandler/core/__init__.py

    r835 r841  
    88__all__ = [ 
    99    "Traces", "Hidden", "Stations", 
    10     "reada", "readfile", "readq", "reads", "rms", "rotate", "summation", 
    11     "writeq", "writea" 
     10    "reada", "readfile", "readq", "reads", "rms", "rotate", "simulate", 
     11    "summation", "writeq", "writea" 
    1212] 
    1313 
     
    195195 
    196196 
    197 def simulate(*args, **kwargs): 
    198     """ 
    199     FILI / FILTER wrapper 
    200     """ 
    201     pass 
     197def simulate(tracelist, flf): 
     198    """ 
     199    Method for simulating instruments. Basically a FILI / FILTER wrapper. 
     200 
     201    This method accepts the following arguments: 
     202 
     203    tracelist: accepts string input holding trace numbers (count start at one). 
     204               e.g. "1-3" or list of Trace objects 
     205    flf:       Filter file name without extension. 
     206 
     207    Please note that only FLF filter files are supported! 
     208 
     209    Returns filtered traces as Stream object. 
     210    """ 
     211    from SeismicHandler.commands.fili import fili 
     212    from SeismicHandler.commands.filter_ import _filter 
     213 
     214    if isinstance(tracelist, basestring): 
     215        traces = traces_from_list(tracelist) 
     216    else: 
     217        traces = tracelist 
     218    chain = fili.load([flf]) 
     219 
     220    nt = [] 
     221    for t in traces: 
     222        nt.append(_filter.filter(t, chain)) 
     223 
     224    return Stream(nt) 
    202225 
    203226 
  • SHX/trunk/SeismicHandler/patches/obspy_.py

    r829 r841  
    367367    self.data = np.require(self.data, "float32") 
    368368 
    369 def trace_index(self): 
    370     """ 
    371     Return trace position within parent's list. 
    372     """ 
    373     return self.shx._parent.traces.index(self) 
     369def trace_index(self, one=False): 
     370    """ 
     371    Return trace position within parent's list. If "one" is set to True, 
     372    numbering will start at 1. 
     373    """ 
     374    idx = self.shx._parent.traces.index(self) 
     375    if one: 
     376        idx += 1 
     377    return idx 
    374378 
    375379def trace_get_datawindow(self, lo, hi): 
  • SHX/trunk/SeismicHandler/tests/scripts/FILTER.SHC

    r644 r841  
    11del all 
    22dtw 
    3 READS/invhdr DB: 20-feb-2012_2:39 600 grb3 z bh 
     3READS/invhdr DB: 20-oct-2012_2:39 600 grb3 z bh 
    44fili f BP_2S_10HZ_4 
    55filter f 1 
     6writea tx2 2 /npl=1 
    67fili f GRSN_S+G_WWSSN_SP 
    78shift 1 -10 
    89filter f 1 50 150 /taper=0.5 
     10!writea tx3 3 /npl=1 
    911list_all start 
    1012list_all t-origin 
Note: See TracChangeset for help on using the changeset viewer.