Skip to content

Commit cb384a7

Browse files
committed
Cleanup and restructuring of scripts. Implement simulate / image / reduce scripts.
(Pure Python, no CASA dependencies.)
1 parent 55e0352 commit cb384a7

17 files changed

+264
-340
lines changed

setup.py

+16-11
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,21 @@
1414
'scipy',
1515
]
1616

17+
18+
entry_points=('''
19+
[console_scripts]
20+
fastimg_casa_ms_to_npz=fastimgproto.scripts.casa.ms_to_npz:cli
21+
fastimg_casa_compare_imagers=fastimgproto.scripts.casa.compare_imagers:cli
22+
fastimg_casa_simulate_vis=fastimgproto.scripts.casa.simulate_vis:cli
23+
fastimg_extract_lsm=fastimgproto.scripts.extract_lsm:cli
24+
fastimg_image=fastimgproto.scripts.image:cli
25+
fastimg_make_config=fastimgproto.scripts.config:make_config
26+
fastimg_reduce=fastimgproto.scripts.reduce:cli
27+
fastimg_simulate_data=fastimgproto.scripts.simulate_data:cli
28+
fastimg_sourcefind=fastimgproto.scripts.sourcefind:cli
29+
''')
30+
31+
1732
setup(
1833
name="fastimgproto",
1934
version=versioneer.get_version(),
@@ -26,15 +41,5 @@
2641
author_email="github@timstaley.co.uk",
2742
# url="https://github.com/",
2843
install_requires=install_requires,
29-
entry_points='''
30-
[console_scripts]
31-
fastimg_casavis_to_npz=fastimgproto.scripts.casavis_to_npz:cli
32-
fastimg_compare_imagers=fastimgproto.scripts.compare_imagers:cli
33-
fastimg_extract_lsm=fastimgproto.scripts.extract_lsm:cli
34-
fastimg_simpipe=fastimgproto.scripts.simpipe:cli
35-
fastimg_simple_imager=fastimgproto.scripts.simple_imager:cli
36-
fastimg_simulate_vis_with_casa=fastimgproto.scripts.simulate_vis_with_casa:cli
37-
fastimg_simulate_vis=fastimgproto.scripts.simulate_vis:cli
38-
fastimg_sourcefind=fastimgproto.scripts.sourcefind:cli
39-
''',
44+
entry_points=entry_points,
4045
)
99.5 KB
Binary file not shown.

src/fastimgproto/scripts/casa/__init__.py

Whitespace-only changes.

src/fastimgproto/scripts/compare_visibility_simulators.py

-68
This file was deleted.

src/fastimgproto/scripts/config.py

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import json
2+
3+
import click
4+
5+
from collections import OrderedDict
6+
7+
8+
class ConfigKeys:
9+
"""
10+
Define the string literals to be used as keys in the JSON config file.
11+
"""
12+
image_size_pix = 'image_size_pix'
13+
cell_size_arcsec = 'cell_size_arcsec'
14+
sourcefind_detection = 'sourcefind_detection'
15+
sourcefind_analysis = 'sourcefind_analysis'
16+
17+
18+
default_config_path = 'fastimg_config.json'
19+
20+
21+
@click.command()
22+
@click.argument('config_path', type=click.File(mode='wb'),
23+
default=default_config_path)
24+
def make_config(config_path):
25+
"""
26+
Write out a json file with default fastimg config settings.
27+
"""
28+
default_config = OrderedDict((
29+
(ConfigKeys.image_size_pix, 1024),
30+
(ConfigKeys.cell_size_arcsec, 1),
31+
(ConfigKeys.sourcefind_detection, 50),
32+
(ConfigKeys.sourcefind_analysis, 50),
33+
))
34+
json.dump(default_config, config_path, indent=2)

src/fastimgproto/scripts/simple_imager.py src/fastimgproto/scripts/image.py

+15-34
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,26 @@
11
#!/usr/bin/env python
22
from __future__ import print_function
3-
import click
3+
4+
import json
45
import logging
56
import sys
6-
import json
7+
78
import astropy.units as u
9+
import click
810
import numpy as np
11+
912
import fastimgproto.imager as imager
1013
from fastimgproto.gridder.conv_funcs import GaussianSinc
14+
from .config import ConfigKeys, default_config_path
1115

1216

13-
class ConfigKeys:
14-
"""
15-
Define the string literals to be used as keys in the JSON config file.
16-
"""
17-
image_size_pix = 'image_size_pix'
18-
cell_size_arcsec = 'cell_size_arcsec'
19-
20-
def write_config(ctx, param, value):
21-
"""
22-
Used as a Click 'eager callback', to write out a template config-JSON-File.
23-
"""
24-
if not value or ctx.resilient_parsing:
25-
return
26-
default_config = {
27-
ConfigKeys.image_size_pix: 1024,
28-
ConfigKeys.cell_size_arcsec: 3,
29-
}
30-
config_file_path = 'image_config.json'
31-
click.echo("Writing config JSON to '{}'".format(config_file_path))
32-
with open(config_file_path, 'w') as f:
33-
json.dump(default_config,f)
34-
ctx.exit()
35-
3617
@click.command()
37-
@click.option('--makeconfig', is_flag=True, callback=write_config,
38-
expose_value=False, is_eager=True,
39-
help="Write out config-JSON file and quit")
40-
@click.argument('config_json', type=click.File(mode='r'))
18+
@click.option(
19+
'-c', '--config_json', type=click.File(mode='r'), default=default_config_path,
20+
help="Path to config file. Default:'{}' ".format(default_config_path))
4121
@click.argument('in_vis', type=click.File(mode='rb'))
4222
@click.argument('out_img', type=click.File(mode='wb'))
4323
def cli(config_json, in_vis, out_img):
44-
logging.basicConfig(level=logging.DEBUG)
4524
"""
4625
Load uvw / vis data from npz, produce a dirty image , save in npz format.
4726
@@ -50,6 +29,7 @@ def cli(config_json, in_vis, out_img):
5029
Outputs an npz file containing dirty image and synthesized beam
5130
(keys 'image', 'beam').
5231
"""
32+
logging.basicConfig(level=logging.DEBUG)
5333
config = json.load(config_json)
5434
cell_size = config[ConfigKeys.cell_size_arcsec] * u.arcsec
5535
image_size = config[ConfigKeys.image_size_pix] * u.pix
@@ -62,10 +42,11 @@ def cli(config_json, in_vis, out_img):
6242
kernel_support = 3
6343
kernel_func = GaussianSinc(trunc=kernel_support)
6444
image, beam = imager.image_visibilities(vis, uvw_lambda,
65-
image_size=image_size, cell_size=cell_size,
66-
kernel_func=kernel_func,
67-
kernel_support=kernel_support,
68-
kernel_oversampling=None)
45+
image_size=image_size,
46+
cell_size=cell_size,
47+
kernel_func=kernel_func,
48+
kernel_support=kernel_support,
49+
kernel_oversampling=None)
6950

7051
np.savez(out_img, image=image, beam=beam)
7152
sys.exit(0)

src/fastimgproto/scripts/reduce.py

+92
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
"""
2+
Simulated pipeline run
3+
"""
4+
from __future__ import print_function
5+
6+
import json
7+
8+
import astropy.units as u
9+
import click
10+
import numpy as np
11+
12+
import fastimgproto.imager as imager
13+
from fastimgproto.gridder.conv_funcs import GaussianSinc
14+
from fastimgproto.sourcefind.image import SourceFindImage
15+
from .config import (default_config_path, ConfigKeys)
16+
17+
18+
# @click.argument(
19+
# 'output_img', type=click.File(mode='wb'))
20+
@click.command(context_settings=dict(max_content_width=120))
21+
@click.option(
22+
'-c', '--config_json', type=click.File(mode='r'),
23+
default=default_config_path,
24+
help="Path to config file. Default: '{}' ".format(default_config_path))
25+
@click.argument('input_npz', type=click.File(mode='rb'))
26+
def cli(config_json, input_npz, ):
27+
"""
28+
Load simulated data from INPUT_NPZ, and search for transients as follows:
29+
30+
\b
31+
* Apply difference imaging (subtract model visibilities from data, apply
32+
synthesis-imaging).
33+
* Run sourcefinding on the resulting diff-image.
34+
"""
35+
36+
npz_content = np.load(input_npz)
37+
uvw_lambda = npz_content['uvw_lambda']
38+
model_vis = npz_content['model']
39+
data_vis = npz_content['vis']
40+
41+
config = json.load(config_json)
42+
cell_size = config[ConfigKeys.cell_size_arcsec] * u.arcsec
43+
image_size = config[ConfigKeys.image_size_pix] * u.pix
44+
detection_n_sigma = config[ConfigKeys.sourcefind_detection]
45+
analysis_n_sigma = config[ConfigKeys.sourcefind_analysis]
46+
47+
sfimage = main(
48+
uvw_lambda=uvw_lambda,
49+
model_vis=model_vis,
50+
data_vis=data_vis,
51+
image_size=image_size,
52+
cell_size=cell_size,
53+
detection_n_sigma=detection_n_sigma,
54+
analysis_n_sigma=analysis_n_sigma,
55+
)
56+
57+
print("Found residual sources")
58+
for found_src in sfimage.islands:
59+
print(found_src)
60+
61+
62+
def main(uvw_lambda,
63+
model_vis,
64+
data_vis,
65+
image_size,
66+
cell_size,
67+
detection_n_sigma,
68+
analysis_n_sigma,
69+
):
70+
"""
71+
Represents the difference-image + detect stages of the FastImaging pipeline.
72+
"""
73+
74+
# Subtract model-generated visibilities from incoming data
75+
residual_vis = data_vis - model_vis
76+
77+
# Kernel generation - might configure this via config-file in future.
78+
kernel_support = 3
79+
kernel_func = GaussianSinc(trunc=kernel_support)
80+
image, beam = imager.image_visibilities(residual_vis, uvw_lambda,
81+
image_size=image_size,
82+
cell_size=cell_size,
83+
kernel_func=kernel_func,
84+
kernel_support=kernel_support,
85+
kernel_oversampling=None)
86+
87+
sfimage = SourceFindImage(data=np.real(image),
88+
detection_n_sigma=detection_n_sigma,
89+
analysis_n_sigma=analysis_n_sigma,
90+
)
91+
92+
return sfimage

0 commit comments

Comments
 (0)