skyscapes.disk.exovista_parametric#
ExovistaParametricDisk: Simplified JAX forward model of ExoVista’s disk model.
Reproduces the per-component disk-density formula from ExoVista’s C++
Image::disk_imager (the kernel underlying distribute_diskpoints)
deterministically using the LOS-around-midplane kernel shared with
GraterDisk. Multi-component scenes (warm + cold + halo, etc.) are
built via CompositeDisk.
What’s reproduced (Stark 2022 / Image.cpp):
Vertical Gaussian with constant opening angle
horand per-radius normalization (mass per unit r preserved).
- Four-region radial profile:
r > r0+dr:
exp(-0.5) * (r/(r0+dr))^-1.5(outer halo) |r-r0|<dr:exp(-0.5 (r-r0)^2 / dr^2)(Gaussian ring) r0-dr>r>0: inward decay from Wyatt 1999, eq 3.36,
exp(-0.5) / (1 + 4 eta (1 - sqrt(r/(r0-dr))))r <= rinner: additional
(r/rinner)^3cubic rampThree-component Henyey-Greenstein phase function
sum_i(w_i * HG(g_i)), with scalar(g_i, w_i)parameters.
nzodisdensity scaling (zodi units).1/r^2 stellar illumination dilution (applied by the LOS kernel via division by the squared distance to the star).
What’s intentionally simplified vs the full ExoVista pipeline:
No Dohnanyi grain-size integration weighted by
Qsca(s, lambda). Wavelength dependence is parameterized phenomenologically throughAg_gridinstead.No sublimation cutoff
T < T_sublimate(would need stellar Teff and rstar).No stellar-surface-radius cutoff
r > r_star.
etais treated as a single grain-size-averaged value, not a per-size quantity (the Image.cpptempeta = eta * rdust/rblowproduces a color gradient absent here).
The class is intentionally faithful to the ExoVista parameterization
(r0_AU, dror, rinner_AU, hor, nzodis, eta,
three HG (g_i, w_i)) rather than a smaller user-friendly subset.
CompositeDisk is the right way to build full multi-component scenes.
- References:
Stark, C. C. 2022, AJ, 163, 105
Classes#
ExoVista-style disk component (faithful per-component reproduction). |
Functions#
|
Three-component Henyey-Greenstein phase function. |
|
ExoVista per-component disk density (Image.cpp formula). |
Module Contents#
- skyscapes.disk.exovista_parametric.three_component_hg(cos_phi, g0, g1, g2, w0, w1, w2)[source]#
Three-component Henyey-Greenstein phase function.
pfunc = w0 HG(g0) + w1 HG(g1) + w2 HG(g2). The caller is responsible for choosing weights that sum to 1 (we do not normalize here).- Parameters:
cos_phi (jaxtyping.Array)
g0 (jaxtyping.Array)
g1 (jaxtyping.Array)
g2 (jaxtyping.Array)
w0 (jaxtyping.Array)
w1 (jaxtyping.Array)
w2 (jaxtyping.Array)
- Return type:
jaxtyping.Array
- skyscapes.disk.exovista_parametric.exovista_density(r, z, *, r0_AU, dror, rinner_AU, hor, nzodis, eta)[source]#
ExoVista per-component disk density (Image.cpp formula).
- Args:
r: Disk-frame cylindrical radius [AU]. Must be strictly positive. z: Disk-frame height [AU]. r0_AU: Ring center [AU]. dror: Fractional ring width,
dr = dror * r0_AU. rinner_AU: Inner truncation radius [AU]. Below this, an additional(r/rinner)^3cubic ramp suppresses the density.- hor: Opening angle. The local 1-sigma Gaussian vertical scale at
radius
rish = r * hor.
nzodis: Density normalization (zodi units). eta: Poynting-Robertson drag / collision-timescale ratio for the
inward-decay component.
- Returns:
Per-LOS-sample density (relative units), same shape as
randz. The caller multiplies by phase function and divides by squared distance to the star.
- Parameters:
r (jaxtyping.Array)
z (jaxtyping.Array)
r0_AU (jaxtyping.Array)
dror (jaxtyping.Array)
rinner_AU (jaxtyping.Array)
hor (jaxtyping.Array)
nzodis (jaxtyping.Array)
eta (jaxtyping.Array)
- Return type:
jaxtyping.Array
- class skyscapes.disk.exovista_parametric.ExovistaParametricDisk[source]#
Bases:
skyscapes.disk.base.AbstractDiskExoVista-style disk component (faithful per-component reproduction).
- Attributes (PyTree leaves, fittable):
r0_AU: Ring center radius [AU]. dror: Ring fractional width
Delta r / r0(dimensionless). rinner_AU: Inner truncation radius [AU]; below this the densityis suppressed by
(r/rinner_AU)^3. Set to a value smaller thanrmin_AUto disable.hor: Opening angle (Gaussian vertical scale / radius). nzodis: Density normalization in zodi units. eta: PR-drag / collision-timescale ratio at
r0 - dr. g0, g1, g2: Three-component HG asymmetry parameters. w0, w1, w2: Three-component HG weights. Should sum to 1; notenforced.
rmin_AU: LOS-integration inner bound [AU]. rmax_AU: LOS-integration outer bound [AU]. wavelengths_nm: 1-D wavelength grid for
Ag_grid. Queriesoutside this range return NaN.
Ag_grid: Phenomenological albedo scaling vs wavelength.
- Static attributes:
nx, ny: Output image shape. pixel_scale_arcsec: Pixel scale [arcsec/pixel]. dist_pc: System distance [pc]. n_slices_los: Number of LOS integration slices. n_scale_heights: LOS half-extent in units of the scale height at
rmax_AU(default 6.0).
- r0_AU: jaxtyping.Array#
- dror: jaxtyping.Array#
- rinner_AU: jaxtyping.Array#
- hor: jaxtyping.Array#
- nzodis: jaxtyping.Array#
- eta: jaxtyping.Array#
- g0: jaxtyping.Array#
- g1: jaxtyping.Array#
- g2: jaxtyping.Array#
- w0: jaxtyping.Array#
- w1: jaxtyping.Array#
- w2: jaxtyping.Array#
- rmin_AU: jaxtyping.Array#
- rmax_AU: jaxtyping.Array#
- wavelengths_nm: jaxtyping.Array#
- Ag_grid: jaxtyping.Array#
- _zmax_AU()[source]#
LOS half-extent in disk-frame z, evaluated at the ring center.
For ExoVista-style disks the mass is concentrated near
r0_AU(ring + nearby halo + inward profile), and the radial profile decays asr^-1.5outside. Usingr0_AUrather than the LOS-boundrmax_AUgives an LOS extent matched to where the density actually lives, so per-slice dz scales with the scale height at the ring rather than with the (much larger) LOS-bound.- Return type:
jaxtyping.Array