Aims of the Project
The AST2003H/2017 Radio Astronomy Project (RAP) is meant to develop a variety of important scientific and analytical skills. The main purpose of the project is to design a good radio interferometer, within a set of operational constraints. The optimization problem is largely a secondary consideration – in that you need to have a design process first before you can start optimizing, i.e., you need to have something to optimize!
The project is first and foremost a astronomical project.
Therefore, the main skills that each member of the project ought to develop are as follows:
- Design a reasonable mock/model image.
- Generate a sensible array design.
- Use the mock image, the array design and the observational parameters to simulate a radio interferometric observation.
- Image the the visibility data set to produce an output image. This needs to be compared with your input image to assess the performance of your telescope.
You can start the optimizing once you have an idea of the design process, and after you’ve developed a suitable understanding or intuition of what goes into the design into a good array.
Optimisation
There are several constraints that need to considered when designing your array. You have to balance the cost of construction and operation; system temperature, efficiency, number of dishes and, importantly, imaging performance.
Optimisation is a tricky business, and your final design will be the best possible compromise of all these factors. I imagine that some teams will design arrays that are under budget, but not sensitive enough; other teams may design arrays that are insanely sensitive but cost too much to operate. Each team needs to motivate what makes their design optimal. Each array won’t be perfect, but the main objective is to produce an array that generates good images.
The Visibility Domain
It is essential that you appreciate the contents of Chapter 3: Essential Radio Astronomy. In particular, consider Section 3.3. Measurements of an astronomical source are made in the aperture domain of a telescope, which have associated coordinates \((u,v)\). This is independent of the wavelength at which you are observing, i.e., this is the same for an optical and a radio telescope.
The domain described by the coordinates \((u,v)\) is referred as the visibility domain, and the measurements \(g(u,v)\) are referred to as the visibilities. This is what’s contained in the measurement set produced by radio telescopes.
Any astronomical source has a representation in this aperture domain, which we can denote as \(V(u,v)\). The quantity that you measure on the sky can be denoted in sky coordinates \((l,m)\) as follows:
\[f(l,m) = \int_{-\infty}^{-\infty} \int_{-\infty}^{-\infty} g(u,v)e^{-2\pi i(ul + vm)}du dv\]In practice, \(g'(u,v)=S(u,v)\times g(u,v)\) is measured, where \(S(u,v)\) is the sampling function produced by your aperture, and referred to as a convolution. In our case, \(S(u,v)\) is produced by the radio telescope, and the equation described above is a Fourier Transform.
Each pair of antennas (or baselines) produces a \((u,v)\) point at each instant in time, for each channel or frequency increment.
Thus, the job of the radio astronomer is to produce a reliable reconstruction of \(f(l,m)\), and this is a central consideration of your project – you need a well sampled visibility domain to help you undo the convolution of the visibilities with your sampling function.
Usually, this is a one-sided process, i.e., you cannot change the array layout you have, you can only work on the process of deconvolution or imaging. For your project, you will be designing an array that provides an optimal sampling in the \((u,v)\) domain, which will diminish the difficulty with deconvolution.
Making a Mock Image
You need to construct a mock image to use for your simulation, and this is done by inserting a
series of 2D Gaussian sources into an image. In your dummy-settings.txt
file, you will find the
following section:
[sources]
source1=10h00m00.00s,-30d00m00.0s,1,3.0,1.0,90
source2=10h00m00.00s,-30d00m03.0s,1,1.0,1.0,90
source3=10h00m00.00s,-30d05m03.0s,1,10.0,1.0,45
Each line describes the distribution of the source, and the format is as follows:
<name>=<ra>,<dec>,<flux>,<gmaj>,<gmin>,gpa
where:
- The RA is in the format
12h34m56.78s
. - The Dec is in the format
-12d34m56.78s
. - The flux is in
Jy
. - The major and minor axes of the 2D Gaussian,
gmaj
andgmin
, respectively, are in arcseconds. - The position angle
gpa
or orientation of the 2D Gaussian is in degrees.
Your sources ought to be distributed throughout the main beam of your telescope, and you can use any of the formulae in the ERA notes to calculate the field of view for your dishes.
Also keep in mind that your highest resolution is determined by the largest baseline between dishes; so this sets a natural limit on how close each source ought to be in the mock image.
Designing an array
I have provided a notebook that illustrates the MeerKAT design, but there are many different designs to choose from. For example, the VLA is designed to reach a full synthesis after about 8-hours, and the GMRT has a similar design. The WSRT telescope is an east-west array with redundant spacings, which imprints the immediately recognisable PSF in the image. The MeerKAT and ASKAP arrays are semi-random, which has the benefit of providing a continuous range of sensitivities as a function of resolution.
Simulation
The CASA task simobserve
is quite a lovely and sophisticated task. For a given antenna
configuration and mock image, simobserve
calculates the \((u,v,w)\) positions
corresponding to the observation; calculates the Fourier Transform \(g(u,v,w)\) of your mock image
and samples this distribution at the discrete \((u,v,w)\) coordinates corresponding to your
observation.
The parameters of your mock observation are defined in your dummy-settings
file as follows:
[observation]
ra = 10h00m00.0s
dec = -30d00m00.0s
filename = Gaussians
imsize = 1024
pixelsize = 4.0arcsec
reffreq = 1420MHz
freqint = 1GHz
integration = 10
totaltime = 7200s
project = sim
skymodel = Gaussians.im
config = brads-random-array.cfg
This observation section is used by both the make-model.py
and the make-sim.py
scripts. In this
case, the ra
and dec
fields denote the centre of your simulated observation. The ra
and dec
values are used to calculate a pointing file, which is used by simobserve
. The
filename
field denotes the leading name of your mock image.
Now, your mock image file is pixelated, and you need to define how large the image is, in pixels, and how large each pixel is. For a given field of view, \(N_\mathrm{pixels}\times\theta_{pixel}\sim\theta_\mathrm{FoV}\).
Now the frequency interval here is 1GHz
. Don’t forget to change this! Also, the default
integration time is 10
seconds. Both these values need to be changed, i.e., the frequency
interval for this project is 10MHz
, but the integration time depends on the longest baseline in
your array, that is, the longer the baseline the shorter your integration time ought to be!
Finally, you need to specify the project name, skymodel and the configuration. Output files will be
dumped into the project/
directory after a successful simulation. Suppose you’ve used a
configuration called brads-config.cfg
. The project/
directory will thus contain the folling files:
project.brads-config.ms/
project.brads-config.noisy.ms/
project.brads-config.ptg.txt
project.brads-config.simobserve.last
project.brads-config.skymodel/
project.brads-config.skymodel.flat/
You need to use the project.brads-config.ms
file for your imaging, and you usually specify the
visibility as vis=project.brads-config.ms
.
Imaging aka Deconvolution aka Cleaning
Deconvolution is the process of iterative image reconstruction; it is the iterative removal of the
effect of the telescope’s sampling function. CASA uses the CLEAN
task to do this, and you can
run the task using the script make-image.py
. There is a very useful presentation on the details of
CLEAN
clean, which will be very interesting as a reference.
The script make-image.py
makes use of the settings file, and the parameters are defined in the
associated section:
[clean]
vis = sim/sim.brads-random-array.ms
imagename = sim.dirty
mode = mfs
niter = 100
threshold = 0.0mJy
psfmode = clark
imagermode = csclean
ftmachine = mosaic
imsize = 1024
cell = 4arcsec
stokes = I
weighting = natural
robust = 0.0
I have included the important parameters here. The mode='mfs'
chooses the multi-frequency
synthesis algorithm, which is a redundant since we are only imaging a single frequency. niter=100
instructs the algorithm to perform 100 CLEAN
iterations; please consult the associated
documentation for more details on how this works. The threshold='0.0mJy'
parameter controls
when the algorithm stops; in this case, the algorithm will stop when/if the brightest remaining
pixel is equal to 0.0mJy
.
The threshold
and niter
parameters are closely related; the algorithm will stop when either
condition is reached.
Finally, the cell
parameter sets the pixel size, and the imsize
parameter defines the size of
the image in pixels. It is common practice to define the imsize
parameter in powers of 2, since
this makes FFT’s easier to grid.
In the case above, I have misleadingly provided the output naming tag of sim.dirty
; since n=100
,
the output image will not be the dirty image.
After the CLEAN
algorithm has completed, the following files will be produced:
sim.dirty.flux/
sim.dirty.image/
sim.dirty.image.fits
sim.dirty.model/
sim.dirty.psf/
sim.dirty.psf.fits
sim.dirty.residual/
The files contain the following:
*.flux
: This contains the estimate of the primary beam of the telescope. The FWHM of this image will be a close match of the calculated FWHM corresponding to your dish size.*.image
: This contains the output image. Thefits
associated image has been generated for your convenience.*.model
: This contains the pixels used when doing the deconvolution, and will generally cluster around the positions of your mock sources. If you’ve computed the dirty image, the*.model
image will be empty.*.psf
: This is the Fourier Transform of the telescopes sampling function. Thefits
image has been generated usingexportfits
, and is easily imported into a notebook using the APLPY software.*.residual
: This is the residual after the bright sources have been deconvolved.
The Dirty Image
Setting niter=0
simply instructs the CLEAN
algorithm to do a Fourier Transform of the visibility
data, without performing any deconvolution. The dirty image is the inverse Fourier Transform of
a convolution between the source visibility function and the sampling function produced by the
telescope configuration. An ideal dirty image has a minimal amount of coherent structure imprinted
from the sampling function.
The CLEAN Image
Setting niter>0
instructs the CLEAN
algorithm to deconvole the PSF.
Weighting the Visibilities
You can control the shape and structure of the deconvolved beam by weighting the visibilities, using
the weighting
and the robust
parameter. Setting weighting='briggs'
allows you to tune the
PSF by choosing different values of the robust parameter. With weighting='briggs'
you can vary the
robust
parameter between -2.0 and +2.0. In short, weighting='briggs'; robust=2
maximizes
sensitivity, while weighting='briggs'; robust=-2
maximizes the resolution.
Conclusion
The concepts of simulation and imaging are fairly straightforward, but the implementation can be
tricky. Therefore, it is very important for you to try to run the simulations yourself. Start off
with a few sources and a small number of dishes; make dirty images, or clean lightly, i.e., with a
small value of niter
. Soon you will develop an intuition for the process and, importantly, an
understanding of how to design your optimal array. Good luck!