Skip to content

Commit 7518c82

Browse files
committed
Add quick'n'simple CLI for running CASA vis simulation.
1 parent 9928f88 commit 7518c82

5 files changed

Lines changed: 84 additions & 49 deletions

File tree

‎setup.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
'astropy',
88
'attrs',
99
'click',
10+
'drive-casa>=0.7.6',
1011
'pandas',
1112
'pytest',
1213
'six',
@@ -31,6 +32,7 @@
3132
fastimg_extract_lsm=fastimgproto.scripts.extract_lsm:cli
3233
fastimg_simpipe=fastimgproto.scripts.simpipe:cli
3334
fastimg_simple_imager=fastimgproto.scripts.simple_imager:cli
35+
fastimg_simulate_vis_with_casa=fastimgproto.scripts.simulate_vis_with_casa:cli
3436
fastimg_sourcefind=fastimgproto.scripts.sourcefind:cli
3537
''',
3638
)

‎src/fastimgproto/casa/simulation.py‎

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
from __future__ import print_function
2+
23
import os
4+
import shutil
5+
6+
import astropy.units as u
37
import drivecasa
48
import drivecasa.commands.simulation as sim
5-
from drivecasa.utils import ensure_dir
6-
import astropy.units as u
9+
import drivecasa.commands.subroutines
710
from astropy.time import Time
11+
from drivecasa.utils import ensure_dir
812
from fastimgproto.pipeline.data import vla_c_antennalist_path
913

10-
def simulate_vis_with_casa(pointing_centre, source_list, output_dir):
14+
15+
def simulate_vis_with_casa(pointing_centre, source_list, vis_path,
16+
overwrite=True, echo=False):
1117
"""
1218
Use casapy to simulate a visibility measurementset with noise.
1319
@@ -16,28 +22,41 @@ def simulate_vis_with_casa(pointing_centre, source_list, output_dir):
1622
Args:
1723
pointing_centre (:class:`astropy.coordinates.SkyCoord`)
1824
source_list: list of :class:`fastimgproto.skymodel.helpers.SkySource`
19-
output_dir (str): Output directory which will contain `vis.ms`
25+
vis_path (str): Path to visibilities generated.
26+
echo (bool): Echo the CASA output to terminal during processing.
2027
2128
Returns (str): Full path to `vis.ms`.
2229
"""
2330

24-
ensure_dir(output_dir)
2531

26-
commands_logfile = os.path.join(output_dir, "./casa-visibilities_for_point_source-commands.log")
27-
component_list_path = os.path.join(output_dir, './sources.cl')
28-
output_visibility = os.path.abspath(os.path.join(output_dir, './vis.ms'))
32+
vis_abspath = os.path.abspath(vis_path)
33+
commands_logfile = vis_abspath + "_casa_commands.log"
34+
casa_logfile = vis_abspath + "_casa_log.log"
35+
component_list_path = vis_abspath + "_sources.cl"
2936

37+
for outdir in vis_abspath, component_list_path:
38+
if os.path.isdir(outdir):
39+
if overwrite:
40+
shutil.rmtree(outdir)
41+
else:
42+
raise IOError("{} already present and overwrite==False.".format(
43+
outdir
44+
))
3045
if os.path.isfile(commands_logfile):
31-
os.unlink(commands_logfile)
32-
casa = drivecasa.Casapy(commands_logfile=commands_logfile)
46+
os.remove(commands_logfile)
47+
ensure_dir(os.path.dirname(vis_abspath))
48+
49+
casa = drivecasa.Casapy(commands_logfile=commands_logfile,
50+
casa_logfile=casa_logfile,
51+
echo_to_stdout=echo)
3352
script = []
53+
# Add subroutine definition, for manual reproduction with CASA:
54+
script.append(drivecasa.drivecasa.commands.subroutines.def_load_antennalist)
3455

56+
# Define some observation parameters...
3557
# For VLA reference numbers, see:
3658
# https://science.nrao.edu/facilities/vla/docs/manuals/oss/performance/fov
3759
# https://science.nrao.edu/facilities/vla/docs/manuals/oss/performance/resolution
38-
39-
40-
# Define some observation parameters:
4160
obs_central_frequency = 3. * u.GHz
4261
obs_frequency_bandwidth = 0.125 * u.GHz
4362
primary_beam_fwhm = (45. * u.GHz / obs_central_frequency) * u.arcmin
@@ -49,7 +68,7 @@ def simulate_vis_with_casa(pointing_centre, source_list, output_dir):
4968
out_path=component_list_path)
5069

5170
# Open the visibility file
52-
sim.open_sim(script, output_visibility)
71+
sim.open_sim(script, vis_abspath)
5372

5473
# Configure the virtual telescope
5574
# sim.setpb(script,
@@ -81,5 +100,5 @@ def simulate_vis_with_casa(pointing_centre, source_list, output_dir):
81100
sim.corrupt(script)
82101
sim.close_sim(script)
83102

84-
casa.run_script(script)
85-
return output_visibility
103+
casa_output = casa.run_script(script)
104+
return casa_output

‎src/fastimgproto/pipeline/image.py‎

Lines changed: 0 additions & 31 deletions
This file was deleted.

‎src/fastimgproto/scripts/simpipe.py‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import fastimgproto.casa.io as casa_io
77
import fastimgproto.casa.reduction as casa_reduce
88
import fastimgproto.casa.simulation as casa_sim
9-
import fastimgproto.pipeline.image as pyimage
109
import fastimgproto.visibility as visibility
1110
import logging
1211
import os
@@ -55,7 +54,7 @@ def main(method):
5554
vis_path = casa_sim.simulate_vis_with_casa(pointing_centre,
5655
source_list,
5756
# source_list_w_transient,
58-
output_dir=output_dir)
57+
vis_path=output_dir)
5958
uvw = casa_io.get_uvw_in_lambda(vis_path)
6059
stokes_i = casa_io.get_stokes_i_vis(vis_path)
6160

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
"""
2+
Simulated pipeline run
3+
"""
4+
import click
5+
import astropy.units as u
6+
import fastimgproto.casa.simulation as casa_sim
7+
import logging
8+
import os
9+
from astropy.coordinates import Angle, SkyCoord
10+
from fastimgproto.skymodel.helpers import SkyRegion, SkySource
11+
from fastimgproto.pipeline.skymodel import (get_spiral_source_test_pattern)
12+
13+
14+
@click.command()
15+
@click.argument('outpath', type=click.Path(exists=False))
16+
def cli(outpath):
17+
logging.basicConfig(level=logging.DEBUG)
18+
pointing_centre = SkyCoord(180 * u.deg, 8 * u.deg)
19+
field_of_view = SkyRegion(pointing_centre,
20+
radius=Angle(1 * u.deg))
21+
22+
image_size = 1024 * u.pixel
23+
cell_size = 3 * u.arcsecond
24+
25+
# source_list = get_lsm(field_of_view)
26+
# source_list = get_spiral_source_test_pattern(field_of_view)
27+
extra_src_position = SkyCoord(ra=pointing_centre.ra + 0.01 * u.deg,
28+
dec=pointing_centre.dec + 0.01 * u.deg, )
29+
extra_src = SkySource(position=extra_src_position,
30+
flux=0.4 * u.Jy)
31+
source_list = [SkySource(position=pointing_centre, flux=1 * u.Jy),
32+
extra_src,
33+
]
34+
35+
transient_posn = SkyCoord(
36+
ra=field_of_view.centre.ra - 0.05 * u.deg,
37+
dec=field_of_view.centre.dec - 0.05 * u.deg)
38+
transient = SkySource(position=transient_posn, flux=0.5 * u.Jy)
39+
40+
# source_list_w_transient = source_list + [transient]
41+
42+
casa_sim.simulate_vis_with_casa(pointing_centre,
43+
source_list,
44+
# source_list_w_transient,
45+
vis_path=outpath,
46+
echo=True)

0 commit comments

Comments
 (0)