예제 #1
0
    def setUp(self):
        super().setUp()
        grid_str = '''120 5.00  10.00 -nx, xmn, xsiz
					110 1205.00  10.00 -ny, ymn, ysiz
					1 0.5 1.0  -nz, zmn, zsiz'''

        griddef = gs.GridDef(grid_str=grid_str)
        self.data = gs.ExampleData("grid2d_surf", griddef=griddef)
예제 #2
0
 def setUp(self):
     '''
     Method called to prepare the test fixture. This is called immediately before calling the test method; 
     other than AssertionError or SkipTest, any exception raised by this method will be considered 
     an error rather than a test failure. The default implementation does nothing.
     '''
     griddef_str = '''120 5.0 10.0 
                     110 1205.0 10.0 
                     1 0.5 1.0'''
     self.griddef = gs.GridDef(griddef_str)
예제 #3
0
    def setUp(self):
        super().setUp()

        self.griddef = gs.GridDef([10, 1, 0.5, 10, 1, 0.5, 1, 1, 0.5])
        size = self.griddef.count()
        mean = 2.5
        scale = 3
        self.nreal = 100
        self.ref_data = pd.DataFrame(
            {'value': np.random.normal(mean, scale, size=size)})

        for i, offset in enumerate(np.random.rand(self.nreal) * 0.04 - 0.02):
            data = pd.DataFrame(
                {'value': np.random.normal(mean + offset, scale, size=size)})
            gs.write_gslib(
                data, os.path.join(self.out_dir, 'real{}.out'.format(i + 1)))
예제 #4
0
def _validate_griddef_or_None(s):
    """
	A validation method to convert input s to pygeostat grid def and raise an error if not convertable.
	"""
    import pygeostat as gs
    if s is None:
        return None
    elif isinstance(s, str):
        try:
            return gs.GridDef(s)
        except AssertionError:
            raise ValueError(
                '{} should be a pygeostat.GridDef object or griddef string!'.
                format(s))
    elif isinstance(s, gs.GridDef):
        return s
    else:
        raise ValueError(
            '{} should be a pygeostat.GridDef object or griddef string!'.
            format(s))
예제 #5
0
 def setUp(self):
     super().setUp()
     self.griddef = gs.GridDef([40, 0.5, 1, 40, 0.5, 1, 40, 0.5, 1])
     self.data = gs.ExampleData('3d_grid', griddef=self.griddef)
예제 #6
0
 def setUp(self):
     warnings.simplefilter('ignore', category=ImportWarning)
     self.grid = gs.GridDef([40, 0.5, 1, 40, 0.5, 1, 40, 0.5, 1])
     self.testfl = gs.ExampleData('3d_grid', griddef=self.grid)
예제 #7
0
    def test_infergriddef(self):
        df2d = gs.ExampleData("point2d_ind")
        df3d = gs.ExampleData("point3d_ind_mv")
        #where xsiz = ysiz = zsiz, a float can also be provided.
        self.compare(df3d.infergriddef(blksize=75),
                     df3d.infergriddef(blksize=[75, 75, 75]))

        #where nx = ny = nz, an int can also be provided.
        self.compare(df3d.infergriddef(nblk=60),
                     df3d.infergriddef(nblk=[60, 60, 60]))

        #for 3D data, infergriddef() must return a 3D grid definition even if zsiz is given as None or 0 or 1.
        self.compare(
            df3d.infergriddef(blksize=[50, 60, 1]),
            gs.GridDef('''20  135.0  50.0 
                                   19  1230.0 60.0 
                                   82  310.5  1.0'''))

        self.compare(df3d.infergriddef(blksize=[50, 60, 1]),
                     df3d.infergriddef(blksize=[50, 60, None]))

        self.compare(df3d.infergriddef(blksize=[50, 60, 1]),
                     df3d.infergriddef(blksize=[50, 60, 0]))

        # nz given as None or 0 or 1 returns a 2D grid that covers the vertical extent of a 3D dataset.
        self.compare(
            df3d.infergriddef(nblk=[50, 60, 1]),
            gs.GridDef('''50  119.8   19.6 
                                   60  1209.1  18.2 
                                   1   350.85  81.7'''))

        self.compare(df3d.infergriddef(nblk=[50, 60, 1]),
                     df3d.infergriddef(nblk=[50, 60, None]))

        self.compare(df3d.infergriddef(nblk=[50, 60, 1]),
                     df3d.infergriddef(nblk=[50, 60, 0]))

        #if nblk is not integer,infergriddef(), must convert it to int and provide correct grid definition
        _nblk = [12.3, 5.7, 10.11]
        self.compare(df3d.infergriddef(nblk=_nblk),
                     df3d.infergriddef(nblk=[int(i) for i in _nblk]))

        # If data is 2-D, zsiz must be provided as None. Otherwise it must raise exception.
        with self.assertRaises(ValueError):
            df2d.infergriddef(blksize=[50, 60, 4])

        with self.assertRaises(ValueError):
            df2d.infergriddef(blksize=75)

        self.compare(
            df2d.infergriddef(blksize=[50, 60, None]),
            gs.GridDef('''24   25.0    50.0  
                                   19   1230.0  60.0 
                                   1    0.5     1.0'''))

        #If data is 2-D, nz must be provided as None. Otherwise it must raise exception.
        with self.assertRaises(ValueError):
            df2d.infergriddef(nblk=[50, 60, 1])

        with self.assertRaises(ValueError):
            df2d.infergriddef(nblk=60)

        self.compare(
            df2d.infergriddef(nblk=[50, 60, None]),
            gs.GridDef('''50   11.9    23.8 
                              60   1209.1  18.2 
                              1    0.5     1.0'''))
예제 #8
0
import pygeostat as gs
# load some data
data = gs.ExampleData('3d_grid',
                      griddef=gs.GridDef([40, 1, 2, 40, 1, 2, 40, 0.5, 1]))
# plot the grid slices
_ = gs.grid_slice_plot(data, orient='xz', n_slice=5)
예제 #9
0
def gen_job_list(nreals_true, nreals, nphase, nstope, seed, dirlist,
                 fval_pars, min_width, max_width, rot, clip_bounds,
                 vert_bounds, true_data, de_pars, len_comp, grid1,
                 grid2, grid3, varg1, varg2):
    '''Generate job list for parallel processing of VOI workflow'''

    # generate directories
    gen_directories(dirlist, nreals_true, nphase)
    refdir, dhdir, simdir1, chksim, gsdir, simdir2, stopedir, postdir, outdir, plotdir, pardir, tmp = dirlist

    # generate seed lists
    rseed_lst0 = gs.rseed_list(nreals_true, seed+1000)
    rseed_lst1 = gs.rseed_list(nreals_true*nreals*nphase, seed+2000)
    rseed_lst2 = gs.rseed_list(nreals_true*nreals*nphase, seed+3000)
    rseed_lst3 = gs.rseed_list(nreals_true*nphase, seed+4000)

    # grid definitons
    with open(grid1, 'r') as f:
        grid = f.read()
        griddef1 = gs.GridDef(grid)
    with open(grid2, 'r') as f:
        grid = f.read()
        griddef2 = gs.GridDef(grid)
    with open(grid3, 'r') as f:
        grid = f.read()
        griddef3 = gs.GridDef(grid)

    # variogram models
    with open(varg1, 'r') as f:
        varlg = f.read()
    with open(varg2, 'r') as f:
        varhg = f.read()

    jobs_ref_sim = []
    jobs_ref_post = []
    jobs = []

    for t in range(nreals_true):

        # reference model params
        # usgsim (1)
        with open(pardir + 'usgsim1.par', 'r') as f:
            parstr_ref = f.read()
            parstr_ref = parstr_ref.format(rseed=rseed_lst0[t],
                                           griddef=griddef1,
                                           true_data=true_data,
                                           outfl=refdir+f'real{t+1}.gsb',
                                           varhg=varhg)
            parpath = pardir + f't{t+1}/usgsim_ref{t+1}.par'
            with open(parpath, 'w', newline='', encoding='utf8') as pf:
                pf.write(parstr_ref)

        jobs_ref_sim.append((dict(parstr=parstr_ref, parfile=parpath)))

        # reference model block avg params
        with open(pardir + 'ublkavg.par', 'r') as f:
            parstr_avg = f.read()
            parstr_avg = parstr_avg.format(simfl=refdir + f'real{t+1}.gsb',
                                           griddef=griddef1,
                                           griddef_block=griddef3,
                                           outfl=refdir + f'realblk{t+1}.gsb')
            parpath = pardir + f't{t+1}/blkavg_ref{t+1}.par'
            with open(parpath, 'w', newline='', encoding='utf8') as pf:
                pf.write(parstr_avg)

        jobs_ref_post.append((dict(parstr=parstr_avg, parfile=parpath)))

        for j in range(nphase):

            # resample params
            grid = [griddef1.nx, griddef1.xmn, griddef1.xsiz,
                    griddef1.ny, griddef1.ymn, griddef1.ysiz,
                    griddef1.nz, griddef1.zmn, griddef1.zsiz]
            sample_args = gen_sample_args(
                t+1, j+1, grid, len_comp, refdir, dhdir)

            # decluster params
            with open(pardir + 'declus_nn2.par', 'r') as f:
                parstr_nn = f.read()
                parstr_nn = parstr_nn.format(datafl=dhdir+f't{t+1}/ddh_au_p{j+1}_all.out',
                                             griddef=griddef1,
                                             outfl=dhdir+f't{t+1}/ddh_au_p{j+1}_declus.out')

            # simulate au
            # usgsim (2) params
            usgsim_pars2 = []
            with open(pardir + 'usgsim2.par', 'r') as f:
                parstr_usg = f.read()
                for i in range(nreals):
                    parstr_usg_fmt = parstr_usg.format(rseed=rseed_lst1[i+j*nreals+t*nphase*nreals],
                                                       griddef=griddef2,
                                                       outfl=simdir1 +
                                                       f't{t+1}/phase{j+1}/real{i+1}.gsb',
                                                       varhg=varhg,
                                                       data=dhdir + f't{t+1}/ddh_au_p{j+1}_declus.out')
                    usgsim_pars2.append(parstr_usg_fmt)

            # add coords params
            grid = [griddef2.nx, griddef2.xmn, griddef2.xsiz,
                    griddef2.ny, griddef2.ymn, griddef2.ysiz,
                    griddef2.nz, griddef2.zmn, griddef2.zsiz]
            coord_args = gen_addcoord_args(t+1, j+1, nreals, grid, simdir1)

            # mwa params
            mwa_pars = []
            with open(pardir + 'maketrend.par', 'r') as f:
                parstr_mwa = f.read()
                for i in range(nreals):
                    parstr_mwa_fmt = parstr_mwa.format(simfl=simdir1+f't{t+1}/phase{j+1}/real{i+1}_xyz.gsb',
                                                       outfl=gsdir +
                                                       f't{t+1}/phase{j+1}/real{i+1}_mwa.gsb',
                                                       griddef=griddef2)
                    mwa_pars.append(parstr_mwa_fmt)

            # threshold params
            thresh_args = gen_threshold_args(t+1, j+1, gsdir, nreals, 1.2, 3.3)

            # tag ddh params
            grid = [griddef2.nx, griddef2.xmn, griddef2.xsiz,
                    griddef2.ny, griddef2.ymn, griddef2.ysiz,
                    griddef2.nz, griddef2.zmn, griddef2.zsiz]
            tag_args = gen_tag_args(t+1, j+1, nreals, grid, dhdir, gsdir)

            # simulate au
            # usgsim (3) params
            usgsim_pars3 = []
            with open(pardir + 'usgsim3.par', 'r') as f:
                parstr_usg = f.read()
                for i in range(nreals):
                    parstr_usg_fmt = parstr_usg.format(rseed=rseed_lst2[i+j*nreals+t*nphase*nreals],
                                                       griddef=griddef2,
                                                       outfl=simdir2 +
                                                       f't{t+1}/phase{j+1}/real{i+1}.gsb',
                                                       varlg=varlg,
                                                       varhg=varhg,
                                                       data=dhdir +
                                                       f't{t+1}/phase{j+1}/ddh_au_real{i+1}_tag.out',
                                                       rockfl=gsdir + f't{t+1}/phase{j+1}/real{i+1}_mwa.gsb')
                    usgsim_pars3.append(parstr_usg_fmt)

            # block average params
            blkavg_pars = []
            with open(pardir + 'ublkavg.par', 'r') as f:
                parstr_avg = f.read()
                for i in range(nreals):
                    parstr_avg_fmt = parstr_avg.format(simfl=simdir2 + f't{t+1}/phase{j+1}/real{i+1}.gsb',
                                                       griddef=griddef2,
                                                       griddef_block=griddef3,
                                                       outfl=simdir2 + f't{t+1}/phase{j+1}/realblk{i+1}.gsb')
                    blkavg_pars.append(parstr_avg_fmt)

            # merge reals params
            with open(pardir + 'merge_reals_gsb.par', 'r') as f:
                parstr_mrg = f.read()
                parstr_mrg = parstr_mrg.format(simfl=simdir2 + f't{t+1}/phase{j+1}/realblk',
                                               nreals=nreals,
                                               outfl=postdir + f't{t+1}/phase{j+1}/real_merge.gsb')

            # postsim params
            with open(pardir + 'upostsim.par', 'r') as f:
                parstr_post = f.read()
                parstr_post = parstr_post.format(simfl=postdir + f't{t+1}/phase{j+1}/real_merge.gsb',
                                                 nreals=nreals,
                                                 outfl=postdir + f't{t+1}/phase{j+1}/postsim.gsb')

            # clipping args
            grid = [griddef3.nx, griddef3.xmn, griddef3.xsiz,
                    griddef3.ny, griddef3.ymn, griddef3.ysiz,
                    griddef3.nz, griddef3.zmn, griddef3.zsiz]
            clip_args = gen_clip_args(
                t+1, j+1, nreals, simdir2, simdir2, grid, clip_bounds)

            # optimization args
            de_args = gen_de_args(t+1, j+1, nreals, vert_bounds, 'verts.out', -3, [645, 670, 700],
                                  20, nstope, 8, rseed_lst3[j +
                                                            t*nphase], simdir2, stopedir,
                                  fval_pars, de_pars, min_width, max_width)

            jobs.append((sample_args, parstr_nn, usgsim_pars2, coord_args, mwa_pars,
                         thresh_args, tag_args, usgsim_pars3, blkavg_pars, parstr_mrg,
                         parstr_post, clip_args, de_args, t+1, j+1, simdir1, simdir2,
                         dhdir, gsdir))

    return [jobs_ref_sim, jobs_ref_post, jobs]
예제 #10
0
import pygeostat as gs
import pandas as pd

# Global setting using Parameters
gs.Parameters['data.griddef'] = gs.GridDef([10, 1, 0.5, 10, 1, 0.5, 2, 1, 0.5])
gs.Parameters['data.nreal'] = nreal = 100
size = gs.Parameters['data.griddef'].count()

reference_data = pd.DataFrame({'value': np.random.normal(0, 1, size=size)})

# Create example simulated data
simulated_data = pd.DataFrame(columns=['value'])
for i, offset in enumerate(np.random.rand(nreal) * 0.04 - 0.02):
    simulated_data = simulated_data.append(
        pd.DataFrame({'value': np.random.normal(offset, 1, size=size)}))

gs.histogram_plot_simulation(simulated_data,
                             reference_data,
                             reference_variable='value',
                             title='Histogram Reproduction',
                             grid=True)
예제 #11
0
import pygeostat as gs
grid_str = '''120 5.00  10.00 -nx, xmn, xsiz
            110 1205.00  10.00 -ny, ymn, ysiz
            1 0.5 1.0  -nz, zmn, zsiz'''

griddef = gs.GridDef(grid_str=grid_str)

data_fl = gs.ExampleData("grid2d_surf", griddef=griddef)
ax = gs.slice_plot(data_fl, var="Thickness")
_ = gs.contour_plot(data_fl, var="Thickness", ax=ax, clabel=True)
예제 #12
0
import pygeostat as gs
# load some data
data = gs.ExampleData('3d_grid',griddef = gs.GridDef([40,1,2,40,1,2,40,0.5,1]))
# plot the grid slices
_ = gs.grid_slice_plot(data, nrow=2, ncol=5, start_slice=10, end_slice=25, n_slice=10, cmap='hot', vlim=(-3,3))