This repository contains code to perform frequency-domain airborne electromagnetic (AEM) inversion, depth of investigation (DOI) analysis, and gradient-based permafrost transition-zone characterization for permafrost mapping in the Northwest Territories (NWT), Canada, using the open-source framework SimPEG.
The code is part of the study:
Moshtaghian et al., 2026. Frequency-domain Airborne Electromagnetic Imaging of Permafrost Reveals Heterogeneity and Drivers of Permafrost Change in the Discontinuous Permafrost Zone of Northwestern Canada.
├── data/ # Input AEM data files (1D sounding per line)
├── outputs/ # Output folder for inverted models and figures
├── src/ # Source code modules
│ ├── depth_of_investigation.py
│ ├── gradient.py
│ ├── inversion.py
│ ├── mesh.py
│ ├── pbtz.py
│ ├── plotting.py
│ ├── survey.py
├── main.py # Entry point to configure and run inversion
├── run_aem_inversion.py # Main inversion workflow logic
├── environment.yml # Conda environment with dependencies
└── README.md # Project documentation
git clone https://github.com/simpeg-research/Moshtaghian-et-al-2026-aem-nwt.git
cd Moshtaghian-et-al-2026-aem-nwtconda env create -f environment.yml
conda activate simpeg-aem-nwtEdit main.py to select a line (e.g., L120030) and run:
python main.pyYou can control whether to re-run inversion, save results, or plot only by modifying main.py.
For each 1D inverted resistivity model:
-
Log-resistivity is computed from recovered log-conductivity.
-
The vertical gradient ∂log(ρ)/∂z is calculated using second-order finite differences accounting for non-uniform layer thickness.
-
The permafrost base center depth (z₀) is defined as the depth of maximum absolute gradient evaluated at cell centers.
-
The Permafrost Base Transition Zone (PBTZ) is defined as the narrowest continuous interval surrounding z₀ that contains 50% of the integrated |∂log(ρ)/∂z| within an adaptive depth window.
Depth of investigation is estimated using:
-
Oldenburg & Li (1999) reference-model approach
-
Christiansen & Auken (2012) Jacobian sensitivity method
Core libraries used:
- SimPEG
- discretize
- numpy
- pandas
- matplotlib
- contextily (optional, for map tiles)
All dependencies are listed in environment.yml.
- Inverted resistivity sections
- RMS misfit profiles
- Depth of investigation (DOI) overlays
- Gradient-based permafrost base estimates (z0)
- Permafrost Base Transition Zone (PBTZ) thickness estimates
- All results saved in
outputs/as.pkland.png
Below is an example output from the fixed β inversion of AEM Line L150020, showing the resistivity model with a gradient-based estimate of the permafrost base (black line) and the corresponding RMS misfit profile.
Figure: Fixed β inversion results for Line L150020. Top: inverted resistivity model with permafrost base estimated using a second-order gradient method (black line). Bottom: RMS misfit across source locations.
MIT License. See LICENSE file.
This work was conducted as part of a larger collaboration involving researchers at the University of Alberta, the University of British Columbia, and the SimPEG community. Data were collected in the Northwest Territories with support from federal and territorial partners. For scientific context, please cite:
Moshtaghian et al., Frequency-domain Airborne Electromagnetic Imaging of Permafrost Reveals Heterogeneity and Drivers of Permafrost Change in the Discontinuous Permafrost Zone of Northwestern Canada, 2026 (Submitted to AGU Advances).
