API
Reference for BroadLineRegions.jl
's public interface.
No methods are exported by default into the global namespace to prevent overlap with other modules, and you must prepend the module name to all methods to access them. BroadLineRegions.jl
exports itself as both BroadLineRegions
and BLR
, so both of these prefixes are equivalent, i.e. BroadLineRegions.model == BLR.model
. If prepending this to function calls annoys you you can always manually import whatever you desire into the global space with syntax like: using BLR: DiskWindModel, cloudModel
Full documentation
BroadLineRegions.DiskWindModel
— MethodDiskWindModel(r̄::Float64, rFac::Float64, α::Float64, i::Float64; rot::Float64=0.0,
nr::Int=128, nϕ::Int=256, scale::Symbol=:log, kwargs...)
Uses the model constructor to create a DiskWind model of the BLR as detailed in Long+2023 and Long+2025.
Parameters
r̄::Float64
: Mean radius of model (in terms of $r_s$)rFac::Float64
: Radius factorα::Float64
: Power-law source function scalingi::Float64
: Inclination angle in radiansrot::Float64=0.0
: Rotation of system plane about z-axis in radiansnr::Int=128
: Number of radial binsnϕ::Int=256
: Number of azimuthal binsscale::Symbol=:log
: Radial binning scale (:log
or:linear
)kwargs...
: Extra keyword arguments for model constructor (see examples)
Returns
model
object
Note
Similar to another DiskWind model constructor but here we pass r̄
, rFac
, and α
.
BroadLineRegions.DiskWindModel
— MethodDiskWindModel(rMin::Float64, rMax::Float64, i::Float64; nr::Int=128, nϕ::Int=256,
I::Function=DiskWindIntensity, v::Function=vCircularDisk, scale::Symbol=:log, kwargs...)
Uses the model constructor to create a DiskWind model of the BLR as detailed in Long+2023 and Long+2025.
Parameters
rMin::Float64
: Minimum radius of model (in terms of $r_s$)rMax::Float64
: Maximum radius of model (in terms of $r_s$)i::Float64
: Inclination angle in radians (all rings have the same inclination)nr::Int=128
: Number of radial binsnϕ::Int=256
: Number of azimuthal binsI::Function=DiskWindIntensity
: Intensity functionv::Function=vCircularDisk
: Velocity functionscale::Symbol=:log
: Radial binning scale (:log
or:linear
)kwargs...
: Extra keyword arguments forI
andv
functions (see examples)
Returns
model
object
Note
Similar to other DiskWind model constructor but must explicitly pass rMin
and rMax
.
BroadLineRegions.cloudModel
— MethodcloudModel(nClouds::Int64; μ::Float64=500., β::Float64=1.0, F::Float64=0.5, rₛ::Float64=1.0, θₒ::Float64=π/2, γ::Float64=1.0, ξ::Float64=1.0, i::Float64=0.0, I::Union{Function,Float64}=IsotropicIntensity, v::Union{Function,Float64}=vCircularCloud, rng::AbstractRNG=Random.GLOBAL_RNG, kwargs...)
Uses the model constructor to create a cloud model of the BLR similar to Pancoast+ 2011 and 2014.
Parameters
nClouds::Int64
: Number of cloudsμ::Float64=500.
: Mean radius of model (in terms of $r_s$)β::Float64=1.0
: Shape parameter for radial distributionF::Float64=0.5
: Minimum fraction of maximum radius where clouds can be placedrₛ::Float64=1.0
: Scale radius (in terms of $r_s$)θₒ::Float64=π/2
: Maximum opening angle of cloud distribution (rad)γ::Float64=1.0
: Disk concentration parameterξ::Float64=1.0
: Fraction of clouds in back side that have not been moved to the front (when ξ = 1.0 clouds equally distributed front - back and when ξ = 0.0 all clouds are on the front side)i::Float64=0.0
: Inclination angle of system (rad)I::Union{Function,Float64}=IsotropicIntensity
: Intensity functionv::Union{Function,Float64}=vCircularCloud
: Velocity functionrng::AbstractRNG=Random.GLOBAL_RNG
: Random number generatorkwargs...
: Extra keyword arguments forI
andv
functions (see examples)
Returns
model
object
Note
Similar to other cloudModel
method but here random values are generated for ϕ₀
, rot
, and θₒ
,i,rot,θ,θₒ,ξ, rₛ=rₛ,μ=μ,β=β,F=F,I=I,v=v,rng=rng;kwargs...) while keeping i
constant for the system.
BroadLineRegions.cloudModel
— MethodcloudModel(ϕ₀::Vector{Float64}, i::Vector{Float64}, rot::Vector{Float64}, θₒ::Vector{Float64},
θₒSystem::Float64, ξ::Float64; rₛ::Float64=1.0, μ::Float64=500., β::Float64=1.0, F::Float64=0.5,
I::Union{Function,Float64}=IsotropicIntensity, v::Union{Function,Float64}=vCircularCloud, kwargs...)
Uses the model constructor to create a cloud model of the BLR similar to Pancoast+ 2011 and 2014.
Parameters
ϕ₀::Vector{Float64}
: Initial azimuthal angle of cloud (rad)i::Vector{Float64}
: Inclination angle (rad)rot::Vector{Float64}
: Random rotation of cloud about z axis (rad)θₒ::Vector{Float64}
: Opening angle of cloud (rad)θₒSystem::Float64
: Maximum opening angle of the system (rad)ξ::Float64
: Fraction of clouds in back side that have not been moved to the front (when ξ = 1.0 clouds equally distributed front - back and when ξ = 0.0 all clouds are on the front side)rₛ::Float64=1.0
: Scale radius (in terms of $r_s$)μ::Float64=500.
: Mean radius of model (in terms of $r_s$)β::Float64=1.0
: Shape parameter for radial distributionF::Float64=0.5
: Beginning radius in units of μ where clouds can be placed.I::Union{Function,Float64}=IsotropicIntensity
: Intensity functionv::Union{Function,Float64}=vCircularCloud
: Velocity functionkwargs...
: Extra keyword arguments forI
andv
functions (see examples)
Returns
model
object
Note
Similar to other cloudModel
method but here you must explicitly pass ϕ₀
, i
, rot
, and θₒ
.
BroadLineRegions.camera
— Typecamera
Camera coordinates struct.
Fields
α::Union{Vector{Float64}, Matrix{Float64}}
: x values in the camera planeβ::Union{Vector{Float64}, Matrix{Float64}}
: y values in the camera planeraytraced::Bool
: whether the camera has been used to raytrace the model
BroadLineRegions.model
— Typemodel
A mutable structure to hold many rings and their parameters that model the BLR.
Fields
rings::Vector{ring}
: List of ring objects, seering
structprofiles::Union{Nothing,Dict{Symbol,profile}}
: Dictionary of profiles (seeprofile
struct) with keys as symbols; optional, usually initialized to empty dictionary and filled in withsetProfile!
camera::Union{Nothing,camera}
: Camera coordinates (α,β) corresponding to each ring used to generate images and in raytracing, seecamera
structsubModelStartInds::Vector{Int}
: Indices of start of each submodel in list of rings; used to separate out submodels for raytracing or for the recovery of individual models after being combined
Constructors
model(rings::Vector{ring}, profiles::Union{Nothing,Dict{Symbol,profile}}, camera::Union{Nothing,camera}, subModelStartInds::Vector{Int})
- the most flexible constructor, takes in user supplied vector of
ring
objects, optional dictionary of profiles, optional camera coordinates, and vector of indices for submodels
model(rings::Vector{ring{Vector{Float64},Float64}})
- cloud model constructor, takes in a vector of ring objects that are each points in space and returns a model object with camera coordinates calculated from the physical parameters of each ring
model(rMin::Float64, rMax::Float64, i::Float64, nr::Int, nϕ::Int, I::Function, v::Function, scale::Symbol; kwargs...)
- disk-wind model constructor, takes in minimum and maximum radius, inclination angle, number of radial and azimuthal bins, intensity and velocity functions, and scale for radial binning; returns a model object with rings generated from these parameters
model(r̄::Float64, rFac::Float64, Sα::Float64, i::Float64, nr::Int, nϕ::Int, scale::Symbol; kwargs...)
- disk-wind model constructor, takes in average radius, radius scaling factor, power law for source function, inclination angle, number of radial and azimuthal bins, and scale for radial binning; returns a model object with rings generated from these parameters
BroadLineRegions.profile
— Typeprofile
A struct to hold binned data, usually bound to model struct with profiles.jl#setProfile!
.
Fields
name::Symbol
: Name of profilebinCenters::Vector{Float64}
: Bin centersbinEdges::Vector{Float64}
: Bin edgesbinSums::Vector{Float64}
: Sum of values in each bin (crude integral over bin)
BroadLineRegions.ring
— Typering{V,F} <: AbstractRing{V,F}
A mutable structure to hold parameters of each model ring, where the "ring" is a circle in the camera plane observing the BLR.
Fields
r
: Distance from central mass (in terms of $r_s$)Union{Vector{Float64}, Float64, Function}
- Can be a single value for constant radius, or vector corresponding to azimuthal angles
- Can be a function returning
Vector{Float64}
orFloat64
i
: Inclination angle in radiansUnion{Vector{Float64}, Float64}
- Must be between 0 and $\pi/2$, with 0 being face-on and $\pi/2$ being edge-on
rot
: Rotation of system plane about z-axis in radiansUnion{Vector{Float64}, Float64}
θₒ
: Opening angle of ring in radiansUnion{Vector{Float64}, Float64}
- Should be between 0 and $\pi/2$
v
: Line of sight velocityUnion{Vector{Float64}, Float64, Function}
- Can be a function that calculates velocity from other parameters
I
: IntensityUnion{Vector{Float64}, Float64, Matrix{Float64}, Function}
- Can be a function that calculates intensity from other parameters
ϕ
: Azimuthal angle in radiansUnion{Vector{Float64}, Float64}
ϕ₀
: Initial azimuthal angle before rotation in radiansUnion{Vector{Float64}, Float64}
- Defaults to 0.0 if not provided or if
rot
is 0.0
ΔA
: Projected area of each ring element in imageUnion{Vector{Float64}, Float64}
- Used in calculating profiles
reflect
: Whether cloud is reflected across disk mid-planeUnion{Bool, Array{Bool,}}
τ
: Optical depthUnion{Vector{Float64}, Float64, Function}
η
: Response parameter for reverberationUnion{Vector{Float64}, Float64, Function}
Δr
: Distance between camera pixels in rFloat64
Δϕ
: Distance between camera pixels in ϕFloat64
scale
: Encoding for camera ring scalingUnion{Nothing, Symbol}
:log
or:linear
scale
Constructor
ring(; r, i, v, I, ϕ, rot=0.0, θₒ=0.0, ϕ₀=0.0, ΔA=1.0, reflect=false,
τ=0.0, η=1.0, Δr=1.0, Δϕ=1.0, scale=nothing, kwargs...)
Required parameters:
r
,i
,v
,I
,ϕ
Optional parameters with defaults:
rot=0.0
,θₒ=0.0
,ϕ₀=0.0
,ΔA=1.0
,reflect=false
,τ=0.0
,η=1.0
,Δr=1.0
,Δϕ=1.0
,scale=nothing
Additional keyword arguments are passed to the r
, v
, I
, and τ
functions if they are provided as functions.
BroadLineRegions.drawCloud
— MethoddrawCloud(;μ::Float64=500.,β::Float64=1.0,F::Float64=0.5,
ϕ₀::Float64=0.0,i::Float64=π/4,rot::Float64=0.0,rₛ::Float64=1.0,
θₒ::Float64=0.0,θₒSystem::Float64=0.0,I::Union{Function,Float64}=IsotropicIntensity,
v::Union{Function,Float64}=vCircularCloud,ξ::Float64=1.0,
rng::AbstractRNG=Random.GLOBAL_RNG,kwargs...)
Generates a model ring
struct for a single cloud drawn from a thick disk-like structure with parameters defined by the input arguments similar to Pancoast+ 2011 and 2014.
Arguments:
μ::Float64=500.
: Mean radius of model (in terms of $r_s$)β::Float64=1.0
: Shape parameter for radial distributionF::Float64=0.5
: Beginning radius in units of μ where clouds can be placed.ϕ₀::Float64=0.0
: Initial azimuthal angle of cloud (rad)i::Float64=π/4
: Inclination angle (rad)rot::Float64=0.0
: Random rotation of cloud about z axis (rad)rₛ::Float64=1.0
: Scale radius (in terms of $r_s$)θₒ::Float64=0.0
: Opening angle of cloud (rad)θₒSystem::Float64=0.0
: Maximum opening angle of the system (rad)ξ::Float64=1.0
: Fraction of clouds in back side that have not been moved to the front (when ξ = 1.0 clouds equally distributed front - back and when ξ = 0.0 all clouds are on the front side)I::Union{Function,Float64}=IsotropicIntensity
: Intensity function/valuev::Union{Function,Float64}=vCircularCloud
: Velocity function/valuekwargs...
: Extra keyword arguments forI
andv
functions (see examples)
Returns:
A model ring
struct representing the properties of the cloud.
BroadLineRegions.getG
— MethodgetG(β::Float64)
Returns a Gamma distribution with parameters derived from the input parameter β
as in Pancoast+ 2014 equation 12.
BroadLineRegions.getGamma
— MethodgetGamma(;μ::Float64,β::Float64,F::Float64)
Returns a Gamma distribution with parameters derived from the input parameters as in Pancoast+ 2014 equations 7-10.
BroadLineRegions.getR
— FunctiongetR(rₛ::Float64,γ::Gamma{Float64},rng::AbstractRNG=Random.GLOBAL_RNG)
Returns a random number drawn from the Gamma distribution γ
and shifted by rₛ
.
BroadLineRegions.getR
— FunctiongetR(rₛ::Float64,μ::Float64,β::Float64,F::Float64,
g::Gamma{Float64},rng::AbstractRNG=Random.GLOBAL_RNG)
Returns the radius r
calculated using Pancoast+ 2014 equation 12, where g
is a Gamma distribution and a random number is drawn from it.
BroadLineRegions.getR
— MethodgetR(rₛ::Float64,μ::Float64,β::Float64,F::Float64,g::Float64)
Returns the radius r
calculated using Pancoast+ 2014 equation 12, where g
is already set.
Base.:+
— MethodBase.:+(m1::model, m2::model) combines two models by concatenating their rings and camera parameters.
Create a new model with the combined rings and camera parameters, and updates the subModelStartInds accordingly.
Base.getindex
— MethodBase.getindex(m::model, i::Int)
Retrieves the i-th submodel from the model m
.
BroadLineRegions.DiskWindIntensity
— MethodDiskWindIntensity(;r::Union{Vector{Float64},Float64}, i::Float64, ϕ::Union{Vector{Float64},Float64},
f1::Float64, f2::Float64, f3::Float64, f4::Float64, α::Float64, rMin::Float64 = 0.0, rMax::Float64 = Inf, _...)
Calculates the intensity from a disk-wind model of the BLR following the prescription given in Long+ 2023 and 2025, similar to Chiang and Murray 1996 and 1997, assumes optically thick line emission limit (Sobolev).
Arguments:
- r::Union{Vector{Float64},Float64} - radius from central mass (in terms of rₛ)
- i::Float64 - inclination angle (rad)
- ϕ::Union{Vector{Float64},Float64} - list of azimuthal angles (rad)
- f1::Float64 - strength of radial velocity gradient $\mathrm{d}v_{r}/\mathrm{d}r$
- f2::Float64 - strength of Keplerian shear velocity gradient $\mathrm{d}v_{\phi}/\mathrm{d}r$
- f3::Float64 - strength of radial lifting velocity gradient $\mathrm{d}v_{\theta}/\mathrm{d}r$
- f4::Float64 - strength of vertical lifting velocity gradient $\mathrm{d}v_{\theta}/\mathrm{d}\theta$ (equivalent to isotropic emission)
- α::Float64 - power-law index of the source function $S(r) \propto r^{-\alpha}$
- rMin::Float64 - minimum radius to consider (default: 0.0)
- rMax::Float64 - maximum radius to consider (default: Inf)
Returns:
- intensity (arbitrary units) as a Vector{Float64}
BroadLineRegions.DiskWind_I_
— MethodDiskWind_I_(r::Float64, ϕ::Float64, i::Float64, f1::Float64, f2::Float64, f3::Float64, f4::Float64, α::Float64)
Same as DiskWind_I_(r::Vector{Float64}, ϕ::Vector{Float64}, i::Float64, f1::Float64, f2::Float64, f3::Float64, f4::Float64, α::Float64)
but for a single radius r
and a single azimuthal angle ϕ
.
BroadLineRegions.DiskWind_I_
— MethodDiskWind_I_(r::Float64, ϕ::Vector{Float64}, i::Float64, f1::Float64, f2::Float64, f3::Float64, f4::Float64, α::Float64)
Same as DiskWind_I_(r::Vector{Float64}, ϕ::Vector{Float64}, i::Float64, f1::Float64, f2::Float64, f3::Float64, f4::Float64, α::Float64)
but for a single radius r
and a vector of azimuthal angles ϕ
.
BroadLineRegions.DiskWind_I_
— MethodDiskWind_I_(r::Vector{Float64}, ϕ::Float64, i::Float64, f1::Float64, f2::Float64, f3::Float64, f4::Float64, α::Float64)
Same as DiskWind_I_(r::Vector{Float64}, ϕ::Vector{Float64}, i::Float64, f1::Float64, f2::Float64, f3::Float64, f4::Float64, α::Float64)
but for a vector of radii r
and a single azimuthal angle ϕ
.
BroadLineRegions.DiskWind_I_
— MethodDiskWind_I_(r::Vector{Float64}, ϕ::Vector{Float64}, i::Float64, f1::Float64, f2::Float64, f3::Float64, f4::Float64, α::Float64)
Calculates the intensity of the disk wind at radius r from the central mass and inclined at angle i (rad) over grid of azimuthal angles ϕ (rad) Follows the prescription given in Long+ 2023 and 2025, similar to Chiang and Murray 1996 and 1997, assumes optically thick line emission limit
Arguments:
- r::Vector{Float64} - radius from central mass (in terms of rₛ)
- ϕ::Vector{Float64} - list of azimuthal angles (rad)
- i::Float64 - inclination angle (rad)
- f1::Float64 - strength of radial velocity gradient dvᵣ/dr
- f2::Float64 - strength of Keplerian shear dvϕ/dr
- f3::Float64 - strength of velocity gradient dvθ/dr
- f4::Float64 - strength of velocity gradient dvθ/dθ (or isotropic emission)
- α::Float64 - power-law index of the source function S(r) ∝ r^(-α)
Returns:
- intensity (arbitrary units) as a Vector{Float64}
BroadLineRegions.IsotropicIntensity
— MethodIsotropicIntensity(;r::Union{Vector{Float64},Float64}, ϕ::Union{Vector{Float64},Float64},
rescale::Float64=1.0, rMin::Float64 = 0.0, rMax::Float64 = Inf, _...)
Returns a constant intensity value at all radii and azimuthal angles, rescaled by rescale
factor.
BroadLineRegions.IϕCloudMask
— MethodIϕCloudMask(;r::Float64, ϕ::Float64, θₒ::Float64, ϕ₀::Float64, rot::Float64, i::Float64, κ::Float64=0.0,
ϕMin::Float64, ϕMax::Float64, overdense::Bool=false, _...)
Calculates the intensity using cloudIntensity
but with an extra layer of masking based on azimuthal angle ϕ
and the specified range [ϕMin, ϕMax]
. If ϕ
is outside this range, the intensity is set to 0.0. If overdense is true
, the intensity is multiplied by 2.0 to account for the "lost" cloud and thus preserve total intensity in the model.
BroadLineRegions.IϕDiskWindMask
— MethodIϕDiskWindMask(;r::Union{Vector{Float64},Float64}, ϕ::Union{Vector{Float64},Float64}, i::Float64,
f1::Float64, f2::Float64, f3::Float64, f4::Float64, α::Float64, ϕMin::Float64, ϕMax::Float64, _...)
Calculates the intensity using DiskWindIntensity
but with an extra layer of masking based on azimuthal angle ϕ
and the specified range [ϕMin, ϕMax]
. If ϕ
is outside this range, the intensity is set to 0.0.
BroadLineRegions.cloudIntensity
— MethodcloudIntensity(;r::Float64, ϕ::Float64, θₒ::Float64, ϕ₀::Float64, rot::Float64, i::Float64, κ::Float64=0.0, _...)
Calculate the intensity of the cloud at radius r
from the central mass and inclined at angle i
(rad) over grid of azimuthal angles ϕ
(rad) following Pancoast+ 2011 and 2014.
Arguments
r::Float64
: radius from central mass (in terms of r₍ₛ₎)ϕ::Float64
: azimuthal angle (rad)θₒ::Float64
: opening angle of cloudϕ₀::Float64
: initial azimuthal anglerot::Float64
: rotation anglei::Float64
: inclination angleκ::Float64
: anisotropy parameter
Returns
- Intensity (arbitrary units) as a
Float64
BroadLineRegions.vCirc
— FunctionvCirc(r::Float64, rₛ::Float64=1.0)
Calculate circular velocity at radius r
from central mass, with Schwarzschild radius rₛ
.
Defaults to rₛ=1.0
for unitless calculations.
BroadLineRegions.vCircularCloud
— MethodvCircularCloud(;r::Float64, ϕ₀::Float64, i::Float64, rot::Float64, θₒ::Float64, rₛ::Float64=1.0, reflect::Bool=false, _...)
Calculate line of sight velocity for cloud in 3D space.
Arguments
r::Float64
: radius from central mass (in terms ofrₛ
)ϕ₀::Float64
: starting azimuthal angle in ring plane (rad)i::Float64
: inclination angle of ring plane (rad)rot::Float64
: rotation of system plane about z axis (rad)θₒ::Float64
: opening angle of pointrₛ::Float64=1.0
: Schwarzschild radius (optional, to convert to physical units)reflect::Bool=false
: whether the point is reflected across the midplane of the disk_...
: extra kwargs, ignored
Returns
- Line of sight velocity (
Float64
)
BroadLineRegions.vCircularDisk
— MethodvCircularDisk(;r::Union{Float64,Vector{Float64}}, i::Float64, ϕ::Union{Vector{Float64},Float64}, rₛ=1.0, _...)
Calculate line of sight velocity for circular orbit at radius r
from central mass and inclined at angle i
(rad) over grid of azimuthal angles ϕ
(rad).
BroadLineRegions.vCircularRadialDisk
— MethodvCircularRadialDisk(;r::Union{Float64,Vector{Float64}}, i::Float64, ϕ::Union{Vector{Float64},Float64},
vᵣFrac::Union{Vector{Float64},Float64}=0.0, inflow::Union{Vector{Bool},Bool}=true, rₛ=1.0, _...)
Calculate line of sight velocity for circular orbit at radius r
from central mass and inclined at angle i
(rad) over grid of azimuthal angles ϕ
(rad) with radial inflow/outflow.
BroadLineRegions.vCloudTurbulentEllipticalFlow
— MethodvCloudTurbulentEllipticalFlow(;σρᵣ::Float64, σρc::Float64, σΘᵣ::Float64, σΘc::Float64,
θₑ::Float64, fEllipse::Float64, fFlow::Float64, σₜ::Float64, r::Float64,
i::Float64, rot::Float64, θₒ::Float64, rₛ::Float64=1.0, ϕ₀::Float64=0.0,
reflect::Bool=false, rng::AbstractRNG=Random.GLOBAL_RNG, _...)
Calculate line of sight velocity for cloud in 3D space with potential for elliptical orbital velocities, in/outflow, and turbulence as in Pancoast+14.
Arguments
σρᵣ::Float64
: Radial standard deviation around radial orbitsσρc::Float64
: Radial standard deviation around circular orbitsσΘᵣ::Float64
: Angular standard deviation around radial orbitsσΘc::Float64
: Angular standard deviation around circular orbitsθₑ::Float64
: Angle in vϕ-vr planefEllipse::Float64
: Fraction of elliptical orbitsfFlow::Float64
: If < 0.5, inflow, otherwise, outflowσₜ::Float64
: Standard deviation of turbulent velocityr::Float64
: Radius from central mass (in terms ofrₛ
)i::Float64
: Inclination angle of ring plane (rad)rot::Float64
: Rotation of system plane about z axis (rad)θₒ::Float64
: Opening angle of pointrₛ::Float64=1.0
: Schwarzschild radius (optional, to convert to physical units)ϕ₀::Float64=0.0
: Starting azimuthal angle in ring plane (rad)reflect::Bool=false
: Whether the point is reflected across the midplane of the diskrng::AbstractRNG=Random.GLOBAL_RNG
: Random number generator_...
: Extra kwargs, ignored
Returns
- Line of sight velocity (
Float64
)
BroadLineRegions.binModel
— FunctionbinModel(bins::Union{Int,Vector{Float64}}=100; m::model, yVariable::Union{String,Symbol,Function},
xVariable::Union{String,Symbol,Function}=:v, kwargs...)
binModel(bins::Vector{Float64}, dx::Array{Float64,}; m::model, yVariable::Union{String,Symbol,Function},
xVariable::Union{String,Symbol,Function}=:v, kwargs...)
Bin the model into a histogram, where each bin is the integrated value of the yVariable as a function of the xVariable.
Arguments
m::model
: Model object to binyVariable::Union{String,Symbol,Function}
: Variable to bin- Must be valid attribute of
model.rings
(e.g.:I
,:v
,:r
,:e
,:i
,:ϕ
) or a function that can be applied tomodel.rings
- Example: Keplerian disk time delays could be calculated like
t(ring) = ring.r*(1 .+ sin.(ring.ϕ).*ring.i))
- Must be valid attribute of
bins::Union{Int,Vector{Float64}}
: Number of bins or bin edges for binning- If
Int
: Number of bins with edges equally spaced between min/max of xVariable - If
Vector{Float64}
: Specific bin edges, with number of bins =length(bins)-1
- Left edge inclusive, right edge exclusive (except last bin which is inclusive)
- If
xVariable::Union{String,Symbol,Function}=:v
: Variable to bin over- Must be a valid attribute of
model.rings
or a function that can be applied tomodel.rings
- Must be a valid attribute of
dx::Array{Float64,}
: Integration element for each bin- If provided, used as the associated integral element
- Otherwise defaults to
ΔA
in each ring struct
Returns
Tuple{Vector{Float64},Vector{Float64},Vector{Float64}}
: A tuple containing:binEdges
: Bin edges for the xVariable of the histogrambinCenters
: Bin centers for the xVariableyBinned
: Binned values of the yVariables
BroadLineRegions.binnedSum
— MethodbinnedSum(x::Array{Float64,}, y::Array{Float64, }; bins=100,
overflow=false, centered=false, minX=nothing, maxX=nothing)
Bin the x and y variables into a histogram, where each bin is the sum of the y values for the corresponding x values.
Arguments
x::Array{Float64,}
: x variable to bin overy::Array{Float64,}
: y variable to binbins::Union{Int,Vector{Float64}}=100
: Number of bins or bin edges for binning- If
Int
: Number of bins with edges equally spaced between min/max of x - If
Vector{Float64}
: Specific bin edges, with number of bins =length(bins)-1
- Left edge inclusive, right edge exclusive (except last bin which is inclusive)
- If
overflow::Bool=false
: Iftrue
, include values outside bin range in the first/last binscentered::Bool=false
: Iftrue
, shift bin edges to center around middle valueminX::Union{Float64,Nothing}=nothing
: Minimum value of x for binning (defaults tominimum(x)
)maxX::Union{Float64,Nothing}=nothing
: Maximum value of x for binning (defaults tomaximum(x)
)
Returns
Tuple{Vector{Float64},Vector{Float64},Vector{Float64}}
: A tuple containing:binEdges
: Bin edges for the x variablebinCenters
: Bin centers for the x variableresult
: Binned sums of the y variable
BroadLineRegions.getProfile
— MethodgetProfile(m::model, name::Union{String,Symbol,Function};
bins::Union{Int,Vector{Float64}}=100,
dx::Union{Array{Float64,},Nothing}=nothing, kwargs...)
Return a profile for the model based on the specified name.
Arguments
m
: Model object to get the profile fromname
: Name of the profile to get. Options include::line
: Returns the line profile (integrated intensity as function of velocity):delay
: Returns the delay profile (mean delays weighted by intensity/responsivity vs. velocity):r
: Returns the mean radius (weighted by intensity) as function of velocity:ϕ
: Returns the mean azimuthal angle (weighted by intensity) as function of velocity:phase
: Returns the phase profile (integrated phase as function of velocity)- Requires
U
[Mλ],V
[Mλ],PA
[rad], andBLRAng
[rad] as keyword arguments
- Requires
Function
: Returns the intensity weighted mean of this function vs. velocity
bins
: Number of bins or bin edges for binning- If
Int
: Number of bins with edges equally spaced between min/max velocity - If
Vector{Float64}
: Specific bin edges, with number of bins =length(bins)-1
- Left edge inclusive, right edge exclusive (except last bin which is inclusive)
- If
dx
: Integration element for each ring (defaults toΔA
in each ring struct ifnothing
)- Additional
kwargs
passed tobinModel
include:overflow=true
: Include overflow binscentered=true
: Center bins around 0.0minX
,maxX
: Set min/max bin boundaries
Returns
profile
: A profile object containing bin edges, bin centers, and binned sums. Assign to a model object usingsetProfile!
to store the profile in the model.
BroadLineRegions.phase
— Methodphase(m::model; U, V, PA, BLRAng, returnAvg=false, offAxisInds=nothing, kwargs...)
Calculate differential phase signal for a model based on specified baselines, model orientation, and BLR angular size.
Arguments
m::model
: Model object to calculate phase forU::Vector{Float64}
: U component of complex visibility in [Mλ]V::Vector{Float64}
: V component of complex visibility in [Mλ]PA::Float64
: On-sky position angle of the model in radiansBLRAng::Float64
: Characteristic size of the BLR model in radians (conversion from $r_s$ to radians)returnAvg::Bool=false
: Iftrue
, returns the average phase across all baselinesoffAxisInds::Union{Nothing,Vector{Int}}=nothing
: If provided, only calculates phase for baselines at specified indices
Returns
- If
returnAvg=true
:Tuple{Vector{Float64},Vector{Float64},Vector{Float64}}
containing:- Bin edges for velocity
- Bin centers for velocity
- Average differential phase (in radians)
- If
returnAvg=false
:Vector{Tuple{Vector{Float64},Vector{Float64},Vector{Float64}}}
containing:- For each baseline, a tuple of bin edges, bin centers, and differential phase
The differential phase is calculated by integrating the phase over the model at each velocity bin, weighted by the intensity and area of each ring element.
BroadLineRegions.setProfile!
— MethodsetProfile!(m::model, p::profile; overwrite::Bool=false)
Set a profile in the model's profiles dictionary. If the profile already exists and overwrite is false, a warning is issued.
BroadLineRegions.t
— Methodt(ring::ring, subFxn::Function=tDisk)
Calculate time delays for a point in a disk or cloud using a custom function subFxn
that takes a ring
struct.
It is more peformant to pass the function directly rather than figure it out on the fly if known ahead of time.
BroadLineRegions.t
— Methodt(ring::ring)
Calculate time delays for a point in a disk as `` t = \eta r \left(1 + \cos(\phi) \sin(i)\right)`` or a cloud with opening angle ``\theta_o``
as the x-coordinate of the point subtracted from the radial distance of the point ``t = r - x``.
BroadLineRegions.tCloud
— MethodtCloud(ring::ring)
Calculate time delays for a cloud with opening angle ``\theta_o`` as the x-coordinate of the point subtracted from the radial distance of the point ``t = r - x``.
BroadLineRegions.tDisk
— MethodtDisk(ring::ring)
Calculate time delays for a point in a disk as `` t = \eta r \left(1 - \cos(\phi) \sin(i)\right)``
BroadLineRegions.getΨ
— MethodgetΨ(m::model,vEdges::Array{Float64},tEdges::Array{Float64})
Calculate the 2D transfer function Ψ for a model m
over specified velocity and time bins, whose edges are given by vEdges
and tEdges
.
BroadLineRegions.getΨ
— MethodgetΨ(m::model,vBins::Int64,tBins::Int64)
Calculate the 2D transfer function Ψ for a model m
over specified number of velocity bins vBins
and time bins tBins
. The velocity and time edges are automatically calculated based on the minimum and maximum values for velocity and delays in the model.
BroadLineRegions.getΨt
— FunctiongetΨt(m::model,tEdges::Array{Float64},overflow::Bool=false;)
Calculate the 1D transfer function Ψ(t) for a model m
over specified time edges tEdges
. The overflow
parameter determines whether to include contributions from delays outside the specified edges in the edge bins.
BroadLineRegions.getΨt
— FunctiongetΨt(m::model,tBins::Int64,maxT::Float64=Inf,overflow::Bool=false)
Calculate the 1D transfer function Ψ(t) for a model m
over specified number of time bins tBins
. The maxT
parameter specifies the maximum time delay to consider, and overflow
determines whether to include contributions from delays outside the specified edges in the edge bins.
BroadLineRegions.response
— Methodresponse(r::Float64; ηₒ::Float64=0.5, η₁::Float64=0.5, αRM::Float64=0.0, rNorm::Float64=1.0, _...)
Calculate response function for use in reverberation mapping calculations.
BroadLineRegions.photograph
— Functionphotograph(r::Float64, ϕ₀::Float64, i::Float64, rot::Float64, θₒ::Float64, reflect::Bool=false)
Calculate the image coordinates from system coordinates r, ϕ + inclination angle i.
Arguments
r::Float64
: radius from central mass (in terms of rₛ)ϕ₀::Float64
: unrotated azimuthal angle in ring plane (rad)i::Float64
: inclination angle of ring plane (rad)rot::Float64
: rotation of system plane about z axis (rad)θₒ::Float64
: ring opening anglereflect::Bool=false
: whether the point is reflected across the midplane of the disk
Returns
α::Float64
: image x coordinate (in terms of rₛ)β::Float64
: image y coordinate (in terms of rₛ)
Note
This function is coordinate photography only. To visualize models, see Image
.`
BroadLineRegions.raytrace!
— Methodraytrace!(m::model; IRatios::Union{Float64,Array{Float64,}}=1.0,
τCutOff::Float64=1.0, raytraceFreeClouds::Bool=false)
Perform raytracing for a model, combining overlapping components along line of sight.
This function not very performant and can take a long time to combine large models. Consider using removeDiskObscuredClouds!
for simple disk obscuration removal if you do not need full raytracing.
This function should be called after combining all relevant models (i.e. mCombined = m1 + m2 + m3...
). It performs raytracing in discrete steps (no absorption, only adding intensity in chunks along the line of sight until maximum optical depth τ
is reached) and generates a new model object with extraneous points removed. Note that this function will mutate the input model objects.
Arguments
m::model
: Model to raytraceIRatios::Union{Float64,Array{Float64,}}=1.0
: Intensity ratios for each submodel- If
Float64
, applies to all submodels equally - If array, applies to each submodel individually (must match number of submodels)
- Used when combining models with different intensity functions if they aren't properly normalized
- If
τCutOff::Float64=1.0
: Maximum optical depth to raytrace to (stops whenτ > τCutOff
)raytraceFreeClouds::Bool=false
: Whether to raytrace free clouds (cloud-cloud raytracing)- If
false
, clouds are only raytraced if they overlap with a continuous model - If
true
, clouds will be checked for overlap with other clouds and raytraced accordingly
- If
Returns
m::model
: Model with raytraced points
BroadLineRegions.raytrace
— Methodraytrace(α::Float64, β::Float64, i::Float64, rot::Float64, θₒPoint::Float64)
Calculate where ray traced back from camera coordinates α
and β
intersects the system (assumes circular geometry).
Arguments
α::Float64
: image x coordinate (in terms of rₛ)β::Float64
: image y coordinate (in terms of rₛ)i::Float64
: inclination angle of system (rad)rot::Float64
: how the point was rotated about z axis (rad)θₒPoint::Float64
: opening angle of current point
Returns
r::Float64
: distance from central mass (in terms of rₛ)ϕ::Float64
: azimuthal angle of system ring plane at intersectionϕ₀::Float64
: original azimuthal angle in ring plane (no rotation)
Note
This function is coordinate raytracing only. To raytrace models and combine intensities, see raytrace!
.
BroadLineRegions.raytrace
— Methodraytrace(α::Float64, β::Float64, i::Float64, rot::Float64, θₒPoint::Float64,
r3D::Matrix{Float64}, xyz::Vector{Float64}, matBuff::Matrix{Float64},
colBuff::Vector{Float64})
Performant version of raytrace
function – calculate where ray traced back from camera coordinates α
, β
intersects the system (assumes circular geometry).
Arguments
α::Float64
: image x coordinate (in terms of rₛ)β::Float64
: image y coordinate (in terms of rₛ)i::Float64
: inclination angle of system (rad)rot::Float64
: rotation of current point about z axis (rad)θₒPoint::Float64
: opening angle of current pointr3D::Matrix{Float64}
: matrix that rotates system plane into XY planexyz::Vector{Float64}
: preallocated xyz vector (but not precalculated)matBuff::Matrix{Float64}
: preallocated buffer matrix for storing result of 3x3 matrix multiplicationcolBuff::Vector{Float64}
: preallocated buffer vector for storing final matrix multiplication result
Returns
r::Float64
: distance from central mass (in terms of rₛ)ϕ::Float64
: azimuthal angle of system ring plane at intersectionϕ₀::Float64
: original azimuthal angle in ring plane
Note
This function is coordinate raytracing only. To raytrace models and combine intensities, see raytrace!
.
BroadLineRegions.removeDiskObscuredClouds!
— FunctionremoveDiskObscuredClouds!(m::model, rotate3D::Function=rotate3D)
Remove clouds that are obscured by the disk.
Performs simple raytracing for an optically thick obscuring disk. The function modifies the input model by removing cloud points that are obscured by the disk. Note that this is a mutating operation and the input model will be modified in place.
Arguments
m::model
: Model to remove disk obscured clouds. Should be a combined model consisting of a disk component and a cloud component.rotate3D::Function=rotate3D
: Function to rotate coordinates in 3D space
Returns
m::model
: Model with disk obscured clouds removed
See also
zeroDiskObscuredClouds!
: Function to zero out disk obscured clouds instead of removing them
BroadLineRegions.zeroDiskObscuredClouds!
— MethodzeroDiskObscuredClouds!(m::model; diskCloudIntensityRatio::Float64=1.0, rotate3D::Function=rotate3D)
Zero out the intensities of clouds that are obscured by the disk.
Performs simple raytracing for an optically thick obscuring disk. The function modifies the input model by setting the intensity of obscured cloud points to zero and adjusting the disk intensity according to the specified ratio.
Arguments
m::model
: Model to zero out disk obscured clouds. Should be a combined model consisting of a disk component and a cloud component.diskCloudIntensityRatio::Float64=1.0
: Ratio of disk to cloud intensity, used to scale the disk intensities after zeroing out cloudsrotate3D::Function=rotate3D
: Function to rotate coordinates in 3D space
Returns
m::model
: Model with disk obscured clouds zeroed out
See also
removeDiskObscuredClouds!
: Function to remove disk obscured clouds instead of zeroing them out
BroadLineRegions.addGrid!
— FunctionaddGrid!(m::model, colors=nothing, nϕ::Int=64)
Add a grid to the model image plot - mostly a debugging tool to visualize grid cells of overlapping models.
Arguments
m::model
: Model object to add grid tocolors=nothing
: Vector of colors for each submodel (ifnothing
, uses default colors)nϕ::Int=64
: Number of azimuthal angles to use for the grid
Returns
::Plots.plot
: Plot with grid added
BroadLineRegions.getFlattenedCameraIndices
— MethodgetFlattenedCameraIndices(m::model)
Get flattened camera indices corresponding to rings in model.
Arguments
m::model
: Model object to extract camera indices from
Returns
camStartInds::Vector{Int}
: Vector of camera starting indices with length equal tom.subModelStartInds
BroadLineRegions.getRingFromFlattenedInd
— MethodgetRingFromFlattenedInd(m::model, flattenedInd::Int) -> Tuple{Int, Int}
Retrieve the model ring index and subindex (if applicable) from flattened array index.
Arguments
m::model
: Model object with ringsflattenedInd::Int
: The index in the flattened array we need to work back from
Returns
row::Int
: The ring index inmodel.rings
that the flattened index corresponds tocolumn::Int
: The subindex that matches the flattened index passed to this function.
BroadLineRegions.getVariable
— MethodgetVariable(m::model, variable::Function; flatten=false)
Retrieve model variable when specified as a Function
. See main docstring for details.
BroadLineRegions.getVariable
— MethodgetVariable(m::model, variable::Union{String,Symbol,Function}; flatten=false)
Retrieve elements from model object and stack them into matrices for easy manipulation.
Arguments
m::model
: Model object to extract variables fromvariable::Union{String,Symbol,Function}
: Variable to extract from model- If
String
, will be converted toSymbol
- Must be a valid attribute of
model.rings
(e.g.:I
,:v
,:r
,:e
,:i
,:ϕ
) or a function that can be applied tomodel.rings
- Example: Keplerian disk time delays could be calculated like
t(ring) = ring.r*(1 .+ sin.(ring.ϕ).*ring.i))
- If
flatten::Bool=false
: If true, flatten the result to a vector
Returns
Array{Float64,}
: Matrix or vector of extracted variable frommodel.rings
, created by stacking the output variable for each ring- For example, if variable given is
:I
, result will have shape(length(r), length(ϕ))
as at eachr
andϕ
there is a value ofI
- If
flatten=true
, result will be a flattened vector
- For example, if variable given is
BroadLineRegions.getVariable
— MethodgetVariable(m::model, variable::Symbol; flatten=false)
Retrieve model variable when specified as a Symbol
. See main docstring for details.
BroadLineRegions.get_r3D
— Methodget_r3D(i::Float64, rot::Float64, θₒ::Float64) -> Matrix{Float64}
Calculate rotation matrix to transform from initial XY plane coordinates to 3D space.
Parameters
i::Float64
: Inclination angle of ring (rad)rot::Float64
: Rotation of ring plane about z axis (rad)θₒ::Float64
: Opening angle of point (rad)
Returns
matrix::Matrix{Float64}
: 3×3 rotation matrix
BroadLineRegions.get_rMinMaxDiskWind
— Methodget_rMinMaxDiskWind(r̄::Float64, rFac::Float64, α::Float64)
Calculate the minimum and maximum radius of model given the (intensity weighted) mean radius r̄, the radius factor rFac, and the power-law index α following Long+ 2023.
Parameters
r̄::Float64
: mean radius of model (in terms of rₛ)rFac::Float64
: radius scaling factorα::Float64
: power-law index of the source function $S(r) \propto r^{-\alpha}$ (cannot be 1/2 or 3/2 as this divides by zero)
Returns
rMin::Float64
: minimum radius of model (in terms of rₛ)rMax::Float64
: maximum radius of model (in terms of rₛ)
BroadLineRegions.image!
— MethodBLR.image(m::model, variable::Union{String,Symbol,Function}, kwargs...)
Generate an image of the model where the color of each point is determined by the variable provided.
Arguments
m::model
: Model object to extract variable fromvariable::Union{String,Symbol,Function}
: Variable to extract from model- If
String
, will be converted toSymbol
- Must be a valid attribute of
model.rings
(e.g.:I
,:v
,:r
,:e
,:i
,:ϕ
) or a function that can be applied tomodel.rings
- Example: Keplerian disk time delays could be calculated like
t(ring) = ring.r*(1 .+ sin.(ring.ϕ).*ring.i))
- If
Keywords
- Additional keyword arguments are passed to
Plots.plot
Returns
p::Plots.plot
: Plot object representing the generated image
BroadLineRegions.image!
— MethodBLR.image(m::model, variable::Union{String,Symbol,Function}, kwargs...)
Generate an image of the model where the color of each point is determined by the variable provided.
Arguments
m::model
: Model object to extract variable fromvariable::Union{String,Symbol,Function}
: Variable to extract from model- If
String
, will be converted toSymbol
- Must be a valid attribute of
model.rings
(e.g.:I
,:v
,:r
,:e
,:i
,:ϕ
) or a function that can be applied tomodel.rings
- Example: Keplerian disk time delays could be calculated like
t(ring) = ring.r*(1 .+ sin.(ring.ϕ).*ring.i))
- If
Keywords
- Additional keyword arguments are passed to
Plots.plot
Returns
p::Plots.plot
: Plot object representing the generated image
BroadLineRegions.image
— MethodBLR.image(m::model, variable::Union{String,Symbol,Function}, kwargs...)
Generate an image of the model where the color of each point is determined by the variable provided.
Arguments
m::model
: Model object to extract variable fromvariable::Union{String,Symbol,Function}
: Variable to extract from model- If
String
, will be converted toSymbol
- Must be a valid attribute of
model.rings
(e.g.:I
,:v
,:r
,:e
,:i
,:ϕ
) or a function that can be applied tomodel.rings
- Example: Keplerian disk time delays could be calculated like
t(ring) = ring.r*(1 .+ sin.(ring.ϕ).*ring.i))
- If
Keywords
- Additional keyword arguments are passed to
Plots.plot
Returns
p::Plots.plot
: Plot object representing the generated image
BroadLineRegions.plot3d!
— Methodplot3d(m::model, [variable], [annotate], [kwargs...])
Generate a 3D plot of the model geometry, optionally colored by a variable.
Parameters
m::model
: Model object to plotvariable::Union{String,Symbol,Function}=nothing
: Variable to color the points by- If
String
, will be converted toSymbol
- Must be a valid attribute of
model.rings
(e.g.,:I
,:v
,:r
,:e
,:i
,:ϕ
) or a function that can be applied tomodel.rings
- Example: Keplerian disk time delays could be calculated like
t(ring) = ring.r*(1 .+ sin.(ring.ϕ).*ring.i))
- If not provided, defaults to
nothing
(no coloring)
- If
annotate::Bool=true
: Whether to annotate the camera position and model orientation in the plotkwargs...
: Additional keyword arguments passed toPlots.plot
Returns
p::Plots.plot
: 3D plot of the model geometry, optionally colored by the variable provided
BroadLineRegions.plot3d!
— Methodplot3d(m::model, [variable], [annotate], [kwargs...])
Generate a 3D plot of the model geometry, optionally colored by a variable.
Parameters
m::model
: Model object to plotvariable::Union{String,Symbol,Function}=nothing
: Variable to color the points by- If
String
, will be converted toSymbol
- Must be a valid attribute of
model.rings
(e.g.,:I
,:v
,:r
,:e
,:i
,:ϕ
) or a function that can be applied tomodel.rings
- Example: Keplerian disk time delays could be calculated like
t(ring) = ring.r*(1 .+ sin.(ring.ϕ).*ring.i))
- If not provided, defaults to
nothing
(no coloring)
- If
annotate::Bool=true
: Whether to annotate the camera position and model orientation in the plotkwargs...
: Additional keyword arguments passed toPlots.plot
Returns
p::Plots.plot
: 3D plot of the model geometry, optionally colored by the variable provided
BroadLineRegions.plot3d
— Methodplot3d(m::model, [variable], [annotate], [kwargs...])
Generate a 3D plot of the model geometry, optionally colored by a variable.
Parameters
m::model
: Model object to plotvariable::Union{String,Symbol,Function}=nothing
: Variable to color the points by- If
String
, will be converted toSymbol
- Must be a valid attribute of
model.rings
(e.g.,:I
,:v
,:r
,:e
,:i
,:ϕ
) or a function that can be applied tomodel.rings
- Example: Keplerian disk time delays could be calculated like
t(ring) = ring.r*(1 .+ sin.(ring.ϕ).*ring.i))
- If not provided, defaults to
nothing
(no coloring)
- If
annotate::Bool=true
: Whether to annotate the camera position and model orientation in the plotkwargs...
: Additional keyword arguments passed toPlots.plot
Returns
p::Plots.plot
: 3D plot of the model geometry, optionally colored by the variable provided
BroadLineRegions.profile!
— Methodprofile(m::model, [variable], [kwargs...])
Plot all profiles set in the model, normalized to the maximum value of each profile.
Arguments
model
: A model object containing profile data.variable
: Optional. A symbol or string (or list of symbols/strings) specifying which profile to plot. If not provided, all profiles set in model will be plotted.kwargs...
: Additional keyword arguments passed toPlots.plot
BroadLineRegions.profile!
— Methodprofile(m::model, [variable], [kwargs...])
Plot all profiles set in the model, normalized to the maximum value of each profile.
Arguments
model
: A model object containing profile data.variable
: Optional. A symbol or string (or list of symbols/strings) specifying which profile to plot. If not provided, all profiles set in model will be plotted.kwargs...
: Additional keyword arguments passed toPlots.plot
BroadLineRegions.reflect!
— Methodreflect!(xyzSys::Vector{Float64}, i::Float64) -> Vector{Float64}
Reflect coordinates in 3D space across the ring plane.
Parameters
xyzSys::Vector{Float64}
:[x;y;z]
coordinates in 3D spacei::Float64}
: Inclination angle of ring plane (rad)
Returns
xyzSys::Vector{Float64}
:[x';y';z']
coordinates in 3D space after reflection
BroadLineRegions.removeNaN!
— MethodremoveNaN!(m::model)
Remove points with I = NaN
from model.
Parameters
m::model
: Model to remove points from
Returns
m::model
: Model with NaN points removed
BroadLineRegions.reset!
— Methodreset!(m::model; profiles=true, img=false)
Erase existing profiles/raytrace status.
Parameters
m::model
: Model object to resetprofiles::Bool=true
: If true, reset profilesimg::Bool=false
: If true, reset raytracing boolean (does not change existing model but allows model to be raytraced again after combining other new models)
BroadLineRegions.rotate3D
— Functionrotate3D(r::Float64, ϕ₀::Float64, i::Float64, rot::Float64, θₒ::Float64, reflect::Bool=false)
Transform from ring coordinates to 3D coordinates where camera is at +x.
Parameters
r::Float64
: Radius from central mass (in terms of rₛ)ϕ₀::Float64
: Starting azimuthal angle in ring plane (rad)i::Float64
: Inclination angle of ring plane (rad)rot::Float64
: Rotation of system plane about z axis (rad)θₒ::Float64
: Opening angle of point (rad)reflect::Bool=false
: Whether to reflect across the ring plane
Returns
Tuple{Float64, Float64, Float64}
:(x, y, z)
coordinates in 3D space
BroadLineRegions.profile
— Methodprofile(m::model, [variable], [kwargs...])
Plot all profiles set in the model, normalized to the maximum value of each profile.
Arguments
model
: A model object containing profile data.variable
: Optional. A symbol or string (or list of symbols/strings) specifying which profile to plot. If not provided, all profiles set in model will be plotted.kwargs...
: Additional keyword arguments passed toPlots.plot