Note
Go to the end to download the full example code
Field data inversion (“Koenigsee”)#
This minimalistic example shows how to use the Refraction Manager to invert a field data set. Here, we consider the Koenigsee data set, which represents classical refraction seismics data set with slightly heterogeneous overburden and some high-velocity bedrock. The data file can be found in the pyGIMLi example data repository.
# We import pyGIMLi and the traveltime module.
import matplotlib.pyplot as plt
import pygimli as pg
import pygimli.physics.traveltime as tt
The helper function pg.getExampleData downloads the data set to a temporary location and loads it. Printing the data reveals that there are 714 data points using 63 sensors (shots and geophones) with the data columns s (shot), g (geophone), and t (traveltime). By default, there is also a validity flag.
data = pg.getExampleData("traveltime/koenigsee.sgt", verbose=True)
print(data)
[::::::::::::::::::::::::::::::::::::: 83% ::::::::::::::::::::::: ] 8193 of 9844 complete
[:::::::::::::::::::::::::::::::::::: 100% ::::::::::::::::::::::::::::::::::::] 9844 of 9844 complete
md5: 641890bb17cb2bdf052cbc348669dfd0
Data: Sensors: 63 data: 714, nonzero entries: ['g', 's', 't', 'valid']
Let’s have a look at the data in the form of traveltime curves.
fig, ax = plt.subplots()
lines = tt.drawFirstPicks(ax, data)
![plot 04 koenigsee](../../_images/sphx_glr_plot_04_koenigsee_001.png)
We initialize the refraction manager.
![plot 04 koenigsee](../../_images/sphx_glr_plot_04_koenigsee_002.png)
Finally, we call the invert method and plot the result.The mesh is created based on the sensor positions on-the-fly.
mgr.invert(secNodes=3, paraMaxCellSize=5.0,
zWeight=0.2, vTop=500, vBottom=5000, verbose=1)
fop: <pygimli.physics.traveltime.modelling.TravelTimeDijkstraModelling object at 0x7f2403eb8310>
Data transformation: <pygimli.core._pygimli_.RTrans object at 0x7f24229349f0>
Model transformation (cumulative):
0 <pygimli.core._pygimli_.RTransLogLU object at 0x7f24229227a0>
min/max (data): 3.5e-04/0.03
min/max (error): 3%/3%
min/max (start model): 2.0e-04/0.002
--------------------------------------------------------------------------------
inv.iter 0 ... chi² = 156.33
--------------------------------------------------------------------------------
inv.iter 1 ... chi² = 12.31 (dPhi = 91.50%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 2 ... chi² = 8.91 (dPhi = 27.36%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 3 ... chi² = 6.71 (dPhi = 24.19%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 4 ... chi² = 6.10 (dPhi = 8.65%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 5 ... chi² = 5.56 (dPhi = 8.43%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 6 ... chi² = 5.39 (dPhi = 2.81%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 7 ... chi² = 4.91 (dPhi = 8.24%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 8 ... chi² = 4.53 (dPhi = 7.39%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 9 ... chi² = 4.14 (dPhi = 7.72%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 10 ... chi² = 3.88 (dPhi = 5.53%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 11 ... chi² = 3.66 (dPhi = 4.94%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 12 ... chi² = 3.60 (dPhi = 1.57%) lam: 20.0
################################################################################
# Abort criterion reached: dPhi = 1.57 (< 2.0%) #
################################################################################
1090 [869.8519551015069,...,2651.4673868457653]
Look at the fit between measured (crosses) and modelled (lines) traveltimes.
mgr.showFit(firstPicks=True)
![plot 04 koenigsee](../../_images/sphx_glr_plot_04_koenigsee_003.png)
You can plot only the model and customize with a bunch of keywords
![plot 04 koenigsee](../../_images/sphx_glr_plot_04_koenigsee_004.png)
You can play around with the gradient starting model (vTop and vBottom arguments) and the regularization strength lam and customize the mesh.
Total running time of the script: (0 minutes 23.654 seconds)