Magnetic data is one of the most common geophysics datasets available on the surface of the Earth. Curie depth is the depth at which rocks lose their magnetism. The most prevalent magnetic mineral is magnetite, which has a Curie point of 580°C, thus the Curie depth is often interpreted as the 580°C isotherm.
Current methods to derive Curie depth first compute the (fast) Fourier transform over a square window of a magnetic anomaly that has been reduced to the pole. The depth and thickness of magnetic sources is estimated from the slope of the radial power spectrum. pycurious implements the Tanaka et al. (1999) and Bouligand et al. (2009) methods for computing the thickness of a buried magnetic source. pycurious ingests maps of the magnetic anomaly and distributes the computation of Curie depth across multiple CPUs. Common computational workflows and geospatial manipulation of magnetic data are covered in the Jupyter notebooks bundled with this package.
Mather, B. and Delhaye, R. (2019). PyCurious: A Python module for computing the Curie depth from the magnetic anomaly. Journal of Open Source Software, 4(39), 1544, https://doi.org/10.21105/joss.01544
There are two matching sets of Jupyter notebooks - one set for the Tanaka and one for Bouligand implementations. The Bouligand set of noteboks are a natural choice for Bayesian inference applications.
Note, these examples can be installed from the package itself by running:
import pycurious
pycurious.install_documentation(path="Notebooks")- Ex1-Plot-amplitude-spectrum.ipynb
- Ex2-Compute-Curie-depth.ipynb
- Ex3-Parameter-exploration.ipynb
- Ex4-Spatial-variation-of-Curie-depth.ipynb
- Ex5-Mapping-Curie-depth-EMAG2.ipynb
- Ex1-Plot-power-spectrum.ipynb
- Ex2-Compute-Curie-depth.ipynb
- Ex3-Posing-the-inverse-problem.ipynb
- Ex4-Spatial-variation-of-Curie-depth.ipynb
- Ex5-Mapping-Curie-depth-EMAG2.ipynb
You will need Python 3.9 or newer. Also, the following packages are required:
Optional dependencies for mapping module and running the Notebooks:
You can install pycurious using the
pip package manager:
python3 -m pip install pycuriousAll the required dependencies will be automatically installed by pip.
The optional dependencies are grouped into extras, so you can install only what you need:
python3 -m pip install pycurious[download] # requests
python3 -m pip install pycurious[mapping] # pyproj, netCDF4
python3 -m pip install pycurious[examples] # matplotlib, jupyter, cartopyYou can install pycurious using the conda package manager.
Its required dependencies can be easily installed with:
conda install numpy scipyAnd the full set of dependencies with:
conda install numpy scipy matplotlib pyproj cartopy netcdf4 requestsThen pycurious can be installed with pip:
pip install pycuriousAlternatively, you can create a custom
conda environment
where pycurious can be installed along with its dependencies.
Clone the repository:
git clone https://github.com/brmather/pycurious
cd pycuriousCreate the environment from the environment.yml file:
conda env create -f environment.ymlActivate the newly created environment:
conda activate pycuriousAnd install pycurious with pip:
pip install pycuriousIf the pycurious installation fails due to an issue with gcc and
Anaconda, you just
need to install gxx_linux-64 with conda:
conda install gxx_linux-64And then install pycurious normally.
PyCurious consists of 3 classes:
CurieGrid: base class that computes radial power spectrum, centroids for processing, decomposition of subgrids.CurieOptimiseBouligand: optimisation module for fitting the synthetic power spectrum of Bouligand et al. (2009) (inherits CurieGrid).CurieOptimiseTanaka: optimisation module for the centroid method of Tanaka et al. (1999) (inherits CurieGrid).
Also included is a mapping module for gridding scattered data points, and converting between coordinate reference systems (CRS).
Below is a simple workflow to calculate the radial power spectrum:
import pycurious
# initialise CurieOptimiseBouligand object with 2D magnetic anomaly
grid = pycurious.CurieOptimiseBouligand(mag_anomaly, xmin, xmax, ymin, ymax)
# extract a square window of the magnetic anomaly
subgrid = grid.subgrid(window_size, x, y)
# compute the radial power spectrum
k, Phi, sigma_Phi = grid.radial_spectrum(subgrid)A series of tests are located in the tests subdirectory.
In order to perform these tests, clone the repository and run pytest:
git checkout https://github.com/brmather/pycurious.git
cd pycurious
pytest -vThe API for all functions and classes in pycurious can be accessed from https://brmather.github.io/pycurious/.
- Bouligand, C., Glen, J. M. G., & Blakely, R. J. (2009). Mapping Curie temperature depth in the western United States with a fractal model for crustal magnetization. Journal of Geophysical Research, 114(B11104), 1–25. https://doi.org/10.1029/2009JB006494
- Tanaka, A., Okubo, Y., & Matsubayashi, O. (1999). Curie point depth based on spectrum analysis of the magnetic anomaly data in East and Southeast Asia. Tectonophysics, 306(3–4), 461–470. https://doi.org/10.1016/S0040-1951(99)00072-4
