Skip to main content

asteroid-spinprops

Overview

asteroid-spinprops is a Python package providing tools to fit SHG1G2 and SOCCA photometric models to sparse asteroid photometry.
It supports multiband modeling, residual analysis and shape, period and pole orientation estimation for small solar system objects.


Installation

Install the package via pip:

pip install asteroid_spinprops

Input column requirements and preprocessing

asteroid_spinprops expects photometric measurements to follow the Fink alert schema.
If your DataFrame uses different column names, they must be renamed to the standard format before analysis.

The package maps common input columns to Fink-style fields:

Expected name Description
cjd Observation time (JD)
cmagpsf PSF magnitude
csigmapsf Magnitude uncertainty
cfid Filter identifier
ra Right ascension (deg)
dec Declination (deg)
Phase Solar phase angle (deg)
Dhelio Heliocentric distance (AU)

Additional columns to be created during preprocessing

The preprocessing step requires the following fields:

  • cmred — Reduced magnitude

    Computed from the heliocentric and observer-centric distances:

$$ \mathrm{cmred} = \mathrm{cmagpsf} - 5\log_{10}!\left(\frac{r,\Delta}{\mathrm{AU}^2}\right) $$

where Obj_Sun_LTC_km = (r) and Range_LTC_km = (\Delta).

  • jd_ltc — Light-time–corrected Julian Date

    First convert MJD → JD (+ 2400000.5), then apply the correction

    $$ JD_\mathrm{ltc} = JD - \frac{\Delta}{c}, $$

    using the one-way light-travel time in days.

pdf.rename(
    columns={
        "Your_JD_column": "cjd",
        "Your_magnitudes_column": "cmagpsf",
        "Your_phase_angle_column": "Phase",
        "Your_RA_column": "ra",
        "Your_Dec_column": "dec",
        "Your_magnitude_uncertainty_column": "csigmapsf",
        "Your_filter_column": "cfid",
    },
    inplace=True,
)

# Add missing columns
pdf["cmred"] = pdf["cmagpsf"] - 5 * np.log10(
    pdf["Observer_SSO_distance_column"] * pdf["Sun_SSO_distance_column"] / (au**2)
)

# LT correction
pdf["cjd"] = pdf["cjd"] + 2400000.5  # MJD to JD
pdf["jd_ltc"] = pdf["cjd"] - pdf["Observer_SSO_distance_column"] / c_kmday  # light time correction

Required inputs

Your input DataFrame must therefore include:

  • time of observation (JD)
  • PSF magnitude and uncertainty
  • filter ID
  • RA, Dec (Degrees)
  • phase angle
  • heliocentric distance (AU)
  • observer-centric distance (AU)

The preprocessing step renames these fields to the Fink schema, computes reduced magnitudes, and applies the light-time correction to the observation timestamps.

Quick Start

import numpy as np
import pandas as pd
from asteroid_spinprops.ssolib import dataprep, periodest, modelfit

# Suppose `pdf` is your initial asteroid DataFrame 
# Ensure all columns are converted to the required single row format.
pdf_s = pd.DataFrame({col: [np.array(pdf[col])] for col in pdf.columns})

# Convert filter IDs to numeric
unique_vals, inv = np.unique(pdf_s["cfid"].values[0], return_inverse=True)
numeric_filter = inv + 1
pdf_s["cfid"].values[0] = numeric_filter

# --- Data cleaning and filtering ---
clean_data, errorbar_rejects = dataprep.errorbar_filtering(data=pdf_s, mlimit=0.7928) # mag limit from the LCDB
clean_data, projection_rejects = dataprep.projection_filtering(data=clean_data)
clean_data, iterative_rejects = dataprep.iterative_filtering(data=clean_data)

# --- Fit SOCCA ---
SOCCA_params = modelfit.get_fit_params(
        data=clean_data,
        flavor="SOCCA",
        shg1g2_constrained=True,
        pole_blind=False,
        period_blind=True,
        period_in=None,
        period_quality_flag=True,
        terminator=True
    )


## --- Or step-by-step --- ##
# --- Fit SHG1G2 model ---
shg1g2_params = modelfit.get_fit_params(
    data=clean_data,
    flavor="SHG1G2",
)

# Compute residuals for period analysis
residuals_dataframe = modelfit.make_residuals_df(
    clean_data, model_parameters=shg1g2_params
)

# --- Estimate rotation period ---
p_in, k_val, p_rms, signal_peak, window_peak = periodest.get_multiterm_period_estimate(
    residuals_dataframe,
    k_free=True,
)

# Assess period robustness via bootstrap resampling
_, Nbs = periodest.perform_residual_resampling(
    resid_df=residuals_dataframe,
    p_min=0.03,
    p_max=2,
    k=int(k_val)
)

# --- Fit SOCCA model ---
SOCCA_params = modelfit.get_fit_params(
    data=clean_data,
    flavor="SSHG1G2",
    shg1g2_constrained=True,
    period_blind=False,
    pole_blind=False,
    period_in=p_in,
    period_quality_flag=False,
    terminator=True
)

Models

Photometric models from Carry et al.(2024) {2024A&A...687A..38C} and https://github.com/astrolabsoftware

Project status

Under development

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asteroid_spinprops-1.5.4.tar.gz (16.9 kB view details)

Uploaded Source

Built Distribution

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

asteroid_spinprops-1.5.4-py3-none-any.whl (17.5 kB view details)

Uploaded Python 3

File details

Details for the file asteroid_spinprops-1.5.4.tar.gz.

File metadata

  • Download URL: asteroid_spinprops-1.5.4.tar.gz
  • Upload date:
  • Size: 16.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.13.13 Linux/7.0.0-28-generic

File hashes

Hashes for asteroid_spinprops-1.5.4.tar.gz
Algorithm Hash digest
SHA256 d65bd495587d6437a510254ee588d14a09ea82e1897feea68cd2c12f1732dd27
MD5 b65ab3df8bd5b9156c4f97a850790314
BLAKE2b-256 bf967ad482139d0d1a6b32b38a4d0f9ca5338650e30edf6c82cb258f2a0ec35f

See more details on using hashes here.

File details

Details for the file asteroid_spinprops-1.5.4-py3-none-any.whl.

File metadata

  • Download URL: asteroid_spinprops-1.5.4-py3-none-any.whl
  • Upload date:
  • Size: 17.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.13.13 Linux/7.0.0-28-generic

File hashes

Hashes for asteroid_spinprops-1.5.4-py3-none-any.whl
Algorithm Hash digest
SHA256 2047eb32a9c18409ee92681fb50861971b95c828ba3c771e1fff059fc8a659fb
MD5 28017bd8312d46031cde93b56490210d
BLAKE2b-256 ee2456da128b25190711ed77541463cfe9678f8d672960e17576ee8b935629e6

See more details on using hashes here.

Release history Release notifications | RSS feed

1.5.6

2 files

1.5.5

2 files

This release

1.5.4 This release

2 files

1.5.3

2 files

1.5.2

2 files

1.5.1

2 files

1.5.0

2 files

1.4.7

2 files

1.4.5

2 files

1.4.4

2 files

1.4.3

2 files

1.4.2

2 files

1.4.1

2 files

1.4.0

2 files

1.3.9

2 files

1.3.8

2 files

1.3.7

2 files

1.3.6

2 files

1.3.5

2 files

1.3.4

2 files

1.3.3

2 files

1.3.2

2 files

1.3.1

2 files

1.3.0

2 files

1.2.5

2 files

1.2.4

2 files

1.2.3

2 files

1.2.2

2 files

1.2.1

2 files

1.2.0

2 files

1.1.2

2 files

1.1.1

2 files

1.0.1

2 files

1.0.0

2 files

0.2.32

2 files

0.2.31

2 files

0.2.30

2 files

0.2.29

2 files

0.2.28

2 files

0.2.27

2 files

0.2.26

2 files

0.2.25

2 files

0.2.24

2 files

0.2.23

2 files

0.2.22

2 files

0.2.21

2 files

0.2.20

2 files

0.2.19

2 files

0.2.18

2 files

0.2.17

2 files

0.2.16

2 files

0.2.15

2 files

0.2.14

2 files

0.2.13

2 files

0.2.11

2 files

0.2.10

2 files

0.2.9

2 files

0.2.8

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page