Skip to content

Commit 515765f

Browse files
authored
Several fixes and tests of the 3 segY modules. (#1900)
1 parent f1426ca commit 515765f

4 files changed

Lines changed: 62 additions & 92 deletions

File tree

src/psbasemap.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ To see the full documentation type: ``@? basemap``
4444
"""
4545
basemap(; first=true, kwargs...) = helper_basemap(; first=first, kwargs...)
4646
basemap!(; kwargs...) = helper_basemap(; first=false, kwargs...)
47-
function helper_basemap(; first=true, kw...)
48-
d, K, O = init_module(first, kw...) # Also checks if the user wants ONLY the HELP mode
47+
function helper_basemap(; first=first, kw...)
48+
d, K, O = init_module(first==1, kw...) # Also checks if the user wants ONLY the HELP mode
4949
helper_basemap(O, K, d)
5050
end
5151

src/segy/segy.jl

Lines changed: 39 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
"""
2-
segy(cmd0::String="", arg1=nothing; kwargs...)
2+
segy(cmd0::String=""; kwargs...)
33
44
Plot a SEGY file as a seismic data image.
55
"""
6-
segy(cmd0::String=""; kwargs...) = segy_helper(cmd0, nothing; kwargs...)
7-
segy(arg1; kwargs...) = segy_helper("", arg1; kwargs...)
6+
segy!(cmd0::String; kwargs...) = segy_helper(cmd0; first=false, kwargs...)
7+
function segy(cmd0::String; first=true, kw...)
8+
#(cmd0 === "") && error("Missing input segY file name to run this module.")
9+
d, K, O = init_module(first==1, kw...) # Also checks if the user wants ONLY the HELP mode
10+
segy_helper(cmd0, O, K, d)
11+
end
812

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

13-
cmd, _, _, opt_R = parse_BJR(d, "", "", O, "")
14-
cmd, = parse_common_opts(d, cmd, [:V_params :UVXY :p :t :params], first)
16+
cmd = ((IamModern[]) ? "segy " : "pssegy ") * cmd0
17+
cmd = parse_BJR(d, cmd, "", O, "")[1]
18+
cmd = parse_common_opts(d, cmd, [:V_params :UVXY :p :t :params]; first=!O)[1]
1519
cmd = segy_common(d, cmd)
1620

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

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

4346
# ---------------------------------------------------------------------------------------------------
4447
"""
45-
segyz(cmd0::String="", arg1=nothing; kwargs...)
48+
segyz(cmd0::String=""; kwargs...)
4649
4750
Plot a SEGY file in 3-D as a seismic data image.
4851
"""
49-
segyz(cmd0::String=""; kwargs...) = segyz_helper(cmd0, nothing; kwargs...)
50-
segyz(arg1; kwargs...) = segyz_helper("", arg1; kwargs...)
52+
segyz!(cmd0::String; kwargs...) = segyz_helper(cmd0; first=false, kwargs...)
53+
function segyz(cmd0::String; first=true, kw...)
54+
d, K, O = init_module(first==1, kw...) # Also checks if the user wants ONLY the HELP mode
55+
segyz_helper(cmd0, O, K, d)
56+
end
5157

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

56-
cmd, _, _, opt_R = parse_BJR(d, "", "", O, "")
57-
cmd = parse_common_opts(d, cmd, [:Jz :V_params :UVXY :p :t :params], first)[1]
61+
cmd = ((IamModern[]) ? "segyz " : "pssegyz ") * cmd0
62+
cmd = parse_BJR(d, "", "", O, "")[1]
63+
cmd = parse_common_opts(d, cmd, [:V_params :UVXY :p :t :params], first=!O)[1]
64+
cmd, opt_JZ = parse_JZ(d, cmd, O=O, is3D=true)
5865
cmd = segy_common(d, cmd)
5966

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

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

8995
# ---------------------------------------------------------------------------------------------------
9096
# Shared options between segy and segyz
9197
function segy_common(d::Dict, cmd::String)
92-
# -D deviation (required)
93-
cmd = add_opt(d, cmd, "D", [:D :dev :deviation])
94-
95-
# -F fill color
96-
if ((val = find_in_dict(d, [:F :fill :color])[1]) !== nothing)
97-
if isa(val, Bool) && val
98-
cmd *= " -F"
99-
else
100-
cmd *= " -F" * arg2str(val)
101-
end
102-
end
10398

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

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

110-
# -C clip
111-
cmd = add_opt(d, cmd, "C", [:C :clip])
112-
113-
# -I fill negative
114-
cmd = parse_these_opts(cmd, d, [[:I :negative :fillneg]])
115-
116-
# -L samples per trace
117-
cmd = add_opt(d, cmd, "L", [:L :nsamp :nsamples])
118-
119-
# -M number of traces
120-
cmd = add_opt(d, cmd, "M", [:M :ntraces])
121-
122-
# -N normalize
123-
cmd = parse_these_opts(cmd, d, [[:N :normalize :norm]])
124-
125-
# -Q adjustments
126-
if ((val = find_in_dict(d, [:Q :adjust])[1]) !== nothing)
106+
if ((val = find_in_dict(d, [:Q :adjust])[1]) !== nothing) # -Q adjustments
127107
if isa(val, NamedTuple)
128-
haskey(val, :bias) && (cmd *= " -Qb" * string(val.bias))
129-
haskey(val, :b) && (cmd *= " -Qb" * string(val.b))
130-
haskey(val, :dpi) && (cmd *= " -Qi" * string(val.dpi))
131-
haskey(val, :i) && (cmd *= " -Qi" * string(val.i))
132-
haskey(val, :redvel) && (cmd *= " -Qu" * string(val.redvel))
133-
haskey(val, :u) && (cmd *= " -Qu" * string(val.u))
134-
haskey(val, :xmult) && (cmd *= " -Qx" * string(val.xmult))
135-
haskey(val, :x) && (cmd *= " -Qx" * string(val.x))
136-
haskey(val, :dy) && (cmd *= " -Qy" * string(val.dy))
137-
haskey(val, :y) && (cmd *= " -Qy" * string(val.y))
108+
for key = keys(val)
109+
key in (:b, :bias) && (cmd *= " -Qb" * string(val[key]))
110+
key in (:i, :dpi) && (cmd *= " -Qi" * string(val[key]))
111+
key in (:u, :redvel) && (cmd *= " -Qu" * string(val[key]))
112+
key in (:x, :xmult) && (cmd *= " -Qx" * string(val[key]))
113+
key in (:y, :dy) && (cmd *= " -Qy" * string(val[key]))
114+
end
138115
else
139116
cmd *= " -Q" * arg2str(val)
140117
end
141118
end
142119

143-
# -Z skip zero rms
144-
cmd = parse_these_opts(cmd, d, [[:Z :skipzero :nozero]])
145-
146120
return cmd
147121
end

src/segy/segy2grd.jl

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
"""
2-
segy2grd(cmd0::String="", arg1=nothing; kwargs...)
2+
segy2grd(cmd0::String=""; kwargs...)
33
44
Create a grid file from an ideographic SEGY file.
55
"""
6-
segy2grd(cmd0::String=""; kwargs...) = segy2grd_helper(cmd0, nothing; kwargs...)
7-
segy2grd(arg1; kwargs...) = segy2grd_helper("", arg1; kwargs...)
6+
function segy2grd(cmd0::String; kwargs...)
7+
d = init_module(false, kwargs...)[1]
8+
segy2grd_helper(cmd0, d)
9+
end
810

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

1314
cmd, opt_R = parse_R(d, "")[1:2]
15+
(opt_R === "") && error("Missing R or region option.")
1416
cmd = parse_common_opts(d, cmd, [:I :V_params :bi :di :r :yx])[1]
15-
16-
# -G output grid (required)
17-
cmd = add_opt(d, cmd, "G", [:G :outgrid :save])
17+
!contains(cmd, " -I") && error("Option 'I' or 'inc' is required")
1818

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

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

35-
# -L number of samples
36-
cmd = add_opt(d, cmd, "L", [:L :nsamp :nsamples])
37-
38-
# -M number of traces
39-
cmd = add_opt(d, cmd, "M", [:M :ntraces])
40-
41-
# -Q scale or sample interval
42-
if ((val = find_in_dict(d, [:Q :adjust])[1]) !== nothing)
34+
if ((val = find_in_dict(d, [:Q :adjust])[1]) !== nothing) # -Q scale or sample interval
4335
if isa(val, NamedTuple)
44-
haskey(val, :x) && (cmd *= " -Qx" * string(val.x))
45-
haskey(val, :xscale) && (cmd *= " -Qx" * string(val.xscale))
46-
haskey(val, :y) && (cmd *= " -Qy" * string(val.y))
47-
haskey(val, :sint) && (cmd *= " -Qy" * string(val.sint))
36+
for key = keys(val)
37+
key in (:x, :xscale) && (cmd *= " -Qx" * string(val[key]))
38+
key in (:y, :sint) && (cmd *= " -Qy" * string(val[key]))
39+
end
4840
else
4941
cmd *= " -Q" * arg2str(val)
5042
end
@@ -64,9 +56,8 @@ function segy2grd_helper(cmd0::String, arg1; kwargs...)
6456
end
6557
end
6658

67-
(cmd0 != "") && (cmd *= " " * cmd0)
68-
69-
cmd = "segy2grd " * cmd
59+
cmd = "segy2grd " * cmd0 * cmd
7060
((r = check_dbg_print_cmd(d, cmd)) !== nothing) && return r
61+
!isfile(cmd0) && error("segY file $cmd0 does not exist.") # Testing here only allows pass a Vd=2 for test parsing
7162
gmt(cmd, arg1)
7263
end

test/runtests.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ using InteractiveUtils
131131
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)
132132
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)
133133

134+
println(" SEGY")
135+
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);
136+
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);
137+
segy2grd("", R="-35/6/0/30", I=0.1, Vd=2);
138+
134139
#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 =");
135140
#D = grd2xyz(G);
136141
#gmtwrite("lixo.gmt", D);

0 commit comments

Comments
 (0)