Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/psbasemap.jl
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ To see the full documentation type: ``@? basemap``
"""
basemap(; first=true, kwargs...) = helper_basemap(; first=first, kwargs...)
basemap!(; kwargs...) = helper_basemap(; first=false, kwargs...)
function helper_basemap(; first=true, kw...)
d, K, O = init_module(first, kw...) # Also checks if the user wants ONLY the HELP mode
function helper_basemap(; first=first, kw...)
d, K, O = init_module(first==1, kw...) # Also checks if the user wants ONLY the HELP mode
helper_basemap(O, K, d)
end

Expand Down
104 changes: 39 additions & 65 deletions src/segy/segy.jl
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
"""
segy(cmd0::String="", arg1=nothing; kwargs...)
segy(cmd0::String=""; kwargs...)

Plot a SEGY file as a seismic data image.
"""
segy(cmd0::String=""; kwargs...) = segy_helper(cmd0, nothing; kwargs...)
segy(arg1; kwargs...) = segy_helper("", arg1; kwargs...)
segy!(cmd0::String; kwargs...) = segy_helper(cmd0; first=false, kwargs...)
function segy(cmd0::String; first=true, kw...)
#(cmd0 === "") && error("Missing input segY file name to run this module.")
d, K, O = init_module(first==1, kw...) # Also checks if the user wants ONLY the HELP mode
segy_helper(cmd0, O, K, d)
end

# ---------------------------------------------------------------------------------------------------
function segy_helper(cmd0::String, arg1; first=true, kwargs...)
d, K, O = init_module(first, kwargs...)
function segy_helper(cmd0::String, O::Bool, K::Bool, d::Dict{Symbol, Any})

cmd, _, _, opt_R = parse_BJR(d, "", "", O, "")
cmd, = parse_common_opts(d, cmd, [:V_params :UVXY :p :t :params], first)
cmd = ((IamModern[]) ? "segy " : "pssegy ") * cmd0
cmd = parse_BJR(d, cmd, "", O, "")[1]
cmd = parse_common_opts(d, cmd, [:V_params :UVXY :p :t :params]; first=!O)[1]
cmd = segy_common(d, cmd)

# -E error tolerance (segy only)
Expand All @@ -34,27 +38,30 @@ function segy_helper(cmd0::String, arg1; first=true, kwargs...)
# -T trace list file (segy only)
cmd = add_opt(d, cmd, "T", [:T :tracelist :tracefile])

(cmd0 != "") && (cmd *= " " * cmd0)

cmd = "segy " * cmd
((r = check_dbg_print_cmd(d, cmd)) !== nothing) && return r
!isfile(cmd0) && error("segY file $cmd0 does not exist.") # Testing here only allows pass a Vd=2 for test parsing
finish_PS_module(d, cmd, "", K, O, true)
end

# ---------------------------------------------------------------------------------------------------
"""
segyz(cmd0::String="", arg1=nothing; kwargs...)
segyz(cmd0::String=""; kwargs...)

Plot a SEGY file in 3-D as a seismic data image.
"""
segyz(cmd0::String=""; kwargs...) = segyz_helper(cmd0, nothing; kwargs...)
segyz(arg1; kwargs...) = segyz_helper("", arg1; kwargs...)
segyz!(cmd0::String; kwargs...) = segyz_helper(cmd0; first=false, kwargs...)
function segyz(cmd0::String; first=true, kw...)
d, K, O = init_module(first==1, kw...) # Also checks if the user wants ONLY the HELP mode
segyz_helper(cmd0, O, K, d)
end

# ---------------------------------------------------------------------------------------------------
function segyz_helper(cmd0::String, arg1; first=true, kwargs...)
d, K, O = init_module(first, kwargs...)
function segyz_helper(cmd0::String, O::Bool, K::Bool, d::Dict{Symbol, Any})

cmd, _, _, opt_R = parse_BJR(d, "", "", O, "")
cmd = parse_common_opts(d, cmd, [:Jz :V_params :UVXY :p :t :params], first)[1]
cmd = ((IamModern[]) ? "segyz " : "pssegyz ") * cmd0
cmd = parse_BJR(d, "", "", O, "")[1]
cmd = parse_common_opts(d, cmd, [:V_params :UVXY :p :t :params], first=!O)[1]
cmd, opt_JZ = parse_JZ(d, cmd, O=O, is3D=true)
cmd = segy_common(d, cmd)

# -S trace location header (segyz: header_x/header_y)
Expand All @@ -80,68 +87,35 @@ function segyz_helper(cmd0::String, arg1; first=true, kwargs...)
end
end

(cmd0 != "") && (cmd *= " " * cmd0)

cmd = "segyz " * cmd
((r = check_dbg_print_cmd(d, cmd)) !== nothing) && return r
!isfile(cmd0) && error("segY file $cmd0 does not exist.") # Testing here only allows pass a Vd=2 for test parsing
finish_PS_module(d, cmd, "", K, O, true)
end

# ---------------------------------------------------------------------------------------------------
# Shared options between segy and segyz
function segy_common(d::Dict, cmd::String)
# -D deviation (required)
cmd = add_opt(d, cmd, "D", [:D :dev :deviation])

# -F fill color
if ((val = find_in_dict(d, [:F :fill :color])[1]) !== nothing)
if isa(val, Bool) && val
cmd *= " -F"
else
cmd *= " -F" * arg2str(val)
end
end

# -W wiggle trace
cmd = parse_these_opts(cmd, d, [[:W :wiggle]])
((s = hlp_desnany_str(d, [:F :fill :color])) !== "") && (cmd *= " -F" * s) # -F fill color

# -A byte swap
cmd = parse_these_opts(cmd, d, [[:A :byteswap :swap]])
cmd = parse_these_opts(cmd, d, [[:A :byteswap :swap], [:C :clip], [:D :dev :deviation], [:I :negative :fillneg],
[:L :nsamp :nsamples], [:M :ntraces], [:N :normalize :norm], [:W :wiggle], [:Z :skipzero :nozero]])
!contains(cmd, " -D") && error("Option 'D' or 'dev' or 'deviation' is required")
!contains(cmd, " -F") && !contains(cmd, " -W") && (cmd *= " -W")

# -C clip
cmd = add_opt(d, cmd, "C", [:C :clip])

# -I fill negative
cmd = parse_these_opts(cmd, d, [[:I :negative :fillneg]])

# -L samples per trace
cmd = add_opt(d, cmd, "L", [:L :nsamp :nsamples])

# -M number of traces
cmd = add_opt(d, cmd, "M", [:M :ntraces])

# -N normalize
cmd = parse_these_opts(cmd, d, [[:N :normalize :norm]])

# -Q adjustments
if ((val = find_in_dict(d, [:Q :adjust])[1]) !== nothing)
if ((val = find_in_dict(d, [:Q :adjust])[1]) !== nothing) # -Q adjustments
if isa(val, NamedTuple)
haskey(val, :bias) && (cmd *= " -Qb" * string(val.bias))
haskey(val, :b) && (cmd *= " -Qb" * string(val.b))
haskey(val, :dpi) && (cmd *= " -Qi" * string(val.dpi))
haskey(val, :i) && (cmd *= " -Qi" * string(val.i))
haskey(val, :redvel) && (cmd *= " -Qu" * string(val.redvel))
haskey(val, :u) && (cmd *= " -Qu" * string(val.u))
haskey(val, :xmult) && (cmd *= " -Qx" * string(val.xmult))
haskey(val, :x) && (cmd *= " -Qx" * string(val.x))
haskey(val, :dy) && (cmd *= " -Qy" * string(val.dy))
haskey(val, :y) && (cmd *= " -Qy" * string(val.y))
for key = keys(val)
key in (:b, :bias) && (cmd *= " -Qb" * string(val[key]))
key in (:i, :dpi) && (cmd *= " -Qi" * string(val[key]))
key in (:u, :redvel) && (cmd *= " -Qu" * string(val[key]))
key in (:x, :xmult) && (cmd *= " -Qx" * string(val[key]))
key in (:y, :dy) && (cmd *= " -Qy" * string(val[key]))
end
else
cmd *= " -Q" * arg2str(val)
end
end

# -Z skip zero rms
cmd = parse_these_opts(cmd, d, [[:Z :skipzero :nozero]])

return cmd
end
41 changes: 16 additions & 25 deletions src/segy/segy2grd.jl
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
"""
segy2grd(cmd0::String="", arg1=nothing; kwargs...)
segy2grd(cmd0::String=""; kwargs...)

Create a grid file from an ideographic SEGY file.
"""
segy2grd(cmd0::String=""; kwargs...) = segy2grd_helper(cmd0, nothing; kwargs...)
segy2grd(arg1; kwargs...) = segy2grd_helper("", arg1; kwargs...)
function segy2grd(cmd0::String; kwargs...)
d = init_module(false, kwargs...)[1]
segy2grd_helper(cmd0, d)
end

# ---------------------------------------------------------------------------------------------------
function segy2grd_helper(cmd0::String, arg1; kwargs...)
d = init_module(false, kwargs...)[1]
function segy2grd_helper(cmd0::String, d::Dict{Symbol, Any})

cmd, opt_R = parse_R(d, "")[1:2]
(opt_R === "") && error("Missing R or region option.")
cmd = parse_common_opts(d, cmd, [:I :V_params :bi :di :r :yx])[1]

# -G output grid (required)
cmd = add_opt(d, cmd, "G", [:G :outgrid :save])
!contains(cmd, " -I") && error("Option 'I' or 'inc' is required")

# -A add up or count
if ((val = find_in_dict(d, [:A :add :count])[1]) !== nothing)
Expand All @@ -29,22 +29,14 @@ function segy2grd_helper(cmd0::String, arg1; kwargs...)
end
end

# -D grid metadata
cmd = add_opt(d, cmd, "D", [:D :metadata :header])
cmd = parse_these_opts(cmd, d, [[:D :metadata :header], [:G :outgrid :save], [:L :nsamp :nsamples], [:M :ntrace]])

# -L number of samples
cmd = add_opt(d, cmd, "L", [:L :nsamp :nsamples])

# -M number of traces
cmd = add_opt(d, cmd, "M", [:M :ntraces])

# -Q scale or sample interval
if ((val = find_in_dict(d, [:Q :adjust])[1]) !== nothing)
if ((val = find_in_dict(d, [:Q :adjust])[1]) !== nothing) # -Q scale or sample interval
if isa(val, NamedTuple)
haskey(val, :x) && (cmd *= " -Qx" * string(val.x))
haskey(val, :xscale) && (cmd *= " -Qx" * string(val.xscale))
haskey(val, :y) && (cmd *= " -Qy" * string(val.y))
haskey(val, :sint) && (cmd *= " -Qy" * string(val.sint))
for key = keys(val)
key in (:x, :xscale) && (cmd *= " -Qx" * string(val[key]))
key in (:y, :sint) && (cmd *= " -Qy" * string(val[key]))
end
else
cmd *= " -Q" * arg2str(val)
end
Expand All @@ -64,9 +56,8 @@ function segy2grd_helper(cmd0::String, arg1; kwargs...)
end
end

(cmd0 != "") && (cmd *= " " * cmd0)

cmd = "segy2grd " * cmd
cmd = "segy2grd " * cmd0 * cmd
((r = check_dbg_print_cmd(d, cmd)) !== nothing) && return r
!isfile(cmd0) && error("segY file $cmd0 does not exist.") # Testing here only allows pass a Vd=2 for test parsing
gmt(cmd, arg1)
end
5 changes: 5 additions & 0 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,11 @@ using InteractiveUtils
sac("$(TESTSDIR)/assets/ntkl.z $(TESTSDIR)/assets/onkl.z", J="X15c/4c", R="-300/1100/22/27", B="x100 y1", E=:d, M=1.5, T="+t1", Vd=dbg2)
sac!("$(TESTSDIR)/assets/ntkl.z $(TESTSDIR)/assets/onkl.z", J="X15c/4c", R="-300/1100/22/27", B="x100 y1", E="d", M=1.5, T=(mark=1,), C=(-100,500), fill=(negative=true, color=:blue), F="r", Vd=dbg2)

println(" SEGY")
segy("", R="-35/6/0/30", J="x0.15i/-0.15i", D=0.35, C=8.0, F=:green, Q=(b=-1.2, x=0.1, y=0.1), S=:c, W=true, Vd=2);
segyz("", R="-35/6/0/30/0/30", J="x0.15i/-0.15i", Jz="-0.15i", p=(175,5), D=0.35, C=8.0, F=:green, Q=(b=-1.2,), S="c/5", W=true, Vd=2);
segy2grd("", R="-35/6/0/30", I=0.1, Vd=2);

#G = gmt("grdmath -R-15/15/-15/15 -I1 X Y HYPOT DUP 2 MUL PI MUL 8 DIV COS EXCH NEG 10 DIV EXP MUL =");
#D = grd2xyz(G);
#gmtwrite("lixo.gmt", D);
Expand Down
Loading