gimli-org / gimli

Geophysical Inversion and Modeling Library :earth_africa:
https://www.pygimli.org
Other
365 stars 133 forks source link

How to write seismic files for pygimli #165

Closed soetpotet closed 5 years ago

soetpotet commented 5 years ago

Hi,

I'm using your Koenigsee example as a guide to read and invert my own seismic data but I was wondering how I should write the file in case the # of shots and geophones is not the same and the shots are not at geophone positions either. Do I start by defining the geophone points, and then continue with the shot points before writing the measurements? Or something completely different?

Thanks a lot!

halbmy commented 5 years ago

The pyGIMLi-based idea of generating a unique list of sensors (independent on whether used as geophone or shot) is originated from ERT where electrodes are naturally used for both current and potential. I confess this might not be instructive from a seismic point of view but we will not change the data container to have two lists.

In seismics, shots and geophones might be colocated, but often they are not or only partly. In any case it is the users task to generate this list, if he cannot just import the data using one of the supported formats. If your shots and geophones are completely different, this task should be easy: just concatenate the list of sensor and geophone positions and add the number of shots to the index in the geophone list, that's it.

soetpotet commented 5 years ago

Thanks for the quick reply!

florian-wagner commented 5 years ago

@soetpotet Just as an addition: The crosshole example shows how to construct such da data container from Python. You can add a t column and scheme.save("myfile.sgt") to save it.

https://www.pygimli.org/_examples_auto/seismics/plot_3_crosshole_tomography.html

soetpotet commented 5 years ago

Thanks for the hint, @florian-wagner :)

@halbmy, I'm not sure if I understood you correctly, but this is how my file looks (see attachment). The shots go from -0.1 to 14.3 and the geophones from 0 to 14.2, then I've got the measurements. I think it works correctly judging by the traveltime curves I get.

However, when I perform the inversion, ra.invert(), I get the following error:

An error ocurred while starting the kernel
C:/msys64/home/Guenther.T/src/gimli/gimli36/src/meshentities.cpp: 34    GIMLI::Boundary* GIMLI::findBoundary_(const std::set&) pls. check, this should not happen. There is more then one boundary defined.2
Boundary 0x1c68f2ca8f0 rtti: 22 id: 0   N: 0 1 marker: 1 
Boundary 0x1c6954db090 rtti: 22 id: 177 N: 4 0 marker: 𔂫 

I don't really understand what the error is about? What are these boundaries? I'm doing all of this following the Koenigsee example script, so should I maybe create my own mesh then?

Thanks again!

BG_test.sgt.txt

halbmy commented 5 years ago

The error is due to the fact that your sensor positions are not sorted and the mesh generation fails. You just have to sort the sensor indices before anything else:

ra = Refraction('BG_test.sgt.txt')
ra.dataContainer.sortSensorsX()  # sort sensors in ascending order
ra.invert()  # add some options
ra.showResult()
halbmy commented 5 years ago

image You might wonder why the resulting section is so thin. Have a look at your data image you will see that almost all traveltimes are linear, i.e. there is no increase in the slope indicating an increasing velocity. So I'm afraid there's not much information in it.

soetpotet commented 5 years ago

Hi again @halbmy,

Thank you for the explanations!

I see what you mean about the velocity changes. This is part of a timelapse acquisition (and also a rather quick, non-meticulous first picking) so let's hope we get to see more changes in the further datasets :)

Cheers

halbmy commented 5 years ago

We note that for classical refraction cases like yours we should do a sortX internally in the createParaDomainPLC function. Thanks for reporting.

doziej84 commented 5 months ago

Is it possible to comment out a line from a Koenigsee example and still use the file?

halbmy commented 5 months ago

Yes, you should be able to comment a line by a preceding hash character (#) or to delete it, but you will have to decrease the number of data just before the data token accordingly.