Skip to content

Commit

Permalink
Add new example that defines a custom materian and saves the output
Browse files Browse the repository at this point in the history
  • Loading branch information
dominic-chang committed Oct 11, 2024
1 parent 43f98b5 commit 184e274
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 6 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ Manifest.toml
.DS_Store
*.gif
*.png
docs/node_modules
docs/node_modules
*.npy
3 changes: 2 additions & 1 deletion docs/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,12 @@ Krang = "54806c32-d51a-438d-8447-e0041be2fbfb"
Literate = "98b081ad-f1c9-55d3-8b20-4c87d4299306"
Lux = "b2108857-7c20-44ae-9111-449ecde12c47"
MeshIO = "7269a6da-0436-5bbc-96c2-40638cbb6118"
NPZ = "15e1cf62-19b3-5cfa-8e77-841668bca605"
Optimization = "7f7a1694-90dd-40f0-9382-eb1efda571ba"
OptimizationOptimisers = "42dfb2eb-d2b4-4451-abcd-913932933ac1"
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"

[compat]
Enzyme = "0.13"
Enzyme = "0.13"
1 change: 0 additions & 1 deletion docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ makedocs(;
],
"api.md",
],
checkdocs=:none
)

deploydocs(;
Expand Down
1 change: 0 additions & 1 deletion docs/src/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ Krang.Mesh
Krang.MeshGeometry
Krang.ElectronSynchrotronPowerLawIntensity
Krang.ElectronSynchrotronPowerLawPolarization
Krang.UnionGeometry
```

### Pixel Related Functions
Expand Down
1 change: 1 addition & 0 deletions examples/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ JacobiElliptic = "2a8b799e-c098-4961-872a-356c768d184c"
KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c"
Krang = "54806c32-d51a-438d-8447-e0041be2fbfb"
Lux = "b2108857-7c20-44ae-9111-449ecde12c47"
NPZ = "15e1cf62-19b3-5cfa-8e77-841668bca605"
Optimization = "7f7a1694-90dd-40f0-9382-eb1efda571ba"
OptimizationOptimisers = "42dfb2eb-d2b4-4451-abcd-913932933ac1"
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
Expand Down
84 changes: 84 additions & 0 deletions examples/custom-material-example.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# # Defining a Custom Material and Saving Output
# We will define a redshift material for raytracing, and export the raytraced quantities to a .npy file.

using Krang

# Materials should be functors (i.e. types with callable objects).
# Our material will raytrace the redshifts associated with a zero angular momentum observer (ZAMO) on a cone for a given sub-image.
# If the cone is self obscuring, then only the redshift on the side that is closest to the observer will be raytraced.
struct ZAMORedshifts{T} <: Krang.AbstractMaterial
n::Int
rmin::T
rmax::T
end

# Define the function for the material.
# This functor will take in a pixel and a geometry and return the redshift associated with a given sub image.
# You must include the relevant physics in the functor definition.
# Here we will include redshift effects associated with a zero angular momentum observer (ZAMO).
function (m::ZAMORedshifts)(pix::Krang.AbstractPixel, geometry::Krang.ConeGeometry{T,A}) where {T,A}

observation = zero(T)
α,β = Krang.screen_coordinate(pix)

θs = geometry.opening_angle
isindir = false
for _ in 1:2
isindir ⊻= true
rs, νr, νθ, _, issuccess = emission_radius(pix, geometry.opening_angle, isindir, m.n)
if issuccess && m.rmin rs < m.rmax
ηtemp = η(metric, α, β, θo)
λtemp = λ(metric, α, θo)
curr_p_bl_d = p_bl_d(metric, rs, θs, ηtemp, λtemp, νr, νθ)

curr_p_bl_u = metric_uu(metric, rs, θs) * curr_p_bl_d
p_zamo_u = jac_zamo_u_bl_d(metric, rs, θs) * curr_p_bl_u
redshift = inv(p_zamo_u[1])

observation = max(redshift, eps(T))^(T(3))
end
end
return observation
end

# We will use a $0.94$ spin Kerr black hole viewed by an asymptotic observer at an inclination angle of $θo=17^\circ$.
# The emission to be raytraced is
metric = Krang.Kerr(0.99);
θo = 17 * π / 180;
ρmax = 15.0;
rmin = Krang.horizon(metric); # minimum radius to truncate cone
rmax = 10.0; # maximum radius to truncate cone
n = 1; # sub-image to raytrace

# Let's create a camera with a resolution of 400x400 pixels and our mesh.
camera = Krang.IntensityCamera(metric, θo, -ρmax, ρmax, -ρmax, ρmax, 400);
mesh = Krang.Mesh(Krang.ConeGeometry((75 * π / 180)), ZAMORedshifts(n, rmin, rmax))
scene = Krang.Scene((mesh,))

# Finally, we will render the scene with the camera and plot the redshifts.
redshifts = render(camera, scene)

import CairoMakie as CMk

theme = CMk.Theme(
Axis = (
xticksvisible = false,
xticklabelsvisible = false,
yticksvisible = false,
yticklabelsvisible = false,
),
)

CMk.set_theme!(CMk.merge!(theme, CMk.theme_latexfonts()))

fig = CMk.Figure(resolution=(700, 700));
ax = CMk.Axis(fig[1, 1], title="Redshifts", titlesize=20, aspect=1)
hm = CMk.heatmap!(ax, redshifts, colormap=:afmhot)
CMk.Colorbar(fig[1, 2], hm, label="Redshifts", labelsize=20)
CMk.save("redshifts.png", fig)

# ![redshifts](redshifts.png)

# Saving the redshifts to a .npy file
using NPZ
npzwrite("redshifts_n1.npy", redshifts)
5 changes: 3 additions & 2 deletions examples/polarization-example.jl
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,10 @@ geometry2 = Krang.ConeGeometry((π-θs))
# We will create two meshes, one for each geometry anc create a scene with both meshes.
mesh1 = Krang.Mesh(geometry1, material1)
mesh2 = Krang.Mesh(geometry2, material2)
scene = Krang.Scene((mesh1, mesh2))

# Finally, we will render the scene with the camera and plot the Stokes parameters.

scene = Krang.Scene((mesh1, mesh2))
stokesvals = render(camera, scene)

fig = Figure(resolution=(700, 700));
Expand All @@ -80,4 +81,4 @@ fig

save("polarization_example.png", fig)

# ![image](polarization_example.png)
# ![polarization of emission model](polarization_example.png)

0 comments on commit 184e274

Please sign in to comment.