Skip to content

Commit

Permalink
Update array functions, move FFTData and CorrData to types folder.
Browse files Browse the repository at this point in the history
  • Loading branch information
tclements committed Apr 17, 2019
1 parent afaa02d commit f511273
Show file tree
Hide file tree
Showing 9 changed files with 584 additions and 214 deletions.
404 changes: 392 additions & 12 deletions src/ArrayFuncs.jl

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions src/Noise.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ include("filter.jl")
include("downsample.jl")
include("availability.jl")
include("phase_shift.jl")
include("FFTData.jl")
include("CorrData.jl")
include("show.jl")
include("Types/FFTData.jl")
include("Types/CorrData.jl")
include("Types/show.jl")
include("compute_fft.jl")
include("correlation.jl")

Expand Down
8 changes: 0 additions & 8 deletions src/Noise.jl~

This file was deleted.

File renamed without changes.
92 changes: 92 additions & 0 deletions src/Types/FFTData.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import Base:in, +, -, *, ==, convert, isempty, isequal, length, push!, sizeof
export FFTData

const fftfields = [:id, :name, :loc, :fs, :gain, :freqmin, :freqmax, :cc_step,
:whitened, :time_norm, :resp,:notes, :misc, :t, :fft]

# This is type-stable for F = FFTData() but not for keyword args
mutable struct FFTData
name::String # name [Net.Sta.Loc.Chan]
id::String # id [Y-mm-dd] this is date of fft
loc::Array{Float64,1} # loc
fs::Float64 # sampling rate [Hz]
gain::Float64 # gain
freqmin::Float64 # minumum frequency [Hz]
freqmax::Float64 # maximum frequency [Hz]
cc_len::Int # window_length [s]
cc_step::Int # step between windows [s]
whitened::Bool # whitening applied
time_norm::Union{Bool,String} # time normaliation
resp ::Array{Complex{Float64},2} # response poles/zeros
misc::Dict{String,Any} # misc
notes::Array{String,1} # notes
t::Array{Float64,1} # time
fft::Array{Complex{Float64},2} # fft data

function FFTData(
name ::String,
id ::String,
loc ::Array{Float64,1},
fs ::Float64,
gain ::Float64,
freqmin ::Float64,
freqmax ::Float64,
cc_len ::Int,
cc_step ::Int,
whitened ::Bool,
time_norm::Union{Bool,String},
resp ::Array{Complex{Float64},2},
misc ::Dict{String,Any},
notes ::Array{String,1},
t ::Array{Float64,1},
fft ::Array{Complex{Float64},2}
)

return new(name, id, loc, fs, gain, freqmin, freqmax, cc_len, cc_step,
whitened, time_norm, resp, misc, notes, t, fft)
end
end

FFTData(;
name ::String = "",
id ::String = "",
loc ::Array{Float64,1} = Array{Float64,1}(undef, 0),
fs ::Float64 = zero(Float64),
gain ::Float64 = one(Float64),
freqmin ::Float64 = zero(Float64),
freqmax ::Float64 = zero(Float64),
cc_len ::Int = zero(Int),
cc_step ::Int = zero(Int),
whitened ::Bool = false,
time_norm::Union{Bool,String} = false,
resp ::Array{Complex{Float64},2} = Array{Complex{Float64},2}(undef, 0, 2),
misc ::Dict{String,Any} = Dict{String,Any}(),
notes ::Array{String,1} = Array{String,1}(undef, 0),
t ::Array{Float64,1} = Array{Float64,1}(undef, 0),
fft ::Array{Complex{Float64},2} = Array{Complex{Float64},2}(undef, 0, 2)
) = FFTData(name, id, loc, fs, gain, freqmin, freqmax, cc_len, cc_step,
whiten, time_norm, resp, misc, notes, t, fft)

FFTData(C::SeisChannel,freqmin::Float64, freqmax::Float64,cc_len::Int,
cc_step::Int, whitened::Bool,time_norm::Union{Bool,String},
t::Array{Float64,1},fft::Array{Complex{Float64},2}
) = FFTData(C.name, C.id, C.loc, C.fs, C.gain, freqmin, freqmax, cc_len,
cc_step, whitened, time_norm, C.resp, C.misc, C.notes, t, fft)

in(s::String, F::FFTData) = S.id==s

isempty(F::FFTData) = minimum([isempty(getfield(F,f)) for f in datafields])

isequal(F::FFTData, U::FFTData) = minimum([hash(getfield(S,i))==hash(getfield(U,i)) for i in fftfields]::Array{Bool,1})
==(F::FFTData, U::FFTData) = isequal(S,U)::Bool

function sizeof(F::FFTData)
s = sum([sizeof(getfield(F,f)) for f in fftfields])
if !isempty(F.notes)
s += sum([sizeof(i) for i in F.notes])
end
if !isempty(F.misc)
s += sum([sizeof(i) for i in values(F.misc)])
end
return s
end
File renamed without changes.
8 changes: 3 additions & 5 deletions src/compute_fft.jl
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,9 @@ function process_fft(A::AbstractArray,fs::Float64,freqmin::Float64,
# pre-process each window
ArrayFuncs.demean!(A)
ArrayFuncs.detrend!(A)
for ii = 1:N
taper!(A[:,ii],fs)
bandpass!(A[:,ii],freqmin,freqmax,fs,corners=corners,
zerophase=zerophase)
end
ArrayFuncs.taper!(A,fs)
ArrayFuncs.bandpass!(A,freqmin,freqmax,fs,corners=corners,
zerophase=zerophase)
ArrayFuncs.demean!(A)

# apply one-bit normalization
Expand Down
6 changes: 3 additions & 3 deletions src/correlation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ Demean, detrend, taper and filter time series.
- `freqmax::Real`: Pass band high corner frequency.
"""
function clean_up!(A::AbstractArray, fs::Real, freqmin::Real, freqmax::Real;
corners::Int=4, zerophase::Bool=false)
corners::Int=4, zerophase::Bool=true)
ArrayFuncs.demean!(A)
ArrayFuncs.detrend!(A)
taper!(A,fs)
bandpass!(A,freqmin,freqmax,fs,corners=corners,zerophase=zerophase)
ArrayFuncs.taper!(A,fs)
ArrayFuncs.bandpass!(A,freqmin,freqmax,fs,corners=corners,zerophase=zerophase)
return nothing
end
clean_up(A::AbstractArray, fs::Real, freqmin::Real, freqmax::Real;
Expand Down
Loading

0 comments on commit f511273

Please sign in to comment.