Changeset 835 for SHX/trunk


Ignore:
Timestamp:
11/08/12 09:11:24 (8 years ago)
Author:
marcus
Message:
  • adding [ShRot] to core methods
Location:
SHX/trunk/SeismicHandler
Files:
1 added
2 edited

Legend:

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

    r769 r835  
    7777            raise ShxError("value conversion error", status=1108) 
    7878 
    79         start, end = Screen.timewdw() 
    80  
    81         # center time window start in dt 
    82         start += 1.5 * trclist[0].stats.delta 
    83  
     79        start = end = None 
    8480        try: 
    8581            if len(self.parameters) == len(trclist) + 2: 
     
    8783        except ValueError: 
    8884            raise ShxError("float conversion error", status=1108) 
     85 
     86        azimuth = float(parameters[0]) 
     87        if dim2: 
     88            incidence = None 
     89        else: 
     90            incidence = float(parameters[1]) 
     91 
     92        method = "LQT" 
     93        if self.qualifiers["UVW-ZNE"]: 
     94            method = "ZNE" 
     95        elif self.qualifiers["ZNE-UVW"]: 
     96            method = "UVW" 
     97 
     98        result = self.rot(trclist, azimuth, incidence, start, end, method) 
     99 
     100        add_traces(result) 
     101 
     102    @staticmethod 
     103    def rot(trclist, azimuth, incidence, start=None, end=None, method="LQT"): 
     104        """ 
     105        Rotate 2 or 3 traces. 
     106        """ 
     107        method = method.upper() 
     108        import pdb; pdb.set_trace() 
     109        if start is None: 
     110            start, end = Screen.timewdw() 
     111            # center time window start in dt 
     112            start += 1.5 * trclist[0].stats.delta 
    89113 
    90114        # fit data window to trace extend 
     
    100124 
    101125        data = [] 
     126        import pdb; pdb.set_trace() 
    102127        for t in trclist: 
    103128            data.append(t.get_datawindow(start, end)) 
    104129 
    105         if dim2: 
     130        if len(trclist) == 2: 
    106131            # obspy uses back azimuth approach 
    107             angle = parameters[0] 
     132            angle = azimuth 
    108133            if angle > 180: 
    109134                angle = 540 - angle 
     
    113138            data.append(angle) 
    114139            rotated = rotate_NE_RT(*data) 
     140        elif len(trclist) == 3: 
     141            if method == "LQT": 
     142                data.append(azimuth) 
     143                data.append(incidence) 
     144                rotated = rotate_ZNE_LQT(*data) 
     145            elif method == "ZNE": 
     146                rotated = rotate_UVW_ZNE(*data) 
     147            elif method == "UVW": 
     148                rotated = rotate_ZNE_UVW(*data) 
    115149        else: 
    116             import pdb; pdb.set_trace() 
    117              
    118             if self.qualifiers["UVW-ZNE"]: 
    119                 rotated = rotate_UVW_ZNE(*data) 
    120             elif self.qualifiers["ZNE-UVW"]: 
    121                 rotated = rotate_ZNE_UVW(*data) 
    122             else: 
    123                 data.extend(parameters[:2]) 
    124                 rotated = rotate_ZNE_LQT(*data) 
     150            raise ShxError("Only 2 or 3 traces can be rotated at once!") 
    125151 
    126152        result = [] 
     
    135161            result.append(t) 
    136162 
    137         add_traces(result) 
     163        return result 
    138164 
    139165 
  • SHX/trunk/SeismicHandler/core/__init__.py

    r829 r835  
    88__all__ = [ 
    99    "Traces", "Hidden", "Stations", 
    10     "reada", "readfile", "readq", "reads", "rms", "summation", "writeq", 
    11     "writea" 
     10    "reada", "readfile", "readq", "reads", "rms", "rotate", "summation", 
     11    "writeq", "writea" 
    1212] 
    1313 
     
    1515from SeismicHandler.modules.traces import Traces as sh_traces, traces_from_list 
    1616from SeismicHandler.modules.stations import Stations as sh_stations 
    17 from obspy.core import read as obspy_read 
     17from obspy.core import Stream, read as obspy_read 
    1818 
    1919# station metadata 
     
    248248 
    249249 
     250def rotate(tracelist, azimuth, incidence=None, start=None, stop=None): 
     251    """ 
     252    Method for 2- and 3-dimensional rotation of traces. 
     253 
     254    This method accepts the following arguments: 
     255 
     256    tracelist: accepts string input holding trace numbers (count start at one). 
     257               e.g. "1-3" or list of Trace objects 
     258    azimuth:   angle 
     259    incidence: angle 
     260    start:     window start (relative offset in seconds) 
     261    stop:      window end (dito) 
     262 
     263    If start is not given, the current time window will be used. 
     264 
     265    Returns rotated traces as Stream. 
     266    """ 
     267    from SeismicHandler.commands.rot import rot 
     268    if isinstance(tracelist, basestring): 
     269        traces = traces_from_list(tracelist) 
     270    else: 
     271        traces = tracelist 
     272 
     273    if len(traces) == 3 and incidence is None: 
     274        raise KeyError("Missing incidence angle!") 
     275 
     276    return Stream(rot.rot(traces, azimuth, incidence, start, stop)) 
     277 
     278 
    250279if __name__ == "__main__": 
    251280    import doctest 
Note: See TracChangeset for help on using the changeset viewer.