import numpy as np
from pysit import *
from pysit.gallery.gallery_base import PrecomputedGalleryModel
__all__ = ['BPModel', 'bp']
[docs]class BPModel(PrecomputedGalleryModel):
""" Gallery Model class for the BP Velocity Benchmark.
The benchmark is licensed for open distribution, with limitation.
See http://software.seg.org/datasets/2D/2004_BP_Vel_Benchmark/2004_Benchmark_READMES.pdf
for more details on licensing. You must agree to the licensing to use this model.
"""
# Names
model_name = "BP Velocity Benchmark"
# A sanitized name for filesystem work
fs_full_name = "bp"
fs_short_name = "bp"
# Available data
supported_physics = ['acoustic', 'variable-density-acoustic']
supported_physical_parameters = ['density', 'vp']
supported_masks = ['salt', 'water']
# Descriptive data
valid_dimensions = (2,)
@property #read only
def dimension(self):
return 2
# File information
_local_parameter_filenames = { 'vp' : 'vel_z6.25m_x12.5m_exact.segy.gz',
'density' : 'density_z6.25m_x12.5m.segy.gz'}
_local_mask_filenames = { 'salt' : 'vel_z6.25m_x12.5m_saltindex.segy.gz', # 0 salt, 1 no salt
'water' : 'vel_z6.25m_x12.5m_wbindex.segy.gz'} # 1 water, 0 no water
_parameter_scale_factor = { 'vp' : 1.0,
'density' : 1.0}
_vp_file_sources = ['ftp://software.seg.org/pub/datasets/2D/2004_BP_Vel_Benchmark/vel_z6.25m_x12.5m_exact.segy.gz']
_density_file_sources = ['ftp://software.seg.org/pub/datasets/2D/2004_BP_Vel_Benchmark/density_z6.25m_x12.5m.segy.gz']
_salt_file_sources = ['ftp://software.seg.org/pub/datasets/2D/2004_BP_Vel_Benchmark/vel_z6.25m_x12.5m_saltindex.segy.gz']
_water_file_sources = ['ftp://software.seg.org/pub/datasets/2D/2004_BP_Vel_Benchmark/vel_z6.25m_x12.5m_wbindex.segy.gz']
_remote_file_sources = {'vp' : _vp_file_sources,
'density' : _density_file_sources,
'salt' : _salt_file_sources,
'water' : _water_file_sources}
_model_transposed = False
# Model specification
base_physical_origin = np.array([0.0, 0.0])
base_physical_size = np.array([67425.0, 11937.5])
base_physical_dimensions_units = ('m', 'm')
base_pixels = np.array([5395, 1911])
base_pixel_scale = np.array([12.5, 6.25])
base_pixel_units = ('m', 'm')
# Water properties specify the way the water masking is handled
# (None, ) indicates no water
# ('depth', <depth: float>) specifies that a preset depth from the base_physical_origin is to be used
# ('mask', ) indicates that the specified mask name should be used
water_properties = ('mask', )
_initial_configs = {'smooth_width': {'sigma':3000.0},
'smooth_low_pass': {'freq':1./3000.},
'constant': {'velocity': 3000.0},
'gradient': {'min':1500.0, 'max':3000}}
_scale_map = {'full': np.array([12.5, 6.25]),
'large': np.array([12.5, 12.5]),
'medium': np.array([16.0, 16.0]),
'small': np.array([20.0, 20.0]),
'mini': np.array([25.0, 25.0]),}
patches = { 'left' : {'origin': np.array([0.0, 0.0]),
'size': np.array([21400.0, 11937.5])},
}
license_string = "Use of the BP Velocity Benchmark requires you to read and \nagree with the license before continuing: \nhttp://software.seg.org/datasets/2D/2004_BP_Vel_Benchmark/2004_Benchmark_READMES.pdf"
def download(parameter='all'):
if parameter == 'all':
for p in BPModel.supported_physical_parameters:
BPModel._download_and_prepare(p)
for p in BPModel.supported_masks:
BPModel._download_and_prepare(p)
else:
BPModel._download_and_prepare(parameter)
[docs]def bp(patch=None, **kwargs):
""" Friendly wrapper for instantiating the BP Velocity model. """
model_config = dict(physics='acoustic',
origin=None,
size=None,
pixel_scale='mini',
pixels=None,
initial_model_style='smooth_low_pass',
initial_config={},
fix_water_layer=True,)
# Make any changes
model_config.update(kwargs)
if patch in BPModel.patches:
model_config.update(BPModel.patches[patch])
return BPModel(**model_config).get_setup()
if __name__ == '__main__':
import matplotlib.pyplot as plt
# M = BPModel(initial_model_style='smooth', pixel_scale='mini')
# C, C0, m, d = M.get_setup()
# C, C0, m, d = bp(patch='left',initial_model_style='smooth_low_pass', pixel_scale='small')
C, C0, m, d = bp(patch='left',initial_model_style='smooth_low_pass', pixel_scale='mini')
fig = plt.figure()
fig.add_subplot(2,1,1)
vis.plot(C, m)
fig.add_subplot(2,1,2)
vis.plot(C0, m)
plt.show()
C, C0, m, d = bp(patch='left',initial_model_style='smooth_low_pass', pixel_scale='small')
# C, C0, m, d = bp(patch='left',initial_model_style='smooth_low_pass', pixel_scale='mini')
fig = plt.figure()
fig.add_subplot(2,1,1)
vis.plot(C, m)
fig.add_subplot(2,1,2)
vis.plot(C0, m)
plt.show()