nearly fully fleshed out now

This commit is contained in:
2025-09-17 18:11:07 +02:00
parent 4302cfc914
commit fdedbdbee2
17 changed files with 260 additions and 298 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
assets/cmb_and_dtb.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
assets/image copy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
assets/profiles.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 184 KiB

View File

@@ -1,9 +1,50 @@
#import "globals.typ": * #import "globals.typ": *
== Full profiles <backup_full_profiles>
$
rho_alpha (r bar M, z) = (1 + z)^2 / (4 pi r^2) dot sum_(n=2)^(n_m)f_n dot epsilon_alpha (nu prime) dot f_star dot dot(M)(z prime bar M, z)
$
with the lookback redshift $z prime$ so $nu prime = nu dot (1+z prime) slash (1+z)$
$=>$ coupling coefficient
$
x_alpha (r bar M, z) = (1.81 dot 10^11) / (1 + z) dot S_alpha (z) dot rho_alpha (r bar M, z)
$
with a suppression factor $S_alpha (z)$
#pagebreak()
$
rho_"xray" (r bar M, z) = 1 / r^2 sum_i f_i f_(X,h) dot integral_(nu^i_"th")^oo d nu (nu - nu^i_"th") h_P sigma_i (nu) e^(-tau_nu) f_star dot(M) (z prime bar M, z)
$
$
==> 3/2 dot derivative(rho_h (r bar M, z), z) = (3 rho_h (r bar M, z)) / (1 + z) - (rho_"xray" (r bar M, z)) /(k_B (1 + z) H(z))
$
with the Boltzmann constant $k_B$ and $H(z)$ is the Hubble parameter
// where i={H, He} and νi thhP ={13.6, 26.5} eV.
// Contribution from both He and H since
// No defined sum but integral due to all radiations being xray
// Lookback comes from the definition of comoving r:
// $r = integral_(z)^(z prime) c dz dot (1+z) / H(z)$
#pagebreak()
The comoving ionized volume around a source of ionizing photons satisfies the differential equation
$
derivative(V, t) = dot(N)_"ion"(t) / overline(n)_H^0 - alpha_B dot C / a^3 dot overline(n)_H^0 dot V
$
bubble radius $R_b = root(3, 3/ (4pi) V(M,z))$ and using the Heaviside step function $theta_H$:
$
x_("HII")(r bar M, z) = theta_"H" lr([R_b (M, z) - r], size: #150%)
$
== Validation <backup_validation> == Validation <backup_validation>
#[ #line(length: 100%, stroke: 0pt)
#set image(height: 45%, fit: "contain") #align(center)[
#set image(height: 43%, fit: "contain")
#let notebook = json("../workdir/11_visualization/validation_simple_run.ipynb") #let notebook = json("../workdir/11_visualization/validation_simple_run.ipynb")
#image_cell(notebook, cell_id: "validation_signal_comparison_old_v_new") #image_cell(notebook, cell_id: "validation_signal_comparison_old_v_new")
@@ -13,11 +54,11 @@
== Backup slides == Thesan resolution issues
This is a backup slide #let notebook = json("../workdir/11_visualization/halo_mass_function_thesan_1_2.ipynb")
#lorem(50)
== Another backup slide
#lorem(50)
#line(length: 100%, stroke: 0pt)
#align(center)[
#image_cell(notebook, cell_id: "halo_mass_functions")
]

View File

@@ -38,9 +38,9 @@
#pinit-point-to( #pinit-point-to(
(1, 2), (1, 2),
pin-dx: 20pt, pin-dx: 20pt,
pin-dy: -20pt, pin-dy: -30pt,
body-dx: -70pt, body-dx: -70pt,
body-dy: -80pt, body-dy: -95pt,
offset-dx: 20pt, offset-dx: 20pt,
offset-dy: 30pt, offset-dy: 30pt,
)[spherical symmetry] )[spherical symmetry]
@@ -50,12 +50,12 @@
#pinit-point-to( #pinit-point-to(
(3, 4), (3, 4),
pin-dx: 20pt, pin-dx: 20pt,
pin-dy: -20pt, pin-dy: -30pt,
body-dx: -90pt, body-dx: -70pt,
body-dy: -80pt, body-dy: -95pt,
offset-dx: 20pt, offset-dx: 20pt,
offset-dy: 30pt, offset-dy: 30pt,
)[convolution (fft)] )[convolution (`FFT`)]
#pagebreak() #pagebreak()

View File

@@ -2,14 +2,37 @@
= Conclusion = Conclusion
== Summary == Summary
- We presented Beorn, a new code to simulate the 21cm signal from the EoR and Cosmic Dawn. - #beorn a semi-numerical tool to simulate the 21-cm signal
- Beorn is based on the halo model and uses a novel approach to compute the 21cm signal from 1D profiles around individual sources.
- Beorn is fast, flexible, and easy to use. - uses the _halo model of reionization_
- We validated Beorn against numerical simulations and showed that it can reproduce their results with good accuracy. - describes sources in terms of their host DM halo
- Beorn is publicly available and can be used for a variety of applications, including forecasting, parameter estimation, and data analysis. - $=>$ central dependence on halo growth
// since it affects the SFR and thus the emissivity
- more accurate treatment of *individual* mass accretion
// change in profiles trivially
- leads to significant changes to reionization history
// which could in theory be absorbed by shifting other paremeters
- map-level fluctuations
// which we can hope to observe (although many are subtle)
// unique position of 21-cm cosmology -> cannot discuss observational constraints
- #beorn python package: #link("https://github.com/cosmic-reionization/beorn")
// invite you to check out
- simulation-agnostic
- easier to use
- fully parallelized
== Outlook
- further validation
// finally ready for direct comparison with c2ray? now that parameters and loading have been properly implemented
== Upcoming improvements
- investigation + parameterization of stochasticity - investigation + parameterization of stochasticity
- application to larger volumes // Assuming other relations related to production of photons is (hopefully by now well motivated) complex
- fully parallel runs // these cannot directly be inferred => expressed as a distribution as a function of another halo property
- application to larger volumes
// the scale-up -> large volumes with usable merger trees
// comitting to reserving some 100s of node hours (which I would still quantify as fast)

View File

@@ -3,7 +3,7 @@
== The halo model of reionization == The halo model of reionization
Following @Schneider_2021 @schneider2023cosmologicalforecast21cmpower: Following @Schneider_2021 @schneider2023cosmologicalforecast21cmpower, the halo model describes (#link(<backup_full_profiles>, "derivation")):
#line(length: 100%, stroke: color.white.transparentize(100%)) #line(length: 100%, stroke: color.white.transparentize(100%))
#pause #pause
@@ -16,7 +16,11 @@ $
$ $
3/2 dot derivative(rho_h (r bar M, z), z) = (3 rho_h (r bar M, z)) / (1 + z) - (rho_"xray" (r bar M, z)) /(k_B (1 + z) H(z)) 3/2 dot derivative(rho_h (r bar M, z), z) = (3 rho_h (r bar M, z)) / (1 + z) - (rho_"xray" (r bar M, z)) /(k_B (1 + z) H(z))
$ $
// From the xray emission
// primordial + heating term
// expansion + deposition by xrays
// => xrays are assumed to be the only source of heating
//
#pause #pause
$ $
derivative(V_b, t) = dot(N)_"ion"(t) / overline(n)_H^0 - alpha_B dot C / a^3 dot overline(n)_H^0 dot V_b derivative(V_b, t) = dot(N)_"ion"(t) / overline(n)_H^0 - alpha_B dot C / a^3 dot overline(n)_H^0 dot V_b
@@ -26,8 +30,15 @@ $
// $ // $
#pagebreak() #pagebreak()
Visually:
#image("assets/profiles.png")
// COMMENTS:
// - contribution from the lyman lines
// - 1/r^2 decrease from spreading photons
// - more steep outwards + sharp drop due to redshifting out of line
#pagebreak()
== Revisiting the 21cm signal == Revisiting the 21cm signal

View File

@@ -3,12 +3,37 @@
#let notebook = json("../workdir/11_visualization/simple_run_example.ipynb") #let notebook = json("../workdir/11_visualization/simple_run_example.ipynb")
= Implementation = Adaptations
== Central changes
- profile generation taking into account halo growth rate
- reading merger trees + inferring growth rates
- parallel painting across multiple halo bins
// important since the bins are more now
- performance and ease of use
// largely through vectorization -> still "native" python
// usage of HDF5
// solid caching mechanisms -> resume simulations, etc...
// #v(5em)
// #text(
// size: .7em,
// )[
// (#link(<backup_validation>, "Validated"))
// ]
== Simplified usage == Simplified usage
#text( #text(
size: .7em, size: .65em,
)[ )[
#columns(2, gutter: 3pt)[
#show raw: it => { #show raw: it => {
show regex("pin\d"): it => pin(eval(it.text.slice(3))) show regex("pin\d"): it => pin(eval(it.text.slice(3)))
it it
@@ -18,6 +43,7 @@
language: "python", language: "python",
code_cell(notebook, cell_id: "code_for_run"), code_cell(notebook, cell_id: "code_for_run"),
) )
]
// #pinit-point-to(1)[Hello] // #pinit-point-to(1)[Hello]
// #pinit-point-to(2)[Hello] // #pinit-point-to(2)[Hello]
// #pinit-point-to(3)[Hello] // #pinit-point-to(3)[Hello]
@@ -27,4 +53,3 @@
] ]
#link(<backup_validation>, "Validated")

View File

@@ -9,7 +9,10 @@
- Is strongly linked to the formation and growth of the first galaxies and black holes. - Is strongly linked to the formation and growth of the first galaxies and black holes.
- Sets the stage for many observables: CMB secondary anisotropies, 21-cm signal, high-z galaxy surveys. - Sets the stage for many observables:
- CMB secondary anisotropies
- 21-cm signal
- high-z galaxy surveys.
// reformulate // reformulate
@@ -20,12 +23,19 @@ The brigthtness temperature describes the difference between the CMB temperature
#v(1em) #v(1em)
#grid(columns: 2, align: center)[ #grid(columns: 2, align: center, column-gutter: 1em)[
#image("assets/cmb_black_body_spectrum.svg", height: 1fr, fit: "contain") #text(size: 0.8em)[from @cmb_spectrum] #image("assets/cmb_and_dtb.jpeg", height: 1fr, fit: "contain") #text(size: 0.8em)[from @cmb_spectrum]
][ ][
#pause #pause
Removing the contribution from the black body spectrum of the CMB yields the explicit 21-cm signal: #set text(size: 0.8em)
#image("assets/cmb_black_body_spectrum.svg", height: 1fr, fit: "contain") remove contribution from the BB spectrum:
_differential brightness temperature_
$==>$ the actual 21-cm signal
#image("assets/brighness_temperature.png", fit: "contain")
from @Schaeffer_2023
] ]
#pagebreak() #pagebreak()
@@ -37,6 +47,9 @@ The brigthtness temperature describes the difference between the CMB temperature
#text(size: 0.8em)[from @Pritchard2012] #text(size: 0.8em)[from @Pritchard2012]
] ]
// COMMENTS:
== Expression the 21-cm signal == Expression the 21-cm signal
Expressing the _differential brightness temperature_ (e.g @Pritchard2012): Expressing the _differential brightness temperature_ (e.g @Pritchard2012):
@@ -59,113 +72,37 @@ $ <eq:dTb>
#layouts.contained( #layouts.contained(
[ [
*Traditional approaches* *Traditional approaches*
// From first principles
// keypoints that describe heavy hydro + radiative transfer simulations - need to cover large dynamic range
- require hydrodynamics // small scales to resolve sources + sinks + feedback
- require radiative transfer // large scales to capture statistics
- scale poorly - hydrodynamics & radiative transfer
- hard to scale
$=>$ no reproducibility $=>$ no reproducibility
#pause #pause
], ],
[ [
#pad(1em)[
#align(left)[
#text(weight: "bold")[semi-numerical approaches] #text(weight: "bold")[semi-numerical approaches]
such as #beorn @Schaeffer_2023, `21cmFAST` [CITATION] such as #beorn @Schaeffer_2023, `21cmFAST` @21cmfast
- approximative treatment
- link // IF ASKED: difference with `21cmFAST`:
- scalable + efficient // based on excursion formalistm -> only valid >= 1Mpc, which is ideal for large volumes + statistics => 21-cm forecasts
$->$ approximative treatment
$->$ link
$->$ scalable + efficient
$=>$ reproducible and flexible $=>$ reproducible and flexible
// interesting to build emulators for instance
]
]
] ]
) )
// #layouts.two-boxes(
// [
// #text(weight: "bold")[Traditional approaches]
// // keypoints that describe heavy hydro + radiative transfer simulations
// - require hydrodynamics
// - require radiative transfer
// - scale poorly
// $=>$ no reproducibility
// #pause
// ],
// [
// *semi-numerical approaches*
// such as #beorn @Schaeffer_2023, `21cmFAST` [CITATION]
// - approximative treatment
// - link
// - scalable + efficient
// $=>$ reproducible and flexible
// ]
// )
#pagebreak()
== Matrix
#layouts.matrix((
brand.wordmark,
brand.wordmark,
brand.wordmark,
brand.wordmark,
brand.wordmark,
brand.wordmark
))
== Contained
#layouts.contained(
columns(2, [
- #lorem(10)
- #lorem(15)
- #lorem(25)
]),
brand.wordmark
)
== Four columns
#layouts.four-columns(
[
#text(weight: "bold", brand.wordmark)
#v(1em)
#text(size: 10.5pt)[#lorem(60)]
],
[
#text(weight: "bold", brand.wordmark)
#v(1em)
#text(size: 10.5pt)[#lorem(45)]
],
[
#text(weight: "bold", brand.wordmark)
#v(1em)
#text(size: 10.5pt)[#lorem(75)]
],
[
#text(weight: "bold", brand.wordmark)
#v(1em)
#text(size: 10.5pt)[#lorem(50)]
]
)
== Two columns
#layouts.contained(
columns(2, [
- #lorem(10)
- #lorem(15)
- #lorem(25)
]),
brand.wordmark
)

View File

@@ -107,6 +107,7 @@
institution: [ETH Zürich, University of Zürich], institution: [ETH Zürich, University of Zürich],
// logo: brand.logo, // logo: brand.logo,
), ),
config-common(handout: true)
// footer-left: self => [..#padded_logos], // footer-left: self => [..#padded_logos],
) )
@@ -126,7 +127,7 @@
= End = End
== Thank you for your attention == Thank you for your attention
#bibliography("references.bib") #bibliography("references.bib", title: "References")
#show: appendix #show: appendix
#include("backup.typ") #include("backup.typ")

BIN
main2.pdf

Binary file not shown.

147
main2.typ
View File

@@ -1,147 +0,0 @@
#import "@preview/touying:0.6.1": *
#import "@preview/touying-unistra-pristine:1.4.2": *
#show: unistra-theme.with(
aspect-ratio: "16-9",
config-info(
title: [Title],
author: [Author],
date: datetime.today().display("[month repr:long] [day], [year repr:full]"),
logo: image("assets/cmb_black_body_spectrum.svg"),
),
config-store(
quotes: (
left: "",
right: "",
),
icon-links: (
"image": (
regex("\.(jpg|jpeg|png|bmp|svg|webp|tiff)$"),
none,
),
),
),
)
#title-slide(logo: image("assets/eth-logo.svg"))
= Example Section Title
== Example Slide
A slide with *important information*.
#pause
=== Highlight
This is #highlight(fill: blue.C)[highlighted in blue]. This is #highlight(fill: yellow.C)[highlighted in yellow]. This is #highlight(fill: green.C)[highlighted in green]. This is #highlight(fill: red.C)[highlighted in red].
#hero(
image("assets/eth-logo.svg"),
title: "Hero",
subtitle: "Subtitle",
hide-footer: false,
)
#hero(
image("assets/cmb_black_body_spectrum.svg", width: 100%, height: 100%),
txt: (
text: "This is an "
+ highlight(
fill: yellow.C,
)[RTL#footnote[RTL = right to left. Oh, and here's a footnote!] hero with text and no title]
+ ".\n",
enhanced: false,
),
direction: "rtl",
footnote: true,
)
#gallery(
// image("../assets/cat1.jpg", width: auto, height: 50%),
// image("../assets/cat2.jpg", width: auto, height: 50%),
// image("../assets/cat1.jpg", width: auto, height: 50%),
// image("../assets/cat2.jpg", width: auto, height: 50%),
title: "Gallery",
captions: (
"Cat 1",
"Cat 2",
"Cat 1 again",
"Cat 2 again",
),
columns: 4,
)
#focus-slide(
theme: "smoke",
[
This is a focus slide \ with theme "smoke"
],
)
#focus-slide(
theme: "neon",
icon: nv-icon("text-undo"),
[
This is a focus slide \ with theme "neon" and Nova icon "text-undo"
],
)
#focus-slide(
theme: "yellow",
icon: us-icon("book-open"),
[
This is a focus slide \ with theme "yellow" and Unistra icon "book-open"
],
)
#focus-slide(
c1: black,
c2: white,
icon: us-icon("plant"),
[
This is a focus slide \ with custom colors \ and Unistra icon "plant"
\ Next: Section 2
],
text-color: yellow.D,
)
= Section 2
== Hey! New Section!
#lorem(30)
#pause
#lorem(20)
#pause
Hello!
=== Heading 3
#lorem(10)
==== Heading 4
#lorem(80)
#quote(
attribution: [from the Henry Cary literal translation of 1897 | *Noticed the custom quotes?*],
)[
... I seem, then, in just this little thing to be wiser than this man at
any rate, that what I do not know I do not think I know either.
]
#slide[
First column. #lorem(15)
][
Second column. #lorem(15)
]
== Icon Links
https://i.edoyen.com/ShareX/2025/07/ky3Hdt.gif
#link("https://i.edoyen.com/ShareX/2025/07/ky3Hdt.gif")[with \#link]
https://i.edoyen.com/ShareX/2025/07/ky3Hdt.gif
https://i.edoyen.com/ShareX/2025/07/ky3Hdt.jpg

View File

@@ -441,5 +441,9 @@ archivePrefix = {arXiv},
@website{cmb_spectrum, @website{cmb_spectrum,
title = "CMB spectrum", title = "CMB spectrum",
url = "https://commons.wikimedia.org/wiki/File:Cmbr.svg", url = "https://asd.gsfc.nasa.gov/archive/arcade/cmb_intensity.html",
} }

View File

@@ -21,7 +21,12 @@
#pause #pause
], ],
[ [
... $->$ inaccurate when applied to all halos
$->$ #text(weight: "bold")[inconsistent] with the N-body output
#pause
$->$ stochasticity for a more realistic description?
] ]
) )
@@ -31,13 +36,41 @@
#image_cell(notebook, cell_id: "profile_plot_alpha_dependence") #image_cell(notebook, cell_id: "profile_plot_alpha_dependence")
$M_"h" = 6.08 dot 10^11 M_dot.circle$ (fixed)
$==>$ correction up to $times 5$
// COMMENTS
// That will be directly affect the global signal as well
// shifting
//
// Yu-Siu already investigated the more nuanced effect of stochasticity but the approach we propose should supersede that
#pagebreak()
== Inferring growth from #smallcaps[Thesan] data == Inferring growth from #smallcaps[Thesan] data
#lorem(50) - already includes precomputed merger trees @Springel2005
// ideal for rapid iterations
- follow main progenitor branch back in time
- fit the exponential model to main progrenitor branch
// in a parallelized fashion => want to stay fast
// fix the original mass for max. consistency
// fix the allowed dynamic range
- use *individual growth* to select profile
// this sort of "breaks the degeneracy" between halos of the same mass but different growth histories
- *self-consistent*#pause$*$#meanwhile treatment of halo growth leveraging the snapshots
#pagebreak()
#let notebook = json("../workdir/11_visualization/show_trees.ipynb") #let notebook = json("../workdir/11_visualization/show_trees.ipynb")
#[ #[
#set image(width: 100%, fit: "contain") #set image(width: 100%, fit: "contain")
#image_cell(notebook, cell_id: "merger_tree_and_fitting") #image_cell(notebook, cell_id: "merger_tree_and_fitting")
] ]
// COMMENTS:
// no clear trend between mass and growth rate

View File

@@ -4,10 +4,44 @@
== Map outputs == Map outputs
#let notebook = json("../workdir/11_visualization/simulation_maps.ipynb") #let notebook = json("../workdir/11_visualization/simulation_maps.ipynb")
#grid(
columns: (auto, 10em)
)[
#image_cell(notebook, cell_id: "presentation_x_alpha_map") #image_cell(notebook, cell_id: "presentation_x_alpha_map")
][
#lorem(20)
]
#pagebreak()
#grid(
columns: (auto, 10em)
)[
#image_cell(notebook, cell_id: "presentation_temperature_map") #image_cell(notebook, cell_id: "presentation_temperature_map")
][
#lorem(20)
]
#pagebreak()
#grid(
columns: (auto, 10em)
)[
#image_cell(notebook, cell_id: "presentation_xHII_map") #image_cell(notebook, cell_id: "presentation_xHII_map")
][
#lorem(20)
]
#pagebreak()
#grid(
columns: (auto, 10em)
)[
#image_cell(notebook, cell_id: "presentation_dtb_map") #image_cell(notebook, cell_id: "presentation_dtb_map")
][
#lorem(20)
]