LightHit: от первой команды к отклику

← Курс · Задачи

В лекциях выводим уравнения; здесь запускаем их численное решение. LightHit — пакет DN для ожидаемого отклика оптических модулей: он решает перенос света и разделяет прямой свет, одно рассеяние и порядки \(\ge2\).

Установка

Нужен Python 3.11 или новее. Примеры проверены с Python 3.12 и LightHit 0.3.0a4.

python -m pip install "lighthit[accelerate,viewer]==0.3.0a4" matplotlib
lighthit-selftest

Первая команда устанавливает пакет, ускорение и средства просмотра. Вторая проверяет установленный пакет. Подготовка ускоренных функций при первом использовании может занять дополнительное время.

Скачать и запустить

Скачать все примеры вместе. Распакуйте архив и откройте терминал в папке examples.

python 01_medium.py
python 02_diffusion.py
python 03_flash.py

У каждого примера появляются summary.json, таблица CSV и рисунок SVG в подпапке .work/practice/. Параметр --output задаёт другую папку результата. В репозитории курса те же команды выполняются как python examples/01_medium.py и т. д.

Лекция Практика Что проверяем
1 Среда, единицы и моменты оптические длины, поглощение, центр облака
2 RTE и диффузия флюенс и область применимости приближения
3 Изотропная вспышка три порядка, время прихода, бины и учебный приёмник

Вода и индикатриса

В этих трёх скриптах фиксирована длина волны 450 нм. Используется монохроматический образец BaikalWater из оптической модели, которую читают LightHit и NTSim. Значения сверены 22.10.2026 на сетке 350–600 нм с шагом 10 нм:

\(\lambda\), нм \(\mu_a\), м\(^{-1}\) \(\mu_s\), м\(^{-1}\) \(n_g\)
400 0.1410 0.0330 1.382598
450 0.0760 0.0190 1.371324
488 0.0436 0.01412 1.365734
532 0.0588 0.0140 1.360099
600 0.1760 0.0160 1.351308

Для 488 и 532 нм выполнена линейная интерполяция коэффициентов, как в LightHit и NTSim. Длины находятся после интерполяции: \(\ell_a=1/\mu_a\), \(\ell_s=1/\mu_s\). Это параметры принятой модели; их нельзя трактовать как универсальную калибровку любой точки и любого сезона озера.

HG с \(g=0.9\) — отдельный выбор модели рассеяния в LightHit. Он не выводится из \(\mu_a,\mu_s\) и не равнозначен исходной табличной индикатрисе BaikalWater. В course_medium.py явно записан один монохроматический набор коэффициентов; детекторные калибровки для этих примеров не нужны.

Синтетическая среда встроенного lighthit-demo имеет другие коэффициенты. Её название «Baikal-like» обозначает учебный пример, а не оптическую модель Baikal-GVD.

Как проверять результат

Проверяйте единицы и пределы прежде, чем сравнивать картинки. В примерах 2 и 3 повторите расчёт с --refine: он увеличивает число гармоник, верхний предел и точность квадратуры; у вспышки также уточняется сетка частот.

python 02_diffusion.py --refine --output .work/refined02
python 03_flash.py --refine --output .work/refined03

Положения и времена передаются в метрах и наносекундах. PointGreenSolver возвращает флюенс на единицу площади идеального изотропного приёмника; фотоэлектроны появляются после явного учёта площади и эффективности.

Следующие шаги

Исходники и документация LightHit содержат примеры реальных геометрий, спектрального отклика, ливней и мюонов. В курсе к этим задачам переходим после изотропной вспышки и функции Грина.