Primary beam code for the Murchison Widefield Array (MWA) radio telescope.
Project description
mwa_hyperbeam
Primary beam code for the Murchison Widefield Array (MWA) radio telescope.
This code exists to provide a single correct, convenient implementation of Marcin Sokolowski's Full Embedded Element (FEE) primary beam model of the MWA, a.k.a. "the 2016 beam". This code should be used over all others. If there are soundness issues, please raise them here so everyone can benefit.
Usage
hyperbeam
requires the MWA FEE HDF5 file. This can be obtained with:
wget http://cerberus.mwa128t.org/mwa_full_embedded_element_pattern.h5
When making a new beam object, hyperbeam
needs to know where this HDF5 file
is. The easiest thing to do is set the environment variable MWA_BEAM_FILE
:
export MWA_BEAM_FILE=/path/to/mwa_full_embedded_element_pattern.h5
(On Pawsey systems, this should be export MWA_BEAM_FILE=/pawsey/mwa/mwa_full_embedded_element_pattern.h5
)
hyperbeam
can be used by any programming language providing FFI via C. In
other words, most languages. See Rust, C and Python examples of usage in the
examples
directory. A simple Python example is:
import mwa_hyperbeam
beam = mwa_hyperbeam.FEEBeam()
print(beam.calc_jones(0, 0.7, 167e6, [0]*16, [1]*16, True))
[ 1.73003520e-05-1.53580286e-05j -2.23184781e-01-4.51051073e-02j
-1.51506097e-01-4.35034884e-02j -9.76099405e-06-1.21699926e-05j]
Installation
Python PyPI
If you're using Python version >=3.6:
pip install mwa-hyperbeam
Pre-compiled
Have a look at the GitHub
releases page. There is
a Python wheel for all versions of Python 3.6+, as well as shared and static
objects for C-style linking. To get an idea of how to link hyperbeam
, see the
beam_calcs.c
file in the examples directory.
Because these hyperbeam
objects have the HDF5 library compiled in, the HDF5
license is also distributed.
From source
Prerequisites
-
Cargo and a Rust compiler.
rustup
is recommended:https://www.rust-lang.org/tools/install
The Rust compiler must be at least version 1.47.0:
$ rustc -V rustc 1.47.0 (18bf6b4f0 2020-10-07)
-
- Optional; use the
hdf5-static
feature. - Ubuntu:
libhdf5-dev
- Arch:
hdf5
- Optional; use the
Clone the repo, and run:
cargo build --release
For usage with other languages, an include file will be in the include
directory, along with C-compatible shared and static objects in the
target/release
directory.
To make hyperbeam
without a dependence on a system HDF5 library, give the
build
command a feature flag:
cargo build --release --features=hdf5-static
This will automatically compile the HDF5 source code and "bake" it into the
hyperbeam
products, meaning that HDF5 is not needed as a system dependency.
CMake
version 3.10 or higher is needed to build the HDF5 source.
Python
To install hyperbeam
to your currently-in-use virtualenv or conda environment,
you'll need the Python package maturin
(can get it with pip
), then run:
maturin develop --release -b pyo3 --cargo-extra-args="--features python"
If you don't have or don't want to install HDF5 as a system dependency, include
the hdf5-static
feature:
maturin develop --release -b pyo3 --cargo-extra-args="--features python,hdf5-static"
Comparing with other FEE beam codes
Below is a table comparing other implementations of the FEE beam code. All
benchmarks were done with unique azimuth and zenith angle pointings, and all on
the same system. The CPU is a Ryzen 9 3900X, which has 12 cores and SMT (24
threads). All benchmarks were done in serial, unless indicated by "parallel".
Python times were taken by running time.time()
before and after the
calculations. Memory usage is measured by running time -v
on the command (not
the time
associated with your shell; this is usually at /usr/bin/time
).
Code | Number of pointings | Duration | Max. memory usage |
---|---|---|---|
mwa_pb | 500 | 98.8 ms | 134.6 MiB |
100000 | 13.4 s | 5.29 GiB | |
1000000 | 139.8 s | 51.6 GiB | |
mwa-reduce (C++) | 500 | 115.2 ms | 48.9 MiB |
10000 | 2.417 s | 6.02 GiB | |
mwa_hyperbeam | 500 | 30.8 ms | 9.82 MiB |
100000 | 2.30 s | 17.3 MiB | |
1000000 | 22.5 s | 85.6 MiB | |
mwa_hyperbeam (parallel) | 1000000 | 1.73 s | 86.1 MiB |
mwa_hyperbeam (via python) | 500 | 28.5 ms | 35.0 MiB |
100000 | 4.25 s | 51.5 MiB | |
1000000 | 44.0 s | 203.8 MiB | |
mwa_hyperbeam (via python, parallel) | 1000000 | 3.40 s | 203.2 MiB |
Not sure what's up with the C++ code. Maybe I'm calling CalcJonesArray
wrong,
but it uses a huge amount of memory. In any case, hyperbeam
seems to be
roughly 10x faster.
Troubleshooting
Run your code with hyperbeam
again, but this time with the debug build. This
should be as simple as running:
cargo build
and then using the results in ./target/debug
.
If that doesn't help reveal the problem, report the version of the software used, your usage and the program output in a new GitHub issue.
hyperbeam?
AERODACTYL used HYPER BEAM!
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 Distributions
Built Distribution
File details
Details for the file mwa_hyperbeam-0.3.0-cp36-abi3-manylinux2010_x86_64.whl
.
File metadata
- Download URL: mwa_hyperbeam-0.3.0-cp36-abi3-manylinux2010_x86_64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.6+, manylinux: glibc 2.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/51.1.1 requests-toolbelt/0.9.1 tqdm/4.55.1 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 877fe4c3fb0e309d5f70b4264da8e56471468443a8252160e272610691de3371 |
|
MD5 | 6b87589ce61c61bdbc2d0e02ef10f824 |
|
BLAKE2b-256 | 32253664ea2b753906f0c01a1ee89c334d8caa6dd7f6d86b40fa22a27566c116 |