Синтез радиоизображений
Инструкции по синтезу радиоизображений, полученных Сибирским Радиодогелиографом с помощью программного обеспечения, разработанного в радиоастрофизическом отдлеле ИСЗФ СО РАН.
- Синтез радиоизображений с помощью пакета srh_synth
- Синтез радиоизображений с помощью пакета srhdata
- Универсальный пакет для синтеза изображений srhimages
Синтез радиоизображений с помощью пакета 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, поэтому его предётся устанавливать отдельно. Это можно сделать двумя способами.
- Установить "чистый" интерпретатор Python запустив инсталятор, скачанный с официального сайта Python .
- Установить 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, разрабатываемый Марией Глоба.
Если вы используете виртуальное окружение, то перед запуском команд установки его нужно активировать.
Синтез радиоизображений
Синтез радиоизображений состоит из двух этапов:
- Калибровка коэффициентов усиления антенн - функция
srh_synth.srh_calib - Синтез изображений - функция
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:
-
start_time- начало интервала времени для калибровки, например '2024-05-14 00:30' -
stop_time- конец интервала времени для калибровки, например '2024-05-14 03:00' -
frequency- список частот, которые надо откалибровать, например [3200, 4000]. Значение по умолчанию 'all' -- калибровать все частоты, 'SRH0306', 'SRH0612', 'SRH1224' -- калибровать все частоты соответвующей решётки. -
n_proc- Количество параллельно обрабатываемых калибровок. По умолчанию 16. Если это число больше числа имеющихся в систме процессорных ядер, то этот параметр уменьшается до числа ядер в системе. При назначении числа параллельных процессов, нужно иметь ввиду, что каждый такой процесс потребляет около 1 Гб оперативной памяти. -
cadence- скважность калибровок в секундах. По умолчанию калибруются данные с интервалом в 300 с. Менять не рекомендуется. -
int_time- Время накопления в секцндах для каждого калибровочного изображения. По умолчанию 30 с. Менять не рекомендуется -
parallel- запускать калибровки параллельно в дочерних процессах. По цмолчанию True.В случае установки в False, калибровки будут выполняться последовательно в основном процессе. -
post_process- постобработка калибровок с целью устранения 'дрожания' и 'уезжания' изображений. Кроме того выравнивается амплитуда коэффициентов усиления антенн -
raw_dir- директория в которой код программа будет искать сырые данные СРГ и куда их будет скачивать при необходимости. Рекомендуется для всех своих задач использовать одну и ту же директорию на достаточно емком диске. -
db_file- имя файла с базой данных SQLite для сохранения калибровок. По умолчанию калибровки сохраняются в файл 'calibrations.db' в текущем каталоге. Обратите внимание, что в БД создайтся запись для каждой комбинации даты наблюдения и частоты наблюдения. -
write_to- имя файла для сохранения калибровок в формате JSON. По умолчанию калиброви сохраняются только в локальную базу данных SQLite. -
recalibrate- по умолчаниюFalse: программа берёт готовые калибровки из локальной БД SQLite, если они уже делались ранее. Если вы хотите пересчитать калибровки, то установите этот параметр вTrue
Возвращаемое значение:
Функция 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:
-
start_time- начало интервала времени для калибровки, например '2024-05-14 00:30' -
stop_time- конец интервала времени для калибровки, например '2024-05-14 03:00' - int_time - время интегрирования для каждого изображения в секундах. По умолчанию изображения строится из одной наблюдательной записи (скана).
-
cadence- скважность (временное разрешение) синтезируемых изображений. По умолчанию 0 - изображения строятся с максимально возможной скважностью. -
frequency- список частот, на которых надо построить изображения, например [3200, 4000]. Значение по умолчанию 'all' -- строить изображения на всех частотах. Данные на выбранных частотах должны быть предварительно откалиброваны функциейsrh_calib -
out_dir- путить к каталогу, куда будут записаны построенные изображения. Если в данном каталоге уже имеются файлы изображений, они будут перезаписаны при совпадении имён. По умолчанию изображения записываются в текущий каталог -
raw_dir- директория в которой код программа будет искать сырые данные СРГ и куда их будет скачивать при необходимости. Рекомендуется для всех своих задач использовать одну и ту же директорию на достаточно емком диске. -
calibrations- калибровочные данные, возвращаемые функциейsrh_calib, или путь к JSON файлу с сохранёнными калибровками. -
naxis- размер изображения в пикселях (по умолчанию 512) -
cdelt- размер одного пикселя в секундах дуги (по умолчанию 5.) -
save_RL- сохранять изображения в правой (R) и левой (L) круговой поляризации. По умолчанию False - сохраняется интенсивность (I) и поляризация (V). -
no_channel_dirs- не создавать подкаталоги для каждого частотного канала. По умолчанию False - подкаталоги создаются -
save_psf- сохранять диаграмму нааправленности для каждого изображения в отдельный FITS файл -
n_proc- Количество параллельно синтезируемых изображений. По умолчанию 16. Если это число больше числа имеющихся в систме процессорных ядер, то этот параметр уменьшается до числа ядер в системе. -
round_beam- использовать симметричную кргулую "чистую" диаграмму направленности при "чистке" изображений. Данная опция экспериментальная. По умолчанию False. Применения этой опции приводит к уменьшению пространственного разрешения изображения. -
high_resolution- Искусственно увеличить пространственое разрешения изображения за счёт уменьшения размера "чистой" диаграммы направленности. Данная опция эксперментальная. Ей использование имеет смысл только для заведомо компактных источников. А интерпретация полученных изображений возможна только с оговорками. -
compressed- сохранять изображения в сжатом формате FITS. По умолчанию True. -
parallel- запускать синтез изображений параллельно в дочерних процессах. По цмолчанию True.В случае установки в False, изображения будут строится последовательно в основном процессе. -
clean_weights- Путь к FITS файлу с радиомзображением Солнца на низкой часте, на которое нет перекрытия порядков или двухмерный numpy массив с весами, которые будут использоваться алгоритмом CLEAN при поиске точки с максимальной интенсивностью. Массив должен иметь те же размеры, что и изображение, то есть[naxis, naxis]. В случае, если в этом параметре передается путь к FITS файлу, изображеие из файла будет автоматически преобразовано в веса для CLEAN и отмасштабировано для требуемых значений NAXIS и CDELT.
Возвращаемое значение:
Функция 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:
path (string = './')- путь для сохранения готовых изображенийfrequency (int = 0)- индекс частоты (от 0 до 15)scan (int = 0)- номер скана (от 0 до 19)average (int = 0)- количество сканов для усредненияRL (bool = False)- еслиTrue, то готовые изображения будут построены для левой и правой поляризации, в противном случае I,V.calibtable (string = '')- путь к калибровочной таблице, файл с расширением .JSON или .HDF5clean_disk (bool = True)- опция для чистки диска, по умолчаниюTruecalibrate (bool = True)- параметр, позволяющий отключить калибровку данных. При передачи таблицы вcalibtableэтот параметр не учитываетсяnaxis (int = 512)- размер готовых изображенийcdelt (float = 4.9)- вес пиксела в угловых секундахremove_tables (bool = True)- при построении изображений создается ряд промежуточных файлов (uvfits, Measurement Set и изображения, которые создаетtclean()), которые удаляются после завершения чистки. Если поставить эту опцию вFalse, эти файлы не будут удалятьсяsave_model (bool = False)- сохранить модель, используемую при чистке, в отдельные фалйы .fituse_mask (bool = True)- использовать маску при чистке для того, чтобы чистились только яркие источникиniter (int = 100000)- количетво итераций чисткиthreshold (float = 40000)- порог чистки**kwargs- аргументы, передаваемые в функциюtclean(). Полный список аргументов по ссылке: https://casadocs.readthedocs.io/en/stable/api/tt/casatasks.imaging.tclean.html
Универсальный пакет для синтеза изображений srhimages
srhimages
Сибирский радиогелиограф (СРГ) каждый день записывает огромные объёмы данных. Чтобы получить готовые радиокарты Солнца в радиодиапазоне, сырые данные нужно откалибровать, собрать воедино из функций видности на UV-плоскости, «нарисовать» — синтезировать изображение с помощью обратного Фурье-преобразования и вычистить боковые лепестки диаграммы направленности алгоритмом CLEAN.
Пакет srhimages берёт на себя всю эту рутину: организует список расчётных заданий
и доводит их до готовых FITS-файлов и красивых картинок. Нужно только указать требуемый интервал времени,
список частот и параметры синтеза.
Что умеет пакет
- Создаёт расчётные задания по вашему запросу. По запросам вроде "мне нужно Солнце 5 марта с 02:00 до 04:00, каждые 15 минут, на 3000 МГц" — и получите список задач в JSON.
- Самостоятельно скачивает данные. Сырые файлы подтянутся с сервера в Иркутске (или с Бадар, если очень надо), ничего вручную искать не нужно.
- Калибрует. Коэффициенты усиления антенн берутся с сервера, а если их нет — считаются с нуля. Пакет сам выравнивает и сглаживает их суточный ход, чтобы изображение было качественным.
- Синтезирует изображения. На выходе — FITS-файлы в поляризациях I, V (или R, L). При необходимости FITS можно пересохранить в HDF5, в том числе со сжатием
- Считает где угодно. Локально на вашей машине, на кластере в Бадарах или на удалённом сервере.
- Помогает анализировать результат. Радиокарты можно открыть, обрезать, получить PSF, отобразить, пересчитать яркостные температуры в SFU и собрать видео из серии кадров.
Установка
Понадобится 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 построена вокруг расчётных заданий. Расчётное
задание — это маленький «рецепт» получения одного изображения. В нём записано:
- какие сырые файлы телескопа взять и какие сканы внутри них усреднить;
- на какой частоте и в каких поляризациях строить картинку;
- с какими параметрами: размер изображения, масштаб пикселя, нужен ли CLEAN.
Задание — обычный 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).
Что происходит с заданием дальше
Каждое задание проходит цепочку этапов:
- Калибровка — подбор коэффициентов усиления антенн. Готовые можно взять с сервера (srhimages занимается этим сам, но можно и вытащить их самостоятельно), а можно посчитать с нуля.
- Постобработка — выравнивание и сглаживание суточного хода коэффициентов усиления, чтобы картинка получилась без артефактов.
- Синтез — сам расчёт изображения (сборка радиокарты в яркостных температурах + 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
Ссылки
- Исходный код: https://git.iszf.irk.ru/fedenev/srhimages
- Техническое описание API — в
README.mdрепозитория. - WIKI и Reference: https://git.iszf.irk.ru/fedenev/srhimages/-/wikis/home
- База знаний отдела радиоастрофизики: страница о пакете.