Simulating Atmospheric Phase Errors, Phase Correction and the Impact on ALMA Science
Abstract
We present a framework for modelling atmospheric phase errors and their correction by both the fast-switching and water vapour radiometeric techniques. Notable features are simulating three dimensional turbulent volumes instead of flat phase screens, considering three representative configurations of ALMA and parametrisation in terms of phase fluctuations on a 300m baseline, allowing referencing to the site-testing interferometer data. We use this framework to simulate relative point source sensitivity and effective resolution for a range of atmospheric conditions, with and without phase correction. We also consider the effect of phase fluctuation on short `snapshot' observations, where the variance and correlation of atmospheric phase fluctuations between the antennas becomes important.
Full text
PDF file on this server. Published as ALMA Memo 582.
Software
All of the software is made available under the GPL license and all of it is without any warranty. See the preamble on oof software page.
Please note that this is not end-user software. To make use of it you will need to go through compilation and write some code yourself. Also please note that the collection below is somewhat fragmentary, i.e., it does not contain absolutely every piece of code used in the course of preparing results shown in the memo. However, if you find that anything important is missing please write to me and it should be possible to post it here.
Efficient generation of 3D turbulent volumes
The code for generating the 3D turbulent is a self-contained sub-package of the library BNLib. The relevant functionality can be relatively easily extracted, but it is recommended to simply build and use the library as a whole.
Notes on building the library:
- You will need the GSL library (used for random number generation) and a standard C++ compiler. If you install GSL using your package manager, remember to ask for the development version that includes the header files.
- There are python bindings to the library which are optional. For simplest build, disable these by passing the "--disable-pybindings" option to the configure script.
- You don't need any special privileges to build or use this library. If you want to use it outside the source tree, it is best to pass the "--prefix=/home/me/mylibdir" option to configure to make it install in a convenient place.
- A sample configure invocation would therefore be:
./configure --disable-pybindings --prefix=/home/me/mylibdir make make install
You should also consult the README file of the library
Current version of library: V1.3
The current version of the library is V1.3: download as a tar.bz2 file
Previous version: V1.2.1
The manual for the turbulence generation code is available as a PDF.
kvolume
"kvolume" is a simple program that illustrates how to use the bnlib library to generate a three dimensional Kolmogorov field. It also allows the user to generate such a field of arbitrary size (limited by computer memory only) and dump it to a file.
"kvolume" is distributed as part of bnlib from version V1.3 -- see the "test" subdirectory.
You can get instructions for usage by typing "./kvolume --help"
Other software components
Below are all of the other software components that were developed for deriving the results described in the memo:
- Parse antenna position lists almaconfparse.py
- Generation of fast-switched and simple observations without phase errors: bnalmasim.py
- Script illustrating the calls to bnalmasim.py: generate_switching.py
- Script that uses the c++ kolmogorov code to generate the phase screens: turbulencescreens.py
- Script for making dirty maps in Obit: obittools.py
- Blowing turbulent screens across the ALMA array: uvblow.py
- Generate whole data sets for analysis (i.e., multiple configurations, thicknesses, etc): imagingsim.py
- Analysis of dirty maps from Obit: imagingsim_obit.py
- Tools for dealing with UV-FITS files directly from Python: uvfits.py
- Simple phase calibration of UV-FITS files directly in Python: uvfits_cal.py