karabo.simulation.signal package
Submodules
karabo.simulation.signal.base_segmentation module
Base segmentation class.
- class BaseSegmentation
Bases:
ABC
Base segmentation class.
- abstract segment(image: Image3D) SegmentationOutput
Segments on a 2D or 3D image.
karabo.simulation.signal.base_signal module
Base signal class.
karabo.simulation.signal.eor_profile module
EoR profile simulation.
- class EoRProfile
Bases:
object
EoR profile simulation.
Examples
>>> rnd = np.random.rand(200) >>> sum_rnd = np.cumsum(rnd) >>> sum_rnd /= sum_rnd[-1] >>> eor = EoRProfile.simulate(x_hi=sum_rnd) >>> EoRProfile.plot(eor) >>> plt.show()
- delta_m = 0
Density contrast of matter.
- frequency_21cm = 1420405751.768
Frequency of the 21cm signal [Hz].
- hubble_constant = 0.7
Hubble constant.
- hubble_param = 70.0
Hubble parameter [km/s/Mpc].
- omega_b = 0.05
Baryon density parameter.
- omega_m = 0.31
Matter density parameter.
- classmethod plot(x_hi: Annotated[ndarray[Any, dtype[float64]], Literal['N']] | None = None, profile: Annotated[ndarray[Any, dtype[float64]], Literal['N', 2]] | None = None) Figure
Plot the fluctuation profile of the 21cm signal.
Either the x_hi parameter needs to be given or the calculated profile.
- Parameters:
x_hi (Optional[Annotated[npt.NDArray[np.float_], Literal[“N”]]], optional) – Neutral hydrogen fraction, by default None.
profile (Optional[EoRProfileT], optional) – An optional profile to be plotted. If not given, a default EoR profile will be plotted. By default None.
- Returns:
The plotted figure of the 21cm signal.
- Return type:
Figure
- classmethod simulate(x_hi: Annotated[ndarray[Any, dtype[float64]], Literal['N']], dv_r_over_dr: float = 0, f_range: tuple[float, float] = (1000000.0, 200000000.0)) Annotated[ndarray[Any, dtype[float64]], Literal['N', 2]]
Calculate the approximate evolution of fluctuations in the 21cm brightness.
The number of points is determined by the resolution of the x_hi array.
Implemented per https://arxiv.org/pdf/1602.02351.pdf, equation (1)
- Parameters:
x_hi (Annotated[npt.NDArray[np.float_], Literal[“N”]]) – Neutral hydrogen fraction.
dv_r_over_dr (float, optional) – ???. By default 0
f_range (tuple[float, float], optional) – Frequency range to plot in [Hz]. by default (2, 200e6)
- Returns:
An array of the shape (floor((f_end - f_start) / step_size), 2), containing the frequency in the first column and the corresponding EoR profile in the second.
- Return type:
EoRProfileT
- t_gamma = 2.73
Cosmic microwave background temperature [Kelvin].
- t_s = 0.068
Spin temperature [Kelvin].
karabo.simulation.signal.galactic_foreground module
Galactic Foreground signal catalogue wrapper.
- class SignalGalacticForeground(centre: SkyCoord, fov: Angle, redshifts: list[float], grid_size: tuple[Annotated[int, Literal['X']], Annotated[int, Literal['Y']]], gleam_file_path: Path | None = None)
Bases:
BaseSignal
[Image2D
]Galactic Foreground signal catalogue wrapper.
Examples
>>> from karabo.simulation.signal.plotting import SignalPlotting >>> available_redshifts = SignalGalacticForeground.available_redshifts() >>> cent = SkyCoord(ra=10 * units.degree, dec=20 * units.degree, frame="icrs") >>> gf = SignalGalacticForeground( ... cent, ... redshifts=available_redshifts[:3], ... grid_size=(30, 30), ... fov=Angle([20, 20], unit=units.degree), ... ) >>> imgs = gf.simulate() >>> SignalPlotting.general_img(imgs[0], "Galactic foreground", log_bar=True) >>> # Map plotting >>> col = SignalGalacticForeground._flux_column(7.6) >>> data = ( ... gf.gleam_catalogue[gf.gleam_catalogue[col] >= 0] ... .to_pandas() ... .sort_values(SignalGalacticForeground.RA_COLUMN) ... ) >>> SignalPlotting.general_polar_plot( ... data[SignalGalacticForeground.RA_COLUMN], ... data[SignalGalacticForeground.DEC_COLUMN], ... data[col], ... title="Galactic Foreground", ... log_bar=True, ... )
- DEC_COLUMN: Final[str] = 'DEJ2000'
- RA_COLUMN: Final[str] = 'RAJ2000'
- classmethod available_redshifts(gleam_file_path: Path | None = None, gleam_catalogue: Table | None = None) list[float]
Get a list from available redshift values (as float).
If the gleam catalogue is given, it will take precedents over the path. Else, if no path is given, the default catalogue will bi used.
- Parameters:
gleam_file_path (Optional[Path], optional) – Path to the gleam catalogue, by default None
gleam_catalogue (Optional[Table], optional) – Gleam catalogue data, by default None
- Returns:
List of available redshift values.
- Return type:
list[float]
karabo.simulation.signal.helpers module
Helpers for generating different types of signals.
- filter_dataframe_radec(df: DataFrame, centre: SkyCoord, fov: Angle, ra_column: str, dec_column: str, wrap_offset: bool = False) tuple[DataFrame, Angle, Angle]
Filter a dataframe with RA-DEC coordinates.
Expects the Center to be at (0°, 0°) with the RA axis having a range of (-180°, 180°) and the DEC axis (-90°, 90°).
- Parameters:
df (pd.DataFrame) – The dataframe that is to be filtered.
centre (SkyCoord) – The center position of the filter.
fov (Angle) – Field of View in the (RA, DEC) axis.
ra_column (str) – Name of the RA column in the dataframe.
dec_column (str) – Name of the DEC column in the dataframe.
wrap_offset (bool) – If we reach a wrap point, if all the coordinates should be wrapped back into the positive space.
- Returns:
The filtered dataframe (copy), lower left corner, upper right corner.
- Return type:
tuple[pd.DataFrame, Angle, Angle]
- interpolate_image(image: Annotated[ndarray[Any, dtype[float64]], Literal['X', 'Y']], new_size: tuple[int, int], mode: Literal['reflect', 'grid-mirror', 'constant', 'grid-constant', 'nearest', 'mirror', 'grid-wrap', 'wrap'] = 'constant') Annotated[ndarray[Any, dtype[float64]], Literal['N', 'M']]
Interpolate an image from it’s original size to new_size.
- Parameters:
image (Annotated[npt.NDArray[np.float_], Literal[“X”, “Y”]]) – The image that is to be interpolated.
new_size (tuple[int, int]) – The desired output size of the image
mode (SciPyInterpolationModes, optional) – The interpolation mode, by default “constant”.
- Returns:
The interpolated input image with it’s new dimensions.
- Return type:
Annotated[npt.NDArray[np.float_], Literal[“N”, “M”]]
- map_radec_datapoints_to_grid(data: DataFrame, grid_size: tuple[Annotated[int, Literal['X']], Annotated[int, Literal['Y']]], ra_column: str, dec_column: str, intensity_column: str, par_count: int = 5) Annotated[ndarray[Any, dtype[float64]], Literal['X', 'Y']]
Map the given data points with a destination to source mapping.
For each pixel in the destination grid, the equivalent degree range in the source will be summed together and set in the destination grid.
- Parameters:
data (pd.DataFrame,) – The data that is to be plotted onto the grid.
grid_size (tuple[Annotated[int, Literal["X"]], Annotated[int, Literal["Y"]]]) – Size of the output grid.
ra_column (str) – Name of the RA column in the dataframe.
dec_column (str) – Name of the DEC column in the dataframe.
intensity_column (str) – Name of the column to use for the intensities.
par_count (int, optional) – How many processes to use to map the data points. By default 5.
- Returns:
A 2D numpy array representing an image with the dimensions of the grid_size parameter.
- Return type:
Annotated[npt.NDArray[np.float_], Literal[“X”, “Y”]]
karabo.simulation.signal.plotting module
Signal plotting helpers.
- class SegmentationPlotting
Bases:
object
Plotting utilities for the segmentation.
- classmethod seg_u_net_plotting(segmented: SegmentationOutput, bin_count: int = 20) Figure
Plot the first slice of the segU-net cube.
- Parameters:
segmented (SegmentationOutput) – Output of the segmentation
bin_count (int) – The number output bins in the histogram plot
- Returns:
Plot of the SegU-Net segmentation
- Return type:
Figure
- Raises:
KaraboError – If the input ‘xhi_seg_err’ is None
- classmethod superpixel_plotting(segmented: SegmentationOutput, signal_image: Image3D, log_sky: bool = False) Figure
Plot the first slice of the superpixel cube.
- Parameters:
segmented (SegmentationOutput) – output of the segmentation
signal_image (Image3D) – Image cube
log_sky (bool, optional) – If the color bar of the sky plot should have a symmetric log norm applied.
- Returns:
Plot of the Superpixel segmentation
- Return type:
Figure
- Raises:
KaraboError – If the input ‘xhii_stitch’ is None
- class SignalPlotting
Bases:
object
Signal plotting helpers.
- classmethod brightness_temperature(data: BaseImage, z_layer: int = 0) Figure
Plot the brightness temperature of a 2D image.
- Parameters:
data (BaseImage) – The image to be plotted.
z_layer (int, optional) – The Z layer to be used, when a Image3D is used.
- Returns:
Figure of the plotted image
- Return type:
Figure
- classmethod general_img(img: Image2D, title: str, tick_count: int = 5, x_label: str = 'RA [°]', y_label: str = 'DEC [°]', bar_label: str = 'Temperature [K]', log_bar: bool = False) Figure
Plot a general image with a temperature.
- Parameters:
img (Image2D) – The image to be plotted.
title (str) – Title to be shown in the figure.
tick_count (int, optional) – The count of ticks to show along each axis, by default 5
x_label (str, optional) – Label to be plotted along the X-axis.
y_label (str, optional) – Label to be plotted along the Y-axis.
bar_label (str, optional) – Label for the color bar.
log_bar (bool, optional) – If the color bar should have a symmetric log norm applied.
- Returns:
The resulting plot figure.
- Return type:
Figure
- classmethod general_polar_plot(ra_series: Annotated[ndarray[Any, dtype[float64]], Literal['N']], dec_series: Annotated[ndarray[Any, dtype[float64]], Literal['N']], intensities_series: Annotated[ndarray[Any, dtype[float64]], Literal['N']], title: str, bar_label: str = 'Temperature [K]', log_bar: bool = False) Figure
Plot a RA/DEC data in a polar plot with the intensity representing the color.
- Parameters:
ra_series (Annotated[npt.NDArray[np.float_], Literal[“N”]]) – RA coordinates in degrees.
dec_series (Annotated[npt.NDArray[np.float_], Literal[“N”]]) – DEC coordinates in degrees.
intensities_series (Annotated[npt.NDArray[np.float_], Literal[“N”]]) – Intensities in Kelvin.
title (str) – Title to be shown in the figure.
bar_label (str, optional) – Label for the color bar.
log_bar (bool, optional) – If the color bar should have a symmetric log norm applied.
- Returns:
The resulting plot figure.
- Return type:
Figure
- classmethod power_spectrum(data: BaseImage | SegmentationOutput | list[BaseImage | SegmentationOutput], kbins: int = 15, z_layer: int = 0) Figure
Plot the power spectrum the 21cm signal.
- Parameters:
data (Union[BaseImage, SegmentationOutput]) – Either a BaseImage or a SegmentationOutput
kbins (int, optional) – Count of bins for the spectrum plot, by default 15
z_layer (int) – If an Image3D is passed, then this layer will be used to plot the image. By default 0
- Returns:
The generated plot figure.
- Return type:
Figure
- classmethod power_spectrum_image_vs_xfrac_dens(image: BaseImage | SegmentationOutput, xfrac_dens: XFracDensFilePair, kbins: int = 15, z_layer: int = 0) Figure
Plot the power spectrum by using an image and the original xfrac/dens file pair.
- Parameters:
image (Union[BaseImage, SegmentationOutput]) – Either a BaseImage or a SegmentationOutput
xfrac_dens (XFracDensFilePair) – The xfrac and dens file pair.
kbins (int, optional) – Count of bins for the spectrum plot, by default 15
z_layer (int) – If an Image3D is passed, then this layer will be used to plot the image. By default 0
- Returns:
The generated plot figure.
- Return type:
Figure
- classmethod power_spectrum_xfrac_dens(data: XFracDensFilePair | list[XFracDensFilePair], kbins: int = 15) Figure
Plot the power spectrum the 21cm signal using xfrac and dens-files.
- Parameters:
data (Union[XFracDensFilePair, list[XFracDensFilePair]]) – The xfrac and dens file pair or a list thereof.
kbins (int, optional) – Count of bins for the spectrum plot, by default 15
- Returns:
The generated plot figure.
- Return type:
Figure
- classmethod xfrac_dens(data: XFracDensFilePair) Figure
Plot the xfrac and dens files.
- Parameters:
data (XFracDensFilePair) – The xfrac and dens file pair.
- Returns:
The figure that was plotted.
- Return type:
Figure
karabo.simulation.signal.seg_u_net_segmentation module
Segmentation with SegU-net.
- class FixedSegUNet(tta: Literal[0, 1, 2] = 1, verbose: bool = False)
Bases:
segunet21cm
Fixes the bug such that the Segmentation can run.
Can be removed once Tools21cm is fixed.
- class SegUNetSegmentation(max_baseline: float = 70.0, tta: Literal[0, 1, 2] = 2)
Bases:
BaseSegmentation
SegU-net based segmentation. Using its own init for t2c (Tools21cm).
Examples
>>> from karabo.simulation.signal.plotting import SegmentationPlotting >>> from karabo.simulation.signal.signal_21_cm import Signal21cm >>> z = Signal21cm.get_xfrac_dens_file(z=7.059, box_dims=244 / 0.7) >>> sig = Signal21cm([z]) >>> signal_images = sig.simulate() >>> seg = SegUNetSegmentation(max_baseline=70.0, tta=2) >>> segmented = seg.segment(signal_images[0]) >>> SegmentationPlotting.seg_u_net_plotting(segmented=segmented)
- segment(image: Image3D) SegmentationOutput
SegU-net based segmentation. Using its own init for t2c (Tools21cm).
- Parameters:
image (Image3D) – The constructed simulation
- Returns:
SegU-net cube
- Return type:
karabo.simulation.signal.signal_21_cm module
21cm Signal simulation.
- class Signal21cm(files: list[XFracDensFilePair])
Bases:
BaseSignal
[Image3D
]21cm Signal simulation wrapper.
Examples
>>> from karabo.simulation.signal.plotting import SignalPlotting >>> redshifts = Signal21cm.available_redshifts() >>> z1 = Signal21cm.get_xfrac_dens_file(z=redshifts[0], box_dims=244 / 0.7) >>> z2 = Signal21cm.get_xfrac_dens_file(z=redshifts[1], box_dims=244 / 0.7) >>> sig = Signal21cm([z1, z2]) >>> signal_images = sig.simulate() >>> fig = SignalPlotting.brightness_temperature(signal_images[0]) >>> fig.savefig("brightness_temperature.png")
>>> from karabo.simulation.signal.plotting import SignalPlotting >>> z = Signal21cm.randomized_lightcones(200, 8) >>> SignalPlotting.brightness_temperature(z, z_layer=100)
- astro_gmell_base_url = 'https://ttt.astro.su.se/~gmell/244Mpc'
- classmethod available_redshifts() list[float]
Get all available redshifts.
- Returns:
List of all available redshifts.
- Return type:
list[float]
- classmethod available_redshifts_dens() list[float]
Get all available redshifts for dens files.
- Returns:
List of all available redshifts for dens files.
- Return type:
list[float]
- classmethod available_redshifts_xfrac() list[float]
Get all available redshifts for xfrac files.
- Returns:
List of all available redshifts for xfrac files.
- Return type:
list[float]
- static default_r_hii(redshift: float) float
Light cone HII region size calculation function (default implementation).
- Parameters:
redshift (float) – Redshift, to determine the radius for.
- Returns:
Light cone radius.
- Return type:
float
- dens_url = 'densities/nc250/coarser_densities'
- static get_xfrac_dens_file(z: float, box_dims: float) XFracDensFilePair
Get the xfrac and dens files from the server.
They are downloaded and cached on the first access.
- Parameters:
z (float) – Redshift value.
box_dims (float) – Box dimensions used for these files.
- Returns:
A tuple of xfrac and dens files.
- Return type:
- classmethod randomized_lightcones(n_cells: int, z: float, r_hii: Callable[[float], float] | None = None) Image3D
Generate an image with randomized light cones.
- Parameters:
n_cells (int) – The count of cells to produce.
z (float) – The redshift value for this image.
r_hii (Callable[[float], float], optional) – Radius function of the HII region. By default None, resulting in the execution of Signal21cm.default_r_hii
Notes
Implementation according to https://tools21cm.readthedocs.io/examples/lightcone.html
- Returns:
The generated cube with multiple light cones.
- Return type:
- simulate() list[Image3D]
Simulate the 21cm signal as a 3D intensity cube.
- Returns:
A list of 3D image cubes, based on the self.files list of provided xfrac and dens files. The pixel values are in Kelvin.
- Return type:
list[Image3D]
- Raises:
KaraboError – If a pair of xfrac and dens files do not have the same redshift values.
- xfrac_url = '244Mpc_f2_0_250'
karabo.simulation.signal.superimpose module
Superimpose two or more signals.
- class Superimpose
Bases:
object
Superimpose two or more signals.
- classmethod combine(*signals: BaseImage) BaseImage
Superimpose two or more signals int a single signal.
Superimposing is done by adding each signal to the previous one. To combine a Image3D with a Image2D, the Image2D will be added to every layer of the Image3D.
If only one signal is passed, it gets returned without any further processing.
- Parameters:
signals (BaseImage) – The signals that are to be combined.
- Returns:
If the input includes at least one Image3D, the return type is a Image3D, else Image2D.
- Return type:
- Raises:
KaraboError – When an empty signal list is passed in.
karabo.simulation.signal.superpixel_segmentation module
Segmentation with Superpixel.
- class SuperpixelSegmentation(max_baseline: float = 70.0, n_segments: int = 1000, max_iter: int = 5)
Bases:
BaseSegmentation
Superpixel based segmentation.
Examples
>>> from karabo.simulation.signal.plotting import SegmentationPlotting >>> from karabo.simulation.signal.signal_21_cm import Signal21cm >>> z1 = Signal21cm.get_xfrac_dens_file(z=7.059, box_dims=244 / 0.7) >>> sig = Signal21cm([z1]) >>> seg = SuperpixelSegmentation(max_baseline=70.0, max_iter=5, n_segments=1000) >>> signal_images = sig.simulate() >>> segmented = seg.segment(signal_images[0]) >>> SegmentationPlotting.superpixel_plotting(segmented, signal_images[0])
- segment(image: Image3D) SegmentationOutput
Superpixel based segmentation.
- Parameters:
image (Image3D) – The constructed simulation
- Returns:
Superpixel cube
- Return type:
karabo.simulation.signal.synchroton_signal module
Synchroton signal catalogue wrapper.
- class SignalSynchroton(centre: SkyCoord, fov: Angle, grid_size: tuple[Annotated[int, Literal['X']], Annotated[int, Literal['Y']]], diffuse_emission_path: Path | None = None, data_table_id: int = 1, mask_table_id: int = 2)
Bases:
BaseSignal
[Image2D
]Synchroton signal.
Examples
>>> from karabo.simulation.signal.plotting import SignalPlotting >>> from astropy import units >>> cent = SkyCoord(ra=10 * units.degree, dec=10 * units.degree, frame="icrs") >>> sync_sig = SignalSynchroton( ... centre=cent, ... fov=Angle([20, 20], unit=units.degree), ... grid_size=(100, 100), ... ) >>> imgs = sync_sig.simulate() >>> SignalPlotting.general_img(imgs[0], "Synchroton") >>> # Map overview plot >>> SignalPlotting.general_polar_plot( ... sync_sig.data["RA"], ... sync_sig.data["DEC"], ... sync_sig.data["intensity"], ... title="Synchroton map", ... log_bar=True, ... )
- MAX_GRID_X = 190
- MAX_GRID_Y = 190
karabo.simulation.signal.typing module
General typings for the signal package.
- class BaseImage(data: Annotated[ndarray[Any, dtype[float64]], Literal['X', 'Y']], x_label: Annotated[ndarray[Any, dtype[float64]], Literal['X']], y_label: Annotated[ndarray[Any, dtype[float64]], Literal['Y']], redshift: float, box_dims: float)
Bases:
object
A general image, meant to be subclassed.
- box_dims: float
Box dimensions used to create the image. Negative number if not provided.
- data: Annotated[ndarray[Any, dtype[float64]], Literal['X', 'Y']]
Image data in a 2D array.
- redshift: float
Redshift value. Negative number if not provided.
- x_label: Annotated[ndarray[Any, dtype[float64]], Literal['X']]
X-labels.
- y_label: Annotated[ndarray[Any, dtype[float64]], Literal['Y']]
Y-labels.
- class Image2D(data: Annotated[ndarray[Any, dtype[float64]], Literal['X', 'Y']], x_label: Annotated[ndarray[Any, dtype[float64]], Literal['X']], y_label: Annotated[ndarray[Any, dtype[float64]], Literal['Y']], redshift: float, box_dims: float)
Bases:
BaseImage
A 2D image.
- class Image2DOriented(data: Annotated[ndarray[Any, dtype[float64]], Literal['X', 'Y']], x_label: Annotated[ndarray[Any, dtype[float64]], Literal['X']], y_label: Annotated[ndarray[Any, dtype[float64]], Literal['Y']], redshift: float, box_dims: float, sky_model: SkyModel)
Bases:
Image2D
A 2D image combined with a sky model.
- class Image3D(data: Annotated[ndarray[Any, dtype[float64]], Literal['Z', 'X', 'Y']], x_label: Annotated[ndarray[Any, dtype[float64]], Literal['X']], y_label: Annotated[ndarray[Any, dtype[float64]], Literal['Y']], redshift: float, box_dims: float, z_label: Annotated[ndarray[Any, dtype[float64]], Literal['Z']])
Bases:
BaseImage
A 3D cube of images along the z-axis.
- data: Annotated[ndarray[Any, dtype[float64]], Literal['Z', 'X', 'Y']]
Image data in a 3D cube.
- z_label: Annotated[ndarray[Any, dtype[float64]], Literal['Z']]
Z-labels.
- class SegmentationOutput(image: Image3D, xhii_stitch: npt.NDArray[np.bool_] | None, mask_xhi: npt.NDArray[np.bool_], dt_smooth: npt.NDArray[np.float_], xhi_seg_err: npt.NDArray[np.float_] | None)
Bases:
NamedTuple
Output of the segmentation.
- dt_smooth: ndarray[Any, dtype[float64]]
Alias for field number 3
- mask_xhi: ndarray[Any, dtype[bool_]]
Alias for field number 2
- xhi_seg_err: ndarray[Any, dtype[float64]] | None
Alias for field number 4
- xhii_stitch: ndarray[Any, dtype[bool_]] | None
Alias for field number 1
- class XFracDensFilePair(xfrac_path: Path, dens_path: Path, box_dims: float)
Bases:
NamedTuple
A pair of matching XFrac and dens files (Same Redshift value).
- box_dims: float
Length of the volume along each direction in [Mpc].
- dens_path: Path
Path to the dens file.
- load() XFracDensLoaded
Load the files into memory.
- Returns:
The loaded files.
- Return type:
- xfrac_path: Path
Path to the x-frac file.
- class XFracDensLoaded(x_file: t2c.XfracFile, d_file: t2c.DensityFile, x_frac: FloatArrayNxNxN, dens: FloatArrayNxNxN, z: float, box_dims: float)
Bases:
NamedTuple
The Xfrac and dens files loaded into memory.
- box_dims: float
Length of the volume along each direction in [Mpc].
- d_file: DensityFile
Loaded density file object.
- dens: Annotated[ndarray[Any, dtype[float64]], Literal['N']]
Density values in a 3D cub N*N*N.
- x_file: XfracFile
Loaded xfrac file object.
- x_frac: Annotated[ndarray[Any, dtype[float64]], Literal['N']]
xfrac values in a 3D cube N*N*N.
- xy_dims() tuple[Annotated[ndarray[Any, dtype[float64]], Literal['N']], Annotated[ndarray[Any, dtype[float64]], Literal['N']]]
Get the x, y dimensions of the loaded.
- Returns:
A tuple containing the x and y labels.
- Return type:
tuple[FloatArrayN, FloatArrayN]
- z: float
Redshift value