DOI: 10.5281/zenodo.15168581
title: Measurements, Simulations, Python Scripts, and Results Presented in "Estimating Soil Electrical Parameters in the Canadian High Arctic from Impedance Measurements of the MIST Antenna Above the Surface"

description: README

This repository corresponds to measurements, simulations, Python scripts, and results presented in "Estimating Soil Electrical Parameters in the Canadian High Arctic from Impedance Measurements of the MIST Antenna Above the Surface" (Hendricksen et al. 2025), currently undergoing review for consideration of publication at the time of upload of this repository.

If accepted, this repository will remain available such that the results are reproducible by anyone. If you wish to use any of the data found in this repository, please use that corresponding to Version 2 (V2). Ensure to extract all the zipped folders in the same directory since some scripts include relative paths.

Data and Simulations

The impedance measurements conducted with the MIST antenna from the study site in the Canadian High Arctic are contained in



impedance_measurements.tar.gz


The impedance measurements are stored in HDF5 files which can be opened manually with h5py, or through methods provided in soil.py and demonstrated in run_fits.py (see below).

The Feko simulations are contained in



feko_simulations.tar.gz


which contains two subdirectories corresponding to the two soil models:



The single-layer simulations are contained in feko_simulations/csa2022_2parameters_9samples_V3_20240128.

The two-layer simulations are contained in feko_simulations/csa2022_5parameters_4samples_V3_20240108.


It is likewise recommended to use the simulation loading methods demonstrated in run_fits.py to access the simulation data.

Results Files

The results are contained in



results.tar.gz


The nominal results are stored in



results/single_layer/curve_fit/cubic_interp_absolute_sigma_True_mean_p0/results.hdf5: single-layer

results/two_layer/curve_fit/cubic_interp_absolute_sigma_True_mean_p0/results.hdf5: two-layer


One can access the different datasets contained in each file by checking the keys of the file with h5py. The included datasets are



BIC: the Bayesian information criterion.

bounds: the bounds of the spans for each soil parameter as displayed in the "Span" column of Table S2.

chisq_red: the reduced chi-squared χred2χred2.

data: the measured, calibrated antenna impedance as a function of time (axis 0) and frequency (axis 1).

day_time: the measurement time referenced to the first measurement in units of days.

frequency: the frequency bins spanning 25-125 MHz.

initial_guess: the starting parameters for the fitting process.

mist_temp: the temperature of the internal 50-ΩΩ load within the MIST receiver box.

models: the best-fit models as a function of time (axis 0) and frequency (axis 1).

p: the best-fit parameters. The parameter names can be accessed through the attribute param_names of this dataset.

perr: the 68% confidence level of each parameter.

s11_index: the concatenated indices of the impedance measurements for each dataset. Used primarily for debugging. Note that the first measurement (i.e., index 0) is typically conducted while humans are still operating the instrument, whose nearby presence biases the measured impedance; therefore, the first measurements are not considered in this analysis.

total_uncertainty: the total uncertainty in ΩΩ used in the fitting process. The first (second) row corresponds to the real/resistance (imaginary/reactance) part of the total uncertainty.

weatherstation_temp: the air temperature measured by the weather station, interpolated at the timestamps at which the MIST internal temperatures were recorded. Note that the full weather station data are made available (discussed in Python Codes below).


Note that for each key where there is a frequency axis, the resistance and reactance are concatenated together, such that the first 101 indices correspond to the resistance from 25-125 MHz, and the second 101 indices correspond to the reactance from 25-125 MHz, for a total of 202 indices.

The other files contained in the results directory correspond to tests of sensitivity of the estimated soil parameters to assumptions we have made in this analysis, whose results are summarized in Table S3. Specifically, they include:



results/single_layer/curve_fit/cubic_interp_fix_L_absolute_sigma_True_mean_p0: the residual inductance L is fixed for the single-layer model.

results/two_layer/curve_fit/cubic_interp_fix_L_absolute_sigma_True_mean_p0: the residual inductance L is fixed for the two-layer model.

results/two_layer/curve_fit/cubic_interp_tighten_d_bounds_absolute_sigma_True_mean_p0: the bounds of the parameter search for the top-layer thickness tt are constrained to within ±1±1 sample standard deviation of the metal probe measurements.


Python Codes

The Python codes for fitting interpolated models to the data and generating plots are contained in



python_codes.tar.gz


The scripts require the following packages to be run (most of which are standard):



numpy

matplotlib

scipy

h5py

datetime

os

glob

argparse

re

json

PyYAML

pandas


There are two main "helper" scripts which provide the software tools to interact with data and generate impedance models. These include



soil.py, the main software tool which loads data, simulations, uncertainties, etc., and organizes fitting routines, and

ampere.py, a generalized N-dimensional interpolation class called by soil.py when forming impedance models to fit to measured data.


There are several analysis scripts included along with the software tools, including



compare_nominal_and_constrained_rmsd.py: used to generate the values in Table S3.

make_data_plot.py: used to generate a raw version of Figure 2.

make_models_and_residuals_plot.py: used to generate Figure 3.

make_parameter_plots.py: used to generate raw versions of Figures 4 and S5.

make_simulation_plot.py: used to generate Figure S3.

make_total_uncertainty_plot.py: used to generate Figure S4.

run_fits.py: used to obtain the best-fit results presented in Hendricksen et al. (2025).



It is recommended to start here if you would like to learn how to load data and simulations and fit models to data.

NOTE: if this file is run with save_data = True (line 44), the results files contained in results.tar.gz (see the next section) will be overwritten.




The uncertainties considered in this analysis are contained in the subdirectory python_codes/uncertainty_files, which includes



python_codes/uncertainty_files/csa_2022_single_layer_all_uncertainties_20241130.txt: single-layer uncertainties.

python_codes/uncertainty_files/csa_2022_two_layer_all_uncertainties_20241130.txt: two-layer uncertainties.


Note that there are some quantities which are repeated between the two uncertainty files, such as δcalδcal, δmeasδmeas, and δFekoδFeko.

Finally, the weather station data is contained in



python_codes/csa_weather_station_data_2022-05-03_2023-04-25_original.xlsx


which includes key metrics presented in the paper, including



AirTemp_Avg: air temperature in ∘C∘C

RH_Avg: relative humidity as a percentage

Solar_W_Avg: solar radiation in Wm−2Wm−2

mean_wind_speed: mean wind speed in kmh−1kmh−1


The weather station data is loaded using the pandas package. An interpolated subset of the air temperature data corresponding to the same time that data was taken is included in each of the results files.

Figures

All the figures presented in the paper are contained in



figures.tar.gz


along with additional scripts and files to produce figures with broken axes, including Figures 2, 4, and S5, which require post-processing. Note that imagemagick and Inkscape are required to perform the post-processing described below.

Figure 1

Figure 1 corresponds to mist_in_arctic_and_feko.pdf.

Figure 2

Figure 2 corresponds to example_impedance_and_variation_crop.pdf. To reproduce Figure 2, run python_codes/make_data_plot.py, which will produce two temporary figures example_impedance_and_variation_1.jpg and example_impedance_and_variation_2.jpg.

Run the shell script crop_example_impedance_and_variation.sh to produce example_impedance_and_variation_crop.jpg, an intermediate, cropped version of Figure 2, which needs to be polished after cropping.

A scalable vector graphics (SVG) file example_impedance_and_variation_crop.svg is provided with example_impedance_and_variation_crop.jpg imported as its base layer. The SVG file can be opened with Inkscape and used to export the final PDF version of Figure 2, example_impedance_and_variation_crop.pdf.

Figure 3

Figure 3 corresponds to example_fits_and_all_residuals.pdf.

Figure 4

Figure 4 corresponds to best_fit_parameters_two_layer_crop.pdf. To reproduce Figure 3, run python_codes/make_parameter_plots.py, which will produce a temporary figure best_fit_parameters_two_layer.png.

Run the shell script crop_best_fit_parameters_two_layer.sh to produce best_fit_parameters_two_layer_crop.png, an intermediate, cropped version of Figure 4, which needs to be polished after cropping.

An SVG file best_fit_parameters_two_layer_crop.svg is provided with best_fit_parameters_two_layer_crop.png imported as its base layer. The SVG file can be opened with Inkscape to export the final PDF version of Figure 4, best_fit_parameters_two_layer_crop.pdf.

Figure S1

Figure S1 corresponds to axel_heiberg_and_mars_region.pdf.

Figure S2

Figure S2 corresponds to antenna.pdf, and is reused from Monsalve et al. (2024) (see the References.)

Figure S3

Figure S3 corresponds to all_feko_sims.pdf. To reproduce Figure S3, run python_codes/make_simulation_plot.py.

Figure S4

Figure S4 corresponds to total_uncertainty.pdf. To reproduce Figure S4, run python_codes/make_total_uncertainty_plot.py.

Figure S5

Figure S5 corresponds to parameter_line_fits_crop.pdf. To reproduce Figure S5, run python_codes/make_parameter_plots.py for the two-layer model, which will produce a temporary figure parameter_line_fits.png.

Run the shell script crop_parameter_line_fits.sh to produce parameter_line_fits_crop.png, an intermediate, cropped version of Figure S5, which needs to be polished after cropping.

An SVG file parameter_line_fits_crop.svg is provided with parameter_line_fits_crop.png imported as its base layer. The SVG file can be opened with Inkscape to export the final PDF version of Figure S5, parameter_line_fits_crop.pdf.