Skip to main content

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.).
    • Solar Local Time (SLT) calculation.
    • 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+.

# Clone the repository
git clone https://github.com/madvirus-ops/facpy
cd facpy

# Install in editable mode
pip install -e .

# Install optional development dependencies
pip install -e ".[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 Local Time
# Focus on Africa and calculate Solar Local Time
df_africa = geo.filter_region(df, region="africa")
df_africa = geo.add_local_time(df_africa)

# 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, and normalizes column names.

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 from UTC and Longitude.

facpy.grid

Aggregation logic.

  • grid_fac(): Converts track data to xarray.Dataset grids. 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

facpy-0.1.0.tar.gz (19.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

facpy-0.1.0-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file facpy-0.1.0.tar.gz.

File metadata

  • Download URL: facpy-0.1.0.tar.gz
  • Upload date:
  • Size: 19.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for facpy-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d08dec89750c3679f55eaf1eeb4889f55d9f77a54e92a568e31c55252be7aae7
MD5 838591962bcc6d9a03d4b11384c8cce8
BLAKE2b-256 52ecd6b2b51991b17217b81ab766bf978df072eed8613c01997ce60a6ec31446

See more details on using hashes here.

File details

Details for the file facpy-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: facpy-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for facpy-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6bf338d83dc3c9f578908415c7a59c205b88f206ac2a8c6871d8a731714d0aed
MD5 a144faa88d561f882e440ab840e36111
BLAKE2b-256 bbe188ad2d1b93136edd53956375447ce45abb404027eb65f9f6815f125ec86f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page