├── data ├── Flt1002-train.txt └── Flt1003-train.txt ├── Introduction.pdf ├── src ├── save_nn.mat ├── helpers.jl ├── gen_interp_map.jl ├── get_map_data.jl ├── create_TL_coef.jl ├── fft_maps.jl ├── create_TL_Amat.jl ├── delta_lat_lon.jl ├── func_predict.m ├── MagNav.jl └── get_flight_data.jl ├── runs ├── data100302.h5 ├── data100304.h5 ├── data100308.h5 ├── main.m └── pre_TL.jl ├── Project.toml ├── Readme.md └── Manifest.toml /data/Flt1002-train.txt: -------------------------------------------------------------------------------- 1 | Replace this file with "Flt1002-train.h5". -------------------------------------------------------------------------------- /data/Flt1003-train.txt: -------------------------------------------------------------------------------- 1 | Replace this file with "Flt1003-train.h5". -------------------------------------------------------------------------------- /Introduction.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lw-kong/MagNav/HEAD/Introduction.pdf -------------------------------------------------------------------------------- /src/save_nn.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lw-kong/MagNav/HEAD/src/save_nn.mat -------------------------------------------------------------------------------- /runs/data100302.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lw-kong/MagNav/HEAD/runs/data100302.h5 -------------------------------------------------------------------------------- /runs/data100304.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lw-kong/MagNav/HEAD/runs/data100304.h5 -------------------------------------------------------------------------------- /runs/data100308.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lw-kong/MagNav/HEAD/runs/data100308.h5 -------------------------------------------------------------------------------- /src/helpers.jl: -------------------------------------------------------------------------------- 1 | # remove mean, slope from vector 2 | function detrend(y) 3 | N = length(y) 4 | X = [ones(N) 1:N] 5 | β_hat = (X'*X) \ (X'*y) 6 | y_new = y - X*β_hat 7 | return (y_new) 8 | end # function detrend 9 | 10 | # lon_deriv,lat_deriv [nT/rad] 11 | map_grad(interp_mapS,x,y) = ForwardDiff.gradient(z -> rad2deg(interp_mapS( 12 | z[1],z[2])),SVector(x,y)) 13 | -------------------------------------------------------------------------------- /src/gen_interp_map.jl: -------------------------------------------------------------------------------- 1 | function gen_interp_map(map_map::Array{Float64}, 2 | map_xx::Array{Float64}, 3 | map_yy::Array{Float64}) 4 | # map grid interpolation function, equivalent of griddedInterpolant in MATLAB 5 | # BSpline(Linear()) 6 | # BSpline(Quadratic(Line(OnCell()))) 7 | # BSpline(Cubic(Line(OnCell()))) 8 | 9 | Interpolations.scale( 10 | interpolate(map_map', BSpline(Cubic(Line(OnCell()))) ), 11 | LinRange(minimum(map_xx),maximum(map_xx),length(map_xx)), 12 | LinRange(minimum(map_yy),maximum(map_yy),length(map_yy))) 13 | 14 | end # function gen_interp_map 15 | -------------------------------------------------------------------------------- /src/get_map_data.jl: -------------------------------------------------------------------------------- 1 | function get_map_data(h5_file::String) 2 | # h5_file location/name of magnetic anomaly map HDF5 file 3 | 4 | map_xx = h5open(h5_file,"r") do file 5 | vec(read(file,"xx")) 6 | end 7 | 8 | map_yy = h5open(h5_file,"r") do file 9 | vec(read(file,"yy")) 10 | end 11 | 12 | map_alt = h5open(h5_file,"r") do file 13 | read(file,"alt") 14 | end 15 | 16 | map_map = h5open(h5_file,"r") do file 17 | read(file,"map") 18 | end 19 | 20 | dn = abs(map_yy[end]-map_yy[1])/(length(map_yy)-1) 21 | de = abs(map_xx[end]-map_xx[1])/(length(map_xx)-1) 22 | 23 | return MapS(map_map,map_xx,map_yy,map_alt,dn,de) 24 | 25 | end # function get_map_data 26 | -------------------------------------------------------------------------------- /Project.toml: -------------------------------------------------------------------------------- 1 | name = "MagNav" 2 | uuid = "f91b31a4-be4d-40e3-b767-4b8c09c10076" 3 | version = "0.1.0" 4 | 5 | [deps] 6 | BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" 7 | DSP = "717857b8-e6f2-59f4-9121-6e50c889abd2" 8 | FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" 9 | ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" 10 | HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" 11 | Interpolations = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" 12 | LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" 13 | Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" 14 | Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" 15 | StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" 16 | Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" 17 | 18 | [compat] 19 | julia = "1.4" 20 | 21 | [extras] 22 | SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" 23 | Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" 24 | 25 | [targets] 26 | test = ["Test", "SafeTestsets"] 27 | -------------------------------------------------------------------------------- /runs/main.m: -------------------------------------------------------------------------------- 1 | % Please run the script "pre_TL.jl" first. 2 | 3 | addpath('..\data') 4 | addpath('..\src') 5 | 6 | %% input 7 | data_filename = 'Flt1003-train.h5'; 8 | output_line_number = 1003.10; % The line number of data to be filtered 9 | 10 | 11 | %% run 12 | tic 13 | [tt, y_filtered, y_real] = func_predict(data_filename,output_line_number); 14 | % y_filtered is the filtered output 15 | % y_real is SGL Mag 1 16 | toc 17 | fprintf('ensemble rmse on %f = %f\n',output_line_number,sqrt(mean((y_filtered - y_real).^2))) 18 | 19 | %% plot 20 | figure() 21 | plot(tt, y_real,'b') 22 | hold on 23 | plot(tt, y_filtered,'r') 24 | legend('SGL Mag 1','predicted') 25 | xlabel('Time [s]') 26 | ylabel('Magnetic Field [nT]') 27 | set(gcf,'color','white') 28 | hold off 29 | 30 | figure() 31 | plot(tt, y_filtered - y_real,'r') 32 | hold on 33 | plot(tt, zeros(length(y_real),1),'b--') 34 | xlabel('Time [s]') 35 | ylabel('Absolute Error [nT]') 36 | set(gcf,'color','white') 37 | hold off 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/create_TL_coef.jl: -------------------------------------------------------------------------------- 1 | function create_TL_coef(Bx,By,Bz,meas;kwargs...) 2 | # create Tolles-Lawson coefficients 3 | defaults = (; pass1 = 0.1, 4 | pass2 = 0.9, 5 | fs = 10.0) 6 | settings = merge(defaults,kwargs) 7 | pass1 = settings.pass1 8 | pass2 = settings.pass2 9 | fs = settings.fs 10 | 11 | # create filter 12 | d = digitalfilter(Bandpass(pass1,pass2;fs=fs),Butterworth(4)) 13 | 14 | # filter measurements 15 | meas_f = filtfilt(d,meas) 16 | 17 | # create Tolles-Lawson A matrix 18 | A = create_TL_Amat(Bx,By,Bz) 19 | 20 | # filter each column of A (e.g. cosX) 21 | A_f = A 22 | for i = 1:size(A,2) 23 | A_f[:,i] = filtfilt(d,A[:,i]) 24 | end 25 | 26 | # all filters create artifacts so trim off first/last 20 elements 27 | trim = 20 28 | A_f_t = A_f[trim+1:end-trim,:] 29 | meas_f_t = meas_f[trim+1:end-trim] 30 | 31 | # get Tolles-Lawson coefficients 32 | TL_coef = (A_f_t'*A_f_t) \ (A_f_t'*meas_f_t) 33 | 34 | return (TL_coef) 35 | end # function create_TL_coef 36 | -------------------------------------------------------------------------------- /src/fft_maps.jl: -------------------------------------------------------------------------------- 1 | # upward continuation functions for shifting magnetic anomaly maps 2 | 3 | function upward_fft(map_in,dx,dy,dz) 4 | # upward continuation function for shifting a magnetic anomaly map 5 | # map_in gridded magnetic anomaly map [nT] 6 | # dx x direction (longitude) map spacing [m] 7 | # dy y direction (latitude) map spacing [m] 8 | 9 | (Ny,Nx) = size(map_in) 10 | (k,~,~) = create_K(dx,dy,Nx,Ny) 11 | H = exp.(-k.*dz) 12 | map_out = real(ifft(fft(map_in).*H)) 13 | 14 | return (map_out) 15 | end # function upward_fft 16 | 17 | function create_K(dx,dy,Nx,Ny) 18 | 19 | kx = (-Nx+mod(Nx,2))/2:1:(Nx+mod(Nx,2))/2-1 20 | ky = (-Ny+mod(Ny,2))/2:1:(Ny+mod(Ny,2))/2-1 21 | kx_m = repeat(kx',length(ky),1) 22 | ky_m = repeat(ky,1,length(kx)) 23 | dkx = 2*pi / (Nx*dx) 24 | 25 | if dy != 0 26 | dky = 2*pi / (Ny*dy) 27 | else 28 | dky = 0 29 | end 30 | 31 | kx_m = kx_m*dkx 32 | ky_m = ky_m*dky 33 | k = sqrt.(kx_m.^2+ky_m.^2) 34 | k = ifftshift(k) 35 | kx = ifftshift(kx_m) 36 | ky = ifftshift(ky_m) 37 | 38 | return (k,kx,ky) 39 | end # function create_K 40 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # Signal Enhancement for Magnetic Navigation Challenge Problem 2 | 3 | This is a repository for the signal enhancement for magnetic navigation challenge problem ([MagNav](https://github.com/MIT-AI-Accelerator/MagNav.jl), and [an older version](https://github.com/lw-kong/MagNav_2020.jl)), which was introduced at JuliaCon 2020. 4 | 5 | Please refer to "Introduction.pdf" for a brief introduction of our methods and some examples of our results. 6 | 7 | ## How to run our codes 8 | Step 1: Copy data files "Flt1002-train.h5" and "Flt1003-train.h5" into the "data" folder. 9 | 10 | Step 2: Run "runs/pre_TL.jl". 11 | 12 | This pre-filters the data of flight 1003 by the Tolles-Lawson method. A file "runs/data_TL.h5" should be generated by this script. 13 | 14 | Step 3: Run "runs/main.m". 15 | 16 | The variable "output_line_number" has already been set to "1003.10", which is the line number to be filtered. Two figures demonstraing the performance of the filtering should be generated, and the variable "y_filtered" is the output filtered data. 17 | 18 | The Deep Learning Toolbox of Matlab is required. 19 | 20 | ## Team members 21 | Ling-Wei Kong, Cheng-Zhen Wang, and Ying-Cheng Lai 22 | 23 | School of Electrical, Computer and Energy Engineering 24 | 25 | Arizona State University, Tempe, AZ 85287-5706 26 | -------------------------------------------------------------------------------- /src/create_TL_Amat.jl: -------------------------------------------------------------------------------- 1 | function create_TL_Amat(Bx,By,Bz) 2 | # create Tolles-Lawson A matrix 3 | 4 | Bt = sqrt.(Bx.^2+By.^2+Bz.^2) 5 | BtMean = max(mean(Bt),1e-6) 6 | 7 | cosX = Bx ./ Bt 8 | cosY = By ./ Bt 9 | cosZ = Bz ./ Bt 10 | 11 | cosX_dot = central_fdm(cosX) 12 | cosY_dot = central_fdm(cosY) 13 | cosZ_dot = central_fdm(cosZ) 14 | 15 | cosXX = Bt .* cosX.*cosX ./ BtMean 16 | cosXY = Bt .* cosX.*cosY ./ BtMean 17 | cosXZ = Bt .* cosX.*cosZ ./ BtMean 18 | cosYY = Bt .* cosY.*cosY ./ BtMean 19 | cosYZ = Bt .* cosY.*cosZ ./ BtMean 20 | cosZZ = Bt .* cosZ.*cosZ ./ BtMean 21 | 22 | cosXcosX_dot = Bt .* cosX.*cosX_dot ./ BtMean 23 | cosXcosY_dot = Bt .* cosX.*cosY_dot ./ BtMean 24 | cosXcosZ_dot = Bt .* cosX.*cosZ_dot ./ BtMean 25 | cosYcosX_dot = Bt .* cosY.*cosX_dot ./ BtMean 26 | cosYcosY_dot = Bt .* cosY.*cosY_dot ./ BtMean 27 | cosYcosZ_dot = Bt .* cosY.*cosZ_dot ./ BtMean 28 | cosZcosX_dot = Bt .* cosZ.*cosX_dot ./ BtMean 29 | cosZcosY_dot = Bt .* cosZ.*cosY_dot ./ BtMean 30 | cosZcosZ_dot = Bt .* cosZ.*cosZ_dot ./ BtMean 31 | 32 | # add permanent field terms 33 | A = [cosX cosY cosZ] 34 | 35 | # add induced field terms 36 | A = [A cosXX cosXY cosXZ cosYY cosYZ cosZZ] 37 | 38 | # add eddy current terms 39 | A = [A cosXcosX_dot cosXcosY_dot cosXcosZ_dot] 40 | A = [A cosYcosX_dot cosYcosY_dot cosYcosZ_dot] 41 | A = [A cosZcosX_dot cosZcosY_dot cosZcosZ_dot] 42 | 43 | return (A) 44 | end # function create_TL_Amat 45 | 46 | function central_fdm(x) 47 | val = zeros(length(x)) 48 | val[1] = x[2] - x[1] 49 | val[end] = x[end] - x[end-1] 50 | val[2:end-1] = (x[3:end] - x[1:end-2]) ./ 2 51 | return (val) 52 | end # function central_fdm 53 | -------------------------------------------------------------------------------- /src/delta_lat_lon.jl: -------------------------------------------------------------------------------- 1 | function delta_lat(delta_pos,lat) 2 | # convert north-south position error to latitude error 3 | # delta_pos [m] 4 | # lat [rad] 5 | # delta_lat [rad] 6 | 7 | r_earth = 6378137 # WGS 84 radius of earth [m] 8 | e_earth = 0.0818191908426 # first eccentricity of earth [-] 9 | 10 | delta_lat = delta_pos * sqrt(1-(e_earth*sin(lat))^2) / r_earth 11 | 12 | return (delta_lat) 13 | end # function delta_lat 14 | 15 | function delta_lon(delta_pos,lat) 16 | # convert east-west position error to longitude error 17 | # delta_pos [m] 18 | # lat [rad] 19 | # delta_lon [rad] 20 | 21 | r_earth = 6378137 # WGS 84 radius of earth [m] 22 | e_earth = 0.0818191908426 # first eccentricity of earth [-] 23 | 24 | delta_lon = delta_pos * sqrt(1-(e_earth*sin(lat))^2) / r_earth / cos(lat) 25 | 26 | return (delta_lon) 27 | end # function delta_lon 28 | 29 | function delta_north(delta_lat,lat) 30 | # convert latitude error to north-south position error 31 | # delta_lat [rad] 32 | # lat [rad] 33 | # delta_pos [m] 34 | 35 | r_earth = 6378137 # WGS 84 radius of earth [m] 36 | e_earth = 0.0818191908426 # first eccentricity of earth [-] 37 | 38 | delta_pos = delta_lat / sqrt(1-(e_earth*sin(lat))^2) * r_earth 39 | 40 | return (delta_pos) 41 | end # function delta_north 42 | 43 | function delta_east(delta_lon,lat) 44 | # convert longitude error to east-west position error 45 | # delta_lon [rad] 46 | # lat [rad] 47 | # delta_pos [m] 48 | 49 | r_earth = 6378137 # WGS 84 radius of earth [m] 50 | e_earth = 0.0818191908426 # first eccentricity of earth [-] 51 | 52 | delta_pos = delta_lon / sqrt(1-(e_earth*sin(lat))^2) * r_earth * cos(lat) 53 | 54 | return (delta_pos) 55 | end # function delta_east 56 | -------------------------------------------------------------------------------- /src/func_predict.m: -------------------------------------------------------------------------------- 1 | function [tt, y_val_nn_predict, y_real] = func_predict(data_original_filename,line_number) 2 | 3 | load('save_nn.mat') 4 | 5 | %% organize to data_x, data_y 6 | % no embedding yet 7 | TL_filename_name = 'data_TL.h5'; 8 | tt = h5read(TL_filename_name,'/tt'); 9 | slg = h5read(TL_filename_name,'/slg'); 10 | mag_3_c = h5read(TL_filename_name,'/mag_3_c'); 11 | mag_4_c = h5read(TL_filename_name,'/mag_4_c'); 12 | mag_5_c = h5read(TL_filename_name,'/mag_5_c'); 13 | 14 | data_info = h5info(data_original_filename); 15 | data_line = h5read(data_original_filename,'/tie_line'); 16 | i1 = find(data_line==line_number, 1 ); 17 | i2 = find(data_line==line_number, 1, 'last' ); 18 | 19 | tt = tt(i1:i2); 20 | slg = slg(i1:i2,:); 21 | mag_3_c = mag_3_c(i1:i2,:); 22 | mag_4_c = mag_4_c(i1:i2,:); 23 | mag_5_c = mag_5_c(i1:i2,:); 24 | data_x = [mag_3_c,mag_4_c,mag_5_c]; 25 | 26 | 27 | for ch_i = 1:length(add_channel_num) 28 | channel_1_name = data_info.Datasets( add_channel_num(ch_i) ).Name; 29 | channel_1 = h5read(data_original_filename,['/' channel_1_name]); 30 | channel_1 = channel_1(i1:i2); 31 | % filter 32 | channel_1_f = channel_1; 33 | for lowpass_i = 1:10 34 | channel_1_f = lowpass(channel_1_f,1e-10); 35 | end 36 | 37 | channel_1_f_cut = 55; 38 | channel_1 = movmean(channel_1,10); 39 | channel_1_f(1:channel_1_f_cut) = channel_1(1:channel_1_f_cut); 40 | channel_1_f(end-channel_1_f_cut+1:end) = channel_1(end-channel_1_f_cut+1:end); 41 | 42 | data_x = [data_x, channel_1_f]; 43 | end 44 | 45 | dim_x = size(data_x,2); 46 | 47 | for d_i = 1:dim_x 48 | data_x(:,d_i) = data_x(:,d_i) - renorm_set(d_i,1); 49 | data_x(:,d_i) = data_x(:,d_i) / renorm_set(d_i,2); 50 | end 51 | 52 | val_r_step_length = length(slg) - 2 * half_input_wid; 53 | y_real = slg'; 54 | y_real = y_real(half_input_wid+1:end-half_input_wid); 55 | tt = tt(half_input_wid+1:end-half_input_wid); 56 | 57 | dim_in = dim_x * ( 2*half_input_wid + 1); 58 | %% organize to x_train, y_train, x_val, y_val 59 | % with embedding 60 | 61 | val_start_point = half_input_wid; 62 | 63 | x_val = zeros(dim_in,val_r_step_length); 64 | for d_i = -half_input_wid:half_input_wid 65 | x_val( (half_input_wid-d_i)*dim_x+1 : (half_input_wid-d_i)*dim_x+dim_x,:) = ... 66 | data_x(val_start_point-d_i+1 : val_start_point-d_i+val_r_step_length,:)'; 67 | x_val( (half_input_wid+d_i)*dim_x+1 : (half_input_wid+d_i)*dim_x+dim_x,:) = ... 68 | data_x(val_start_point+d_i+1 : val_start_point+d_i+val_r_step_length,:)'; 69 | end 70 | 71 | 72 | %% main NN 73 | 74 | y_val_nn_predict_set = []; 75 | for hyper_repeat_i = 1:hyper_repeat_num 76 | net = net_set{hyper_repeat_i}; 77 | y_val_nn_predict_set = [y_val_nn_predict_set; net(x_val)]; 78 | end 79 | y_val_nn_predict = mean(y_val_nn_predict_set,1); 80 | 81 | end 82 | 83 | -------------------------------------------------------------------------------- /runs/pre_TL.jl: -------------------------------------------------------------------------------- 1 | # analysis of SGL Flt1002 2 | cd(@__DIR__) 3 | #cd("D:\\klw\\Research\\Magnetic Navigation\\finalize\\MagNav\\runs") 4 | using Pkg; Pkg.activate("../"); Pkg.instantiate() 5 | using MagNav 6 | using Plots 7 | using HDF5 8 | gr() 9 | 10 | 11 | 12 | # get flight data 13 | data_dir = joinpath(@__DIR__, "..", "data") 14 | #data_dir = MagNav.data_dir() 15 | #cali_file = string(data_dir,"\\Flt1002-train.h5") 16 | cali_file = joinpath(data_dir,"Flt1002-train.h5") 17 | cali_data = get_flight_data(cali_file) 18 | #data_file = string(data_dir,"\\Flt1003-train.h5") 19 | data_file = joinpath(data_dir,"Flt1003-train.h5") 20 | xyz_data = get_flight_data(data_file) 21 | 22 | # sensor locations (from front seat rail) 23 | # Mag 1 tail stinger X=-12.01 Y= 0 Z=1.37 24 | # Mag 2 front cabin just aft of cockpit X= -0.60 Y=-0.36 Z=0 25 | # Mag 3 mid cabin next to INS X= -1.28 Y=-0.36 Z=0 26 | # Mag 4 rear of cabin on floor X= -3.53 Y= 0 Z=0 27 | # Mag 5 rear of cabin on ceiling X= -3.79 Y= 0 Z=1.20 28 | # Flux B tail at base of stinger X= -8.92 Y= 0 Z=0.96 29 | # Flux C rear of cabin port side X= -4.06 Y= 0.42 Z=0 30 | # Flux D rear of cabin starboard side X= -4.06 Y=-0.42 Z=0 31 | 32 | # create Tolles-Lawson coefficients 33 | cp = Dict() 34 | cp[:pass1] = 0.1 # first passband frequency [Hz] 35 | cp[:pass2] = 0.9 # second passband frequency [Hz] 36 | cp[:fs] = 10.0 # sampling frequency [Hz] 37 | i1 = findfirst(cali_data.LINE .== 1002.02) 38 | i2 = findlast( cali_data.LINE .== 1002.02) 39 | #TL_coef_2 = create_TL_coef(cali_data.FLUXB_X[i1:i2], 40 | # cali_data.FLUXB_Y[i1:i2], 41 | # cali_data.FLUXB_Z[i1:i2], 42 | # cali_data.UNCOMPMAG2[i1:i2];cp...) 43 | # data quality of Mag 2 is low. Mag 2 is thus not used during the entire processing. 44 | TL_coef_3 = create_TL_coef(cali_data.FLUXB_X[i1:i2], 45 | cali_data.FLUXB_Y[i1:i2], 46 | cali_data.FLUXB_Z[i1:i2], 47 | cali_data.UNCOMPMAG3[i1:i2];cp...) 48 | TL_coef_4 = create_TL_coef(cali_data.FLUXB_X[i1:i2], 49 | cali_data.FLUXB_Y[i1:i2], 50 | cali_data.FLUXB_Z[i1:i2], 51 | cali_data.UNCOMPMAG4[i1:i2];cp...) 52 | TL_coef_5 = create_TL_coef(cali_data.FLUXB_X[i1:i2], 53 | cali_data.FLUXB_Y[i1:i2], 54 | cali_data.FLUXB_Z[i1:i2], 55 | cali_data.UNCOMPMAG5[i1:i2];cp...) 56 | 57 | # create Tolles-Lawson A matrix 58 | A = create_TL_Amat(xyz_data.FLUXB_X, 59 | xyz_data.FLUXB_Y, 60 | xyz_data.FLUXB_Z) 61 | 62 | # correct magnetometer measurements 63 | #mag_2_c = xyz_data.UNCOMPMAG2 - (A*TL_coef_2 .- mean(A*TL_coef_2)) 64 | mag_3_c = xyz_data.UNCOMPMAG3 - (A*TL_coef_3 .- mean(A*TL_coef_3)) 65 | mag_4_c = xyz_data.UNCOMPMAG4 - (A*TL_coef_4 .- mean(A*TL_coef_4)) 66 | mag_5_c = xyz_data.UNCOMPMAG5 - (A*TL_coef_5 .- mean(A*TL_coef_5)) 67 | 68 | # IGRF (core field) correction & the diurnal (temporal variation) correction 69 | calcIGRF = xyz_data.DCMAG1 - xyz_data.IGRFMAG1 70 | mag_3_c = mag_3_c-xyz_data.DIURNAL-calcIGRF 71 | mag_4_c = mag_4_c-xyz_data.DIURNAL-calcIGRF 72 | mag_5_c = mag_5_c-xyz_data.DIURNAL-calcIGRF 73 | 74 | # 75 | save_filename = string("data_TL.h5") 76 | 77 | h5write(save_filename, "tt",xyz_data.TIME) 78 | h5write(save_filename, "slg",xyz_data.IGRFMAG1) 79 | h5write(save_filename, "mag_3_c",mag_3_c) 80 | h5write(save_filename, "mag_4_c",mag_4_c) 81 | h5write(save_filename, "mag_5_c",mag_5_c) 82 | -------------------------------------------------------------------------------- /src/MagNav.jl: -------------------------------------------------------------------------------- 1 | module MagNav 2 | 3 | #using Pkg.Artifacts: @artifact_str 4 | 5 | using BenchmarkTools, DSP, FFTW, ForwardDiff, HDF5 6 | using Interpolations, LinearAlgebra, Plots, StaticArrays, Statistics 7 | 8 | #data_dir() = joinpath(@__Dir__, "..", "data") 9 | 10 | struct MapS 11 | map::Matrix{Float64} 12 | xx::Vector{Float64} 13 | yy::Vector{Float64} 14 | alt::Float64 15 | dn::Float64 16 | de::Float64 17 | end 18 | 19 | struct MapV 20 | mapX::Matrix{Float64} 21 | mapY::Matrix{Float64} 22 | mapZ::Matrix{Float64} 23 | xx::Vector{Float64} 24 | yy::Vector{Float64} 25 | alt::Float64 26 | dn::Float64 27 | de::Float64 28 | end 29 | 30 | struct XYZ 31 | N::Int64 32 | DT::Float64 33 | 34 | LINE::Vector{Float64} 35 | FLT::Vector{Float64} 36 | TIME::Vector{Float64} 37 | UTM_X::Vector{Float64} 38 | UTM_Y::Vector{Float64} 39 | UTM_Z::Vector{Float64} 40 | MSL_Z::Vector{Float64} 41 | LAT::Vector{Float64} 42 | LONG::Vector{Float64} 43 | 44 | BARO::Vector{Float64} 45 | RADAR::Vector{Float64} 46 | TOPO::Vector{Float64} 47 | DEM::Vector{Float64} 48 | DRAPE::Vector{Float64} 49 | 50 | PITCH::Vector{Float64} 51 | ROLL::Vector{Float64} 52 | AZIMUTH::Vector{Float64} 53 | 54 | DIURNAL::Vector{Float64} 55 | 56 | COMPMAG1::Vector{Float64} 57 | LAGMAG1::Vector{Float64} 58 | DCMAG1::Vector{Float64} 59 | IGRFMAG1::Vector{Float64} 60 | UNCOMPMAG1::Vector{Float64} 61 | 62 | UNCOMPMAG2::Vector{Float64} 63 | UNCOMPMAG3::Vector{Float64} 64 | UNCOMPMAG4::Vector{Float64} 65 | UNCOMPMAG5::Vector{Float64} 66 | 67 | FLUXB_X::Vector{Float64} 68 | FLUXB_Y::Vector{Float64} 69 | FLUXB_Z::Vector{Float64} 70 | FLUXB_TOT::Vector{Float64} 71 | 72 | FLUXC_X::Vector{Float64} 73 | FLUXC_Y::Vector{Float64} 74 | FLUXC_Z::Vector{Float64} 75 | FLUXC_TOT::Vector{Float64} 76 | 77 | FLUXD_X::Vector{Float64} 78 | FLUXD_Y::Vector{Float64} 79 | FLUXD_Z::Vector{Float64} 80 | FLUXD_TOT::Vector{Float64} 81 | 82 | OGS_MAG::Vector{Float64} 83 | OGS_HGT::Vector{Float64} 84 | 85 | INS_ACC_X::Vector{Float64} 86 | INS_ACC_Y::Vector{Float64} 87 | INS_ACC_Z::Vector{Float64} 88 | INS_WANDER::Vector{Float64} 89 | 90 | INS_LAT::Vector{Float64} 91 | INS_LON::Vector{Float64} 92 | INS_HGT::Vector{Float64} 93 | INS_VEL_N::Vector{Float64} 94 | INS_VEL_W::Vector{Float64} 95 | INS_VEL_V::Vector{Float64} 96 | 97 | PITCHRT::Vector{Float64} 98 | ROLLRT::Vector{Float64} 99 | YAWRT::Vector{Float64} 100 | 101 | LONG_ACC::Vector{Float64} 102 | LAT_ACC::Vector{Float64} 103 | NORM_ACC::Vector{Float64} 104 | 105 | TRUE_AS::Vector{Float64} 106 | PITOT_P::Vector{Float64} 107 | STATIC_P::Vector{Float64} 108 | TOT_P::Vector{Float64} 109 | 110 | CUR_COM1::Vector{Float64} 111 | CUR_ACHi::Vector{Float64} 112 | CUR_ACLo::Vector{Float64} 113 | CUR_TANK::Vector{Float64} 114 | CUR_FLAP::Vector{Float64} 115 | CUR_STRB::Vector{Float64} 116 | CUR_SRVO_O::Vector{Float64} 117 | CUR_SRVO_M::Vector{Float64} 118 | CUR_SRVO_I::Vector{Float64} 119 | CUR_IHTR::Vector{Float64} 120 | CUR_ACPWR::Vector{Float64} 121 | CUR_OUTPWR::Vector{Float64} 122 | CUR_BAT1::Vector{Float64} 123 | CUR_BAT2::Vector{Float64} 124 | 125 | V_ACPWR::Vector{Float64} 126 | V_OUTPWR::Vector{Float64} 127 | V_BAT1::Vector{Float64} 128 | V_BAT2::Vector{Float64} 129 | V_RESp::Vector{Float64} 130 | V_RESn::Vector{Float64} 131 | V_BACKp::Vector{Float64} 132 | V_BACKn::Vector{Float64} 133 | V_GYRO1::Vector{Float64} 134 | V_GYRO2::Vector{Float64} 135 | V_ACCp::Vector{Float64} 136 | V_ACCn::Vector{Float64} 137 | V_BLOCK::Vector{Float64} 138 | V_BACK::Vector{Float64} 139 | V_SERVO::Vector{Float64} 140 | V_CABT::Vector{Float64} 141 | V_FAN::Vector{Float64} 142 | end 143 | 144 | include("create_TL_Amat.jl") 145 | include("create_TL_coef.jl") 146 | include("delta_lat_lon.jl") 147 | include("fft_maps.jl") 148 | include("gen_interp_map.jl") 149 | include("get_flight_data.jl") 150 | include("get_map_data.jl") 151 | include("helpers.jl") 152 | 153 | export 154 | create_TL_Amat,central_fdm, 155 | create_TL_coef, 156 | delta_lat,delta_lon,delta_north,delta_east, 157 | upward_fft,create_K, 158 | gen_interp_map, 159 | get_flight_data, 160 | get_map_data, 161 | detrend,map_grad, 162 | mean 163 | 164 | end # module 165 | -------------------------------------------------------------------------------- /src/get_flight_data.jl: -------------------------------------------------------------------------------- 1 | function get_flight_data(h5_file::String) 2 | # h5_file location/name of flight HDF5 file 3 | 4 | println("") 5 | println("> Reading in file: ", h5_file) 6 | 7 | h5_data = h5open(h5_file,"r") 8 | 9 | N = h5read(h5_file, "N") 10 | DT = h5read(h5_file, "dt") 11 | 12 | LINE = readcheck(N,h5_data,h5_file, "tie_line") 13 | FLT = readcheck(N,h5_data,h5_file, "flight") 14 | TIME = readcheck(N,h5_data,h5_file, "tt") 15 | UTM_X = readcheck(N,h5_data,h5_file, "utmX") 16 | UTM_Y = readcheck(N,h5_data,h5_file, "utmY") 17 | UTM_Z = readcheck(N,h5_data,h5_file, "utmZ") 18 | MSL_Z = readcheck(N,h5_data,h5_file, "alt") 19 | LAT = readcheck(N,h5_data,h5_file, "lat") 20 | LONG = readcheck(N,h5_data,h5_file, "lon") 21 | 22 | BARO = readcheck(N,h5_data,h5_file, "baro") 23 | RADAR = readcheck(N,h5_data,h5_file, "radar") 24 | TOPO = readcheck(N,h5_data,h5_file, "topo") 25 | DEM = readcheck(N,h5_data,h5_file, "dem") 26 | DRAPE = readcheck(N,h5_data,h5_file, "drape") 27 | 28 | PITCH = readcheck(N,h5_data,h5_file, "ins_pitch") 29 | ROLL = readcheck(N,h5_data,h5_file, "ins_roll") 30 | AZIMUTH = readcheck(N,h5_data,h5_file, "ins_azim") 31 | DIURNAL = readcheck(N,h5_data,h5_file, "diurnal") 32 | 33 | COMPMAG1 = readcheck(N,h5_data,h5_file, "mag_1_c") 34 | LAGMAG1 = readcheck(N,h5_data,h5_file, "mag_1_lag") 35 | DCMAG1 = readcheck(N,h5_data,h5_file, "mag_1_dc") 36 | IGRFMAG1 = readcheck(N,h5_data,h5_file, "mag_1_igrf") 37 | UNCOMPMAG1 = readcheck(N,h5_data,h5_file, "mag_1_uc") 38 | 39 | UNCOMPMAG2 = readcheck(N,h5_data,h5_file, "mag_2_uc") 40 | UNCOMPMAG3 = readcheck(N,h5_data,h5_file, "mag_3_uc") 41 | UNCOMPMAG4 = readcheck(N,h5_data,h5_file, "mag_4_uc") 42 | UNCOMPMAG5 = readcheck(N,h5_data,h5_file, "mag_5_uc") 43 | 44 | FLUXB_X = readcheck(N,h5_data,h5_file, "flux_b_x") 45 | FLUXB_Y = readcheck(N,h5_data,h5_file, "flux_b_y") 46 | FLUXB_Z = readcheck(N,h5_data,h5_file, "flux_b_z") 47 | FLUXB_TOT = readcheck(N,h5_data,h5_file, "flux_b_t") 48 | 49 | FLUXC_X = readcheck(N,h5_data,h5_file, "flux_c_x") 50 | FLUXC_Y = readcheck(N,h5_data,h5_file, "flux_c_y") 51 | FLUXC_Z = readcheck(N,h5_data,h5_file, "flux_c_z") 52 | FLUXC_TOT = readcheck(N,h5_data,h5_file, "flux_c_t") 53 | 54 | FLUXD_X = readcheck(N,h5_data,h5_file, "flux_d_x") 55 | FLUXD_Y = readcheck(N,h5_data,h5_file, "flux_d_y") 56 | FLUXD_Z = readcheck(N,h5_data,h5_file, "flux_d_z") 57 | FLUXD_TOT = readcheck(N,h5_data,h5_file, "flux_d_t") 58 | 59 | OGS_MAG = readcheck(N,h5_data,h5_file, "ogs_mag") 60 | OGS_HGT = readcheck(N,h5_data,h5_file, "ogs_alt") 61 | 62 | INS_ACC_X = readcheck(N,h5_data,h5_file, "ins_acc_x") 63 | INS_ACC_Y = readcheck(N,h5_data,h5_file, "ins_acc_y") 64 | INS_ACC_Z = readcheck(N,h5_data,h5_file, "ins_acc_z") 65 | INS_WANDER = readcheck(N,h5_data,h5_file, "ins_wander") 66 | INS_LAT = readcheck(N,h5_data,h5_file, "ins_lat") 67 | INS_LON = readcheck(N,h5_data,h5_file, "ins_lon") 68 | INS_HGT = readcheck(N,h5_data,h5_file, "ins_alt") 69 | INS_VEL_N = readcheck(N,h5_data,h5_file, "ins_vn") 70 | INS_VEL_W = readcheck(N,h5_data,h5_file, "ins_vw") 71 | INS_VEL_V = readcheck(N,h5_data,h5_file, "ins_vu") 72 | 73 | PITCHRT = readcheck(N,h5_data,h5_file, "pitch_rt") 74 | ROLLRT = readcheck(N,h5_data,h5_file, "roll_rt") 75 | YAWRT = readcheck(N,h5_data,h5_file, "yaw_rt") 76 | LONG_ACC = readcheck(N,h5_data,h5_file, "lon_acc") 77 | LAT_ACC = readcheck(N,h5_data,h5_file, "lat_acc") 78 | NORM_ACC = readcheck(N,h5_data,h5_file, "alt_acc") 79 | TRUE_AS = readcheck(N,h5_data,h5_file, "true_as") 80 | PITOT_P = readcheck(N,h5_data,h5_file, "pitot_p") 81 | STATIC_P = readcheck(N,h5_data,h5_file, "static_p") 82 | TOT_P = readcheck(N,h5_data,h5_file, "total_p") 83 | 84 | CUR_COM1 = readcheck(N,h5_data,h5_file, "cur_com_1") 85 | CUR_ACHi = readcheck(N,h5_data,h5_file, "cur_ac_hi") 86 | CUR_ACLo = readcheck(N,h5_data,h5_file, "cur_ac_lo") 87 | CUR_TANK = readcheck(N,h5_data,h5_file, "cur_tank") 88 | CUR_FLAP = readcheck(N,h5_data,h5_file, "cur_flap") 89 | CUR_STRB = readcheck(N,h5_data,h5_file, "cur_strb") 90 | CUR_SRVO_O = readcheck(N,h5_data,h5_file, "cur_srvo_o") 91 | CUR_SRVO_M = readcheck(N,h5_data,h5_file, "cur_srvo_m") 92 | CUR_SRVO_I = readcheck(N,h5_data,h5_file, "cur_srvo_i") 93 | CUR_IHTR = readcheck(N,h5_data,h5_file, "cur_heat") 94 | CUR_ACPWR = readcheck(N,h5_data,h5_file, "cur_acpwr") 95 | CUR_OUTPWR = readcheck(N,h5_data,h5_file, "cur_outpwr") 96 | CUR_BAT1 = readcheck(N,h5_data,h5_file, "cur_bat_1") 97 | CUR_BAT2 = readcheck(N,h5_data,h5_file, "cur_bat_2") 98 | 99 | V_ACPWR = readcheck(N,h5_data,h5_file, "vol_acpwr") 100 | V_OUTPWR = readcheck(N,h5_data,h5_file, "vol_outpwr") 101 | V_BAT1 = readcheck(N,h5_data,h5_file, "vol_bat_1") 102 | V_BAT2 = readcheck(N,h5_data,h5_file, "vol_bat_2") 103 | V_RESp = readcheck(N,h5_data,h5_file, "vol_res_p") 104 | V_RESn = readcheck(N,h5_data,h5_file, "vol_res_n") 105 | V_BACKp = readcheck(N,h5_data,h5_file, "vol_back_p") 106 | V_BACKn = readcheck(N,h5_data,h5_file, "vol_back_n") 107 | V_GYRO1 = readcheck(N,h5_data,h5_file, "vol_gyro_1") 108 | V_GYRO2 = readcheck(N,h5_data,h5_file, "vol_gyro_2") 109 | V_ACCp = readcheck(N,h5_data,h5_file, "vol_acc_p") 110 | V_ACCn = readcheck(N,h5_data,h5_file, "vol_acc_n") 111 | V_BLOCK = readcheck(N,h5_data,h5_file, "vol_block") 112 | V_BACK = readcheck(N,h5_data,h5_file, "vol_back") 113 | V_SERVO = readcheck(N,h5_data,h5_file, "vol_servo") 114 | V_CABT = readcheck(N,h5_data,h5_file, "vol_cabt") 115 | V_FAN = readcheck(N,h5_data,h5_file, "vol_fan") 116 | 117 | return (XYZ(N , DT , LINE , FLT , 118 | TIME , UTM_X , UTM_Y , UTM_Z , 119 | MSL_Z , LAT , LONG , BARO , 120 | RADAR , TOPO , DEM , DRAPE , 121 | PITCH , ROLL , AZIMUTH , DIURNAL , 122 | COMPMAG1 , LAGMAG1 , DCMAG1 , IGRFMAG1 , 123 | UNCOMPMAG1, UNCOMPMAG2, UNCOMPMAG3, UNCOMPMAG4, 124 | UNCOMPMAG5, FLUXB_X , FLUXB_Y , FLUXB_Z , 125 | FLUXB_TOT , FLUXC_X , FLUXC_Y , FLUXC_Z , 126 | FLUXC_TOT , FLUXD_X , FLUXD_Y , FLUXD_Z , 127 | FLUXD_TOT , OGS_MAG , OGS_HGT , INS_ACC_X , 128 | INS_ACC_Y , INS_ACC_Z , INS_WANDER, INS_LAT , 129 | INS_LON , INS_HGT , INS_VEL_N , INS_VEL_W , 130 | INS_VEL_V , PITCHRT , ROLLRT , YAWRT , 131 | LONG_ACC , LAT_ACC , NORM_ACC , TRUE_AS , 132 | PITOT_P , STATIC_P , TOT_P , CUR_COM1 , 133 | CUR_ACHi , CUR_ACLo , CUR_TANK , CUR_FLAP , 134 | CUR_STRB , CUR_SRVO_O, CUR_SRVO_M, CUR_SRVO_I, 135 | CUR_IHTR , CUR_ACPWR , CUR_OUTPWR, CUR_BAT1 , 136 | CUR_BAT2 , V_ACPWR , V_OUTPWR , V_BAT1 , 137 | V_BAT2 , V_RESp , V_RESn , V_BACKp , 138 | V_BACKn , V_GYRO1 , V_GYRO2 , V_ACCp , 139 | V_ACCn , V_BLOCK , V_BACK , V_SERVO , 140 | V_CABT , V_FAN ) 141 | ) 142 | 143 | end # function get_flight_data 144 | 145 | function readcheck(N,data,file,field) 146 | if field in names(data) 147 | val = h5read(file,field) 148 | if isnan(sum(val)) 149 | print("") 150 | println("WARNING: ",field," contains NaNs") 151 | end 152 | else 153 | val = zeros(N)*NaN 154 | print("") 155 | println("WARNING: ",field," contains NaNs") 156 | end 157 | return (val) 158 | end # function readcheck 159 | -------------------------------------------------------------------------------- /Manifest.toml: -------------------------------------------------------------------------------- 1 | # This file is machine-generated - editing it directly is not advised 2 | 3 | [[AbstractFFTs]] 4 | deps = ["LinearAlgebra"] 5 | git-tree-sha1 = "051c95d6836228d120f5f4b984dd5aba1624f716" 6 | uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" 7 | version = "0.5.0" 8 | 9 | [[Adapt]] 10 | deps = ["LinearAlgebra"] 11 | git-tree-sha1 = "0fac443759fa829ed8066db6cf1077d888bb6573" 12 | uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" 13 | version = "2.0.2" 14 | 15 | [[AxisAlgorithms]] 16 | deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] 17 | git-tree-sha1 = "a4d07a1c313392a77042855df46c5f534076fab9" 18 | uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" 19 | version = "1.0.0" 20 | 21 | [[Base64]] 22 | uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" 23 | 24 | [[BenchmarkTools]] 25 | deps = ["JSON", "Logging", "Printf", "Statistics", "UUIDs"] 26 | git-tree-sha1 = "9e62e66db34540a0c919d72172cc2f642ac71260" 27 | uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" 28 | version = "0.5.0" 29 | 30 | [[Blosc]] 31 | deps = ["Blosc_jll"] 32 | git-tree-sha1 = "84cf7d0f8fd46ca6f1b3e0305b4b4a37afe50fd6" 33 | uuid = "a74b3585-a348-5f62-a45c-50e91977d574" 34 | version = "0.7.0" 35 | 36 | [[Blosc_jll]] 37 | deps = ["Libdl", "Lz4_jll", "Pkg", "Zlib_jll", "Zstd_jll"] 38 | git-tree-sha1 = "aa9ef39b54a168c3df1b2911e7797e4feee50fbe" 39 | uuid = "0b7ba130-8d10-5ba8-a3d6-c5182647fed9" 40 | version = "1.14.3+1" 41 | 42 | [[Bzip2_jll]] 43 | deps = ["Libdl", "Pkg"] 44 | git-tree-sha1 = "5ccb0770e3d1c185a52e6d36e3ffb830639ed3d2" 45 | uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" 46 | version = "1.0.6+3" 47 | 48 | [[ColorSchemes]] 49 | deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random", "StaticArrays"] 50 | git-tree-sha1 = "7a15e3690529fd1042f0ab954dff7445b1efc8a5" 51 | uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" 52 | version = "3.9.0" 53 | 54 | [[ColorTypes]] 55 | deps = ["FixedPointNumbers", "Random"] 56 | git-tree-sha1 = "efec1b9e082d98d24c99f243abafb4653fb960d6" 57 | uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" 58 | version = "0.10.7" 59 | 60 | [[Colors]] 61 | deps = ["ColorTypes", "FixedPointNumbers", "InteractiveUtils", "Reexport"] 62 | git-tree-sha1 = "5639e44833cfcf78c6a73fbceb4da75611d312cd" 63 | uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" 64 | version = "0.12.3" 65 | 66 | [[CommonSubexpressions]] 67 | deps = ["MacroTools", "Test"] 68 | git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" 69 | uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" 70 | version = "0.3.0" 71 | 72 | [[CompilerSupportLibraries_jll]] 73 | deps = ["Libdl", "Pkg"] 74 | git-tree-sha1 = "7c4f882c41faa72118841185afc58a2eb00ef612" 75 | uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" 76 | version = "0.3.3+0" 77 | 78 | [[Contour]] 79 | deps = ["StaticArrays"] 80 | git-tree-sha1 = "81685fee51fc5168898e3cbd8b0f01506cd9148e" 81 | uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" 82 | version = "0.5.4" 83 | 84 | [[DSP]] 85 | deps = ["FFTW", "IterTools", "LinearAlgebra", "Polynomials", "Random", "Reexport", "SpecialFunctions", "Statistics"] 86 | git-tree-sha1 = "d52dce57c6108ef552c14799e7fcdcae6c681084" 87 | uuid = "717857b8-e6f2-59f4-9121-6e50c889abd2" 88 | version = "0.6.7" 89 | 90 | [[DataAPI]] 91 | git-tree-sha1 = "176e23402d80e7743fc26c19c681bfb11246af32" 92 | uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" 93 | version = "1.3.0" 94 | 95 | [[DataStructures]] 96 | deps = ["InteractiveUtils", "OrderedCollections"] 97 | git-tree-sha1 = "edad9434967fdc0a2631a65d902228400642120c" 98 | uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" 99 | version = "0.17.19" 100 | 101 | [[DataValueInterfaces]] 102 | git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" 103 | uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" 104 | version = "1.0.0" 105 | 106 | [[Dates]] 107 | deps = ["Printf"] 108 | uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" 109 | 110 | [[DelimitedFiles]] 111 | deps = ["Mmap"] 112 | uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" 113 | 114 | [[DiffResults]] 115 | deps = ["StaticArrays"] 116 | git-tree-sha1 = "da24935df8e0c6cf28de340b958f6aac88eaa0cc" 117 | uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" 118 | version = "1.0.2" 119 | 120 | [[DiffRules]] 121 | deps = ["NaNMath", "Random", "SpecialFunctions"] 122 | git-tree-sha1 = "eb0c34204c8410888844ada5359ac8b96292cfd1" 123 | uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" 124 | version = "1.0.1" 125 | 126 | [[Distributed]] 127 | deps = ["Random", "Serialization", "Sockets"] 128 | uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" 129 | 130 | [[ExprTools]] 131 | git-tree-sha1 = "6f0517056812fd6aa3af23d4b70d5325a2ae4e95" 132 | uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" 133 | version = "0.1.1" 134 | 135 | [[EzXML]] 136 | deps = ["Printf", "XML2_jll"] 137 | git-tree-sha1 = "0fa3b52a04a4e210aeb1626def9c90df3ae65268" 138 | uuid = "8f5d6c58-4d21-5cfd-889c-e3ad7ee6a615" 139 | version = "1.1.0" 140 | 141 | [[FFMPEG]] 142 | deps = ["FFMPEG_jll"] 143 | git-tree-sha1 = "c82bef6fc01e30d500f588cd01d29bdd44f1924e" 144 | uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" 145 | version = "0.3.0" 146 | 147 | [[FFMPEG_jll]] 148 | deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "LAME_jll", "LibVPX_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] 149 | git-tree-sha1 = "1af4493ff9a069e26a538d6f113816b237d3cc37" 150 | uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" 151 | version = "4.3.1+1" 152 | 153 | [[FFTW]] 154 | deps = ["AbstractFFTs", "FFTW_jll", "IntelOpenMP_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Reexport"] 155 | git-tree-sha1 = "14536c95939aadcee44014728a459d2fe3ca9acf" 156 | uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" 157 | version = "1.2.2" 158 | 159 | [[FFTW_jll]] 160 | deps = ["Libdl", "Pkg"] 161 | git-tree-sha1 = "6c975cd606128d45d1df432fb812d6eb10fee00b" 162 | uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" 163 | version = "3.3.9+5" 164 | 165 | [[FixedPointNumbers]] 166 | deps = ["Statistics"] 167 | git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" 168 | uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" 169 | version = "0.8.4" 170 | 171 | [[ForwardDiff]] 172 | deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "NaNMath", "Random", "SpecialFunctions", "StaticArrays"] 173 | git-tree-sha1 = "1d090099fb82223abc48f7ce176d3f7696ede36d" 174 | uuid = "f6369f11-7733-5829-9624-2563aa707210" 175 | version = "0.10.12" 176 | 177 | [[FreeType2_jll]] 178 | deps = ["Bzip2_jll", "Libdl", "Pkg", "Zlib_jll"] 179 | git-tree-sha1 = "158698cb8b27eccc7a0de16b73ca7912e164d88b" 180 | uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" 181 | version = "2.10.1+3" 182 | 183 | [[FriBidi_jll]] 184 | deps = ["Libdl", "Pkg"] 185 | git-tree-sha1 = "94e98e5597e745d9fb3094d89c7b0b754204c9dd" 186 | uuid = "559328eb-81f9-559d-9380-de523a88c83c" 187 | version = "1.0.5+4" 188 | 189 | [[GR]] 190 | deps = ["Base64", "DelimitedFiles", "HTTP", "JSON", "LinearAlgebra", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"] 191 | git-tree-sha1 = "e26c513329675092535de20cc4bb9c579c8f85a0" 192 | uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" 193 | version = "0.51.0" 194 | 195 | [[GeometryBasics]] 196 | deps = ["IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] 197 | git-tree-sha1 = "119f32f9c2b497b49cd3f7f513b358b82660294c" 198 | uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" 199 | version = "0.2.15" 200 | 201 | [[GeometryTypes]] 202 | deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "StaticArrays"] 203 | git-tree-sha1 = "34bfa994967e893ab2f17b864eec221b3521ba4d" 204 | uuid = "4d00f742-c7ba-57c2-abde-4428a4b178cb" 205 | version = "0.8.3" 206 | 207 | [[HDF5]] 208 | deps = ["Blosc", "HDF5_jll", "Libdl", "Mmap", "Random"] 209 | git-tree-sha1 = "8f096f0820429f7865f6ecf6857cd81028a26230" 210 | uuid = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" 211 | version = "0.13.3" 212 | 213 | [[HDF5_jll]] 214 | deps = ["Libdl", "Pkg", "Zlib_jll"] 215 | git-tree-sha1 = "85bd2e586a10ae0eab856125bf5245e0d36384a7" 216 | uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" 217 | version = "1.10.5+5" 218 | 219 | [[HTTP]] 220 | deps = ["Base64", "Dates", "IniFile", "MbedTLS", "Sockets"] 221 | git-tree-sha1 = "2ac03263ce44be4222342bca1c51c36ce7566161" 222 | uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" 223 | version = "0.8.17" 224 | 225 | [[IniFile]] 226 | deps = ["Test"] 227 | git-tree-sha1 = "098e4d2c533924c921f9f9847274f2ad89e018b8" 228 | uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f" 229 | version = "0.5.0" 230 | 231 | [[IntelOpenMP_jll]] 232 | deps = ["Libdl", "Pkg"] 233 | git-tree-sha1 = "fb8e1c7a5594ba56f9011310790e03b5384998d6" 234 | uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" 235 | version = "2018.0.3+0" 236 | 237 | [[InteractiveUtils]] 238 | deps = ["Markdown"] 239 | uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" 240 | 241 | [[Interpolations]] 242 | deps = ["AxisAlgorithms", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] 243 | git-tree-sha1 = "2b7d4e9be8b74f03115e64cf36ed2f48ae83d946" 244 | uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" 245 | version = "0.12.10" 246 | 247 | [[Intervals]] 248 | deps = ["Dates", "Printf", "RecipesBase", "Serialization", "TimeZones"] 249 | git-tree-sha1 = "f8fd8065b6bccfbc2f9e7dd1fa5c0dde81d09185" 250 | uuid = "d8418881-c3e1-53bb-8760-2df7ec849ed5" 251 | version = "1.4.1" 252 | 253 | [[IterTools]] 254 | git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18" 255 | uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" 256 | version = "1.3.0" 257 | 258 | [[IteratorInterfaceExtensions]] 259 | git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" 260 | uuid = "82899510-4779-5014-852e-03e436cf321d" 261 | version = "1.0.0" 262 | 263 | [[JSON]] 264 | deps = ["Dates", "Mmap", "Parsers", "Unicode"] 265 | git-tree-sha1 = "b34d7cef7b337321e97d22242c3c2b91f476748e" 266 | uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" 267 | version = "0.21.0" 268 | 269 | [[LAME_jll]] 270 | deps = ["Libdl", "Pkg"] 271 | git-tree-sha1 = "a7999edc634307964d5651265ebf7c2e14b4ef91" 272 | uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" 273 | version = "3.100.0+2" 274 | 275 | [[LibGit2]] 276 | deps = ["Printf"] 277 | uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" 278 | 279 | [[LibVPX_jll]] 280 | deps = ["Libdl", "Pkg"] 281 | git-tree-sha1 = "e02378f5707d0f94af22b99e4aba798e20368f6e" 282 | uuid = "dd192d2f-8180-539f-9fb4-cc70b1dcf69a" 283 | version = "1.9.0+0" 284 | 285 | [[Libdl]] 286 | uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" 287 | 288 | [[Libiconv_jll]] 289 | deps = ["Libdl", "Pkg"] 290 | git-tree-sha1 = "c9d4035d7481bcdff2babf5a55525a818ef8ed8f" 291 | uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" 292 | version = "1.16.0+5" 293 | 294 | [[LinearAlgebra]] 295 | deps = ["Libdl"] 296 | uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" 297 | 298 | [[Logging]] 299 | uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" 300 | 301 | [[Lz4_jll]] 302 | deps = ["Libdl", "Pkg"] 303 | git-tree-sha1 = "51b1db0732bbdcfabb60e36095cc3ed9c0016932" 304 | uuid = "5ced341a-0733-55b8-9ab6-a4889d929147" 305 | version = "1.9.2+2" 306 | 307 | [[MKL_jll]] 308 | deps = ["IntelOpenMP_jll", "Libdl", "Pkg"] 309 | git-tree-sha1 = "0ce9a7fa68c70cf83c49d05d2c04d91b47404b08" 310 | uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" 311 | version = "2020.1.216+0" 312 | 313 | [[MacroTools]] 314 | deps = ["Markdown", "Random"] 315 | git-tree-sha1 = "f7d2e3f654af75f01ec49be82c231c382214223a" 316 | uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" 317 | version = "0.5.5" 318 | 319 | [[Markdown]] 320 | deps = ["Base64"] 321 | uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" 322 | 323 | [[MbedTLS]] 324 | deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"] 325 | git-tree-sha1 = "426a6978b03a97ceb7ead77775a1da066343ec6e" 326 | uuid = "739be429-bea8-5141-9913-cc70e7f3736d" 327 | version = "1.0.2" 328 | 329 | [[MbedTLS_jll]] 330 | deps = ["Libdl", "Pkg"] 331 | git-tree-sha1 = "a0cb0d489819fa7ea5f9fa84c7e7eba19d8073af" 332 | uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" 333 | version = "2.16.6+1" 334 | 335 | [[Measures]] 336 | git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" 337 | uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" 338 | version = "0.3.1" 339 | 340 | [[Missings]] 341 | deps = ["DataAPI"] 342 | git-tree-sha1 = "de0a5ce9e5289f27df672ffabef4d1e5861247d5" 343 | uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" 344 | version = "0.4.3" 345 | 346 | [[Mmap]] 347 | uuid = "a63ad114-7e13-5084-954f-fe012c677804" 348 | 349 | [[Mocking]] 350 | deps = ["ExprTools"] 351 | git-tree-sha1 = "916b850daad0d46b8c71f65f719c49957e9513ed" 352 | uuid = "78c3b35d-d492-501b-9361-3d52fe80e533" 353 | version = "0.7.1" 354 | 355 | [[NaNMath]] 356 | git-tree-sha1 = "c84c576296d0e2fbb3fc134d3e09086b3ea617cd" 357 | uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" 358 | version = "0.3.4" 359 | 360 | [[OffsetArrays]] 361 | git-tree-sha1 = "2066e16af994955287f2e03ba1d9e890eb43b0dd" 362 | uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" 363 | version = "1.1.2" 364 | 365 | [[Ogg_jll]] 366 | deps = ["Libdl", "Pkg"] 367 | git-tree-sha1 = "4c3275cda1ba99d1244d0b82a9d0ca871c3cf66b" 368 | uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" 369 | version = "1.3.4+1" 370 | 371 | [[OpenSSL_jll]] 372 | deps = ["Libdl", "Pkg"] 373 | git-tree-sha1 = "997359379418d233767f926ea0c43f0e731735c0" 374 | uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" 375 | version = "1.1.1+5" 376 | 377 | [[OpenSpecFun_jll]] 378 | deps = ["CompilerSupportLibraries_jll", "Libdl", "Pkg"] 379 | git-tree-sha1 = "d51c416559217d974a1113522d5919235ae67a87" 380 | uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" 381 | version = "0.5.3+3" 382 | 383 | [[Opus_jll]] 384 | deps = ["Libdl", "Pkg"] 385 | git-tree-sha1 = "cc90a125aa70dbb069adbda2b913b02cf2c5f6fe" 386 | uuid = "91d4177d-7536-5919-b921-800302f37372" 387 | version = "1.3.1+2" 388 | 389 | [[OrderedCollections]] 390 | git-tree-sha1 = "293b70ac1780f9584c89268a6e2a560d938a7065" 391 | uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" 392 | version = "1.3.0" 393 | 394 | [[Parsers]] 395 | deps = ["Dates", "Test"] 396 | git-tree-sha1 = "10134f2ee0b1978ae7752c41306e131a684e1f06" 397 | uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" 398 | version = "1.0.7" 399 | 400 | [[Pkg]] 401 | deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"] 402 | uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" 403 | 404 | [[PlotThemes]] 405 | deps = ["PlotUtils", "Requires", "Statistics"] 406 | git-tree-sha1 = "c6f5ea535551b3b16835134697f0c65d06c94b91" 407 | uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" 408 | version = "2.0.0" 409 | 410 | [[PlotUtils]] 411 | deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "Statistics"] 412 | git-tree-sha1 = "e18e0e51ff07bf92bb7e06dcb9c082a4e125e20c" 413 | uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" 414 | version = "1.0.5" 415 | 416 | [[Plots]] 417 | deps = ["Base64", "Contour", "Dates", "FFMPEG", "FixedPointNumbers", "GR", "GeometryBasics", "GeometryTypes", "JSON", "LinearAlgebra", "Measures", "NaNMath", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "Requires", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs"] 418 | git-tree-sha1 = "f80ce6a2c0342b658d752d1396fad34142df6a05" 419 | uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" 420 | version = "1.5.7" 421 | 422 | [[Polynomials]] 423 | deps = ["Intervals", "LinearAlgebra", "RecipesBase"] 424 | git-tree-sha1 = "bae8d8a1e4219bca31c5c3287db6ba5e23b88f50" 425 | uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" 426 | version = "1.1.3" 427 | 428 | [[Printf]] 429 | deps = ["Unicode"] 430 | uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" 431 | 432 | [[REPL]] 433 | deps = ["InteractiveUtils", "Markdown", "Sockets"] 434 | uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" 435 | 436 | [[Random]] 437 | deps = ["Serialization"] 438 | uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" 439 | 440 | [[Ratios]] 441 | git-tree-sha1 = "37d210f612d70f3f7d57d488cb3b6eff56ad4e41" 442 | uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" 443 | version = "0.4.0" 444 | 445 | [[RecipesBase]] 446 | git-tree-sha1 = "58de8f7e33b7fda6ee39eff65169cd1e19d0c107" 447 | uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" 448 | version = "1.0.2" 449 | 450 | [[RecipesPipeline]] 451 | deps = ["Dates", "PlotUtils", "RecipesBase"] 452 | git-tree-sha1 = "d2a58b8291d1c0abae6a91489973f8a92bf5c04a" 453 | uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" 454 | version = "0.1.11" 455 | 456 | [[Reexport]] 457 | deps = ["Pkg"] 458 | git-tree-sha1 = "7b1d07f411bc8ddb7977ec7f377b97b158514fe0" 459 | uuid = "189a3867-3050-52da-a836-e630ba90ab69" 460 | version = "0.2.0" 461 | 462 | [[Requires]] 463 | deps = ["UUIDs"] 464 | git-tree-sha1 = "d37400976e98018ee840e0ca4f9d20baa231dc6b" 465 | uuid = "ae029012-a4dd-5104-9daa-d747884805df" 466 | version = "1.0.1" 467 | 468 | [[SHA]] 469 | uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" 470 | 471 | [[Serialization]] 472 | uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" 473 | 474 | [[SharedArrays]] 475 | deps = ["Distributed", "Mmap", "Random", "Serialization"] 476 | uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" 477 | 478 | [[Showoff]] 479 | deps = ["Dates"] 480 | git-tree-sha1 = "e032c9df551fb23c9f98ae1064de074111b7bc39" 481 | uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" 482 | version = "0.3.1" 483 | 484 | [[Sockets]] 485 | uuid = "6462fe0b-24de-5631-8697-dd941f90decc" 486 | 487 | [[SortingAlgorithms]] 488 | deps = ["DataStructures", "Random", "Test"] 489 | git-tree-sha1 = "03f5898c9959f8115e30bc7226ada7d0df554ddd" 490 | uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" 491 | version = "0.3.1" 492 | 493 | [[SparseArrays]] 494 | deps = ["LinearAlgebra", "Random"] 495 | uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" 496 | 497 | [[SpecialFunctions]] 498 | deps = ["OpenSpecFun_jll"] 499 | git-tree-sha1 = "d8d8b8a9f4119829410ecd706da4cc8594a1e020" 500 | uuid = "276daf66-3868-5448-9aa4-cd146d93841b" 501 | version = "0.10.3" 502 | 503 | [[StaticArrays]] 504 | deps = ["LinearAlgebra", "Random", "Statistics"] 505 | git-tree-sha1 = "016d1e1a00fabc556473b07161da3d39726ded35" 506 | uuid = "90137ffa-7385-5640-81b9-e52037218182" 507 | version = "0.12.4" 508 | 509 | [[Statistics]] 510 | deps = ["LinearAlgebra", "SparseArrays"] 511 | uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" 512 | 513 | [[StatsBase]] 514 | deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics"] 515 | git-tree-sha1 = "a6102b1f364befdb05746f386b67c6b7e3262c45" 516 | uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" 517 | version = "0.33.0" 518 | 519 | [[StructArrays]] 520 | deps = ["Adapt", "DataAPI", "Tables"] 521 | git-tree-sha1 = "8099ed9fb90b6e754d6ba8c6ed8670f010eadca0" 522 | uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" 523 | version = "0.4.4" 524 | 525 | [[TableTraits]] 526 | deps = ["IteratorInterfaceExtensions"] 527 | git-tree-sha1 = "b1ad568ba658d8cbb3b892ed5380a6f3e781a81e" 528 | uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" 529 | version = "1.0.0" 530 | 531 | [[Tables]] 532 | deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"] 533 | git-tree-sha1 = "b7f762e9820b7fab47544c36f26f54ac59cf8abf" 534 | uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" 535 | version = "1.0.5" 536 | 537 | [[Test]] 538 | deps = ["Distributed", "InteractiveUtils", "Logging", "Random"] 539 | uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" 540 | 541 | [[TimeZones]] 542 | deps = ["Dates", "EzXML", "Mocking", "Pkg", "Printf", "RecipesBase", "Serialization", "Unicode"] 543 | git-tree-sha1 = "1038a97206e7696ba106f2c2dafa2e9cca393269" 544 | uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53" 545 | version = "1.3.1" 546 | 547 | [[UUIDs]] 548 | deps = ["Random", "SHA"] 549 | uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" 550 | 551 | [[Unicode]] 552 | uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" 553 | 554 | [[WoodburyMatrices]] 555 | deps = ["LinearAlgebra", "SparseArrays"] 556 | git-tree-sha1 = "28ffe06d28b1ba8fdb2f36ec7bb079fac81bac0d" 557 | uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" 558 | version = "0.5.2" 559 | 560 | [[XML2_jll]] 561 | deps = ["Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] 562 | git-tree-sha1 = "432d91f45e950f2f2bda5c0f4e2b938c14493af9" 563 | uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" 564 | version = "2.9.10+1" 565 | 566 | [[Zlib_jll]] 567 | deps = ["Libdl", "Pkg"] 568 | git-tree-sha1 = "d5bba6485811931e4b8958e2d7ca3738273ac468" 569 | uuid = "83775a58-1f1d-513f-b197-d71354ab007a" 570 | version = "1.2.11+15" 571 | 572 | [[Zstd_jll]] 573 | deps = ["Libdl", "Pkg"] 574 | git-tree-sha1 = "b25b0fb10176c42e9a5a20e1f40d570ac0288d4e" 575 | uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" 576 | version = "1.4.5+0" 577 | 578 | [[libass_jll]] 579 | deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "Libdl", "Pkg", "Zlib_jll"] 580 | git-tree-sha1 = "f02d0db58888592e98c5f4953cef620ce9274eee" 581 | uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" 582 | version = "0.14.0+3" 583 | 584 | [[libfdk_aac_jll]] 585 | deps = ["Libdl", "Pkg"] 586 | git-tree-sha1 = "e17b4513993b4413d31cffd1b36a63625ebbc3d3" 587 | uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" 588 | version = "0.1.6+3" 589 | 590 | [[libvorbis_jll]] 591 | deps = ["Libdl", "Ogg_jll", "Pkg"] 592 | git-tree-sha1 = "8014e1c1033009edcfe820ec25877a9f1862ba4c" 593 | uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" 594 | version = "1.3.6+5" 595 | 596 | [[x264_jll]] 597 | deps = ["Libdl", "Pkg"] 598 | git-tree-sha1 = "e496625b900df1b02ab0e02fad316b77446616ef" 599 | uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" 600 | version = "2020.7.14+1" 601 | 602 | [[x265_jll]] 603 | deps = ["Libdl", "Pkg"] 604 | git-tree-sha1 = "ac7d44fa1639a780d0ae79ca1a5a7f4181131825" 605 | uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" 606 | version = "3.0.0+2" 607 | --------------------------------------------------------------------------------