Skip to content

Commit

Permalink
🔧 Fixes ingestion of IERS EOP 1980 finals.data.csv files after Nov. 6…
Browse files Browse the repository at this point in the history
… 2023 (#3)

See https://datacenter.iers.org/data/2/message_490.txt - four new
columns are added the CSV. This commit bumps the index numbers of all
columns after column 9 by 4 to account for the new columns in the middle
of the CSV.
  • Loading branch information
ThatcherC authored Nov 6, 2023
1 parent 722a7e1 commit ef5f380
Show file tree
Hide file tree
Showing 6 changed files with 302 additions and 91 deletions.
90 changes: 62 additions & 28 deletions src/eop/private.jl
Original file line number Diff line number Diff line change
Expand Up @@ -99,20 +99,37 @@ function _parse_iers_eop_iau_1980(eop::Matrix)
# will be flat, considering the nearest point.
knots::Vector{Float64} = Vector{Float64}(eop[:, 1] .+ 2400000.5)

return EopIau1980(
_create_iers_eop_interpolation(knots, eop[:, 6]),
_create_iers_eop_interpolation(knots, eop[:, 8]),
_create_iers_eop_interpolation(knots, eop[:, 11]),
_create_iers_eop_interpolation(knots, eop[:, 13]),
_create_iers_eop_interpolation(knots, eop[:, 16]),
_create_iers_eop_interpolation(knots, eop[:, 18]),
_create_iers_eop_interpolation(knots, eop[:, 7]),
_create_iers_eop_interpolation(knots, eop[:, 9]),
_create_iers_eop_interpolation(knots, eop[:, 12]),
_create_iers_eop_interpolation(knots, eop[:, 14]),
_create_iers_eop_interpolation(knots, eop[:, 17]),
_create_iers_eop_interpolation(knots, eop[:, 19]),
)
if size(eop)[2] == 37
return EopIau1980(
_create_iers_eop_interpolation(knots, eop[:, 6]),
_create_iers_eop_interpolation(knots, eop[:, 8]),
_create_iers_eop_interpolation(knots, eop[:, 15]),
_create_iers_eop_interpolation(knots, eop[:, 17]),
_create_iers_eop_interpolation(knots, eop[:, 20]),
_create_iers_eop_interpolation(knots, eop[:, 22]),
_create_iers_eop_interpolation(knots, eop[:, 7]),
_create_iers_eop_interpolation(knots, eop[:, 9]),
_create_iers_eop_interpolation(knots, eop[:, 16]),
_create_iers_eop_interpolation(knots, eop[:, 18]),
_create_iers_eop_interpolation(knots, eop[:, 21]),
_create_iers_eop_interpolation(knots, eop[:, 23]),
)
else
return EopIau1980(
_create_iers_eop_interpolation(knots, eop[:, 6]),
_create_iers_eop_interpolation(knots, eop[:, 8]),
_create_iers_eop_interpolation(knots, eop[:, 11]),
_create_iers_eop_interpolation(knots, eop[:, 13]),
_create_iers_eop_interpolation(knots, eop[:, 16]),
_create_iers_eop_interpolation(knots, eop[:, 18]),
_create_iers_eop_interpolation(knots, eop[:, 7]),
_create_iers_eop_interpolation(knots, eop[:, 9]),
_create_iers_eop_interpolation(knots, eop[:, 12]),
_create_iers_eop_interpolation(knots, eop[:, 14]),
_create_iers_eop_interpolation(knots, eop[:, 17]),
_create_iers_eop_interpolation(knots, eop[:, 19]),
)
end
end

# Parse the IERS EOP IAU 2000A data in the matrix `eop`, which must have been obtained from
Expand All @@ -124,18 +141,35 @@ function _parse_iers_eop_iau_2000A(eop::Matrix)
# will be flat, considering the nearest point.
knots::Vector{Float64} = Vector{Float64}(eop[:, 1] .+ 2400000.5)

EopIau2000A(
_create_iers_eop_interpolation(knots, eop[:, 6]),
_create_iers_eop_interpolation(knots, eop[:, 8]),
_create_iers_eop_interpolation(knots, eop[:, 11]),
_create_iers_eop_interpolation(knots, eop[:, 13]),
_create_iers_eop_interpolation(knots, eop[:, 20]),
_create_iers_eop_interpolation(knots, eop[:, 22]),
_create_iers_eop_interpolation(knots, eop[:, 7]),
_create_iers_eop_interpolation(knots, eop[:, 9]),
_create_iers_eop_interpolation(knots, eop[:, 12]),
_create_iers_eop_interpolation(knots, eop[:, 14]),
_create_iers_eop_interpolation(knots, eop[:, 21]),
_create_iers_eop_interpolation(knots, eop[:, 23]),
)
if size(eop)[2] == 37
EopIau2000A(
_create_iers_eop_interpolation(knots, eop[:, 6]),
_create_iers_eop_interpolation(knots, eop[:, 8]),
_create_iers_eop_interpolation(knots, eop[:, 15]),
_create_iers_eop_interpolation(knots, eop[:, 17]),
_create_iers_eop_interpolation(knots, eop[:, 24]),
_create_iers_eop_interpolation(knots, eop[:, 26]),
_create_iers_eop_interpolation(knots, eop[:, 7]),
_create_iers_eop_interpolation(knots, eop[:, 9]),
_create_iers_eop_interpolation(knots, eop[:, 16]),
_create_iers_eop_interpolation(knots, eop[:, 18]),
_create_iers_eop_interpolation(knots, eop[:, 25]),
_create_iers_eop_interpolation(knots, eop[:, 27]),
)
else
EopIau2000A(
_create_iers_eop_interpolation(knots, eop[:, 6]),
_create_iers_eop_interpolation(knots, eop[:, 8]),
_create_iers_eop_interpolation(knots, eop[:, 11]),
_create_iers_eop_interpolation(knots, eop[:, 13]),
_create_iers_eop_interpolation(knots, eop[:, 20]),
_create_iers_eop_interpolation(knots, eop[:, 22]),
_create_iers_eop_interpolation(knots, eop[:, 7]),
_create_iers_eop_interpolation(knots, eop[:, 9]),
_create_iers_eop_interpolation(knots, eop[:, 12]),
_create_iers_eop_interpolation(knots, eop[:, 14]),
_create_iers_eop_interpolation(knots, eop[:, 21]),
_create_iers_eop_interpolation(knots, eop[:, 23]),
)
end
end
116 changes: 115 additions & 1 deletion test/eop/read.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,63 @@
# Function: read_iers_eop
# ------------------------------------------------------------------------------------------

@testset "Read and Parse EOP for IAU-76 / FK5 Theory (Old Format)" begin
eop_iau1980 = read_iers_eop("../eop_IAU1980_old.txt") # outdated version of file

eop_date_beg = date_to_jd(2004, 4, 1)
eop_date_end = date_to_jd(2004, 4, 30)

@test eop_iau1980.x.itp.knots[begin][begin] eop_date_beg
@test eop_iau1980.x.itp.knots[begin][end] eop_date_end
@test eop_iau1980.y.itp.knots[begin][begin] eop_date_beg
@test eop_iau1980.y.itp.knots[begin][end] eop_date_end
@test eop_iau1980.Δut1_utc.itp.knots[begin][begin] eop_date_beg
@test eop_iau1980.Δut1_utc.itp.knots[begin][end] eop_date_end
@test eop_iau1980.lod.itp.knots[begin][begin] eop_date_beg
@test eop_iau1980.lod.itp.knots[begin][end] eop_date_end
@test eop_iau1980.δΔψ.itp.knots[begin][begin] eop_date_beg
@test eop_iau1980.δΔψ.itp.knots[begin][end] eop_date_end
@test eop_iau1980.δΔϵ.itp.knots[begin][begin] eop_date_beg
@test eop_iau1980.δΔϵ.itp.knots[begin][end] eop_date_end
@test eop_iau1980.x_error.itp.knots[begin][begin] eop_date_beg
@test eop_iau1980.x_error.itp.knots[begin][end] eop_date_end
@test eop_iau1980.y_error.itp.knots[begin][begin] eop_date_beg
@test eop_iau1980.y_error.itp.knots[begin][end] eop_date_end
@test eop_iau1980.Δut1_utc_error.itp.knots[begin][begin] eop_date_beg
@test eop_iau1980.Δut1_utc_error.itp.knots[begin][end] eop_date_end
@test eop_iau1980.lod_error.itp.knots[begin][begin] eop_date_beg
@test eop_iau1980.lod_error.itp.knots[begin][end] eop_date_end
@test eop_iau1980.δΔψ_error.itp.knots[begin][begin] eop_date_beg
@test eop_iau1980.δΔψ_error.itp.knots[begin][end] eop_date_end
@test eop_iau1980.δΔϵ_error.itp.knots[begin][begin] eop_date_beg
@test eop_iau1980.δΔϵ_error.itp.knots[begin][end] eop_date_end

@test eop_iau1980.x.itp.coefs[begin] -0.140238
@test eop_iau1980.x.itp.coefs[end] -0.123711
@test eop_iau1980.y.itp.coefs[begin] +0.320846
@test eop_iau1980.y.itp.coefs[end] +0.401294
@test eop_iau1980.Δut1_utc.itp.coefs[begin] -0.4336147
@test eop_iau1980.Δut1_utc.itp.coefs[end] -0.4526761
@test eop_iau1980.lod.itp.coefs[begin] +0.7489
@test eop_iau1980.lod.itp.coefs[end] +0.6107
@test eop_iau1980.δΔψ.itp.coefs[begin] -51.461
@test eop_iau1980.δΔψ.itp.coefs[end] -50.344
@test eop_iau1980.δΔϵ.itp.coefs[begin] -4.481
@test eop_iau1980.δΔϵ.itp.coefs[end] -5.381
@test eop_iau1980.x_error.itp.coefs[begin] +0.000084
@test eop_iau1980.x_error.itp.coefs[end] +0.000069
@test eop_iau1980.y_error.itp.coefs[begin] +0.000063
@test eop_iau1980.y_error.itp.coefs[end] +0.000054
@test eop_iau1980.Δut1_utc_error.itp.coefs[begin] +0.0000030
@test eop_iau1980.Δut1_utc_error.itp.coefs[end] +0.0000021
@test eop_iau1980.lod_error.itp.coefs[begin] +0.0020
@test eop_iau1980.lod_error.itp.coefs[end] +0.0023
@test eop_iau1980.δΔψ_error.itp.coefs[begin] +0.254
@test eop_iau1980.δΔψ_error.itp.coefs[end] +0.330
@test eop_iau1980.δΔϵ_error.itp.coefs[begin] +0.108
@test eop_iau1980.δΔϵ_error.itp.coefs[end] +0.126
end

@testset "Read and Parse EOP for IAU-76 / FK5 Theory" begin
eop_iau1980 = read_iers_eop("../eop_IAU1980.txt")

Expand Down Expand Up @@ -70,6 +127,63 @@
@test eop_iau1980.δΔϵ_error.itp.coefs[end] +0.126
end

@testset "Read and Parse EOP for IAU-2006 / 2010A Theory (Old Format)" begin
eop_iau2000a = read_iers_eop("../eop_IAU2000A_old.txt", Val(:IAU2000A))

eop_date_beg = date_to_jd(2004, 4, 1)
eop_date_end = date_to_jd(2004, 4, 30)

@test eop_iau2000a.x.itp.knots[begin][begin] eop_date_beg
@test eop_iau2000a.x.itp.knots[begin][end] eop_date_end
@test eop_iau2000a.y.itp.knots[begin][begin] eop_date_beg
@test eop_iau2000a.y.itp.knots[begin][end] eop_date_end
@test eop_iau2000a.Δut1_utc.itp.knots[begin][begin] eop_date_beg
@test eop_iau2000a.Δut1_utc.itp.knots[begin][end] eop_date_end
@test eop_iau2000a.lod.itp.knots[begin][begin] eop_date_beg
@test eop_iau2000a.lod.itp.knots[begin][end] eop_date_end
@test eop_iau2000a.δx.itp.knots[begin][begin] eop_date_beg
@test eop_iau2000a.δx.itp.knots[begin][end] eop_date_end
@test eop_iau2000a.δy.itp.knots[begin][begin] eop_date_beg
@test eop_iau2000a.δy.itp.knots[begin][end] eop_date_end
@test eop_iau2000a.x_error.itp.knots[begin][begin] eop_date_beg
@test eop_iau2000a.x_error.itp.knots[begin][end] eop_date_end
@test eop_iau2000a.y_error.itp.knots[begin][begin] eop_date_beg
@test eop_iau2000a.y_error.itp.knots[begin][end] eop_date_end
@test eop_iau2000a.Δut1_utc_error.itp.knots[begin][begin] eop_date_beg
@test eop_iau2000a.Δut1_utc_error.itp.knots[begin][end] eop_date_end
@test eop_iau2000a.lod_error.itp.knots[begin][begin] eop_date_beg
@test eop_iau2000a.lod_error.itp.knots[begin][end] eop_date_end
@test eop_iau2000a.δx_error.itp.knots[begin][begin] eop_date_beg
@test eop_iau2000a.δx_error.itp.knots[begin][end] eop_date_end
@test eop_iau2000a.δy_error.itp.knots[begin][begin] eop_date_beg
@test eop_iau2000a.δy_error.itp.knots[begin][end] eop_date_end

@test eop_iau2000a.x.itp.coefs[begin] -0.140238
@test eop_iau2000a.x.itp.coefs[end] -0.123711
@test eop_iau2000a.y.itp.coefs[begin] +0.320846
@test eop_iau2000a.y.itp.coefs[end] +0.401294
@test eop_iau2000a.Δut1_utc.itp.coefs[begin] -0.4336147
@test eop_iau2000a.Δut1_utc.itp.coefs[end] -0.4526761
@test eop_iau2000a.lod.itp.coefs[begin] +0.7489
@test eop_iau2000a.lod.itp.coefs[end] +0.6107
@test eop_iau2000a.δx.itp.coefs[begin] -0.028
@test eop_iau2000a.δx.itp.coefs[end] 0.112
@test eop_iau2000a.δy.itp.coefs[begin] -0.017
@test eop_iau2000a.δy.itp.coefs[end] +0.016
@test eop_iau2000a.x_error.itp.coefs[begin] +0.000084
@test eop_iau2000a.x_error.itp.coefs[end] +0.000069
@test eop_iau2000a.y_error.itp.coefs[begin] +0.000063
@test eop_iau2000a.y_error.itp.coefs[end] +0.000054
@test eop_iau2000a.Δut1_utc_error.itp.coefs[begin] +0.0000030
@test eop_iau2000a.Δut1_utc_error.itp.coefs[end] +0.0000021
@test eop_iau2000a.lod_error.itp.coefs[begin] +0.0020
@test eop_iau2000a.lod_error.itp.coefs[end] +0.0023
@test eop_iau2000a.δx_error.itp.coefs[begin] +0.101
@test eop_iau2000a.δx_error.itp.coefs[end] +0.131
@test eop_iau2000a.δy_error.itp.coefs[begin] +0.108
@test eop_iau2000a.δy_error.itp.coefs[end] +0.126
end

@testset "Read and Parse EOP for IAU-2006 / 2010A Theory" begin
eop_iau2000a = read_iers_eop("../eop_IAU2000A.txt", Val(:IAU2000A))

Expand Down Expand Up @@ -125,4 +239,4 @@ end
@test eop_iau2000a.δx_error.itp.coefs[end] +0.131
@test eop_iau2000a.δy_error.itp.coefs[begin] +0.108
@test eop_iau2000a.δy_error.itp.coefs[end] +0.126
end
end
Loading

0 comments on commit ef5f380

Please sign in to comment.