pg_orrery/docs/src/content/docs/reference/functions-radio.mdx
Ryan Malloy 12292415ab Starlight docs site for pg_orbit v0.2.0
34 MDX pages covering all 57 functions across 7 domains:
satellites (SGP4/SDP4), planets (VSOP87), Moon (ELP2000-82B),
19 planetary moons (L1.2/TASS17/GUST86/MarsSat), stars,
comets, Jupiter radio bursts, and Lambert transfers.

Site structure:
- Getting Started: overview, installation, 5-query quick start
- Guides: 8 domain-specific walkthroughs with workflow translation
- Workflow Translation: side-by-side comparisons with Skyfield,
  JPL Horizons, GMAT, Radio Jupiter Pro, plus SQL patterns
- Reference: all types, functions, operators, body IDs, constants
- Architecture: Hamilton's principles, constant chain of custody,
  observation pipeline, theory-to-code mapping, thread safety
- Performance: verified benchmarks with reproduction methodology

Stack: Astro 5.17 + Starlight 0.37.6, KaTeX math, Mermaid
diagrams, Pagefind search, Caddy production Docker image.
2026-02-16 03:12:41 -07:00

194 lines
6.3 KiB
Plaintext

---
title: "Functions: Radio"
sidebar:
order: 6
---
import { Aside, Tabs, TabItem } from "@astrojs/starlight/components";
Functions for predicting Jupiter decametric radio emissions. Jupiter is the strongest radio source in the solar system after the Sun, producing bursts in the 10-40 MHz range driven by the interaction between Io and Jupiter's magnetosphere. These functions compute the geometric parameters needed to predict when bursts are likely.
---
## io_phase_angle
Computes the orbital phase angle of Io relative to Jupiter's superior conjunction as seen from Earth. The phase angle determines the position of Io in its orbit as projected against Jupiter's disk, which is one of two parameters needed for burst prediction.
### Signature
```sql
io_phase_angle(t timestamptz) → float8
```
### Parameters
| Parameter | Type | Description |
|-----------|------|-------------|
| `t` | `timestamptz` | Evaluation time |
### Returns
Io's orbital phase angle in degrees, range [0, 360).
- **0** = superior conjunction (Io behind Jupiter, as seen from Earth)
- **90** = eastern elongation (Io east of Jupiter)
- **180** = inferior conjunction (Io between Earth and Jupiter)
- **270** = western elongation (Io west of Jupiter)
### Example
```sql
-- Current Io phase angle
SELECT round(io_phase_angle(now())::numeric, 1) AS io_phase;
```
```sql
-- Io phase over the next 24 hours at 30-minute intervals
SELECT t,
round(io_phase_angle(t)::numeric, 1) AS io_phase
FROM generate_series(now(), now() + interval '24 hours', interval '30 minutes') AS t;
```
---
## jupiter_cml
Computes Jupiter's Central Meridian Longitude (CML) in System III (1965.0) as seen from an Earth-based observer. System III is tied to Jupiter's magnetic field rotation (period = 9h 55m 29.711s) and is the standard reference for radio astronomy.
The result is corrected for light travel time between Jupiter and the observer.
### Signature
```sql
jupiter_cml(obs observer, t timestamptz) → float8
```
### Parameters
| Parameter | Type | Description |
|-----------|------|-------------|
| `obs` | `observer` | Observer location on Earth |
| `t` | `timestamptz` | Observation time |
### Returns
Central Meridian Longitude in degrees, range [0, 360). This is the longitude of the Jovian meridian facing the observer at the given time, in System III coordinates.
<Aside type="note">
The CML depends on the observer's position on Earth because it is corrected for light travel time. The difference between two observers on opposite sides of Earth is small (order of 0.01 degrees) but is included for correctness.
</Aside>
### Example
```sql
-- Current Jupiter CML from Boulder
SELECT round(jupiter_cml('40.0N 105.3W 1655m'::observer, now())::numeric, 1) AS cml;
```
```sql
-- CML sweep over one Jupiter rotation (~9h 55m)
SELECT t,
round(jupiter_cml('40.0N 105.3W 1655m'::observer, t)::numeric, 1) AS cml
FROM generate_series(
now(),
now() + interval '9 hours 55 minutes',
interval '10 minutes'
) AS t;
```
---
## jupiter_burst_probability
Computes the probability of detecting a Jupiter decametric radio burst given the current Io phase angle and Jupiter CML. Based on the Carr, Desch & Alexander (1983) source region model.
The function evaluates whether the Io phase and CML fall within one of the known emission source regions and returns a probability between 0 and 1.
### Signature
```sql
jupiter_burst_probability(io_phase float8, cml float8) → float8
```
### Parameters
| Parameter | Type | Unit | Description |
|-----------|------|------|-------------|
| `io_phase` | `float8` | degrees | Io orbital phase angle (output of `io_phase_angle`) |
| `cml` | `float8` | degrees | Jupiter CML System III (output of `jupiter_cml`) |
### Returns
Burst probability as a value from 0.0 to 1.0.
### Source Regions
The Carr model identifies four primary Io-related source regions in the Io phase vs. CML parameter space:
| Source | Io Phase Range | CML Range | Description |
|--------|----------------|-----------|-------------|
| **Io-A** | 195-265 | 200-290 | Strongest Io-related source. Io near western elongation, CML in the 200-290 range. |
| **Io-B** | 75-105 | 95-195 | Second strongest. Io near eastern elongation, CML roughly opposite to Io-A. |
| **Io-C** | 195-265 | 290-10 | Weaker Io-related source. Same Io phase as Io-A but different CML range. |
| **Io-D** | 75-105 | 0-95 | Weakest of the four. Same Io phase as Io-B but CML shifted. |
<Aside type="tip">
Non-Io emissions also occur (sources A, B, C without Io dependency) but are weaker and less predictable. The probability returned by this function reflects the combined Io-dependent likelihood.
</Aside>
### Example
```sql
-- Current burst probability
SELECT round(
jupiter_burst_probability(
io_phase_angle(now()),
jupiter_cml('40.0N 105.3W 1655m'::observer, now())
)::numeric, 3
) AS burst_prob;
```
```sql
-- Find high-probability windows tonight
SELECT t,
round(io_phase_angle(t)::numeric, 1) AS io_phase,
round(jupiter_cml('40.0N 105.3W 1655m'::observer, t)::numeric, 1) AS cml,
round(jupiter_burst_probability(
io_phase_angle(t),
jupiter_cml('40.0N 105.3W 1655m'::observer, t)
)::numeric, 3) AS probability
FROM generate_series(
'2024-06-15 02:00:00+00',
'2024-06-15 10:00:00+00',
interval '5 minutes'
) AS t
WHERE jupiter_burst_probability(
io_phase_angle(t),
jupiter_cml('40.0N 105.3W 1655m'::observer, t)
) > 0.2
ORDER BY probability DESC;
```
```sql
-- Full radio observing plan: combine burst probability with Jupiter visibility
SELECT t,
round(topo_elevation(jup)::numeric, 1) AS jupiter_el,
round(io_phase_angle(t)::numeric, 1) AS io_phase,
round(jupiter_cml('40.0N 105.3W 1655m'::observer, t)::numeric, 1) AS cml,
round(jupiter_burst_probability(
io_phase_angle(t),
jupiter_cml('40.0N 105.3W 1655m'::observer, t)
)::numeric, 3) AS burst_prob
FROM generate_series(
'2024-06-15 02:00:00+00',
'2024-06-15 10:00:00+00',
interval '10 minutes'
) AS t,
planet_observe(5, '40.0N 105.3W 1655m'::observer, t) AS jup
WHERE topo_elevation(jup) > 10
AND jupiter_burst_probability(
io_phase_angle(t),
jupiter_cml('40.0N 105.3W 1655m'::observer, t)
) > 0.1;
```