def test_cube_attr_rms_two_surfaces_compare_window(load_cube_rsgy1):
    """Get cube attribute (rms) between two surfaces, and compare with
    window."""

    xs1 = RegularSurface(rtop1)
    xs2 = xs1.copy()
    xs2.values += 30

    kube = load_cube_rsgy1

    xss1 = xs1.copy()
    xss1.slice_cube_window(kube,
                           other=xs2,
                           other_position='below',
                           attribute='rms',
                           sampling='trilinear')

    xss2 = xs1.copy()
    xss2.values += 15
    xss2.slice_cube_window(kube,
                           zrange=15,
                           attribute='rms',
                           sampling='trilinear')

    assert xss1.values.mean() == xss2.values.mean()
def test_cube_attr_mean_two_surfaces_multiattr(tmpdir, load_cube_rsgy1):
    """Get cube attribute (mean) between two surfaces, many attr at the same
    time.
    """

    logger.info("Loading surfaces {} {}".format(RTOP1, RBAS1))
    xs1 = RegularSurface(RTOP1)
    xs2 = RegularSurface(RBAS1)

    logger.info("Loading cube {}".format(RSGY1))
    kube = load_cube_rsgy1

    xss = xs1.copy()
    xss.slice_cube_window(
        kube,
        other=xs2,
        other_position="below",
        attribute="rms",
        sampling="trilinear",
        showprogress=True,
    )

    logger.debug(xss.values.mean())

    xsx = xs1.copy()
    attrs = xsx.slice_cube_window(
        kube,
        other=xs2,
        other_position="below",
        attribute=["max", "mean", "min", "rms"],
        sampling="trilinear",
        showprogress=True,
    )
    logger.debug(attrs["rms"].values.mean())

    assert xss.values.mean() == attrs["rms"].values.mean()
    assert xss.values.std() == attrs["rms"].values.std()

    for attr in attrs.keys():
        logger.info("Working with %s", attr)

        xxx = attrs[attr]
        xxx.to_file(join(tmpdir, "surf_slice_cube_2surf_" + attr + "multi.gri"))

        minmax = (None, None)
        if attr == "mean":
            minmax = (-0.1, 0.1)

        xxx.quickplot(
            filename=join(tmpdir, "surf_slice_cube_2surf_" + attr + "multi.png"),
            colortable="jet",
            minmax=minmax,
            title="Reek two surfs mean multiattr: " + attr,
            infotext="Method: trilinear, 2 surfs multiattr " + attr,
        )
Esempio n. 3
0
def test_cube_slice_w_ignore_dead_traces_nearest():
    """Get cube slice nearest aka Auto4D input, with scrambled data with
    dead traces, various YFLIP cases, ignore dead traces."""

    cube1 = Cube(XCUB2)

    surf1 = RegularSurface()
    surf1.from_cube(cube1, 1000.1)

    cells = ((18, 12), (20, 2), (0, 4))

    surf1.slice_cube(cube1, deadtraces=False)
    plotfile = ojn(td, "slice_nea1.png")
    title = "Cube with dead traces; nearest; use just values as is"
    surf1.quickplot(filename=plotfile, minmax=(-10000, 10000), title=title)

    for cell in cells:
        icell, jcell = cell
        assert surf1.values[icell,
                            jcell] == pytest.approx(cube1.values[icell, jcell,
                                                                 0],
                                                    abs=0.01)
    assert ma.count_masked(surf1.values) == 0  # shall be no masked cells

    # swap surface
    surf2 = surf1.copy()
    surf2.values = 1000.1

    surf2.swapaxes()

    surf2.slice_cube(cube1, deadtraces=False)

    assert surf2.values.mean() == pytest.approx(surf1.values.mean(), rel=0.001)

    # swap surface and cube
    surf2 = surf1.copy()
    surf2.values = 1000.1
    surf2.swapaxes()

    cube2 = cube1.copy()
    cube2.swapaxes()
    surf2.slice_cube(cube2, deadtraces=False)
    assert surf2.values.mean() == pytest.approx(surf1.values.mean(), rel=0.001)

    # swap cube only
    surf2 = surf1.copy()
    surf2.values = 1000.1

    cube2 = cube1.copy()
    cube2.swapaxes()
    surf2.slice_cube(cube2, deadtraces=False)
    assert surf2.values.mean() == pytest.approx(surf1.values.mean(), rel=0.001)
def test_cube_attr_mean_two_surfaces_multiattr(load_cube_rsgy1):
    """Get cube attribute (mean) between two surfaces, many attr at the same
    time.
    """

    logger.info('Loading surfaces {} {}'.format(rtop1, rbas1))
    xs1 = RegularSurface(rtop1)
    xs2 = RegularSurface(rbas1)

    logger.info('Loading cube {}'.format(rsgy1))
    kube = load_cube_rsgy1

    xss = xs1.copy()
    xss.slice_cube_window(kube,
                          other=xs2,
                          other_position='below',
                          attribute='rms',
                          sampling='trilinear',
                          showprogress=True)

    logger.debug(xss.values.mean())

    xsx = xs1.copy()
    attrs = xsx.slice_cube_window(kube,
                                  other=xs2,
                                  other_position='below',
                                  attribute=['max', 'mean', 'min', 'rms'],
                                  sampling='trilinear',
                                  showprogress=True)
    logger.debug(attrs['rms'].values.mean())

    assert xss.values.mean() == attrs['rms'].values.mean()
    assert xss.values.std() == attrs['rms'].values.std()

    for attr in attrs.keys():
        logger.info('Working with %s', attr)

        xxx = attrs[attr]
        xxx.to_file(ojn(td, 'surf_slice_cube_2surf_' + attr + 'multi.gri'))

        minmax = (None, None)
        if attr == 'mean':
            minmax = (-0.1, 0.1)

        xxx.quickplot(filename=ojn(
            td, 'surf_slice_cube_2surf_' + attr + 'multi.png'),
                      colortable='jet',
                      minmax=minmax,
                      title='Reek two surfs mean multiattr: ' + attr,
                      infotext='Method: trilinear, 2 surfs multiattr ' + attr)
def test_cube_attr_mean_two_surfaces_with_zeroiso(load_cube_rsgy1):
    """Get cube attribute between two surfaces with partly zero isochore."""

    logger.info('Loading surfaces {} {}'.format(rtop1, rbas1))
    xs1 = RegularSurface(rtop1)
    xs2 = RegularSurface(rbas2)

    logger.info('Loading cube {}'.format(rsgy1))
    kube = load_cube_rsgy1

    xss = xs1.copy()
    xss.slice_cube_window(kube,
                          other=xs2,
                          other_position='below',
                          attribute='mean',
                          sampling='trilinear')

    xss.to_file(td + '/surf_slice_cube_2surf_meantri.gri')

    xss.quickplot(filename=td + '/surf_slice_cube_2surf_mean_v2.png',
                  colortable='jet',
                  title='Reek two surfs mean',
                  minmax=(-0.1, 0.1),
                  infotext='Method: trilinear, 2 surfs, partly zero isochore')

    logger.info('Mean is {}'.format(xss.values.mean()))
def test_cube_attr_mean_two_surfaces_with_zeroiso(tmpdir, load_cube_rsgy1):
    """Get cube attribute between two surfaces with partly zero isochore."""

    logger.info("Loading surfaces {} {}".format(RTOP1, RBAS1))
    xs1 = RegularSurface(RTOP1)
    xs2 = RegularSurface(RBAS2)

    logger.info("Loading cube {}".format(RSGY1))
    kube = load_cube_rsgy1

    xss = xs1.copy()
    xss.slice_cube_window(
        kube, other=xs2, other_position="below", attribute="mean", sampling="trilinear"
    )

    xss.to_file(join(tmpdir, "surf_slice_cube_2surf_meantri.gri"))

    xss.quickplot(
        filename=join(tmpdir, "surf_slice_cube_2surf_mean_v2.png"),
        colortable="jet",
        title="Reek two surfs mean",
        minmax=(-0.1, 0.1),
        infotext="Method: trilinear, 2 surfs, partly zero isochore",
    )

    logger.info("Mean is {}".format(xss.values.mean()))
Esempio n. 7
0
def test_cube_attr_mean_two_surfaces(load_cube_rsgy1):
    """Get cube attribute (mean) between two surfaces."""

    logger.info("Loading surfaces {} {}".format(RTOP1, RBAS1))
    xs1 = RegularSurface(RTOP1)
    xs2 = RegularSurface(RBAS1)

    logger.info("Loading cube {}".format(RSGY1))
    kube = load_cube_rsgy1

    xss = xs1.copy()
    xss.slice_cube_window(kube,
                          other=xs2,
                          other_position="below",
                          attribute="mean",
                          sampling="trilinear")

    xss.to_file(td + "/surf_slice_cube_2surf_meantri.gri")

    xss.quickplot(
        filename=td + "/surf_slice_cube_2surf_mean.png",
        colortable="jet",
        title="Reek two surfs mean",
        minmax=(-0.1, 0.1),
        infotext="Method: trilinear, 2 surfs",
    )

    logger.info("Mean is {}".format(xss.values.mean()))
def test_resample_small():
    """Do resampling with minimal dataset to test for various yflip etc"""

    xs1 = RegularSurface(
        xori=0,
        yori=0,
        ncol=3,
        nrow=3,
        xinc=100,
        yinc=100,
        values=-888.0,
        yflip=1,
    )
    xs2 = RegularSurface(
        xori=0,
        yori=0,
        ncol=3,
        nrow=3,
        xinc=100,
        yinc=100,
        values=888.0,
        yflip=1,
    )
    xs3 = RegularSurface(
        xori=0,
        yori=200,
        ncol=3,
        nrow=3,
        xinc=100,
        yinc=100,
        values=2888.0,
        yflip=-1,
    )

    xsx = xs1.copy()
    xsx.resample(xs2)
    assert xsx.values.mean() == 888.0

    xsx = xs3.copy()
    xsx.resample(xs2)
    assert xsx.values.mean() == 888.0

    xsx = xs1.copy()
    xsx.resample(xs3)
    assert xsx.values.mean() == 2888.0
Esempio n. 9
0
def test_cube_attr_rms_two_surfaces_compare_window_show(load_cube_rsgy1):
    """Get cube attribute (rms) between two surfaces, and compare with
    window, and show plots."""

    logger.info("Loading surfaces {} {}".format(RTOP1, RBAS1))
    xs1 = RegularSurface(RTOP1)
    xs2 = xs1.copy()
    xs2.values += 30

    logger.info("Loading cube {}".format(RSGY1))
    kube = load_cube_rsgy1

    xss1 = xs1.copy()
    xss1.slice_cube_window(kube,
                           other=xs2,
                           other_position="below",
                           attribute="rms",
                           sampling="trilinear")

    xss1.quickplot(
        filename=td + "/surf_slice_cube_2surf_rms1.png",
        colortable="jet",
        minmax=[0, 0.5],
        # TODO: itle='Reek two surfs mean', minmax=(-0.1, 0.1),
        infotext="Method: trilinear, 2 surfs, 30ms apart",
    )

    print("\n\n{}\n".format("=" * 100))

    xss2 = xs1.copy()
    xss2.values += 15
    xss2.slice_cube_window(kube,
                           zrange=15,
                           attribute="rms",
                           sampling="trilinear")

    xss2.quickplot(
        filename=td + "/surf_slice_cube_2surf_rms2.png",
        colortable="jet",
        minmax=[0, 0.5],
        # TODO: itle='Reek two surfs mean', minmax=(-0.1, 0.1),
        infotext="Method: trilinear, 2 surfs, +- 15ms window",
    )

    assert xss1.values.mean() == xss2.values.mean()
def test_cube_attr_rms_two_surfaces_compare_window_show(load_cube_rsgy1):
    """Get cube attribute (rms) between two surfaces, and compare with
    window, and show plots."""

    logger.info('Loading surfaces {} {}'.format(rtop1, rbas1))
    xs1 = RegularSurface(rtop1)
    xs2 = xs1.copy()
    xs2.values += 30

    logger.info('Loading cube {}'.format(rsgy1))
    kube = load_cube_rsgy1

    xss1 = xs1.copy()
    xss1.slice_cube_window(kube,
                           other=xs2,
                           other_position='below',
                           attribute='rms',
                           sampling='trilinear')

    xss1.quickplot(
        filename=td + '/surf_slice_cube_2surf_rms1.png',
        colortable='jet',
        minmax=[0, 0.5],
        # TODO: itle='Reek two surfs mean', minmax=(-0.1, 0.1),
        infotext='Method: trilinear, 2 surfs, 30ms apart')

    print('\n\n{}\n'.format('=' * 100))

    xss2 = xs1.copy()
    xss2.values += 15
    xss2.slice_cube_window(kube,
                           zrange=15,
                           attribute='rms',
                           sampling='trilinear')

    xss2.quickplot(
        filename=td + '/surf_slice_cube_2surf_rms2.png',
        colortable='jet',
        minmax=[0, 0.5],
        # TODO: itle='Reek two surfs mean', minmax=(-0.1, 0.1),
        infotext='Method: trilinear, 2 surfs, +- 15ms window')

    assert xss1.values.mean() == xss2.values.mean()
Esempio n. 11
0
def test_slice_attr_window_max_w_plotting(load_cube_rsgy1):
    """Slice a cube within a window, get max/min etc, using trilinear
    interpol and plotting."""

    logger.info("Loading surface")
    xs1 = RegularSurface(RTOP1)
    xs2 = xs1.copy()
    xs3 = xs1.copy()

    logger.info("Loading cube")
    kube = load_cube_rsgy1

    t1 = xtg.timer()
    xs1.slice_cube_window(kube, attribute="min", sampling="trilinear")
    t2 = xtg.timer(t1)
    logger.info("Window slicing... {} secs".format(t2))

    xs1.quickplot(
        filename=td + "/surf_slice_cube_window_min.png",
        colortable="seismic",
        minmax=(-1, 1),
        title="Reek Minimum",
        infotext="Method: trilinear, window",
    )

    xs2.slice_cube_window(kube,
                          attribute="max",
                          sampling="trilinear",
                          showprogress=True)

    xs2.quickplot(
        filename=td + "/surf_slice_cube_window_max.png",
        colortable="seismic",
        minmax=(-1, 1),
        title="Reek Maximum",
        infotext="Method: trilinear, window",
    )

    xs3.slice_cube_window(kube, attribute="rms", sampling="trilinear")

    xs3.quickplot(
        filename=td + "/surf_slice_cube_window_rms.png",
        colortable="jet",
        minmax=(0, 1),
        title="Reek rms (root mean square)",
        infotext="Method: trilinear, window",
    )
def test_slice_attr_window_max_w_plotting(load_cube_rsgy1):
    """Slice a cube within a window, get max/min etc, using trilinear
    interpol and plotting."""

    logger.info('Loading surface')
    xs1 = RegularSurface(rtop1)
    xs2 = xs1.copy()
    xs3 = xs1.copy()

    logger.info('Loading cube')
    kube = load_cube_rsgy1

    t1 = xtg.timer()
    xs1.slice_cube_window(kube, attribute='min', sampling='trilinear')
    t2 = xtg.timer(t1)
    logger.info('Window slicing... {} secs'.format(t2))

    xs1.quickplot(filename=td + '/surf_slice_cube_window_min.png',
                  colortable='seismic',
                  minmax=(-1, 1),
                  title='Reek Minimum',
                  infotext='Method: trilinear, window')

    xs2.slice_cube_window(kube,
                          attribute='max',
                          sampling='trilinear',
                          showprogress=True)

    xs2.quickplot(filename=td + '/surf_slice_cube_window_max.png',
                  colortable='seismic',
                  minmax=(-1, 1),
                  title='Reek Maximum',
                  infotext='Method: trilinear, window')

    xs3.slice_cube_window(kube, attribute='rms', sampling='trilinear')

    xs3.quickplot(filename=td + '/surf_slice_cube_window_rms.png',
                  colortable='jet',
                  minmax=(0, 1),
                  title='Reek rms (root mean square)',
                  infotext='Method: trilinear, window')
def test_resample_partial_sample(tmp_path, reek_map, generate_plot):
    """Do resampling from one surface to another with partial sampling."""
    sml = reek_map

    # note: values is missing by purpose:
    snew = RegularSurface(
        ncol=round(sml.ncol * 0.6),
        nrow=round(sml.nrow * 0.6),
        xori=sml.xori - 2000,
        yori=sml.yori + 3000,
        xinc=sml.xinc * 0.6,
        yinc=sml.xinc * 0.6,
        rotation=sml.rotation,
        yflip=sml.yflip,
    )

    print(sml.yflip)

    logger.info(snew.values)

    snew.resample(sml, mask=True)

    assert snew.values.mean() == pytest.approx(1726.65)

    if generate_plot:
        sml.quickplot(tmp_path / "resampled_input.png")
        snew.quickplot(tmp_path / "resampled_output.png")
        sml.to_file(tmp_path / "resampled_input.gri")
        snew.to_file(tmp_path / "resampled_output.gri")

    snew2 = snew.copy()
    snew2._yflip = -1
    snew2._xori -= 4000
    snew2._yori -= 2000
    snew2.resample(sml, mask=True)

    if generate_plot:
        snew2.to_file(tmp_path / "resampled_output2.gri")
    assert snew2.values.mean() == pytest.approx(1747.20, abs=0.2)
def test_cube_slice_w_dead_traces_nearest():
    """Get cube slice nearest aka Auto4D input, with scrambled data with
    dead traces, various YFLIP cases, undef at dead traces."""

    cube1 = Cube(xcub2)

    surf1 = RegularSurface()
    surf1.from_cube(cube1, 1000.1)

    cells = ((18, 12), )

    surf1.slice_cube(cube1, deadtraces=True)
    plotfile = ojn(td, 'slice_nea1_dead.png')
    title = 'Cube with dead traces; nearest; UNDEF at dead traces'
    surf1.quickplot(filename=plotfile, minmax=(-10000, 10000), title=title)

    for cell in cells:
        icell, jcell = cell
        assert surf1.values[icell, jcell] == cube1.values[icell, jcell, 0]

    ndead = (cube1.traceidcodes == 2).sum()
    print(ndead)

    assert ma.count_masked(surf1.values) == ndead

    # swap cube only
    surf2 = surf1.copy()
    surf2.values = 1000.1

    cube2 = cube1.copy()
    cube2.swapaxes()
    surf2.slice_cube(cube2, deadtraces=True)
    plotfile = ojn(td, 'slice_nea1_dead_cubeswap.png')
    surf2.quickplot(filename=plotfile, minmax=(-10000, 10000))
    assert ma.count_masked(surf2.values) == ndead
    assert surf2.values.mean() == surf1.values.mean()
Esempio n. 15
0
def test_resample_small():
    """Do resampling with minimal dataset to test for various yflip etc."""
    xs1 = RegularSurface(
        xori=0,
        yori=0,
        ncol=3,
        nrow=3,
        xinc=100,
        yinc=100,
        values=-888.0,
        yflip=1,
    )
    xs2 = RegularSurface(
        xori=0,
        yori=0,
        ncol=3,
        nrow=3,
        xinc=100,
        yinc=100,
        values=888.0,
        yflip=1,
    )
    xs3 = RegularSurface(
        xori=0,
        yori=200,
        ncol=3,
        nrow=3,
        xinc=100,
        yinc=100,
        values=2888.0,
        yflip=-1,
    )

    xsx = xs1.copy()
    xsx.resample(xs2)
    assert list(xsx.values.data.flatten()) == [
        888.0,
        888.0,
        888.0,
        888.0,
        888.0,
        888.0,
        888.0,
        888.0,
        888.0,
    ]

    xsx = xs3.copy()
    xsx.resample(xs2)
    assert list(xsx.values.data.flatten()) == [
        1e33,
        888.0,
        888.0,
        1e33,
        888.0,
        888.0,
        1e33,
        1e33,
        1e33,
    ]

    xsx = xs1.copy()
    xsx.resample(xs3)
    assert list(xsx.values.data.flatten()) == [
        1e33,
        2888.0,
        2888.0,
        1e33,
        2888.0,
        2888.0,
        1e33,
        1e33,
        1e33,
    ]