import numpy as np import matplotlib.pyplot as plt def clipsign (value, clip): clipthese = abs(value) > clip return value * ~clipthese + np.sign(value)*clip*clipthese def wiggle (traces, skipt=1,scale=1.,lwidth=.1,offsets=None,redvel=0., manthifts=None, tshift=0.,sampr=1.,clip=10., dx=1., color='black',fill=True,line=True, ax=None): ns = traces.shape[1] ntr = traces.shape[0] t = np.arange(ns)*sampr timereduce = lambda offsets, redvel, shift: [float(offset) / redvel + shift for offset in offsets] if (offsets is not None): shifts = timereduce(offsets, redvel, tshift) elif (manthifts is not None): shifts = manthifts else: shifts = np.zeros((ntr,)) for i in range(0, ntr, skipt): trace = traces[i].copy() trace[0] = 0 trace[-1] = 0 if ax == None: if (line): plt.plot(i*dx + clipsign(trace / scale, clip), t - shifts[i], color=color, linewidth=lwidth) if (fill): for j in range(ns): if (trace[j] < 0): trace[j] = 0 plt.fill(i*dx + clipsign(trace / scale, clip), t - shifts[i], color=color, linewidth=0) else: if (line): ax.plot(i*dx + clipsign(trace / scale, clip), t - shifts[i], color=color, linewidth=lwidth) if (fill): for j in range(ns): if (trace[j] < 0): trace[j] = 0 ax.fill(i*dx + clipsign(trace / scale, clip), t - shifts[i], color=color, linewidth=0) def PrimaryWave(x, velocity, tinterp): return tinterp + 1./velocity*x def ReflectedWave(x, velocity, tinterp): time = np.sqrt(x**2/velocity**2+tinterp**2) return time