{"id":13767626,"url":"https://github.com/sede-open/synthoseis","last_synced_at":"2026-01-18T11:21:27.653Z","repository":{"id":157611728,"uuid":"629980570","full_name":"sede-open/synthoseis","owner":"sede-open","description":"Generating seismic data and associated labels to train deep learning networks.","archived":false,"fork":false,"pushed_at":"2025-03-13T20:27:05.000Z","size":9277,"stargazers_count":72,"open_issues_count":5,"forks_count":17,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-05-10T23:31:43.231Z","etag":null,"topics":["geological-modeling","geology","machine-learning"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sede-open.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-04-19T12:22:24.000Z","updated_at":"2025-04-21T03:43:03.000Z","dependencies_parsed_at":"2024-01-17T18:44:51.840Z","dependency_job_id":"26a568de-7152-4571-8fed-7f6f7104521f","html_url":"https://github.com/sede-open/synthoseis","commit_stats":{"total_commits":10,"total_committers":4,"mean_commits":2.5,"dds":0.6,"last_synced_commit":"d2112fa6bc15bb1c401e2550c4601232f81c72b8"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sede-open/synthoseis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sede-open%2Fsynthoseis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sede-open%2Fsynthoseis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sede-open%2Fsynthoseis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sede-open%2Fsynthoseis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sede-open","download_url":"https://codeload.github.com/sede-open/synthoseis/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sede-open%2Fsynthoseis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28535162,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T10:13:46.436Z","status":"ssl_error","status_checked_at":"2026-01-18T10:13:11.045Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["geological-modeling","geology","machine-learning"],"created_at":"2024-08-03T16:01:10.415Z","updated_at":"2026-01-18T11:21:27.616Z","avatar_url":"https://github.com/sede-open.png","language":"Jupyter Notebook","funding_links":[],"categories":["Software","Software and Tools"],"sub_categories":["Seismic and Seismology"],"readme":"# synthoseis\n\n![alt text](img/synthoseis_logo.png)\n\nGenerating seismic data and associated labels to train deep learning networks.\n\n## Overview\n\nSynthoseis is an open-source, Python-based tool used for generating pseudo-random seismic data, as described in [Synthetic seismic data for training deep learning networks](https://library.seg.org/doi/abs/10.1190/int-2021-0193.1).\n\nThe goal of synthoseis is to generate realistic seismic data for training a deep learning network to identify features of interest in field-acquired seismic data.\nSuch training data should be plentiful, cover a diverse range of subsurface scenarios and provide quality training labels.\n\n## Documentation\n\nRead our documentation: https://sede-open.github.io/synthoseis/datagenerator.html\n\n## Installation\n\nWe provide an [environment.yml](environment.yml) to install the required packages for synthoseis.\n\n## Resources\n\n### Quick Start\n\nRun a model with parameters provided in the example config file\n\n```\nconda activate synthoseis\npython main.py --config config/example.json --num_runs 1 --run_id seismic_example\n```\n\n### Overview of workflow\n\n```\nLoad user-parameters from config file\nBuild initial horizon at base and deposit layers of random thickness on top until some minimum depth is reached\nChoose facies for each layer\nConvert stack of horizons into a geologic age model\nGenerate faults and apply to age model\nIdentify closures using flood-filling algorithm\nFill closures randomly with fluids\nCalculate elastic rock properties\nCalculate reflection coefficients for each required incident angle\nApply random noise\nConvolve using Butterworth bandpass filter to generate bandlimited seismic reflectivity\nApply geophysical augmentation (such as lateral smoothing, trace integration, amplitude balancing, RMO)\n```\n\n### User parameters\n\nAn example user-parameter json format file is provided in the config folder, and is used to set parameters for generating a batch of training data.\n\n| Key                        | Description                                                                                                                                                                                             |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| project                    | Name of project. Used to select the rock property model associated with the project                                                                                                                     |\n| project_folder             | Output directory for models                                                                                                                                                                             |\n| work_folder                | Temporary folder used for storing intermediate data. Deleted on model completion                                                                                                                        |\n| cube_shape                 | Number of samples in [X, Y, Z] for output data                                                                                                                                                          |\n| incident_angles            | Central angle for the output seismic angle-stacks                                                                                                                                                       |\n| digi                       | Vertical sampling rate                                                                                                                                                                                  |\n| infill_factor              | Initial oversampling multiplier in the Z direction. Due to memory contraints, this is only used to construct the initial, unfaulted horizons                                                            |\n| initial_layer_stdev        | Standard deviation of the depth of initial horizon at the base of the model, random value is chosen between the provided [low, high] range                                                              |\n| thickness_min              | Minimum thickness of layers (in samples)                                                                                                                                                                |\n| thickness_max              | Maximum thickness of layers (in samples)                                                                                                                                                                |\n| seabed_min_depth           | Random thickness layers are \"deposited\" on top of previous layers. When a horizon's minimum depth is below this value, this becomes the top-most horizon, usually the seabed                            |\n| signal_to_noise_ratio_db   | Signal to noise ratio in decibels to control the noise level of the output seismic data. A random value is chosen from a (trimmed) triangular distribution from the provided [left, mode, right] values |\n| bandwidth_low              | Bandpass low-cut value is chosen at random between the [low, high] values provided                                                                                                                      |\n| bandwidth_high             | Bandpass high-cut value is chosen at random between the [low, high] values provided                                                                                                                     |\n| bandwidth_ord              | Order of the slope used in the bandpass filter                                                                                                                                                          |\n| dip_factor_max             | A scaling factor applied to the dip of each layer                                                                                                                                                       |\n| min_number_faults          | Minimum number of faults in the model                                                                                                                                                                   |\n| max_number_faults          | Maximum number of faults in the model                                                                                                                                                                   |\n| pad_samples                | Additional padding in Z-direction to avoid edge effects, given in samples                                                                                                                               |\n| max_column_height          | Maximum vertical height of column in a 3D closure                                                                                                                                                       |\n| closure_types              | Used to enable specific closure types, from \"simple\" (4-way), \"faulted\" (3-way), or \"onlap\" (stratigraphic)                                                                                             |\n| min_closure_voxels_simple  | Oil or gas filled simple closures with fewer voxels than this threshold will be filled with brine                                                                                                       |\n| min_closure_voxels_faulted | As min_closure_voxels_simple but for faulted closures                                                                                                                                                   |\n| min_closure_voxels_onlap   | As min_closure_voxels_simple but for stratigraphic closures                                                                                                                                             |\n| sand_layer_thickness       | Average thickness of stacked sand layers a priori, given in number of layers                                                                                                                            |\n| sand_layer_fraction        | Average percentage of sand layers in model a priori                                                                                                                                                     |\n| extra_qc_plots             | Switch to turn on/off additional QC output png plots                                                                                                                                                    |\n| verbose                    | Switch to turn on/off verbosity                                                                                                                                                                         |\n| partial_voxels             | If true, calculate an average property inside voxels that span multiple layers                                                                                                                          |\n| variable_shale_ng          | If true, enable net to gross to vary laterally in shale layers, otherwise use a net to gross of 0                                                                                                       |\n| basin_floor_fans           | Switch to turn on/off basin floor fan-shaped features in layers                                                                                                                                         |\n| include_channels           | Switch to turn on/off channels (deprecated, always false)                                                                                                                                               |\n| include_salt               | Switch to turn on/off salt bodies                                                                                                                                                                       |\n| write_to_hdf               | Write QC and additional volumes to HDF file                                                                                                                                                             |\n| broadband_qc_volume        | Output a bandpassed seismic data with a low-cut of 2Hz and high-cut of 90Hz to simulate broadband seismic                                                                                               |\n| model_qc_volumes           | Save QC volumes to disk                                                                                                                                                                                 |\n| multiprocess_bp            | Use multiprocessing to speed up the bandpass operations                                                                                                                                                 |\n\n### Rock properties\n\nAn example rock property model is provided in [rpm_example.py](rockphysics/rpm_example.py), and consists of trends as functions of depth for Vp, Vs and Rho for shales and fluid-filled sands.\n\nTo add a new rock property model, use the `rpm_example.py` as a template to create a similar python script containing the new depth trends for each fluid/facies combination, for example `rockphysics/new_rpm.py`. Create a new config.json file and replace the `project` value to `\"new_rpm\"`.\n\n## Examples Gallery\n\n\u003c!-- \u003cdetails\u003e\u003csummary\u003eGeologic Age\u003c/summary\u003e --\u003e\n\n### Geologic Age\n\n\u003ctable\u003e\n\u003ctr\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/geologic_age_01.png\" width=300\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/geologic_age_02.png\" width=300\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/geologic_age_03.png\" width=300\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c!-- \u003c/details\u003e --\u003e\n\n\u003c!-- \u003cdetails\u003e\u003csummary\u003eBasin Floor Fans\u003c/summary\u003e --\u003e\n\n### Basin Floor Fans\n\n\u003ctable\u003e\n\u003ctr\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/fan_01.png\" width=300\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/fan_02.png\" width=300\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/fan_03.png\" width=300\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c!-- \u003c/details\u003e --\u003e\n\n\u003c!-- \u003cdetails\u003e\u003csummary\u003eSalt bodies\u003c/summary\u003e --\u003e\n\n### Salt Bodies\n\nCross-section through example salt bodies, coloured by lithology, where shale=0, sand=1, salt=2\n\n\u003ctable\u003e\n\u003ctr\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/salt_01.png\" width=300\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/salt_02.png\" width=300\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/salt_03.png\" width=300\u003e\n  \u003c/td\u003e\n\u003c/table\u003e\n\n\u003c!-- \u003cdetails\u003e\u003csummary\u003eFaulting Styles\u003c/summary\u003e --\u003e\n\n### Faulting Styles\n\nFaulting style is chosen from self branching, stair case, horst graben or relay ramp, as shown from left to right. Alternatively, faults can be entirely random (not shown).\n\n\u003ctable\u003e\u003ctr\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/fault_self_branching_01.png\" width=300\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/fault_stair_case_01.png\" width=300\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/fault_horst_graben_01.png\" width=300\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/fault_relay_ramp_01.png\" width=300\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c!-- \u003c/details\u003e --\u003e\n\n\u003c!-- \u003cdetails\u003e\u003csummary\u003eClosures\u003c/summary\u003e --\u003e\n\n### Closures\n\nExample closures, coloured by closure number\n\n\u003ctable\u003e\n\u003ctr\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/closures_01.png\" width=300\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/closures_02.png\" width=300\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/closures_03.png\" width=300\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c!-- \u003c/details\u003e --\u003e\n\n### Seismic Data\n\nCross-sections through the centre of some example models, showing the layered earth model coloured by facies on left, and fullstack RAI seismic data on the right.\nSand content for models is chosen using a Markov process, values a priori (input) and a posteriori (output) are shown in the facies plot.\n\n\u003ctable\u003e\n\u003ctr\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/seismic_01.png\" width=300\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/seismic_02.png\" width=300\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cimg src=\"img/seismic_03.png\" width=300\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## Contributing\n\nWe welcome all kinds of contributions. The preferred way of submitting a contribution is to either make an issue on GitHub or by forking the project on GitHub and making a pull request.\n\n## Citation\n\n```\n@article{doi:10.1190/INT-2021-0193.1,\nauthor = {Tom P. Merrifield and Donald P. Griffith and S. Ahmad Zamanian and Stephane Gesbert and Satyakee Sen and Jorge De La Torre Guzman and R. David Potter and Henning Kuehl},\ntitle = {Synthetic seismic data for training deep learning networks},\njournal = {Interpretation},\nvolume = {10},\nnumber = {3},\npages = {SE31-SE39},\nyear = {2022},\ndoi = {10.1190/INT-2021-0193.1},\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsede-open%2Fsynthoseis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsede-open%2Fsynthoseis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsede-open%2Fsynthoseis/lists"}