Skip to main content

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

Программа srhimages предоставляет функции для синтеза радиоизображений из данных Сибирского Радиогелиографа (SRH).

Установка

Код Сергея Анфиногентова работает на python 3.10 до 3.12, код Марии Глобы - только на 3.10! Поэтому желательно устанавливать именно 3.10. Для расчётов на удалённых машинах может быть допустимо установить любую версию питона. При расчётах через Dask желательно так же использовать 3.10.

conda env create -n srhsynth python=3.10
conda activate srhsynth

pip install -U "srhimages[all] @ git+https://git.iszf.irk.ru/fedenev/srhimages"
# или [globa], [anfinogentov] вместо [all], чтобы выбрать только конкретный расчётный код

Если производится свежая установка с использованием расчётного кода Марии Глобы, то требуется обновить данные CASA:

python3 -m casaconfig --update-all

Использование уже установленного окружения на сервере ИСЗФ

conda activate /opt/miniconda3/envs/srhsynth/

Интерфейс командной строки

srhimages create_synth_tasks --help
srhimages run_computation --help

Использование в своих скриптах

import srhimages

help(srhimages.create_synth_tasks)
help(srhimages.run_computation)

Запуск интерфейса в браузере

srhimages-standalone

Описание команд и принципы работы

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

Программа работает в парадигме так называемых расчётных задач ("tasks"). Каждая из задач представляет собой Python-словарь или его JSON-представление и описывает, из каких данных (сырых файлов и сканов внутри них) должно получиться итоговое изображение, куда оно будет сохранено и с какими параметрами синтезировано.

Актуальная спецификация формата расчётной задачи есть в исходном коде в формате jsonschema. Спецификация API для работы с амплитудно-фазовыми калибровками антенн находится в репозитории badary-services.

Интерфейс программы:

  1. server_calibrate(task_list, algorithm, save_to=None, search_window="15min")

    • Назначение: Обрабатывает список некалиброванных задач, чтобы назначить им калибровки, предоставленные командой SRH и находящиеся на API-сервере.

    • Аргументы:

      • task_list: Список задач для вычисления или путь к файлу JSON с списком задач.
      • algorithm: "globa" или "anfinogentov".
      • save_to (необязательно): Путь к файлу JSON для сохранения списка задач.
      • search_window (необязательно): Временное окно (-search_window/2, +search_window/2), в котором серверная калибровка считается допустимой для использования. По умолчанию: "15min".
    • Возвращает:

      • calibrated_tasks: Список задач с доступным объектом ["gains"] в каждой из них, если соответствующие серверные калибровки были найдены, в противном случае – задачи, которые были переданы изначально.
  2. create_synth_tasks(time1, time2=None, cadence="15min", frequencies="all", resample_from=None, save_to=None, average_width=20, average_unit="scans", average_position="after", average_mode = "visibilities", output_polarizations="IV", naxis=512, cdelt=4.9, clean_disk=True, compressed=True, smooth_gains=False)

    • Назначение: Создает список (некалиброванных) задач по синтезу радиоизображений с телескопа.

    • Аргументы:

      • time1 (str): Время начала наблюдения в формате 'ГГГГ-ММ-ДД ЧЧ:ММ:СС'.
      • time2 (str или None, опционально): Время окончания в том же формате.
      • cadence (str, опционально): Временной интервал между каждым наблюдением в формате "NNmin" или "NNs". По умолчанию "15min".
      • frequencies (list(int) или str, опционально): Список частот для наблюдения в МГц или "all" в виде строки, или диапазон вида "3000-5000", или список вида [3000, "6000-8000", "SRH1224"].
      • resample_from (list или str): Список задач или путь к файлу, содержащему список задач в формате JSON, откуда брать калибровки. Доступные частоты в списке resample должны совпадать с запрошенными пользователем частотами.
      • save_to (str, опционально): Путь к json файлу для сохранения списка задач.
      • average_width (int или float, опционально): Количество сканов или секунд для усреднения. По умолчанию 20.
      • average_unit (str, опционально): Может быть 'scans' или 'seconds'. По умолчанию 'scans'.
      • average_position (str, опционально): Временное окно для усреднения. Может быть 'after', 'before' или 'center'. По умолчанию 'after'.
      • average_mode (str, опционально): Режим усреднения. Может быть 'visibilities', 'gridding' или 'images'. По умолчанию 'visibilities'.
      • output_polarizations (str, опционально): Может быть 'IV' или 'RL'.
      • naxis (int, опционально): Количество пикселей вдоль каждой оси выходного изображения. По умолчанию 512.
      • cdelt (float, опционально): Размер каждого пикселя в угловых секундах. По умолчанию 4.9 для СРГ.
      • clean_disk (bool, опционально): Флаг для включения/выключения очистки "грязного" изображения. По умолчанию True.
      • compressed (bool, опционально): Флаг для включения/выключения сжатия FITS выходного изображения. По умолчанию True.
      • smooth_gains (bool, опционально): Предпочтение сплайн-интерполяции калибровок вместо ближайших соседей при передискретизации. Используйте True для калибровок за весь день.
    • Возвращает:

      • Список задач синтеза (каждая задача – Python dict), например, для отправки на кластер или для локального вычисления.
  3. run_computation(task_list, algorithm, cache_dir="./images/raw/", out_dir="./images/out/", ftp_server="ftp.rao.istp.ac.ru", n_threads=5, calibrate="prefer_server", calibrated_save_to=None, calibrations_search_window="15min", skip_clean=False, input_dir = None, cluster_object="local")

    • Назначение: Синтезирует изображения из переданного списка задач (не важно, калиброванного или нет).

    • Аргументы:

  • task_list (list или str): Список задач для вычисления или путь к файлуфайлу, JSONсодержащему ссписок спискомзадач задач.

    в формате JSON.
  • algorithm (str): "globa" orили "anfinogentov".

  • cache_dir (необязательно)str): Директория для хранения загруженных сырых FITS-файлов с видностями SRH, которые будут загружаться с сервера.

    СРГ.
  • out_dir (необязательно)str): Директория для хранениясохранения синтезированных изображений.

  • ftp_server (необязательно)str): Адрес FTP сервера для загрузки файлов. По умолчанию без схемы, загрузка осуществляется пос HTTPS.

    использованием HTTPS (начинается со схемы https://).
  • n_threads (необязательно)int): Количество потоков для вычислений (по умолчанию:умолчанию 5).

  • calibrate (str): "prefer_server" или "from_scratch". (принудительнаяПо локальнаяумолчанию калибровка)"prefer_server".

  • calibrated_save_toprogress_save_to (необязательно)str, опционально): Путь к json файлу JSON для сохранения результирующего списка откалиброванныхзадач задач.

    (на основе исходного списка задач). По умолчанию None.
  • calibrations_search_window (необязательно)str, опционально): Временное окно (-search_window/2, +search_window/2), в котором сервернаякалибровка калибровкас сервера считается допустимой для использования.действительной. По умолчанию: "15min".

  • skip_cleanskip_postprocessing (необязательно)bool, опционально): Пропустить выравнивание и сглаживание амплитуды/фазы усилений для антенн СРГ. По умолчанию False, True не рекомендуется.

  • skip_images (bool, опционально): Только калиброватьоткалибровать изображения(и выполнить постобработку) задачи и не выполнять этап CLEAN и синтезасинтез изображений. По умолчанию: False.

  • input_dir (необязательно)str, опционально): Директория, содержащая входные файлы, в случаеслучае, если SRH NAS SRH смонтирован там. Обычно она равна None.

  • cluster_object (str или object): Тип кластерного объекта кластерадля использования для вычислений, 'local' для локальных вычислений (по умолчанию:умолчанию 'local'). и 'badary' для кластера в Бадарах. Другие варианты включают передачу любогопользовательских типаобъектов объекта,Dask.distributed который принимает метод .map, (например, объектSSHCluster).

  • Dask
  • SSHCluster,run_id (str, опционально): Префикс строки для Redis для хранения прогресса задачи (и т.д.

    списка задач) во время вычисления. По умолчанию None, что приведёт к случайной строке.
  • Возвращает:

    • results: ВычисленныеСписок результатызадач нас основерезультатами спискавычислений, задач.либо с ошибками.
  • Примечания:Примечание:

    • Если task_list является строкастрокой или объектобъектом pathlib.Path, список задачон будет загружен в форматекак JSON из переданного пути.файл.
    • Этапы работы программы:
      1. Загружает исходныенеобработанные файлы с FTP сервера в кэш-директорию.директорию кэша.
      2. Калибрует задачи, используя серверные калибровки или локально.
      3. СинтезируетПостобработка изображения,калибровок используявыполняется локальныйметодом, кластерразработанным Сергеем Анфиногентовым.
      4. Все ошибки в вычислениях будут сохранены в возвращаемом объекте или указанныйсохранены объектв кластера.результирующем Еслифайле объектв cluster_objectформате не 'local', он использует указанный объект кластера для вычислений.
      5. В случае ошибки во время вычислений выводится стек трассировки и переданные объекты списка задач с параметром "error"
      JSON.
  • Пример использования

    import srhimages
    
    time1, time2 = "2024-06-01 02:00:00", "2024-06-01 02:00:05"
    frequencies = [2800, 3000]
    
    task_list = srhimages.create_synth_tasks(time1, time2, cadence="3s", frequencies=frequencies, save_to="synth_1.json",
            average_width=5, average_unit="seconds", average_mode = "visibilities", average_position="after",
            output_polarizations = "IV", naxis=512, cdelt=4.9, clean_disk=True,
            compressed=True)
    
    results = srhimages.run_computation("./synth_1.json", "globa", calibrated_save_to="./synth_2.json")
    # результаты появятся в каталоге ./images/out
    

    Загрузка калибровок на сервер

    from srhimages.calibrations import CalibrationsApi
    import json
    
    with open("synth_2.json", "r") as fp:
        calibrated_tasks = json.load(fp)
    
    cal_api = CalibrationsApi(password="...")
    
    for task in calibrated_tasks:
        cal_api.create(task["gains"])