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 0x7f805a1458a0>
Data transformation: <pygimli.core._pygimli_.RTrans object at 0x7f805a27e8e0>
Model transformation (cumulative):
0 <pygimli.core._pygimli_.RTransLogLU object at 0x7f8059c323e0>
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.37%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 3 ... chi² = 6.65 (dPhi = 24.90%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 4 ... chi² = 5.97 (dPhi = 9.74%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 5 ... chi² = 5.77 (dPhi = 3.11%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 6 ... chi² = 5.61 (dPhi = 2.58%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 7 ... chi² = 4.68 (dPhi = 15.30%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 8 ... chi² = 4.24 (dPhi = 8.78%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 9 ... chi² = 3.97 (dPhi = 5.67%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 10 ... chi² = 3.78 (dPhi = 4.18%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 11 ... chi² = 3.70 (dPhi = 1.86%) lam: 20.0
################################################################################
# Abort criterion reached: dPhi = 1.86 (< 2.0%) #
################################################################################
1090 [860.3581241375928,...,2649.9569534574207]
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 47.580 seconds)