phase_dispersion_minimization¶
Stellingwerf (1978) phase dispersion minimization: Θ = s²/σ² over a period grid.
| Category | Time series |
| Backend | numpy - implemented here on top of numpy primitives |
| Version | 1.0.0 |
| Reads | - |
| Writes | light_curves.input, periodograms.<output_key>, metrics.pdm_best_period_days, metrics.pdm_theta_min |
The light curve is folded on every trial period of a grid uniform in frequency between 1/period_max and 1/period_min (phase zero at the first observation). Phases are split into n_bins equal bins, repeated n_covers times with a phase offset of 1/(n_bins·n_covers) between sequences — Stellingwerf's (N_b, N_c) structure; (10, 3) and (5, 2) are the usual choices. Θ = s²/σ² compares the pooled within-bin variance to the total variance: ≈ 1 when the fold is wrong, ≪ 1 at the true period. Point uncertainties are not used (the 1978 statistic is unweighted). Regime: period_max should stay well below the time baseline (Θ is meaningless beyond one cycle) and period_min above twice the typical cadence; at least 2·n_bins points are required. Integer multiples of the true period also produce low Θ (a fold on 2P is still coherent) — inspect the Θ curve, and prefer the shortest period among near-equal minima. No significance level is attached because Stellingwerf's F-test is known to be incorrect (Schwarzenberg-Czerny 1997). Metric names assume times in days.
Parameters¶
| Parameter | Default | Required | Description |
|---|---|---|---|
time |
None |
- | List of observation times; omit to use a light curve from the context. |
flux |
None |
- | List of flux values, paired with 'time'. |
uncertainty |
None |
- | Optional list of per-point flux uncertainties. |
light_curve_key |
None |
- | Key in ctx.light_curves to use when time/flux are omitted. |
period_min |
None |
- | Shortest trial period (time units of the curve); null = twice the median cadence. |
period_max |
None |
- | Longest trial period; null = half the time baseline. |
n_periods |
2000 |
- | Number of trial periods, spaced uniformly in frequency. |
n_bins |
10 |
- | N_b — number of phase bins per sequence (Stellingwerf 1978). |
n_covers |
3 |
- | N_c — number of offset bin sequences ('covers'); 1 = plain non-overlapping bins. |
output_key |
'pdm' |
- | Key under which the Θ curve is stored in ctx.periodograms. |
Use it¶
spectro run phase_dispersion_minimization --input spectrum.fits \
--param time=none \
--param flux=none \
--param uncertainty=none \
--param light_curve_key=none \
--param period_min=none \
--param period_max=none \
--param n_periods=2000 \
--param n_bins=10 \
--param n_covers=3 \
--param output_key=pdm
{
"tool": "phase_dispersion_minimization",
"arguments": {
"session_id": "<session_id>",
"params": {
"time": null,
"flux": null,
"uncertainty": null,
"light_curve_key": null,
"period_min": null,
"period_max": null,
"n_periods": 2000,
"n_bins": 10,
"n_covers": 3,
"output_key": "pdm"
}
}
}
Every algorithm is an MCP tool of the same name; describe_algorithm returns
this page's metadata as JSON.
References¶
- Stellingwerf 1978, ApJ 224, 953 — the PDM statistic Θ = s²/σ² with σ² = Σ(x−x̄)²/(N−1) and s² = Σ_j (n_j−1) s_j² / (Σ_j n_j − M) over M overlapping phase samples (N_b bins × N_c covers); Θ ≈ 1 for a wrong period, minimum at the true one.
- Schwarzenberg-Czerny 1997, ApJ 489, 941 — the PDM statistic follows a (incomplete) beta distribution, not the F distribution of the 1978 paper; hence no false-alarm probability is reported here.
Related algorithms¶
box_least_squares- Box least squares transit search (Kovács, Zucker & Mazeh 2002) via astropy.lomb_scargle- Compute a Lomb-Scargle periodogram and report the dominant period.phase_fold- Phase-fold a light curve on a known period.temporal_variance_spectrum- Temporal variance spectrum (Fullerton, Gies & Bolton 1996) of N ≥ 3 line profiles.