Changeset 1088


Ignore:
Timestamp:
08.01.2016 16:46:41 (4 years ago)
Author:
klaus
Message:

fixed deepcopy bug of graphics, moved graphics attributes to shx_graphics AttribDict?

Location:
SHX/trunk/SeismicHandler
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/SeismicHandler/modules/wx_.py

    r1080 r1088  
    175175 
    176176            th2 = self.traceheight / 2 
    177             mpth2 = trace.shx.midpoint + th2 
    178             mmth2 = trace.shx.midpoint - th2 
     177            shx_graphics = trace.get_graphics() 
     178            if shx_graphics == None: 
     179                print "dbg: returned from callback, no shx_graphics" 
     180                return 
     181            mpth2 = shx_graphics.midpoint + th2 
     182            mmth2 = shx_graphics.midpoint - th2 
    179183 
    180184            # draw box 
     
    182186                self.ZoomWindow = None 
    183187                self.__zoombox(dc, self.dragStart, (x, y), 
    184                                                     trace.shx.midpoint, size=2) 
     188                                                    shx_graphics.midpoint, size=2) 
    185189            # draw position line 
    186190            elif evt.LeftIsDown(): 
     
    425429        theight = self.traceheight // 2 
    426430        for t in self.traces: 
    427             if tracepos >= t.shx.midpoint - theight and \ 
    428                                           tracepos <= t.shx.midpoint + theight: 
     431            shx_graphics = t.get_graphics() 
     432            if shx_graphics == None: 
     433                continue 
     434            if 'midpoint' not in shx_graphics: 
     435                continue 
     436            if tracepos >= shx_graphics.midpoint - theight and \ 
     437                                          tracepos <= shx_graphics.midpoint + theight: 
    429438                trace = t 
    430439                break 
     
    434443            start = trace.stats.starttime 
    435444            end = trace.stats.endtime 
    436             pixel_width = trace.shx.PlotPixels 
     445            shx_graphics = trace.get_graphics() 
     446            if shx_graphics != None: 
     447                pixel_width = shx_graphics.PlotPixels 
    437448            # only needed for vertical plotting 
    438449            length = self.height - STATION_INFO - MARGINS[0] - MARGINS[2] 
     
    486497        if trace is None: 
    487498            return 
     499        shx_grahics = trace.get_graphics() 
     500        if shx_graphics == None: 
     501            return 
    488502 
    489503        if self.relativeAxis: 
    490504            start = trace.stats.starttime 
    491505            end = trace.stats.endtime 
    492             pixel_width = trace.shx.PlotPixels 
     506            pixel_width = shx_graphics.PlotPixels 
    493507        else: 
    494508            start = self.start 
     
    509523            x, y = self.CalcScrolledPosition(( 
    510524                relpos + STATION_INFO + MARGINS[3], 
    511                 trace.shx.midpoint 
     525                shx_graphics.midpoint 
    512526            )) 
    513527            # MARGINS[1] probably wrong 
    514528            #x, y = self.CalcScrolledPosition(( 
    515529            #    relpos + STATION_INFO + MARGINS[1] + MARGINS[3], 
    516             #    trace.shx.midpoint 
     530            #    shx_graphics.midpoint 
    517531            #)) 
    518532        # vertical 
    519533        elif self.traceOrder == 2: 
    520534            x, y = self.CalcScrolledPosition( 
    521                      (trace.shx.midpoint, self.height - relpos - STATION_INFO)) 
     535                     (shx_graphics.midpoint, self.height - relpos - STATION_INFO)) 
    522536        elif self.traceOrder == 3: 
    523537            x, y = self.CalcScrolledPosition( 
    524                                    (trace.shx.midpoint, relpos + STATION_INFO)) 
     538                                   (shx_graphics.midpoint, relpos + STATION_INFO)) 
    525539        return x, y 
    526540 
     
    668682            trace, start, end = self.ZoomWindow 
    669683            if  trace is not None: 
     684                shx_graphics = trace.get_graphics() 
     685                if shx_graphics == None: 
     686                    return 
    670687                start = self.TraceAndTimeToScreen(trace, start) 
    671688                end = self.TraceAndTimeToScreen(trace, end) 
    672689                self._debug("draw zoom window") 
    673                 self.__zoombox(dc, start, end, trace.shx.midpoint, color="Blue") 
     690                self.__zoombox(dc, start, end, shx_graphics.midpoint, color="Blue") 
    674691 
    675692        #del odc 
     
    734751        # plot every trace 
    735752        for i, t in enumerate(trcs): 
     753            if getattr(t, "shx_graphics", None) is None: 
     754                # trace not yet established 
     755                continue 
    736756            if not self.relativeAxis: 
    737757                start = self.start 
     
    760780            t.prepare_image_data(pltwidth, zheight, 
    761781                timewindow, zoom=prepzoom, norm=norm) 
     782             
     783            shx_graphics = t.get_graphics() 
     784            if shx_graphics == None: 
     785                continue 
    762786 
    763787            # make trace graphics sketch 
     
    788812                portion = plotStartSec / (timewindow[1] - timewindow[0]) 
    789813                plotoffset = portion * pltwidth 
    790             t.shx.plotoffset = plotoffset 
     814            #ks t.shx_graphics.plotoffset = plotoffset 
    791815 
    792816            # For vertical plotting the data has to be transformed 
    793817            if self.traceOrder in [0, 1]: 
    794                 ImageData = t.shx.ImageData 
     818                ImageData = shx_graphics.ImageData 
    795819            if self.traceOrder == 2: 
    796820                ImageData = [] 
    797821                # simply swap x and y 
    798                 for line in t.shx.ImageData: 
     822                for line in shx_graphics.ImageData: 
    799823                    ImageData.append([line[1], pltwidth - line[0], 
    800824                                                  line[3], pltwidth - line[2]]) 
     
    802826                ImageData = [] 
    803827                # dito plus mirror x 
    804                 for line in t.shx.ImageData: 
     828                for line in shx_graphics.ImageData: 
    805829                    ImageData.append([zheight - line[1], line[0], 
    806830                                                   zheight - line[3], line[2]]) 
     
    871895            # helper lines for debugging 
    872896            w, h, _, _ = canvas.GetFullTextExtent(txt) 
    873             t.shx.midpoint = tmp = i * theight + theight//2 + MARGINS[0] 
     897            shx_graphics.midpoint = tmp = i * theight + theight//2 + MARGINS[0] 
    874898            if self.traceOrder in [0, 1]: 
    875899                canvas.DrawText(txt, 5 + MARGINS[3], tmp - h // 2) 
     
    882906            elif self.traceOrder == 2: 
    883907                canvas.DrawRotatedText(txt, tmp - h // 2, height - MARGIN, 90) 
    884                 canvas.DrawLine(t.shx.midpoint, MARGIN, 
     908                canvas.DrawLine(shx_graphics.midpoint, MARGIN, 
    885909                                                    tmp, height - STATION_INFO) 
    886910#                canvas.SetPen(wx.Pen('Red', 1, wx.LONG_DASH)) 
  • SHX/trunk/SeismicHandler/patches/obspy_.py

    r1087 r1088  
    1313 
    1414import numpy as np 
     15import sys 
    1516import math 
    1617import uuid 
     
    2829 
    2930 
     31graphics_hook = {} 
     32 
     33 
    3034#@timeit 
    3135def _stream_auto_merge(self, *args, **kwargs): 
     
    7276                   normation 
    7377    """ 
     78    shx_graphics = self.get_graphics() 
     79    if shx_graphics == None: 
     80        return 
     81 
    7482    log_message('debug.patches', "Preparing plotting data...", self.id) 
    7583 
     
    99107        cachedX = False 
    100108        cachedY = False 
     109    # disable caching 
     110    cachedX = cachedY = False 
    101111 
    102112    if not cachedX: 
    103113        # save new ID 
    104         self.shx.CacheTraceID = CacheTraceID 
     114        shx_graphics.CacheTraceID = CacheTraceID 
    105115 
    106116        # data points per pixel 
     
    109119 
    110120        # get copy of data 
    111         self.shx.PlotData = pt.data.copy() 
     121        shx_graphics.PlotData = pt.data.copy() 
    112122    else: 
    113123        log_message('debug.patches.devel', 
     
    122132 
    123133        # get data for reshape operation 
    124         data = self.shx.PlotData[:covered] 
     134        data = shx_graphics.PlotData[:covered] 
    125135 
    126136        # extra treatment for remaining values 
    127         remaining = self.shx.PlotData[covered:] 
     137        remaining = shx_graphics.PlotData[covered:] 
    128138 
    129139        # reshape data and get min/max values 
     
    147157        # At this stage the x-transformed data can be cached! If pixel_width 
    148158        # doesn't change, the data can be reused to save time. 
    149         self.shx.PlotData = joined 
    150  
    151     log_message('debug.patches.devel', 
    152                                   width, height, norm, type(self.shx.PlotData)) 
     159        shx_graphics.PlotData = joined 
     160 
     161    #ks log_message('debug.patches.devel', 
     162    #ks                              width, height, norm, type(self.shx.PlotData)) 
    153163 
    154164    if cachedY: 
     
    158168 
    159169    # renew cache id 
    160     self.shx.CacheTraceID = CacheTraceID 
     170    shx_graphics.CacheTraceID = CacheTraceID 
    161171 
    162172    # get basis for normation 
     
    177187    except: 
    178188        trczoom = 1.0 
    179     y = self.shx.PlotData.copy() 
     189    y = shx_graphics.PlotData.copy() 
    180190    y *= self.stats.calib / norm * height / 2 * zoom * trczoom 
    181191 
     
    198208        oldx, oldy = newx, newy 
    199209 
    200     self.shx.ImageData = lines 
    201     self.shx.PlotPixels = pixel_width 
     210    shx_graphics.ImageData = lines 
     211    shx_graphics.PlotPixels = pixel_width 
    202212 
    203213#@timeit 
     
    217227            self.stats.sh[k.upper()] = v 
    218228 
     229    # container for graphics temp data, to be exluded from deepcopy, 
     230    # defined in establish 
    219231    self.establish() 
    220232 
     
    229241        msg = "Pixel cache marked dirty for unbounded trace %u" % id(self) 
    230242    log_message("debug.patches", msg) 
    231     self.shx.CacheTraceID = [] 
     243    shx_graphics = self.get_graphics() 
     244    if shx_graphics != None: 
     245        shx_graphics.CacheTraceID = [] 
    232246 
    233247 
     
    360374    Set default info entries for SH(X) trace. Etc. 
    361375    """ 
     376    if getattr(self, "shx_graphics", None) is None: 
     377        self.shx_graphics = AttribDict() 
     378 
    362379    if self.shx.get("_established", False): 
    363380        return 
     
    476493    """ 
    477494     
    478     dbg_a = ['CacheTraceID', '_MutableMapping__marker', '__abstractmethods__', '__class__', '__contains__', '__deepcopy__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__eq__', '__format__', '__getattr__', '__getattribute__', '__getitem__', '__getstate__', '__hash__', '__init__', '__iter__', '__len__', '__metaclass__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_abc_cache', '_abc_negative_cache', '_abc_negative_cache_version', '_abc_registry', '_established', '_parent', '_pretty_str', 'clear', 'copy', 'defaults', 'get', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'original', 'pop', 'popitem', 'readonly', 'setdefault', 'update', 'values'] 
    479     dbg_b = dir(self.shx) 
    480     print "dbg: setdiff", set(dbg_b)-set(dbg_a) 
    481      
    482     # exclude parent from deepcopy 
     495    # exclude parent and original from deepcopy 
    483496    parentstore = self.shx._parent 
    484497    self.shx._parent = None 
     
    488501    else: 
    489502        originalstore = None 
    490     graphstore = {} 
    491     nocopynames = ['PlotPixels', 'PlotData', 'ImageData'] 
    492     for ncname in nocopynames: 
    493         if ncname in self.shx.keys(): 
    494             graphstore[ncname] = getattr( self.shx, ncname ) 
    495             delattr( self.shx, ncname ) 
    496     print "dbg: self.shx", dir(self.shx) 
     503     
     504    # exclude graphic attributes from deepcopy as these may change during copy 
     505    graphstore = None 
     506    if getattr(self, "shx_graphics", None) is not None: 
     507        graphstore = self.shx_graphics 
     508        graphics_hook[self.stats.sh.UNIQUE_ID] = self.shx_graphics 
     509        delattr( self, 'shx_graphics' ) 
     510             
     511    sys.stdout.flush() 
    497512    new = self._obspy_copy() 
     513     
     514    # restore _parent and original 
    498515    self.shx._parent = parentstore 
    499516    new.shx._parent = parentstore 
     
    501518        self.shx.original = originalstore 
    502519        # new.shx.original = None 
    503     for k in graphstore.keys(): 
    504         setattr( self.shx, k, graphstore[k] ) 
    505         setattr( new.shx, k, graphstore[k] ) 
     520 
     521    # restore graphical attributes 
     522    if graphstore != None: 
     523        self.shx_graphics = graphstore 
     524        graphics_hook.pop(self.stats.sh.UNIQUE_ID) 
     525     
    506526    new.stats.sh.UNIQUE_ID = uuid.uuid4().hex 
    507527    #new.shx._established = False 
     
    518538    new.establish() 
    519539    return new 
     540 
     541def trace_get_graphics( self ): 
     542    try: 
     543        return self.shx_graphics 
     544    except: 
     545        if self.stats.sh.UNIQUE_ID in graphics_hook: 
     546            return graphics_hook[self.stats.sh.UNIQUE_ID] 
     547        else: 
     548            print "dbg: no graphics found in obspy_.graphics_hook" 
     549            return None 
    520550 
    521551# monkey patching obspy stream class: traces are merge automatically if stream 
     
    537567Trace.get_sample_id = trace_get_sample_id 
    538568Trace.invalidate_cache = trace_invalidate_cache 
     569Trace.get_graphics = trace_get_graphics 
    539570 
    540571log_message("info.patches", "Applied monkey patches for ObsPy") 
Note: See TracChangeset for help on using the changeset viewer.