Esempio n. 1
0
def test_segyiotests_writer_from_ds(temp_dir, segyio3d_test_files, il_chunks):
    file, segyio_kwargs = segyio3d_test_files
    ds = segy_loader(str(file), silent=True, **segyio_kwargs)
    outfile = temp_dir / file.name
    segy_writer(ds, outfile, il_chunks=il_chunks)
    del ds
    ds = segy_loader(str(outfile), silent=True, **well_known_byte_locs("standard_3d"))
    assert isinstance(ds, xr.Dataset)
Esempio n. 2
0
def test_segyiotests_writer_from_seisnc(temp_dir, segyio3d_test_files):
    file, segyio_kwargs = segyio3d_test_files
    seisnc = temp_dir / file.with_suffix(".siesnc").name
    segy_converter(str(file), ncfile=seisnc, silent=True, **segyio_kwargs)
    outfile = temp_dir / file.name
    segy_writer(seisnc, outfile)
    ds = segy_loader(str(outfile), silent=True, **well_known_byte_locs("standard_3d"))
    assert isinstance(ds, xr.Dataset)
Esempio n. 3
0
def test_segyiotests_2ds_wheaderscrap(segyio3d_test_files):
    file, segyio_kwargs = segyio3d_test_files
    scrape_args = dict()
    try:
        scrape_args["endian"] = segyio_kwargs["endian"]
    except KeyError:
        pass
    header = segy_header_scrape(str(file), silent=True, **scrape_args)
    ds = segy_loader(str(file), silent=True, **segyio_kwargs, head_df=header)
    assert isinstance(ds, xr.Dataset)
Esempio n. 4
0
def test_seisnc_return(temp_dir, empty):
    dims = list(empty.dims)
    shp = [empty.dims[d] for d in dims]
    domain = empty.d3_domain
    empty["data"] = (dims, np.zeros(shp))

    if "offset" in empty:
        empty["offset"] = empty["offset"].astype(np.int32)

    segy_writer(empty, temp_dir / "temp_empty.segy")
    back = segy_loader(temp_dir / "temp_empty.segy", vert_domain=domain)
    assert empty == back
Esempio n. 5
0
def convert(output_file, input_file, iline, xline, crop, output_type):
    input_file = pathlib.Path(input_file)
    if output_type is None and output_file is not None:
        output_type = guess_file_type(output_file)
    elif output_type is None and output_file is None:
        """Because currently only one conversion exists we can guess the output from the input"""
        input_type = guess_file_type(input_file)
        if input_type:
            output_type = "SEGY" if input_type == "NETCDF" else "NETCDF"

    if output_type is None:
        click.echo(
            "Output type not recognised! Please provide the desired output file type explicitly using the --output-type option"
        )
        raise SystemExit

    click.echo(f"Converting file {input_file.name} to {output_type}")

    if len(crop) == 0:
        crop = None

    if output_type == "NETCDF":
        if output_file is None:
            output_file = input_file.stem + ".SEISNC"
        _ = segy_loader(input_file,
                        ncfile=output_file,
                        iline=iline,
                        xline=xline,
                        ix_crop=crop)
        click.echo(f"Converted file saved as {output_file}")
        LOGGER.info(f"NetCDF output written to {output_file}")
    elif output_type == "SEGY":
        if output_file is None:
            output_file = input_file.stem + ".segy"
        ncdf2segy(input_file, output_file, iline=iline, xline=xline)
        click.echo(f"Converted file saved as {output_file}")
        LOGGER.info(f"SEGY output written to {output_file}")
    else:
        click.echo(
            f"Conversion to output-type {output_type} is not implemented yet")
        raise SystemExit
Esempio n. 6
0
def main():

    # how to track down warnings
    #import warnings
    #warnings.filterwarnings('error', category=UnicodeWarning)
    #warnings.filterwarnings('error', category=DeprecationWarning, module='numpy')

    #parse args
    sys_parser = segysakArgsParser()
    args = sys_parser.parse_args()

    # gaffe
    print(f'SEGY-SAK - v{version}')

    # initialise logging
    LOGGER.info(f'segysak v{version}')

    # check inputs
    checked_files = check_file(args.files)

    # Generate or Load Configuration File

    for input_file in checked_files:
        print(input_file.name)
        # Print EBCIDC header
        if args.ebcidc:
            try:
                print(get_segy_texthead(input_file))
            except IOError:
                LOGGER.error(
                    "Input SEGY file was not found - check name and path")

        if args.scan > 0:
            hscan, nscan = segy_header_scan(input_file,
                                            max_traces_scan=args.scan)
            width = 10
            print(f'Traces scanned: {nscan}')
            print("{:>40s} {:>8s} {:>10s} {:>10s}".format(
                'Item', 'Byte Loc', 'Min', 'Max'))
            for key, item in hscan.items():
                print("{:>40s} {:>8d} {:>10.0f} {:>10.0f}".format(
                    key, item[0], item[1], item[2]))

        iline = args.iline
        xline = args.xline

        if args.netCDF is None or args.netCDF is not False:
            if args.netCDF is None:
                outfile = input_file.stem + '.SEISNC'
            else:
                outfile = args.netCDF
            _ = segy_loader(input_file,
                            ncfile=outfile,
                            iline=iline,
                            xline=xline,
                            ix_crop=args.crop)
            LOGGER.info(f"NetCDF output written to {outfile}")

        if args.SEGY is None or args.SEGY is not False:
            if args.SEGY is None:
                outfile = input_file.stem + '.segy'
            else:
                outfile = args.SEGY
            ncdf2segy(input_file, outfile, iline=iline,
                      xline=xline)  #, crop=args.crop)
            LOGGER.info(f"SEGY output written to {outfile}")
Esempio n. 7
0
def test_segyiotests_ps_2ds(segyio3dps_test_files):
    file, segyio_kwargs = segyio3dps_test_files
    ds = segy_loader(str(file), silent=True, **segyio_kwargs)
    assert isinstance(ds, xr.Dataset)
Esempio n. 8
0
scrape

# %% [markdown]
# ## Load SEG-Y data

# %% [markdown]
# All SEGY (2D, 2D gathers, 3D & 3D gathers) are ingested into `xarray.Dataset` objects through the
# `segy_loader` function. It is best to be explicit about the byte locations of key information but
# `segy_loader` can attempt to guess the shape of your dataset. Some standard byte positions are
# defined in the `well_known_bytes` function and others can be added via pull requests to the Github
# repository if desired.

# %%
from segysak.segy import segy_loader, well_known_byte_locs

V3D = segy_loader(V3D_path, iline=189, xline=193, cdpx=73, cdpy=77, vert_domain="TWT")
V3D

# %% [markdown]
# ## Visualising data
#
# `xarray` objects use smart label based indexing techniques to retreive subsets of data. More
# details on `xarray` techniques for *segysak* are covered in the examples, but this demonstrates
# a general syntax for selecting data by label with `xarray`. Plottnig is done by `matploblib` and
# `xarray` selections can be passed to normal `matplotlib.pyplot` functions.

# %%
fig, ax1 = plt.subplots(ncols=1, figsize=(15, 8))
iline_sel = 10093
V3D.data.transpose("twt", "iline", "xline", transpose_coords=True).sel(
    iline=iline_sel
Esempio n. 9
0
def test_segyiotests_nohead_2ncdf(temp_dir, segyio_nohead_test_files):
    file, segyio_kwargs = segyio_nohead_test_files
    seisnc = temp_dir / file.with_suffix(".siesnc").name
    ds = segy_loader(str(file), ncfile=seisnc, silent=True, **segyio_kwargs)
    assert isinstance(ds, xr.Dataset)