SHIMMERR (Station Heterogeneity Impact on Multi-dimensional beam-Modelling Errors simulatoR and calibratoR) is a python package created to simulate the effect of beam errors on hierarchical stations in radio-interferometers.
Project description
SHIMMERR
SHIMMERR (Station Heterogeneity Impact on Multi-dimensional beam-Modelling Errors simulatoR and calibratoR) is a python package created to simulate the effect of beam errors on hierarchical stations in radio-interferometers. It has mostly been developed around usage with LOFAR-HBA, but is able to ingest any hierarchical interferometer and vary the gains of elements within the station. Furthermore, it has a built-in DDECal module to calibrate data with perturbed beams. Currently, SHIMMERR only contains a single polarisation (treated as Stokes I).
Example usage
Inspecting perturbed beams
The load_array submodule can be used to either load a LOFAR Station (packaged with SHIMMERR), or read an array from a CSV file with ETRS coordinates (with load_array_from_file).
from shimmerr.load_array import load_LOFAR
interferometer = load_LOFAR(mode="Dutch sensitive", pointing_ra=0, pointing_dec=90)
station = interferometer["RS503HBA"]
The pointing can also be changed later, for example pointing to Cassiopeia A:
station.update_station_pointing(new_pointing_ra=350.8575, new_pointing_dec=58.148167)
The beam can then be plot in either the spatial dimensions or the spectrotemporal dimension:
from shimmerr.visualization import plot_spatial_beam, plot_spectrotemporal_beam
plot_spatial_beam(
station,
n_altitude=250,
n_azimuth=500,
frequency=150e6,
vmin=-50,
time="2025-03-21T15:00:00.000",
antenna_mode="simplified",
beam_plot_mode="power",
beam_value_mode="full",
)
plot_spectrotemporal_beam(
station,
right_ascension=16.135,
declination=40.733889,
vmin=-50,
utc_starttime="2025-03-21T15:00:00.000",
antenna_mode="simplified",
beam_plot_mode="power",
beam_value_mode="full",
number_of_timeslots=500,
)
The resulting beams are
| Spatial | Spectrotemporal |
|---|---|
Errors can be introduced to compare how this changes the beam:
# Add random gain drift to tile gains
station.add_random_gain_drift(sigma_tile=1e-2, sigma_antenna=0)
# Break a few individual dipole antennas
station.break_elements(mode="typical", number=5)
# Control an individual tile gain (element of a station)
station.elements[5].g = 2 + 0.1j
# Or an individual dipole (element of a tile --> element of an element)
station.elements[5].elements[8].g = 1 + 1j
plot_spatial_beam(
station,
n_altitude=250,
n_azimuth=500,
frequency=150e6,
vmin=-50,
time="2025-03-21T15:00:00.000",
antenna_mode="simplified",
beam_plot_mode="power",
beam_value_mode="full",
)
plot_spectrotemporal_beam(
station,
right_ascension=16.135,
declination=40.733889,
vmin=-50,
utc_starttime="2025-03-21T15:00:00.000",
antenna_mode="simplified",
beam_plot_mode="power",
beam_value_mode="full",
number_of_timeslots=500,
)
The resulting beams are
| Spatial | Spectrotemporal |
|---|---|
More examples of using these functions can be found in example_scripts
Calibration
A simple calibration example. For calibrating, we need an interferometer and a sky model, for example:
from shimmerr.sources import Skymodel
from shimmerr.load_array import load_LOFAR
skymodel = Skymodel("files/skymodels/NCP_Cas_Cyg_3source.txt")
interferometer = load_LOFAR(mode="EoR", pointing_dec=90)
for station in interferometer.keys():
interferometer[station].break_elements(
mode="maximum",
number=2,
)
Then, we can predit visibilities to calibrate on
from shimmerr.visibility import predict_data
import numpy as np
predict_data(
array=interferometer,
skymodel=skymodel,
frequencies=np.arange(135e6, 147e6, 195e4),
start_time_utc= "2025-03-31T15:48:38",
filename="cal_test",
data_path=<user folder>,
time_resolution=60,
duration=1,
antenna_mode="simplified",
basestation="CS002HBA0",
reuse_tile_beam=False,
SEFD=3e3,
)
And then we can run the calibration
from shimmerr.calibration import DDEcal
calibrator = DDEcal(
array=interferometer,
reference_station="CS002HBA0",
n_channels=1,
n_times=5,
uv_lambda=[250, 5000],
antenna_mode="simplified",
update_speed=0.2,
smoothness_scale=2e6,
n_iterations=50,
)
results = calibrator.run_DDEcal(
visibility_file=f"{folder}/cal_test/data.csv",
fname="my_gains",
skymodel=skymodel,
reuse_predict=False,
)
The user can then use the plot_gains or plot_convergence routines fom shimmerr.visualization to inspect the results. Also, shimmerr.metrics/compute_realized_gains can be used to find the ideal gain, which can be compared to the estimated gain with shimmerr.visualization.plot_gain_errors.
Documentation
The full Sphinx docs can be found here.
Installation
Recommended: pip install shimmerr
Requirements
astropymatplotlibnumbdanumpypandastqdmPython-casacoreLofarantpos
Developed by Stefanie Brackenhoff.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file shimmerr-1.tar.gz.
File metadata
- Download URL: shimmerr-1.tar.gz
- Upload date:
- Size: 680.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
427797cc84cbb4511d86d0a31f2f51c340471d0794e1b8033efb7de41ea9e7ca
|
|
| MD5 |
65a8c30d2cca3db4cfb00cd17f5835f3
|
|
| BLAKE2b-256 |
367a1b212bd9af0823a39145b8ba6f9e7ded762045ac2178b9797952ae6d0c1b
|
File details
Details for the file shimmerr-1-py3-none-any.whl.
File metadata
- Download URL: shimmerr-1-py3-none-any.whl
- Upload date:
- Size: 695.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc6397fa687a915ce15089331ec7178d40018b6aafad87b539ee152f1aacb684
|
|
| MD5 |
624fd639c20abbc34a6f3ebc63942933
|
|
| BLAKE2b-256 |
caf10e907b178660e98878f6e81b3dcf12e2750d6ced62916bd7bf3b9204af03
|