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 содержат примеры реальных геометрий, спектрального отклика, ливней и мюонов. В курсе к этим задачам переходим после изотропной вспышки и функции Грина.