Field-Aligned Current Python toolkit for SWARM satellite analysis
Project description
facpy: Field-Aligned Current Python Toolkit
facpy is a research-grade Python package designed for standardized, fast, and reproducible analysis of Swarm satellite Field-Aligned Currents (FAC). It is optimized for quiet-time studies, regional analysis (e.g., Africa), and interhemispheric comparisons.
🚀 Key Features
- Data Loading: Efficient loading of Swarm Level 2 FAC data (CDF and NetCDF formats) into Polars DataFrames.
- Quiet Time Selection: Automatic selection of quietest days based on Kp (sum/max) or Dst (min) geomagnetic indices.
- Geospacial Tools:
- Region-based filtering (presets for Africa, Europe, Polar Caps, etc.).
- Magnetic Local Time (MLT) and Solar Local Time (SLT) calculation.
- Altitude-Adjusted Corrected Geomagnetic (AACGM) coordinates (mlat, mlon).
- Hemisphere separation.
- Gridding: Fast aggregation of point data into regular 2D (Lat/Lon) or 3D (Lat/Lon/LT) grids using vectorization.
- Interhemispheric Analysis (IHFAC): Tools to compare Northern and Southern hemisphere currents (Difference, Ratio) with automatic coordinate alignment.
- Visualization: Publication-ready map generation using
cartopy.
📦 Installation
facpy requires Python 3.9+.
# Install from PyPI
pip install facpy
# Or install from source
git clone https://github.com/madvirus-ops/facpy
cd facpy
pip install .
# Install with development dependencies
pip install ".[dev]"
⚡ Quick Start
Here is a complete workflow example demonstrating loading, filtering, gridding, and mapping.
import facpy
from facpy import io, quiet, geo, grid, plot
import polars as pl
# 1. Load Data
# Supports single file or list of files (CDF/NetCDF)
df = io.load_swarm_fac("SW_OPER_FAC_A_20210101.cdf")
# 2. Select Quiet Days
# Get the 5 quietest days in Jan 2021 based on Kp index
quiet_dates = quiet.quiet_days(
start_date="2021-01-01",
end_date="2021-01-31",
method="kp",
top_n=5,
index_file="kp_index.txt" # Path to your index file
)
# Filter dataframe
df = df.filter(pl.col("timestamp").dt.date().is_in(quiet_dates))
# 3. Filter Region & Add Magnetic Local Time
# Focus on Africa and calculate Magnetic Local Time (MLT)
df_africa = geo.filter_region(df, region="africa")
df_africa = geo.add_local_time(df_africa, method="mlt")
# 4. Grid the Data
# Create a 2°x2° grid of Mean FAC values
ds_grid = grid.grid_fac(
df_africa,
resolution=(2.0, 2.0),
statistic="mean"
)
# 5. Plot
# Generate a map using built-in Cartopy plotter
plot.fac_map(
ds_grid,
title="Quiet Time Mean FAC - Africa",
projection="platecarree"
)
📚 Module Overview
facpy.io
Handles file I/O.
load_swarm_fac(): Reads data, handles fill values, normalizes column names, and automatically appends magnetic coordinates (mlat, mlon, mlt) usingaacgmv2.
facpy.quiet
Geomagnetic activity selection.
quiet_days(): Returns dates of low activity defined by Kp or Dst.
facpy.geo
Coordinate and spatial tools.
filter_region(): Spatial subsetting.add_local_time(): Computes SLT or MLT (usingaacgmv2) from satellite coordinates and timestamp.
facpy.grid
Aggregation logic.
grid_fac(): Converts track data toxarray.Datasetgrids. Supports multiple statistics (mean, median, std, count).
facpy.ihfac
Interhemispheric analysis.
compare(): Aligns South hemisphere data to North coordinates and computes difference or ratio maps.
facpy.plot
Visualization.
fac_map(): Wrapper around Cartopy for quick, consistent FAC maps.
🧪 Testing
Run the test suite to ensure everything is working correctly:
pytest tests/
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file facpy-0.1.3.tar.gz.
File metadata
- Download URL: facpy-0.1.3.tar.gz
- Upload date:
- Size: 21.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f341898276f6cf4c9a449de9ad6a17af25ecb0680bf9bf52f09d03b17b2c1af
|
|
| MD5 |
faa11c2f22cc2b7b802f170c3a4a4c77
|
|
| BLAKE2b-256 |
ef3dcb917cc50194fd257e5b2387781ac10a6fa9780dcaa235be7a8d3161da3a
|
File details
Details for the file facpy-0.1.3-py3-none-any.whl.
File metadata
- Download URL: facpy-0.1.3-py3-none-any.whl
- Upload date:
- Size: 16.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de078a7e0e612bcdadb064c22002a9499d58271adeefc09ceb327b15525ec0b4
|
|
| MD5 |
df4e2bbb2633d0cea285d1beaf17865d
|
|
| BLAKE2b-256 |
28686e315effca86b0c177facb039577725758aab6f9bcf682a40a4e5e2ce9df
|