regul = Damping(layer.size) # Use an L-curve analysis to find the best regularization parameter solver = LCurve(misfit, regul, [10 ** i for i in range(-30, -15)]).fit() residuals = solver.residuals() layer.addprop('magnetization', solver.estimate_) print "Residuals:" print "mean:", residuals.mean() print "stddev:", residuals.std() # Now I can forward model the layer at the south pole and check against the # true solution of the prism tfpole = prism.tf(x, y, z, model, -90, 0) tfreduced = sphere.tf(x, y, z, layer, -90, 0) mpl.figure() mpl.suptitle('L-curve') mpl.title("Estimated regularization parameter: %g" % (solver.regul_param_)) solver.plot_lcurve() mpl.grid() mpl.figure(figsize=(14, 4)) mpl.subplot(1, 3, 1) mpl.axis('scaled') mpl.title('Layer (A/m)') mpl.pcolor(layer.y, layer.x, layer.props['magnetization'], layer.shape) mpl.colorbar() mpl.m2km() mpl.subplot(1, 3, 2) mpl.axis('scaled') mpl.title('Fit (nT)') levels = mpl.contour(y, x, tf, shape, 15, color='r')
""" GravMag: Generate noise-corrupted gravity gradient tensor data """ from fatiando import mesher, gridder, gravmag, utils from fatiando.vis import mpl prisms = [mesher.Prism(-1000,1000,-1000,1000,0,2000,{'density':1000})] shape = (100,100) xp, yp, zp = gridder.regular((-5000, 5000, -5000, 5000), shape, z=-200) components = [gravmag.prism.gxx, gravmag.prism.gxy, gravmag.prism.gxz, gravmag.prism.gyy, gravmag.prism.gyz, gravmag.prism.gzz] print "Calculate the tensor components and contaminate with 5 Eotvos noise" ftg = [utils.contaminate(comp(xp, yp, zp, prisms), 5.0) for comp in components] print "Plotting..." mpl.figure(figsize=(14,6)) mpl.suptitle("Contaminated FTG data") names = ['gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz'] for i, data in enumerate(ftg): mpl.subplot(2,3,i+1) mpl.title(names[i]) mpl.axis('scaled') levels = mpl.contourf(xp*0.001, yp*0.001, data, (100,100), 12) mpl.colorbar() mpl.contour(xp*0.001, yp*0.001, data, shape, levels, clabel=False) mpl.show()
# Plot the data titles = ['gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz'] mpl.figure() for i, title in enumerate(titles): mpl.subplot(3, 2, i + 1) mpl.title(title) mpl.axis('scaled') levels = mpl.contourf(yp, xp, tensor[i], shape, 10) mpl.contour(yp, xp, tensor[i], shape, levels) mpl.m2km() mpl.show() # Pick the centers of the expanding windows # The number of final solutions will be the number of points picked mpl.figure() mpl.suptitle('Pick the centers of the expanding windows') mpl.axis('scaled') mpl.contourf(yp, xp, tensor[-1], shape, 50) mpl.colorbar() centers = mpl.pick_points(area, mpl.gca(), xy2ne=True) cms = [] for center in centers: # Use the first eigenvector to estimate the center of mass cm, sigma = gravmag.tensor.center_of_mass(xp, yp, zp, eigenvecs[0], windows=100, wcenter=center) cms.append(cm) print "Sigma = %g" % (sigma) # Plot the prism and the estimated center of mass # It won't work well because we're using only a single window myv.figure()
import sys import numpy from fatiando import gridder, utils from fatiando.mesher import Square from fatiando.vis import mpl from fatiando.seismic import ttime2d from fatiando.seismic.epic2d import Homogeneous # Make a velocity model to calculate traveltimes area = (0, 10, 0, 10) vp, vs = 2, 1 model = [Square(area, props={'vp': vp, 'vs': vs})] # Pick the locations of the receivers mpl.figure() mpl.axis('scaled') mpl.suptitle("Choose the location of the receivers") rec_points = mpl.pick_points(area, mpl.gca(), marker='^', color='r') # and the source mpl.figure() mpl.axis('scaled') mpl.suptitle("Choose the location of the source") mpl.points(rec_points, '^r') src = mpl.pick_points(area, mpl.gca(), marker='*', color='y') if len(src) > 1: print "Don't be greedy! Pick only one point as the source" sys.exit() # Calculate the P and S wave traveltimes srcs, recs = utils.connect_points(src, rec_points) ptime = ttime2d.straight(model, 'vp', srcs, recs) stime = ttime2d.straight(model, 'vs', srcs, recs) # Calculate the residual time (S - P) with added noise
# Calculate the effect shape = (100, 100) xp, yp, zp = gridder.regular(area, shape, z=-500) data = [ polyprism.gxx(xp, yp, zp, model), polyprism.gxy(xp, yp, zp, model), polyprism.gxz(xp, yp, zp, model), polyprism.gyy(xp, yp, zp, model), polyprism.gyz(xp, yp, zp, model), polyprism.gzz(xp, yp, zp, model) ] # and plot it titles = ['gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz'] mpl.figure() mpl.axis('scaled') mpl.suptitle("Gravity tensor produced by prism model (Eotvos)") for i in xrange(len(data)): mpl.subplot(3, 2, i + 1) mpl.title(titles[i]) mpl.contourf(yp, xp, data[i], shape, 20) mpl.colorbar() for p in model: mpl.polygon(p, '.-k', xy2ne=True) mpl.set_area(area) mpl.m2km() mpl.show() # Show the prisms myv.figure() myv.polyprisms(model, 'density') myv.axes(myv.outline(bounds), ranges=[i * 0.001 for i in bounds]) myv.wall_north(bounds)
# Plot the data titles = ['gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz'] mpl.figure() for i, title in enumerate(titles): mpl.subplot(3, 2, i + 1) mpl.title(title) mpl.axis('scaled') levels = mpl.contourf(yp, xp, tensor[i], shape, 10) mpl.contour(yp, xp, tensor[i], shape, levels) mpl.m2km() mpl.show() # Pick the centers of the expanding windows # The number of final solutions will be the number of points picked mpl.figure() mpl.suptitle('Pick the centers of the expanding windows') mpl.axis('scaled') mpl.contourf(yp, xp, tensor[-1], shape, 50) mpl.colorbar() centers = mpl.pick_points(area, mpl.gca(), xy2ne=True) cms = [] for center in centers: # Use the first eigenvector to estimate the center of mass cm, sigma = gravmag.tensor.center_of_mass(xp, yp, zp, eigenvecs[0], windows=100, wcenter=center) cms.append(cm) print "Sigma = %g" % (sigma)
xp, yp, zp = gridder.regular((-5000, 5000, -5000, 5000), shape, z=-150) fields = [prism.potential(xp, yp, zp, model), prism.gx(xp, yp, zp, model), prism.gy(xp, yp, zp, model), prism.gz(xp, yp, zp, model), prism.gxx(xp, yp, zp, model), prism.gxy(xp, yp, zp, model), prism.gxz(xp, yp, zp, model), prism.gyy(xp, yp, zp, model), prism.gyz(xp, yp, zp, model), prism.gzz(xp, yp, zp, model)] titles = ['potential', 'gx', 'gy', 'gz', 'gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz'] mpl.figure(figsize=(8, 9)) mpl.subplots_adjust(left=0.03, right=0.95, bottom=0.05, top=0.92, hspace=0.3) mpl.suptitle("Potential fields produced by a 3 prism model") for i, field in enumerate(fields): mpl.subplot(4, 3, i + 3) mpl.axis('scaled') mpl.title(titles[i]) levels = mpl.contourf(yp*0.001, xp*0.001, field, shape, 15) cb = mpl.colorbar() mpl.contour(yp*0.001, xp*0.001, field, shape, levels, clabel=False, linewidth=0.1) mpl.show() myv.figure() myv.prisms(model, prop='density') axes = myv.axes(myv.outline()) myv.wall_bottom(axes.axes.bounds, opacity=0.2) myv.wall_north(axes.axes.bounds) myv.show()
misfit = (EQLGravity(x1, y1, z1, gz, layer) + scale * EQLGravity(x2, y2, z2, gzz, layer, field='gzz')) regul = Smoothness2D(layer.shape) # Use an L-curve analysis to find the best regularization parameter solver = LCurve(misfit, regul, [10**i for i in range(-30, -20)]).fit() layer.addprop('density', solver.estimate_) # Now I can forward model gz using my layer to produce an integrated map in a # much denser region shape = (50, 50) x, y, z = gridder.regular(area, shape, z=0) gz_layer = sphere.gz(x, y, z, layer) gz_true = prism.gz(x, y, z, model) mpl.figure() mpl.suptitle('L-curve') mpl.title("Estimated regularization parameter: %g" % (solver.regul_param_)) solver.plot_lcurve() mpl.grid() # Plot the layer and the fit mpl.figure(figsize=(14, 4)) mpl.suptitle('Observed data (black) | Predicted by layer (red)') mpl.subplot(1, 3, 1) mpl.axis('scaled') mpl.title('Layer (kg.m^-3)') mpl.pcolor(layer.y, layer.x, layer.props['density'], layer.shape) mpl.colorbar().set_label(r'Density $kg.m^{-3}$') mpl.m2km() mpl.subplot(1, 3, 2) mpl.axis('scaled')
shape = (100, 100) xp, yp, zp = gridder.regular(dataarea, shape, z=-500) data = [ polyprism.gxx(xp, yp, zp, model), polyprism.gxy(xp, yp, zp, model), polyprism.gxz(xp, yp, zp, model), polyprism.gyy(xp, yp, zp, model), polyprism.gyz(xp, yp, zp, model), polyprism.gzz(xp, yp, zp, model)] # Calculate the 3 invariants invariants = tensor.invariants(data) data = data + invariants # and plot it mpl.figure() mpl.axis('scaled') mpl.suptitle("Tensor and invariants produced by prism model (Eotvos)") titles = ['gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz', 'I1', 'I2', 'I'] for i in xrange(len(data)): mpl.subplot(3, 3, i + 1) mpl.title(titles[i]) levels = 20 if i == 8: levels = numpy.linspace(0, 1, levels) mpl.contourf(yp, xp, data[i], shape, levels) mpl.colorbar() for p in model: mpl.polygon(p, '.-k', xy2ne=True) mpl.set_area(dataarea) mpl.m2km() mpl.show()
xp, yp, zp = gridder.regular(dataarea, shape, z=-500) tensor = [ gravmag.polyprism.gxx(xp, yp, zp, prisms), gravmag.polyprism.gxy(xp, yp, zp, prisms), gravmag.polyprism.gxz(xp, yp, zp, prisms), gravmag.polyprism.gyy(xp, yp, zp, prisms), gravmag.polyprism.gyz(xp, yp, zp, prisms), gravmag.polyprism.gzz(xp, yp, zp, prisms) ] # Calculate the 3 invariants invariants = gravmag.tensor.invariants(tensor) data = tensor + invariants # and plot it mpl.figure() mpl.axis('scaled') mpl.suptitle("Tensor and invariants produced by prism model (Eotvos)") titles = ['gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz', 'I1', 'I2', 'I'] for i in xrange(len(data)): mpl.subplot(3, 3, i + 1) mpl.title(titles[i]) levels = 20 if i == 8: levels = numpy.linspace(0, 1, levels) mpl.contourf(yp, xp, data[i], shape, levels) mpl.colorbar() for p in prisms: mpl.polygon(p, '.-k', xy2ne=True) mpl.set_area(dataarea) mpl.m2km() mpl.show()
gravmag.prism.gx(xp, yp, zp, prisms), gravmag.prism.gy(xp, yp, zp, prisms), gravmag.prism.gz(xp, yp, zp, prisms), gravmag.prism.gxx(xp, yp, zp, prisms), gravmag.prism.gxy(xp, yp, zp, prisms), gravmag.prism.gxz(xp, yp, zp, prisms), gravmag.prism.gyy(xp, yp, zp, prisms), gravmag.prism.gyz(xp, yp, zp, prisms), gravmag.prism.gzz(xp, yp, zp, prisms) ] titles = [ 'potential', 'gx', 'gy', 'gz', 'gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz' ] mpl.figure(figsize=(8, 9)) mpl.subplots_adjust(left=0.03, right=0.95, bottom=0.05, top=0.92, hspace=0.3) mpl.suptitle("Potential fields produced by a 3 prism model") for i, field in enumerate(fields): mpl.subplot(4, 3, i + 3) mpl.axis('scaled') mpl.title(titles[i]) levels = mpl.contourf(yp * 0.001, xp * 0.001, field, shape, 15) cb = mpl.colorbar() mpl.contour(yp * 0.001, xp * 0.001, field, shape, levels, clabel=False, linewidth=0.1) mpl.show()
misfit = (EQLGravity(x1, y1, z1, gz, layer) + scale * EQLGravity(x2, y2, z2, gzz, layer, field='gzz')) regul = Smoothness2D(layer.shape) # Use an L-curve analysis to find the best regularization parameter solver = LCurve(misfit, regul, [10 ** i for i in range(-30, -20)]).fit() layer.addprop('density', solver.estimate_) # Now I can forward model gz using my layer to produce an integrated map in a # much denser region shape = (50, 50) x, y, z = gridder.regular(area, shape, z=0) gz_layer = sphere.gz(x, y, z, layer) gz_true = prism.gz(x, y, z, model) mpl.figure() mpl.suptitle('L-curve') mpl.title("Estimated regularization parameter: %g" % (solver.regul_param_)) solver.plot_lcurve() mpl.grid() # Plot the layer and the fit mpl.figure(figsize=(14, 4)) mpl.suptitle('Observed data (black) | Predicted by layer (red)') mpl.subplot(1, 3, 1) mpl.axis('scaled') mpl.title('Layer (kg.m^-3)') mpl.pcolor(layer.y, layer.x, layer.props['density'], layer.shape) mpl.colorbar().set_label(r'Density $kg.m^{-3}$') mpl.m2km() mpl.subplot(1, 3, 2) mpl.axis('scaled')
# Pad with the odd reflection and a cosine taper (default) g, _ = gridder.pad_array(gz, padtype='OddReflectionTaper') pads.append(g.flatten()) # Get coordinate vectors N = gridder.pad_coords(xy, gz.shape, nps) shapepad = g.shape # Generate new meshgrid and plot results yp = N[1] xp = N[0] titles = ['Original', 'Zero', 'Mean', 'Edge', 'Linear Taper', 'Reflection', 'Odd Reflection', 'Odd Reflection/Taper'] mpl.figure(figsize=(17, 9)) mpl.suptitle('Padding algorithms for a 2D array') for ii, p in enumerate(pads): mpl.subplot(2, 4, ii+2) mpl.axis('scaled') mpl.title(titles[ii+1]) levels = mpl.contourf(yp*0.001, xp*0.001, p, shapepad, 15) cb = mpl.colorbar() mpl.contour(yp*0.001, xp*0.001, p, shapepad, levels, clabel=False, linewidth=0.1) mpl.subplot(2, 4, 1) mpl.axis('scaled') mpl.title(titles[0]) levels = mpl.contourf(y*0.001, x*0.001, gz, shape, 15) cb = mpl.colorbar() mpl.contour(y*0.001, x*0.001, gz, shape, levels, clabel=False, linewidth=0.1) mpl.show()
(2951, 3951, 301, {'density':800}), (2951, 3951, 701, {'density':800})], mesh) # Run the inversion and collect the results estimate, predicted = gm.harvester.harvest(data, seeds, mesh, compactness=1, threshold=0.0001) # Insert the estimated density values into the mesh mesh.addprop('density', estimate['density']) # and get only the prisms corresponding to our estimate density_model = vremove(0, 'density', mesh) # Plot the results tensor = (gxy, gzz) titles = ('gxy', 'gzz') mpl.figure() mpl.suptitle("True: color | Inversion: contour") for i in xrange(len(tensor)): mpl.subplot(2, 2, i + 1) mpl.title(titles[i]) mpl.axis('scaled') levels = mpl.contourf(y*0.001, x*0.001, tensor[i], shape, 12) mpl.colorbar() mpl.contour(y*0.001, x*0.001, predicted[i], shape, levels, color='k') for i in xrange(len(tensor)): mpl.subplot(2, 2, i + 3) residuals = tensor[i] - predicted[i] mpl.title('residuals stddev = %.2f' % (residuals.std())) mpl.hist(residuals, bins=10) mpl.xlabel('Residual (Eotvos)') mpl.show() myv.figure()
'density': 1000 }], [500, 550, 510, { 'density': 1000 }]], mesh) # Run the inversioin estimate, predicted = gm.harvester.harvest(data, seeds, mesh, compactness=0.5, threshold=0.001) # Put the estimated density values in the mesh mesh.addprop('density', estimate['density']) # Plot the adjustment mpl.figure() mpl.suptitle("True: color | Inversion: contour") for i in xrange(len(tensor)): mpl.subplot(2, 3, i + 1) mpl.title(titles[i]) mpl.axis('scaled') levels = mpl.contourf(yp, xp, tensor[i], shape, 12) mpl.colorbar() mpl.contour(yp, xp, predicted[i], shape, levels, color='k') mpl.xlabel('y (km)') mpl.ylabel('x (km)') mpl.m2km() mpl.figure() mpl.suptitle("Residuals") for i in xrange(len(tensor)): residuals = tensor[i] - predicted[i] mpl.subplot(2, 3, i + 1)
0, 1000, {'density':500})] # Calculate the effect shape = (100, 100) xp, yp, zp = gridder.regular(area, shape, z=-500) tensor = [ gravmag.polyprism.gxx(xp, yp, zp, prisms), gravmag.polyprism.gxy(xp, yp, zp, prisms), gravmag.polyprism.gxz(xp, yp, zp, prisms), gravmag.polyprism.gyy(xp, yp, zp, prisms), gravmag.polyprism.gyz(xp, yp, zp, prisms), gravmag.polyprism.gzz(xp, yp, zp, prisms)] # and plot it titles = ['gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz'] mpl.figure() mpl.axis('scaled') mpl.suptitle("Gravity tensor produced by prism model (Eotvos)") for i in xrange(len(tensor)): mpl.subplot(3, 2, i + 1) mpl.title(titles[i]) mpl.contourf(yp, xp, tensor[i], shape, 20) mpl.colorbar() for p in prisms: mpl.polygon(p, '.-k', xy2ne=True) mpl.set_area(area) mpl.m2km() mpl.show() # Show the prisms myv.figure() myv.polyprisms(prisms, 'density') myv.axes(myv.outline(bounds), ranges=[i*0.001 for i in bounds]) myv.wall_north(bounds)
[-6632.65306122, -6079.4044665]] model = [PolygonalPrism(vertices, 1000, 4000, {'density': 1000})] # and generate synthetic data from it shape = (20, 20) area = bounds[0:4] xp, yp, zp = gridder.regular(area, shape, z=-1) noise = 0.1 # 0.1 mGal noise gz = utils.contaminate(polyprism.gz(xp, yp, zp, model), noise) # Create a mesh mesh = PrismMesh(bounds, (25, 50, 50)) # Wrap the data so that harvester can read it data = [harvester.Gz(xp, yp, zp, gz)] # Plot the data and pick the location of the seeds mpl.figure() mpl.suptitle("Pick the seeds (polygon is the true source)") mpl.axis('scaled') levels = mpl.contourf(yp, xp, gz, shape, 12) mpl.colorbar() mpl.polygon(model[0], xy2ne=True) mpl.xlabel('Horizontal coordinate y (km)') mpl.ylabel('Horizontal coordinate x (km)') seedx, seedy = mpl.pick_points(area, mpl.gca(), xy2ne=True).T # Set the right density and depth locations = [[x, y, 1500, {'density': 1000}] for x, y in zip(seedx, seedy)] mpl.show() # Make the seed and set the compactness regularizing parameter mu seeds = harvester.sow(locations, mesh) # Run the inversion estimate, predicted = harvester.harvest(data, seeds, mesh, compactness=0.05, threshold=0.0005)
from fatiando.vis import mpl area = [-5000, 5000, -5000, 5000] model = [Prism(-3000, 3000, -1000, 1000, 0, 1000, {'density': 1000})] shape = (100, 100) xp, yp, zp = gridder.regular(area, shape, z=-500) data = [prism.gxx(xp, yp, zp, model), prism.gxy(xp, yp, zp, model), prism.gxz(xp, yp, zp, model), prism.gyy(xp, yp, zp, model), prism.gyz(xp, yp, zp, model), prism.gzz(xp, yp, zp, model)] # Calculate the 3 invariants invariants = tensor.invariants(data) data = data + invariants # and plot it mpl.figure() mpl.axis('scaled') mpl.suptitle("Tensor and invariants (Eotvos)") titles = ['gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz', 'I1', 'I2', 'I'] for i in xrange(len(data)): mpl.subplot(3, 3, i + 1) mpl.title(titles[i]) levels = 20 if i == 8: levels = numpy.linspace(0, 1, levels) mpl.contourf(yp, xp, data[i], shape, levels, cmap=mpl.cm.RdBu_r) mpl.colorbar() mpl.m2km() mpl.show()
gm.harvester.Gyy(xp, yp, zp, gyy), gm.harvester.Gyz(xp, yp, zp, gyz), gm.harvester.Gzz(xp, yp, zp, gzz)] # Make the seeds seeds = gm.harvester.sow([ [500, 400, 210, {'density':1000}], [500, 550, 510, {'density':1000}]], mesh) # Run the inversioin estimate, predicted = gm.harvester.harvest(data, seeds, mesh, compactness=0.5, threshold=0.001) # Put the estimated density values in the mesh mesh.addprop('density', estimate['density']) # Plot the adjustment mpl.figure() mpl.suptitle("True: color | Inversion: contour") for i in xrange(len(tensor)): mpl.subplot(2, 3, i + 1) mpl.title(titles[i]) mpl.axis('scaled') levels = mpl.contourf(yp, xp, tensor[i], shape, 12) mpl.colorbar() mpl.contour(yp, xp, predicted[i], shape, levels, color='k') mpl.xlabel('y (km)') mpl.ylabel('x (km)') mpl.m2km() mpl.figure() mpl.suptitle("Residuals") for i in xrange(len(tensor)): residuals = tensor[i] - predicted[i] mpl.subplot(2, 3, i + 1)
[-3520.40816327, -1434.24317618], [-6632.65306122, -6079.4044665]] model = [PolygonalPrism(vertices, 1000, 4000, {'density': 1000})] # and generate synthetic data from it shape = (20, 20) area = bounds[0:4] xp, yp, zp = gridder.regular(area, shape, z=-1) noise = 0.1 # 0.1 mGal noise gz = utils.contaminate(gm.polyprism.gz(xp, yp, zp, model), noise) # Create a mesh mesh = PrismMesh(bounds, (25, 50, 50)) # Wrap the data so that harvester can read it data = [gm.harvester.Gz(xp, yp, zp, gz)] # Plot the data and pick the location of the seeds mpl.figure() mpl.suptitle("Pick the seeds (polygon is the true source)") mpl.axis('scaled') levels = mpl.contourf(yp, xp, gz, shape, 12) mpl.colorbar() mpl.polygon(model[0], xy2ne=True) mpl.xlabel('Horizontal coordinate y (km)') mpl.ylabel('Horizontal coordinate x (km)') seedx, seedy = mpl.pick_points(area, mpl.gca(), xy2ne=True).T # Set the right density and depth locations = [[x, y, 1500, {'density': 1000}] for x, y in zip(seedx, seedy)] mpl.show() # Make the seed and set the compactness regularizing parameter mu seeds = gm.harvester.sow(locations, mesh) # Run the inversion estimate, predicted = gm.harvester.harvest(data, seeds,
import sys import numpy from fatiando import gridder, utils from fatiando.mesher import Square from fatiando.vis import mpl from fatiando.seismic import ttime2d from fatiando.seismic.epic2d import Homogeneous # Make a velocity model to calculate traveltimes area = (0, 10, 0, 10) vp, vs = 2, 1 model = [Square(area, props={'vp':vp, 'vs':vs})] # Pick the locations of the receivers mpl.figure() mpl.axis('scaled') mpl.suptitle("Choose the location of the receivers") rec_points = mpl.pick_points(area, mpl.gca(), marker='^', color='r') # and the source mpl.figure() mpl.axis('scaled') mpl.suptitle("Choose the location of the source") mpl.points(rec_points, '^r') src = mpl.pick_points(area, mpl.gca(), marker='*', color='y') if len(src) > 1: print "Don't be greedy! Pick only one point as the source" sys.exit() # Calculate the P and S wave traveltimes srcs, recs = utils.connect_points(src, rec_points) ptime = ttime2d.straight(model, 'vp', srcs, recs) stime = ttime2d.straight(model, 'vs', srcs, recs) # Calculate the residual time (S - P) with added noise
""" GravMag: Generate noise-corrupted gravity gradient tensor data """ from fatiando import mesher, gridder, utils from fatiando.gravmag import prism from fatiando.vis import mpl model = [mesher.Prism(-1000, 1000, -1000, 1000, 0, 2000, {'density': 1000})] shape = (100, 100) xp, yp, zp = gridder.regular((-5000, 5000, -5000, 5000), shape, z=-200) components = [prism.gxx, prism.gxy, prism.gxz, prism.gyy, prism.gyz, prism.gzz] print "Calculate the tensor components and contaminate with 5 Eotvos noise" ftg = [utils.contaminate(comp(xp, yp, zp, model), 5.0) for comp in components] print "Plotting..." mpl.figure(figsize=(14, 6)) mpl.suptitle("Contaminated FTG data") names = ['gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz'] for i, data in enumerate(ftg): mpl.subplot(2, 3, i + 1) mpl.title(names[i]) mpl.axis('scaled') levels = mpl.contourf(xp * 0.001, yp * 0.001, data, (100, 100), 12) mpl.colorbar() mpl.contour(xp * 0.001, yp * 0.001, data, shape, levels, clabel=False) mpl.show()