Синтез радиоизображений

Инструкции по синтезу радиоизображений, полученных Сибирским Радиодогелиографом с помощью программного обеспечения, разработанного в радиоастрофизическом отдлеле ИСЗФ СО РАН.

Синтез радиоизображений с помощью пакета srh_synth

Установка пакета srh_synth на свой компьютер

ПО для синтеза радиоизображений СРГ написано на языке программирования Python 3, поэтому прежде чем его использовать, вам необходимо установить интерпретатор этого языка.

Если вы синтезируете изображения на одном из серверов отдела радиоастрофизики ИСЗФ СО РАН, то Продолжите чтение инструкции с раздела Синтез радиоизображений, так как у вас уже установлены все необходимые пакеты.

Установка Python 3 в Linux

В большинстве популярных дистрибутивов Linux Интерпретор Python 3 обычно установлен по умолчанию. Проверить установлен ли Python на вашей машине можно, запустив следующую команду в терминале:

python --version

или

python3 --version

Если Python установлен, то вы команда выведет версию установленного Интерпретатора. Мы рекомендуем использовать Python 3.10 или более свежую версию. Если же в вашей системе Python 3 не установлен, то установите его с помощью менеджера пакетов вашего дистрибутива. Например, в Ubuntu для этого нужно в терминале выполнить следующую команду.

sudo apt install python3

Установка Python 3 в Windows

Интерпретатор языка Python не входит в состав операционной системы Windows, поэтому его предётся устанавливать отдельно. Это можно сделать двумя способами.

  1. Установить "чистый" интерпретатор Python запустив инсталятор, скачанный с официального сайта Python .
  2. Установить Python в составе менеджера пакетов Anaconda и Miniconda. В первом случае вместе с интерпретаром языка будут также установлен большой набор пакетов предназначенных для научных вычислений и визуализации данных. В случае же Miniconda будет установлен только интерпретатор языка Python и менеджер пакетов conda.

Создание виртуального окружения

Мы рекомендуем установливать ПО для синтеза радиоизображений в отдельном виртуальном окружении (virtual environment), чтобы избужать конфликта зависимостей. В случае, если вы планируете использовать Python только для синтеза радиоизображений, этот шаг можно пропустить.

TO BE DONE

Установка пакета srh_synth

Пакетsrh_synth в текущей версии использует часть функций универсального пакета srhimages и устанавливается вместе с ним командой:

pip install -U "srhimages[anfinogentov] @ git+https://git.iszf.irk.ru/fedenev/srhimages"

Альтернативно можно установить пакет srhimages с полным набором опций.

pip install -U "srhimages[all] @ git+https://git.iszf.irk.ru/fedenev/srhimages"

Тогда вместе с пакетом srh_synth будет доступен также и код для синтеза изображений srhdata, разрабатываемый Марией Глоба. Если вы используете виртуальное окружение, то перед запуском команд установки его нужно активировать.

Синтез радиоизображений

Синтез радиоизображений состоит из двух этапов:

  1. Калибровка коэффициентов усиления антенн - функция srh_synth.srh_calib
  2. Синтез изображений - функция srh_synth.srh_synth В начале работы необходимо импортировать импортировать эти функции.
from srh_synth import srh_synth, srh_calib

Калибровка коэффицентов усиления антенн

Калибровка выполняется для заданного интервала времени. Приэтом калибруются не все изображения, а токлько некоторые. По умолчанию калибруются изображения с интервалом 5 минут. Затем полученные калибровочные коэффициенты подвергаются постобработке в ходе которой устраняются пространственные сдвиги между отдельными изображениями и выравниваются амплитуды коэффициентов усиления. Полученные калибровочные данные можно затем использовать для построения изображений внутри выбранного интервала на заданных частотах с произвольной скважностью и произвольным временем накопления.

Примеры команд для калибровки:

Калибровка для частот 6 и 6.4 ГГц для одного момента времени 2024-06-01 03:00:

calibrations = srh_calib("2024-06-01 03:00", frequency = [6000, 6400])

Калибровка наблюдений за весь день для частоты 6 ГГц:

calibrations = srh_calib("2024-06-01 00:00","2024-06-01 12:00", frequency = [6000])

Калибровка наблюдений за два часа для частоты 16 ГГц:

calibrations = srh_calib("2024-06-01 02:00","2024-06-01 04:00", frequency = [16000])

Калибровка наблюдений за весь день для частоты 3 ГГц с сохранением калибровок в файл 'calib.json':

calibrations = srh_calib("2024-06-01 00:00","2024-06-01 12:00", frequency = [3000], write_to= 'calib.json')

Калибровка данных решётки 6-12 ГГЦ для одного момента времени 2024-06-01 03:00:

calibrations = srh_calib("2024-06-01 03:00", frequency = 'SRH0612')

Полный список параметров функции srh_calib:

Возвращаемое значение: Функция srh_calib возвращает словарь, в котором находятся результаты калибровки разобранные по частотным каналам и отсорторированные по времени. Данную переменную нужно использовать для синтеза изображений.

Синтез радиозображений

После выполнения калибровки можно приступать непосредственно к построению изображений.

Примеры команд синтеза рад иоизображений

Синтез изображений на двух частототах для одного момента времени с использованием калибровок, полученных функцией srh_calib:

srh_synth("2024-06-01 03:00", frequency = [6000, 6400], calibrations=calibrations)

Синтез серии изображений на одной часоте для заданного интервала времени с временным разрешением 60 секунд, используя калибровки из файла 'calib.json':

srh_synth("2024-06-01 02:30", "2024-06-01 03:30", frequency=[3000], cadence=60, calibrations='calib.json')

Синтез изображений для заданного интервала времени c накоплением 30 секунд и временным разрешением 300 секунд. Изображения сохраняться в папку "srh20240601", имена сохранённых файлов будут напечатаны в консоли:

files = srh_synth("2024-06-01 03:00", int_time=30, cadence=300, calibrations=calibrations, out_dir='srh20240601')
print(files)

Полный список параметров функции srh_synth:

Возвращаемое значение: Функция srh_synth возвращает список имен файлов синтезированных изображений.

Синтез радиоизображений с помощью пакета srhdata

Установка

Для установки требуется ОС Linux/MacOS. В библиотеке используются пакеты casatools и casatasks, которые не выпускаются для Windows.

Рекомендуется использовать с Anaconda/Miniconda. Для начала нужно создать среду с версией Python 3.12:

conda create -n myenv python=3.12

Затем нужно активировать среду и установить srhdata c github:

conda activate myenv
pip install git+https://github.com/maria-globa/srhdata
python -m casaconfig --update-all

Для удобства в среду можно установить spyder (при установке среда должна быть активирована):

conda install spyder -c conda-forge

Для проверки выполнить следующие строки:

import srhdata

import ftplib
ftp = ftplib.FTP('ftp.rao.istp.ac.ru', 'anonymous', 'anonymous')
ftp.cwd('SRH/SRH0612/2023/06/12')
filename = 'srh_0612_20230612T030033.fit'
with open( filename, 'wb' ) as file :
    ftp.retrbinary('RETR %s' % filename, file.write)
    file.close()
srh_fits = srhdata.open(filename)

Здесь происходит скачивание файла с сырыми данными СРГ с ftp-сервера и создание объекта srh_fits, содержащего данные из файла. Веб-версия архива с данными доступна по ссылке: https://ftp.rao.istp.ac.ru/SRH/. Можно скачать любой другой файл из папок SRH0306, SRH0612 или SRH1224.

Построение изображений

Чтобы построить изображение, нужно вызвать метод makeImage:

srh_fits.makeImage(path = './', scan = 0, average = 20, frequency=0)

После выполнения в рабочей директории должны появиться файлы srh_*_I.fit srh_*_V.fit

Параметры метода makeImage:

Универсальный пакет для синтеза изображений srhimages

srhimages

Сибирский радиогелиограф (СРГ) каждый день записывает огромные объёмы данных. Чтобы получить готовые радиокарты Солнца в радиодиапазоне, сырые данные нужно откалибровать, собрать воедино из функций видности на UV-плоскости, «нарисовать» — синтезировать изображение с помощью обратного Фурье-преобразования и вычистить боковые лепестки диаграммы направленности алгоритмом CLEAN.

Пакет srhimages берёт на себя всю эту рутину: организует список расчётных заданий и доводит их до готовых FITS-файлов и красивых картинок. Нужно только указать требуемый интервал времени, список частот и параметры синтеза.

Что умеет пакет

Установка

Понадобится Python 3.12, conda и uv:

conda create -c conda-forge -n srhsynth python=3.12 uv git
conda activate srhsynth

uv pip install -U "srhimages[anfinogentov,globa] @ git+https://git.iszf.irk.ru/fedenev/srhimages"

Дополнительные пакеты anfinogentov и globa — это два расчётных ядра (два подхода к синтезу, разработанные в ИСЗФ). Если нужно только одно, поставьте [anfinogentov] или [globa]. На данный момент рекомендуется пользоваться кодом Сергея Анфиногентова

Если вы ставите ядро globa впервые, обновите данные CASA:

python3 -m casaconfig --update-all

Первый шаг - синтез 1 изображения

from srhimages import create_synth_tasks, run_computation

if __name__ == "__main__":
    tasks = create_synth_tasks(
        "2024-03-02 01:00:00",
        frequencies=[21000],
        average_width=1,
    )

    for result in run_computation(tasks, algorithm="anfinogentov"):
        result.to_json_file("progress.json")

Через несколько минут в папке images/out появятся готовые изображения.

Если запускаете код из обычного .py-файла, оборачивайте вычисления в if __name__ == "__main__":. Это особенность параллельных расчётов в Python; в Jupyter это обычно не нужно.

Как это устроено

Расчётные задания

Вся работа в srhimages построена вокруг расчётных заданий. Расчётное задание — это маленький «рецепт» получения одного изображения. В нём записано:

Задание — обычный Python-овский словарь, который можно сохранить в JSON и посмотреть глазами:

{
  "task": [
    {
      "file_path": "/SRH/SRH0306/2024/03/02/file.fits",
      "scans": [0, 1, 2],
      "frequency_index": 2
    }
  ],
  "params": {
    "array": "SRH0306",
    "frequency": 3000,
    "average_mode": "visibilities",
    "output_polarizations": "IV",
    "cdelt": 4.9,
    "clean_disk": true,
    "naxis": 512,
    "compressed": true
  }
}

Зачем они нужны? Задание полностью описывает, что нужно посчитать, — поэтому вычисления становятся воспроизводимыми.

Вручную их писать не нужно: create_synth_tasks построит задания по вашему запросу — времени, частоте и шагу по времени (cadence).

Что происходит с заданием дальше

Каждое задание проходит цепочку этапов:

  1. Калибровка — подбор коэффициентов усиления антенн. Готовые можно взять с сервера (srhimages занимается этим сам, но можно и вытащить их самостоятельно), а можно посчитать с нуля.
  2. Постобработка — выравнивание и сглаживание суточного хода коэффициентов усиления, чтобы картинка получилась без артефактов.
  3. Синтез — сам расчёт изображения (сборка радиокарты в яркостных температурах + CLEAN).

За пакетной обработкой следит менеджер очередей на основе Redis: задания распределяются между воркерами, а по ходу расчёта видно, какие расчётные задания уже готовы, а какие упали с ошибкой.

Примеры

Готовые примеры лежат в каталоге examples/ репозитория:

Пример Про что
basic_srh_image.py Одно изображение «от начала до конца», плюс работа с радиокартой.
solar_flare.py Обработка солнечной вспышки в два этапа: сначала калибровки на длинном интервале, потом серия изображений с максимальным временным разрешением.
artifacts_filesystem.py Сохранение и получение файлов на локальном диске.
artifacts_http.py То же самое, но через HTTP-сервер артефактов.

Полезные команды:

srhimages create_synth_tasks --help
srhimages run_computation --help

Ссылки