# -*- coding: utf-8 -*-
#
# Isoliner - грид и изолинии (QGIS).
# © 2026 ООО «Информ++» (www.informpp.ru).
# SPDX-License-Identifier: GPL-2.0-or-later
#
"""Двуязычие интерфейса (RU/EN).

Простой словарный слой: исходные строки в коде - русские, при английской
локали QGIS они подменяются на английские по таблице TRANSLATIONS. Если
перевода нет, возвращается исходная (русская) строка - плагин остаётся
рабочим. Модуль не импортирует QGIS на верхнем уровне, поэтому таблицу
переводов можно проверять обычным Python (см. tests/test_i18n.py).

Язык определяется по настройкам QGIS один раз, лениво, при первом вызове tr().
Для тестов и принудительного переключения есть set_language().
"""

_LANG = None  # 'ru' | 'en' (None = ещё не определён)


def set_language(lang):
    """Принудительно задать язык ('ru'/'en'/'en_US'/...). None - сбросить."""
    global _LANG
    if lang is None:
        _LANG = None
        return
    code = str(lang).strip().lower().replace("-", "_").split("_")[0]
    _LANG = "ru" if code == "ru" else "en"


def language():
    """Текущий язык ('ru'/'en'); инициализирует по QGIS при необходимости."""
    if _LANG is None:
        init_from_qgis()
    return _LANG or "en"


def init_from_qgis():
    """Определить язык интерфейса по настройкам QGIS. По умолчанию 'en'."""
    loc = ""
    try:
        from qgis.core import QgsApplication
        loc = QgsApplication.instance().locale() or ""
    except Exception:
        loc = ""
    if not loc:
        try:
            from qgis.PyQt.QtCore import QSettings
            s = QSettings()
            override = s.value("locale/overrideFlag", False, type=bool)
            loc = s.value("locale/userLocale", "") if override else ""
        except Exception:
            loc = ""
    set_language(loc or "en")
    return _LANG


def tr(s):
    """Перевести строку s на активный язык. RU - исходник, EN - по таблице."""
    if _LANG is None:
        init_from_qgis()
    if _LANG == "en":
        return TRANSLATIONS.get(s, s)
    return s


def missing_keys(keys):
    """Какие из переданных русских строк не имеют английского перевода.

    Удобно для теста покрытия: keys - множество строк, реально обёрнутых в
    _tr()/tr() в коде (извлекается AST-обходом)."""
    return [k for k in keys if k not in TRANSLATIONS]


# --- Таблица переводов RU -> EN -------------------------------------------
# Ключ - русская строка ровно как в коде (включая %d/%s, переносы, символы).
# Значение - английский перевод. Покрывает статический интерфейс:
# имена инструментов, подписи параметров, варианты списков, панели справки,
# живые подписи виджетов. Логи и HTML-отчёты переводятся отдельным проходом.

TRANSLATIONS = {
    'Создаёт синтетический рельеф: наклонная равнина, холмы, извилистая долина с постоянным падением. Рельеф детерминирован по зерну. Между холмами осознанно остаются локальные понижения, чтобы инструменту заполнения было что показывать. Служебный инструмент для примеров руководства и работы без сети, живые данные даёт инструмент 2.01. Выход: GeoTIFF float32 (или int16 флажком) в группе Топография.\n\nФлажок **Овражно-балочная сеть** врезает в рельеф тальвеги с крутыми бортами и отвершками под острым углом. Это самая тяжёлая проверка для построения рельефа по горизонталям: узкий врез между соседними горизонталями срезается, и на профиле поперёк оврага это видно сразу. Такой рельеф нужен как проверочный набор для инструментов 2.11 и 2.12.\n\nЗаодно выдаются три демо-точки створов возле тальвегов, нарочно сдвинутые в сторону от водотока - готовая еда для инструмента 2.15 «Отчёт по створу» и наглядная проверка притяжки, и две демо-трассы канав поперёк тальвегов для инструмента 2.16 «Водосбор линии».\n\nДва необязательных выхода дают готовую пару для инструмента 2.18 «Насыпи и выемки»: проектную поверхность и полигоны участков работ. Площадка горизонтальная, её отметка берётся медианой рельефа внутри области. Это не вкусовщина: объём есть сумма разностей, и нетто обращается в ноль ровно при отметке, равной среднему, поэтому демо сразу даёт сошедшийся баланс. Сдвиг отметки в дополнительных параметрах уводит его в привозной или вывозной грунт. По умолчанию оба выхода выключены.': 'Creates a synthetic relief: a tilted plain, hills, a winding valley with a steady fall. The relief is deterministic by seed. Local depressions are deliberately left between the hills so the filling tool has something to show. A service tool for the manual examples and for work without a network, live data come from tool 2.01. Output: a float32 GeoTIFF (or int16 by a tick) in the Topography group.\n\nThe **Gully and ravine network** tick cuts thalwegs with steep sides and tributaries at an acute angle into the relief. This is the hardest test for building a relief from contours: a narrow cut between adjacent contours is shaved off, and on a profile across the gully this shows at once. Such a relief is needed as a validation set for tools 2.11 and 2.12.\n\nThree demo gauge points near the thalwegs are also produced, deliberately shifted aside from the stream - ready food for the 2.15 Gauge point report tool and a visual check of the snapping, plus two demo ditch traces across the thalwegs for the 2.16 Catchment of a line tool.\n\nTwo optional outputs give a ready pair for tool 2.18 Cut and fill: a design surface and work area polygons. The pad is horizontal and its elevation is the mean of the relief inside the area. That is not a matter of taste: volume is a sum of differences, and the net turns to zero exactly at the mean, so the demo comes out with a balance that closes. The elevation offset in the advanced parameters moves it into imported or exported soil. Both outputs are off by default.',
    '2.15 Отчёт по створу': '2.15 Gauge point report',
    'Морфометрия водосбора от створа - точки замыкания на водотоке. Каждая точка притягивается к ячейке наибольшей аккумуляции в радиусе (механика «Бассейнов»), от неё собирается полный водосбор и считается инженерный набор: площадь, средняя, минимальная и максимальная высота, средний уклон бассейна (Horn, градусы), отметка створа, длина главного водотока от створа до истока (вверх по наибольшей аккумуляции), падение и средний уклон водотока в промилле.\n\nВыход: полигоны водосборов с атрибутами и HTML-отчёт по каждому створу, ключевые цифры дублируются в журнал. Водосборы соседних створов на одном водотоке вкладываются друг в друга: каждый створ получает свой полный бассейн, а не остаток.\n\nЕдиницы метрические: ЦМР в метрах в метровой СК. Расходы и модули стока сознательно не считаются, это морфометрия, а не расчётная гидрология.': 'Watershed morphometry from a gauge - a closure point on a stream. Each point is snapped to the cell of highest accumulation within a radius (the Basins mechanics), the full watershed is collected from it and the engineering set is computed: area, mean, minimum and maximum elevation, mean basin slope (Horn, degrees), gauge elevation, main stream length from the gauge to the source (upstream by highest accumulation), stream fall and mean stream slope in permille.\n\nOutput: watershed polygons with attributes and an HTML report per gauge, the key numbers are echoed to the log. Watersheds of neighbouring gauges on one stream properly nest into each other: every gauge gets its full basin, not a remainder.\n\nUnits are metric: a DEM in metres in a metric CRS. Discharges and runoff moduli are deliberately not computed, this is morphometry, not computational hydrology.',
    'Морфометрия водосбора от створа - точки замыкания на водотоке. Каждая точка притягивается к ячейке наибольшей аккумуляции в радиусе (механика «Бассейнов»), от неё собирается полный водосбор и считается инженерный набор: площадь, средняя, минимальная и максимальная высота, средний уклон бассейна (Horn, градусы), отметка створа, длина главного водотока от створа до истока (вверх по наибольшей аккумуляции), падение и средний уклон водотока в промилле.\n\nВыход: полигоны водосборов с атрибутами и HTML-отчёт по каждому створу, ключевые цифры дублируются в журнал. Водосборы соседних створов на одном водотоке вкладываются друг в друга: каждый створ получает свой полный бассейн, а не остаток.\n\nЕдиницы метрические: ЦМР в метрах в метровой СК. Расходы и модули стока сознательно не считаются, это морфометрия, а не расчётная гидрология.\n\nВодосборы строятся по топологии рельефа. На территориях без чётких границ стока - плоские поймы, гидравлические перетоки, подпоры - результат следует проверять гидродинамическим моделированием.': 'Watershed morphometry from a gauge - a closure point on a stream. Each point is snapped to the cell of highest accumulation within a radius (the Basins mechanics), the full watershed is collected from it and the engineering set is computed: area, mean, minimum and maximum elevation, mean basin slope (Horn, degrees), gauge elevation, main stream length from the gauge to the source (upstream by highest accumulation), stream fall and mean stream slope in permille.\n\nOutput: watershed polygons with attributes and an HTML report per gauge, the key numbers are echoed to the log. Watersheds of neighbouring gauges on one stream properly nest into each other: every gauge gets its full basin, not a remainder.\n\nUnits are metric: a DEM in metres in a metric CRS. Discharges and runoff moduli are deliberately not computed, this is morphometry, not computational hydrology.\n\nCatchments are built from the topology of the relief. On terrain without clear flow boundaries - flat floodplains, hydraulic transfers, backwater - the result should be verified by hydrodynamic modelling.',
    'Точки створов': 'Gauge points',
    'Водосборы створов (полигоны)': 'Gauge watersheds (polygons)',
    'Отчёт по створам (HTML)': 'Gauge report (HTML)',
    'Нужен слой точек створов.': 'A gauge point layer is needed.',
    'Ни один створ не попал на грид.': 'No gauge point fell onto the grid.',
    'Створов принято: %d': 'Gauge points accepted: %d',
    'Створ %d:': 'Gauge %d:',
    'Уклон бассейна (Horn)...': 'Basin slope (Horn)...',
    'Отчёт по створам': 'Gauge point report',
    'Створ %d': 'Gauge %d',
    'Створ-%d': 'Gauge-%d',
    'Точки створов (демо)': 'Gauge points (demo)',
    'Опознавать пласты и межпластья по парам поверхностей': 'Identify beds and interbeds from surface pairs',
    'Полосы (кровля, подошва, тело):': 'Bands (roof, floor, body):',
    'пласт': 'bed',
    'межпластье': 'interbed',
    'не опознано': 'not identified',
    'справочник': 'reference',
    'Цвета полос: из справочника %d, серых %d.': 'Band colours: %d from the reference, %d grey.',
    'пропущены пласты': 'beds skipped',
    'пласты не показаны': 'beds not shown',
    'междупластье': 'interbed',
    '4.11 Образец справочника пластов': '4.11 Bed reference template',
    'Справочник пластов (образец)': 'Bed reference (template)',
    'Образец справочника не найден в поставке: %s': 'The bed reference template is missing from the package: %s',
    'Образец положен в проект. Подайте его в 4.01 и 4.02 как «Справочник пластов (таблица)».': 'The template has been added to the project. Feed it to 4.01 and 4.02 as the Bed reference (table).',
    'Кладёт в проект поставляемый образец справочника пластов - тот, что читают инструменты 4.01 и 4.02. Это таблица без геометрии: одна строка на пласт или междупластье, сверху вниз по разрезу, с кодом, порядком залегания, телом и цветом.\n\nОбразец собран по Верхнекамскому месторождению, 36 строк от покровных отложений до нижней каменной соли. Для другого месторождения он служит скелетом: сохраните слой в файл и правьте коды, порядок и цвета под свою стратиграфию.\n\nТело («пласт» или «междупластье») заполняет геолог, и это не формальность. Из кода тело не выводится: АБ выглядит как «А плюс Б», но это цельный пласт, а Б-В - междупластье, хотя пласта Б в списке нет. Инструмент значения тела не пересчитывает.\n\nТот же файл лежит в папке templates внутри каталога плагина в видах xlsx и csv, если удобнее открыть его вне QGIS.': 'Adds the bundled bed reference template to the project - the one read by tools 4.01 and 4.02. It is a table without geometry: one row per bed or interbed, top to bottom down the section, with the code, the bedding order, the body kind and the colour.\n\nThe template is built for the Verkhnekamskoye deposit, 36 rows from the cover deposits down to the lower rock salt. For another deposit it serves as a skeleton: save the layer to a file and edit the codes, the order and the colours for your own stratigraphy.\n\nThe body (bed or interbed) is filled in by the geologist, and that is not a formality. The body cannot be derived from the code: АБ looks like A plus Б, yet it is a single bed, while Б-В is an interbed even though there is no bed Б in the list. The tool does not recompute the body values.\n\nThe same file lives in the templates folder inside the plugin directory in xlsx and csv forms, if it is easier to open it outside QGIS.',
    'Горизонтали': 'Contours',
    'Поле отметки (обычно elev)': 'Elevation field (usually elev)',
    'Направления секущих': 'Secant directions',
    'одно (90°)': 'one (90 deg)',
    'два (45°, 135°)': 'two (45, 135 deg)',
    'четыре, через 45°': 'four, every 45 deg',
    'шесть, через 30°': 'six, every 30 deg',
    'Шаг между секущими, ед. карты': 'Spacing between secants, map units',
    'Вес точек сгущения': 'Weight of the densified points',
    'Минимум пересечений на секущей': 'Minimum crossings per secant',
    'Не найдено ни одной горизонтали с числовой отметкой.': 'No contour with a numeric elevation was found.',
    'Пропущено линий без числовой отметки: %d': 'Lines skipped without a numeric elevation: %d',
    'Шаг между секущими по умолчанию: %.4g': 'Default spacing between secants: %.4g',
    'Шаг сгущения по умолчанию: %.4g': 'Default densification step: %.4g',
    'Горизонталей принято: %d, азимутов: %d.': 'Contours accepted: %d, azimuths: %d.',
    'Ни одна секущая не дала профиля: увеличьте охват или уменьшите шаг между секущими.': 'No secant produced a profile: widen the extent or reduce the spacing between secants.',
    'Шаг сгущения (%.4g) заметно мельче расстояния между секущими (%.4g). Плотность данных выйдет анизотропной, и на рельефе возможен муар по направлению секущих. Прореживание решёткой это гасит, но надёжнее взять шаги соизмеримыми.': 'The densification step (%.4g) is markedly finer than the spacing between secants (%.4g). The data density will come out anisotropic, and the relief may show a moire along the secant directions. Lattice thinning damps it, but comparable steps are the safer choice.',
    'Справочник пластов (таблица)': 'Bed reference (layer), optional',
    'Справочник не прочитан (%s), разрез строится без него.': 'The reference was not read (%s), the section is built without it.',
    'Справочник: принято %d из %d строк.': 'Reference: %d of %d rows accepted.',
    'без номера порядка: %d': 'without an order number: %d',
    'без вида тела: %d': 'without a body kind: %d',
    'свой цвет': 'own colour',
    'цвет не определён': 'colour not determined',
    'Слой с категорированной раскраской': 'Layer styled by categories',
    'Нужен векторный слой.': 'A vector layer is needed.',
    'Слой раскрашен не категориями. Откройте Свойства - Стиль, выберите «Категорированный», задайте поле и цвета, затем повторите.': 'The layer is not styled by categories. Open Properties - Symbology, choose Categorized, set the field and the colours, then repeat.',
    'В раскраске слоя нет категорий с кодом.': 'The styling of the layer has no categories with a code.',
    'Поле раскраски: %s': 'Styling field: %s',
    'Записано кодов: %d': 'Codes written: %d',
    'Пропущено категорий без кода: %d (обычно это «прочее»).': 'Categories without a code skipped: %d (usually the fallback one).',
    'Трассы канав (демо)': 'Ditch traces (demo)',
    'Нагорная канава': 'Hillside ditch',
    'Кювет': 'Road gutter',
    'Демо-трассы: %d, поперёк тальвегов (готовая еда для 2.16 «Водосбор линии»).': 'Demo traces: %d, across the thalwegs (ready food for 2.16 Catchment of a line).',
    '2.16 Водосбор линии (канавы)': '2.16 Catchment of a line (ditch)',
    # --- 2.03: трёхмерные тальвеги ---
    'Тальвеги с отметками: %d из %d, узлов добавлено %d. Отметки приведены к падающим вниз по течению, наибольшая правка %.3f м.': 'Thalwegs with elevations: %d of %d, %d nodes added. The elevations were brought to a downstream fall, the largest correction is %.3f m.',
    'Отметки тальвегов спорят с другими узлами в %d ячейках: там окажется значение тальвега. Обычно это пересечение русла с горизонталью.': 'Thalweg elevations disagree with other nodes in %d cells: the thalweg value will win there. Usually this is a channel crossing a contour.',
    # --- 2.03: граница области построения ---
    'Граница области построения (полигон)': 'Boundary of the build area (polygon)',
    'В слое границы нет геометрии, обрезка не выполнена.': 'The boundary layer has no geometry, no clipping was applied.',
    'Граница не пересекает область построения: проверьте систему координат слоя границы.': 'The boundary does not intersect the build area: check the CRS of the boundary layer.',
    'Граница области: внутри %d ячеек из %d (%.1f процента), снаружи поверхность не выдаётся.': 'Build boundary: %d cells inside out of %d (%.1f percent), no surface is output beyond it.',
    # --- 4.05: атрибуты на разрез ---
    'Линия рельефа на чертеже (обрезка сверху)': 'Terrain line on the drawing (clip from above)',
    'Поле нижней отметки полос и вертикалей': 'Field with the bottom elevation of bands and verticals',
    'Нижняя отметка это глубина от верха': 'The bottom value is a depth from the top',
    'Доля самородка (пусто = из подбора, 0 = точно через данные)': 'Nugget share (empty = as fitted, 0 = exact through the data)',
    'Доля самородка в подобранной вариограмме, от 0 до 1. Пустое поле оставляет подбор как есть. Ноль делает кригинг точным в точках замеров: вероятность в узле со скважиной равна её собственному индикатору, а не сглаженному среднему по соседям. Общая дисперсия сохраняется, меняется только гладкость. Подобранные и применённые доли печатаются в журнал.': 'The share of the nugget in the fitted variogram, from 0 to 1. An empty field leaves the fit as it is. Zero makes the kriging exact at the measured points: at a node holding a borehole the probability equals its own indicator rather than a smoothed average over the neighbours. The total variance is preserved, only the smoothness changes. The fitted and the applied shares are printed to the log.',
    'Класс «%s»: самородок из подбора %.2f, радиус %.0f.': 'Class "%s": nugget from the fit %.2f, range %.0f.',
    'Класс «%s»: самородок из подбора %.2f, применён %.2f, радиус %.0f.': 'Class "%s": nugget from the fit %.2f, applied %.2f, range %.0f.',
    'Самородок обнулён: оценка проходит через данные. В узле со скважиной вероятность равна её классу, если ячейка мельче расстояния между соседними скважинами.': 'The nugget is set to zero: the estimate passes through the data. At a node holding a borehole the probability equals its class, provided the cell is finer than the spacing between neighbouring boreholes.',
    'Собрано форм: %d (подошв %d, бровок при них %d). Непарных линий: %d. Одна подошва собирает несколько бровок, когда трассировка разрезала длинную бровку на куски.': 'Forms assembled: %d (%d toes, %d crests at them). Unpaired lines: %d. One toe gathers several crests when the tracing has cut a long crest into pieces.',
    'Наименьшая доля согласных проб в форме: %.2f. Низкая доля означает, что линия склеила два уступа.': 'The lowest share of agreeing probes in a form: %.2f. A low share means the line has glued two benches together.',
    '2.20 Бровки и подошвы в работу': '2.20 Crests and toes into work',
    'Кандидаты (выход 2.19)': 'Candidates (output of 2.19)',
    'ЦМР (та же, что в 2.19)': 'DEM (the same as in 2.19)',
    'Поле вида (brow, toe)': 'Kind field (brow, toe)',
    'Отсечка по перепаду, м': 'Drop cut-off, m',
    'Предел пути спуска, м': 'Descent path limit, m',
    'Доля согласных проб': 'Share of agreeing probes',
    'Верх (бровки)': 'Top (crests)',
    'Низ (подошвы)': 'Bottom (toes)',
    'Непарные линии': 'Unpaired lines',
    'Подано бровок %d, подошв %d, отсечено по перепаду %d.': 'Supplied: %d crests, %d toes, %d cut off by the drop.',
    'Нужны линии обоих видов. Проверьте поле вида: ожидаются значения brow и toe, как их пишет 2.19.': 'Lines of both kinds are needed. Check the kind field: the values brow and toe are expected, as 2.19 writes them.',
    'Собрано пар: %d. Непарных линий: %d.': 'Pairs assembled: %d. Unpaired lines: %d.',
    'Наименьшая доля согласных проб в паре: %.2f. Низкая доля означает, что линия склеила два уступа.': 'The lowest share of agreeing probes in a pair: %.2f. A low share means the line has glued two benches together.',
    'спуск не дошёл до подошвы': 'the descent did not reach a toe',
    'спуск разошёлся по разным подошвам': 'the descent scattered over different toes',
    'к подошве не спустилась ни одна бровка': 'no crest descended to this toe',
    'Превращает линии бровок и подошв в рабочие структурные линии: снимает отметки с ЦМР, собирает формы бровка-подошва и раскладывает их по двум слоям, Верх и Низ, с общим полем связи. Выход подаётся дальше как есть, руками править нечего.\n\n**Два сценария, и второй важнее первого.** Первый очевидный: линии пришли из 2.19 по плотной съёмке. Второй - линии уже есть в топографическом комплекте, потому что бровки там описываются обязательно и своими кодами классификатора. Детектор в этом случае не нужен вовсе, а нужно ровно то, что делает этот инструмент: вид линии в комплекте закодирован, а какая бровка с какой подошвой образуют форму - нет, и связь приходится собирать. Таких комплектов много, а плотных съёмок мало.\n\n**ЦМР необязательна.** Спуск по склону отвечает на один вопрос: где низ. Когда у линий есть собственные отметки (выход 2.22), ответ уже в данных, и рельеф не нужен - подошвой считается ближайшая линия, лежащая ниже бровки. Это разрывает круг топографического сценария, где рельеф как раз и строится, и подать его в спуск нечего. С ЦМР работает прежний спуск, он точнее на кривом борту с узкими бермами.\n\nПары собираются спуском по склону, а не по близости. От каждой пробной вершины бровки идёт спуск по направлениям стока, пока не встретится подошва, и подошвы голосуют. Так работает физика уступа: вода с бровки скатывается по откосу ровно к его подошве. На кривом борту с узкими бермами ближайшая по расстоянию подошва часто принадлежит соседнему уступу, и выбор по близости ошибается там, где спуск прав.\n\nОдна подошва может собрать несколько бровок, и это норма: трассировка режет длинную бровку на куски, и все куски спускаются к той же подошве. Результат группируется по подошве, поэтому в выходе форма это одна подошва и множество бровок при ней с общим полем связи, а подошва пишется один раз, а не по разу на каждую бровку.\n\nНепарные линии не пропадают молча, а уходят в третий слой с причиной в атрибуте: спуск не дошёл до подошвы (обычно предел пути мал или бровка ложная) либо спуск разошёлся по разным подошвам (обычно линия склеила два уступа).\n\n**Поле вида читается терпимо.** 2.19 пишет brow и toe, а в сдаточном комплекте будет «Бровка откоса, насыпи, выемки укреплённая» или код 62350400. Понимаются значения из 2.19, коды бровок из классификаторов и названия со словами «бровка» или «подошва». Как прочитано каждое значение, печатается в журнал таблицей, а неузнанные значения перечисляются отдельно и пропускаются: угадывать вслепую хуже, чем сказать «не понял».\n\nОтсечка по перепаду повторяет фильтр 2.19: сюда можно подать весь слой кандидатов и отобрать значимые прямо здесь, не заводя отдельный отфильтрованный слой. Выходы: два линейных слоя LineStringZ с полями kind и link, готовые входы для построения поверхности, и слой непарных.': 'Turns crest and toe lines into working structural lines: takes the elevations off the DEM, assembles crest-toe pairs and lays them into two layers, Top and Bottom, with a shared link field. The output goes on as it is, with nothing to fix by hand.\n\n**Two scenarios, and the second matters more.** The first is obvious: the lines came from 2.19 over a dense survey. In the second the lines are already in a topographic deliverable, where crests are described as a matter of course and carry their own classifier codes. No detector is needed there, and what is needed is exactly what this tool does: the kind of a line is coded in the deliverable, but which crest goes with which toe is not, and the link has to be assembled. There are many such deliverables and few dense surveys.\n\nThe pairs are assembled by descending the slope rather than by proximity. From every probe vertex of a crest a descent follows the flow directions until a toe is met, and the toes vote. This is how a bench works physically: water from the crest runs down the face exactly to its toe. On a curved wall with narrow berms the nearest toe by distance often belongs to the neighbouring bench, and the choice by proximity errs where the descent is right.\n\nOne toe may gather several crests, and that is normal: the tracing cuts a long crest into pieces, and every piece descends to the same toe. The result is grouped by the toe, so in the output a form is one toe with a set of crests at it sharing a link field, and the toe is written once rather than once per crest.\n\nUnpaired lines do not vanish silently, they go into a third layer with the reason in an attribute: the descent did not reach a toe (usually the path limit is too small or the crest is false) or the descent scattered over different toes (usually the line has glued two benches together).\n\n**The DEM is optional.** The descent answers a single question: which way is down. When the lines carry elevations of their own (the output of 2.22) the answer is already in the data and no terrain is needed - the toe is the nearest line lying below the crest. This breaks the circle of the topographic scenario, where the terrain is being built in the first place and there is nothing to feed the descent. With a DEM the former descent is used, it is more accurate on a curved wall with narrow berms.\n\n**The kind field is read tolerantly.** 2.19 writes brow and toe, while a deliverable will carry something like a reinforced crest of a slope, a fill or a cut, or the code 62350400. The values of 2.19, the crest codes of the classifiers and names containing the words for a crest or a toe are all understood. How every value was read is printed to the log as a table, and unrecognised values are listed separately and skipped: guessing blindly is worse than saying it did not understand.\n\nThe drop cut-off repeats the filter of 2.19: the whole candidate layer can be supplied here and the significant ones selected right away, with no separate filtered layer. Outputs: two LineStringZ layers with the kind and link fields, ready inputs for surface building, and a layer of the unpaired.',
    'Детектор: ячейка %.2f м, отсечка %.2f м, база замера %d ячеек (%.1f м в каждую сторону). Перепад меряется в этой базе, и полную высоту уступа он показывает, только когда база покрывает ширину откоса.': 'Detector: cell %.2f m, cut-off %.2f m, probe base %d cells (%.1f m to each side). The drop is measured within this base, and it shows the full bench height only when the base covers the width of the face.',
    'все': 'all',
    'бровка уступа': 'bench crest',
    'подошва уступа': 'bench toe',
    'Верх форм (бровки, гребни, вершины)': 'Top of forms (crests, ridges, summits)',
    'Низ форм (подошвы, дно, урез)': 'Bottom of forms (toes, floor, waterline)',
    'Поле связи формы (одно на пару)': 'Form link field (one per pair)',
    'Поле отметки сторон форм (если нет Z)': 'Elevation field of form sides (when there is no Z)',
    'Функция формы поперёк': 'Shape function across',
    'линейная (проектный откос)': 'linear (a design slope)',
    'плавная (скругление у кромок)': 'smooth (rounded at the edges)',
    'Форма «%s»: %s, сторона осталась вне построения.': 'Form "%s": %s, the side has been left out of the build.',
    'Форма «%s»: ячеек тела %d, медианная ширина %.1f ячеек, расхождение отметок в схождениях %.2f м, пропущено объектов без отметок %d.': 'Form "%s": %d body cells, median width %.1f cells, elevation mismatch at the junctions %.2f m, %d objects skipped for want of elevations.',
    'Формы уже двух ячеек: %s. В растре такой формы нет, уменьшите размер ячейки.': 'Forms narrower than two cells: %s. Such a form does not exist in a raster, reduce the cell size.',
    'Подана только одна сторона форм. Формы собираются из верха и низа вместе, одинокая сторона пропущена (если нужен барьер, подайте её во вход Обрывы).': 'Only one side of the forms has been supplied. Forms are assembled from a top and a bottom together, and a lone side is skipped (if a barrier is what is needed, supply it to the Scarps input).',
    'Из слоёв форм не собралось ни одного тела: проверьте поле связи и отметки сторон.': 'Not a single body was assembled out of the form layers: check the link field and the elevations of the sides.',
    '2.22 Отметки с примыкающих горизонталей': '2.22 Elevations from adjoining contours',
    'Линии без отметок (бровки, подошвы)': 'Lines without elevations (crests, toes)',
    'Горизонтали': 'Contours',
    'Поле высоты горизонталей': 'Contour elevation field',
    'Допуск примыкания, м': 'Adjoining tolerance, m',
    'Линии с отметками (LineStringZ)': 'Lines with elevations (LineStringZ)',
    'Немые линии (без примыканий)': 'Mute lines (no adjoinings)',
    'Горизонталей с отметкой: %d.': 'Contours with an elevation: %d.',
    'Профиль получили %d линий, остались немыми %d.': '%d lines received a profile, %d stayed mute.',
    'Опорных точек на линию: медиана %d, наименьшее %d. Одна точка означает постоянную отметку по всей линии.': 'Support points per line: median %d, minimum %d. One point means a constant elevation along the whole line.',
    'меньше двух вершин': 'fewer than two vertices',
    'ни одна горизонталь не примыкает': 'no contour adjoins the line',
    'Даёт немым линиям профиль по горизонталям, которые к ним примыкают. У бровки в топографическом чертеже своей отметки нет, но горизонтали по нормативу доводятся до линии описания объекта с формированием узловых точек. Каждая такая точка несёт отметку своей горизонтали, и по ним восстанавливается профиль всей линии - переменная отметка из самих данных, а не одна на весь объект.\n\nБерутся два вида встреч: пересечение с горизонталью насквозь и конец горизонтали в допуске от линии (узловая точка примыкания). Между точками отметка интерполируется по дуге линии, за крайними держится постоянной: экстраполировать уклон вдоль бровки опасно, он часто ломается.\n\nЗачем: выход подаётся стороной формы в **Верх форм** или **Низ форм** инструмента 2.03 Topo2Raster. Вместе с 2.20 это закрывает площадные карьеры, выемки, насыпи и отвалы в топопланах: горизонтали внутри них по нормативу не описываются, и бровки с подошвами - единственный источник рельефа там.\n\nМетод работает ровно настолько, насколько комплект топологически согласован: если горизонтали до линии не доведены, линия остаётся немой и уходит в отдельный слой с причиной. Число опорных точек пишется в атрибут n_samples и в журнал - по нему сразу видно, годится ли комплект.': 'Gives mute lines a profile from the contours that adjoin them. A crest in a topographic drawing carries no elevation of its own, but the standard requires contours to be brought up to the object line with node points formed. Every such point carries the elevation of its contour, and from them the profile of the whole line is recovered - a varying elevation out of the data itself rather than one value per object.\n\nTwo kinds of meetings are taken: a through intersection with a contour, and a contour end within the tolerance of the line (an adjoining node point). Between the points the elevation is interpolated along the arc of the line, beyond the extreme points it is held constant: extrapolating the gradient along a crest is unsafe, it often breaks.\n\nWhy: the output goes as a form side into the **Top of forms** or **Bottom of forms** of 2.03 Topo2Raster. Together with 2.20 this closes areal quarries, cuts, fills and dumps in topographic plans: contours inside them are not described by the standard, and crests with toes are the only source of terrain there.\n\nThe method works exactly as far as the deliverable is topologically consistent: if the contours are not brought up to the line, the line stays mute and goes into a separate layer with the reason. The number of support points is written into the n_samples attribute and into the log - it shows at once whether the deliverable is fit.',
    'Вес измеренных отметок': 'Weight of measured elevations',
    'Вес измеренных отметок %.2f против единицы у вершин изолиний: в общей ячейке измерение перевесит оцифровку.': 'Weight of measured elevations %.2f against one at contour vertices: in a shared cell the measurement outweighs the digitizing.',
    'Поле вида прочитано так:': 'The kind field was read as follows:',
    'Не опознаны и пропущены значения поля вида: %s.': 'Unrecognised and skipped values of the kind field: %s.',
    'Нужны линии обоих видов. В поле вида понимаются значения brow и toe из 2.19, коды бровок из классификаторов и названия со словами «бровка» или «подошва». Как прочитано каждое значение, напечатано в журнале выше.': 'Lines of both kinds are needed. The kind field understands the brow and toe values of 2.19, the crest codes of the classifiers and names containing the words for a crest or a toe. How every value was read is printed in the log above.',
    'бровка': 'crest',
    'ЦМР не задана: пары собираются по отметкам линий. Линии обязаны быть трёхмерными (выход 2.22), подошвой считается ближайшая линия, лежащая ниже бровки.': 'No DEM given: the pairs are assembled from the elevations of the lines. The lines must be three-dimensional (the output of 2.22), and the toe is the nearest line lying below the crest.',
    'Пропущено плоских линий без отметок: %d. Без ЦМР пары собираются по отметкам, поэтому линии обязаны нести Z: проведите их через 2.22.': 'Flat lines without elevations skipped: %d. Without a DEM the pairs are assembled from elevations, so the lines must carry Z: put them through 2.22.',
    'ниже этой бровки подошв нет': 'no toes lie below this crest',
    'ближайшая подошва дальше предела': 'the nearest toe is beyond the limit',
    'к подошве не отнесена ни одна бровка': 'no crest was assigned to this toe',
    'Имя поля угла падения, °': 'Name of the dip field, °',
    'Имя поля азимута падения, °': 'Name of the dip direction field, °',
    'Угол падения, ° (если нет поля)': 'Dip, ° (when there is no field)',
    'Азимут падения, ° (если нет поля, -1 нет)': 'Dip direction, ° (when there is no field, -1 none)',
    'Длина следа по горизонтали, м (0 - до рамки)': 'Trace length horizontally, m (0 - down to the frame)',
    'Структурные элементы (углы падения)': 'Structural elements (dips)',
    'Структурные элементы (демо)': 'Structural elements (demo)',
    'вкрест простирания': 'across the strike',
    'косо к простиранию': 'oblique to the strike',
    'по простиранию': 'along the strike',
    '4.12 Элементы залегания по следу выхода': '4.12 Attitude from an outcrop trace',
    'Следы выхода (линии с отметками)': 'Outcrop traces (lines with elevations)',
    'Окно, вершин (0 - одно залегание на след)': 'Window, vertices (0 - one attitude per trace)',
    'Наименьшая изогнутость следа (0..1)': 'Minimum curvature of the trace (0..1)',
    'Следы с элементами залегания': 'Traces with attitudes',
    'Следы без залегания (с причиной)': 'Traces without an attitude (with a reason)',
    'Залегание получили %d следов, отказано %d.': '%d traces received an attitude, %d refused.',
    'Угол падения: наименьший %.1f, наибольший %.1f. Наименьшая изогнутость следа %.2f - чем ближе к нулю, тем хуже определена плоскость.': 'Dip: smallest %.1f, largest %.1f. The smallest curvature of a trace is %.2f - the closer to zero, the worse the plane is defined.',
    'линия без отметок': 'a line without elevations',
    'меньше трёх вершин с отметками': 'fewer than three vertices with elevations',
    'все отметки одинаковы, плоскость горизонтальна': 'all the elevations are equal, the plane is horizontal',
    'след почти прямой в плане, плоскость не определена': 'the trace is nearly straight in plan, the plane is undefined',
    'ни одно окно не дало плоскости': 'no window yielded a plane',
    'Считает угол и азимут падения по трёхмерному следу выхода границы на поверхность. Если граница пласта или разлома оцифрована с отметками, плоскость по ней восстанавливается однозначно, а из плоскости выпадают оба элемента залегания. Правило трёх точек - минимальный случай, здесь считается по всем вершинам сразу.\n\nМетод по Альмендингеру: нормаль к плоскости это собственный вектор матрицы ориентации при наименьшем собственном значении. Подгонка вида z = a*x + b*y + c проще, но разваливается на крутых залеганиях, где коэффициенты уходят в бесконечность. Через собственные векторы крутизна перестаёт быть особым случаем.\n\n**Прямой в плане след залегания не определяет.** Через одну прямую в пространстве проходит бесконечно много плоскостей, они вращаются вокруг неё как страницы вокруг корешка. Инструмент это видит по отношению собственных значений и отказывает с причиной вместо уверенного числа из шума округления. Мера пишется в поле **planar**: ноль - точки на прямой, единица - размах в двух направлениях.\n\n**Складка ловится невязкой.** Метод предполагает, что след лежит на одной плоскости, а длинная граница редко лежит: флексура, смещение разломом, перегиб. Средняя невязка точек от плоскости пишется в поле **rms**, и большое значение означает, что одного залегания на весь след не существует. Тогда включайте **окно**: залегание считается по скользящему участку, и на выходе будет его изменение вдоль границы, что полезнее одного среднего числа.\n\nВыход подаётся прямо в 4.05: поля dip и dip_az там и ожидаются. Если рельеф задан горизонталями, а след плоский, проведите его сперва через 2.22 - отметки снимутся с примыкающих горизонталей.': 'Computes the dip and the dip direction from a three-dimensional trace of an outcrop. When the boundary of a bed or a fault is digitized with elevations, the plane through it is defined uniquely and both elements of the attitude follow from it. The three-point rule is the minimal case, here the computation runs over all the vertices at once.\n\nThe method follows Allmendinger: the normal to the plane is the eigenvector of the orientation matrix belonging to the smallest eigenvalue. A fit of the form z = a*x + b*y + c is simpler but falls apart on steep attitudes, where the coefficients run to infinity. Through the eigenvectors steepness stops being a special case.\n\n**A trace straight in plan does not define an attitude.** Infinitely many planes pass through one straight line in space, they rotate about it like pages about a spine. The tool sees this through the ratio of the eigenvalues and refuses with a reason instead of a confident number out of rounding noise. The measure goes into the **planar** field: zero for points on a line, one for a spread in two directions.\n\n**A fold is caught by the residual.** The method assumes the trace lies on one plane, and a long boundary rarely does: a flexure, a displacement by a fault, an inflection. The mean residual of the points from the plane goes into the **rms** field, and a large value means that no single attitude exists for the whole trace. Then turn on the **window**: the attitude is computed over a sliding stretch and the output carries its change along the boundary, which is more useful than one averaged number.\n\nThe output feeds straight into 4.05, which expects exactly the dip and dip_az fields. If the terrain is given by contours and the trace is flat, put it through 2.22 first - the elevations will be taken off the adjoining contours.',
    'Следы выхода (для 4.12)': 'Outcrop traces (for 4.12)',
    'Следы выхода (демо)': 'Outcrop traces (demo)',
    'след пологий': 'gentle trace',
    'след крутой': 'steep trace',
    'след прямой': 'straight trace',
    'изогнут, залегание определяется': 'curved, the attitude is defined',
    'крутое залегание, для подгонки по z было бы плохо': 'a steep attitude, bad for a fit over z',
    'прямой в плане: 4.12 обязан отказать': 'straight in plan: 4.12 must refuse',
    'Прореживание вершин полос, м (0 - нет)': 'Thinning of band vertices, m (0 - none)',
    'Что построить': 'What to build',
    'карьер с бермами (по умолчанию)': 'a pit with berms (default)',
    'простой уступ': 'a simple bench',
    'отвал': 'a dump',
    'по своему (параметры ниже)': 'my own (the parameters below)',
    'карьер с бермами': 'a pit with berms',
    'есть': 'present',
    'отсутствует': 'absent',
    'Пресет «%s»: уступов %d по %.0f м, шум %.2f м, отвал %s, канава %s. Ручные значения ниже не действуют - для них выберите «по своему».': 'Preset "%s": %d benches of %.0f m, noise %.2f m, dump %s, ditch %s. The manual values below have no effect - choose "my own" for them.',
    'холмистая местность (по умолчанию)': 'hilly country (default)',
    'овражно-балочная сеть': 'a gully and ravine network',
    'площадка работ для объёмов': 'a work pad for volumes',
    'Пресет «холмистая местность»: овражной сети нет. Ручные значения ниже не действуют - для них выберите «по своему».': 'Preset "hilly country": no gully network. The manual values below have no effect - choose "my own" for them.',
    'Пресет «овражно-балочная сеть»: врезы включены, рельеф годится для 2.05 и 2.06. Ручные значения ниже не действуют.': 'Preset "a gully and ravine network": the incisions are on, the terrain suits 2.05 and 2.06. The manual values below have no effect.',
    'Пресет «площадка работ»: ровный рельеф под объёмы. Включите выходы проектной поверхности и участков работ - они нужны для 2.18. Ручные значения ниже не действуют.': 'Preset "a work pad": even terrain for volumes. Switch on the design surface and work area outputs - they are needed for 2.18. The manual values below have no effect.',
    '2.19 Кандидаты бровок и подошв': '2.19 Crest and toe candidates',
    'Кандидаты бровок и подошв': 'Crest and toe candidates',
    'Минимальный перепад (отсечка шума), м': 'Minimum drop (noise cut-off), m',
    'Минимальная длина линии, ячеек': 'Minimum line length, cells',
    'База замера перепада, ячеек': 'Drop probe base, cells',
    'Детектор: ячейка %.2f м, отсечка %.2f м, база %d ячеек.': 'Detector: cell %.2f m, cut-off %.2f m, probe %d cells.',
    'Кандидатов: %d (бровок %d, подошв %d).': 'Candidates: %d (%d crests, %d toes).',
    'Перепад по кандидатам, м: p25=%.2f, p50=%.2f, p75=%.2f, p90=%.2f, максимум %.2f. Отбор значимых - фильтром слоя по полю drop.': 'Drop over the candidates, m: p25=%.2f, p50=%.2f, p75=%.2f, p90=%.2f, maximum %.2f. Select the significant ones with a layer filter over the drop field.',
    'Находит кандидатов структурных линий: места, где уклон меняется быстрее всего. Бровки и подошвы уступов, борта карьеров, кромки насыпей и врезов. Признаком служит градиент уклона, гребни признака утоньшаются и трассируются в ломаные, знак кривизны делит их на бровки и подошвы. Работает на плотной съёмке: шум в сантиметры на метровой ячейке гасится сглаживанием и правилом «излом без перепада не излом».\n\n**Перепад меряется в базе замера**, а не по всей ширине уступа. База по умолчанию 8 ячеек в каждую сторону от линии: на метровой ячейке это ±8 м, чего хватает на карьерный уступ. Если откос шире базы, drop покажет только её часть, и это видно сразу - у десятиметрового уступа при базе в три ячейки перепад прочитается как три метра. Базу задавайте по ширине откоса в ячейках.\n\nИнструмент нарочно отдаёт больше, чем нужно, вместе с числами для отбора. Каждая линия несёт перепад поперёк (drop, м), длину, средний уклон сторон и вид (brow, toe, flat). Слой приходит с раскраской по перепаду: мелочь бледная, крупное яркое. Порог значимости - решение человека: двигайте фильтр слоя по полю drop, глядя на карту, а не пересчитывая. Формального признака бровки не существует, существует перепад, который вы готовы считать уступом.\n\nПроцентили перепада по всем кандидатам печатаются в журнал - готовая подсказка, где резать. Выход: линейный слой в группе Топография.': 'Finds candidate structural lines: the places where the slope changes fastest. Crest and toe lines of benches, pit walls, edges of fills and cuts. The evidence is the gradient of the slope, its ridges are thinned and traced into polylines, and the sign of the curvature splits them into crests and toes. Works on dense surveys: centimetre noise on a metre cell is damped by smoothing and by the rule that a break without a drop is not a break.\n\n**The drop is measured within the probe base**, not across the whole width of the bench. The base is 8 cells to each side of the line by default: on a metre cell that is ±8 m, which covers a quarry bench. If the face is wider than the base, the drop shows only its part, and that is plain to see - on a ten-metre bench with a three-cell base the drop reads as three metres. Set the base by the width of the face in cells.\n\nThe tool deliberately returns more than needed, together with the numbers for the selection. Every line carries the drop across it (m), the length, the mean side slope and the kind (brow, toe, flat). The layer comes coloured by the drop: minor lines pale, major ones bright. The significance threshold is a human decision: move the layer filter over the drop field while watching the map, with no recomputation. A formal definition of a crest does not exist, what exists is the drop you are prepared to call a bench.\n\nThe percentiles of the drop over all candidates are printed to the log - a ready hint where to cut. Output: a line layer in the Topography group.',
    'Демо кладётся в середину заданного охвата: начало %.1f %.1f. Размер берётся из параметров, %dx%d ячеек по %.2f м, а не из охвата: формы карьера физичны и растягивать их нельзя.': 'The demo is placed in the middle of the given extent: origin %.1f %.1f. The size comes from the parameters, %dx%d cells of %.2f m, not from the extent: the shapes of the pit are physical and must not be stretched.',
    'Внимание: охват задан в другой системе координат, и он пересчитан в СК выхода. Если у проекта система местная или неизвестная, пересчёт даст бессмыслицу - выберите в «СК выхода» систему своего проекта.': 'Warning: the extent is given in a different coordinate system and has been reprojected into the output CRS. If the project uses a local or an unknown system, the reprojection gives nonsense - choose your project system in the output CRS.',
    '2.21 Пример карьера (демо)': '2.21 Create a demo open pit',
    'Демо-карьер (рельеф)': 'Demo pit (terrain)',
    'Истинные линии (бровки, подошвы)': 'True lines (crests, toes)',
    'Число уступов': 'Number of benches',
    'Высота уступа, м': 'Bench height, m',
    'Шум съёмки, м': 'Survey noise, m',
    'Отвал': 'Dump',
    'Сходящаяся канава': 'Converging ditch',
    'Демо-карьер: %dx%d ячеек, уступов %d, зерно %d.': 'Demo pit: %dx%d cells, %d benches, seed %d.',
    'Истинных линий: %d. Это эталон для 2.19 и вход для поверхности между линиями.': 'True lines: %d. This is the reference for 2.19 and the input for the surface between lines.',
    '**Что построить** - выбор из трёх готовых наборов: карьер с бермами, простой уступ или отвал. Для первого знакомства берите как есть, менять ничего не нужно. Параметры ниже действуют только при выборе «по своему», а что поставил пресет, печатается в журнал.\n\nСоздаёт демо-карьер: волнистое основание, эллиптический карьер с уступами и бермами, съезд, прорезающий уступы, отвал с плоским верхом и сходящаяся нагорная канава. Всё детерминировано зерном.\n\nГлавная ценность - второй выход, истинные структурные линии с трёхмерными вершинами: бровки, подошвы и тальвег канавы с полем связи пары. На дуге съезда линии уступов разорваны, у канавы три линии сходятся в точку. Пара растр-линии служит эталоном для 2.19 (полнота и точность детектора меряются числом), готовым входом для построения поверхности и учебным примером - и всё это без закрытых данных.\n\n**Охват** только кладёт демо на место и не меняет его размер: формы карьера физичны, уступ 10 м при откосе 7 м, и растягивать их до километров бессмысленно. Размер задают «Ширина» и «Высота» в ячейках. Если у проекта система координат местная или неизвестная, выберите её же в «СК выхода»: пересчёт охвата из неизвестной системы в UTM даёт бессмыслицу, и демо уедет неизвестно куда.\n\nВыходы: GeoTIFF float32 и линейный слой LineStringZ с полями kind (brow, toe, thalweg) и link, в группе Топография.': '**What to build** - a choice of three ready sets: a pit with berms, a simple bench or a dump. For a first acquaintance take it as it is, nothing needs changing. The parameters below take effect only with "my own" chosen, and what the preset set is printed to the log.\n\nCreates a demo open pit: an undulating base, an elliptical pit with benches and berms, a ramp cutting through the benches, a flat-top dump and a converging perimeter ditch. Everything is deterministic by the seed.\n\nThe main value is the second output, the true structural lines with 3D vertices: crests, toes and the ditch thalweg with a pair link field. On the ramp arc the bench lines are honestly broken, and the three ditch lines converge into a point. The raster-lines pair serves as a reference for 2.19 (the completeness and the precision of the detector are measured as numbers), as a ready input for surface building and as a teaching example - all without closed data.\n\n**The extent** only places the demo and does not change its size: the shapes of the pit are physical, a 10 m bench on a 7 m face, and stretching them to kilometres makes no sense. The size is set by the width and the height in cells. If the project uses a local or an unknown coordinate system, choose the same one in the output CRS: reprojecting an extent out of an unknown system into UTM gives nonsense and the demo lands nowhere.\n\nOutputs: a float32 GeoTIFF and a LineStringZ layer with the kind (brow, toe, thalweg) and link fields, in the Topography group.',
    'Обрезка сверху по линии рельефа: профилей %d.': 'Clipping from above by the terrain line: %d profiles.',
    'Сохранять имя исходного слоя': 'Keep the name of the source layer',
    'Сохранять стиль исходного слоя': 'Keep the style of the source layer',
    '%s на разрезе': '%s on the section',
    'точки на разрезе': 'points on the section',
    'вертикали на разрезе': 'verticals on the section',
    'полосы на разрезе': 'bands on the section',
    'Имя и стиль исходного слоя переносятся, только когда подан один слой. Подано слоёв %d, выходы остаются штатными.': 'The name and the style of the source layer are carried over only when a single layer is supplied. %d layers were supplied, so the outputs stay standard.',
    'Стиль исходного слоя не подходит выходу «%s»: другой тип геометрии. Остаётся штатный стиль.': 'The style of the source layer does not fit the "%s" output: a different geometry type. The standard style stays.',
    'Линия низа на чертеже (обрезка снизу)': 'Bottom line on the drawing (clip from below)',
    'Обрезка снизу по линии низа: профилей %d.': 'Clipping from below by the bottom line: %d profiles.',
    'Срезано кромками целиком: объектов %d. Обычно это зоны выше рельефа или ниже линии низа.': 'Cut away entirely by the edges: %d features. Usually these are zones above the terrain or below the bottom line.',
    'Переносить атрибуты объектов на разрез': 'Carry the feature attributes onto the section',
    'Атрибуты объектов переносятся на разрез: колонок %d.': 'Feature attributes are carried onto the section: %d columns.',
    # --- 4.10: справочник пластов демо ---
    'Справочник пластов демо: %d строк под коды интервалов. Подайте его в 4.02, и колонки скважин получат цвет и порядок в легенде. Полосы пластов 4.01 он не красит: там пласт ищется по именам слоёв поверхностей, а поверхности демо кода пласта не несут.': 'Demo bed reference: %d rows matching the interval codes. Feed it into 4.02 and the borehole columns get their colour and legend order. It does not colour the bed bands of 4.01: there a bed is found by the names of the surface layers, and the demo surfaces carry no bed code.',
    'Справочник пластов (демо)': 'Bed reference (demo)',
    # --- 4.01: разрез по одной поверхности ---
    'Поверхность одна: полосы пластов и забор 3D не строятся, слои для них не создаются. Рельеф выходит слоем линий поверхностей.': 'A single surface: bed bands and the 3D fence are not built and no layers are created for them. The terrain comes out as the surface lines layer.',
    'Пластов нет, поэтому чертёж полос и забор 3D пустые и в проект не добавлены. Рельеф смотрите в слое линий поверхностей.': 'There are no beds, so the band drawing and the 3D fence came out empty and were not added to the project. The terrain is in the surface lines layer.',
    'Линии поверхностей на чертеже': 'Surface lines on the drawing',
    'Линии поверхностей': 'Surface lines',
    'Ни одной линии не удалось построить: проверьте, что линия лежит в пределах поверхности.': 'No section could be built: check that the line lies within the surface.',
    'Низ рамки, отметка (пусто: по данным)': 'Frame bottom, elevation (empty: from the data)',
    'Нужна хотя бы одна поверхность.': 'At least one surface is required.',
    'Поверхность одна: пластов нет, построены линия рельефа, рамка, оси и определение разреза. Этого достаточно, чтобы наносить пересечения инструментом 4.05 и рисовать геологию вручную.': 'A single surface: there are no beds, the terrain line, the frame, the axes and the section definition were built. That is enough to plot intersections with tool 4.05 and to draw the geology by hand.',
    # --- 2.10: демо-пара для 2.18 ---
    'Сдвиг отметки площадки, м': 'Pad elevation offset, m',
    'Проектная площадка: отметка %.2f м, область %d на %d ячеек. Отметка равна среднему рельефа внутри области плюс сдвиг %.2f м, при нулевом сдвиге баланс сходится точно. Пара для 2.18 готова: «стало» это площадка, «было» это рельеф.': 'Design pad: elevation %.2f m, area %d by %d cells. The elevation is the mean of the relief inside the area plus an offset of %.2f m, and at a zero offset the balance closes exactly. The pair for 2.18 is ready: the pad is “after”, the relief is “before”.',
    'Доля площади под область работ': 'Fraction of the area used for the works',
    'Проектная поверхность (демо для 2.18)': 'Design surface (demo for 2.18)',
    'Проектная поверхность (демо)': 'Design surface (demo)',
    'Участки работ (демо для 2.18)': 'Work areas (demo for 2.18)',
    'Участки работ (демо)': 'Work areas (demo)',
    'Участок-%d': 'Area-%d',
    'Участки работ: %d, режут область по столбцам.': 'Work areas: %d, cutting the area by columns.',
    # --- 2.18 Насыпи и выемки ---
    'Обрезать растр разности по участкам': 'Clip the difference raster to the work areas',
    'Участки с объёмами (полигоны)': 'Work areas with volumes (polygons)',
    'Участки с объёмами': 'Work areas with volumes',
    'Обрезка запрошена, но участки не заданы: растр разности выдан целиком.': 'Clipping was requested but no work areas were given: the difference raster is output in full.',
    'Растр разности обрезан по участкам. Числа в ведомости посчитаны до обрезки и не изменились.': 'The difference raster was clipped to the work areas. The figures in the statement were computed before clipping and did not change.',
    'баланс': 'balanced',
    'привоз': 'import',
    'вывоз': 'export',
    'нет работ': 'no works',
    'Насыпь %s, выемка %s, нетто %s (в кубах СК).': 'Fill %s, cut %s, net %s (in cubic units of the CRS).',
    'Наибольшая насыпь %s м, наибольшая выемка %s м.': 'Largest fill %s m, largest cut %s m.',
    'Участок %s: насыпь %s, выемка %s, нетто %s.': 'Area %s: fill %s, cut %s, net %s.',
    'площадь насыпи, га': 'fill area, hectares',
    'площадь выемки, га': 'cut area, hectares',
    'площадь без изменений, га': 'unchanged area, hectares',
    'итого': 'total',
    'Считает объёмы земляных работ между двумя поверхностями: что насыпано, что снято и сходится ли баланс.\n\nФормула простая: разность отметок по ячейкам, умноженная на площадь ячейки. Знак принят такой - разность считается «стало минус было», поэтому положительная разность это насыпь, а отрицательная выемка. В ArcGIS знак обратный, при сверке это стоит помнить.\n\nПоверхность сравнения задаётся растром или, если её нет, одной отметкой числом. Отметка удобна для площадки под планировку и для подсчёта от уреза воды.\n\n**Приведение к одной сетке.** Две матрицы почти никогда не лежат на одной сетке. Хозяином сетки берётся первая, вторая приводится билинейно. Ближайший сосед здесь не годится, он возвращает ступени. За краем данных объём не считается, высоты не экстраполируются.\n\n**Почему цифры расходятся с другими программами.** Почти никогда не из-за формулы. Билинейное приведение объём сохраняет, сдвиг сетки сам по себе ничего не меняет. Расхождение даёт состав ячеек: чуть иначе обрезанная рамка, другая маска, полшага на границе участка. Поэтому в журнал печатаются начало сетки, шаг и число ячеек обеих матриц. Сверяйте сначала их, а потом уже объёмы.\n\n**Мёртвая зона** отсекает фон. Две поверхности, полученные разными способами, всегда шумят на сантиметры, и без отсечки весь этот шум попадает то в насыпь, то в выемку и раздувает обе цифры, не меняя нетто. По умолчанию отсечки нет, задавайте её осознанно и указывайте в отчёте.\n\nПолигоны участков считаются отдельно, каждый со своими числами. Поле участка может быть числовым или текстовым. Выход **Участки с объёмами** повторяет эти полигоны с объёмами в атрибутах, чтобы подписать их прямо на карте: ведомость HTML для согласования, атрибуты для оформления.\n\nФлажок **Обрезать растр разности по участкам** гасит разность за контуром работ. За контуром она складывается из шума съёмки, а растянутая на неё цветовая шкала прячет то, ради чего растр и смотрят. На числа обрезка не влияет: статистика считается до неё, и в ведомости остаются оба итога, по всей площади и по участкам.\n\n**Чего инструмент не делает.** Это не САПР. Откосы с заложением, бермы, послойные ведомости и посадку проектной поверхности он не строит. И объём геометрический не равен объёму грунта: разрыхление и уплотнение применяет проектировщик.\n\nЛиния нулевых работ отдельным инструментом не нужна: постройте изолинию нуля по растру разности обычным инструментом изолиний из растра.\n\nВыход: растр разности (метры, положительное это насыпь) и отчёт HTML с числами по участкам и итогом.\n\n': 'Computes earthwork volumes between two surfaces: what was filled, what was removed and whether the balance closes.\n\nThe formula is plain: the difference of elevations per cell times the cell area. The sign convention is “after minus before”, so a positive difference is fill and a negative one is cut. ArcGIS uses the opposite sign, which is worth remembering when cross-checking.\n\nThe reference surface is given either as a raster or, when there is none, as a single elevation. A single elevation is handy for a pad to be graded and for counting from a water line.\n\n**Bringing both to one grid.** Two matrices almost never sit on the same grid. The first one owns the grid, the second is resampled bilinearly. Nearest neighbour will not do here, it brings back steps. Beyond the data no volume is computed, elevations are not extrapolated.\n\n**Why figures differ from other programs.** Almost never because of the formula. Bilinear resampling preserves the volume, and a grid shift on its own changes nothing. The difference comes from which cells took part: a slightly different clip, another mask, half a step at the boundary of a work area. That is why the log prints the origin, the step and the cell count of both matrices. Reconcile those first and the volumes after.\n\n**The dead band** cuts the background off. Two surfaces produced by different means always rustle by centimetres, and without the band all that noise lands in fill or in cut and inflates both figures without changing the net. By default there is no band, set it deliberately and state it in the report.\n\nWork area polygons are counted separately, each with its own figures. The area field may be numeric or text. The **Work areas with volumes** output repeats those polygons with the volumes in the attributes so they can be labelled straight on the map: the HTML statement is for approval, the attributes are for presentation.\n\nThe **Clip the difference raster to the work areas** checkbox blanks the difference outside the outline of the works. Outside it the difference is made of survey noise, and a colour ramp stretched over it hides the very thing the raster is looked at for. Clipping does not affect the figures: the statistics are computed before it, and both totals stay in the statement, over the whole area and per work area.\n\n**What the tool does not do.** This is not a CAD system. It does not build side slopes, benches, layered statements or the fitting of a design surface. And a geometric volume is not a volume of soil: bulking and compaction are applied by the designer.\n\nA separate tool for the line of zero works is not needed: build the zero contour over the difference raster with the ordinary contours-from-raster tool.\n\nOutput: a difference raster (metres, positive is fill) and an HTML report with figures by area and a total.\n\n',
    '2.18 Насыпи и выемки (объёмы работ)': '2.18 Cut and fill (earthwork volumes)',
    'Поверхность «стало» (проектная, новая)': 'Surface “after” (design, new)',
    'Поверхность «было» (исходная)': 'Surface “before” (original)',
    'Канал поверхности «стало»': 'Band of the “after” surface',
    'Канал поверхности «было»': 'Band of the “before” surface',
    'Отметка сравнения, м (если растра «было» нет)': 'Reference elevation, m (when no “before” raster)',
    'Участки работ (полигоны)': 'Work areas (polygons)',
    'Поле названия участка': 'Area name field',
    'Мёртвая зона по высоте, м': 'Dead band in elevation, m',
    'Допуск баланса, доля оборота': 'Balance tolerance, fraction of turnover',
    'Растр разности (насыпь положительна)': 'Difference raster (fill is positive)',
    'Ведомость объёмов (HTML)': 'Earthwork volume report (HTML)',
    'Ведомость объёмов работ': 'Earthwork volume report',
    'Насыпи и выемки': 'Cut and fill',
    'Стало': 'After',
    'Было': 'Before',
    'Не задана поверхность «стало».': 'The “after” surface is not set.',
    'Не удалось открыть растр: %s': 'Could not open the raster: %s',
    '%s: сетка %dx%d, ячейка %.6g на %.6g, начало %.6f %.6f.': '%s: grid %dx%d, cell %.6g by %.6g, origin %.6f %.6f.',
    'Сетки совпадают, приведение не требуется.': 'The grids match, no resampling is needed.',
    'Сетки разные. Поверхность «было» приведена билинейно к сетке поверхности «стало». Объём считается только там, где данные есть у обеих.': 'The grids differ. The “before” surface was resampled bilinearly onto the grid of the “after” surface. Volume is computed only where both have data.',
    'Растр «было» не задан, сравнение с отметкой %.4g м.': 'No “before” raster, comparing against elevation %.4g m.',
    'Площадь ячейки %.6g, ячеек с данными %d, без данных %d.': 'Cell area %.6g, cells with data %d, without data %d.',
    'Мёртвая зона %.4g м: ячейки с меньшим модулем разности считаются неизменными.': 'Dead band %.4g m: cells with a smaller absolute difference count as unchanged.',
    'Баланс сходится в пределах допуска.': 'The balance closes within the tolerance.',
    'Насыпи больше выемки: грунт надо привозить.': 'Fill exceeds cut: soil has to be brought in.',
    'Выемки больше насыпи: грунт надо вывозить.': 'Cut exceeds fill: soil has to be hauled away.',
    'Работ не обнаружено: разности нет.': 'No earthwork found: there is no difference.',
    'В слое участков нет геометрии.': 'The work areas layer has no geometry.',
    'участок %d': 'area %d',
    'По участкам, куб. м': 'By area, cubic metres',
    'участок': 'area',
    'насыпь': 'fill',
    'выемка': 'cut',
    'нетто': 'net',
    'насыпь, куб. м': 'fill, cubic metres',
    'выемка, куб. м': 'cut, cubic metres',
    'нетто, куб. м': 'net, cubic metres',
    'наибольшая насыпь, м': 'largest fill, m',
    'наибольшая выемка, м': 'largest cut, m',
    'мёртвая зона, м': 'dead band, m',
    'начало сетки': 'grid origin',
    'ячейка': 'cell',
    'ячеек с данными': 'cells with data',
    'ячеек без данных': 'cells without data',
    'разность, м (насыпь положительна)': 'difference, m (fill is positive)',
    'Объём геометрический. Разрыхление, уплотнение и послойные грунты здесь не применяются, это работа проектировщика. Расхождение с другой программой сверяйте сначала по описанию сетки выше: почти всегда дело в составе ячеек, а не в формуле.': 'The volume is geometric. Bulking, compaction and layered soils are not applied here, that is the designer\'s work. When figures differ from another program, check the grid description above first: almost always it is the set of cells rather than the formula.',
    'Ð¡ÑÐ¸ÑÐ°ÐµÑ Ð¾Ð±ÑÑÐ¼Ñ Ð·ÐµÐ¼Ð»ÑÐ½ÑÑ ÑÐ°Ð±Ð¾Ñ Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ð¿Ð¾Ð²ÐµÑÑÐ½Ð¾ÑÑÑÐ¼Ð¸: ÑÑÐ¾ Ð½Ð°ÑÑÐ¿Ð°Ð½Ð¾, ÑÑÐ¾ ÑÐ½ÑÑÐ¾ Ð¸ ÑÑÐ¾Ð´Ð¸ÑÑÑ Ð»Ð¸ Ð±Ð°Ð»Ð°Ð½Ñ.\n\nÐ¤Ð¾ÑÐ¼ÑÐ»Ð° Ð¿ÑÐ¾ÑÑÐ°Ñ: ÑÐ°Ð·Ð½Ð¾ÑÑÑ Ð¾ÑÐ¼ÐµÑÐ¾Ðº Ð¿Ð¾ ÑÑÐµÐ¹ÐºÐ°Ð¼, ÑÐ¼Ð½Ð¾Ð¶ÐµÐ½Ð½Ð°Ñ Ð½Ð° Ð¿Ð»Ð¾ÑÐ°Ð´Ñ ÑÑÐµÐ¹ÐºÐ¸. ÐÐ½Ð°Ðº Ð¿ÑÐ¸Ð½ÑÑ ÑÐ°ÐºÐ¾Ð¹ - ÑÐ°Ð·Ð½Ð¾ÑÑÑ ÑÑÐ¸ÑÐ°ÐµÑÑÑ Â«ÑÑÐ°Ð»Ð¾ Ð¼Ð¸Ð½ÑÑ Ð±ÑÐ»Ð¾Â», Ð¿Ð¾ÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑÐµÐ»ÑÐ½Ð°Ñ ÑÐ°Ð·Ð½Ð¾ÑÑÑ ÑÑÐ¾ Ð½Ð°ÑÑÐ¿Ñ, Ð° Ð¾ÑÑÐ¸ÑÐ°ÑÐµÐ»ÑÐ½Ð°Ñ Ð²ÑÐµÐ¼ÐºÐ°. Ð ArcGIS Ð·Ð½Ð°Ðº Ð¾Ð±ÑÐ°ÑÐ½ÑÐ¹, Ð¿ÑÐ¸ ÑÐ²ÐµÑÐºÐµ ÑÑÐ¾ ÑÑÐ¾Ð¸Ñ Ð¿Ð¾Ð¼Ð½Ð¸ÑÑ.\n\nÐÐ¾Ð²ÐµÑÑÐ½Ð¾ÑÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°ÑÑÑÑ ÑÐ°ÑÑÑÐ¾Ð¼ Ð¸Ð»Ð¸, ÐµÑÐ»Ð¸ ÐµÑ Ð½ÐµÑ, Ð¾Ð´Ð½Ð¾Ð¹ Ð¾ÑÐ¼ÐµÑÐºÐ¾Ð¹ ÑÐ¸ÑÐ»Ð¾Ð¼. ÐÑÐ¼ÐµÑÐºÐ° ÑÐ´Ð¾Ð±Ð½Ð° Ð´Ð»Ñ Ð¿Ð»Ð¾ÑÐ°Ð´ÐºÐ¸ Ð¿Ð¾Ð´ Ð¿Ð»Ð°Ð½Ð¸ÑÐ¾Ð²ÐºÑ Ð¸ Ð´Ð»Ñ Ð¿Ð¾Ð´ÑÑÑÑÐ° Ð¾Ñ ÑÑÐµÐ·Ð° Ð²Ð¾Ð´Ñ.\n\n**ÐÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ Ðº Ð¾Ð´Ð½Ð¾Ð¹ ÑÐµÑÐºÐµ.** ÐÐ²Ðµ Ð¼Ð°ÑÑÐ¸ÑÑ Ð¿Ð¾ÑÑÐ¸ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° Ð½Ðµ Ð»ÐµÐ¶Ð°Ñ Ð½Ð° Ð¾Ð´Ð½Ð¾Ð¹ ÑÐµÑÐºÐµ. Ð¥Ð¾Ð·ÑÐ¸Ð½Ð¾Ð¼ ÑÐµÑÐºÐ¸ Ð±ÐµÑÑÑÑÑ Ð¿ÐµÑÐ²Ð°Ñ, Ð²ÑÐ¾ÑÐ°Ñ Ð¿ÑÐ¸Ð²Ð¾Ð´Ð¸ÑÑÑ Ð±Ð¸Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾. ÐÐ»Ð¸Ð¶Ð°Ð¹ÑÐ¸Ð¹ ÑÐ¾ÑÐµÐ´ Ð·Ð´ÐµÑÑ Ð½Ðµ Ð³Ð¾Ð´Ð¸ÑÑÑ, Ð¾Ð½ Ð²Ð¾Ð·Ð²ÑÐ°ÑÐ°ÐµÑ ÑÑÑÐ¿ÐµÐ½Ð¸. ÐÐ° ÐºÑÐ°ÐµÐ¼ Ð´Ð°Ð½Ð½ÑÑ Ð¾Ð±ÑÑÐ¼ Ð½Ðµ ÑÑÐ¸ÑÐ°ÐµÑÑÑ, Ð²ÑÑÐ¾ÑÑ Ð½Ðµ ÑÐºÑÑÑÐ°Ð¿Ð¾Ð»Ð¸ÑÑÑÑÑÑ.\n\n**ÐÐ¾ÑÐµÐ¼Ñ ÑÐ¸ÑÑÑ ÑÐ°ÑÑÐ¾Ð´ÑÑÑÑ Ñ Ð´ÑÑÐ³Ð¸Ð¼Ð¸ Ð¿ÑÐ¾Ð³ÑÐ°Ð¼Ð¼Ð°Ð¼Ð¸.** ÐÐ¾ÑÑÐ¸ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° Ð½Ðµ Ð¸Ð·-Ð·Ð° ÑÐ¾ÑÐ¼ÑÐ»Ñ. ÐÐ¸Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾Ðµ Ð¿ÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ Ð¾Ð±ÑÑÐ¼ ÑÐ¾ÑÑÐ°Ð½ÑÐµÑ, ÑÐ´Ð²Ð¸Ð³ ÑÐµÑÐºÐ¸ ÑÐ°Ð¼ Ð¿Ð¾ ÑÐµÐ±Ðµ Ð½Ð¸ÑÐµÐ³Ð¾ Ð½Ðµ Ð¼ÐµÐ½ÑÐµÑ. Ð Ð°ÑÑÐ¾Ð¶Ð´ÐµÐ½Ð¸Ðµ Ð´Ð°ÑÑ ÑÐ¾ÑÑÐ°Ð² ÑÑÐµÐµÐº: ÑÑÑÑ Ð¸Ð½Ð°ÑÐµ Ð¾Ð±ÑÐµÐ·Ð°Ð½Ð½Ð°Ñ ÑÐ°Ð¼ÐºÐ°, Ð´ÑÑÐ³Ð°Ñ Ð¼Ð°ÑÐºÐ°, Ð¿Ð¾Ð»ÑÐ°Ð³Ð° Ð½Ð° Ð³ÑÐ°Ð½Ð¸ÑÐµ ÑÑÐ°ÑÑÐºÐ°. ÐÐ¾ÑÑÐ¾Ð¼Ñ Ð² Ð¶ÑÑÐ½Ð°Ð» Ð¿ÐµÑÐ°ÑÐ°ÑÑÑÑ Ð½Ð°ÑÐ°Ð»Ð¾ ÑÐµÑÐºÐ¸, ÑÐ°Ð³ Ð¸ ÑÐ¸ÑÐ»Ð¾ ÑÑÐµÐµÐº Ð¾Ð±ÐµÐ¸Ñ Ð¼Ð°ÑÑÐ¸Ñ. Ð¡Ð²ÐµÑÑÐ¹ÑÐµ ÑÐ½Ð°ÑÐ°Ð»Ð° Ð¸Ñ, Ð° Ð¿Ð¾ÑÐ¾Ð¼ ÑÐ¶Ðµ Ð¾Ð±ÑÑÐ¼Ñ.\n\n**ÐÑÑÑÐ²Ð°Ñ Ð·Ð¾Ð½Ð°** Ð¾ÑÑÐµÐºÐ°ÐµÑ ÑÐ¾Ð½. ÐÐ²Ðµ Ð¿Ð¾Ð²ÐµÑÑÐ½Ð¾ÑÑÐ¸, Ð¿Ð¾Ð»ÑÑÐµÐ½Ð½ÑÐµ ÑÐ°Ð·Ð½ÑÐ¼Ð¸ ÑÐ¿Ð¾ÑÐ¾Ð±Ð°Ð¼Ð¸, Ð²ÑÐµÐ³Ð´Ð° ÑÑÐ¼ÑÑ Ð½Ð° ÑÐ°Ð½ÑÐ¸Ð¼ÐµÑÑÑ, Ð¸ Ð±ÐµÐ· Ð¾ÑÑÐµÑÐºÐ¸ Ð²ÐµÑÑ ÑÑÐ¾Ñ ÑÑÐ¼ Ð¿Ð¾Ð¿Ð°Ð´Ð°ÐµÑ ÑÐ¾ Ð² Ð½Ð°ÑÑÐ¿Ñ, ÑÐ¾ Ð² Ð²ÑÐµÐ¼ÐºÑ Ð¸ ÑÐ°Ð·Ð´ÑÐ²Ð°ÐµÑ Ð¾Ð±Ðµ ÑÐ¸ÑÑÑ, Ð½Ðµ Ð¼ÐµÐ½ÑÑ Ð½ÐµÑÑÐ¾. ÐÐ¾ ÑÐ¼Ð¾Ð»ÑÐ°Ð½Ð¸Ñ Ð¾ÑÑÐµÑÐºÐ¸ Ð½ÐµÑ, Ð·Ð°Ð´Ð°Ð²Ð°Ð¹ÑÐµ ÐµÑ Ð¾ÑÐ¾Ð·Ð½Ð°Ð½Ð½Ð¾ Ð¸ ÑÐºÐ°Ð·ÑÐ²Ð°Ð¹ÑÐµ Ð² Ð¾ÑÑÑÑÐµ.\n\nÐÐ¾Ð»Ð¸Ð³Ð¾Ð½Ñ ÑÑÐ°ÑÑÐºÐ¾Ð² ÑÑÐ¸ÑÐ°ÑÑÑÑ Ð¾ÑÐ´ÐµÐ»ÑÐ½Ð¾, ÐºÐ°Ð¶Ð´ÑÐ¹ ÑÐ¾ ÑÐ²Ð¾Ð¸Ð¼Ð¸ ÑÐ¸ÑÐ»Ð°Ð¼Ð¸. ÐÐ¾Ð»Ðµ ÑÑÐ°ÑÑÐºÐ° Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÐ¸ÑÐ»Ð¾Ð²ÑÐ¼ Ð¸Ð»Ð¸ ÑÐµÐºÑÑÐ¾Ð²ÑÐ¼.\n\n**Ð§ÐµÐ³Ð¾ Ð¸Ð½ÑÑÑÑÐ¼ÐµÐ½Ñ Ð½Ðµ Ð´ÐµÐ»Ð°ÐµÑ.** Ð­ÑÐ¾ Ð½Ðµ Ð¡ÐÐÐ . ÐÑÐºÐ¾ÑÑ Ñ Ð·Ð°Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼, Ð±ÐµÑÐ¼Ñ, Ð¿Ð¾ÑÐ»Ð¾Ð¹Ð½ÑÐµ Ð²ÐµÐ´Ð¾Ð¼Ð¾ÑÑÐ¸ Ð¸ Ð¿Ð¾ÑÐ°Ð´ÐºÑ Ð¿ÑÐ¾ÐµÐºÑÐ½Ð¾Ð¹ Ð¿Ð¾Ð²ÐµÑÑÐ½Ð¾ÑÑÐ¸ Ð¾Ð½ Ð½Ðµ ÑÑÑÐ¾Ð¸Ñ. Ð Ð¾Ð±ÑÑÐ¼ Ð³ÐµÐ¾Ð¼ÐµÑÑÐ¸ÑÐµÑÐºÐ¸Ð¹ Ð½Ðµ ÑÐ°Ð²ÐµÐ½ Ð¾Ð±ÑÑÐ¼Ñ Ð³ÑÑÐ½ÑÐ°: ÑÐ°Ð·ÑÑÑÐ»ÐµÐ½Ð¸Ðµ Ð¸ ÑÐ¿Ð»Ð¾ÑÐ½ÐµÐ½Ð¸Ðµ Ð¿ÑÐ¸Ð¼ÐµÐ½ÑÐµÑ Ð¿ÑÐ¾ÐµÐºÑÐ¸ÑÐ¾Ð²ÑÐ¸Ðº.\n\nÐÐ¸Ð½Ð¸Ñ Ð½ÑÐ»ÐµÐ²ÑÑ ÑÐ°Ð±Ð¾Ñ Ð¾ÑÐ´ÐµÐ»ÑÐ½ÑÐ¼ Ð¸Ð½ÑÑÑÑÐ¼ÐµÐ½ÑÐ¾Ð¼ Ð½Ðµ Ð½ÑÐ¶Ð½Ð°: Ð¿Ð¾ÑÑÑÐ¾Ð¹ÑÐµ Ð¸Ð·Ð¾Ð»Ð¸Ð½Ð¸Ñ Ð½ÑÐ»Ñ Ð¿Ð¾ ÑÐ°ÑÑÑÑ ÑÐ°Ð·Ð½Ð¾ÑÑÐ¸ Ð¾Ð±ÑÑÐ½ÑÐ¼ Ð¸Ð½ÑÑÑÑÐ¼ÐµÐ½ÑÐ¾Ð¼ Ð¸Ð·Ð¾Ð»Ð¸Ð½Ð¸Ð¹ Ð¸Ð· ÑÐ°ÑÑÑÐ°.\n\nÐÑÑÐ¾Ð´: ÑÐ°ÑÑÑ ÑÐ°Ð·Ð½Ð¾ÑÑÐ¸ (Ð¼ÐµÑÑÑ, Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑÐµÐ»ÑÐ½Ð¾Ðµ ÑÑÐ¾ Ð½Ð°ÑÑÐ¿Ñ) Ð¸ Ð¾ÑÑÑÑ HTML Ñ ÑÐ¸ÑÐ»Ð°Ð¼Ð¸ Ð¿Ð¾ ÑÑÐ°ÑÑÐºÐ°Ð¼ Ð¸ Ð¸ÑÐ¾Ð³Ð¾Ð¼.\n\n': 'Computes earthwork volumes between two surfaces: what was filled, what was removed and whether the balance closes.\n\nThe formula is plain: the difference of elevations per cell times the cell area. The sign convention is “after minus before”, so a positive difference is fill and a negative one is cut. ArcGIS uses the opposite sign, which is worth remembering when cross-checking.\n\nThe reference surface is given either as a raster or, when there is none, as a single elevation. A single elevation is handy for a pad to be graded and for counting from a water line.\n\n**Bringing both to one grid.** Two matrices almost never sit on the same grid. The first one owns the grid, the second is resampled bilinearly. Nearest neighbour will not do here, it brings back steps. Beyond the data no volume is computed, elevations are not extrapolated.\n\n**Why figures differ from other programs.** Almost never because of the formula. Bilinear resampling preserves the volume, and a grid shift on its own changes nothing. The difference comes from which cells took part: a slightly different clip, another mask, half a step at the boundary of a work area. That is why the log prints the origin, the step and the cell count of both matrices. Reconcile those first and the volumes after.\n\n**The dead band** cuts the background off. Two surfaces produced by different means always rustle by centimetres, and without the band all that noise lands in fill or in cut and inflates both figures without changing the net. By default there is no band, set it deliberately and state it in the report.\n\nWork area polygons are counted separately, each with its own figures. The area field may be numeric or text.\n\n**What the tool does not do.** This is not a CAD system. It does not build side slopes, benches, layered statements or the fitting of a design surface. And a geometric volume is not a volume of soil: bulking and compaction are applied by the designer.\n\nA separate tool for the line of zero works is not needed: build the zero contour over the difference raster with the ordinary contours-from-raster tool.\n\nOutput: a difference raster (metres, positive is fill) and an HTML report with figures by area and a total.\n\n',
    '2.16 Водосбор. Линии и контуры (канавы, карьеры)': '2.16 Catchment of a line or an outline (ditches, open pits)',
    'Площадь водосбора приёмника: нагорной канавы, лотка, кювета дороги или контура карьера. Отвечает на вопрос, какую площадь приёмник перехватывает, когда самого приёмника на ЦМР нет.\n\nВходом служат линии или полигоны. Линия растеризуется в ячейки, все они берутся приёмниками, и водосбор это множество ячеек, чей путь стока приходит в любую ячейку трассы. Полигон считается приёмником целиком, и контур, и вся площадь внутри: внутри залитой депрессии (карьера) направления стока условны, и опора на всю внутренность снимает от них зависимость, дырки полигона входят в приёмник тоже. Трасса может быть ломаной, может пересекать водораздел и может выходить за рамку ЦМР: наружная часть просто не участвует.\n\nВрезка трассы - отдельная галочка и другой вопрос: удержит ли канава поток, если она мельче местных форм рельефа. Врезка опускает рельеф вдоль трассы на заданную глубину и тем самым меняет гидрологию, поэтому результат зависит от глубины и по умолчанию она выключена.\n\nВыход: полигоны водосборов с атрибутами (площадь, высоты, средний уклон, длина трассы или контура, площадь приёмника) и HTML-отчёт. Единицы метрические: ЦМР в метрах в метровой системе координат.\n\nВодосборы строятся по топологии рельефа. На территориях без чётких границ стока - плоские поймы, гидравлические перетоки, подпоры - результат следует проверять гидродинамическим моделированием.': 'The catchment area of an intake: a hillside ditch, a chute, a road gutter or an open pit outline. It answers the question of how much area the intake intercepts when the intake itself is not present on the DEM.\n\nThe input is lines or polygons. A line is rasterised into cells, all of them are taken as seeds, and the catchment is the set of cells whose flow path arrives at any cell of the trace. A polygon is seeded by its whole interior together with the outline: inside a filled depression (an open pit) the flow directions are arbitrary, and seeding by the interior removes the dependence on them, the polygon holes are included in the seed as well. The trace may be a polyline, may cross a divide and may run outside the DEM frame: the outside part simply does not take part.\n\nBurning the trace is a separate checkbox and a different question: will the ditch hold the flow if it is shallower than the local landforms. Burning lowers the relief along the trace by a given depth and thereby changes the hydrology, so the result depends on the depth and it is off by default.\n\nOutput: catchment polygons with attributes (area, elevations, mean slope, trace or outline length, seed area) and an HTML report. Units are metric: a DEM in metres in a metric coordinate system.\n\nCatchments are built from the topology of the relief. On terrain without clear flow boundaries - flat floodplains, hydraulic transfers, backwater - the result should be verified by hydrodynamic modelling.',
    'Трассы и контуры (линии или полигоны)': 'Traces and outlines (lines or polygons)',
    'Все объекты как один водосбор': 'All features as one catchment',
    'Ни один объект не лёг на грид: проверьте охват ЦМР и систему координат слоя трасс и контуров.': 'No feature fell onto the grid: check the DEM extent and the coordinate system of the trace and outline layer.',
    'Объектов принято: %d, ячеек приёмника: %d': 'Features accepted: %d, seed cells: %d',
    'Длина трассы или контура, км': 'Trace or outline length, km',
    'Площадь приёмника, км²': 'Seed area, sq. km',
    'Ячеек приёмника': 'Seed cells',
    'Метод: трасса или контур растеризованы в ячейки затравки, полигон считается приёмником целиком, водосбор собран как множество ячеек, чей путь стока приходит в приёмник. Заполнение понижений, направления D8. Морфометрия без расчётной гидрологии. Водосборы строятся по топологии рельефа, на территориях без чётких границ стока результат следует проверять гидродинамическим моделированием.': 'Method: the trace or the outline is rasterised into seed cells, a polygon is seeded by its whole interior, the catchment is assembled as the set of cells whose flow path arrives at the seed. Depression filling, D8 directions. Morphometry without computational hydrology. Catchments are built from the topology of the relief, on terrain without clear flow boundaries the result should be verified by hydrodynamic modelling.',
    'Площадь водосбора линейного приёмника: нагорной канавы, лотка, кювета дороги. Отвечает на вопрос, какую площадь линия перехватывает, когда самой канавы на ЦМР нет.\n\nВрезать трассу в рельеф для этого не нужно. Трасса растеризуется в ячейки, все они берутся семенами, и водосбор это множество ячеек, чей путь стока приходит в любую ячейку трассы. Трасса может быть ломаной, может пересекать водораздел и может выходить за рамку ЦМР: наружная часть просто не участвует.\n\nВрезка трассы - отдельная галочка и другой вопрос: удержит ли канава поток, если она мельче местных форм рельефа. Врезка опускает рельеф вдоль трассы на заданную глубину и тем самым меняет гидрологию, поэтому результат зависит от глубины и по умолчанию она выключена.\n\nВыход: полигоны водосборов с атрибутами (площадь, высоты, средний уклон, длина трассы) и HTML-отчёт. Единицы метрические: ЦМР в метрах в метровой системе координат.': 'The catchment area of a linear intake: a hillside ditch, a chute, a road gutter. It answers the question of how much area the line intercepts when the ditch itself is not present on the DEM.\n\nBurning the trace into the relief is not needed for that. The trace is rasterised into cells, all of them are taken as seeds, and the catchment is the set of cells whose flow path arrives at any cell of the trace. The trace may be a polyline, may cross a divide and may run outside the DEM frame: the outside part simply does not take part.\n\nBurning the trace is a separate checkbox and a different question: will the ditch hold the flow if it is shallower than the local landforms. Burning lowers the relief along the trace by a given depth and thereby changes the hydrology, so the result depends on the depth and it is off by default.\n\nOutput: catchment polygons with attributes (area, elevations, mean slope, trace length) and an HTML report. Units are metric: a DEM in metres in a metric coordinate system.',
    'Трассы (линии канав, лотков, кюветов)': 'Traces (ditch, chute or gutter lines)',
    'Все трассы как один водосбор': 'All traces as one catchment',
    'Врезать трассу в рельеф (меняет гидрологию)': 'Burn the trace into the relief (changes the hydrology)',
    'Глубина врезки, м': 'Burn depth, m',
    'Водосборы трасс (полигоны)': 'Trace catchments (polygons)',
    'Отчёт по трассам (HTML)': 'Trace report (HTML)',
    'Нужен слой трасс.': 'A trace layer is needed.',
    'Ни одна трасса не легла на грид: проверьте охват ЦМР и систему координат слоя линий.': 'No trace fell onto the grid: check the DEM extent and the CRS of the line layer.',
    'Трасс принято: %d, ячеек трассы: %d': 'Traces accepted: %d, trace cells: %d',
    'Трасса врезана на %.2f м: гидрология изменена намеренно, результат зависит от глубины.': 'The trace is burned by %.2f m: the hydrology is changed deliberately, the result depends on the depth.',
    'Трасса %d:': 'Trace %d:',
    'Трасса %d': 'Trace %d',
    'Отчёт по водосборам трасс': 'Trace catchment report',
    'Площадь водосбора, км²': 'Catchment area, sq. km',
    'Средний уклон водосбора, °': 'Mean catchment slope, deg',
    'Длина трассы, км': 'Trace length, km',
    'Ячеек трассы': 'Trace cells',
    'Ячеек в водосборе': 'Cells in the catchment',
    'Метод: трасса растеризована в ячейки, водосбор собран как множество ячеек, чей путь стока приходит в трассу. Заполнение понижений, направления D8. Морфометрия без расчётной гидрологии.': 'Method: the trace is rasterised into cells, the catchment is collected as the set of cells whose flow path arrives at the trace. Depression filling, D8 directions. Morphometry without computational hydrology.',
    'Трасса врезана в рельеф на %.2f м, гидрология изменена намеренно.': 'The trace is burned into the relief by %.2f m, the hydrology is changed deliberately.',
    'Водосбор: %s км², высоты %s...%s м, средняя %s м.': 'Catchment: %s sq. km, elevations %s...%s m, mean %s m.',
    'Трасса: %s км, ячеек трассы %s, ячеек водосбора %s.': 'Trace: %s km, trace cells %s, catchment cells %s.',
    'без кода: %d': 'without a code: %d',
    'с нечитаемым цветом: %d': 'with an unreadable colour: %d',
    'повторов кода (взят первый): %d': 'duplicate codes (first kept): %d',
    'Охват не задан, демо кладётся к слоям проекта: начало %.1f %.1f.': 'No extent given, the demo is placed next to the project layers: origin %.1f %.1f.',
    'Охват не задан и проект пуст, демо кладётся в условное место %.0f %.0f. В местной системе координат задайте охват, иначе рельеф окажется далеко от ваших данных.': 'No extent given and the project is empty, the demo is placed at the conventional spot %.0f %.0f. In a local coordinate system set the extent, otherwise the relief will land far from your data.',
    'Демо-створы: %d, возле тальвегов со сдвигом в сторону (притяжка 2.15 вернёт их на водоток).': 'Demo gauges: %d, near the thalwegs and shifted aside (the 2.15 snapping will bring them back to the stream).',
    'Метод: заполнение понижений, направления D8, притяжка створа к наибольшей аккумуляции, главный водоток вверх по наибольшей аккумуляции до истока. Морфометрия без расчётной гидрологии.': 'Method: depression filling, D8 directions, gauge snapping to the highest accumulation, main stream traced upstream by highest accumulation to the source. Morphometry without computational hydrology.',
    'Площадь бассейна, км²': 'Basin area, sq. km',
    'Средняя высота, м': 'Mean elevation, m',
    'Минимальная высота, м': 'Minimum elevation, m',
    'Максимальная высота, м': 'Maximum elevation, m',
    'Средний уклон бассейна, °': 'Mean basin slope, deg',
    'Отметка створа, м': 'Gauge elevation, m',
    'Длина главного водотока, км': 'Main stream length, km',
    'Падение водотока, м': 'Stream fall, m',
    'Средний уклон водотока, промилле': 'Mean stream slope, permille',
    'Ячеек в бассейне': 'Cells in the basin',
    'Бассейн: %s км², высоты %s...%s м, средняя %s м.': 'Basin: %s sq. km, elevations %s...%s m, mean %s m.',
    'Водоток: %s км, падение %s м, уклон %s промилле, отметка створа %s м.': 'Stream: %s km, fall %s m, slope %s permille, gauge elevation %s m.',
    'Кладёт скважины на чертежи разрезов из пары слоёв модели бурения: устья collar (hole_id, z, eoh, точки) и таблица интервалов interval (hole_id, from, to, code, глубины по стволу от устья). Такую пару выдают «Пример для разреза» и выгрузка из Геоконструктора. Поля обеих таблиц находятся сами по ожидаемым именам, выбор полей спрятан в дополнительные параметры.\n\nЛинии, вертикальный масштаб и раскладка берутся из определения разреза, которое выдаёт «Разрез по линии»: один прогон кладёт колонки сразу на все чертежи, каждая скважина попадает на все разрезы, к которым она ближе коридора. Глубины переводятся в отметки вычитанием из z.\n\nЧитатель терпимый: пустые глубины пропускаются, перепутанные from и to меняются местами, перехлёсты и интервалы за забоем рисуются как есть, всё пропущенное считается и выводится сводкой в журнал. Прочие колонки таблицы интервалов едут в атрибуты как есть.\n\nПодпись устья берётся из поля number (или name, label), а без него из hole_id. Поле можно указать в дополнительных параметрах.\n\nПо умолчанию колонки обрезаются рамкой чертежа zmin и zmax из определения: интервал на кромке подрезается, интервал целиком за рамкой пропускается, ствол и подпись зажимаются рамкой. Допуск в дополнительных параметрах расширяет рамку, галочка выключает обрезку совсем. В атрибутах ztop и zbot остаются настоящие отметки интервала, обрезается только геометрия.\n\nЧертёж разреза - необязательный вход с полигонами полос из 4.01: колонки режутся по верхней и нижней огибающей полос в своей позиции, скважины не вылезают за чертёж. Колонка за краем полос этим входом не режется, там работает рамка.\n\nЦвет интервала берётся из справочника пластов (слоя проекта) по коду пласта. Тот же справочник подаётся в 4.01, поэтому колонки скважин и полосы пластов совпадают по цвету, а порядок категорий в легенде идёт по залеганию. Коды вне справочника сохраняют свой детерминированный цвет. Без справочника всё работает как раньше.\n\nПодписи содержаний вешаются на слой **Якоря подписей интервалов**: точка посередине каждого интервала со всеми его атрибутами. На тонких полосах интервалов движок подписей размещает текст плохо и на густой сети всё слипается, на точках размещение штатное. Составная подпись собирается обычным выражением по полям интервала.': 'Places boreholes onto section drawings from a drilling-model pair: collars (hole_id, z, end of hole) and the interval table (hole_id, from, to, code). Every borehole lands on every drawing of the definition, depths become elevations, the interval columns go into the attributes as is.\n\nThe collar label comes from the number field (or name, label), and without it from hole_id. The field can be set in the advanced parameters.\n\nBy default the columns are clipped by the drawing frame zmin and zmax from the definition: an interval on the edge is trimmed, an interval entirely beyond the frame is skipped, the trace and the label are clamped by the frame. The tolerance in the advanced parameters widens the frame, the checkbox turns clipping off. The ztop and zbot attributes keep the true interval elevations, only the geometry is clipped.\n\nThe section drawing is an optional input with the band polygons from 4.01: the columns are cut by the upper and lower envelope of the bands at their own position, so boreholes do not stick out of the drawing. A column beyond the bands is not cut by this input, the frame works there.\n\nThe interval colour comes from the bed reference (a project layer) by the bed code. The same reference goes into 4.01, so the borehole columns and the bed bands match in colour, and the order of the legend categories follows the bedding. Codes outside the reference keep their own deterministic colour. Without a reference everything works as before.\n\nLabels of grades are attached to the **Label anchors of intervals** layer: a point in the middle of every interval with all of its attributes. On thin interval bands the labelling engine places text poorly and on a dense network everything sticks together, on points the placement is regular. A composite label is assembled by an ordinary expression over the interval fields.',
    'Ни одна скважина не попала в коридор ни одного разреза.': 'No borehole fell within the corridor of any section.',
    'Размер ячейки (0 = авто, min(охват)/50)': 'Cell size (0 = auto, min(extent)/50)',
    '1.1 2D Kriging (точки → растр)': '1.1 2D Kriging (points → raster)',
    '1.2 Изолинии из растра': '1.2 Isolines from raster',
    '1.5 Кросс-валидация вариограммы': '1.5 Variogram cross-validation',
    'Грид и изолинии': 'Grid and isolines',
    'Дополнительные инструменты': 'Additional tools',
    '1.7 Создать пример скважин (демо)': '1.7 Create sample wells (demo)',
    '1.3 Вариограмма (экспериментальная)': '1.3 Variogram (experimental)',
    '1.6 Профили обработки': '1.6 Processing profiles',
    '1.4 Вариограммная карта (анизотропия)': '1.4 Variogram map (anisotropy)',
    'Тип кригинга': 'Kriging type',
    'Радиус поиска (0 = вся выборка)': 'Search radius (0 = whole sample)',
    'Мин. количество точек': 'Min. number of points',
    'Макс. количество точек': 'Max. number of points',
    'Охват растра (по умолчанию - по слою)': 'Raster extent (default - by layer)',
    'Обрезать по контуру скважин (выпуклая оболочка)': 'Clip to well hull (convex hull)',
    'Буфер оболочки, ед. карты': 'Hull buffer, map units',
    'Маска обрезки (полигон из проекта) - приоритетнее оболочки': 'Clip mask (polygon from project) - takes priority over the hull',
    'Структура %d': 'Structure %d',
    'порог/вклад C': 'sill/contribution C',
    'порог/вклад C (0 = выкл.)': 'sill/contribution C (0 = off)',
    'Шаг изолиний (0 = задать уровни ниже)': 'Isoline step (0 = set levels below)',
    'Начальный уровень (offset)': 'Base level (offset)',
    'Явные уровни (через пробел) - приоритетнее шага': 'Explicit levels (space-separated) - take priority over step',
    'Главная изолиния каждая N-я (0 = выкл.)': 'Index isoline every N-th (0 = off)',
    'Мин. длина линии, ед. карты (0 = без фильтра)': 'Min. line length, map units (0 = no filter)',
    'Бикубическое сглаживание изолиний (сгущение грида)': 'Bicubic isoline smoothing (grid densification)',
    'Скругление линий (Chaikin), итераций (0 = выкл.)': 'Line rounding (Chaikin), iterations (0 = off)',
    'Имя поля значения': 'Value field name',
    'Стандартная ошибка кригинга': 'Kriging standard error',
    'Необязательный растр стандартной ошибки кригинга (sqrt дисперсии ошибки): мера неопределённости оценки. Мала у скважин, растёт вдали от данных.': 'Optional kriging standard-error raster (sqrt of error variance): a measure of estimate uncertainty. Small near wells, grows away from data.',
    'Скользящий контроль (leave-one-out): каждая скважина по очереди исключается, её значение предсказывается кригингом по остальным, и сравнивается с фактическим. Помогает подобрать вариограмму (наггет, радиус, модель) по ошибке, а не на глаз.\n\nВ Журнал выводятся метрики: ME (смещение, к 0), RMSE (меньше - лучше), MSDR (к 1 - вариограмма адекватна по масштабу), R. Перебирайте параметры и сравнивайте RMSE и MSDR.\n\nСлой остатков (опц.) - точки со следующими полями:\n  • <номер скважины> - если задано «Поле номера скважины»;\n  • <имя проверяемого поля> - фактическое значение (факт);\n  • z_est - оценка кригинга по остальным точкам (LOO);\n  • error - оценка минус факт (минус: занижено, плюс: завышено);\n  • abs_error - модуль ошибки;\n  • std_resid - стандартизованный остаток: error / стандартную ошибку кригинга, со знаком (это не дисперсия).\nПо нему видно, где модель промахивается.\n\nHTML-отчёт (по умолчанию) открывается в просмотрщике результатов: интерактивный график «оценка vs факт», гистограмма ошибок и таблица метрик.': 'Leave-one-out cross-validation: each well is removed in turn, its value is predicted by kriging from the rest, and compared with the actual value. Helps tune the variogram (nugget, range, model) by error rather than by eye.\n\nThe Log reports metrics: ME (bias, → 0), RMSE (lower is better), MSDR (→ 1 means the variogram is adequate in scale), R. Try different parameters and compare RMSE and MSDR.\n\nResiduals layer (opt.) - points with the following fields:\n  • <well number> - if "Well number field" is set;\n  • <validated field name> - the actual value;\n  • z_est - kriging estimate from the other points (LOO);\n  • error - estimate minus actual (minus: under, plus: over);\n  • abs_error - absolute error;\n  • std_resid - standardized residual: error / kriging standard error, signed (not a variance).\nIt shows where the model misses.\n\nThe HTML report (default) opens in the result viewer: an interactive "estimate vs actual" plot, an error histogram and a metrics table.',
    'Создаёт точечный слой «скважин» со случайными координатами в пределах области и значением абстрактного компонента (X, %), имеющим пространственную структуру. Предназначен для обучения и проверки инструментов без реальных данных.\n\nОбласть задаётся экстентом (можно по слою, по холсту карты, вручную координатами или рисованием). «Гладкость» задаёт радиус корреляции как долю охвата (больше - крупнее «пятна»). «Доля наггета» задаёт долю дисперсии, приходящуюся на короткомасштабный шум (чем больше, тем меньше предсказуемость). В Журнал выводится стартовая вариограмма - её уточняют кросс-валидацией.\n\nПоля результата: номер скважины, абсолютная отметка кровли (roof), мощность (thick) и содержание X. Диапазоны кровли и мощности по умолчанию близки к реальным калийным данным; их можно изменить в разделе «Дополнительно».\n\nНеобязательные галки добавляют поля для смежных инструментов: напор (head) для градиента потока и категориальный минтип для индикаторного кригинга. Галка K и T добавляет напор и лог-нормальные поля K (коэф. фильтрации) и T = K·мощность для «Удельного расхода (Дарси)». Включённый вывод «Поверхность дрейфа» даёт растр сторонней поверхности и поле dz, линейно с ней связанное, для кригинга с внешним дрейфом.': 'Creates a point "wells" layer with random coordinates within an area and a value of an abstract component (X, %), with a spatial structure. Intended for learning and testing the tools without real data.\n\nThe area is set by an extent (by layer, by map canvas, manually by coordinates or by drawing). "Smoothness" sets the correlation range as a fraction of the extent (larger - bigger "patches"). "Nugget fraction" sets the share of variance due to short-range noise (larger - less predictable). The Log prints the starting variogram - refine it with cross-validation.\n\nResult fields: well number, absolute roof elevation (roof), thickness (thick) and grade X. The default roof and thickness ranges are close to real potash data; you can change them under "Advanced".\n\nOptional checkboxes add fields for the neighbouring tools: head for the flow gradient and a categorical mineral type for indicator kriging. The K and T checkbox adds head and log-normal K (conductivity) and T = K·thickness fields for the \'Specific discharge (Darcy law)\' tool. Enabling the "Drift surface" output gives a raster of a secondary surface and a dz field linearly related to it, for external drift kriging.',
    'Доля наггета (от дисперсии)': 'Nugget fraction (of variance)',
    'Зерно ГСЧ (0 = случайно)': 'RNG seed (0 = random)',
    'Строит изотропную экспериментальную полувариограмму по точкам: облако пар усредняется по интервалам расстояния (лагам). Помогает увидеть структуру данных и подобрать вариограмму глазом, а не угадывать наггет/радиус.\n\nПоле группировки (необязательно): для каждого значения поля строится своя кривая - удобно сравнить совокупности разной плотности (поверхностная и подземная разведка) и проверить, общая ли у них структура.\n\nПодбор модели (по умолчанию) даёт наггет C0, вклад C, радиус a и модель. Сохраните их в профиль (поле «Сохранить профиль под именем») и подставьте в «2D Kriging». Можно наложить уже заданную модель, чтобы сравнить её с облаком.\n\nHTML-отчёт открывается в просмотрщике результатов: точки по лагам, модель и подобранная кривая, линия дисперсии данных. Слой-таблица (опц.) содержит лаг, γ(h) и количество пар для построения в QGIS.': 'Builds an isotropic experimental semivariogram from points: the pair cloud is averaged over distance intervals (lags). Helps reveal the structure of the data and set the variogram by eye, instead of guessing the nugget/range.\n\nGrouping field (optional): a separate curve is built for each field value - handy to compare populations of different density (surface vs underground survey) and check whether they share a structure.\n\nModel fitting (default) gives nugget C0, contribution C, range a and the model. Save them to a profile (the "Save profile as" field) and apply them in "2D Kriging". You can overlay an already-set model to compare it with the cloud.\n\nThe HTML report opens in the result viewer: points by lag, the model and the fitted curve, the data-variance line. The table layer (opt.) holds lag, γ(h) and the number of pairs for plotting in QGIS.',
    'Управление профилями обработки. Профиль - это именованный набор «вариограмма (Структура 1: наггет, тип, порог, радиус, азимут, оси) + отсев ураганных проб». Профили сохраняют «Вариограмма» и «Кросс-валидация», а подставляет «2D Kriging».\n\nДействие: Показать список (в Журнал), Сохранить вручную (по полям в «Дополнительно»), Удалить выбранный, Очистить все.\n\nСписки профилей в выпадающих полях обновляются при открытии окна: сохранили профиль - переоткройте инструмент, чтобы он появился.': 'Manage processing profiles. A profile is a named set of "variogram (Structure 1: nugget, type, sill, range, azimuth, axes) + outlier removal". Profiles are saved by "Variogram" and "Cross-validation", and applied by "2D Kriging".\n\nAction: Show list (to the Log), Save manually (from the fields under "Advanced"), Delete selected, Clear all.\n\nProfile drop-down lists refresh when the window opens: after saving a profile, reopen the tool so it appears.',
    'Среднее для простого кригинга': 'Mean for simple kriging',
    'Наггет C0': 'Nugget C0',
    'Ураганные пробы: перцентиль обрезки, % (0 = выкл.)': 'Outliers: clip percentile, % (0 = off)',
    'Нижняя граница значения (пусто = нет)': 'Lower value bound (empty = none)',
    'Верхняя граница значения (пусто = нет)': 'Upper value bound (empty = none)',
    'Срезать к границе (capping) вместо удаления': 'Cap to bound (capping) instead of removing',
    '**Разломы** подаются линиями и работают барьерами влияния: замер, отрезок до которого пересекает линию, в выборку ячейки не идёт.\nПоверхность вдоль разлома рвётся, изолинии по такому гриду рвутся\nсами. Линия не обязана рассекать площадь: у затухающего разлома\nвлияние огибает его конец, и поверхность там смыкается.\n\nПриближение названо прямо: по видимости отбираются только соседи, а\nковариации между самими замерами остаются евклидовыми. Занулять их\nнельзя, система потеряет положительную определённость, и кригинг\nразвалится. Так устроены разломы во всех известных пакетах.\n\nОрдинарный/простой кригинг 2D по точечному слою (ядро GSLIB KB2D). Вариограмма: наггет + структура (сферическая, экспоненциальная, гауссова или степенная) с азимутом и анизотропией. Подходит для отметок пласта, мощностей, ФМС, химии и любых числовых атрибутов.\n\nРадиус поиска 0 = по всей выборке; размер ячейки 0 = min(охват)/50; радиус корреляции 0 = max(охват)/3. Опция обрезки убирает экстраполяцию вне контура скважин.': '**Faults** are supplied as lines and work as barriers of influence: a measurement whose segment crosses the line does not enter the sample of the cell. The surface breaks along the fault, and isolines over such a grid break by themselves. The line need not cut across the area: for a dying fault the influence goes round its end, and the surface closes up there.\n\nThe approximation is named plainly: only the neighbours are selected by visibility, while the covariances between the measurements themselves stay Euclidean. Zeroing them is not allowed, the system would lose positive definiteness and the kriging would fall apart. This is how faults are arranged in every known package.\n\nOrdinary/simple 2D kriging over a point layer (GSLIB KB2D core). Variogram: nugget + structure (spherical, exponential, Gaussian or power) with azimuth and anisotropy. Suitable for roof elevations, thicknesses, geomechanical properties, chemistry and any numeric attribute.\n\nSearch radius 0 = whole sample; cell size 0 = min(extent)/50; correlation range 0 = max(extent)/3. The clip option removes extrapolation outside the well hull.',
    'Точечный слой': 'Point layer',
    'Поле значения (Z)': 'Value field (Z)',
    'Сгладить грид (Гаусс)': 'Smooth grid (Gaussian)',
    'Радиус сглаживания, ячеек': 'Smoothing radius, cells',
    'Снять полиномиальный тренд': 'Remove polynomial trend',
    'Степень тренда': 'Trend degree',
    '1 (плоскость)': '1 (plane)',
    '2 (квадратичная)': '2 (quadratic)',
    'Региональный тренд снимается МНК перед кригингом, кригуются остатки, тренд возвращается к оценке. Полезно для отметок пласта и мощностей с общим падением. Для химии без тренда эффекта почти нет. Степень 1 обычно достаточна, степень 2 может вобрать часть реальной структуры в тренд - следите за вариограммой остатков.': 'The regional trend is removed by least squares before kriging, the residuals are kriged, and the trend is added back to the estimate. Useful for seam marks and thicknesses with a general dip. For chemistry without a trend the effect is negligible. Degree 1 is usually enough, degree 2 can absorb part of the real structure into the trend, so watch the residual variogram.',
    'Снятие тренда отключено: точек %d, для степени %d нужно больше %d.': 'Detrending off: %d points, degree %d needs more than %d.',
    'Снят тренд степени %d: убрано %.1f%% дисперсии (s данных %.4g, s остатка %.4g). Вариограмму задавайте по остаткам, стандартная ошибка - это ошибка кригинга остатков.': 'Trend of degree %d removed: %.1f%% of variance taken out (data s %.4g, residual s %.4g). Fit the variogram on the residuals, the standard error here is the kriging error of the residuals.',
    'Снят тренд степени %d: убрано %.1f%% дисперсии. Тренд переподбирается на каждом шаге LOO по остальным точкам, вариограмму задавайте по остаткам.': 'Trend of degree %d removed: %.1f%% of variance taken out. The trend is refit at each LOO step on the remaining points, fit the variogram on the residuals.',
    'Блочный кригинг': 'Block kriging',
    'Дискретизация блока, N×N на ячейку': 'Block discretization, N×N per cell',
    'Оценивает СРЕДНЕЕ по ячейке грида, а не значение в её центре: каждая ячейка разбивается на N×N точек дискретизации, ковариации усредняются по блоку. Поверхность глаже, стандартная ошибка ниже точечной - подходит для оценки запасов и содержаний по блоку. Пробы при этом не воспроизводятся точно (среднее блока ≠ значение в точке). Выключено - обычный точечный кригинг.': 'Estimates the AVERAGE over the grid cell rather than the value at its centre: each cell is split into N×N discretization points and the covariances are averaged over the block. The surface is smoother and the standard error is lower than for point kriging - suitable for estimating reserves and grades over a block. Samples are then not reproduced exactly (the block average ≠ the value at a point). Off - ordinary point kriging.',
    'Сколько точек на сторону ячейки берётся для усреднения по блоку (всего N×N). 4×4 достаточно почти всегда; больше - точнее, но медленнее. Действует только при включённом блочном кригинге.': 'How many points per cell side are used to average over the block (N×N in total). 4×4 is almost always enough; more is more accurate but slower. Active only when block kriging is on.',
    'Блочный кригинг: дискретизация %d×%d на ячейку. Оценка - среднее по блоку, стандартная ошибка блочная (ниже точечной). Значения в узлах-пробах точно не воспроизводятся.': 'Block kriging: %d×%d discretization per cell. The estimate is the block average, the standard error is the block error (lower than point). Values at sample nodes are not reproduced exactly.',
    '3.03 Гидравлический градиент и направление потока': '3.03 Hydraulic gradient and flow direction',
    'Добавить поле напора (для градиента потока)': 'Add a head field (for flow gradient)',
    'Поле напора (head): региональный уклон + локальная вариация. Кригуйте head, затем подайте растр в «Гидравлический градиент и направление потока».': 'Head field (head): a regional slope plus local variation. Krige head, then feed the raster to "Hydraulic gradient and flow direction".',
    'Растр напора': 'Head raster',
    'Гидравлический градиент (модуль)': 'Hydraulic gradient (magnitude)',
    'Направление потока (азимут)': 'Flow direction (azimuth)',
    'Векторы потока (точки)': 'Flow vectors (points)',
    'Сглаживание напора перед расчётом, ячеек (0 = без)': 'Smooth head before computing, cells (0 = none)',
    'Векторы потока: шаг прореживания, ячеек': 'Flow vectors: thinning step, cells',
    'Не задан растр напора.': 'No head raster set.',
    'Не удалось открыть растр напора.': 'Could not open the head raster.',
    'В растре напора нет данных.': 'The head raster has no data.',
    'Растр напора %d x %d, ячейка %.4g x %.4g.': 'Head raster %d x %d, cell %.4g x %.4g.',
    'Сглаживание напора (σ=%g яч.)…': 'Smoothing the head (σ=%g cells)…',
    'Гидравлический градиент · %s': 'Hydraulic gradient · %s',
    'Направление потока · %s': 'Flow direction · %s',
    'Векторы потока · %s': 'Flow vectors · %s',
    'Векторов потока: %d (шаг %d яч.). Слой оформлен стрелками автоматически: поворот по полю «az», размер по «grad». Символику можно поменять в свойствах слоя.': 'Flow vectors: %d (step %d cells). The layer is styled as arrows automatically: rotation by the "az" field, size by "grad". You can change the symbology in the layer properties.',
    'По растру напора (пьезометрической поверхности) строит гидравлический градиент и направление потока. Вход - растр напора, например результат «2D Kriging» по уровням в скважинах.\n\nВыходы: растр модуля градиента |∇h| (безразмерный, м/м), растр азимута направления потока (компасный, 0 = север, вниз по градиенту) и точечный слой векторов потока для оформления стрелками (поля az - азимут, grad - градиент).\n\nЭто геометрия поля напора, без проницаемости: скорость фильтрации по Дарси (v = −K·∇h) требует коэффициента фильтрации K и здесь не считается. Изолинии напора стройте инструментом «Изолинии из растра».\n\nГрадиент усиливает шум грида - при пятнистом результате включите сглаживание (радиус в ячейках) или сгладьте напор в «2D Kriging».': 'From a head raster (the piezometric surface) builds the hydraulic gradient and the flow direction. The input is a head raster, for example the result of "2D Kriging" on borehole water levels.\n\nOutputs: a gradient-magnitude raster |∇h| (dimensionless, m/m), a flow-direction azimuth raster (compass, 0 = north, down-gradient) and a point layer of flow vectors to style with arrows (fields az - azimuth, grad - gradient).\n\nThis is the geometry of the head field, without permeability: the Darcy flow velocity (v = −K·∇h) needs the hydraulic conductivity K and is not computed here. Build head isolines with the "Isolines from raster" tool.\n\nThe gradient amplifies grid noise - if the result is patchy, turn on smoothing (radius in cells) or smooth the head in "2D Kriging".',
    'Растр кригинга': 'Kriging raster',
    'Строит изолинии из растра: равномерный шаг или явные уровни (через пробел), главные (утолщённые) изолинии флагом is_index, фильтр коротких линий.\n\nСкругление линий (Chaikin) слегка сглаживает контуры и убирает «октагоны» от грубого грида. Сглаживание самого поля выполняется в инструменте 2D Kriging.\n\nБикубическое сглаживание (сгущение грида ×2…×4) даёт гладкие изолинии без «октагонов» от грубой сетки - это основной способ сглаживания, сильнее скругления линий (Chaikin). Работает и для линий, и для контурных полигонов: границы поясов совпадают с изолиниями.\n\nПо умолчанию строит и контурные полигоны (пояса между изолиниями) во временный слой - их границы СОВПАДАЮТ с изолиниями, покрытие сплошное. Чтобы их не строить - очистите поле «Контурные полигоны».\n\nПоля: линии - значение уровня (по умолчанию ELEV) и is_index (1 у главных); полигоны - ELEV_MIN/ELEV_MAX (диапазон пояса).': 'Builds isolines from a raster: a uniform step or explicit levels (space-separated), index (thicker) isolines via the is_index flag, a short-line filter.\n\nLine rounding (Chaikin) lightly smooths the contours and removes "octagons" from a coarse grid. Smoothing of the field itself is done in the 2D Kriging tool.\n\nBicubic smoothing (grid densification ×2…×4) gives smooth isolines without "octagons" from a coarse grid - it is the main smoothing method, stronger than line rounding (Chaikin). It works for both lines and contour polygons: band boundaries coincide with the isolines.\n\nBy default it also builds contour polygons (bands between isolines) into a temporary layer - their boundaries COINCIDE with the isolines, coverage is continuous. To skip them - clear the "Contour polygons" field.\n\nFields: lines - the level value (default ELEV) and is_index (1 on index lines); polygons - ELEV_MIN/ELEV_MAX (band range).',
    'Растр': 'Raster',
    'Записать значение в Z геометрии (для DXF, АвтоКАД, Кредо)': 'Write the value into the geometry Z (for DXF, AutoCAD, Credo)',
    'Изолинии (линии)': 'Isolines (lines)',
    'Контурные полигоны': 'Contour polygons',
    'Не задан растр.': 'No raster specified.',
    'Точки со значениями': 'Points with values',
    'Поле значения Z': 'Z value field',
    'Поле номера скважины': 'Well number field',
    'Сохранить профиль под именем (пусто = не сохранять)': 'Save profile as (empty = do not save)',
    'Слой остатков (точки)': 'Residuals layer (points)',
    'Отчёт о кросс-валидации (HTML)': 'Cross-validation report (HTML)',
    'HTML files (*.html)': 'HTML files (*.html)',
    'Область (экстент)': 'Area (extent)',
    'Количество скважин': 'Number of wells',
    'Минимум значения X': 'Minimum of value X',
    'Максимум значения X': 'Maximum of value X',
    'Гладкость (доля охвата)': 'Smoothness (fraction of extent)',
    'Скважины (демо)': 'Wells (demo)',
    'Модель: наггет C0': 'Model: nugget C0',
    'Поле группировки (напр. вид разведки)': 'Grouping field (optional, e.g. survey type)',
    'Количество лагов': 'Number of lags',
    'Максимальное расстояние, в единицах слоя (0 = пол-диагонали)': 'Maximum distance, in layer units (0 = half-diagonal)',
    'Подобрать модель (рекомендация)': 'Fit model (recommendation)',
    'Таблица вариограммы (лаг, γ, количество пар)': 'Variogram table (lag, γ, number of pairs)',
    'Отчёт (HTML)': 'Report (HTML)',
    'Действие': 'Action',
    'Имя профиля (для «Сохранить вручную»)': 'Profile name (for "Save manually")',
    'Строит вариограммную карту - поверхность γ(h_x, h_y): для всех пар берётся вектор разноса (dx, dy) и полудисперсия 0.5·(Δz)², значения усредняются по 2D-сетке лагов. Анизотропия видна как эллипс: направление, вдоль которого γ растёт медленнее (длиннее радиус), - ось максимальной непрерывности (для складчатости - простирание).\n\nВ Журнал и в HTML-отчёт выводятся оценки: азимут главной оси (геогр., 0=С, по часовой), коэффициент анизотропии (малая/главная) и радиус. Их можно подставить в структуру вариограммы «2D Kriging» (азимут, анизотропия, радиус a) - это и есть учёт анизотропии в кригинге. Оценка индикативная: уточняйте по самому хитмапу.\n\nЕсли структура близка к изотропной или радиус меньше ячейки - анизотропия не оценивается (помечается «не выражена»).\n\nОпц. растр поверхности (в координатах лага, начало в 0,0) - для тех, кто хочет видеть карту на холсте.': 'Builds a variogram map - the γ(h_x, h_y) surface: for every pair, the separation vector (dx, dy) and the semivariance 0.5·(Δz)² are taken, and values are averaged over a 2D grid of lags. Anisotropy shows as an ellipse: the direction along which γ grows more slowly (longer range) is the axis of maximum continuity (for folding - the strike).\n\nThe Log and the HTML report give estimates: the major-axis azimuth (geographic, 0=N, clockwise), the anisotropy ratio (minor/major) and the range. They can be fed into the "2D Kriging" variogram structure (azimuth, anisotropy, range a) - this is how anisotropy enters kriging. The estimate is indicative: refine it against the heatmap itself.\n\nIf the structure is near-isotropic or the range is smaller than a cell - anisotropy is not estimated (marked "not expressed").\n\nOpt. surface raster (in lag coordinates, origin at 0,0) - for those who want to see the map on the canvas.',
    'Бинов на полуось (детализация карты)': 'Bins per half-axis (map detail)',
    'Макс. лаг, в единицах слоя (0 = пол-диагонали)': 'Max. lag, in layer units (0 = half-diagonal)',
    'Растр поверхности (опц., в лаг-координатах)': 'Surface raster (opt., in lag coordinates)',
    'Не задан точечный слой.': 'No point layer specified.',
    'Канал': 'Band',
    'Минимум точек в группе, % от выборки (пол 30 точек)': 'Minimum points per group, % of sample (floor 30 points)',
    'Модель для подбора': 'Model to fit',
    'Устойчивая оценка (Кресси-Хокинса)': 'Robust estimator (Cressie-Hawkins)',
    'Показать облако пар': 'Show pair cloud',
    'Наложить заданную модель вариограммы': 'Overlay a given variogram model',
    'Модель: тип': 'Model: type',
    'Модель: порог/вклад C': 'Model: sill/contribution C',
    'Модель: радиус корреляции a': 'Model: correlation range a',
    'Модель: азимут, °': 'Model: azimuth, °',
    'Модель: анизотропия (малая/главная)': 'Model: anisotropy (minor/major)',
    'Отсев: перцентиль обрезки, % (0 = выкл.)': 'Outliers: clip percentile, % (0 = off)',
    'Отсев: нижняя граница (пусто = нет)': 'Outliers: lower bound (empty = none)',
    'Отсев: верхняя граница (пусто = нет)': 'Outliers: upper bound (empty = none)',
    'Отсев: срезать к границе вместо удаления': 'Outliers: cap to bound instead of removing',
    'Мин. количество пар в ячейке': 'Min. number of pairs per cell',
    'модель': 'model',
    'радиус корреляции a (0=авто)': 'correlation range a (0=auto)',
    'азимут, °': 'azimuth, °',
    'анизотропия (малая/главная)': 'anisotropy (minor/major)',
    '0 = авто: min(охват)/50': '0 = auto: min(extent)/50',
    'грид: -': 'grid: -',
    ' (авто)': ' (auto)',
    'Профиль «%s»: %s.': 'Profile "%s": %s.',
    ' Расчёт пойдёт по профилю - поля ниже игнорируются.': ' Computation will use the profile - the fields below are ignored.',
    'грид: %d × %d%s': 'grid: %d × %d%s',
    'Профиль не выбран - расчёт по полям диалога.': 'No profile selected - computing from dialog fields.',
    'Профиль не выбран.': 'No profile selected.',
    'Профиль «%s» не найден.': 'Profile "%s" not found.',
    'Сферическая': 'Spherical',
    'Экспоненциальная': 'Exponential',
    'Гауссова': 'Gaussian',
    'Степенная': 'Power',
    'Ординарный (OK)': 'Ordinary (OK)',
    'Простой (SK)': 'Simple (SK)',
    'Авто (лучшая по R²)': 'Auto (best by R²)',
    'Показать список': 'Show list',
    'Сохранить вручную (по полям ниже)': 'Save manually (from fields below)',
    'Удалить выбранный': 'Delete selected',
    'Очистить все': 'Clear all',
    '(не выбран)': '(none)',
    'Загрузить профиль обработки': 'Load processing profile',
    'Профиль (для удаления / просмотра)': 'Profile (for deletion / preview)',
    '\n\n- - -\nРазработано при поддержке ООО «Информ++» (www.informpp.ru).\nСтраница плагина: www.informpp.ru/главная-страница/qgis-isoliner': '\n\n- - -\nDeveloped with the support of Inform++ LLC (www.informpp.ru).\nPlugin page: www.informpp.ru/главная-страница/qgis-isoliner',
    '≥ %.4g (упёрся в макс. лаг)': '≥ %.4g (capped at max lag)',
    '<p><i>Интерактивный график недоступен (нет plotly). Числовые оценки - в сводке выше.</i></p>': '<p><i>Interactive chart unavailable (no plotly). Numeric estimates are in the summary above.</i></p>',
    "<div style='background:#f3f7f4;border:1px solid #cde0d6;padding:8px 14px;border-radius:6px;max-width:900px;margin:12px 0'><b>Что дальше</b><ul style='margin:6px 0'>%s</ul></div>": "<div style='background:#f3f7f4;border:1px solid #cde0d6;padding:8px 14px;border-radius:6px;max-width:900px;margin:12px 0'><b>What's next</b><ul style='margin:6px 0'>%s</ul></div>",
    "<div style='background:#f5f5f7;border:1px solid #ddd;padding:8px 14px;border-radius:6px;display:inline-block'><b>Сводка</b><div style='margin-top:6px'><table cellpadding='4'>%s</table></div></div>": "<div style='background:#f5f5f7;border:1px solid #ddd;padding:8px 14px;border-radius:6px;display:inline-block'><b>Summary</b><div style='margin-top:6px'><table cellpadding='4'>%s</table></div></div>",
    'Точек': 'Points',
    'Поле Z': 'Z field',
    'Макс. лаг': 'Max. lag',
    'не выражена': 'not expressed',
    'Ячейка лага': 'Lag cell',
    'главная ось': 'major axis',
    'Анизотропия': 'Anisotropy',
    'Вариокарта · %s': 'Variomap · %s',
    'Бинов на полуось': 'Bins per half-axis',
    'Дисперсия (силл)': 'Variance (sill)',
    'лаг по северу h_y': 'north lag h_y',
    'Радиус главной оси': 'Major-axis range',
    '3.01 Категориальный индикаторный кригинг': '3.01 Categorical indicator kriging',
    'Вероятности минтипа': 'Mineral-type probabilities',
    'Вероятности по классам (многополосный)': 'Class probabilities (multiband)',
    'Добавить категориальное поле минтипа (демо замещения)': 'Add a categorical mineral-type field (replacement demo)',
    'Зоны минтипа': 'Mineral-type zones',
    'Карта зон (самый вероятный класс)': 'Zone map (most likely class)',
    'Категориальное поле (класс)': 'Categorical field (class)',
    'Класс «%s»: всего %d точек, индикаторная вариограмма будет шумной, вероятность по нему ненадёжна.': 'Class "%s": only %d points, the indicator variogram will be noisy and its probability unreliable.',
    'Классов: %d, точек: %d.': 'Classes: %d, points: %d.',
    'Коды зон: ': 'Zone codes: ',
    'Поле mintype (демо): ': 'Field mintype (demo): ',
    'Полосы растра вероятностей подписаны именами классов.': 'The probability raster bands are labelled with the class names.',
    'Сетка %d x %d, ячейка %.4g.': 'Grid %d x %d, cell %.4g.',
    'Слишком мало точек с заданным классом.': 'Too few points with a class value.',
    'Уверенность (макс. вероятность)': 'Confidence (max probability)',
    'Индикаторный кригинг по категориальному полю (минтип, литотип, класс). На каждый класс строится индикатор 0/1, кригуется отдельно (ядро GSLIB KB2D), оценка обрезается в 0-1, затем вероятности по классам нормируются к сумме 1. Кодом класса не кригуем: у категорий нет порядка.\n\nВыход: многополосный растр вероятностей (полоса на класс, в описании полосы - имя класса), растр зон (код самого вероятного класса, соответствие кодов в Журнале) и растр уверенности (максимум вероятности). Пустые и NULL исключаются. Вариограмма каждого индикатора подбирается автоматически (сферическая).\n\n**Доля самородка** правит подобранную модель, когда карта расходится с фактами. При ненулевом самородке кригинг не проходит через данные: в узле со скважиной оценка тянется к соседям, и одиночная скважина среди чужого класса получает вероятность ниже своей. Ноль в этом поле делает оценку точной в точках замеров. Общая дисперсия при этом сохраняется, меняется только гладкость поверхности. Подобранные доли печатаются в журнал, так что сначала стоит просто посмотреть на них.\n\nТочность в точке ещё зависит от ячейки: оценка считается в центре ячейки, и если в одну ячейку попало несколько скважин разных классов, ни один самородок этого не разведёт. Ячейку задавайте мельче расстояния между соседними скважинами.': 'Indicator kriging on a categorical field (mineral type, lithotype, class). For each class a 0/1 indicator is built and kriged separately (GSLIB KB2D core), the estimate is clipped to 0-1, then the class probabilities are normalised to sum to 1. The class code is not kriged: categories have no order.\n\nOutputs: a multiband probability raster (one band per class, the class name in the band description), a zone raster (code of the most likely class, the mapping is printed to the log) and a confidence raster (maximum probability). Empty and NULL values are excluded. Each indicator variogram is fitted automatically (spherical).\n\n**The nugget share** corrects the fitted model when the map contradicts the facts. With a non-zero nugget the kriging does not pass through the data: at a node holding a borehole the estimate is pulled towards the neighbours, and a lone borehole among another class gets a probability below its own. Zero in this field makes the estimate exact at the measured points. The total variance is preserved, only the smoothness of the surface changes. The fitted shares are printed to the log, so it is worth simply looking at them first.\n\nExactness at a point also depends on the cell: the estimate is computed at the cell centre, and if several boreholes of different classes fall into one cell, no nugget will separate them. Set the cell finer than the spacing between neighbouring boreholes.',
    'Стиль изолиний': 'Isoline style',
    'Без стиля': 'No style',
    'Структура / гипсометрия': 'Structure / hypsometry',
    'Мощности': 'Thickness',
    'Гидроизогипсы': 'Water-table contours',
    'Содержания': 'Grades',
    'Депрессия (штрихи вниз)': 'Depression (downhill hachures)',
    'Выбран депрессионный стиль, но «Сторона склона для бергштрихов» выключена - поля dn_sign нет, штрихи не определят сторону. Включите галку, чтобы штрихи смотрели вниз.': 'The depression style is selected but "Downhill side for hachures" is off, so there is no dn_sign field and the hachures cannot pick a side. Enable the checkbox so the hachures point downhill.',
    'Сторона склона для бергштрихов (поле dn_sign)': 'Downhill side for hachures (dn_sign field)',
    'Сторона склона (dn_sign) для бергштрихов…': 'Downhill side (dn_sign) for hachures…',
    'Не удалось вычислить сторону склона (dn_sign): %s': 'Could not compute the downhill side (dn_sign): %s',
    'Мало точек (%d): оценка кригинга и вариограммы неустойчива.': 'Few points (%d): the kriging and variogram estimates are unstable.',
    'Точек с совпадающими координатами: %d. Частая причина вырожденной матрицы и артефактов. Уберите дубли или усредните пробы в одной точке.': 'Points with coinciding coordinates: %d. A common cause of a singular matrix and artefacts. Remove duplicates or average the samples at one location.',
    'Все значения одинаковы: кригинг вырождается, вариограмма нулевая. Проверьте выбранное поле.': 'All values are identical: kriging degenerates and the variogram is zero. Check the selected field.',
    'Азимут главной оси': 'Major-axis azimuth',
    'Записать анизотропию в профиль': 'Write anisotropy to a profile',
    'Анизотропия не выражена - в профиль писать нечего.': 'Anisotropy not resolved, nothing to write to the profile.',
    'Профиль «%s» не найден - анизотропия не сохранена. Сначала сохраните профиль в «Вариограмме» или «Кросс-валидации».': 'Profile "%s" not found, anisotropy not saved. First save a profile in Variogram or Cross-validation.',
    'В профиль «%s» записаны азимут=%.0f° и анизотропия=%.2f (радиус оставлен прежним: упёрся в макс. лаг). При загрузке профиля они появятся в подписи.': 'Written to profile "%s": azimuth=%.0f° and anisotropy=%.2f (range left unchanged: it hit the max lag). They will appear in the caption when the profile is loaded.',
    'В профиль «%s» записаны азимут=%.0f°, анизотропия=%.2f, радиус a=%.4g. При загрузке профиля они появятся в подписи.': 'Written to profile "%s": azimuth=%.0f°, anisotropy=%.2f, range a=%.4g. They will appear in the caption when the profile is loaded.',
    'лаг по востоку h_x': 'east lag h_x',
    'эллипс анизотропии': 'anisotropy ellipse',
    'Анизотропия (малая/главная)': 'Anisotropy (minor/major)',
    'Вариограммная карта %s · %s': 'Variogram map %s · %s',
    'Вариограммная карта: %d точек…': 'Variogram map: %d points…',
    'Не удалось записать HTML-отчёт: %s': 'Could not write the HTML report: %s',
    'Точки прорежены до %d (для скорости).': 'Points subsampled to %d (for speed).',
    'Не удалось записать растр поверхности: %s': 'Could not write the surface raster: %s',
    'plotly недоступен (%s) - отчёт без графика.': 'plotly unavailable (%s) - report without a chart.',
    'Оценка индикативная - сверьте с формой хитмапа (эллипса).': 'The estimate is indicative - check it against the heatmap (ellipse) shape.',
    'В «2D Kriging» задайте: азимут=%.0f, анизотропия=%.2f, радиус a=%.4g.': 'In "2D Kriging" set: azimuth=%.0f, anisotropy=%.2f, range a=%.4g.',
    'Главная ось непрерывности ~%.0f° (геогр.). Для складчатости это направление простирания.': 'Major continuity axis ~%.0f° (geographic). For folding this is the strike direction.',
    'Подставьте в структуру вариограммы «2D Kriging»: азимут=%.0f, анизотропия=%.2f, радиус a=%.4g.': 'Feed into the "2D Kriging" variogram structure: azimuth=%.0f, anisotropy=%.2f, range a=%.4g.',
    'Анизотропия не разрешается на этой сетке: структура близка к изотропной либо радиус меньше ячейки.': 'Anisotropy is not resolved on this grid: the structure is near-isotropic or the range is smaller than a cell.',
    'Попробуйте уменьшить «Макс. лаг» или увеличить «Бинов на полуось», чтобы разрешить ближнюю структуру.': 'Try reducing "Max. lag" or increasing "Bins per half-axis" to resolve the near structure.',
    'Анизотропия: азимут главной оси %.0f° (геогр.), коэффициент %.2f (малая/главная), радиус главной оси %.4g.': 'Anisotropy: major-axis azimuth %.0f° (geographic), ratio %.2f (minor/major), major-axis range %.4g.',
    'В «2D Kriging» подставьте азимут=%.0f и анизотропию≈%.2f (как ориентир); радиус a задайте больше %.4g по смыслу данных.': 'In "2D Kriging" use azimuth=%.0f and anisotropy≈%.2f (as a guide); set range a larger than %.4g per the data.',
    'Если γ не выходит на полку даже при широком окне - в данных тренд: его убирают до интерполяции либо учитывают видом кригинга.': 'If γ does not reach a plateau even in a wide window - the data has a trend: remove it before interpolation or account for it with the kriging type.',
    'Анизотропия не выражена (структура близка к изотропной или радиус меньше ячейки). Можно уменьшить макс. лаг или увеличить количество бинов.': 'Anisotropy not expressed (the structure is near-isotropic or the range is smaller than a cell). You can reduce the max lag or increase the number of bins.',
    'В «2D Kriging» задайте азимут=%.0f и анизотропию≈%.2f как ориентир, радиус a возьмите больше %.4g по смыслу данных. Чтобы измерить радиус - увеличьте «Макс. лаг».': 'In "2D Kriging" set azimuth=%.0f and anisotropy≈%.2f as a guide, and take range a larger than %.4g per the data. To measure the range - increase "Max. lag".',
    'Радиус главной оси упёрся в макс. лаг (%.4g): вдоль простирания вариограмма на полку не вышла - радиус считайте нижней оценкой, а анизотропию (%.2f) - заниженной по выраженности.': 'The major-axis range is capped at the max lag (%.4g): along the strike the variogram did not reach a plateau - treat the range as a lower bound and the anisotropy (%.2f) as understated.',
    'Радиус главной оси упёрся в макс. лаг (%.4g): вдоль простирания вариограмма на полку не вышла. Радиус - нижняя оценка, анизотропия (%.2f) занижена по выраженности. Увеличьте «Макс. лаг», либо это признак тренда / очень сильной непрерывности.': 'The major-axis range is capped at the max lag (%.4g): along the strike the variogram did not reach a plateau. The range is a lower bound and the anisotropy (%.2f) is understated. Increase "Max. lag", or this signals a trend / very strong continuity.',
    'Полигоны · %s': 'Polygons · %s',
    'Изолинии · %s': 'Isolines · %s',
    'Кригинг %s · %s': 'Kriging %s · %s',
    'Остатки CV %s · %s': 'CV residuals %s · %s',
    'Вариограмма %s · %s': 'Variogram %s · %s',
    'Стд. ошибка · %s · %s': 'Std. error · %s · %s',
    ' (показаны ~30000 точек)': ' (showing ~30000 points)',
    ' Радиус подбора (%.4g) достигает края окна (%.4g), это подтверждает: кривая ещё растёт.': ' The fitted range (%.4g) reaches the window edge (%.4g), confirming the curve is still rising.',
    ' Радиус подбора (%.4g) у края окна (%.4g) - считайте его нижней оценкой, при сомнении увеличьте окно и проверьте, стабилизируется ли радиус.': ' The fitted range (%.4g) is at the window edge (%.4g) - treat it as a lower bound; if in doubt, widen the window and check whether the range stabilizes.',
    ' и %d без геометрии': ' and %d without geometry',
    ', анизотропия %.3g по азимуту %.4g°': ', anisotropy %.3g at azimuth %.4g°',
    ', отсев %.4g%%': ', outlier clip %.4g%%',
    '<br>пар %{customdata}': '<br>pairs %{customdata}',
    "<div style='background:#f3f7f4;border:1px solid #cde0d6;padding:8px 14px;border-radius:6px;max-width:900px;margin:12px 0'><b>Рекомендации</b><ul style='margin:6px 0'>%s</ul></div>": "<div style='background:#f3f7f4;border:1px solid #cde0d6;padding:8px 14px;border-radius:6px;max-width:900px;margin:12px 0'><b>Recommendations</b><ul style='margin:6px 0'>%s</ul></div>",
    "<div style='background:#f5f5f7;border:1px solid #ddd;padding:8px 14px;border-radius:6px'><b>Параметры кригинга</b> <span style='color:#888;font-size:88%%'>(отличные от стандартных)</span><div style='margin-top:6px'>%s</div></div>": "<div style='background:#f5f5f7;border:1px solid #ddd;padding:8px 14px;border-radius:6px'><b>Kriging parameters</b> <span style='color:#888;font-size:88%%'>(differing from defaults)</span><div style='margin-top:6px'>%s</div></div>",
    "<div style='background:#f5f5f7;border:1px solid #ddd;padding:8px 14px;border-radius:6px;display:inline-block'><b>Сводка</b><div style='margin-top:6px'>%s</div></div>": "<div style='background:#f5f5f7;border:1px solid #ddd;padding:8px 14px;border-radius:6px;display:inline-block'><b>Summary</b><div style='margin-top:6px'>%s</div></div>",
    '<p><i>Интерактивный график недоступен (нет plotly). ': '<p><i>Interactive chart unavailable (no plotly). ',
    "<p><i>Интерактивный график недоступен (нет plotly). Значения экспериментальной вариограммы:</i></p><table border='1' cellpadding='4' style='border-collapse:collapse'>%s%s</table>": "<p><i>Interactive chart unavailable (no plotly). Experimental variogram values:</i></p><table border='1' cellpadding='4' style='border-collapse:collapse'>%s%s</table>",
    "<span style='color:#777'>все параметры - стандартные</span>": "<span style='color:#777'>all parameters are default</span>",
    "<table style='border-collapse:collapse' cellpadding='6'><tr><th align='left'>Метрика</th><th>Значение</th><th align='left'>Смысл</th></tr>%s</table>": "<table style='border-collapse:collapse' cellpadding='6'><tr><th align='left'>Metric</th><th>Value</th><th align='left'>Meaning</th></tr>%s</table>",
    "<tr><th align='left'>серия</th><th>h</th><th>γ(h)</th><th>пар</th></tr>": "<tr><th align='left'>series</th><th>h</th><th>γ(h)</th><th>pairs</th></tr>",
    '== Кросс-валидация (leave-one-out) ==': '== Cross-validation (leave-one-out) ==',
    'ME (смещение)': 'ME (bias)',
    'ME (смещение):   %+.4g   (ближе к 0 - лучше)': 'ME (bias):       %+.4g   (closer to 0 is better)',
    'ME близок к 0: систематического смещения нет.': 'ME close to 0: no systematic bias.',
    'ME заметно отличается от 0 (%+.3g): возможен систематический сдвиг - проверьте данные и тип кригинга (для простого - заданное среднее).': 'ME differs noticeably from 0 (%+.3g): possible systematic shift - check the data and the kriging type (for simple kriging, the specified mean).',
    'MSDR близок к 1: масштаб вариограммы подобран адекватно.': 'MSDR close to 1: the variogram scale is adequate.',
    'MSDR заметно больше 1 (%.3g): карта стандартной ошибки занижена. Умножьте наггет C0 и вклады C на MSDR (радиус и модель не трогайте) и пересчитайте - сами оценки не изменятся, поправится только дисперсия кригинга.': "MSDR noticeably above 1 (%.3g): the standard-error map is understated. Multiply nugget C0 and contributions C by MSDR (leave range and model) and recompute - the estimates won't change, only the kriging variance is corrected.",
    'MSDR меньше 1 (%.3g): неопределённость завышена. Разделите наггет C0 и вклады C на MSDR (радиус и модель не трогайте) и пересчитайте - оценки не изменятся.': "MSDR below 1 (%.3g): uncertainty is overstated. Divide nugget C0 and contributions C by MSDR (leave range and model) and recompute - the estimates won't change.",
    'MSDR:            %.3f   (ближе к 1 - лучше)': 'MSDR:            %.3f   (closer to 1 is better)',
    'QQ-график остатков': 'Residuals QQ-plot',
    'R (оценка/факт)': 'R (estimate/actual)',
    'R (оценка/факт): %.3f': 'R (estimate/actual): %.3f',
    'RMSE:            %.4g   (меньше - лучше)': 'RMSE:            %.4g   (lower is better)',
    '|Ошибка|': '|Error|',
    'В поле группировки меньше 2 значений - строю только общую кривую.': 'The grouping field has fewer than 2 values - building only the overall curve.',
    'В растре нет валидных значений.': 'The raster has no valid values.',
    'Верхняя граница': 'Upper bound',
    'Выберите профиль для удаления в поле «Профиль».': 'Select a profile to delete in the "Profile" field.',
    'Высокая корреляция (R=%.2f): оценки хорошо согласуются с фактом.': 'High correlation (R=%.2f): estimates agree well with the actual values.',
    'Гауссова модель с почти нулевым наггетом численно неустойчива (кригинг даёт «бычьи глаза», MSDR разваливается). Задайте небольшой наггет C0.': 'A Gaussian model with a near-zero nugget is numerically unstable (kriging gives "bull\'s eyes", MSDR falls apart). Set a small nugget C0.',
    'Гауссова модель: наггет повышен с %.4g до %.4g для устойчивости (минимум %g%% структурного силла).': 'Gaussian model: nugget raised from %.4g to %.4g for stability (minimum %g%% of the structural sill).',
    'Гистограмма ошибок': 'Error histogram',
    'Главные изолинии: каждая %d-я…': 'Index isolines: every %d-th…',
    'Групп больше 12 - группировка пропущена.': 'More than 12 groups - grouping skipped.',
    'Группы меньше %d точек пропущены: %s.': 'Groups smaller than %d points skipped: %s.',
    '(пусто)': '(empty)',
    'Ординарный или простой кригинг 2D по точечному слою (ядро GSLIB KB2D). Вариограмма: наггет плюс структура (сферическая, экспоненциальная, гауссова или степенная) с азимутом и анизотропией. Подходит для отметок пласта, мощностей, ФМС, химии и любых числовых атрибутов.\n\n**Радиус поиска** 0 означает всю выборку, **размер ячейки** 0 - одну пятидесятую меньшей стороны охвата, **радиус корреляции** 0 - треть большей стороны. **Обрезка по контуру скважин** убирает экстраполяцию за пределы данных.\n\n**Разломы** подаются линиями и работают барьерами влияния: замер, отрезок до которого пересекает линию, в выборку ячейки не идёт. Поверхность вдоль разлома рвётся, и изолинии по такому гриду рвутся сами.\n\nЛиния не обязана рассекать площадь насквозь. У затухающего разлома влияние огибает его конец, и поверхность выше конца смыкается. Сгущение изолиний у самого конца при этом нормально: амплитуда там падает до нуля, и все промежуточные уровни укладываются в узкую полосу.\n\nБарьер проверяется точной геометрией, в сетку разлом не переводится. Поэтому косая линия не даёт ступенек по ячейкам, пустых ячеек вдоль разлома не возникает, а крыло у ячейки определяется само стороной, с которой лежит её центр. Отдельно делить площадь на блоки не нужно. Замер, стоящий точно на разломе, виден с обоих крыльев: скважина на линии принадлежит обеим сторонам.\n\n**Приближение названо прямо.** По видимости отбираются только соседи, а ковариации между самими замерами остаются евклидовыми. Занулять их нельзя: система кригинга потеряет положительную определённость и станет вырожденной. Именно из-за этого кригинг с разломами встречается редко, а часть пакетов от него отказалась в пользу минимальной кривизны. Ценой приближения служит то, что вблизи линии веса соседей рассчитаны без учёта разрыва между ними самими. На расстояниях порядка радиуса корреляции это заметно мало, на очень частой сети у самой линии может слегка занижать контраст.\n\nРазломы принимает и 1.03, и 1.04. В 1.03 барьер разрывает связи между узлами сетки, в 1.04 - режет готовые изолинии по линии.\n\n**Преобразование значения** логарифмирует данные перед кригингом. Нужно для величин с разбросом на порядки: коэффициент фильтрации, водопроводимость, содержания с длинным хвостом. Кригуется ln(Z), оценка возвращается через exp и является медианной. Вариограмму, наггет и среднее простого кригинга при этом задавайте в единицах ln. Стандартная ошибка пересчитывается в исходные единицы. Точки со значением ноль и ниже отбрасываются с предупреждением: логарифм для них не определён.\n\n**Снять полиномиальный тренд** превращает расчёт в регрессию-кригинг. Тренд заданной степени снимается методом наименьших квадратов, кригуются остатки, после построения грида тренд добавляется к оценке обратно. Нужно там, где данные имеют явный уклон по площади и вариограмма из-за него не выходит на плато. Степень 1 это наклонная плоскость, 2 - квадратичная поверхность.\n\n**Дискретизация блока** работает только при включённом блочном кригинге. Ячейка мысленно разбивается на сетку точек N на N, и ковариации усредняются по ним, то есть оценивается среднее по блоку, а не значение в его центре. Четыре хватает почти всегда, большее N считается дольше, а точность растёт мало.\n\nЯчейка, запертая в складке разлома, не видит ни одного замера, и оценивать там не из чего. Такая ячейка берёт среднее по рассчитанным соседям: сдвиг геометрии ограничен размером самого кармана, а карман мельче складки. Дырка в гриде обошлась бы дороже - по ней рвутся изолинии, разваливаются пояса и искажаются объёмы. Число запертых ячеек и ширина наибольшего кармана пишутся в журнал: карманы шире двух ячеек означают, что линия проведена слишком извилисто для выбранного размера ячейки.\n\n**Сгладить грид (Гаусс)** применяется к готовому гриду и не меняет самой оценки. Радиус задаётся в ячейках. Это косметика для карты, а не улучшение модели: пробы после сглаживания воспроизводятся уже неточно. При блочном кригинге обычно не нужно, там усреднение по блоку уже сгладило поверхность.': 'Ordinary or simple 2D kriging over a point layer (GSLIB KB2D core). Variogram: nugget plus structure (spherical, exponential, Gaussian or power) with azimuth and anisotropy. Suitable for roof elevations, thicknesses, geomechanical properties, chemistry and any numeric attribute.\n\n**Search radius** 0 means the whole sample, **cell size** 0 means one fiftieth of the shorter side of the extent, **correlation range** 0 means a third of the longer side. **Clipping to the well hull** removes extrapolation beyond the data.\n\n**Faults** are supplied as lines and act as barriers of influence: a measurement whose segment to the cell crosses the line does not enter the sample. The surface breaks along the fault, and isolines over such a grid break by themselves.\n\nThe line need not cut across the area. For a dying fault the influence goes round its end, and above the end the surface closes up. A crowding of isolines right at the end is normal: the throw falls to zero there, and all intermediate levels fit into a narrow strip.\n\nThe barrier is tested by exact geometry and the fault is never turned into cells. So a slanted line produces no steps along cell edges, no empty cells appear along the fault, and the wing of a cell follows by itself from the side its centre lies on. There is no need to split the area into blocks. A measurement standing exactly on the fault is visible from both wings: a borehole on the line belongs to both sides.\n\n**The approximation is named plainly.** Only the neighbours are selected by visibility, while the covariances between the measurements themselves stay Euclidean. Zeroing them is not allowed: the kriging system would lose positive definiteness and become singular. That is exactly why kriging with faults is rare, and part of the packages dropped it in favour of minimum curvature. The price of the approximation is that near the line the weights of the neighbours are computed without regard for the break between the neighbours themselves. At distances of the order of the correlation range this matters little, on a very dense network right at the line it can slightly lower the contrast.\n\nFaults are accepted by 1.03 and 1.04 as well. In 1.03 the barrier cuts the links between grid nodes, in 1.04 it cuts ready isolines along the line.\n\n**Value transform** takes the logarithm of the data before kriging. It is needed for quantities spread over orders of magnitude: hydraulic conductivity, transmissivity, grades with a long tail. ln(Z) is kriged and the estimate is returned through exp, which makes it a median estimate. The variogram, the nugget and the simple-kriging mean must then be given in ln units. The standard error is converted back to the original units. Points with a value of zero or below are dropped with a warning: the logarithm is not defined for them.\n\n**Remove a polynomial trend** turns the run into regression kriging. A trend of the given degree is removed by least squares, the residuals are kriged, and after the grid is built the trend is added back to the estimate. It is needed where the data have a clear slope across the area and the variogram does not reach a sill because of it. Degree 1 is a tilted plane, degree 2 a quadratic surface.\n\n**Block discretisation** works only with block kriging switched on. The cell is mentally split into an N by N set of points and the covariances are averaged over them, so what is estimated is the mean over the block rather than the value at its centre. Four is almost always enough, a larger N takes longer while the accuracy grows little.\n\nA cell locked in a fold of a fault sees not a single measurement, and there is nothing to estimate from there. Such a cell takes the mean over the computed neighbours: the shift of the geometry is bounded by the size of the pocket itself, and the pocket is finer than the fold. A hole in the grid would cost more, isolines break over it, belts fall apart and volumes come out wrong. The number of locked cells and the width of the largest pocket are written to the log: pockets wider than two cells mean the line has been drawn too sinuously for the chosen cell size.\n\n**Smooth the grid (Gaussian)** is applied to the finished grid and does not change the estimate itself. The radius is given in cells. It is cosmetics for the map rather than an improvement of the model: after smoothing the samples are no longer honoured exactly. With block kriging it is usually not needed, the averaging over the block has already smoothed the surface.',
    'Ординарный или простой кригинг 2D по точечному слою (ядро GSLIB KB2D). Вариограмма: наггет плюс структура (сферическая, экспоненциальная, гауссова или степенная) с азимутом и анизотропией. Подходит для отметок пласта, мощностей, ФМС, химии и любых числовых атрибутов.\n\n**Радиус поиска** 0 означает всю выборку, **размер ячейки** 0 - одну пятидесятую меньшей стороны охвата, **радиус корреляции** 0 - треть большей стороны. **Обрезка по контуру скважин** убирает экстраполяцию за пределы данных.\n\n**Разломы** подаются линиями и работают барьерами влияния: замер, отрезок до которого пересекает линию, в выборку ячейки не идёт. Поверхность вдоль разлома рвётся, и изолинии по такому гриду рвутся сами.\n\nЛиния не обязана рассекать площадь насквозь. У затухающего разлома влияние огибает его конец, и поверхность выше конца смыкается. Сгущение изолиний у самого конца при этом нормально: амплитуда там падает до нуля, и все промежуточные уровни укладываются в узкую полосу.\n\nБарьер проверяется точной геометрией, в сетку разлом не переводится. Поэтому косая линия не даёт ступенек по ячейкам, пустых ячеек вдоль разлома не возникает, а крыло у ячейки определяется само стороной, с которой лежит её центр. Отдельно делить площадь на блоки не нужно. Замер, стоящий точно на разломе, виден с обоих крыльев: скважина на линии принадлежит обеим сторонам.\n\n**Приближение названо прямо.** По видимости отбираются только соседи, а ковариации между самими замерами остаются евклидовыми. Занулять их нельзя: система кригинга потеряет положительную определённость и станет вырожденной. Именно из-за этого кригинг с разломами встречается редко, а часть пакетов от него отказалась в пользу минимальной кривизны. Ценой приближения служит то, что вблизи линии веса соседей рассчитаны без учёта разрыва между ними самими. На расстояниях порядка радиуса корреляции это заметно мало, на очень частой сети у самой линии может слегка занижать контраст.\n\nРазломы принимает и 1.03, и 1.04. В 1.03 барьер разрывает связи между узлами сетки, в 1.04 - режет готовые изолинии по линии.\n\n**Преобразование значения** логарифмирует данные перед кригингом. Нужно для величин с разбросом на порядки: коэффициент фильтрации, водопроводимость, содержания с длинным хвостом. Кригуется ln(Z), оценка возвращается через exp и является медианной. Вариограмму, наггет и среднее простого кригинга при этом задавайте в единицах ln. Стандартная ошибка пересчитывается в исходные единицы. Точки со значением ноль и ниже отбрасываются с предупреждением: логарифм для них не определён.\n\n**Снять полиномиальный тренд** превращает расчёт в регрессию-кригинг. Тренд заданной степени снимается методом наименьших квадратов, кригуются остатки, после построения грида тренд добавляется к оценке обратно. Нужно там, где данные имеют явный уклон по площади и вариограмма из-за него не выходит на плато. Степень 1 это наклонная плоскость, 2 - квадратичная поверхность.\n\n**Дискретизация блока** работает только при включённом блочном кригинге. Ячейка мысленно разбивается на сетку точек N на N, и ковариации усредняются по ним, то есть оценивается среднее по блоку, а не значение в его центре. Четыре хватает почти всегда, большее N считается дольше, а точность растёт мало.\n\n**Заполнять запертые ячейки у разломов** решает, что делать с ячейкой, запертой в складке разлома, откуда не видно ни одного замера. Оценивать там не из чего. По умолчанию ячейка берёт среднее по рассчитанным соседям: сдвиг геометрии ограничен размером самого кармана, а карман мельче складки. Дырка в гриде обошлась бы дороже - по ней рвутся изолинии, разваливаются пояса и искажаются объёмы. Снимайте флажок, когда пустые ячейки нужны как признак того, что линия проведена слишком извилисто.\n\n**Сгладить грид (Гаусс)** применяется к готовому гриду и не меняет самой оценки. Радиус задаётся в ячейках. Это косметика для карты, а не улучшение модели: пробы после сглаживания воспроизводятся уже неточно. При блочном кригинге обычно не нужно, там усреднение по блоку уже сгладило поверхность.': 'Ordinary or simple 2D kriging over a point layer (GSLIB KB2D core). Variogram: nugget plus structure (spherical, exponential, Gaussian or power) with azimuth and anisotropy. Suitable for roof elevations, thicknesses, geomechanical properties, chemistry and any numeric attribute.\n\n**Search radius** 0 means the whole sample, **cell size** 0 means one fiftieth of the shorter side of the extent, **correlation range** 0 means a third of the longer side. **Clipping to the well hull** removes extrapolation beyond the data.\n\n**Faults** are supplied as lines and act as barriers of influence: a measurement whose segment to the cell crosses the line does not enter the sample. The surface breaks along the fault, and isolines over such a grid break by themselves.\n\nThe line need not cut across the area. For a dying fault the influence goes round its end, and above the end the surface closes up. A crowding of isolines right at the end is normal: the throw falls to zero there, and all intermediate levels fit into a narrow strip.\n\nThe barrier is tested by exact geometry and the fault is never turned into cells. So a slanted line produces no steps along cell edges, no empty cells appear along the fault, and the wing of a cell follows by itself from the side its centre lies on. There is no need to split the area into blocks. A measurement standing exactly on the fault is visible from both wings: a borehole on the line belongs to both sides.\n\n**The approximation is named plainly.** Only the neighbours are selected by visibility, while the covariances between the measurements themselves stay Euclidean. Zeroing them is not allowed: the kriging system would lose positive definiteness and become singular. That is exactly why kriging with faults is rare, and part of the packages dropped it in favour of minimum curvature. The price of the approximation is that near the line the weights of the neighbours are computed without regard for the break between the neighbours themselves. At distances of the order of the correlation range this matters little, on a very dense network right at the line it can slightly lower the contrast.\n\nFaults are accepted by 1.03 and 1.04 as well. In 1.03 the barrier cuts the links between grid nodes, in 1.04 it cuts ready isolines along the line.\n\n**Value transform** takes the logarithm of the data before kriging. It is needed for quantities spread over orders of magnitude: hydraulic conductivity, transmissivity, grades with a long tail. ln(Z) is kriged and the estimate is returned through exp, which makes it a median estimate. The variogram, the nugget and the simple-kriging mean must then be given in ln units. The standard error is converted back to the original units. Points with a value of zero or below are dropped with a warning: the logarithm is not defined for them.\n\n**Remove a polynomial trend** turns the run into regression kriging. A trend of the given degree is removed by least squares, the residuals are kriged, and after the grid is built the trend is added back to the estimate. It is needed where the data have a clear slope across the area and the variogram does not reach a sill because of it. Degree 1 is a tilted plane, degree 2 a quadratic surface.\n\n**Block discretisation** works only with block kriging switched on. The cell is mentally split into an N by N set of points and the covariances are averaged over them, so what is estimated is the mean over the block rather than the value at its centre. Four is almost always enough, a larger N takes longer while the accuracy grows little.\n\n**Fill locked cells at faults** decides what to do with a cell locked in a fold of a fault, from which not a single measurement is visible. There is nothing to estimate from there. By default the cell takes the mean over the computed neighbours: the shift of the geometry is bounded by the size of the pocket itself, and the pocket is finer than the fold. A hole in the grid would cost more, isolines break over it, belts fall apart and volumes come out wrong. Clear the checkbox when empty cells are wanted as a sign that the line has been drawn too sinuously.\n\n**Smooth the grid (Gaussian)** is applied to the finished grid and does not change the estimate itself. The radius is given in cells. It is cosmetics for the map rather than an improvement of the model: after smoothing the samples are no longer honoured exactly. With block kriging it is usually not needed, the averaging over the block has already smoothed the surface.',
    'Запертых ячеек у разломов: %d из %d, заполнено %d по соседям. Такая ячейка попала в карман, откуда не видно ни одного замера: линия складывается мельче ячейки либо замыкает участок без скважин. Оценивать там не из чего, и дырка в гриде обошлась бы дороже: по ней рвутся изолинии и искажаются объёмы. Наибольший карман %d ячеек, настолько же ограничен и сдвиг геометрии.': 'Locked cells at faults: %d of %d, %d filled from the neighbours. Such a cell fell into a pocket from which not a single measurement is visible: the line folds finer than the cell or encloses a patch without boreholes. There is nothing to estimate from there, and a hole in the grid would cost more: isolines break over it and volumes come out wrong. The largest pocket is %d cells, and the shift of the geometry is bounded by the same figure.',
    'Карманы шире двух ячеек: значения в них взяты издалека. Уменьшите ячейку или упростите линию разлома.': 'Pockets wider than two cells: the values in them are taken from far away. Reduce the cell size or simplify the fault line.',
    'Пустых ячеек у разломов: %d из %d. Такая ячейка попала в карман, откуда не видно ни одного замера: линия складывается мельче ячейки либо замыкает участок без скважин. Оценивать там не из чего. Уменьшите ячейку, упростите линию разлома или снимите лишние изгибы.': 'Empty cells at faults: %d of %d. Such a cell fell into a pocket from which not a single measurement is visible: the line folds finer than the cell or encloses a patch without boreholes. There is nothing to estimate from there. Reduce the cell size, simplify the fault line or remove the extra bends.',
    '\n\n**Зерно ГСЧ** делает прогон воспроизводимым. При одном и том же зерне и тех же параметрах результат получается ровно тем же самым, что нужно для отчёта, для сравнения вариантов и для того, чтобы показать коллеге ту же картину. Ноль означает случайное зерно: каждый запуск даёт свой результат.': '\n\n**RNG seed** makes a run reproducible. With the same seed and the same parameters the result comes out exactly the same, which is what a report needs, what comparing variants needs, and what showing a colleague the same picture needs. Zero means a random seed: every run gives its own result.',
    '\n\n**Выборка растра** задаёт способ снятия значения в точке, не совпадающей с центром ячейки. Билинейно усредняет четыре соседние ячейки и даёт гладкий профиль, это умолчание и обычный выбор для отметок и мощностей. Ближайший берёт значение ячейки как есть, без смешивания: так надо для кодов, меток и любых категориальных величин, где среднее между двумя классами бессмысленно.': '\n\n**Raster sampling** sets how a value is taken at a point that does not coincide with a cell centre. Bilinear averages the four neighbouring cells and gives a smooth profile, this is the default and the usual choice for elevations and thicknesses. Nearest takes the value of the cell as it is, without mixing: that is what codes, labels and any categorical quantities need, where an average between two classes is meaningless.',
    '\n\n**Ширина, высота и размер ячейки** задают учебную сетку. Умолчания подобраны так, чтобы прогон занимал секунды и при этом на карте было что разглядывать. Увеличивать стоит, когда нужен более крупный пример или проверка скорости на большом гриде.': '\n\n**Width, height and cell size** set the teaching grid. The defaults are chosen so that a run takes seconds while there is still something to look at on the map. Raising them makes sense when a larger example is needed or when the speed on a big grid is being tested.',
    'Создаёт синтетический рельеф: наклонная равнина, холмы, извилистая долина с постоянным падением. Рельеф детерминирован по зерну. Между холмами осознанно остаются локальные понижения, чтобы инструменту заполнения было что показывать. Служебный инструмент для примеров руководства и работы без сети, живые данные даёт инструмент 2.01. Выход: GeoTIFF float32 (или int16 флажком) в группе Топография.\n\nФлажок **Овражно-балочная сеть** врезает в рельеф тальвеги с крутыми бортами и отвершками под острым углом. Это самая тяжёлая проверка для построения рельефа по горизонталям: узкий врез между соседними горизонталями срезается, и на профиле поперёк оврага это видно сразу. Такой рельеф нужен как проверочный набор для инструментов 2.11 и 2.12.\n\nЗаодно выдаются три демо-точки створов возле тальвегов, нарочно сдвинутые в сторону от водотока - готовая еда для инструмента 2.15 «Отчёт по створу» и наглядная проверка притяжки, и две демо-трассы канав поперёк тальвегов для инструмента 2.16 «Водосбор линии».\n\nДва необязательных выхода дают готовую пару для инструмента 2.18 «Насыпи и выемки»: проектную поверхность и полигоны участков работ. Площадка горизонтальная, её отметка берётся медианой рельефа внутри области. Это не вкусовщина: объём есть сумма разностей, и нетто обращается в ноль ровно при отметке, равной среднему, поэтому демо сразу даёт сошедшийся баланс. Сдвиг отметки в дополнительных параметрах уводит его в привозной или вывозной грунт. По умолчанию оба выхода выключены.\n\n**Компактный int16** пишет высоты целыми числами вместо вещественных. Файл выходит вдвое меньше, а высоты округляются до метра. Нужен для поставки демо-данных в комплекте, для работы берите обычный вещественный выход.': 'Creates a synthetic relief: a tilted plain, hills, a winding valley with a steady fall. The relief is deterministic by seed. Local depressions are deliberately left between the hills so the filling tool has something to show. A service tool for the manual examples and for work without a network, live data come from tool 2.01. Output: a float32 GeoTIFF (or int16 by a tick) in the Topography group.\n\nThe **Gully and ravine network** tick cuts thalwegs with steep sides and tributaries at an acute angle into the relief. This is the hardest test for building a relief from contours: a narrow cut between adjacent contours is shaved off, and on a profile across the gully this shows at once. Such a relief is needed as a validation set for tools 2.11 and 2.12.\n\nThree demo gauge points near the thalwegs are also produced, deliberately shifted aside from the stream - ready food for the 2.15 Gauge point report tool and a visual check of the snapping, plus two demo ditch traces across the thalwegs for the 2.16 Catchment of a line tool.\n\nTwo optional outputs give a ready pair for tool 2.18 Cut and fill: a design surface and work area polygons. The pad is horizontal and its elevation is the mean of the relief inside the area. That is not a matter of taste: volume is a sum of differences, and the net turns to zero exactly at the mean, so the demo comes out with a balance that closes. The elevation offset in the advanced parameters moves it into imported or exported soil. Both outputs are off by default.\n\n**Compact int16** writes the elevations as integers instead of floating point. The file comes out half the size and the elevations are rounded to a metre. It is meant for shipping demo data with the plugin, for real work take the ordinary floating point output.',
    'Цилиндрический разрез - развёртка стенки шахтного ствола. Вокруг оси ствола на заданном радиусе берётся окружность с угловым шагом (по умолчанию 1 градус), и поверхности-гриды выбираются вдоль неё.\n\nРазвёртка ложится в оси длина дуги по окружности - высота. Каждая маркирующая поверхность даёт линию своего пересечения со стенкой ствола: при падении пластов линии наклонены и волнисты.\n\nОсь задаётся точечным слоем (устье), радиус - в единицах карты. Вертикальный масштаб как у разреза.\n\n**Угловой шаг** задаёт подробность развёртки по окружности ствола. Один градус даёт 360 столбцов на оборот, этого хватает для большинства задач. Мельче стоит брать только под тонкие наклонные структуры, счёт и объём выхода растут пропорционально.': 'A cylindrical section - the unwrapped wall of a mine shaft. Around the shaft axis at a given radius a circle is taken with an angular step (1 degree by default), and the surface grids are sampled along it.\n\nThe unwrap lies in axes of arc length along the circle and elevation. Each marker surface gives the line of its intersection with the shaft wall: where the beds dip the lines are tilted and wavy.\n\nThe axis is set by a point layer (the collar), the radius is in map units. The vertical scale is as in the section.\n\n**Angular step** sets the detail of the unrolling around the circumference of the hole. One degree gives 360 columns per turn, which is enough for most tasks. Going finer makes sense only for thin inclined structures, the run time and the size of the output grow in proportion.',
    'Создаёт точечный слой «скважин» со случайными координатами в пределах области и значением абстрактного компонента (X, %), имеющим пространственную структуру. Предназначен для обучения и проверки инструментов без реальных данных.\n\nОбласть задаётся экстентом (можно по слою, по холсту карты, вручную координатами или рисованием). «Гладкость» задаёт радиус корреляции как долю охвата (больше - крупнее «пятна»). «Доля наггета» задаёт долю дисперсии, приходящуюся на короткомасштабный шум (чем больше, тем меньше предсказуемость). В Журнал выводится стартовая вариограмма - её уточняют кросс-валидацией.\n\nПоля результата: номер скважины, абсолютная отметка кровли (roof), мощность (thick) и содержание X. Диапазоны кровли и мощности по умолчанию близки к реальным калийным данным; их можно изменить в разделе «Дополнительно».\n\nНеобязательные галки добавляют поля для смежных инструментов: напор (head) для градиента потока и категориальный минтип для индикаторного кригинга. Галка K и T добавляет напор и лог-нормальные поля K (коэф. фильтрации) и T = K·мощность для «Удельного расхода (Дарси)». Включённый вывод «Поверхность дрейфа» даёт растр сторонней поверхности и поле dz, линейно с ней связанное, для кригинга с внешним дрейфом.\n\n**Амплитуда разлома** задаёт учебный разрыв. Генератор проводит линию поперёк площади, не доводя её до краёв, и прибавляет амплитуду к значению у всех скважин по одну сторону. Прибавка действует только в пределах длины линии, поэтому выше её конца обе стороны одинаковы и поверхность там обязана смыкаться. Линия выдаётся отдельным выходом **Разлом (демо)** и подаётся дальше в 1.02, 1.03 и 1.04.\n\nПри нуле линия всё равно выдаётся, но сдвига нет: разлом есть геометрически и отсутствует по значениям. Это удобный контрольный прогон - барьер работает, а рвать нечего.\n\nДля проверки барьера берите амплитуду заметно больше радиуса корреляции, тогда скачок очевиден. Для проверки коридора в 1.04 хватит амплитуды порядка сечения изолиний.\n\nЗначение амплитуды пишется в атрибут throw выходного слоя разлома. Атрибут справочный: инструменты его не читают, барьер у них чисто геометрический и о величине смещения не знает.\n\n**Добавить поле напора** дописывает к скважинам поле head с напором подземных вод, связанным с рельефом кровли. Оно нужно инструменту 3.04, который считает гидравлический градиент и направление потока: без этого поля проверить его не на чем.': 'Creates a point "wells" layer with random coordinates within an area and a value of an abstract component (X, %), with a spatial structure. Intended for learning and testing the tools without real data.\n\nThe area is set by an extent (by layer, by map canvas, manually by coordinates or by drawing). "Smoothness" sets the correlation range as a fraction of the extent (larger - bigger "patches"). "Nugget fraction" sets the share of variance due to short-range noise (larger - less predictable). The Log prints the starting variogram - refine it with cross-validation.\n\nResult fields: well number, absolute roof elevation (roof), thickness (thick) and grade X. The default roof and thickness ranges are close to real potash data; you can change them under "Advanced".\n\nOptional checkboxes add fields for the neighbouring tools: head for the flow gradient and a categorical mineral type for indicator kriging. The K and T checkbox adds head and log-normal K (conductivity) and T = K·thickness fields for the \'Specific discharge (Darcy law)\' tool. Enabling the "Drift surface" output gives a raster of a secondary surface and a dz field linearly related to it, for external drift kriging.\n\n**Fault throw** sets a teaching break. The generator draws a line across the area without bringing it to the edges and adds the throw to the value at every well on one side. The addition acts only within the length of the line, so above its end both sides are equal and the surface must close up there. The line is produced as a separate output **Fault (demo)** and is fed further into 1.02, 1.03 and 1.04.\n\nAt zero the line is still produced but there is no shift: the fault exists geometrically and is absent in the values. That is a convenient control run - the barrier works and there is nothing to tear.\n\nTo check the barrier take a throw noticeably larger than the correlation range, then the jump is obvious. To check the corridor in 1.04 a throw of the order of the contour interval is enough.\n\nThe value of the throw is written into the throw attribute of the output fault layer. The attribute is for reference: the tools do not read it, their barrier is purely geometric and knows nothing of the size of the displacement.\n\n**Add a head field** appends a head field to the wells with a groundwater head tied to the relief of the roof. It is needed by tool 3.04, which computes the hydraulic gradient and the direction of flow: without this field there is nothing to test it on.',
    'Ячеистая декластеризация (порт GSLIB declus). Когда пробы сгущены неравномерно - одни блоки разбурены плотнее, - наивная глобальная статистика смещается в сторону переразведанных участков: если гуще бурили богатые зоны, среднее и гистограмма завышены. Инструмент даёт каждой пробе вес, обратный локальной плотности (в скоплении меньше, на отшибе больше), и считает представительное декластеризованное среднее.\n\nРазмер ячейки подбирается автоматически (свип по размерам, выбор по минимуму декластеризованного среднего) либо задаётся вручную. На регулярной сети декластеризация ничего не меняет - веса равны.\n\nВыход: слой точек с полем весов wt и HTML-отчёт (сводка, гистограмма сырая против взвешенной, кривая среднего). Декластеризованное среднее - готовая оценка для подсчёта запасов и для «Среднего» простого кригинга (1.1). Поле wt подаётся в гауссову симуляцию (3.06) для взвешенной гистограммы.\n\n**Цель свипа** задаёт, что считать правильным при переборе размера ячейки. Минимум среднего берут, когда сгущение сети попало в богатую зону: без весов среднее завышено, и правильным размером считается тот, при котором оно минимально. Максимум среднего - зеркальный случай, когда разбурена бедная зона. Выбор делается не наугад: посмотрите на карту сети и на то, где скважины стоят гуще.\n\n**Смещений начала сетки** сглаживает произвол в положении сетки. Веса зависят от того, где именно легла её граница, поэтому расчёт повторяется несколько раз со сдвинутым началом, а веса усредняются. Четыре смещения дают устойчивый результат, больше восьми смысла почти не добавляют.': 'Cell declustering (a port of GSLIB declus). When samples are clustered unevenly - some blocks drilled denser - the naive global statistics shift toward the over-sampled areas: if rich zones were drilled denser, the mean and histogram are overstated. The tool gives each sample a weight inversely proportional to the local density (less in a cluster, more on its own) and computes a representative declustered mean.\n\nThe cell size is chosen automatically (a sweep over sizes, picking the minimum declustered mean) or set manually. On a regular grid declustering changes nothing - the weights are equal.\n\nOutput: a point layer with a wt weight field and an HTML report (summary, raw-vs-weighted histogram, the mean curve). The declustered mean is a ready estimate for reserve calculation and for the Mean of simple kriging (1.1). The wt field feeds the Gaussian simulation (3.06) for a weighted histogram.\n\n**Sweep objective** sets what counts as right while the cell size is swept. The minimum of the mean is taken when the clustering of the network fell into a rich zone: without weights the mean is overstated, and the right size is the one at which it is lowest. The maximum of the mean is the mirror case, where a poor zone was drilled densely. The choice is not made blindly: look at the map of the network and at where the holes stand closer together.\n\n**Grid origin offsets** smooth out the arbitrariness in the position of the grid. The weights depend on where its boundary happened to fall, so the computation is repeated several times with a shifted origin and the weights are averaged. Four offsets give a stable result, beyond eight there is almost nothing to gain.',
    'Делит горизонтали на два набора: по одному строят рельеф, по второму проверяют результат.\n\nДелится не по объектам, а по **отметкам**. Убрать из построения отдельные звенья одной горизонтали бессмысленно: соседние звенья того же уровня подскажут ответ, и проверка окажется завышенной. Отложенный уровень исчезает целиком, и восстановить его интерполятор может только по соседним уровням, а это и есть предсказание.\n\nКрайние отметки набора всегда остаются в построении: за пределами набора интерполятор экстраполирует, и невязка там измеряла бы не то, ради чего проверка затевалась.\n\nОба выхода получают поле **hold**: 0 для построения, 1 для проверки. Инструмент **Невязка горизонталей против ЦМР** это поле узнаёт сам и печатает две цифры отдельно.\n\nРабочий порядок: разделить, построить рельеф по набору для построения (например **Topo2Raster**), затем измерить невязку по проверочному набору.\n\n**Сдвиг выбора** меняет, какие именно линии уйдут в проверку при том же шаге. При шаге 5 и сдвиге 0 отложится каждая пятая начиная с первой, при сдвиге 2 - начиная с третьей. Это нужно для повторной проверки на другом наборе: одна выборка может случайно попасть на удачные или неудачные горизонтали, и совпадение двух прогонов с разным сдвигом даёт куда больше уверенности.': 'Splits the contours into two sets: one is used to build the relief, the other to check the result.\n\nThe split is by **elevation**, not by feature. Holding out individual pieces of a single contour is pointless: the neighbouring pieces of the same level give the answer away and the check comes out flattering. A held-out level disappears entirely, and the interpolator can only restore it from the neighbouring levels, which is what prediction means.\n\nThe extreme levels of the set always stay in the building set: beyond the range the interpolator extrapolates, and a residual there would measure something other than what the check is for.\n\nBoth outputs get a **hold** field: 0 for building, 1 for validation. The **Contour residuals against the DEM** tool recognises this field by itself and prints the two figures separately.\n\nWorking order: split, build the relief from the building set (with **Topo2Raster** for instance), then measure the residual on the validation set.\n\n**Selection offset** changes which lines go into the check at the same step. With a step of 5 and an offset of 0 every fifth line is set aside starting from the first, with an offset of 2 starting from the third. This is needed for a repeat check on another set: one sample may happen to fall on lucky or unlucky contours, and an agreement between two runs with different offsets carries far more weight.',
    'Строит рельеф из векторных данных мультисеточной интерполяцией от грубой сетки к тонкой, по мотивам ANUDEM. Каждый тип входа работает своим ограничением: точки высот и изолинии - жёсткие узлы, тальвеги - принудительное падение вниз по течению (вершины линий должны идти вниз по течению, водотоки OSM и выход инструмента 2.06 подходят как есть), обрывы - барьер **Урез** работает в двух режимах. Плоскость заливает всю площадь внутри\nровной отметкой - это зеркало озера или пруда. Изолиния закрепляет\nтолько линию берега, а поверхность внутри остаётся за точками и\nструктурными линиями: так строится русло с дном по промерам и\nтальвегу. Переключается галочкой **Урез как плоскость**.\n\nУрез-изолиния и **Заполнить понижения в итоге** работают навстречу друг другу: первое строит русло, второе его заравнивает, потому что для заполнения русло это обычная яма. Заполнение нужно рельефу суши, чтобы вода стекала, и вредно ЦМР с дном. При таком сочетании инструмент предупреждает в журнале.\n\nсглаживания, поверхности по сторонам независимы, урез воды - по трём приоритетам на каждый объект: у полигона с трёхмерными вершинами урез интерполируется по их высотам и наклоняется вдоль русла, у полигона с отметкой в поле держится плоскостью, без того и другого уровень берётся по минимуму берега. Разнотипные объекты в одном слое разбираются каждый своей веткой. Нужен хотя бы один слой с высотами: точки или изолинии. Все слои приводятся к СК первого заданного слоя, она должна быть метрической. Финальное заполнение понижений флажком. Выход: GeoTIFF float32, высоты в метрах, nodata -9999, слой в группе Топография.\n\n**Трёхмерные тальвеги.** Если у линии тальвега есть отметки вершин, они становятся жёсткими узлами, а не только условием падения: промер по руслу перестаёт быть подсказкой и начинает задавать дно. Отметки при этом один раз приводятся к падающим вниз по течению, потому что измерения шумят, и вершина, ушедшая вверх, спорила бы с принуждением падения каждую итерацию. Правка идёт только вниз, наибольшая её величина печатается в журнал. Линия без отметок ведёт себя как прежде, разнотипный слой разбирается по объектам.\n\n**Вес измеренных отметок** решает спор в общей ячейке. Точки высот и вершины уплотнённых изолиний идут одним потоком жёстких узлов, и при совпадении в ячейке простое среднее уравнивает их в правах. Измеренная отметка снята прибором, а вершина горизонтали нарисована по линии сечения и уклоняется на пределах половины сечения, поэтому вес больше единицы отдаёт ячейку измерению. Единица (по умолчанию) сохраняет прежнее поведение, старые прогоны воспроизводятся.\n\n**Граница области построения** ограничивает поверхность полигоном, как outer boundary в САПР. Маска накладывается после интерполяции, а не отсечением входа: данные снаружи продолжают формировать поверхность у самой границы, и края не заворачиваются. Слой границы можно подавать в любой системе координат, геометрия переводится сама.\n\n**Размер ячейки** задаётся в метрах и здесь важнее, чем в загрузчиках: он определяет, какие формы рельефа вообще выживут. Ячейка должна быть заметно мельче расстояния между соседними горизонталями, иначе склон между ними ляжет в одну-две ячейки и станет ступенькой. Для топоплана масштаба 1:2000 с сечением 1 м разумный старт от двух до пяти метров.\n\n**Функция формы поперёк** задаёт, как поверхность идёт между верхней и нижней линией формы. Линейная даёт прямой откос постоянного уклона, это проектная геометрия отвала или уступа. Плавная скругляет переход у кромок, что ближе к естественному виду отработанного откоса.': 'The **water edge** works in two modes. A plane fills the whole area inside with a flat elevation - that is the mirror of a lake or a pond. A contour fixes only the shore line, while the surface inside stays with the points and the structural lines: this is how a channel with a bed is built from soundings and a thalweg. Switched by the **Water edge as a plane** checkbox.\n\nA contour water edge and **Fill depressions at the end** work against each other: the first builds a channel, the second levels it out, because for the filling a channel is an ordinary pit. The filling is needed for the relief of the land so that water runs off, and it is harmful to a DEM with a bed. With such a combination the tool warns in the log.\n\nBuilds terrain from vector data by multigrid interpolation from a coarse grid to a fine one, in the spirit of ANUDEM. Every input type works as its own constraint: elevation points and contours are hard nodes, streamlines force a downstream drop (line vertices must run downstream, OSM watercourses and the output of tool 2.06 fit as is), cliffs are smoothing barriers with independent surfaces on both sides, the water edge follows three priorities per feature: a polygon with three-dimensional vertices gets its edge interpolated from their heights and sloped along the channel, a polygon with an elevation field is held as a plane, and without either the level is taken from the shore minimum. Mixed feature types in one layer are handled each by its own branch. At least one layer with elevations is required: points or contours. All layers are brought to the CRS of the first given layer, which must be metric. Final depression filling by checkbox. Output: a float32 GeoTIFF, elevations in meters, nodata -9999, the layer in the Topography group.\n\n**Three-dimensional thalwegs.** When a thalweg line carries vertex elevations, they become hard nodes rather than merely a fall condition: a survey along the channel stops being a hint and starts setting the bed. The elevations are brought once to a downstream fall, because measurements are noisy and a vertex that goes uphill would fight the fall enforcement on every iteration. The correction only goes downwards and its largest value is printed to the log. A line without elevations behaves as before, and a mixed layer is handled object by object.\n\nThe **The weight of measured elevations** settles the dispute inside a shared cell. Spot heights and the vertices of densified contours go as one stream of hard nodes, and when they land in the same cell a plain average puts them on an equal footing. A measured elevation was taken with an instrument, while a contour vertex was drawn along a section line and errs within half a contour interval, so a weight above one gives the cell to the measurement. One (the default) keeps the previous behaviour and old runs reproduce.\n\n**Boundary of the build area** limits the surface to a polygon, like the outer boundary in a CAD system. The mask is applied after the interpolation rather than by clipping the input: data outside keep shaping the surface right at the boundary, so the edges do not curl. The boundary layer may be supplied in any coordinate system, the geometry is transformed automatically.\n\n**Cell size** is given in metres and matters more here than in the loaders: it decides which landforms survive at all. The cell has to be noticeably finer than the spacing between neighbouring contours, otherwise the slope between them falls into one or two cells and turns into a step. For a 1:2000 plan with a 1 m interval a reasonable start is two to five metres.\n\n**Cross-section shape function** sets how the surface runs between the upper and the lower form line. Linear gives a straight slope of constant gradient, the design geometry of a dump or a bench. Smooth rounds the transition at the edges, which is closer to the natural look of a worked slope.',
    'Строит изолинии из растра: равномерный шаг или явные уровни (через пробел), главные (утолщённые) изолинии флагом is_index, фильтр коротких линий.\n\nСкругление линий (Chaikin) слегка сглаживает контуры и убирает «октагоны» от грубого грида. Сглаживание самого поля выполняется в инструменте 2D Kriging.\n\nБикубическое сглаживание (сгущение грида ×2…×4) даёт гладкие изолинии без «октагонов» от грубой сетки - это основной способ сглаживания, сильнее скругления линий (Chaikin). Работает и для линий, и для контурных полигонов: границы поясов совпадают с изолиниями.\n\nПо умолчанию строит и контурные полигоны (пояса между изолиниями) во временный слой - их границы СОВПАДАЮТ с изолиниями, покрытие сплошное. Чтобы их не строить - очистите поле «Контурные полигоны».\n\nПоля: линии - значение уровня (по умолчанию ELEV) и is_index (1 у главных); полигоны - ELEV_MIN/ELEV_MAX (диапазон пояса).\n\nФлажок **Топографические подписи** задаёт линиям одно направление относительно склона, и тогда верх цифры всегда смотрит вверх по склону, как на топокарте. QGIS отсчитывает верх подписи от направления линии, поэтому поворот текста задавать не нужно. В слое остаётся поле up_side: 1 означает, что линия оставлена как была, 0 что развёрнута.\n\nВажно: в настройках подписей слоя должно быть разрешено показывать перевёрнутые подписи. Иначе QGIS доворачивает текст ради читаемости и сводит разворот линий на нет. В стилях **Структура** и **Депрессия** это уже настроено. Если подписываете своим стилем, включите в разделе отрисовки подписей показ перевёрнутых. Топографическая подпись по определению бывает перевёрнутой: на склоне, обращённом на юг, цифра читается вверх ногами.\n\n**Разломы** подаются линиями и режут изолинии точно по линии, а не по ячейкам. Линия входит и в сеть построения поясов, поэтому граница пояса идёт ровно по разлому. Разрыв живёт в векторной части: грид при этом сплошной, дырок в нём нет.\n\n**Ширина коридора у разлома** задаётся в ячейках, умолчание одна. Зачем она нужна: значения по разные стороны разлома отличаются на всю амплитуду, а скачок приходится на пару соседних ячеек. Контурер рисует в этом промежутке все промежуточные уровни разом, и вдоль линии получается полоса частых изолиний. Геологического смысла у неё нет, это интерполяция поперёк разрыва, которого пласт не знает. Полоса вырезается, а концы освободившихся изолиний притягиваются к самой линии.\n\nНоль отключает вырезание. Меньше ячейки брать незачем: скачок занимает ровно ячейку. Заметно больше - начнут пропадать изолинии, идущие вдоль разлома по делу.\n\nУ затухающего конца разлома остаётся короткий участок частых изолиний длиной около ширины коридора, и это верно по смыслу: разрыв там сошёл на нет, поверхность смыкается, и рвать её нечем. Изолинии, огибающие конец, сходятся в узкий пучок - так затухающий разлом и выглядит на структурной карте.\n\n**Наименьшая толщина полигона** задаётся в ячейках и отсекает узкие полосы поясов. Толщина считается как удвоенная площадь на периметр. Порог задуман против обрывков у разрыва там, где линии разломов не поданы: у карьеров, обрывов и края области. Пользоваться им надо осторожно. На крутой поверхности с частым сечением нормальный пояс между соседними уровнями сам по себе уже ячейки, и порог в ячейку выкосит карту. Инструмент предупреждает в журнале, если отсеял больше половины поясов. Умолчание ноль, то есть отсева нет.\n\n**Уверенность горизонталей** размечает участки, где линия проведена по слабым данным. Разбор приёма и полей drop_min и drop_mean ниже, в разделе про подозрительные участки.': 'Builds isolines from a raster: a uniform step or explicit levels (space-separated), index (thicker) isolines via the is_index flag, a short-line filter.\n\nLine rounding (Chaikin) lightly smooths the contours and removes "octagons" from a coarse grid. Smoothing of the field itself is done in the 2D Kriging tool.\n\nBicubic smoothing (grid densification ×2…×4) gives smooth isolines without "octagons" from a coarse grid - it is the main smoothing method, stronger than line rounding (Chaikin). It works for both lines and contour polygons: band boundaries coincide with the isolines.\n\nBy default it also builds contour polygons (bands between isolines) into a temporary layer - their boundaries COINCIDE with the isolines, coverage is continuous. To skip them - clear the "Contour polygons" field.\n\nFields: lines - the level value (default ELEV) and is_index (1 on index lines); polygons - ELEV_MIN/ELEV_MAX (band range). The **Topographic labels** tick gives the lines a single direction relative to the slope, so that the top of the figure always faces up the slope, as on a topographic map. QGIS measures the top of a label from the direction of the line, so no text rotation needs to be set. The layer keeps an up_side field: 1 means the line was left as it was, 0 that it was reversed.\n\nImportant: the layer labelling must be allowed to show upside-down labels. Otherwise QGIS turns the text around for readability and cancels the effect of reversing the lines. In the **Structure** and **Depression** styles this is already set. If you label with a style of your own, enable showing upside-down labels in the label rendering section. A topographic label is upside down by definition on a slope facing south.\n\n**Faults** are supplied as lines and cut the isolines exactly along the line, not along cell edges. The line also enters the network used to build the belts, so the boundary of a belt runs exactly along the fault. The break lives in the vector part: the grid itself stays solid, with no holes in it.\n\n**Corridor width at a fault** is given in cells, the default is one. Why it is needed: the values on the two sides of a fault differ by the whole throw, while the jump falls on a pair of neighbouring cells. The contourer draws every intermediate level at once in that gap, and a strip of crowded isolines appears along the line. It carries no geological meaning, it is interpolation across a break the bed does not know about. The strip is cut out, and the ends of the freed isolines are snapped to the line itself.\n\nZero switches the cutting off. There is no point taking less than a cell: the jump occupies exactly one cell. Noticeably more and isolines that run along the fault for a reason will start to disappear.\n\nAt the dying end of a fault a short stretch of crowded isolines remains, about the width of the corridor, and that is right in meaning: the break has come to nothing there, the surface closes up and there is nothing to tear. Isolines going round the end converge into a narrow bundle, which is exactly how a dying fault looks on a structural map.\n\n**Smallest polygon thickness** is given in cells and filters out narrow strips of belts. The thickness is taken as twice the area over the perimeter. The threshold is meant against fragments at a break where fault lines have not been supplied: at open pits, cliffs and the edge of the area. It must be used with care. On a steep surface with a fine interval a normal belt between neighbouring levels is itself narrower than a cell, and a threshold of one cell will mow the map down. The tool warns in the log if it has filtered out more than half of the belts. The default is zero, that is, no filtering.\n\n**Contour confidence** marks the stretches where a line was drawn over weak data. The device itself and the drop_min and drop_mean fields are covered below, in the section on suspicious stretches.',
    'Управление профилями обработки. Профиль - это именованный набор «вариограмма (Структура 1: наггет, тип, порог, радиус, азимут, оси) + отсев ураганных проб». Профили сохраняют «Вариограмма» и «Кросс-валидация», а подставляет «2D Kriging».\n\nДействие: Показать список (в Журнал), Сохранить вручную (по полям в «Дополнительно»), Удалить выбранный, Очистить все.\n\nСписки профилей в выпадающих полях обновляются при открытии окна: сохранили профиль - переоткройте инструмент, чтобы он появился.\n\nПоля в разделе «Дополнительно» нужны только для действия «Сохранить вручную». Они повторяют структуру вариограммы, и смысл у них тот же, что в 1.05.\n\n**Модель: тип** задаёт форму кривой. Сферическая выходит на плато на радиусе корреляции и подходит почти везде. Экспоненциальная подходит к плато асимптотически, годится для величин с резкими локальными изменениями. Гауссова даёт гладкое начало кривой и берётся для плавных полей вроде отметок кровли. Степенная плато не имеет вовсе и описывает поле без предела изменчивости.\n\n**Модель: анизотропия** это отношение малой оси к главной. Единица означает изотропию, круг. Значение 0.5 означает, что поперёк главного направления корреляция обрывается вдвое быстрее. Главное направление задаётся азимутом. Обе величины берутся с вариограммной карты 1.06, на глаз их не подобрать.\n\nПрофиль удобен тем, что одна подобранная вариограмма переиспользуется во всех расчётах по одному пласту, и в отчёте видно, каким набором параметров построена каждая карта.': 'Manage processing profiles. A profile is a named set of "variogram (Structure 1: nugget, type, sill, range, azimuth, axes) + outlier removal". Profiles are saved by "Variogram" and "Cross-validation", and applied by "2D Kriging".\n\nAction: Show list (to the Log), Save manually (from the fields under "Advanced"), Delete selected, Clear all.\n\nProfile drop-down lists refresh when the window opens: after saving a profile, reopen the tool so it appears.\n\nThe fields in the Advanced section are needed only for the Save manually action. They repeat the structure of a variogram and mean the same as in 1.05.\n\n**Model: type** sets the shape of the curve. Spherical reaches a sill at the correlation range and suits almost everywhere. Exponential approaches the sill asymptotically and suits quantities with sharp local changes. Gaussian gives a smooth start of the curve and is taken for smooth fields such as roof elevations. Power has no sill at all and describes a field without a limit of variability.\n\n**Model: anisotropy** is the ratio of the minor axis to the major one. One means isotropy, a circle. A value of 0.5 means that across the main direction the correlation dies out twice as fast. The main direction is set by the azimuth. Both values are read off the variogram map of 1.06, they cannot be guessed by eye.\n\nA profile is convenient because one fitted variogram is reused in every computation over the same bed, and the report then shows which set of parameters each map was built with.',
    'Считает карту фрактальной размерности поверхности вариограммным методом: в скользящем окне строится лог-лог вариограмма по лагам 1..N ячеек, её наклон даёт показатель Хёрста H, размерность D = 3 - H. Гладкие дифференцируемые участки дают D около 2, изрезанные и шумные - ближе к 3; перепады D подчёркивают зоны тектонических нарушений, границы блоков и смену характера рельефа кровли.\n\nВыход - грид D, готовый для «1.2 Изолинии из растра» (галка в дополнительных добавит H вторым каналом); глобальные D и H по всей поверхности печатаются в журнал. Малое окно (5-8 ячеек) показывает микроструктуру, большое (12-20) - региональные зоны. Растр должен быть в метрической системе координат.\n\n**Полурадиус окна** задаёт половину стороны скользящего окна в ячейках, то есть окно выходит размером в два полурадиуса плюс одна ячейка. Меньше окно - подробнее карта размерности, но оценка в каждом окне менее устойчива, потому что строится по меньшему числу пар. Восемь ячеек это разумный старт, ниже четырёх результат становится шумом.': 'Computes a fractal-dimension map of a surface by the variogram method: a log-log variogram over lags of 1..N cells is built in a sliding window, its slope gives the Hurst exponent H, the dimension D = 3 - H. Smooth differentiable areas give D near 2, rugged and noisy ones tend to 3; the steps of D highlight zones of tectonic disturbance, block boundaries and changes of the roof relief character.\n\nThe output is a D grid ready for "1.2 Isolines from a raster" (an advanced checkbox adds H as band 2); the global D and H over the whole surface are printed to the log. A small window (5-8 cells) shows the microstructure, a large one (12-20) - regional zones. The raster must be in a metric CRS.\n\n**Window half-radius** sets half the side of the moving window in cells, so the window comes out two half-radii plus one cell across. A smaller window gives a more detailed map of the dimension, but the estimate in each window is less stable because it rests on fewer pairs. Eight cells is a reasonable start, below four the result turns into noise.',
    'Площадь водосбора приёмника: нагорной канавы, лотка, кювета дороги или контура карьера. Отвечает на вопрос, какую площадь приёмник перехватывает, когда самого приёмника на ЦМР нет.\n\nВходом служат линии или полигоны. Линия растеризуется в ячейки, все они берутся приёмниками, и водосбор это множество ячеек, чей путь стока приходит в любую ячейку трассы. Полигон считается приёмником целиком, и контур, и вся площадь внутри: внутри залитой депрессии (карьера) направления стока условны, и опора на всю внутренность снимает от них зависимость, дырки полигона входят в приёмник тоже. Трасса может быть ломаной, может пересекать водораздел и может выходить за рамку ЦМР: наружная часть просто не участвует.\n\nВрезка трассы - отдельная галочка и другой вопрос: удержит ли канава поток, если она мельче местных форм рельефа. Врезка опускает рельеф вдоль трассы на заданную глубину и тем самым меняет гидрологию, поэтому результат зависит от глубины и по умолчанию она выключена.\n\nВыход: полигоны водосборов с атрибутами (площадь, высоты, средний уклон, длина трассы или контура, площадь приёмника) и HTML-отчёт. Единицы метрические: ЦМР в метрах в метровой системе координат.\n\nВодосборы строятся по топологии рельефа. На территориях без чётких границ стока - плоские поймы, гидравлические перетоки, подпоры - результат следует проверять гидродинамическим моделированием.\n\n**Профиль врезки** задаёт форму канавы, которую инструмент вдавливает в рельеф. Постоянная глубина подходит для нагорной канавы с ровным дном. Жёлоб с уклоном к стоку задаёт дну падение, и вода в канаве не встаёт на плоских участках, а идёт к устью.': 'The catchment area of an intake: a hillside ditch, a chute, a road gutter or an open pit outline. It answers the question of how much area the intake intercepts when the intake itself is not present on the DEM.\n\nThe input is lines or polygons. A line is rasterised into cells, all of them are taken as seeds, and the catchment is the set of cells whose flow path arrives at any cell of the trace. A polygon is seeded by its whole interior together with the outline: inside a filled depression (an open pit) the flow directions are arbitrary, and seeding by the interior removes the dependence on them, the polygon holes are included in the seed as well. The trace may be a polyline, may cross a divide and may run outside the DEM frame: the outside part simply does not take part.\n\nBurning the trace is a separate checkbox and a different question: will the ditch hold the flow if it is shallower than the local landforms. Burning lowers the relief along the trace by a given depth and thereby changes the hydrology, so the result depends on the depth and it is off by default.\n\nOutput: catchment polygons with attributes (area, elevations, mean slope, trace or outline length, seed area) and an HTML report. Units are metric: a DEM in metres in a metric coordinate system.\n\nCatchments are built from the topology of the relief. On terrain without clear flow boundaries - flat floodplains, hydraulic transfers, backwater - the result should be verified by hydrodynamic modelling.\n\n**Burn profile** sets the shape of the ditch the tool presses into the relief. A constant depth suits a catch ditch with a level bottom. A trough sloping to the outlet gives the bottom a fall, so the water in the ditch does not stand still on flat stretches but moves towards the mouth.',
    'Создаёт точечный слой геофизических профилей для обучения и проверки инструментов без реальных данных. Параллельные профили с пикетами. Два режима.\n\nЭлектроразведка: кажущееся сопротивление ρк (Ом·м), потенциал естественного поля ЕП (мВ) и вызванная поляризация ВП (мВ/В). Заложена низкоомная аномалия компактным пятном (обводнение или замещение), а не полосой, поэтому профили не синхронны. ρк проваливается с фоновых десятков Ом·м до единиц, ЕП даёт отрицательный минимум. Поле rho_k интерполируется 2D Kriging или минимальной кривизной, аномалия оконтуривается изолиниями.\n\nОседания (мульда): оседание (мм) в виде мульды сдвижения над отработанной площадью, по нескольким турам. По одним пикетам можно посчитать разность между турами.\n\nВо всех режимах добавлены отметка z (м) и истинное значение без шума для проверки точности интерполяции против эталона. Диапазоны и число туров меняются в разделе «Дополнительно».\n\nПоля электроразведки: profile, picket_m, pk, z, rho_k, rho_true, sp, vp. Поля оседаний: profile, picket_m, pk, tour, z, settle, settle_true.\n\n**Шаг пикетов** задаёт расстояние между точками вдоль профиля в метрах. Он же задаёт подробность учебных данных: двадцать метров это обычная съёмочная сеть, мельче стоит брать, чтобы посмотреть поведение инструментов на плотных наблюдениях.': 'Creates a point layer of geophysical profiles for learning and testing the tools without real data. Parallel profiles with pickets. Two modes.\n\nElectrical prospecting: apparent resistivity rho_k (Ohm*m), self-potential SP (mV) and induced polarisation IP (mV/V). A low-resistivity anomaly is embedded as a compact spot (water saturation or replacement), not a stripe, so the profiles are not synchronous. rho_k drops from a background of tens of Ohm*m to units, SP shows a negative minimum. The rho_k field is interpolated with 2D Kriging or minimum curvature, the anomaly is outlined by isolines.\n\nSubsidence (trough): settlement (mm) as a subsidence trough over a mined area, across several tours. The difference between tours at the same pickets gives the settlement rate.\n\nIn all modes a surface elevation z (m) and a noise-free true value are added, to check interpolation accuracy against a reference. Ranges and the number of tours are changed under Advanced.\n\nElectrical fields: profile, picket_m, pk, z, rho_k, rho_true, sp, vp. Subsidence fields: profile, picket_m, pk, tour, z, settle, settle_true.\n\n**Picket step** sets the distance between points along a profile in metres. It also sets the detail of the teaching data: twenty metres is an ordinary survey network, going finer makes sense to watch how the tools behave on dense observations.',
    'Загружает по рамке из OpenStreetMap слои для работы с рельефом: водотоки (в OSM рисуются вниз по течению, это готовые тальвеги), водоёмы как плоскости постоянной высоты, вершины с отметками ele, обрывы и насыпи как линии разрыва, береговую линию. Выход в СК проекта. Публичные серверы Overpass имеют лимиты, для больших территорий уменьшайте рамку. Водоёмы берутся из замкнутых контуров way, составные мультиполигоны пока пропускаются. Выход: до пяти слоёв в группе Топография. Общие поля name и osm_id, у водотоков дополнительно waterway, у водоёмов water, у вершин ele (высота, м), у обрывов kind. Данные: © участники OpenStreetMap, ODbL.\n\n**Предел площади рамки** страхует от запроса на пол-страны: сервер такой запрос отклонит, а ожидание займёт минуты. При превышении инструмент останавливается и просит уменьшить рамку.\n\n**Таймаут запроса** задаёт, сколько ждать ответа. Публичный сервер бывает загружен, и при отказе запрос уходит на зеркало. Увеличивать стоит для больших рамок, а не для медленного канала.': 'Downloads terrain-related layers from OpenStreetMap by extent: watercourses (drawn downstream in OSM, ready-made streamlines), water bodies as constant-elevation planes, peaks with ele marks, cliffs and embankments as breaklines, the coastline. Output is in the project CRS. Public Overpass servers have limits, shrink the extent for large areas. Water bodies come from closed ways, compound multipolygons are skipped for now. Output: up to five layers in the Topography group. Common fields name and osm_id, watercourses also carry waterway, water bodies water, peaks ele (elevation, m), cliffs kind. Data: © OpenStreetMap contributors, ODbL.\n\n**Extent area limit** guards against a request covering half a country: the server will reject it and the wait will take minutes. On exceeding the limit the tool stops and asks for a smaller extent.\n\n**Request timeout** sets how long to wait for an answer. The public server is sometimes busy, and on a refusal the request goes to a mirror. Raising it makes sense for large extents rather than for a slow connection.',
    'Кригинг с внешним дрейфом (External Drift): оценка по точкам, когда поле закономерно связано со сторонней величиной, известной всюду в виде растра (структурная поверхность соседнего пласта, грубая региональная модель, сейсмический атрибут).\n\nДрейф снимается регрессией значения на растр, кригуются остатки, дрейф возвращается к оценке из того же растра. Это та же схема регрессия-кригинг, что и флажок «Снять полиномиальный тренд» у «2D Kriging», только дрейф здесь не функция координат, а функция внешнего значения. Степень дрейфа 1 (линейный) почти всегда достаточна.\n\nВариограмму задавайте по ОСТАТКАМ. Растр дрейфа и точки должны быть в одной системе координат. Ячейки вне покрытия растра дрейфа остаются пустыми. Поиск, анизотропия, обрезка и стандартная ошибка - как у «2D Kriging».\n\n**Сгладить грид (Гаусс)** и **радиус сглаживания** в ячейках применяются к готовому гриду и оценку не меняют. Это косметика карты: после сглаживания пробы воспроизводятся уже неточно. С внешним дрейфом сглаживать обычно не нужно, поверхность и так следует за формой дрейфа.': 'External Drift Kriging: estimation from points when the field is systematically related to a secondary variable known everywhere as a raster (the structural surface of an adjacent seam, a coarse regional model, a seismic attribute).\n\nThe drift is removed by regressing the value on the raster, the residuals are kriged, and the drift is added back from the same raster. This is the same regression-kriging scheme as the "Remove polynomial trend" option of "2D Kriging", only here the drift is a function of the external value, not of the coordinates. Drift degree 1 (linear) is almost always enough.\n\nFit the variogram on the RESIDUALS. The drift raster and the points must share the CRS. Cells outside the drift raster coverage are left empty. Search, anisotropy, clipping and the standard error are as in "2D Kriging".\n\n**Smooth the grid (Gaussian)** and the **smoothing radius** in cells are applied to the finished grid and do not change the estimate. This is cosmetics for the map: after smoothing the samples are no longer honoured exactly. With an external drift smoothing is usually not needed, the surface already follows the shape of the drift.',
    'Скользящий контроль (leave-one-out): каждая скважина по очереди исключается, её значение предсказывается кригингом по остальным, и сравнивается с фактическим. Помогает подобрать вариограмму (наггет, радиус, модель) по ошибке, а не на глаз.\n\nВ Журнал выводятся метрики: ME (смещение, к 0), RMSE (меньше - лучше), MSDR (к 1 - вариограмма адекватна по масштабу), R. Перебирайте параметры и сравнивайте RMSE и MSDR.\n\nСлой остатков (опц.) - точки со следующими полями:\n  • <номер скважины> - если задано «Поле номера скважины»;\n  • <имя проверяемого поля> - фактическое значение (факт);\n  • z_est - оценка кригинга по остальным точкам (LOO);\n  • error - оценка минус факт (минус: занижено, плюс: завышено);\n  • abs_error - модуль ошибки;\n  • std_resid - стандартизованный остаток: error / стандартную ошибку кригинга, со знаком (это не дисперсия).\nПо нему видно, где модель промахивается.\n\nHTML-отчёт (по умолчанию) открывается в просмотрщике результатов: интерактивный график «оценка vs факт», гистограмма ошибок и таблица метрик.\n\n**Снять полиномиальный тренд** и **степень тренда** повторяют одноимённые параметры 2D Kriging и нужны, чтобы проверка шла в тех же условиях, что и будущий расчёт. Проверять вариограмму без тренда, а строить грид с ним, значит мерить не то.\n\n**Сохранить профиль под именем** записывает проверенный набор параметров под указанным именем, и дальше он подставляется в 2D Kriging одним выбором. Пустое поле означает, что профиль не сохраняется, и результат проверки остаётся только в отчёте.': 'Leave-one-out cross-validation: each well is removed in turn, its value is predicted by kriging from the rest, and compared with the actual value. Helps tune the variogram (nugget, range, model) by error rather than by eye.\n\nThe Log reports metrics: ME (bias, → 0), RMSE (lower is better), MSDR (→ 1 means the variogram is adequate in scale), R. Try different parameters and compare RMSE and MSDR.\n\nResiduals layer (opt.) - points with the following fields:\n  • <well number> - if "Well number field" is set;\n  • <validated field name> - the actual value;\n  • z_est - kriging estimate from the other points (LOO);\n  • error - estimate minus actual (minus: under, plus: over);\n  • abs_error - absolute error;\n  • std_resid - standardized residual: error / kriging standard error, signed (not a variance).\nIt shows where the model misses.\n\nThe HTML report (default) opens in the result viewer: an interactive "estimate vs actual" plot, an error histogram and a metrics table.\n\n**Remove a polynomial trend** and **trend degree** repeat the parameters of the same name in 2D Kriging and are needed so that the check runs under the same conditions as the future computation. Checking a variogram without a trend and then building the grid with one means measuring the wrong thing.\n\n**Save the profile under a name** records the checked set of parameters under the given name, and from then on it is applied in 2D Kriging by a single choice. An empty field means the profile is not saved and the result of the check stays in the report only.',
    '**Что построить** - выбор из трёх готовых наборов: карьер с бермами, простой уступ или отвал. Для первого знакомства берите как есть, менять ничего не нужно. Параметры ниже действуют только при выборе «по своему», а что поставил пресет, печатается в журнал.\n\nСоздаёт демо-карьер: волнистое основание, эллиптический карьер с уступами и бермами, съезд, прорезающий уступы, отвал с плоским верхом и сходящаяся нагорная канава. Всё детерминировано зерном.\n\nГлавная ценность - второй выход, истинные структурные линии с трёхмерными вершинами: бровки, подошвы и тальвег канавы с полем связи пары. На дуге съезда линии уступов разорваны, у канавы три линии сходятся в точку. Пара растр-линии служит эталоном для 2.19 (полнота и точность детектора меряются числом), готовым входом для построения поверхности и учебным примером - и всё это без закрытых данных.\n\n**Охват** только кладёт демо на место и не меняет его размер: формы карьера физичны, уступ 10 м при откосе 7 м, и растягивать их до километров бессмысленно. Размер задают «Ширина» и «Высота» в ячейках. Если у проекта система координат местная или неизвестная, выберите её же в «СК выхода»: пересчёт охвата из неизвестной системы в UTM даёт бессмыслицу, и демо уедет неизвестно куда.\n\nВыходы: GeoTIFF float32 и линейный слой LineStringZ с полями kind (brow, toe, thalweg) и link, в группе Топография.\n\n**Шум съёмки** добавляет к учебному рельефу случайную составляющую заданной величины в метрах. Нужен затем, что на идеально гладком карьере детектор бровок работает слишком хорошо и ничего не проверяет. Умолчание близко к точности реальной съёмки. Ноль даёт чистый эталон, десятые доли метра - условия, близкие к рабочим.': '**What to build** - a choice of three ready sets: a pit with berms, a simple bench or a dump. For a first acquaintance take it as it is, nothing needs changing. The parameters below take effect only with "my own" chosen, and what the preset set is printed to the log.\n\nCreates a demo open pit: an undulating base, an elliptical pit with benches and berms, a ramp cutting through the benches, a flat-top dump and a converging perimeter ditch. Everything is deterministic by the seed.\n\nThe main value is the second output, the true structural lines with 3D vertices: crests, toes and the ditch thalweg with a pair link field. On the ramp arc the bench lines are honestly broken, and the three ditch lines converge into a point. The raster-lines pair serves as a reference for 2.19 (the completeness and the precision of the detector are measured as numbers), as a ready input for surface building and as a teaching example - all without closed data.\n\n**The extent** only places the demo and does not change its size: the shapes of the pit are physical, a 10 m bench on a 7 m face, and stretching them to kilometres makes no sense. The size is set by the width and the height in cells. If the project uses a local or an unknown coordinate system, choose the same one in the output CRS: reprojecting an extent out of an unknown system into UTM gives nonsense and the demo lands nowhere.\n\nOutputs: a float32 GeoTIFF and a LineStringZ layer with the kind (brow, toe, thalweg) and link fields, in the Topography group.\n\n**Survey noise** adds a random component of the given size in metres to the teaching relief. It is needed because on a perfectly smooth open pit the detector of breaks works too well and tests nothing. The default is close to the accuracy of a real survey. Zero gives a clean reference, tenths of a metre give conditions close to the working ones.',
    'Строит вариограммную карту - поверхность γ(h_x, h_y): для всех пар берётся вектор разноса (dx, dy) и полудисперсия 0.5·(Δz)², значения усредняются по 2D-сетке лагов. Анизотропия видна как эллипс: направление, вдоль которого γ растёт медленнее (длиннее радиус), - ось максимальной непрерывности (для складчатости - простирание).\n\nВ Журнал и в HTML-отчёт выводятся оценки: азимут главной оси (геогр., 0=С, по часовой), коэффициент анизотропии (малая/главная) и радиус. Их можно подставить в структуру вариограммы «2D Kriging» (азимут, анизотропия, радиус a) - это и есть учёт анизотропии в кригинге. Оценка индикативная: уточняйте по самому хитмапу.\n\nЕсли структура близка к изотропной или радиус меньше ячейки - анизотропия не оценивается (помечается «не выражена»).\n\nОпц. растр поверхности (в координатах лага, начало в 0,0) - для тех, кто хочет видеть карту на холсте.\n\n**Бинов на полуось** задаёт подробность карты. Больше бинов - мельче ячейка карты и виднее направление, но в каждую ячейку попадает меньше пар, и картина рассыпается на шум. На редкой сети берите ближе к нижней границе.\n\n**Мин. количество пар в ячейке** отсекает ячейки, где пар слишком мало для оценки. Такие ячейки остаются пустыми, а не показывают случайное число. Если карта вышла дырявой, уменьшайте число бинов, а не этот порог.': 'Builds a variogram map - the γ(h_x, h_y) surface: for every pair, the separation vector (dx, dy) and the semivariance 0.5·(Δz)² are taken, and values are averaged over a 2D grid of lags. Anisotropy shows as an ellipse: the direction along which γ grows more slowly (longer range) is the axis of maximum continuity (for folding - the strike).\n\nThe Log and the HTML report give estimates: the major-axis azimuth (geographic, 0=N, clockwise), the anisotropy ratio (minor/major) and the range. They can be fed into the "2D Kriging" variogram structure (azimuth, anisotropy, range a) - this is how anisotropy enters kriging. The estimate is indicative: refine it against the heatmap itself.\n\nIf the structure is near-isotropic or the range is smaller than a cell - anisotropy is not estimated (marked "not expressed").\n\nOpt. surface raster (in lag coordinates, origin at 0,0) - for those who want to see the map on the canvas.\n\n**Bins per half-axis** sets the detail of the map. More bins mean a finer map cell and a clearer direction, but fewer pairs fall into each cell and the picture breaks up into noise. On a sparse network take a value closer to the lower bound.\n\n**Minimum pairs in a cell** rejects cells where there are too few pairs for an estimate. Such cells stay empty rather than showing a random number. If the map has come out full of holes, reduce the number of bins rather than this threshold.',
    'Превращает линии бровок и подошв в рабочие структурные линии: снимает отметки с ЦМР, собирает формы бровка-подошва и раскладывает их по двум слоям, Верх и Низ, с общим полем связи. Выход подаётся дальше как есть, руками править нечего.\n\n**Два сценария, и второй важнее первого.** Первый очевидный: линии пришли из 2.19 по плотной съёмке. Второй - линии уже есть в топографическом комплекте, потому что бровки там описываются обязательно и своими кодами классификатора. Детектор в этом случае не нужен вовсе, а нужно ровно то, что делает этот инструмент: вид линии в комплекте закодирован, а какая бровка с какой подошвой образуют форму - нет, и связь приходится собирать. Таких комплектов много, а плотных съёмок мало.\n\n**ЦМР необязательна.** Спуск по склону отвечает на один вопрос: где низ. Когда у линий есть собственные отметки (выход 2.22), ответ уже в данных, и рельеф не нужен - подошвой считается ближайшая линия, лежащая ниже бровки. Это разрывает круг топографического сценария, где рельеф как раз и строится, и подать его в спуск нечего. С ЦМР работает прежний спуск, он точнее на кривом борту с узкими бермами.\n\nПары собираются спуском по склону, а не по близости. От каждой пробной вершины бровки идёт спуск по направлениям стока, пока не встретится подошва, и подошвы голосуют. Так работает физика уступа: вода с бровки скатывается по откосу ровно к его подошве. На кривом борту с узкими бермами ближайшая по расстоянию подошва часто принадлежит соседнему уступу, и выбор по близости ошибается там, где спуск прав.\n\nОдна подошва может собрать несколько бровок, и это норма: трассировка режет длинную бровку на куски, и все куски спускаются к той же подошве. Результат группируется по подошве, поэтому в выходе форма это одна подошва и множество бровок при ней с общим полем связи, а подошва пишется один раз, а не по разу на каждую бровку.\n\nНепарные линии не пропадают молча, а уходят в третий слой с причиной в атрибуте: спуск не дошёл до подошвы (обычно предел пути мал или бровка ложная) либо спуск разошёлся по разным подошвам (обычно линия склеила два уступа).\n\n**Поле вида читается терпимо.** 2.19 пишет brow и toe, а в сдаточном комплекте будет «Бровка откоса, насыпи, выемки укреплённая» или код 62350400. Понимаются значения из 2.19, коды бровок из классификаторов и названия со словами «бровка» или «подошва». Как прочитано каждое значение, печатается в журнал таблицей, а неузнанные значения перечисляются отдельно и пропускаются: угадывать вслепую хуже, чем сказать «не понял».\n\nОтсечка по перепаду повторяет фильтр 2.19: сюда можно подать весь слой кандидатов и отобрать значимые прямо здесь, не заводя отдельный отфильтрованный слой. Выходы: два линейных слоя LineStringZ с полями kind и link, готовые входы для построения поверхности, и слой непарных.\n\n**Доля согласных проб** задаёт порог, при котором пара бровки и подошвы считается состоявшейся. Согласной считается проба вдоль линии, где встречный ход подтверждает пару. Значение 0.4 означает, что подтвердить должны хотя бы четыре пробы из десяти. Поднимать стоит на чистой съёмке, где ложных пар быть не должно, опускать - на шумной, где иначе слишком много линий уйдёт в непарные.': 'Turns crest and toe lines into working structural lines: takes the elevations off the DEM, assembles crest-toe pairs and lays them into two layers, Top and Bottom, with a shared link field. The output goes on as it is, with nothing to fix by hand.\n\n**Two scenarios, and the second matters more.** The first is obvious: the lines came from 2.19 over a dense survey. In the second the lines are already in a topographic deliverable, where crests are described as a matter of course and carry their own classifier codes. No detector is needed there, and what is needed is exactly what this tool does: the kind of a line is coded in the deliverable, but which crest goes with which toe is not, and the link has to be assembled. There are many such deliverables and few dense surveys.\n\nThe pairs are assembled by descending the slope rather than by proximity. From every probe vertex of a crest a descent follows the flow directions until a toe is met, and the toes vote. This is how a bench works physically: water from the crest runs down the face exactly to its toe. On a curved wall with narrow berms the nearest toe by distance often belongs to the neighbouring bench, and the choice by proximity errs where the descent is right.\n\nOne toe may gather several crests, and that is normal: the tracing cuts a long crest into pieces, and every piece descends to the same toe. The result is grouped by the toe, so in the output a form is one toe with a set of crests at it sharing a link field, and the toe is written once rather than once per crest.\n\nUnpaired lines do not vanish silently, they go into a third layer with the reason in an attribute: the descent did not reach a toe (usually the path limit is too small or the crest is false) or the descent scattered over different toes (usually the line has glued two benches together).\n\n**The DEM is optional.** The descent answers a single question: which way is down. When the lines carry elevations of their own (the output of 2.22) the answer is already in the data and no terrain is needed - the toe is the nearest line lying below the crest. This breaks the circle of the topographic scenario, where the terrain is being built in the first place and there is nothing to feed the descent. With a DEM the former descent is used, it is more accurate on a curved wall with narrow berms.\n\n**The kind field is read tolerantly.** 2.19 writes brow and toe, while a deliverable will carry something like a reinforced crest of a slope, a fill or a cut, or the code 62350400. The values of 2.19, the crest codes of the classifiers and names containing the words for a crest or a toe are all understood. How every value was read is printed to the log as a table, and unrecognised values are listed separately and skipped: guessing blindly is worse than saying it did not understand.\n\nThe drop cut-off repeats the filter of 2.19: the whole candidate layer can be supplied here and the significant ones selected right away, with no separate filtered layer. Outputs: two LineStringZ layers with the kind and link fields, ready inputs for surface building, and a layer of the unpaired.\n\n**Share of agreeing samples** sets the threshold at which a pair of a break and a toe counts as established. A sample along the line counts as agreeing when the reverse pass confirms the pair. A value of 0.4 means at least four samples out of ten have to confirm it. Raise it on a clean survey where there should be no false pairs, lower it on a noisy one where too many lines would otherwise go to the unpaired layer.',
    '\n\n**Заполнить понижения** готовит рельеф к расчёту стока. В спутниковой ЦМР полно ложных ям в одну-две ячейки: шум съёмки, тени под кронами, мосты, принятые за плотины. Поток в такой яме останавливается, и вниз по течению сеть распадается. Заполнение поднимает дно ям до уровня перелива по Planchon-Darboux.\n\n**Epsilon уклона** задаёт минимальный уклон в метрах на ячейку, который остаётся после заполнения. Без него залитое понижение становится идеально плоским, а на плоскости у потока нет направления, и он снова встаёт. Значение по умолчанию 0.001 м пренебрежимо мало для отметок и достаточно для однозначного направления. Ноль оставляет плоскость.\n\nФлажок стоит снимать осознанно. Карст, мульды оседания и бессточные котловины это НАСТОЯЩИЕ понижения, и заполнение их сотрёт. На Верхнекамском месторождении это прямо касается участков оседания над отработанными панелями.': '\n\n**Fill depressions** prepares the relief for a flow computation. A satellite DEM is full of false pits one or two cells across: survey noise, shadows under canopy, bridges taken for dams. The flow stops in such a pit and downstream the network falls apart. Filling raises the bottom of the pits to the level of the spill following Planchon-Darboux.\n\n**Slope epsilon** sets the minimum slope in metres per cell that is left after filling. Without it a filled depression becomes perfectly flat, and on a flat surface the flow has no direction and stops again. The default of 0.001 m is negligible for the elevations and enough for an unambiguous direction. Zero leaves the surface flat.\n\nThe checkbox should be cleared deliberately. Karst, subsidence troughs and closed basins are REAL depressions, and filling will wipe them out. At the Verkhnekamskoye deposit this applies directly to the areas of subsidence above mined-out panels.',
    'Ординарный или простой кригинг 2D по точечному слою (ядро GSLIB KB2D). Вариограмма: наггет плюс структура (сферическая, экспоненциальная, гауссова или степенная) с азимутом и анизотропией. Подходит для отметок пласта, мощностей, ФМС, химии и любых числовых атрибутов.\n\n**Радиус поиска** 0 означает всю выборку, **размер ячейки** 0 - одну пятидесятую меньшей стороны охвата, **радиус корреляции** 0 - треть большей стороны. **Обрезка по контуру скважин** убирает экстраполяцию за пределы данных.\n\n**Разломы** подаются линиями и работают барьерами влияния: замер, отрезок до которого пересекает линию, в выборку ячейки не идёт. Поверхность вдоль разлома рвётся, и изолинии по такому гриду рвутся сами.\n\nЛиния не обязана рассекать площадь насквозь. У затухающего разлома влияние огибает его конец, и поверхность выше конца смыкается. Сгущение изолиний у самого конца при этом нормально: амплитуда там падает до нуля, и все промежуточные уровни укладываются в узкую полосу.\n\nБарьер проверяется точной геометрией, в сетку разлом не переводится. Поэтому косая линия не даёт ступенек по ячейкам, пустых ячеек вдоль разлома не возникает, а крыло у ячейки определяется само стороной, с которой лежит её центр. Отдельно делить площадь на блоки не нужно. Замер, стоящий точно на разломе, виден с обоих крыльев: скважина на линии принадлежит обеим сторонам.\n\n**Приближение названо прямо.** По видимости отбираются только соседи, а ковариации между самими замерами остаются евклидовыми. Занулять их нельзя: система кригинга потеряет положительную определённость и станет вырожденной. Именно из-за этого кригинг с разломами встречается редко, а часть пакетов от него отказалась в пользу минимальной кривизны. Ценой приближения служит то, что вблизи линии веса соседей рассчитаны без учёта разрыва между ними самими. На расстояниях порядка радиуса корреляции это заметно мало, на очень частой сети у самой линии может слегка занижать контраст.\n\nРазломы принимает и 1.03, и 1.04. В 1.03 барьер разрывает связи между узлами сетки, в 1.04 - режет готовые изолинии по линии.\n\n**Преобразование значения** логарифмирует данные перед кригингом. Нужно для величин с разбросом на порядки: коэффициент фильтрации, водопроводимость, содержания с длинным хвостом. Кригуется ln(Z), оценка возвращается через exp и является медианной. Вариограмму, наггет и среднее простого кригинга при этом задавайте в единицах ln. Стандартная ошибка пересчитывается в исходные единицы. Точки со значением ноль и ниже отбрасываются с предупреждением: логарифм для них не определён.\n\n**Снять полиномиальный тренд** превращает расчёт в регрессию-кригинг. Тренд заданной степени снимается методом наименьших квадратов, кригуются остатки, после построения грида тренд добавляется к оценке обратно. Нужно там, где данные имеют явный уклон по площади и вариограмма из-за него не выходит на плато. Степень 1 это наклонная плоскость, 2 - квадратичная поверхность.\n\n**Дискретизация блока** работает только при включённом блочном кригинге. Ячейка мысленно разбивается на сетку точек N на N, и ковариации усредняются по ним, то есть оценивается среднее по блоку, а не значение в его центре. Четыре хватает почти всегда, большее N считается дольше, а точность растёт мало.\n\n**Сгладить грид (Гаусс)** применяется к готовому гриду и не меняет самой оценки. Радиус задаётся в ячейках. Это косметика для карты, а не улучшение модели: пробы после сглаживания воспроизводятся уже неточно. При блочном кригинге обычно не нужно, там усреднение по блоку уже сгладило поверхность.': 'Ordinary or simple 2D kriging over a point layer (GSLIB KB2D core). Variogram: nugget plus structure (spherical, exponential, Gaussian or power) with azimuth and anisotropy. Suitable for roof elevations, thicknesses, geomechanical properties, chemistry and any numeric attribute.\n\n**Search radius** 0 means the whole sample, **cell size** 0 means one fiftieth of the shorter side of the extent, **correlation range** 0 means a third of the longer side. **Clipping to the well hull** removes extrapolation beyond the data.\n\n**Faults** are supplied as lines and act as barriers of influence: a measurement whose segment to the cell crosses the line does not enter the sample. The surface breaks along the fault, and isolines over such a grid break by themselves.\n\nThe line need not cut across the area. For a dying fault the influence goes round its end, and above the end the surface closes up. A crowding of isolines right at the end is normal: the throw falls to zero there, and all intermediate levels fit into a narrow strip.\n\nThe barrier is tested by exact geometry and the fault is never turned into cells. So a slanted line produces no steps along cell edges, no empty cells appear along the fault, and the wing of a cell follows by itself from the side its centre lies on. There is no need to split the area into blocks. A measurement standing exactly on the fault is visible from both wings: a borehole on the line belongs to both sides.\n\n**The approximation is named plainly.** Only the neighbours are selected by visibility, while the covariances between the measurements themselves stay Euclidean. Zeroing them is not allowed: the kriging system would lose positive definiteness and become singular. That is exactly why kriging with faults is rare, and part of the packages dropped it in favour of minimum curvature. The price of the approximation is that near the line the weights of the neighbours are computed without regard for the break between the neighbours themselves. At distances of the order of the correlation range this matters little, on a very dense network right at the line it can slightly lower the contrast.\n\nFaults are accepted by 1.03 and 1.04 as well. In 1.03 the barrier cuts the links between grid nodes, in 1.04 it cuts ready isolines along the line.\n\n**Value transform** takes the logarithm of the data before kriging. It is needed for quantities spread over orders of magnitude: hydraulic conductivity, transmissivity, grades with a long tail. ln(Z) is kriged and the estimate is returned through exp, which makes it a median estimate. The variogram, the nugget and the simple-kriging mean must then be given in ln units. The standard error is converted back to the original units. Points with a value of zero or below are dropped with a warning: the logarithm is not defined for them.\n\n**Remove a polynomial trend** turns the run into regression kriging. A trend of the given degree is removed by least squares, the residuals are kriged, and after the grid is built the trend is added back to the estimate. It is needed where the data have a clear slope across the area and the variogram does not reach a sill because of it. Degree 1 is a tilted plane, degree 2 a quadratic surface.\n\n**Block discretisation** works only with block kriging switched on. The cell is mentally split into an N by N set of points and the covariances are averaged over them, so what is estimated is the mean over the block rather than the value at its centre. Four is almost always enough, a larger N takes longer while the accuracy grows little.\n\n**Smooth the grid (Gaussian)** is applied to the finished grid and does not change the estimate itself. The radius is given in cells. It is cosmetics for the map rather than an improvement of the model: after smoothing the samples are no longer honoured exactly. With block kriging it is usually not needed, the averaging over the block has already smoothed the surface.',
    'Строит изотропную экспериментальную полувариограмму по точкам: облако пар усредняется по интервалам расстояния (лагам). Помогает увидеть структуру данных и подобрать вариограмму глазом, а не угадывать наггет/радиус.\n\nПоле группировки (необязательно): для каждого значения поля строится своя кривая - удобно сравнить совокупности разной плотности (поверхностная и подземная разведка) и проверить, общая ли у них структура.\n\nПодбор модели (по умолчанию) даёт наггет C0, вклад C, радиус a и модель. Сохраните их в профиль (поле «Сохранить профиль под именем») и подставьте в «2D Kriging». Можно наложить уже заданную модель, чтобы сравнить её с облаком.\n\nHTML-отчёт открывается в просмотрщике результатов: точки по лагам, модель и подобранная кривая, линия дисперсии данных. Слой-таблица (опц.) содержит лаг, γ(h) и количество пар для построения в QGIS.\n\n**Устойчивая оценка (Кресси-Хокинса)** считает полудисперсию по формуле, которая гасит выбросы. Обычная оценка Матерона возводит разность пары в квадрат, поэтому одна ураганная проба задирает весь лаг, в который она попала. Включайте, когда точки по лагам скачут без видимой причины, а на исходных данных есть отдельные резко выделяющиеся значения.\n\n**Ураганные пробы: перцентиль обрезки** отсекает хвосты распределения до расчёта. Значение 1 означает, что отбрасывается по одному проценту с каждого края. Ноль выключает. Флажок **Срезать к границе** меняет способ: вместо удаления точки её значение приравнивается к границе интервала. Удаление уместно там, где выброс это ошибка замера, срезка - там, где значение реально, но его влияние надо ограничить.\n\n**Минимум точек в группе** работает вместе с полем группировки. Задаётся в процентах от выборки, но не ниже тридцати точек: вариограмма по десятку пар это шум, а не структура. Группы меньше порога пропускаются, и в журнал уходит их список.': 'Builds an isotropic experimental semivariogram from points: the pair cloud is averaged over distance intervals (lags). Helps reveal the structure of the data and set the variogram by eye, instead of guessing the nugget/range.\n\nGrouping field (optional): a separate curve is built for each field value - handy to compare populations of different density (surface vs underground survey) and check whether they share a structure.\n\nModel fitting (default) gives nugget C0, contribution C, range a and the model. Save them to a profile (the "Save profile as" field) and apply them in "2D Kriging". You can overlay an already-set model to compare it with the cloud.\n\nThe HTML report opens in the result viewer: points by lag, the model and the fitted curve, the data-variance line. The table layer (opt.) holds lag, γ(h) and the number of pairs for plotting in QGIS.\n\n**Robust estimator (Cressie-Hawkins)** computes the semivariance by a formula that damps outliers. The usual Matheron estimator squares the difference of a pair, so a single wild sample lifts the whole lag it fell into. Switch it on when the lag points jump about without a visible reason while the data hold a few sharply standing values.\n\n**Outliers: clipping percentile** cuts the tails of the distribution before the computation. A value of 1 means one percent is dropped from each end. Zero switches it off. The **Cap to the boundary** checkbox changes the method: instead of removing a point, its value is set to the boundary of the interval. Removal fits where an outlier is a measurement error, capping fits where the value is real but its influence has to be limited.\n\n**Minimum points in a group** works together with the grouping field. It is given as a percent of the sample but never below thirty points: a variogram over a dozen pairs is noise rather than structure. Groups below the threshold are skipped and listed in the log.',
    'Последовательная гауссова симуляция: ансамбль равновероятных реализаций вместо одной сглаженной оценки кригинга. Каждая реализация воспроизводит гистограмму и вариограмму данных и проходит через скважины, поэтому по набору реализаций видна НЕОПРЕДЕЛЁННОСТЬ - разброс, квантили P10/P50/P90, вероятность превышения отсечки. Там, где реализации расходятся, оценка слабая.\n\nВариограмма нормальных баллов подбирается автоматически. Выходы - растры: среднее по ансамблю (E-type), стандартное отклонение (неопределённость), квантили P10/P50/P90 и при заданном пороге карта вероятности превышения. Время растёт с размером грида и числом реализаций - начинайте с грубой ячейки и 50-100 реализаций.\n\n**Медиана P50** это отдельный выход, а не просто одна из реализаций. По каждой ячейке берётся медиана значений по всему ансамблю. В отличие от среднего она устойчива к отдельным выбросам и, в отличие от кригинга, не сглаживает поле: карта P50 сохраняет изменчивость, потому что собрана из реализаций, каждая из которых воспроизводит вариограмму. Вместе с P10 и P90 даёт интервал, в котором значение лежит с вероятностью восемьдесят процентов.\n\n**Радиус поиска** ограничивает окрестность, из которой узел берёт соседей. Ноль означает автоматический выбор: три радиуса вариограммы, дальше корреляция всё равно исчерпана. Уменьшать имеет смысл ради скорости на большой сети.\n\n**Максимум соседей на узел** ограничивает размер системы, решаемой в каждом узле. Это главная ручка скорости: время растёт примерно как куб этого числа. Двадцати обычно достаточно, больше сорока смысла не имеет - дальние соседи получают почти нулевые веса.\n\n**Зерно ГСЧ** делает прогон воспроизводимым. При одном и том же зерне и тех же параметрах ансамбль получается тем же самым, что важно для отчёта и для сравнения вариантов. Ноль означает случайное зерно, то есть каждый запуск даёт свой ансамбль.': 'Sequential Gaussian simulation: an ensemble of equally probable realizations instead of a single smoothed kriging estimate. Each realization reproduces the data histogram and variogram and passes through the boreholes, so the set of realizations shows the UNCERTAINTY - spread, P10/P50/P90 quantiles, exceedance probability. Where the realizations diverge, the estimate is weak.\n\nThe normal-score variogram is fitted automatically. Outputs are rasters: the ensemble mean (E-type), the standard deviation (uncertainty), the P10/P50/P90 quantiles and, when a threshold is set, an exceedance-probability map. Runtime grows with grid size and the number of realizations - start with a coarse cell and 50-100 realizations.\n\n**Median P50** is a separate output rather than one of the realisations. For each cell the median over the whole ensemble is taken. Unlike the mean it is robust to single outliers, and unlike kriging it does not smooth the field: the P50 map keeps the variability, because it is assembled from realisations each of which honours the variogram. Together with P10 and P90 it gives the interval holding the value with a probability of eighty percent.\n\n**Search radius** limits the neighbourhood a node draws its neighbours from. Zero means an automatic choice: three variogram ranges, beyond which the correlation is exhausted anyway. Reducing it makes sense for speed on a large network.\n\n**Maximum neighbours per node** limits the size of the system solved at each node. This is the main speed control: the time grows roughly as the cube of this number. Twenty is usually enough, beyond forty there is no point, distant neighbours get almost zero weights.\n\n**RNG seed** makes a run reproducible. With the same seed and the same parameters the ensemble comes out identical, which matters for a report and for comparing variants. Zero means a random seed, so every run gives its own ensemble.',
    'Индикаторный кригинг по категориальному полю (минтип, литотип, класс). На каждый класс строится индикатор 0/1, кригуется отдельно (ядро GSLIB KB2D), оценка обрезается в 0-1, затем вероятности по классам нормируются к сумме 1. Кодом класса не кригуем: у категорий нет порядка.\n\nВыход: многополосный растр вероятностей (полоса на класс, в описании полосы - имя класса), растр зон (код самого вероятного класса, соответствие кодов в Журнале) и растр уверенности (максимум вероятности). Пустые и NULL исключаются. Вариограмма каждого индикатора подбирается автоматически (сферическая).\n\n**Доля самородка** правит подобранную модель, когда карта расходится с фактами. При ненулевом самородке кригинг не проходит через данные: в узле со скважиной оценка тянется к соседям, и одиночная скважина среди чужого класса получает вероятность ниже своей. Ноль в этом поле делает оценку точной в точках замеров. Общая дисперсия при этом сохраняется, меняется только гладкость поверхности. Подобранные доли печатаются в журнал, так что сначала стоит просто посмотреть на них.\n\nТочность в точке ещё зависит от ячейки: оценка считается в центре ячейки, и если в одну ячейку попало несколько скважин разных классов, ни один самородок этого не разведёт. Ячейку задавайте мельче расстояния между соседними скважинами.\n\n**Радиус поиска** ограничивает окрестность узла, ноль означает всю выборку. **Мин. и макс. количество точек** задают, сколько соседей берётся в систему: ниже минимума ячейка остаётся пустой, выше максимума лишние отбрасываются по удалённости. Минимум защищает от оценки по одной-двум точкам на краю сети, максимум держит время счёта. Разумные значения: минимум 2-4, максимум 16-24.\n\n**Бикубическое сглаживание границ** сгущает грид вдвое или вчетверо перед выделением классов. Это убирает лестницу из прямых углов на границе класса, идущую от размера ячейки. Сглаживается поле вероятностей, а не сама граница, поэтому принадлежность класса не меняется, меняется её разрешение.\n\n**Скругление границ (Chaikin)** работает уже по готовым линиям границ и просто убирает углы. Действует слабее сгущения и применяется поверх него. Ноль итераций отключает.': 'Indicator kriging\n\n**Search radius** limits the neighbourhood of a node, zero means the whole sample. **Minimum and maximum number of points** set how many neighbours enter the system: below the minimum the cell is left empty, above the maximum the extra ones are dropped by distance. The minimum guards against an estimate made from one or two points at the edge of the network, the maximum keeps the run time down. Reasonable values: minimum 2 to 4, maximum 16 to 24.\n\n**Bicubic smoothing of the boundaries** refines the grid two- or fourfold before the classes are extracted. This removes the staircase of right angles on a class boundary that comes from the cell size. What is smoothed is the field of probabilities rather than the boundary itself, so class membership does not change, only its resolution does.\n\n**Boundary rounding (Chaikin)** works on the finished boundary lines and simply removes corners. It acts more weakly than refinement and is applied on top of it. Zero iterations switches it off.',
    'Загружает ЦМР по рамке из открытого хранилища, без регистрации и ключей. Два источника на выбор. Copernicus GLO-30 - модель поверхности (DSM): высоты по кронам и кровлям, плиточная мозаика без швов. GEDTM30 - модель рельефа (DTM, CC BY 4.0): лес и постройки сняты машинным обучением по ICESat-2 и GEDI, под пологом леса точнее GLO-30, единый глобальный COG. Данные перепроецируются в метрическую систему координат с кубической интерполяцией. Флажок гидрокоррекции заполняет ложные понижения, чтобы вода текла вниз. Выход готов для изолиний (1.04) и всей группы Топография. Выход: GeoTIFF float32, высоты в метрах, слой попадает в группу Топография дерева слоёв. Данные: GLO-30 - Copernicus DEM © ESA, GEDTM30 - © OpenGeoHub, CC BY 4.0.\n\n**Размер ячейки** задаётся в метрах целевой системы координат. Исходные данные тридцатиметровые, поэтому мельче тридцати брать незачем: подробности от этого не появится, вырастет только объём файла.\n\n**Сглаживание (FPDEMS)** убирает избыточную шероховатость спутниковой ЦМР, не заваливая бровки. Работает оно не с высотами, а с полем нормалей поверхности: вес соседа тем больше, чем ближе его нормаль к нормали центра. На бровке нормали по сторонам разные, поэтому сглаживание через неё подавлено, и грань сохраняется. Обычные фильтры вроде среднего или Гаусса размывают всё подряд.\n\nТри ручки настраивают его поведение. **Окно нормалей** задаёт размер площадки в ячейках, по которой ищутся соседи: больше окно - сильнее сглаживание и дольше счёт. **Порог различия нормалей** в градусах решает, что считать бровкой: сосед с нормалью, отличающейся сильнее порога, в сглаживание не идёт. Меньше порог - больше граней сохраняется, но и шум держится дольше. **Число проходов** повторяет подгонку высот под сглаженное поле нормалей: обычно хватает значения по умолчанию, увеличивать стоит, если поверхность осталась ступенчатой.\n\n**Предел числа плиток** страхует от случайно огромной рамки. Плитка это квадрат один на один градус, и запрос на пол-страны означает часы загрузки и гигабайты. При превышении инструмент останавливается и просит уменьшить рамку. Поднимайте предел осознанно.': 'Downloads a DEM by extent from an open store, no registration or keys. Two sources to choose from. Copernicus GLO-30 is a surface model (DSM): heights over canopy and rooftops, a seamless tiled mosaic. GEDTM30 is a terrain model (DTM, CC BY 4.0): forest and buildings removed by machine learning from ICESat-2 and GEDI, more accurate than GLO-30 under forest canopy, a single global COG. The data is reprojected into a metric coordinate system with cubic resampling. The hydrological correction checkbox fills spurious depressions so water flows downhill. The output is ready for isolines (1.04) and the whole Topography group. Output: a float32 GeoTIFF, elevations in meters, the layer lands in the Topography group of the layer tree. Data: GLO-30 - Copernicus DEM © ESA, GEDTM30 - © OpenGeoHub, CC BY 4.0.\n\n**Cell size** is given in metres of the target coordinate system. The source data are thirty metres, so there is no point taking anything finer: no detail will appear, only the file size will grow.\n\n**Smoothing (FPDEMS)** removes the excess roughness of a satellite DEM without flattening the breaks of slope. It works not on the elevations but on the field of surface normals: the weight of a neighbour is the larger the closer its normal is to the normal of the centre. On a break of slope the normals on the two sides differ, so smoothing across it is suppressed and the edge survives. Ordinary filters such as a mean or a Gaussian blur everything alike.\n\nThree controls tune its behaviour. **Normals window** sets the size of the patch in cells over which the neighbours are looked up: a larger window means stronger smoothing and a longer run. **Normal difference threshold** in degrees decides what counts as a break of slope: a neighbour whose normal differs by more than the threshold does not enter the smoothing. A smaller threshold keeps more edges but also keeps the noise longer. **Number of passes** repeats the fitting of the elevations to the smoothed field of normals: the default is usually enough, raise it if the surface has stayed stepped.\n\n**Tile limit** guards against an accidentally huge extent. A tile is a one-by-one degree square, and a request covering half a country means hours of downloading and gigabytes of data. On exceeding the limit the tool stops and asks for a smaller extent. Raise the limit deliberately.',
    'Ординарный или простой кригинг 2D по точечному слою (ядро GSLIB KB2D). Вариограмма: наггет плюс структура (сферическая, экспоненциальная, гауссова или степенная) с азимутом и анизотропией. Подходит для отметок пласта, мощностей, ФМС, химии и любых числовых атрибутов.\n\n**Радиус поиска** 0 означает всю выборку, **размер ячейки** 0 - одну пятидесятую меньшей стороны охвата, **радиус корреляции** 0 - треть большей стороны. **Обрезка по контуру скважин** убирает экстраполяцию за пределы данных.\n\n**Разломы** подаются линиями и работают барьерами влияния: замер, отрезок до которого пересекает линию, в выборку ячейки не идёт. Поверхность вдоль разлома рвётся, и изолинии по такому гриду рвутся сами.\n\nЛиния не обязана рассекать площадь насквозь. У затухающего разлома влияние огибает его конец, и поверхность выше конца смыкается. Сгущение изолиний у самого конца при этом нормально: амплитуда там падает до нуля, и все промежуточные уровни укладываются в узкую полосу.\n\nБарьер проверяется точной геометрией, в сетку разлом не переводится. Поэтому косая линия не даёт ступенек по ячейкам, пустых ячеек вдоль разлома не возникает, а крыло у ячейки определяется само стороной, с которой лежит её центр. Отдельно делить площадь на блоки не нужно. Замер, стоящий точно на разломе, виден с обоих крыльев: скважина на линии принадлежит обеим сторонам.\n\n**Приближение названо прямо.** По видимости отбираются только соседи, а ковариации между самими замерами остаются евклидовыми. Занулять их нельзя: система кригинга потеряет положительную определённость и станет вырожденной. Именно из-за этого кригинг с разломами встречается редко, а часть пакетов от него отказалась в пользу минимальной кривизны. Ценой приближения служит то, что вблизи линии веса соседей рассчитаны без учёта разрыва между ними самими. На расстояниях порядка радиуса корреляции это заметно мало, на очень частой сети у самой линии может слегка занижать контраст.\n\nРазломы принимает и 1.03, и 1.04. В 1.03 барьер разрывает связи между узлами сетки, в 1.04 - режет готовые изолинии по линии.': 'Ordinary or simple 2D kriging over a point layer (GSLIB KB2D core). Variogram: nugget plus structure (spherical, exponential, Gaussian or power) with azimuth and anisotropy. Suitable for roof elevations, thicknesses, geomechanical properties, chemistry and any numeric attribute.\n\n**Search radius** 0 means the whole sample, **cell size** 0 means one fiftieth of the shorter side of the extent, **correlation range** 0 means a third of the longer side. **Clipping to the well hull** removes extrapolation beyond the data.\n\n**Faults** are supplied as lines and act as barriers of influence: a measurement whose segment to the cell crosses the line does not enter the sample. The surface breaks along the fault, and isolines over such a grid break by themselves.\n\nThe line need not cut across the area. For a dying fault the influence goes round its end, and above the end the surface closes up. A crowding of isolines right at the end is normal: the throw falls to zero there, and all intermediate levels fit into a narrow strip.\n\nThe barrier is tested by exact geometry and the fault is never turned into cells. So a slanted line produces no steps along cell edges, no empty cells appear along the fault, and the wing of a cell follows by itself from the side its centre lies on. There is no need to split the area into blocks. A measurement standing exactly on the fault is visible from both wings: a borehole on the line belongs to both sides.\n\n**The approximation is named plainly.** Only the neighbours are selected by visibility, while the covariances between the measurements themselves stay Euclidean. Zeroing them is not allowed: the kriging system would lose positive definiteness and become singular. That is exactly why kriging with faults is rare, and part of the packages dropped it in favour of minimum curvature. The price of the approximation is that near the line the weights of the neighbours are computed without regard for the break between the neighbours themselves. At distances of the order of the correlation range this matters little, on a very dense network right at the line it can slightly lower the contrast.\n\nFaults are accepted by 1.03 and 1.04 as well. In 1.03 the barrier cuts the links between grid nodes, in 1.04 it cuts ready isolines along the line.',
    'Строит грид методом минимальной кривизны: поверхность ведёт себя как тонкая упругая пластина, проходящая через данные с минимумом изгиба (решение бигармонического уравнения). Метод неточный - данные воспроизводятся приближённо, зато поверхность максимально гладкая, поэтому его любят для карт геофизических полей и любых плавных величин.\n\nНатяжение подмешивает мембранный член: 0 - чистая минимальная кривизна, 1 - натянутая мембрана (меньше выбросов между пробами). Отдельно задаётся натяжение на границе. Решение итеративное (SOR обходом девятью цветами): сетка сходится, пока изменение узла не станет меньше порога невязки или не исчерпаются итерации.\n\nРазмер ячейки 0 означает одну пятидесятую меньшей стороны охвата. **Порог невязки** 0 означает сотую долю процента от размаха данных. **Коэффициент релаксации** ускоряет сходимость, значения около 1.85 обычно оптимальны, единица даёт чистый Гаусса-Зейделя. **Анизотропия** растягивает натяжение по осям: значение больше единицы делает поверхность более гладкой вдоль Y.\n\nВыход - грид, готовый для 1.04. Это детерминированная альтернатива кригингу без подбора вариограммы, тогда как кригинг даёт ещё и оценку погрешности.\n\n**Разломы** подаются линиями и рвут поверхность. Барьер живёт на рёбрах между соседними узлами сетки: ребро, пересечённое линией, выпадает из шаблона, и связь между крыльями обрывается. Разлом остаётся линией и в сетку не переводится, поэтому косая линия не ложится ступеньками, а крыло у узла определяется само стороной, с которой он лежит.\n\nВ полосе шириной два узла вдоль линии решение переходит на мембрану по неперекрытым соседям. Шаблон минимальной кривизны дотягивается на две ячейки и перешагнул бы разрыв, а выбрасывать из него отдельные точки нельзя: он перестанет приближать бигармонию. Практическое следствие одно - у самой линии поверхность чуть менее гладкая, чем вдали от неё.\n\nУзел, попавший ровно на линию, приписывается к одной стороне. Это важно для разлома, проведённого по оси шахтной сетки: иначе он не перекрыл бы ни одного ребра.\n\nЛиния не обязана рассекать площадь насквозь: выше конца разлома рёбра не перекрыты, и поверхность там смыкается. Те же разломы принимают 1.02 и 1.04.': 'Builds a grid by minimum curvature: the surface behaves like a thin elastic plate passing through the data with the least bending (a solution of the biharmonic equation). The method is not exact, the data are honoured approximately, but the surface is as smooth as possible, which is why it is favoured for maps of geophysical fields and any smooth quantity.\n\nTension mixes in a membrane term: 0 is pure minimum curvature, 1 is a taut membrane (fewer overshoots between samples). Boundary tension is set separately. The solution is iterative (SOR over nine colours): the grid converges until the change of a node falls below the residual threshold or the iterations run out.\n\n**Cell size** 0 means one fiftieth of the shorter side of the extent. **Residual threshold** 0 means one hundredth of a percent of the data range. **Relaxation factor** speeds up convergence, values around 1.85 are usually best, one gives plain Gauss-Seidel. **Anisotropy** stretches the tension along the axes: a value above one makes the surface smoother along Y.\n\nThe output is a grid ready for 1.04. This is a deterministic alternative to kriging without fitting a variogram, whereas kriging also gives an estimate of the error.\n\n**Faults** are supplied as lines and break the surface. The barrier lives on the edges between neighbouring grid nodes: an edge crossed by the line drops out of the stencil, and the link between the wings is cut. The fault stays a line and is never turned into cells, so a slanted line does not fall into steps, and the wing of a node follows by itself from the side it lies on.\n\nWithin a band two nodes wide along the line the solution switches to a membrane over the unblocked neighbours. The minimum-curvature stencil reaches two cells out and would step over the break, and single points cannot be dropped from it: it would stop approximating the biharmonic. There is one practical consequence - right at the line the surface is slightly less smooth than away from it.\n\nA node that falls exactly on the line is assigned to one side. That matters for a fault drawn along an axis of a mine grid: otherwise it would block no edge at all.\n\nThe line need not cut across the area: above the end of the fault the edges are not blocked and the surface closes up there. The same faults are accepted by 1.02 and 1.04.',
    'Строит изолинии из растра: равномерный шаг или явные уровни (через пробел), главные (утолщённые) изолинии флагом is_index, фильтр коротких линий.\n\nСкругление линий (Chaikin) слегка сглаживает контуры и убирает «октагоны» от грубого грида. Сглаживание самого поля выполняется в инструменте 2D Kriging.\n\nБикубическое сглаживание (сгущение грида ×2…×4) даёт гладкие изолинии без «октагонов» от грубой сетки - это основной способ сглаживания, сильнее скругления линий (Chaikin). Работает и для линий, и для контурных полигонов: границы поясов совпадают с изолиниями.\n\nПо умолчанию строит и контурные полигоны (пояса между изолиниями) во временный слой - их границы СОВПАДАЮТ с изолиниями, покрытие сплошное. Чтобы их не строить - очистите поле «Контурные полигоны».\n\nПоля: линии - значение уровня (по умолчанию ELEV) и is_index (1 у главных); полигоны - ELEV_MIN/ELEV_MAX (диапазон пояса).\n\nФлажок **Топографические подписи** задаёт линиям одно направление относительно склона, и тогда верх цифры всегда смотрит вверх по склону, как на топокарте. QGIS отсчитывает верх подписи от направления линии, поэтому поворот текста задавать не нужно. В слое остаётся поле up_side: 1 означает, что линия оставлена как была, 0 что развёрнута.\n\nВажно: в настройках подписей слоя должно быть разрешено показывать перевёрнутые подписи. Иначе QGIS доворачивает текст ради читаемости и сводит разворот линий на нет. В стилях **Структура** и **Депрессия** это уже настроено. Если подписываете своим стилем, включите в разделе отрисовки подписей показ перевёрнутых. Топографическая подпись по определению бывает перевёрнутой: на склоне, обращённом на юг, цифра читается вверх ногами.\n\n**Разломы** подаются линиями и режут изолинии точно по линии, а не по ячейкам. Линия входит и в сеть построения поясов, поэтому граница пояса идёт ровно по разлому. Разрыв живёт в векторной части: грид при этом сплошной, дырок в нём нет.\n\n**Ширина коридора у разлома** задаётся в ячейках, умолчание одна. Зачем она нужна: значения по разные стороны разлома отличаются на всю амплитуду, а скачок приходится на пару соседних ячеек. Контурер рисует в этом промежутке все промежуточные уровни разом, и вдоль линии получается полоса частых изолиний. Геологического смысла у неё нет, это интерполяция поперёк разрыва, которого пласт не знает. Полоса вырезается, а концы освободившихся изолиний притягиваются к самой линии.\n\nНоль отключает вырезание. Меньше ячейки брать незачем: скачок занимает ровно ячейку. Заметно больше - начнут пропадать изолинии, идущие вдоль разлома по делу.\n\nУ затухающего конца разлома остаётся короткий участок частых изолиний длиной около ширины коридора, и это верно по смыслу: разрыв там сошёл на нет, поверхность смыкается, и рвать её нечем. Изолинии, огибающие конец, сходятся в узкий пучок - так затухающий разлом и выглядит на структурной карте.\n\n**Наименьшая толщина полигона** задаётся в ячейках и отсекает узкие полосы поясов. Толщина считается как удвоенная площадь на периметр. Порог задуман против обрывков у разрыва там, где линии разломов не поданы: у карьеров, обрывов и края области. Пользоваться им надо осторожно. На крутой поверхности с частым сечением нормальный пояс между соседними уровнями сам по себе уже ячейки, и порог в ячейку выкосит карту. Инструмент предупреждает в журнале, если отсеял больше половины поясов. Умолчание ноль, то есть отсева нет.': 'Builds isolines from a raster: a uniform step or explicit levels (space-separated), index (thicker) isolines via the is_index flag, a short-line filter.\n\nLine rounding (Chaikin) lightly smooths the contours and removes "octagons" from a coarse grid. Smoothing of the field itself is done in the 2D Kriging tool.\n\nBicubic smoothing (grid densification ×2…×4) gives smooth isolines without "octagons" from a coarse grid - it is the main smoothing method, stronger than line rounding (Chaikin). It works for both lines and contour polygons: band boundaries coincide with the isolines.\n\nBy default it also builds contour polygons (bands between isolines) into a temporary layer - their boundaries COINCIDE with the isolines, coverage is continuous. To skip them - clear the "Contour polygons" field.\n\nFields: lines - the level value (default ELEV) and is_index (1 on index lines); polygons - ELEV_MIN/ELEV_MAX (band range). The **Topographic labels** tick gives the lines a single direction relative to the slope, so that the top of the figure always faces up the slope, as on a topographic map. QGIS measures the top of a label from the direction of the line, so no text rotation needs to be set. The layer keeps an up_side field: 1 means the line was left as it was, 0 that it was reversed.\n\nImportant: the layer labelling must be allowed to show upside-down labels. Otherwise QGIS turns the text around for readability and cancels the effect of reversing the lines. In the **Structure** and **Depression** styles this is already set. If you label with a style of your own, enable showing upside-down labels in the label rendering section. A topographic label is upside down by definition on a slope facing south.\n\n**Faults** are supplied as lines and cut the isolines exactly along the line, not along cell edges. The line also enters the network used to build the belts, so the boundary of a belt runs exactly along the fault. The break lives in the vector part: the grid itself stays solid, with no holes in it.\n\n**Corridor width at a fault** is given in cells, the default is one. Why it is needed: the values on the two sides of a fault differ by the whole throw, while the jump falls on a pair of neighbouring cells. The contourer draws every intermediate level at once in that gap, and a strip of crowded isolines appears along the line. It carries no geological meaning, it is interpolation across a break the bed does not know about. The strip is cut out, and the ends of the freed isolines are snapped to the line itself.\n\nZero switches the cutting off. There is no point taking less than a cell: the jump occupies exactly one cell. Noticeably more and isolines that run along the fault for a reason will start to disappear.\n\nAt the dying end of a fault a short stretch of crowded isolines remains, about the width of the corridor, and that is right in meaning: the break has come to nothing there, the surface closes up and there is nothing to tear. Isolines going round the end converge into a narrow bundle, which is exactly how a dying fault looks on a structural map.\n\n**Smallest polygon thickness** is given in cells and filters out narrow strips of belts. The thickness is taken as twice the area over the perimeter. The threshold is meant against fragments at a break where fault lines have not been supplied: at open pits, cliffs and the edge of the area. It must be used with care. On a steep surface with a fine interval a normal belt between neighbouring levels is itself narrower than a cell, and a threshold of one cell will mow the map down. The tool warns in the log if it has filtered out more than half of the belts. The default is zero, that is, no filtering.',
    'Создаёт точечный слой «скважин» со случайными координатами в пределах области и значением абстрактного компонента (X, %), имеющим пространственную структуру. Предназначен для обучения и проверки инструментов без реальных данных.\n\nОбласть задаётся экстентом (можно по слою, по холсту карты, вручную координатами или рисованием). «Гладкость» задаёт радиус корреляции как долю охвата (больше - крупнее «пятна»). «Доля наггета» задаёт долю дисперсии, приходящуюся на короткомасштабный шум (чем больше, тем меньше предсказуемость). В Журнал выводится стартовая вариограмма - её уточняют кросс-валидацией.\n\nПоля результата: номер скважины, абсолютная отметка кровли (roof), мощность (thick) и содержание X. Диапазоны кровли и мощности по умолчанию близки к реальным калийным данным; их можно изменить в разделе «Дополнительно».\n\nНеобязательные галки добавляют поля для смежных инструментов: напор (head) для градиента потока и категориальный минтип для индикаторного кригинга. Галка K и T добавляет напор и лог-нормальные поля K (коэф. фильтрации) и T = K·мощность для «Удельного расхода (Дарси)». Включённый вывод «Поверхность дрейфа» даёт растр сторонней поверхности и поле dz, линейно с ней связанное, для кригинга с внешним дрейфом.\n\n**Амплитуда разлома** задаёт учебный разрыв. Генератор проводит линию поперёк площади, не доводя её до краёв, и прибавляет амплитуду к значению у всех скважин по одну сторону. Прибавка действует только в пределах длины линии, поэтому выше её конца обе стороны одинаковы и поверхность там обязана смыкаться. Линия выдаётся отдельным выходом **Разлом (демо)** и подаётся дальше в 1.02, 1.03 и 1.04.\n\nПри нуле линия всё равно выдаётся, но сдвига нет: разлом есть геометрически и отсутствует по значениям. Это удобный контрольный прогон - барьер работает, а рвать нечего.\n\nДля проверки барьера берите амплитуду заметно больше радиуса корреляции, тогда скачок очевиден. Для проверки коридора в 1.04 хватит амплитуды порядка сечения изолиний.\n\nЗначение амплитуды пишется в атрибут throw выходного слоя разлома. Атрибут справочный: инструменты его не читают, барьер у них чисто геометрический и о величине смещения не знает.': 'Creates a point "wells" layer with random coordinates within an area and a value of an abstract component (X, %), with a spatial structure. Intended for learning and testing the tools without real data.\n\nThe area is set by an extent (by layer, by map canvas, manually by coordinates or by drawing). "Smoothness" sets the correlation range as a fraction of the extent (larger - bigger "patches"). "Nugget fraction" sets the share of variance due to short-range noise (larger - less predictable). The Log prints the starting variogram - refine it with cross-validation.\n\nResult fields: well number, absolute roof elevation (roof), thickness (thick) and grade X. The default roof and thickness ranges are close to real potash data; you can change them under "Advanced".\n\nOptional checkboxes add fields for the neighbouring tools: head for the flow gradient and a categorical mineral type for indicator kriging. The K and T checkbox adds head and log-normal K (conductivity) and T = K·thickness fields for the \'Specific discharge (Darcy law)\' tool. Enabling the "Drift surface" output gives a raster of a secondary surface and a dz field linearly related to it, for external drift kriging.\n\n**Fault throw** sets a teaching break. The generator draws a line across the area without bringing it to the edges and adds the throw to the value at every well on one side. The addition acts only within the length of the line, so above its end both sides are equal and the surface must close up there. The line is produced as a separate output **Fault (demo)** and is fed further into 1.02, 1.03 and 1.04.\n\nAt zero the line is still produced but there is no shift: the fault exists geometrically and is absent in the values. That is a convenient control run - the barrier works and there is nothing to tear.\n\nTo check the barrier take a throw noticeably larger than the correlation range, then the jump is obvious. To check the corridor in 1.04 a throw of the order of the contour interval is enough.\n\nThe value of the throw is written into the throw attribute of the output fault layer. The attribute is for reference: the tools do not read it, their barrier is purely geometric and knows nothing of the size of the displacement.',
    'Вырожденных обрывков отброшено: %d%s.': 'Degenerate fragments dropped: %d%s.',
    'разрез разломами': 'split by faults',
    'разбор мультичастей': 'multipart to single parts',
    'вырезание коридора': 'cutting the corridor',
    'Концов притянуто к разлому: %d.': 'Ends snapped to the fault: %d.',
    'Концов продлено: %d, из них коротко у разлома: %d.': 'Ends extended: %d, of them short at the fault: %d.',
    'Отсеяно больше половины поясов (%d из %d). Порог толщины задуман против обрывков у разрыва. На крутой поверхности с частым сечением нормальный пояс сам по себе уже ячейки, и порог выкашивает карту. Уменьшите порог или поставьте ноль.': 'More than half of the belts were filtered out (%d of %d). The thickness threshold is meant against fragments at a break. On a steep surface with a fine interval a normal belt is itself narrower than a cell, and the threshold mows the map down. Lower the threshold or set it to zero.',
    'Ширина коридора у разлома, ячеек (0 - не вырезать)': 'Corridor width at a fault, cells (0 - do not cut)',
    'Коридор у разлома: полоса %.4g ед. карты…': 'Corridor at the fault: a strip of %.4g map units…',
    'Коридор у разлома %.4g ед. карты. Скачок значений приходится на пару соседних ячеек, и контурер рисует в этом промежутке все промежуточные уровни разом. Полоса вырезается, концы притягиваются к линии.': 'Corridor at the fault %.4g map units. The jump of values falls on a pair of neighbouring cells, and the contourer draws every intermediate level at once in that gap. The strip is cut out and the ends are snapped to the line.',
    'Коридор у разлома выключен. Вдоль линии останется полоса частых изолиний шириной в ячейку: это интерполяция поперёк разрыва.': 'The corridor at the fault is off. A strip of crowded isolines one cell wide will stay along the line: that is interpolation across the break.',
    'Диаграмму можно построить по слою остатков.</i></p>': 'You can build a chart from the residuals layer.</i></p>',
    'Дисперсия данных': 'Data variance',
    'Дисперсия данных: %.4g. Ориентир: суммарный силл (C0 + вклады C) задавайте близким к ней. Наггет и силл - в абсолютных единицах дисперсии, не 0-1.': 'Data variance: %.4g. Guide: set the total sill (C0 + contributions C) close to it. Nugget and sill are in absolute variance units, not 0-1.',
    'Для сохранения укажите «Имя профиля».': 'To save, specify a "Profile name".',
    'Загружено алгоритмов: %d': 'Algorithms loaded: %d',
    'Задайте шаг изолиний или уровни.': 'Specify an isoline step or levels.',
    'Задан только наггет (структурный вклад C = 0): кригинг выродится в локальное среднее, поверхность будет почти плоской.': 'Only the nugget is set (structural contribution C = 0): kriging degenerates into a local mean and the surface will be almost flat.',
    'Итог: параметры можно утверждать - перенесите ту же вариограмму и настройки поиска в «2D Kriging».': 'Verdict: the parameters can be accepted - carry the same variogram and search settings into "2D Kriging".',
    'Итог: параметры стоит подправить (см. ниже) и повторить кросс-валидацию перед финальным кригингом.': 'Verdict: the parameters should be adjusted (see below) and cross-validation repeated before the final kriging.',
    'Контур валидной области…': 'Valid-area outline…',
    'Контур скважин: выпуклая оболочка…': 'Well outline: convex hull…',
    'Кресси-Хокинса': 'Cressie-Hawkins',
    'Кровля: максимум, м (абс.)': 'Roof: maximum, m (abs.)',
    'Кровля: минимум, м (абс.)': 'Roof: minimum, m (abs.)',
    'Кросс-валидация %s · %s': 'Cross-validation %s · %s',
    'Кросс-валидация по %d точкам…': 'Cross-validation over %d points…',
    'Макс. точек': 'Max. points',
    'Максимальное расстояние': 'Maximum distance',
    'Максимальное расстояние (%.4g) меньше типичного шага между точками (~%.4g) - пар почти нет. Значение задаётся в единицах слоя (обычно метры).': 'The maximum distance (%.4g) is smaller than the typical point spacing (~%.4g) - almost no pairs. The value is in layer units (usually metres).',
    'Максимум значения должен быть больше минимума.': 'The maximum value must be greater than the minimum.',
    'Матерона': 'Matheron',
    'Мин. точек': 'Min. points',
    'Мощность: максимум, м': 'Thickness: maximum, m',
    'Мощность: минимум, м': 'Thickness: minimum, m',
    'Назначение диапазонов поясам…': 'Assigning ranges to bands…',
    'Не задана корректная область (экстент).': 'No valid area (extent) specified.',
    'Не удалось добавить %s: %s': 'Could not add %s: %s',
    'Не удалось открыть растр для сглаживания.': 'Could not open the raster for smoothing.',
    'Не удалось открыть растр для сгущения.': 'Could not open the raster for densification.',
    'Не удалось открыть растр.': 'Could not open the raster.',
    'Не удалось перечислить группы: %s': 'Could not enumerate groups: %s',
    'Не удалось разобрать уровень: %r': 'Could not parse level: %r',
    'Недостаточно валидных точек с числовым значением.': 'Not enough valid points with a numeric value.',
    'Недостаточно уровней для полигонов.': 'Not enough levels for polygons.',
    'Ни один пояс не получил значения.': 'No band received a value.',
    'Нижняя граница': 'Lower bound',
    'Низкая корреляция (R=%.2f): модель слабо предсказывает - попробуйте другой радиус, модель или анизотропию; либо это предел данных (короткомасштабная изменчивость, зоны замещения).': "Low correlation (R=%.2f): the model predicts poorly - try a different range, model or anisotropy; or it is the data's limit (short-range variability, replacement zones).",
    'Нодирование сети линий (GEOS)…': 'Noding the line network (GEOS)…',
    'Номер скважины': 'Well number',
    'Обрезка по маске…': 'Clipping by mask…',
    'Осталось профилей: %d%s': 'Profiles remaining: %d%s',
    'Отсев: перцентиль, %': 'Outliers: percentile, %',
    'Оценка': 'Estimator',
    'Оценка vs факт': 'Estimate vs actual',
    'Оценка кригинга (LOO)': 'Kriging estimate (LOO)',
    'Ошибка (оценка − факт)': 'Error (estimate − actual)',
    'Подбор: модель %s, C0=%.4g, C=%.4g, a=%.4g, R²=%.3f': 'Fit: model %s, C0=%.4g, C=%.4g, a=%.4g, R²=%.3f',
    'Подвыборка точек': 'Point subsampling',
    'Подставлен профиль «%s»: %s.': 'Applied profile "%s": %s.',
    'Полигонизация не дала результата (проверьте изолинии/контур).': 'Polygonization produced nothing (check the isolines/outline).',
    'Полигонизация поясов (GEOS)…': 'Polygonizing bands (GEOS)…',
    'После отсева ураганных проб осталось < 2 точек.': 'After outlier removal fewer than 2 points remain.',
    'После усреднения совпадающих точек осталось < 2 узлов.': 'After averaging coincident points fewer than 2 nodes remain.',
    'Поясов получено (GEOS): %d': 'Bands produced (GEOS): %d',
    'Прервано пользователем.': 'Cancelled by the user.',
    'Продление открытых концов за контур…': 'Extending open ends past the outline…',
    'Пропущено точек: %d без значения «%s»%s. Прочитано: %d.': 'Points skipped: %d without a value for "%s"%s. Read: %d.',
    'Профиль «%s» сохранён: %s': 'Profile "%s" saved: %s',
    'Профиль «%s» сохранён: изотропная модель из автоподбора + текущий отсев. Анизотропию можно задать в кросс-валидации или инструменте «Профили».': 'Profile "%s" saved: isotropic auto-fit model + current outlier removal. Anisotropy can be set in cross-validation or the "Profiles" tool.',
    'Профиль «%s» сохранён: проверенная модель Структуры 1 (с анизотропией, если задана) + отсев.': 'Profile "%s" saved: validated Structure 1 model (with anisotropy, if set) + outlier removal.',
    'Профиль «%s» удалён.': 'Profile "%s" deleted.',
    'Профиль не найден - использую значения из диалога. Список профилей обновляется при открытии окна инструмента.': 'Profile not found - using the dialog values. The profile list refreshes when the tool window opens.',
    'Радиус подбора (%.4g) достигает края окна (%.4g) - вариограмма не вышла на плато, радиус считайте нижней оценкой.': 'The fitted range (%.4g) reaches the window edge (%.4g) - the variogram did not reach a plateau; treat the range as a lower bound.',
    'Радиус поиска': 'Search radius',
    'Рекомендация: модель %s, наггет C0=%.4g, вклад C=%.4g (сумма %.4g), радиус a=%.4g. Качество подгонки R²=%.3f.': 'Recommendation: model %s, nugget C0=%.4g, contribution C=%.4g (total %.4g), range a=%.4g. Fit quality R²=%.3f.',
    'Сгенерировано скважин: %d. Поля: кровля (roof), мощность (thick), содержание X. Дисперсия X ≈ %.4g.': 'Wells generated: %d. Fields: roof, thickness (thick), grade X. Variance of X ≈ %.4g.',
    'Сглаживание грида (σ=%g яч.)…': 'Smoothing the grid (σ=%g cells)…',
    'Сглаживание поля (σ=%g яч.)…': 'Smoothing the field (σ=%g cells)…',
    'Сгущение грида ×%d (бикубика)…': 'Densifying the grid ×%d (bicubic)…',
    'Сетка %d x %d, ячейка %.4g, точек %d, структур %d': 'Grid %d x %d, cell %.4g, points %d, structures %d',
    'Скругление линий (Chaikin, %d итер.)…': 'Line rounding (Chaikin, %d iter.)…',
    'Слишком мало оценённых точек.': 'Too few estimated points.',
    'Совпадающих точек усреднено: %d (осталось %d)': 'Coincident points averaged: %d (%d remaining)',
    'Согласование концов изолиний с контуром…': 'Snapping isoline ends to the outline…',
    'Сохраните модель в профиль (поле «Сохранить профиль под именем»), проверьте «Кросс-валидацией» и подставьте профиль в «2D Kriging».': 'Save the model to a profile (the "Save profile as" field), check it with "Cross-validation" and apply the profile in "2D Kriging".',
    'Сохранённые профили (%d):': 'Saved profiles (%d):',
    'Сохранённых профилей нет.': 'No saved profiles.',
    'Среднее (SK)': 'Mean (SK)',
    'Срезка (capping)': 'Capping',
    'Станд. остаток (со знаком)': 'Std. residual (signed)',
    'Стартовая вариограмма для X (кригинг/кросс-валидация): суммарный силл ≈ %.4g, наггет C0 ≈ %.4g, радиус ≈ %.4g (в единицах координат). Уточните наггет по кросс-валидации до MSDR ≈ 1.': 'Starting variogram for X (kriging/cross-validation): total sill ≈ %.4g, nugget C0 ≈ %.4g, range ≈ %.4g (in coordinate units). Refine the nugget via cross-validation until MSDR ≈ 1.',
    'Структура %d: показатель степенной модели ω=%.3g вне (0; 2) - приведён к диапазону.': 'Structure %d: power-model exponent ω=%.3g outside (0; 2) - clamped to range.',
    'Структура %d: степенная модель - поле «радиус a» это показатель ω (0<ω<2), а не радиус; задан 0, взят ω=1.': 'Structure %d: power model - the "range a" field is the exponent ω (0<ω<2), not a range; 0 given, ω=1 used.',
    'Суммарный порог близок к дисперсии данных (%.4g) - масштаб правдоподобен.': 'The total sill is close to the data variance (%.4g) - the scale is plausible.',
    'Суммарный порог заметно выше дисперсии данных (%.4g) - окно, вероятно, перешагивает тренд или безрудную зону. Уменьшите максимальное расстояние до локального масштаба и проверьте выбросы.': 'The total sill is noticeably above the data variance (%.4g) - the window likely crosses a trend or a barren zone. Reduce the maximum distance to a local scale and check for outliers.',
    'Суммарный порог заметно ниже дисперсии данных (%.4g): вариограмма не вышла на плато - увеличьте максимальное расстояние, возможен тренд или вторая структура.': 'The total sill is noticeably below the data variance (%.4g): the variogram did not reach a plateau - increase the maximum distance; a trend or a second structure is possible.',
    'Точек много - для расчёта пар использована случайная подвыборка %d точек.': 'Many points - a random subsample of %d points was used for pair computation.',
    'Точек оценено': 'Points estimated',
    'Точек оценено: %d из %d': 'Points estimated: %d of %d',
    'Точек экспериментальной вариограммы мало для подбора. Увеличьте количество лагов или максимальное расстояние.': 'Too few experimental variogram points to fit. Increase the number of lags or the maximum distance.',
    'Точек: %d. Дисперсия данных: %.4g (ориентир для суммарного порога).': 'Points: %d. Data variance: %.4g (a guide for the total sill).',
    'Удалены все профили (%d).': 'All profiles deleted (%d).',
    'Ураганные пробы: срезано %d значений к [%.4g; %.4g].': 'Outliers: %d values capped to [%.4g; %.4g].',
    'Ураганные пробы: удалено %d точек вне [%.4g; %.4g]; осталось %d.': 'Outliers: %d points removed outside [%.4g; %.4g]; %d remaining.',
    'Факт (%s)': 'Actual (%s)',
    'Фильтр коротких линий (< %g)…': 'Short-line filter (< %g)…',
    'азимут=%g°': 'azimuth=%g°',
    'анис=%g': 'anis=%g',
    'ближе к 0 - лучше': 'closer to 0 is better',
    'ближе к 1 - лучше': 'closer to 1 is better',
    'все точки': 'all points',
    'выкл.': 'off',
    'да': 'yes',
    'дисперсия данных': 'data variance',
    'заданная модель': 'given model',
    'из %d': 'of %d',
    'корреляция': 'correlation',
    'меньше - лучше': 'lower is better',
    'модель (малая ось)': 'model (minor axis)',
    'наггет C0=%.4g, %s, порог C=%.4g, радиус a=%.4g': 'nugget C0=%.4g, %s, sill C=%.4g, range a=%.4g',
    'недостаточно точек для QQ': 'too few points for QQ',
    'облако пар': 'pair cloud',
    'оценка (LOO)': 'estimate (LOO)',
    'оценка − факт': 'estimate − actual',
    'ошибка (z-оценка)': 'error (z-score)',
    'подобранная модель': 'fitted model',
    'полудисперсия γ(h)': 'semivariance γ(h)',
    'пояса': 'bands',
    'простой (SK)': 'simple (SK)',
    'профиль': 'profile',
    'расстояние h': 'distance h',
    'скв. %{customdata}<br>факт %{x:.3g}<br>оценка %{y:.3g}<extra></extra>': 'well %{customdata}<br>actual %{x:.3g}<br>estimate %{y:.3g}<extra></extra>',
    'скв. %{text}<br>факт %{x:.3g}<br>оценка %{y:.3g}<extra>худшие</extra>': 'well %{text}<br>actual %{x:.3g}<br>estimate %{y:.3g}<extra>worst</extra>',
    'средняя |ошибка|': 'mean |error|',
    'суммарный силл (C0 + вклады C) ≈ дисперсии данных': 'total sill (C0 + contributions C) ≈ data variance',
    'теор. %{x:.2f}<br>ошибка (z) %{y:.2f}<extra></extra>': 'theor. %{x:.2f}<br>error (z) %{y:.2f}<extra></extra>',
    'теор. квантили (норм.)': 'theor. quantiles (norm.)',
    'факт': 'actual',

    # --- Кригинг с внешним дрейфом (External Drift) ---
    '3.02 Кригинг с внешним дрейфом (External Drift)':
        '3.02 External Drift Kriging',
    'Растр внешнего дрейфа (известен всюду)':
        'External drift raster (known everywhere)',
    'Канал растра дрейфа': 'Drift raster band',
    'Степень дрейфа': 'Drift degree',
    '1 (линейный)': '1 (linear)',
    '2 (квадратичный)': '2 (quadratic)',
    'Растр кригинга с дрейфом': 'Drift kriging raster',
    'Кригинг+дрейф %s · %s': 'Kriging+drift %s · %s',
    'Сторонняя величина s, заданная растром во всей области: соседний пласт, '
    'структурная поверхность, грубая модель, сейсмический атрибут. Значение '
    'поля Z регрессируется на s, кригуются остатки, дрейф возвращается из '
    'растра. Растр должен покрывать область оценки и быть в той же системе '
    'координат, что и точки.':
        'A secondary variable s given as a raster across the whole area: an '
        'adjacent seam, a structural surface, a coarse model, a seismic '
        'attribute. The Z field is regressed on s, the residuals are kriged, '
        'and the drift is added back from the raster. The raster must cover '
        'the estimation area and share the CRS of the points.',
    'Связь значения с внешней величиной s. Степень 1 - линейный дрейф '
    'm = a0 + a1·s, обычный выбор для External Drift. Степень 2 описывает '
    'изогнутую связь m = a0 + a1·s + a2·s², но может вобрать часть реальной '
    'структуры в дрейф - после неё посмотрите на вариограмму остатков.':
        'The relation between the value and the external variable s. Degree 1 '
        'is the linear drift m = a0 + a1·s, the usual choice for external '
        'drift. Degree 2 describes a curved relation m = a0 + a1·s + a2·s², '
        'but may absorb part of the real structure into the drift - check the '
        'residual variogram after using it.',
    'Необязательный растр стандартной ошибки кригинга остатков (sqrt '
    'дисперсии): мера неопределённости. Дрейф детерминирован и своей '
    'погрешности к ней не добавляет.':
        'An optional raster of the residual kriging standard error (sqrt of '
        'variance): a measure of uncertainty. The drift is deterministic and '
        'adds no error of its own.',
    'Кригинг с внешним дрейфом (External Drift): оценка по точкам, когда поле '
    'закономерно связано со сторонней величиной, известной всюду в виде '
    'растра (структурная поверхность соседнего пласта, грубая региональная '
    'модель, сейсмический атрибут).\n\nДрейф снимается регрессией значения на '
    'растр, кригуются остатки, дрейф возвращается к оценке из того же растра. '
    'Это та же схема регрессия-кригинг, что и флажок «Снять полиномиальный '
    'тренд» у «2D Kriging», только дрейф здесь не функция координат, а функция '
    'внешнего значения. Степень дрейфа 1 (линейный) почти всегда '
    'достаточна.\n\nВариограмму задавайте по ОСТАТКАМ. Растр дрейфа и точки '
    'должны быть в одной системе координат. Ячейки вне покрытия растра дрейфа '
    'остаются пустыми. Поиск, анизотропия, обрезка и стандартная ошибка - как '
    'у «2D Kriging».':
        'External Drift Kriging: estimation from points when the field is '
        'systematically related to a secondary variable known everywhere as a '
        'raster (the structural surface of an adjacent seam, a coarse regional '
        'model, a seismic attribute).\n\nThe drift is removed by regressing '
        'the value on the raster, the residuals are kriged, and the drift is '
        'added back from the same raster. This is the same regression-kriging '
        'scheme as the "Remove polynomial trend" option of "2D Kriging", only '
        'here the drift is a function of the external value, not of the '
        'coordinates. Drift degree 1 (linear) is almost always '
        'enough.\n\nFit the variogram on the RESIDUALS. The drift raster and '
        'the points must share the CRS. Cells outside the drift raster '
        'coverage are left empty. Search, anisotropy, clipping and the '
        'standard error are as in "2D Kriging".',
    'Не удалось открыть растр дрейфа.': 'Could not open the drift raster.',
    'Не удалось прочитать растр дрейфа.': 'Could not read the drift raster.',
    'Не удалось пересчитать растр дрейфа на сетку кригинга.':
        'Could not resample the drift raster onto the kriging grid.',
    'Растр дрейфа и точки в разных системах координат. Совместите CRS, иначе '
    'выборка дрейфа в скважинах будет неверной.':
        'The drift raster and the points are in different coordinate systems. '
        'Match the CRS, otherwise the drift sampled at the wells will be '
        'wrong.',
    'Внешний дрейф отключён: точек со значением дрейфа %d, для модели нужно '
    'больше %d.':
        'External drift disabled: %d points carry a drift value, the model '
        'needs more than %d.',
    'Отброшено %d точек вне растра дрейфа (нет значения s).':
        '%d points outside the drift raster were dropped (no s value).',
    'Снят внешний дрейф степени %d: убрано %.1f%% дисперсии (s данных %.4g, '
    's остатка %.4g). Кригуются остатки, дрейф возвращается к оценке из '
    'растра. Вариограмму задавайте по остаткам.':
        'External drift of degree %d removed: %.1f%% of the variance taken '
        'out (s of data %.4g, s of residual %.4g). The residuals are kriged '
        'and the drift is added back from the raster. Fit the variogram on '
        'the residuals.',
    '%d ячеек оставлены пустыми: растр дрейфа их не покрывает.':
        '%d cells were left empty: the drift raster does not cover them.',
    'Добавить поверхность дрейфа и поле dz (для внешнего дрейфа)': 'Add a drift surface and a dz field (for external drift)',
    'Поверхность дрейфа (растр, демо)': 'Drift surface (raster, demo)',
    'Поверхность дрейфа (демо)': 'Drift surface (demo)',
    'Растр сторонней поверхности s, известной всюду: подаётся как дрейф в «Кригинг с внешним дрейфом», а поле dz скважин с ним линейно связано. Создаётся только при включённой галке поверхности дрейфа.':
        'A raster of a secondary surface s known everywhere: feed it as the drift to External Drift Kriging, while the wells dz field is linearly related to it. Created only when the drift-surface checkbox is on.',
    'Поверхность дрейфа (растр) и поле dz: dz линейно связано с поверхностью. Запустите «Кригинг с внешним дрейфом» по полю dz с этим растром как дрейфом - сравните с обычным «2D Kriging» по dz без дрейфа.':
        'Drift surface (raster) and dz field: dz is linearly related to the surface. Run External Drift Kriging on dz with this raster as the drift, and compare it with plain 2D Kriging on dz without the drift.',
    'Поверхность дрейфа (растр) + поле dz, для внешнего дрейфа': 'Drift surface (raster) + dz field, for external drift',
    'Включите этот вывод, чтобы получить пару для кригинга с внешним дрейфом: растр гладкой сторонней поверхности s (известна всюду) и поле dz скважин, линейно с ней связанное. Запустите «Кригинг с внешним дрейфом» по полю dz с этим растром как дрейфом. Если вывод пропущен, поле dz не добавляется. По умолчанию выключено.':
        'Enable this output to get a pair for external drift kriging: a raster of a smooth secondary surface s (known everywhere) and a wells dz field linearly related to it. Run External Drift Kriging on dz with this raster as the drift. If the output is skipped, the dz field is not added. Off by default.',
    '1. Грид и изолинии': '1. Grid and isolines',
    '3. Дополнительные инструменты': '3. Additional tools',
    '3.04 Карта вероятности превышения': '3.04 Exceedance probability map',
    'P(<%.4g)': 'P(<%.4g)',
    'P(>%.4g)': 'P(>%.4g)',
    'Вероятность %s · %s': 'Probability %s · %s',
    'Канал растра оценки': 'Estimate raster band',
    'Канал растра ошибки': 'Error raster band',
    'Карта вероятности превышения порога по растрам оценки и стандартной ошибки кригинга. Локальное распределение принимается нормальным, Z ~ N(оценка, ошибка²), и вероятность считается одной формулой P(Z>порог) = Φ((оценка−порог)/ошибка). Свой кригинг не выполняется, берутся готовые растры, поэтому «2D Kriging» остаётся без изменений.\n\nКак получить входы: запустите «2D Kriging» (или «Кригинг с внешним дрейфом») и включите необязательный вывод стандартной ошибки. Подайте сюда растр оценки и растр ошибки - получите растр вероятности 0…1.\n\nПрименение: бортовые содержания (вероятность, что содержание выше кондиции), зоны риска по любому порогу. Для сильно скошенных полей нормальное допущение грубовато - тогда точнее индикаторный кригинг по порогам.': 'An exceedance-probability map from the kriging estimate and standard-error rasters. The local distribution is taken as normal, Z ~ N(estimate, error²), and the probability is one formula P(Z>threshold) = Φ((estimate−threshold)/error). No kriging is run here, ready rasters are used, so \"2D Kriging\" stays unchanged.\n\nHow to get the inputs: run \"2D Kriging\" (or \"External Drift Kriging\") and enable the optional standard-error output. Feed the estimate raster and the error raster here to get a 0…1 probability raster.\n\nUse: cut-off grades (the probability that the grade is above the cut-off), risk zones for any threshold. For strongly skewed fields the normal assumption is rough - indicator kriging by thresholds is then more accurate.',
    'Не удалось открыть растр оценки.': 'Could not open the estimate raster.',
    'Не удалось открыть растр ошибки.': 'Could not open the error raster.',
    'Не удалось привести растр ошибки к сетке оценки.': 'Could not resample the error raster onto the estimate grid.',
    'Нет ячеек, где заданы и оценка, и ошибка.': 'No cells where both the estimate and the error are defined.',
    'Нужны оба растра: оценка и стандартная ошибка.': 'Both rasters are required: the estimate and the standard error.',
    'Порог': 'Threshold',
    'Порог %.4g, сторона %s. Вероятность ≥ 0.5 в %.0f%% ячеек с данными.': 'Threshold %.4g, side %s. Probability ≥ 0.5 in %.0f%% of cells with data.',
    'Растр вероятности (0…1)': 'Probability raster (0…1)',
    'Растр оценки (кригинг)': 'Estimate raster (kriging)',
    'Растр стандартной ошибки кригинга': 'Kriging standard-error raster',
    'Решётки оценки и ошибки различаются, ошибка приведена к сетке оценки билинейно.': 'The estimate and error grids differ; the error was resampled onto the estimate grid bilinearly.',
    'Сторона': 'Side',
    'выше': 'above',
    'выше порога: P(Z > порог)': 'above the threshold: P(Z > threshold)',
    'ниже': 'below',
    'ниже порога: P(Z < порог)': 'below the threshold: P(Z < threshold)',
    '3.05 Удельный расход (закон Дарси)': '3.05 Specific discharge (Darcy law)',
    'Векторов потока: %d (шаг %d яч.). Поворот по «az», размер по удельному расходу.': 'Flow vectors: %d (step %d cells). Rotated by "az", sized by the specific discharge.',
    'Задайте хотя бы один растр свойства: K или T.': 'Provide at least one property raster: K or T.',
    'Канал напора': 'Head band',
    'Канал растра K': 'K raster band',
    'Канал растра T': 'T raster band',
    'Не удалось прочитать растр K.': 'Could not read the K raster.',
    'Не удалось прочитать растр T.': 'Could not read the T raster.',
    'Растр водопроводимости T (м²/сут)': 'Transmissivity raster T (m²/day)',
    'Растр коэффициента фильтрации K (м/сут)': 'Hydraulic conductivity raster K (m/day)',
    'Растры K и T заданы как ln (экспонировать)': 'K and T rasters are given as ln (exponentiate)',
    'Расход через ширину Q = T·|∇h| (м²/сут)': 'Flow per width Q = T·|∇h| (m²/day)',
    'Расход через ширину Q · %s': 'Flow per width Q · %s',
    'Расход через ширину Q: медиана %.4g, максимум %.4g м²/сут.': 'Flow per width Q: median %.4g, maximum %.4g m²/day.',
    'Скорость фильтрации q = K·|∇h| (м/сут)': 'Specific discharge q = K·|∇h| (m/day)',
    'Скорость фильтрации q · %s': 'Specific discharge q · %s',
    'Скорость фильтрации q: медиана %.4g, максимум %.4g м/сут.': 'Specific discharge q: median %.4g, maximum %.4g m/day.',
    'Удельный расход подземного потока по закону Дарси. К геометрии потока (градиент напора и направление) добавляет свойства пласта, переводя безразмерный градиент в физический поток.\n\nВходы: растр напора и хотя бы один из растров свойств - коэффициент фильтрации K или водопроводимость T. Выходы: скорость фильтрации q = K·|∇h| (м/сут) и расход через единицу ширины потока Q = T·|∇h| (м²/сут), плюс направление и стрелки.\n\nКак получить K и T: кригуйте их по точкам испытаний. K и T обычно лог-нормальны (разброс на порядки), поэтому кригуйте ln(K) и ln(T), а тут включите «Растры заданы как ln». Истинная скорость воды v = q/n требует пористости и здесь не считается. Напорные и безнапорные пласты разумно криговать раздельно. Растры должны быть в одной системе координат.': 'Specific groundwater discharge by Darcy\'s law. To the flow geometry (head gradient and direction) it adds the aquifer properties, turning the dimensionless gradient into a physical flux.\n\nInputs: a head raster and at least one property raster - hydraulic conductivity K or transmissivity T. Outputs: specific discharge q = K·|∇h| (m/day) and flow per unit width Q = T·|∇h| (m²/day), plus direction and arrows.\n\nHow to get K and T: krige them from test points. K and T are usually log-normal (orders-of-magnitude spread), so krige ln(K) and ln(T) and tick \"rasters are given as ln\" here. The true water velocity v = q/n needs porosity and is not computed here. Confined and unconfined aquifers are best kriged separately. The rasters must share one coordinate system.',
    'Добавить поля K и T и напор (для удельного расхода)': 'Add K and T fields and head (for the specific discharge)',
    'Поля K и T (демо): K лог-нормально (K ≈ %.4g…%.4g м/сут), T = K·мощность. Для удельного расхода создайте калькулятором поля ln(K) и ln(T), кригуйте их, а при подаче в «Удельный расход (Дарси)» включите галку «Растры заданы как ln». Напор (head) кригуйте как обычно.': 'K and T fields (demo): K is log-normal (K ≈ %.4g…%.4g m/day), T = K·thickness. For the specific discharge, build ln(K) and ln(T) fields with the field calculator, krige them, and when feeding "Specific discharge (Darcy law)" tick "rasters are given as ln". Krige head as usual.',
    '3.03 Карта вероятности превышения': '3.03 Exceedance probability map',
    '3.04 Гидравлический градиент и направление потока': '3.04 Hydraulic gradient and flow direction',
    'ln (для лог-нормальных, напр. K, T)': 'ln (for log-normal, e.g. K, T)',
    'нет': 'none',
    'Преобразование значения': 'Value transform',
    'Логарифм: отброшено %d точек со значением ≤ 0 (ln определён только для положительных).': 'Logarithm: dropped %d points with value ≤ 0 (ln is defined for positive values only).',
    'Логарифм: положительных значений недостаточно для кригинга.': 'Logarithm: not enough positive values for kriging.',
    'Логарифмирование включено: кригуется ln(Z), оценка возвращается через exp (медиана). Вариограмму, наггет и среднее простого кригинга задавайте в единицах ln. Стандартная ошибка пересчитывается в исходные единицы дельта-методом.': 'Logarithm enabled: ln(Z) is kriged and the estimate is returned via exp (median). Set the variogram, nugget and simple-kriging mean in ln units. The standard error is converted back to the original units by the delta method.',
    'Логарифмирование перед кригингом для величин с разбросом на порядки (коэффициент фильтрации, водопроводимость, содержания с длинным правым хвостом). Кригуется ln(Z), оценка возвращается через exp - это медианная (геометрическая) оценка. Стандартная ошибка пересчитывается в исходные единицы дельта-методом. Значения должны быть положительными. Избавляет от ручного создания поля ln(Z). Вариограмму и наггет при этом задавайте в единицах ln.': 'Log-transform before kriging for quantities spanning orders of magnitude (hydraulic conductivity, transmissivity, grades with a long right tail). ln(Z) is kriged and the estimate is returned via exp, which is the median (geometric) estimate. The standard error is converted back to the original units by the delta method. Values must be positive. It removes the need to build an ln(Z) field by hand. Set the variogram and nugget in ln units.',
    '3.06 Разрез по линии': '3.06 Cross-section along a line',
    'В слое несколько линий, разрез построен по первой.': 'The layer has several lines; the section was built along the first.',
    'В слое нет линии.': 'The layer has no line.',
    'Вертикальное преувеличение (для чертежа)': 'Vertical exaggeration (for the drawing)',
    'Выборка растра': 'Raster sampling',
    'Геологический разрез по линии из набора поверхностей. Поверхности задаются списком и упорядочиваются сверху вниз (кровля, подошва, следующая кровля и так далее). Пласты строятся как полосы между соседними поверхностями, поэтому N поверхностей дают N−1 пластов.\n\nОдна поверхность это законный случай: пластов не будет, а линия \nрельефа, рамка, оси и определение разреза построятся. С этого \nгеологический разрез обычно и начинается: профиль по ЦМР, поверх \nнего пересечения инструментом **4.05**, геология вниз рисуется \nвручную. Низ рамки в таком разрезе задавайте отметкой в \nдополнительных параметрах, иначе рамка обожмёт рельеф и рисовать \nпод ним будет негде.\n\nПо умолчанию порядок поверхностей берётся из дерева слоёв проекта (сверху вниз), совпадая с панелью слоёв. Снимите галочку **Порядок поверхностей из дерева слоёв проекта**, чтобы задать порядок вручную отметками в списке.\n\nПо умолчанию разрез строится по каждой линии слоя. Все разрезы попадают в один комплект слоёв и различаются полями **sec** (имя) и **sec_id**, поэтому подписи и фильтры делаются выражением по полю, а стили не назначаются заново. Имя берётся из поля линии, если оно задано, иначе нумеруется по порядку.\n\nНа чертеже разрезы разводятся раскладкой в общей чертёжной системе координат. Стопкой - у всех общий ноль расстояний, в ряд - общая отметка высоты, сеткой - и то и другое по строкам и столбцам. Шаг решётки берётся от самого крупного габарита плюс зазор, поэтому чертежи не пересекаются по построению. Вертикальный масштаб на весь прогон один, иначе разрезы были бы несопоставимы.\n\nВертикальный масштаб задаётся тремя способами. Отношение масштабов Г:В (1:N) - привычная для чертежа запись, вертикальный масштаб крупнее горизонтального в N раз. Множитель - то же число напрямую. Отношение габаритов чертежа - множитель подбирается так, чтобы ширина относилась к высоте как задано.\n\nДва выхода. Чертёж разреза - полигоны в осях расстояние вдоль линии и высота, с вертикальным преувеличением для макета и печати. Забор 3D - те же полосы как вертикальные стенки PolygonZ в реальных координатах, для просмотра в 3D Map View рядом с поверхностями. Забор раскладкой не смещается, он стоит в реальных координатах.\n\nПоверхности обычно получают кригингом (кровля, подошва пласта). Линию рисуют как обычный линейный слой. Расстояние и высота берутся в единицах карты. Свой кригинг инструмент не выполняет.\n\nСправочник пластов (слой проекта) - главный источник, когда задан: имя и цвет каждого тела берутся из него по порядку залегания, а не из имён слоёв. Между кровлей и подошвой плагин находит тело в порядке справочника, поэтому межпластья названы верно, а там, где на разрезе показаны не все пласты, полоса помечается серой с перечнем пропущенного. Догадки по именам при этом отключаются.\n\nБез справочника полосы красятся по имени кровли своим детерминированным цветом, а межпластья остаются серыми. Тот же справочник подаётся в 4.02, и тогда полосы пластов и колонки скважин совпадают по цвету. Готовый стиль можно сохранить в .qml и дальше править штатными средствами QGIS.': 'A geological cross-section along a line from a set of surfaces. The surfaces are given as a list and ordered top to bottom (roof, floor, next roof, and so on). Beds are built as bands between adjacent surfaces, so N surfaces give N-1 beds.\n\nBy default the surface order is taken from the project layer tree (top to bottom), matching the Layers panel. Uncheck **Surface order from the project layer tree** to set the order by hand with the marks in the list.\n\nThe bed reference (a project layer) is the primary source when set: the name and colour of each body come from it by the order of bedding, not from the layer names. Between a roof and a floor the plugin finds the body in the reference order, so interbeds are named correctly, and where not all beds are shown on the section the band is honestly marked grey with the list of what is missing. The name guessing is turned off then.\n\nWithout a reference the bands are coloured by the roof name with their own deterministic colour, and interbeds stay grey. The same reference goes into 4.02, and then the bed bands and the borehole columns match in colour. A ready style can be saved as .qml and edited further with the standard QGIS means.\n\nA single surface is a legitimate case: there will be no beds, but the terrain line, the frame, the axes and the section definition are built. A geological section usually starts exactly there: a profile over the DEM, intersections plotted on top of it with tool 4.05, and the geology drawn downwards by hand. In such a section set the frame bottom by elevation in the advanced parameters, otherwise the frame hugs the terrain and there is no room to draw below it.',
    'Длина линии равна нулю.': 'The line length is zero.',
    'Забор 3D (PolygonZ, реальные координаты)': '3D fence (PolygonZ, real coordinates)',
    'Линия не пересекает поверхности: разрез пуст.': 'The line does not cross the surfaces: the section is empty.',
    'Линия разреза': 'Section line',
    'Не задана линия разреза.': 'No section line is set.',
    'Не удалось открыть растр: %s': 'Could not open the raster: %s',
    'Пласт %d (%s / %s): средняя мощность %.4g ед.': 'Bed %d (%s / %s): mean thickness %.4g units.',
    'Поверхности сверху вниз (кровли и подошвы)': 'Surfaces top to bottom (roofs and floors)',
    'Порядок поверхностей из дерева слоёв проекта': 'Surface order from the project layer tree',
    'Порядок из дерева включён, но проект недоступен - оставлен порядок из списка.': 'Order from the tree is on, but the project is unavailable - the list order is kept.',
    'Диагностика разреза. СК линии: %s. Растр[0] origin (%.3f, %.3f), пиксель (%.4g, %.4g).': 'Section diagnostics. Line CRS: %s. Raster[0] origin (%.3f, %.3f), pixel (%.4g, %.4g).',
    'Точек вдоль линии: %d. Первая точка: (%.3f, %.3f). Валидных проб высот: %d из %d.': 'Points along the line: %d. First point: (%.3f, %.3f). Valid elevation samples: %d of %d.',
    'Все пробы высот - NaN. Вероятно линия и поверхности в разных СК или линия вне охвата растров.': 'All elevation samples are NaN. The line and surfaces are probably in different CRSs, or the line is outside the rasters.',
    'Пропущено вырожденных полигонов чертежа: %d (пустые или нулевой площади, в слой не добавлены).': 'Degenerate drawing polygons skipped: %d (empty or zero-area, not added to the layer).',
    'Диагностика ЦМР. СК выхода: EPSG:%s. Origin (%.3f, %.3f), пиксель (%.4g, %.4g), размер %dx%d.': 'DEM diagnostics. Output CRS: EPSG:%s. Origin (%.3f, %.3f), pixel (%.4g, %.4g), size %dx%d.',
    'Часть поверхностей не найдена в дереве слоёв, их порядок оставлен как в списке: %s': 'Some surfaces were not found in the layer tree; their order is kept as in the list: %s',
    'Разрез (3D-забор)': 'Section (3D fence)',
    'Разрез (чертёж)': 'Section (drawing)',
    'Разрез построен: %d пластов, длина %.4g ед., шаг %.4g.': 'Section built: %d beds, length %.4g units, step %.4g.',
    'Чертёж разреза (расстояние × высота)': 'Section drawing (distance × elevation)',
    'Шаг выборки вдоль линии, ед. карты (0 = по ячейке)': 'Sampling step along the line, map units (0 = by cell)',
    'билинейно': 'bilinear',
    'ближайший': 'nearest',
    '1.8 Создать пример для разреза': '1.8 Create a section example',
    'Готово: три поверхности (две залежи) и линия. Подайте поверхности сверху вниз (1, 2, 3) и линию в «Разрез по линии».': 'Done: three surfaces (two beds) and a line. Feed the surfaces top to bottom (1, 2, 3) and the line into Cross-section along a line.',
    'Зерно генератора (0 = случайно)': 'Generator seed (0 = random)',
    'Линия разреза (демо)': 'Section line (demo)',
    'Не задан экстент.': 'No extent is set.',
    'Поверхность 1 · кровля (демо)': 'Surface 1 · roof (demo)',
    'Поверхность 2 (подошва верхнего / кровля нижнего)': 'Surface 2 (floor of the upper / roof of the lower)',
    'Поверхность 2 · граница (демо)': 'Surface 2 · boundary (demo)',
    'Поверхность 3 · подошва (демо)': 'Surface 3 · floor (demo)',
    'Разрез 1': 'Section 1',
    '2. Топография: диагностика и правка': '2. Topography: diagnostics and repair',
    '2.11 Разделить горизонтали для проверки': '2.11 Split contours for validation',
    '2.12 Невязка горизонталей против ЦМР': '2.12 Contour residuals against the DEM',
    '2.13 Диагностика террасинга ЦМР': '2.13 Terracing check of a DEM',
    '2.14 Снятие ступеней (сглаживание с ограничением)': '2.14 Remove steps (clamped smoothing)',
    '90 процентиль |r|': '90th percentile |r|',
    '<p><i>Интерактивный график недоступен (нет plotly). Гистограмму можно построить по слою невязок.</i></p>': '<p><i>The interactive chart is unavailable (no plotly). A histogram can be built from the residual layer.</i></p>',
    '<p><i>Интерактивный график недоступен (нет plotly).</i></p>': '<p><i>The interactive chart is unavailable (no plotly).</i></p>',
    'RMSE': 'RMSE',
    'Базовая отметка уровней': 'Base elevation of the levels',
    'Бергштрихи: сторона выбрана %s, версия QGIS %d, знак %+d. Если штрихи смотрят вверх по склону, переключите параметр вручную.': 'Hachures: side chosen %s, QGIS version %d, sign %+d. If the ticks point uphill, switch the parameter by hand.',
    'В слое нет горизонталей с числовой отметкой и геометрией.': 'The layer holds no contours with a numeric elevation and a geometry.',
    'В слое нет горизонталей с числовой отметкой.': 'The layer holds no contours with a numeric elevation.',
    'Вертикальная кривизна': 'Vertical curvature',
    'Вертикальная кривизна: среднее модуля %.4g, 95 процентиль %.4g, максимум %.4g.': 'Vertical curvature: mean absolute %.4g, 95th percentile %.4g, maximum %.4g.',
    'Вертикальный масштаб: отношение масштабов Г:В = 1:%.4g, множитель vex = %.4g.': 'Vertical scale: scale ratio H:V = 1:%.4g, factor vex = %.4g.',
    'Воспроизведение входа (hold=0): среднее %+.4g, СКО %.4g, макс |r| %.4g, точек %d.': 'Reproduction of the input (hold=0): mean %+.4g, SD %.4g, max |r| %.4g, %d points.',
    'Вход воспроизводится заметно лучше, чем предсказываются отложенные горизонтали. Это нормальное поведение интерполятора, но именно вторая цифра говорит о качестве модели.': 'The input is reproduced markedly better than the held-out contours are predicted. This is normal behaviour for an interpolator, but it is the second figure that speaks of model quality.',
    'Габарит раскладки: X от %.4g до %.4g, Y от %.4g до %.4g.': 'Layout extent: X from %.4g to %.4g, Y from %.4g to %.4g.',
    'Гистограмма невязок': 'Histogram of residuals',
    'Горизонтали (линии)': 'Contours (lines)',
    'Горизонтали для определения сечения': 'Contours to detect the interval',
    'Горизонтали для построения': 'Contours for building',
    'Горизонтали для проверки': 'Contours for validation',
    'Готово: шесть поверхностей (пять пластов: три вмещающих и два промышленных), три линии разрезов и скважины. Поверхности уже лежат в дереве стопкой сверху вниз, порядок для «Разреза по линии» задавать не нужно. Инструмент строит разрез по первой линии слоя, остальные две ждут пакетной генерации. Скважины с полями h1...h6 и линию подайте в «Скважины на разрез». Разлом, маркер с Z и зона - для «Пересечения векторов с разрезом», опрокинутая TIN - для «Пересечения TIN с разрезом».': 'Done: six surfaces (five beds: three host and two ore), three section lines and boreholes. The surfaces already sit in the layer tree stacked top to bottom, so no order needs to be set for Cross-section along a line. The tool builds a section along the first line of the layer, the other two await batch generation. Feed the boreholes with the h1...h6 fields and the line into Boreholes on the section. The fault, the Z marker and the zone are for Vector intersection with the section, the overturned TIN for Intersect a TIN with the section.',
    'Делит горизонтали на два набора: по одному строят рельеф, по второму проверяют результат.\n\nДелится не по объектам, а по **отметкам**. Убрать из построения отдельные звенья одной горизонтали бессмысленно: соседние звенья того же уровня подскажут ответ, и проверка окажется завышенной. Отложенный уровень исчезает целиком, и восстановить его интерполятор может только по соседним уровням, а это и есть предсказание.\n\nКрайние отметки набора всегда остаются в построении: за пределами набора интерполятор экстраполирует, и невязка там измеряла бы не то, ради чего проверка затевалась.\n\nОба выхода получают поле **hold**: 0 для построения, 1 для проверки. Инструмент **Невязка горизонталей против ЦМР** это поле узнаёт сам и печатает две цифры отдельно.\n\nРабочий порядок: разделить, построить рельеф по набору для построения (например **Topo2Raster**), затем измерить невязку по проверочному набору.\n\n': 'Splits the contours into two sets: one is used to build the relief, the other to check the result.\n\nThe split is by **elevation**, not by feature. Holding out individual pieces of a single contour is pointless: the neighbouring pieces of the same level give the answer away and the check comes out flattering. A held-out level disappears entirely, and the interpolator can only restore it from the neighbouring levels, which is what prediction means.\n\nThe extreme levels of the set always stay in the building set: beyond the range the interpolator extrapolates, and a residual there would measure something other than what the check is for.\n\nBoth outputs get a **hold** field: 0 for building, 1 for validation. The **Contour residuals against the DEM** tool recognises this field by itself and prints the two figures separately.\n\nWorking order: split, build the relief from the building set (with **Topo2Raster** for instance), then measure the residual on the validation set.\n\n',
    'Демо кладётся в заданный охват: начало %.1f %.1f, размер %dx%d ячеек.': 'The demo is placed in the given extent: origin %.1f %.1f, size %dx%d cells.',
    'Диагностика террасинга ЦМР': 'Terracing check of a DEM',
    'Допустимый сдвиг, доля сечения': 'Allowed shift, fraction of the interval',
    'Есть признаки террасинга, стоит посмотреть растр кривизны глазами.': 'There are signs of terracing, worth a look at the curvature raster.',
    'Зазор между разрезами, доля от габарита': 'Gap between sections, fraction of the extent',
    'Заметная доля точек промахивается больше чем на половину сечения: горизонтали по такой ЦМР встанут не там, где были исходные.': 'A noticeable share of points misses by more than half the contour interval: contours drawn from such a DEM will not sit where the original ones were.',
    'Заметное систематическое смещение: поверхность в среднем сдвинута по высоте относительно горизонталей.': 'A noticeable systematic bias: on average the surface is shifted in elevation relative to the contours.',
    'Записаны поля drop_min и drop_mean. Подозрительные участки видно выражением drop_min < %.4g.': 'The drop_min and drop_mean fields are written. Suspect stretches show up with an expression such as drop_min < 0.005.',
    'Измеряет, насколько построенная ЦМР воспроизводит исходные горизонтали. В точках вдоль горизонтали берётся значение растра и сравнивается с отметкой горизонтали. Невязка положительна там, где ЦМР ниже горизонтали.\n\nВыдаются смещение (среднее), разброс (СКО и RMSE), медиана модуля, максимум и доля точек, промахнувшихся больше чем на половину сечения рельефа. Последняя величина практическая: если она заметна, горизонталь, проведённая по такой ЦМР, встанет не там, где была исходная.\n\n**Что означает эта цифра.** Невязка в точках тех же горизонталей, которые подавались в построение, измеряет воспроизведение входа, а не точность предсказания: интерполятор эти точки видел. Оценка почти обязана быть хорошей. Чтобы получить цифру предсказания, разделите горизонтали инструментом **Разделить горизонтали для проверки**, стройте рельеф по набору для построения, а сюда подайте оба набора: поле **hold** инструмент узнает сам и напечатает две цифры отдельно. Разрыв между ними и есть настоящая мера качества.\n\nОтчёт HTML содержит гистограмму невязок, таблицу по отметкам и разбор полученных чисел.\n\n': 'Measures how well the built DEM reproduces the source contours. At points along a contour the raster value is taken and compared with the contour elevation. The residual is positive where the DEM lies below the contour.\n\nReported are the bias (mean), the spread (SD and RMSE), the median absolute value, the maximum, and the share of points that miss by more than half the contour interval. The last one is practical: if it is noticeable, a contour drawn from such a DEM will not sit where the original one was.\n\n**About what the figure means.** A residual at points of the very contours that were fed into the build measures reproduction of the input, not predictive accuracy: the interpolator has seen those points. The estimate is almost bound to look good. To get a figure of prediction, split the contours with **Split contours for validation**, build the relief from the building set, and feed both sets here: the tool recognises the **hold** field by itself and prints the two figures separately. The gap between them is the real measure of quality.\n\nThe HTML report holds a histogram of residuals, a table by elevation and a reading of the numbers.\n\n',
    'Исключено околоплоских ячеек: %.4g процента. Там перепад ниже шума, и отметка стоит на месте.': 'Cells excluded as nearly flat: %.4g percent. There the drop is below the noise and the elevation stands still.',
    'Итераций сглаживания': 'Smoothing iterations',
    'Ищет террасинг: характерную болезнь рельефа, построенного по горизонталям. Склон идёт ступенями, возле уровня горизонтали полка, между уровнями резкий сброс. На отмывке это выглядит как свадебный торт, на профиле как лесенка.\n\nПроверка идёт двумя независимыми способами.\n\n**Вертикальная кривизна** это вторая производная вдоль склона. У ступенчатой поверхности она даёт всплески на сбросах и почти нули на полках, а вся картина полосами повторяет рисунок горизонталей. Растр кривизны выдаётся на выход: на нём террасинг виден глазами, без всякой статистики.\n\n**Притяжение отметок к уровням** это прямая проверка по самим значениям, без производных. У здоровой поверхности отметки между соседними уровнями распределены более-менее равномерно, поэтому доля ячеек в узкой полосе вокруг уровня близка к ширине этой полосы, и отношение выходит около единицы. У террасированной поверхности отметки липнут к уровням, и отношение растёт. Полтора это повод присмотреться, два и больше - террасинг.\n\nЯчейки с околонулевым уклоном в статистику притяжения не идут. Порог задаётся долей сечения: ячейка не учитывается, если перепад высот на ней меньше сотой доли сечения. Это важно на реальных матрицах: водная гладь, залитые площадки и зоны без данных стоят на одной отметке и перекашивают счёт. На матрице, где водохранилище занимает 45 процентов площади, без такого отсева индекс падал вдвое ниже единицы и показывал ложное благополучие.\n\nСечение рельефа можно задать вручную или взять из слоя горизонталей: тогда инструмент возьмёт и сечение, и базовую отметку от реального набора.\n\nОтчёт HTML содержит гистограмму фазы (положения отметок внутри сечения) и разбор чисел. Ровная гистограмма означает, что террасинга нет, пик в нуле - что есть.\n\n': 'Looks for terracing, the characteristic ailment of a relief built from contours. The slope goes in steps, with a bench near a contour level and an abrupt drop between levels. On a hillshade it looks like a wedding cake, on a profile like a staircase.\n\nThe check runs in two independent ways.\n\n**Vertical curvature** is the second derivative along the slope. On a stepped surface it spikes at the drops and is close to zero on the benches, and the whole picture repeats the pattern of the contours in bands. The curvature raster is produced as an output: terracing is visible on it by eye, without any statistics.\n\n**Attraction of elevations to the levels** is a direct check on the values themselves, without derivatives. On a healthy surface the elevations between adjacent levels are spread more or less evenly, so the share of cells in a narrow band around a level is close to the width of that band and the ratio comes out near one. On a terraced surface the elevations stick to the levels and the ratio grows. One and a half is a reason to look closer, two and above is terracing.\n\nThe contour interval can be set by hand or taken from a contour layer: the tool then takes both the interval and the base elevation from the real set.\n\nThe HTML report holds a histogram of the phase (the position of an elevation within the interval) and a reading of the numbers. A flat histogram means there is no terracing, a peak at zero means there is.\n\n',
    'Канал ЦМР': 'DEM band',
    'Куда положить (охват)': 'Where to place it (extent, optional)',
    'Куски помечены полем lowconf = 1. Ничего не удалено, спрячьте их фильтром слоя, если мешают.': 'The parts are marked with lowconf = 1. Nothing has been deleted, hide them with a layer filter if they get in the way.',
    'Линии разрезов (3 шт.)': 'Section lines (3)',
    'Линии разрезов (демо)': 'Section lines (demo)',
    'Линий на входе %d, кусков на выходе %d, из них ниже шума %d. Доля длины ниже шума %.3g процента.': 'Lines in %d, parts out %d, of them below the noise %d. Share of length below the noise %.3g percent.',
    'Линия «%s» не пересекает поверхности, разрез пуст.': 'Line %s does not cross the surfaces, the section is empty.',
    'Линия «%s» пропущена: %s': 'Line %s skipped: %s',
    'Мимо больше чем на половину сечения: %.4g процента точек.': 'Missing by more than half the interval: %.4g percent of the points.',
    'Наибольший сдвиг поверхности: %.4g м.': 'Largest shift of the surface: %.4g m.',
    'Не задан растр ЦМР.': 'No DEM raster is set.',
    'Не задан слой горизонталей.': 'No contour layer is set.',
    'Не удалось открыть растр ЦМР.': 'Could not open the DEM raster.',
    'Не удалось построить разрез: проверьте линию и поверхности.': 'Could not build the section: check the line and the surfaces.',
    'Не удалось развернуть линии вверх по склону: %s': 'Could not orient the lines up the slope: %s',
    'Не учитывать ячейки с перепадом меньше, доля сечения': 'Ignore cells with a drop below, fraction of the interval',
    'Невязка горизонталей против ЦМР': 'Contour residuals against the DEM',
    'Невязка по отметкам': 'Residual by elevation',
    'Невязка: среднее %+.4g, СКО %.4g, RMSE %.4g, медиана |r| %.4g, макс |r| %.4g.': 'Residual: mean %+.4g, SD %.4g, RMSE %.4g, median |r| %.4g, max |r| %.4g.',
    'Невязки горизонталей': 'Contour residuals',
    'Нужно сечение рельефа: задайте его или подайте горизонтали.': 'A contour interval is required: set it or supply contours.',
    'Нужны слой горизонталей и растр ЦМР.': 'A contour layer and a DEM raster are required.',
    'Обычно это водная гладь или залитая площадка. Замаскируйте её до построения либо сместите уровни: урез это отдельный объект, а не горизонталь.': 'This is usually a water surface or a flooded flat. Mask it before building, or shift the levels: a shoreline is a feature of its own, not a contour.',
    'Овражно-балочная сеть': 'Gully and ravine network',
    'Ориентация горизонталей вверх по склону…': 'Orienting the contours up the slope…',
    'Откладывать каждую N-ю отметку': 'Hold out every Nth elevation',
    'Отношение два и выше: отметки липнут к уровням горизонталей, поверхность ступенчатая. Такой рельеф даёт неверные уклоны и рвёт расчёты стока. Лечится инструментом 2.14, который убирает ступени, не сдвигая горизонтали.': 'A ratio of two and above: the elevations stick to the contour levels, the surface is stepped. Such a relief gives wrong slopes and breaks flow computations.',
    'Отношение между полутора и двумя: признаки есть, но картина неоднозначна. Посмотрите растр кривизны: если полосы повторяют рисунок горизонталей, это террасинг.': 'A ratio between one and a half and two: the signs are there but the picture is ambiguous. Look at the curvature raster: if the bands repeat the pattern of the contours, this is terracing.',
    'Отношение около единицы: отметки распределены между уровнями равномерно, признаков террасинга нет.': 'A ratio near one: the elevations are spread evenly between the levels, there are no signs of terracing.',
    'Отчёт до и после (HTML)': 'Before and after report (HTML)',
    'Отчёт о невязках (HTML)': 'Residual report (HTML)',
    'Отчёт о террасинге (HTML)': 'Terracing report (HTML)',
    'Охват не задан, демо кладётся в условное место %.0f %.0f. В местной системе координат задайте охват, иначе рельеф окажется далеко от ваших данных.': 'No extent is set, the demo is placed at the conventional spot %.0f %.0f. In a local coordinate system set the extent, otherwise the relief will land far from your data.',
    'Оценить не удалось. Проверьте сечение рельефа и то, что растр содержит отметки, а не что-то иное.': 'The check could not be made. Verify the contour interval and that the raster holds elevations rather than something else.',
    'Оценить не удалось: проверьте сечение и данные.': 'The check could not be made: verify the interval and the data.',
    'Пакет: линий %d, построено %d, пропущено %d. Общий vex %.4g, шаг %.4g.': 'Batch: %d lines, %d built, %d skipped. Common vex %.4g, step %.4g.',
    'Поле имени разреза': 'Section name field',
    'Поле отметки': 'Elevation field',
    'Поле отметки горизонталей': 'Contour elevation field',
    'Полуширина полосы вокруг уровня, доля сечения': 'Half-width of the band around a level, fraction of the interval',
    'Порог перепада на ячейку, доля сечения': 'Drop-per-cell threshold, fraction of the interval',
    'Правка ограничена сверху, поэтому поверхность не могла уйти от исходной дальше указанного сдвига и не могла перескочить горизонталь. Формы тоньше исходного сечения инструмент не восстанавливает.': 'The correction is bounded from above, so the surface could not move further from the original than the shift shown and could not cross a contour. Forms finer than the source interval are not restored.',
    'Предсказание на отложенных (hold=1): среднее %+.4g, СКО %.4g, макс |r| %.4g, точек %d.': 'Prediction on the held-out set (hold=1): mean %+.4g, SD %.4g, max |r| %.4g, %d points.',
    'Признаков террасинга нет.': 'There are no signs of terracing.',
    'Притяжение к уровням: было %.3g, стало %.3g.': 'Attraction to levels: was %.3g, now %.3g.',
    'Притяжение к уровням: доля %.4g при ожидании %.4g, отношение %.3g.': 'Attraction to the levels: share %.4g against an expected %.4g, ratio %.3g.',
    'Проверка плоских площадок пропущена: %s': 'Flat-area check skipped: %s',
    'Проверочный набор пуст: уровней слишком мало для такого шага.': 'The validation set is empty: too few levels for such a step.',
    'Разбор': 'Reading',
    'Разброс велик относительно сечения рельефа: формы срезаются или в данных много шума.': 'The spread is large relative to the contour interval: forms are being cut off or the data are noisy.',
    'Разрез %d': 'Section %d',
    'Разрез 2': 'Section 2',
    'Разрез 3': 'Section 3',
    'Разрез «%s», множитель vex %.4g.': 'Section %s, vex factor %.4g.',
    'Разрез «%s»: пластов %d, длина %.4g ед., смещение (%.4g, %.4g).': 'Section %s: %d beds, length %.4g units, offset (%.4g, %.4g).',
    'Разрез по каждой линии слоя': 'A section for every line of the layer',
    'Разрезов в определении: %d. Множитель vex %s.': 'Sections in the definition: %d. Factor vex %s.',
    'Раскладка нескольких разрезов': 'Layout of multiple sections',
    'Распределение отметок внутри сечения': 'Distribution of elevations within the interval',
    'Рельеф без ступеней': 'Relief without steps',
    'СК горизонталей и ЦМР различаются, точки пересчитываются. Точнее сравнивать в одной СК.': 'The contour and DEM coordinate systems differ, the points are reprojected. Comparing within one CRS is more accurate.',
    'СКО': 'SD',
    'Сдвиг выбора': 'Selection offset',
    'Сечение %.4g, допустимый сдвиг %.4g м, итераций %d.': 'Interval %.4g, allowed shift %.4g m, iterations %d.',
    'Сечение %.4g, полоса вокруг уровня %.3g сечения.': 'Interval %.4g, band around a level %.3g of the interval.',
    'Сечение из горизонталей: %.4g, базовая отметка %.4g.': 'Interval from the contours: %.4g, base elevation %.4g.',
    'Сечение из горизонталей: %.4g.': 'Interval from the contours: %.4g, base elevation %.4g.',
    'Сечение рельефа (0 = взять из горизонталей)': 'Contour interval (0 = take from the contours)',
    'Сечение рельефа (0 = определить по отметкам)': 'Contour interval (0 = detect from the elevations)',
    'Сечение рельефа по набору: %.4g.': 'Contour interval from the set: %.4g.',
    'Сечение рельефа: %.4g.': 'Contour interval: %.4g.',
    'Систематики не видно, разброс мал относительно сечения.': 'No systematic bias is visible, the spread is small relative to the interval.',
    'Создаёт синтетический рельеф: наклонная равнина, холмы, извилистая долина с постоянным падением. Рельеф детерминирован по зерну. Между холмами осознанно остаются локальные понижения, чтобы инструменту заполнения было что показывать. Служебный инструмент для примеров руководства и работы без сети, живые данные даёт инструмент 2.01. Выход: GeoTIFF float32 (или int16 флажком) в группе Топография.\n\nФлажок **Овражно-балочная сеть** врезает в рельеф тальвеги с крутыми бортами и отвершками под острым углом. Это самая тяжёлая проверка для построения рельефа по горизонталям: узкий врез между соседними горизонталями срезается, и на профиле поперёк оврага это видно сразу. Такой рельеф нужен как проверочный набор для инструментов 2.11 и 2.12.': 'Creates a synthetic relief: a tilted plain, hills, a winding valley with a steady fall. The relief is deterministic by seed. Local depressions are deliberately left between the hills so the filling tool has something to show. A service tool for the manual examples and for work without a network, live data come from tool 2.01. Output: a float32 GeoTIFF (or int16 by a tick) in the Topography group.\n\nThe **Gully and ravine network** tick cuts thalwegs with steep sides and tributaries at an acute angle into the relief. This is the hardest test for building a relief from contours: a narrow cut between adjacent contours is shaved off, and on a profile across the gully this shows at once. Such a relief is needed as a validation set for tools 2.11 and 2.12.',
    'Столбцов в сетке': 'Columns in the grid',
    'Сторона бергштрихов': 'Hachure side',
    'Сторона бергштрихов и подписей': 'Side of hachures and labels',
    'Профиль врезки': 'Burn profile',
    'постоянная глубина': 'constant depth',
    'жёлоб с уклоном к стоку': 'a chute sloping towards the outfall',
    'Продольный уклон дна жёлоба, м/м': 'Longitudinal slope of the chute bottom, m/m',
    'Трасса врезана жёлобом: глубина %.2f м, продольный уклон дна %.4g. Гидрология изменена намеренно, результат зависит от параметров.': 'The trace is burnt as a chute: depth %.2f m, longitudinal bottom slope %.4g. The hydrology is changed deliberately, the result depends on the parameters.',
    '2.09 Вершины и ямы': '2.09 Peaks and pits',
    'Находит вершины и ямы: ячейки, самые высокие или самые низкие в квадратном окне заданного радиуса, с перепадом к противоположному краю окна не меньше порога. Радиус отсекает второстепенные макушки рядом с главной, перепад отсекает кочки и лужи на равнине.\n\nИщутся всегда оба знака. Главный потребитель точек - поверхность в АвтоКАДе или Кредо, построенная по горизонталям: без пикета внутри каждой замкнутой горизонтали вершина превращается в плоскую площадку, а яма в плоское дно, и объёмы считаются с ошибкой до величины сечения. Точки несут отметку в Z геометрии и выгружаются в DXF вместе с горизонталями.\n\nВыход: точечный слой в группе Топография с полями z (отметка, м), drop (перепад, м, у ямы это глубина) и kind (peak или pit).': 'Finds peaks and pits: the cells that are the highest or the lowest within a square window of the given radius, with a relief to the opposite edge of the window no less than the threshold. The radius cuts off secondary tops next to the main one, the relief threshold cuts off bumps and puddles on a plain.\n\nBoth signs are always searched for. The main consumer of the points is a surface in AutoCAD or Credo built from contours: without a spot point inside every closed contour a peak turns into a flat pad and a pit into a flat bottom, and volumes come out wrong by up to the contour interval. The points carry the elevation in the geometry Z and are exported to DXF together with the contours.\n\nOutput: a point layer in the Topography group with the fields z (elevation, m), drop (relief, m, for a pit it is the depth) and kind (peak or pit).',
    'Минимальный перепад, м': 'Minimum relief, m',
    'Вершины и ямы (точки)': 'Peaks and pits (points)',
    'Найдено вершин: %d, ям: %d': 'Peaks found: %d, pits: %d',
    'Уровни вероятности (через пробел)': 'Probability levels (space separated)',
    'Уровни для векторных границ, доли от 0 до 1. По умолчанию 0.25, 0.5 и 0.75: получаются полосы «уверенно нет», «спорно» с двух сторон и «уверенно да». При двух классах уровень 0.5 совпадает с границей зон, потому что класс побеждает ровно там, где его вероятность выше половины. При трёх и более классах это уже разные вещи: победить можно и с 0.4, и здесь строится именно вероятность быть данным классом, а не граница победителя.': 'Levels for the vector boundaries, fractions from 0 to 1. The default 0.25, 0.5 and 0.75 give the bands confidently-no, disputed on either side, and confidently-yes. With two classes the level 0.5 coincides with the zone boundary, because a class wins exactly where its probability exceeds one half. With three or more classes these are different things: a class can win with 0.4, and what is built here is the probability of being that class, not the boundary of the winner.',
    'Класс для контуров (пусто - все)': 'Class for the contours (empty - all)',
    'Имя класса ровно как в поле классов. При двух классах вписывайте интересующий: вероятности дополняют друг друга до единицы, и второй набор будет зеркальным дублем первого.': 'The class name exactly as in the class field. With two classes enter the one you care about: the probabilities complement each other to one, so the second set would be a mirror duplicate of the first.',
    'Бикубическое сглаживание границ': 'Bicubic smoothing of the boundaries',
    'Скругление границ (Chaikin), итераций': 'Boundary rounding (Chaikin), iterations',
    'Границы уровней вероятности (линии)': 'Probability level boundaries (lines)',
    'Полосы вероятности (полигоны)': 'Probability bands (polygons)',
    'Уровни вероятности не заданы или лежат вне интервала от 0 до 1 - векторные границы не строились.': 'No probability levels were given, or they fall outside the range from 0 to 1 - the vector boundaries were not built.',
    'Класс «%s» не найден. Классы в данных: %s.': 'Class \'%s\' was not found. Classes in the data: %s.',
    'Границы вероятности: классы %s, уровни %s.': 'Probability boundaries: classes %s, levels %s.',
    'Не удалось приписать класс «%s»: %s': 'Could not attach the class \'%s\': %s',
    'Не удалось собрать векторный выход: %s': 'Could not assemble the vector output: %s',
    'Не удалось убрать служебные поля: %s': 'Could not remove the housekeeping fields: %s',
    'границы': 'boundaries',
    'полосы': 'bands',
    'Качество подгонки R²=%.3f ниже %.2g: модель почти ничего не объясняет. Пользоваться её параметрами как есть нельзя - проверьте выбросы и парные близкие точки.': 'Fit quality R2=%.3f is below %.2g: the model explains next to nothing. Its parameters cannot be used as they are - check for outliers and pairs of nearby points.',
    'Доля наггета %.0f%% от суммарного порога: связь на коротких расстояниях не разрешена. Кригинг по такой модели сглаживает оценку до среднего, а на карте дают «бычьи глаза».': 'The nugget is %.0f%% of the total sill: correlation at short distances is not resolved. Kriging with such a model smooths the estimate towards the mean and produces bull\'s eyes on the map.',
    'Первый лаг: h=%.4g, пар %d, γ=%.4g при дисперсии данных %.4g.': 'First lag: h=%.4g, pairs %d, gamma=%.4g against a data variance of %.4g.',
    'На первом лаге разброс уже выше общей дисперсии. Описать это можно только наггетом, и кригинг после такого подбора будет возвращать среднее вместо карты.': 'At the first lag the spread already exceeds the overall variance. Only a nugget can describe this, and kriging fitted this way returns the mean instead of a map.',
    'Пары, формирующие наггет (внутри первого лага):': 'Pairs that form the nugget (within the first lag):',
    '  расстояние %.4g, значения %.4g и %.4g, вклад γ=%.4g (x %.6g y %.6g / x %.6g y %.6g)': '  distance %.4g, values %.4g and %.4g, contribution gamma=%.4g (x %.6g y %.6g / x %.6g y %.6g)',
    'Ориентация горизонталей вверх по склону: %s.': 'Contour orientation uphill: %s.',
    'как есть': 'as is',
    'Строит изолинии из растра: равномерный шаг или явные уровни (через пробел), главные (утолщённые) изолинии флагом is_index, фильтр коротких линий.\n\nСкругление линий (Chaikin) слегка сглаживает контуры и убирает «октагоны» от грубого грида. Сглаживание самого поля выполняется в инструменте 2D Kriging.\n\nБикубическое сглаживание (сгущение грида ×2…×4) даёт гладкие изолинии без «октагонов» от грубой сетки - это основной способ сглаживания, сильнее скругления линий (Chaikin). Работает и для линий, и для контурных полигонов: границы поясов совпадают с изолиниями.\n\nПо умолчанию строит и контурные полигоны (пояса между изолиниями) во временный слой - их границы СОВПАДАЮТ с изолиниями, покрытие сплошное. Чтобы их не строить - очистите поле «Контурные полигоны».\n\nПоля: линии - значение уровня (по умолчанию ELEV) и is_index (1 у главных); полигоны - ELEV_MIN/ELEV_MAX (диапазон пояса).\n\nФлажок **Топографические подписи** задаёт линиям одно направление относительно склона, и тогда верх цифры всегда смотрит вверх по склону, как на топокарте. QGIS отсчитывает верх подписи от направления линии, поэтому поворот текста задавать не нужно. В слое остаётся поле up_side: 1 означает, что линия оставлена как была, 0 что развёрнута.\n\nВажно: в настройках подписей слоя должно быть разрешено показывать перевёрнутые подписи. Иначе QGIS доворачивает текст ради читаемости и сводит разворот линий на нет. В стилях **Структура** и **Депрессия** это уже настроено. Если подписываете своим стилем, включите в разделе отрисовки подписей показ перевёрнутых. Топографическая подпись по определению бывает перевёрнутой: на склоне, обращённом на юг, цифра читается вверх ногами.': 'Builds isolines from a raster: a uniform step or explicit levels (space-separated), index (thicker) isolines via the is_index flag, a short-line filter.\n\nLine rounding (Chaikin) lightly smooths the contours and removes "octagons" from a coarse grid. Smoothing of the field itself is done in the 2D Kriging tool.\n\nBicubic smoothing (grid densification ×2…×4) gives smooth isolines without "octagons" from a coarse grid - it is the main smoothing method, stronger than line rounding (Chaikin). It works for both lines and contour polygons: band boundaries coincide with the isolines.\n\nBy default it also builds contour polygons (bands between isolines) into a temporary layer - their boundaries COINCIDE with the isolines, coverage is continuous. To skip them - clear the "Contour polygons" field.\n\nFields: lines - the level value (default ELEV) and is_index (1 on index lines); polygons - ELEV_MIN/ELEV_MAX (band range). The **Topographic labels** tick gives the lines a single direction relative to the slope, so that the top of the figure always faces up the slope, as on a topographic map. QGIS measures the top of a label from the direction of the line, so no text rotation needs to be set. The layer keeps an up_side field: 1 means the line was left as it was, 0 that it was reversed.\n\nImportant: the layer labelling must be allowed to show upside-down labels. Otherwise QGIS turns the text around for readability and cancels the effect of reversing the lines. In the **Structure** and **Depression** styles this is already set. If you label with a style of your own, enable showing upside-down labels in the label rendering section. A topographic label is upside down by definition on a slope facing south.',
    'Ступеней не осталось.': 'No steps are left.',
    'Ступени ослабли, но следы остались. Можно добавить итераций.': 'The steps have weakened but traces remain. More iterations can help.',
    'Ступени остались. Увеличьте число итераций или проверьте, то ли сечение задано.': 'Steps remain. Increase the number of iterations or check that the interval is the right one.',
    'Террасинг: отметки заметно липнут к уровням горизонталей. Лечится инструментом 2.14.': 'Terracing: the elevations noticeably stick to the contour levels.',
    'То же на уровне %.4g: ячеек %d, %.3g процента.': 'The same at level %.4g: %d cells, %.3g percent.',
    'Топографические подписи': 'Topographic labels',
    'Точек опробования %d, вне охвата ЦМР %d, горизонталей пропущено %d.': 'Sampling points %d, outside the DEM %d, contours skipped %d.',
    'Точки невязок': 'Residual points',
    'У разрезов разный вертикальный масштаб, чертежи будут несопоставимы. Пересоберите их одним прогоном 4.01.': 'The sections have different vertical scales and the drawings will not be comparable. Rebuild them in a single run of 4.01.',
    'Убирает ступени с рельефа, построенного по горизонталям, не сдвигая сами горизонтали.\n\nПоверхность сглаживается итеративно, но каждой точке запрещено уходить от исходного значения дальше заданной доли сечения. По умолчанию это половина сечения, то есть ровно ошибка квантования: поверхность, построенная по горизонталям с таким шагом, и так известна с этой точностью.\n\nОтсюда два свойства. Метод не может выдумать формы тоньше, чем позволяет исходное сечение, потому что размах правки ограничен сверху. И он не может перекинуть точку через горизонталь: сдвиг меньше половины шага между уровнями.\n\nИнструмент сам показывает результат лечения. Индекс притяжения отметок к уровням считается до и после, и обе цифры уходят в журнал. Около единицы означает, что ступеней не осталось.\n\n**Чего инструмент не делает.** Он не возвращает того, чего в данных нет. Если узкий врез срезан при построении рельефа, сглаживание его не восстановит: правка ограничена половиной сечения, а врез глубже. Не помогает он и на водной глади, там нужна маска, а не сглаживание.\n\nСечение задайте вручную или подайте слой горизонталей, тогда инструмент возьмёт шаг из него. Число итераций управляет гладкостью: полсотни хватает почти всегда, больше двухсот смысла не имеет, потому что правка упирается в ограничение.\n\n': 'Removes the steps from a relief built out of contours without moving the contours themselves.\n\nThe surface is smoothed iteratively, but every point is forbidden to move away from its original value by more than a set fraction of the contour interval. By default that is half the interval, which is exactly the quantisation error: a surface built from contours of that spacing is known only to that accuracy anyway.\n\nTwo properties follow. The method cannot invent forms finer than the source interval allows, because the amplitude of the correction is bounded from above. And it cannot throw a point across a contour: the shift is smaller than half the step between levels.\n\nThe tool shows the result of the treatment by itself. The index of attraction of elevations to the levels is computed before and after, and both figures go to the log. A value near one means no steps are left.\n\n**What the tool does not do.** It does not bring back what is not in the data. If a narrow cut was shaved off when the relief was built, smoothing will not restore it: the correction is bounded by half the interval and the cut is deeper. Nor does it help on a water surface, where a mask is needed rather than smoothing.\n\nSet the interval by hand or supply a contour layer, and the tool will take the step from it. The number of iterations controls smoothness: fifty is almost always enough, beyond two hundred there is no point, because the correction runs into the clamp.\n\n',
    'Снятие ступеней: до и после': 'Removal of steps: before and after',
    'Уверенность горизонталей': 'Contour confidence',
    'Уверенность горизонталей: порог перепада %.4g м на ячейку (%.3g сечения).': 'Contour confidence: drop threshold %.4g m per cell (%.3g of the interval).',
    'Уровень %.4g проходит по площадке с околонулевым уклоном: задето %d ячеек, это %.3g процента данных. Изолиния там рассыпется на мелкие кольца и будет выглядеть утолщённой.': 'Level %.4g runs across an area with a near-zero slope: %d cells are touched, %.3g percent of the data. The contour there will break into small rings and look thickened.',
    'Уровней всего %d: в построение %d, в проверку %d. Объектов %d и %d.': 'Levels in total %d: %d for building, %d for validation. Features %d and %d.',
    'ЦМР (построенный рельеф)': 'DEM (the built relief)',
    'ЦМР (проверяемый рельеф)': 'DEM (the relief being checked)',
    'ЦМР со ступенями': 'DEM with steps',
    'Шаг опробования вдоль горизонтали (0 = только вершины)': 'Sampling step along the contour (0 = vertices only)',
    'Это воспроизведение входа, а не точность предсказания: растр строился по этим же горизонталям. Чтобы получить цифру предсказания, разделите набор инструментом 2.11.': 'This is reproduction of the input, not predictive accuracy: the raster was built from these very contours. To obtain a figure of prediction, split the set with tool 2.11.',
    'автоматически': 'automatic',
    'в ряд слева направо': 'in a row, left to right',
    'величина': 'quantity',
    'вертикальная кривизна': 'vertical curvature',
    'воспроизведение входа': 'reproduction of the input',
    'до': 'before',
    'доля отметок у уровней': 'share of elevations at the levels',
    'допустимый сдвиг, м': 'allowed shift, m',
    'зеркально (задано вручную)': 'mirrored (set by hand)',
    'изолинии': 'contours',
    'исключено плоских, процентов': 'flat cells excluded, percent',
    'итераций': 'iterations',
    'как есть (задано вручную)': 'as is (set by hand)',
    'кривизна, 95 процентиль': 'curvature, 95th percentile',
    'кривизна, максимум': 'curvature, maximum',
    'кривизна, среднее модуля': 'curvature, mean absolute',
    'макс |r|': 'max |r|',
    'медиана |r|': 'median |r|',
    'мимо на полсечения, процентов': 'missing by half an interval, percent',
    'набор': 'set',
    'наибольший сдвиг, м': 'largest shift, m',
    'не переворачивать': 'do not flip',
    'не считать': 'do not compute',
    'невязка %{x:.3g}<br>точек %{y}<extra></extra>': 'residual %{x:.3g}<br>points %{y}<extra></extra>',
    'невязка (отметка минус ЦМР)': 'residual (elevation minus DEM)',
    'ожидаемая доля': 'expected share',
    'отметка %{x:.4g}<br>среднее %{y:.3g}<extra></extra>': 'elevation %{x:.4g}<br>mean %{y:.3g}<extra></extra>',
    'отметка горизонтали': 'contour elevation',
    'отношение': 'ratio',
    'отношение Г:В (ширина:высота чертежа)': 'H:V ratio (drawing width:height)',
    'отношение масштабов Г:В (1:N)': 'scale ratio H:V (1:N)',
    'перевернуть': 'flip',
    'положение отметки внутри сечения': 'position of the elevation within the interval',
    'поля и разрыв на подозрительных участках': 'fields plus a break on suspect stretches',
    'после': 'after',
    'предсказание на отложенных': 'prediction on the held-out set',
    'притяжение к уровням': 'attraction to levels',
    'разный': 'mixed',
    'сеткой': 'in a grid',
    'сечение рельефа': 'contour interval',
    'среднее': 'mean',
    'средняя невязка': 'mean residual',
    'стопкой сверху вниз': 'stacked top to bottom',
    'только поля drop_min и drop_mean': 'drop_min and drop_mean fields only',
    'точек': 'points',
    'фаза %{x:.3f}<br>ячеек %{y}<extra></extra>': 'phase %{x:.3f}<br>cells %{y}<extra></extra>',
    'ячеек': 'cells',
    '4. Разрез': '4. Cross-sections',
    '4.01 Разрез по линии': '4.01 Cross-section along a line',
    '3.2 Создать пример для разреза': '3.2 Create a section example',
    '3.3 Скважины на разрез': '3.3 Boreholes on a section',
    'Вертикальное преувеличение (как в разрезе)': 'Vertical exaggeration (as in the section)',
    'Готово: три поверхности (две залежи), линия и скважины. Поверхности и линию подайте в «Разрез по линии»; скважины с полями h1, h2, h3 и линию - в «Скважины на разрез».': 'Done: three surfaces (two beds), a line and boreholes. Feed the surfaces and the line into Cross-section along a line; feed the boreholes with the h1, h2, h3 fields and the line into Boreholes on a section.',
    'Интервалы пластов скважин (чертёж)': 'Borehole bed intervals (drawing)',
    'Коридор от линии, ед. карты (0 = все скважины)': 'Corridor from the line, map units (0 = all boreholes)',
    'Не задана линия или скважины.': 'No line or boreholes are set.',
    'Ни одна скважина не попала в коридор или не имеет отметок.': 'No borehole fell within the corridor or has elevations.',
    'Нужно минимум два поля отметок (кровля и подошва).': 'At least two elevation fields are needed (roof and floor).',
    'Поле номера скважины (для подписи)': 'Borehole number field (for the label)',
    'Поля отметок границ пластов (кровли и подошвы)': 'Bed-boundary elevation fields (roofs and floors)',
    'Проецирует скважины на линию разреза и показывает их колонками интервалов пластов в осях расстояние-высота, поверх чертежа из инструмента «Разрез по линии».\n\nГраницы пластов берутся из выбранных полей-отметок (кровли и подошвы). На каждой скважине их значения сортируются по убыванию, соседние пары дают интервалы пластов, поэтому порядок выбора полей и пропуски не важны. Каждый интервал получает номер пласта, а колонка - номер скважины.\n\nСкважина ставится на том расстоянии вдоль линии, куда падает её проекция. Дальние скважины отсекаются коридором (буфером вокруг линии). Вертикальное преувеличение задавайте таким же, как в «Разрез по линии», иначе колонки не лягут на пласты по высоте.': 'Projects boreholes onto the section line and shows them as columns of bed intervals in axes of distance and elevation, on top of the drawing from the Cross-section along a line tool.\n\nThe bed boundaries are taken from the chosen elevation fields (roofs and floors). On each borehole their values are sorted in descending order, adjacent pairs give the bed intervals, so the order of field selection and gaps do not matter. Each interval gets a bed number, and the column gets the borehole number.\n\nThe borehole is placed at the distance along the line where its projection falls. Distant boreholes are cut off by a corridor (a buffer around the line). Set the vertical exaggeration the same as in Cross-section along a line, otherwise the columns will not match the beds in height.',
    'Скважины': 'Boreholes',
    'Скважины вдоль линии (с отметками поверхностей)': 'Boreholes along the line (with surface elevations)',
    'Скважины на разрезе (интервалы)': 'Boreholes on the section (intervals)',
    'Спроецировано скважин: %d (интервалов %d), пропущено вне коридора %d.': 'Boreholes projected: %d (intervals %d), skipped outside the corridor %d.',
    'Устья скважин (подписи)': 'Borehole collars (labels)',
    'Поверхность 1 (кровля верхней вмещающей)': 'Surface 1 (roof of the upper host)',
    'Поверхность 2 (кровля 1-го промышленного)': 'Surface 2 (roof of the 1st industrial)',
    'Поверхность 3 (подошва 1-го промышленного)': 'Surface 3 (floor of the 1st industrial)',
    'Поверхность 4 (кровля 2-го промышленного)': 'Surface 4 (roof of the 2nd industrial)',
    'Поверхность 5 (подошва 2-го промышленного)': 'Surface 5 (floor of the 2nd industrial)',
    'Поверхность 6 (подошва нижней вмещающей)': 'Surface 6 (floor of the lower host)',
    'Поверхность 2 · кровля 1-го пром. (демо)': 'Surface 2 · roof of 1st industrial (demo)',
    'Поверхность 3 · подошва 1-го пром. (демо)': 'Surface 3 · floor of 1st industrial (demo)',
    'Поверхность 4 · кровля 2-го пром. (демо)': 'Surface 4 · roof of 2nd industrial (demo)',
    'Поверхность 5 · подошва 2-го пром. (демо)': 'Surface 5 · floor of 2nd industrial (demo)',
    'Поверхность 6 · подошва (демо)': 'Surface 6 · floor (demo)',
    'Готовый пример для инструментов разреза. Строит шесть гладких поверхностей, лежащих стопкой, с региональным падением и волнистой переменной мощностью. Между ними пять пластов в переслаивании: три вмещающих и два промышленных (2-й и 4-й, тонкие).\n\nПодайте шесть поверхностей сверху вниз (1...6) и линию в «Разрез по линии». Получите пять пластов на чертеже и 3D-забор. Кригинг для демо не нужен, поверхности уже растровые.\n\n**Структурные элементы с элементами залегания.** Три линии пересекают Разрез 1 в разных местах при одном и том же истинном угле падения 25 градусов и разном азимуте падения. Видимый угол выйдет разным - 25, 18.25 и ноль, - и это лучший способ увидеть, что на чертёж выходит не истинный угол.\n\nЛинии нарочно поставлены поперёк разреза, а азимут падения задан полем: он с направлением самой линии не связан. Первая версия демо располагала линию «по простиранию» параллельно разрезу, и она его попросту не пересекала - проверять нулевой случай было нечем.\n\nЭлементы поставлены на **Разрезе 2**, который прямой. На ломаном разрезе азимут звена меняется по ходу, и у излома эталон с инструментом брали его в разных звеньях: третий элемент давал видимый угол 1.33 вместо нуля. Расчёт был верен в обоих случаях, но эталон обязан быть однозначным.\n\nОжидаемое значение считается по азимуту ЗВЕНА в точке пересечения, как это делает и сам инструмент, и записывается в поле **app_exp**. Поэтому сверка точная: подайте слой в 4.05, укажите поля dip и dip_az, и app_dip обязан совпасть с app_exp до третьего знака.\n\n**Следы выхода для 4.12.** Три трёхмерные линии, лежащие на плоскостях с известным залеганием: пологая (20 градусов на юго-восток), крутая (72 на северо-запад) и намеренно прямая в плане. Первые две изогнуты, и 4.12 обязан вернуть по ним ровно те числа, что записаны в поля dip_true и az_true. Третья проверяет отказ: через прямую в пространстве проходит бесконечно много плоскостей, и залегание по ней не определено - инструмент обязан отказать с причиной, а не выдать похожее на правду число. Крутая линия проверяет второе: подгонка вида z = a*x + b*y + c на ней поплыла бы, а метод через собственные векторы считает её наравне с пологой.\n\n**Скважины с интервалами опробования.** Выдаётся готовая пара слоёв модели бурения: **устья collar** (точки с отметкой и глубиной забоя) и **интервалы interval** (таблица hole_id, from, to, code, глубины по стволу от устья). Требования те же, по которому выгружает Геоконструктор, поэтому инструмент **4.02 Скважины на разрезе** пробуется без своих данных: 4.10, потом 4.01 по любой линии, потом 4.02 с этой парой. Скважины стоят вдоль всех трёх линий и годятся также для 3D.\n\nВместе с ними выдаётся **справочник пластов демо**: те же коды, что стоят в интервалах, с порядком залегания, телом и цветом. Подайте его в **4.02**, и колонки скважин получат цвет и порядок в легенде. Поставляемый справочник из 4.11 кодов демо не знает, он собран по Верхнекамскому месторождению.\n\nПолосы пластов в 4.01 демо-справочник не красит, и это не недоделка, а устройство поиска: пласт там ищется по именам слоёв кровли и подошвы, а поверхности демо названы просто номерами. На своих данных, где слои названы кодами пластов, тот же справочник красит и полосы, и колонки.\n\nЕщё выдаётся по многоканальному гриду на каждый промышленный пласт. Конвенция каналов: 1 кровля, 2 подошва, 3+ параметры (здесь содержание и минтип, независимые стохастические поля). Пласт как блочная модель: один файл кормит «Состав пласта на разрез» (каналы 1/2/3) и 3D-просмотр.': 'A ready example for the section tools. It builds six smooth stacked surfaces with a regional dip and wavy variable thickness. Between them are five interbedded beds: three host beds and two industrial beds (the 2nd and 4th, thin).\n\nFeed the six surfaces top to bottom (1...6) and the line into Cross-section along a line. You get five beds on the drawing and a 3D fence. No kriging is needed for the demo, the surfaces are already rasters.\n\n**Structural elements with bedding attitudes.** Three lines cross Section 1 at different places, sharing one and the same true dip of 25 degrees and differing in the dip direction. The apparent angle comes out different - 25, 18.25 and zero - and that is the best way to see that it is not the true angle that reaches the drawing.\n\nThe lines are deliberately set across the section while the dip direction is given by a field: it is not tied to the direction of the line itself. The first version of the demo placed the along-the-strike line parallel to the section, and it simply never crossed it - there was nothing to check the zero case with.\n\nThe elements are placed on **Section 2**, which is straight. On a bent section the azimuth of the segment changes along the way, and at a bend the reference and the tool took it from different segments: the third element gave an apparent angle of 1.33 instead of zero. Both computations were right, but a reference has to be unambiguous.\n\nThe expected value is computed from the azimuth of the SEGMENT at the point of intersection, exactly as the tool does, and written into the **app_exp** field. The check is therefore exact: feed the layer to 4.05, name the dip and dip_az fields, and app_dip must match app_exp to three decimals.\n\n**Outcrop traces for 4.12.** Three three-dimensional lines lying on planes of a known attitude: gentle (20 degrees to the south-east), steep (72 to the north-west) and deliberately straight in plan. The first two are curved, and 4.12 must return exactly the numbers written into the dip_true and az_true fields. The third checks the refusal: infinitely many planes pass through one straight line in space, the attitude is undefined and the tool must refuse with a reason rather than produce a plausible-looking number. The steep line checks the other thing: a fit of the form z = a*x + b*y + c would drift on it, while the method through eigenvectors handles it on a par with the gentle one.\n\n**Boreholes with sampling intervals.** A ready pair of drilling-model layers is produced: **collars** (points with an elevation and the end of hole) and **intervals** (a table of hole_id, from, to, code, depths along the hole from the collar). The contract is the same one Geoconstructor exports by, so tool **4.02 Boreholes on the section** can be tried without your own data: 4.10, then 4.01 along any line, then 4.02 with that pair. The boreholes stand along all three lines and suit 3D as well.\n\nAlong with them a **demo bed reference** is produced: the very codes that stand in the intervals, with the bedding order, the body kind and the colour. Feed it into **4.02** and the borehole columns get their colour and legend order. The bundled reference from 4.11 does not know the demo codes, it is built for the Verkhnekamskoye deposit.\n\nThe demo reference does not colour the bed bands in 4.01, and that is how the lookup works rather than an omission: there a bed is found by the names of the roof and floor layers, while the demo surfaces are named by plain numbers. On your own data, where the layers are named by bed codes, the same reference colours both the bands and the columns.\n\nA multiband grid per industrial bed is also produced. The band convention: 1 roof, 2 bottom, 3+ parameters (here content and mineral type, independent stochastic fields). A bed as a block model: one file feeds Bed composition on a section (bands 1/2/3) and the 3D viewer.',
    'Грид состава (содержание или класс)': 'Composition grid (content or class)',
    'Красит полосу одного пласта на разрезе по гриду состава вдоль линии. Берёт кровлю, подошву и грид состава, свой кригинг не делает.\n\nРежим «непрерывное» (содержание KCl, нерастворимый остаток): полоса режется на тонкие вертикальные срезы, каждый со средним значением, под градиентную заливку.\n\nРежим «категориальное» (минеральный тип, фации - сильвинит, замещение, галит): смежные срезы одного класса сливаются в фациальные зоны, под заливку по категориям. Зоны замещения видны как смена цвета вдоль линии.\n\nЗапускайте по каждому промышленному пласту отдельно. Вертикальное преувеличение задавайте таким же, как в «Разрез по линии».': 'Colours the band of one bed on the section by a composition grid along the line. It takes a roof, a floor and a composition grid, and runs no kriging of its own.\n\nThe \'continuous\' mode (KCl content, insoluble residue): the band is cut into thin vertical slices, each with a mean value, for a graduated fill.\n\nThe \'categorical\' mode (mineral type, facies - sylvinite, replacement, halite): adjacent slices of the same class merge into facies zones, for a categorized fill. Replacement zones show as a colour change along the line.\n\nRun it for each industrial bed separately. Set the vertical exaggeration the same as in Cross-section along a line.',
    'Кровля пласта (растр)': 'Bed roof (raster)',
    'Нужны линия, кровля, подошва и грид состава.': 'A line, roof, floor and composition grid are needed.',
    'Пласт и состав не пересекают линию: результат пуст.': 'The bed and composition do not cross the line: the result is empty.',
    'Подошва пласта (растр)': 'Bed floor (raster)',
    'Состав': 'Composition',
    'Состав пласта (3D)': 'Bed composition (3D)',
    'Состав пласта (чертёж)': 'Bed composition (drawing)',
    'Состав пласта: построено полигонов %d (%s).': 'Bed composition: %d polygons built (%s).',
    'зоны': 'zones',
    'категориальное (минтип, фации)': 'categorical (mineral type, facies)',
    'непрерывное (содержание)': 'continuous (content)',
    'срезы': 'slices',
    'Вертикальный масштаб': 'Vertical scale',
    'Вертикальный масштаб: множитель vex = %.4g.': 'Vertical scale: exaggeration vex = %.4g.',
    'Вертикальный масштаб: отношение Г:В ~ %.4g:1, множитель vex ~ %.4g.': 'Vertical scale: H:V ratio ~ %.4g:1, exaggeration vex ~ %.4g.',
    'Значение масштаба (отношение Г:В или множитель)': 'Scale value (H:V ratio or exaggeration)',
    'множитель': 'exaggeration factor',
    'отношение Г:В (ширина:высота)': 'H:V ratio (width:height)',
    '3. Дополнительные инструменты анализа': '3. Additional analysis tools',
    '3.2 Скважины на разрез': '3.2 Boreholes on a section',
    '3.4 Создать пример для разреза': '3.4 Create a section example',
    '4.04 Пересечение поверхностей с разрезом': '4.04 Intersect surfaces with the section',
    '3.5 Проекция объектов на разрез': '3.5 Project objects onto the section',
    '3.6 Спроецировать с разреза': '3.6 Unproject from the section',
    '3.7 Развёртка стенки ствола': '3.7 Unwrap a shaft wall',
    '3.8 Создать пример для разреза': '3.8 Create a section example',
    'В определении нет линии.': 'The definition has no line.',
    'В слое оси нет точки.': 'The axis layer has no point.',
    'Возвращает объекты, нарисованные на чертеже разреза, в реальные координаты. Горизонтальная координата вершины читается как расстояние вдоль линии (даёт план X, Y), высота - как отметка Z = высота / vex.\n\nЛиния и vex берутся из определения разреза - того же, по которому строился чертёж. Геометрия выходит с отметкой Z в реальной системе координат.\n\nТак нарисованный на разрезе объект (контур залежи, нарушение, граница) попадает обратно в план и в 3D.': 'Returns objects drawn on the section drawing to real coordinates. The horizontal coordinate of a vertex is read as the distance along the line (giving the plan X, Y), the height as the elevation Z = height / vex.\n\nThe line and vex come from the section definition - the same one the drawing was built with. The geometry comes out with a Z elevation in the real coordinate system.\n\nThis is how an object drawn on the section (an ore outline, a fault, a boundary) gets back into the plan and into 3D.',
    'Возвращено в план объектов: %d.': 'Objects returned to plan: %d.',
    'Гриды не открылись.': 'The grids could not be opened.',
    'Коридор от линии (0 = все объекты)': 'Corridor from the line (0 = all objects)',
    'Линии поверхностей (3D)': 'Surface lines (3D)',
    'Линии поверхностей на разрезе (чертёж)': 'Surface lines on the section (drawing)',
    'Множитель vex из определения: %.4g.': 'Exaggeration vex from the definition: %.4g.',
    'Нанесено поверхностей: %d.': 'Surfaces placed: %d.',
    'Наносит поверхности-гриды на разрез линиями в осях расстояние-высота. Каждый грид выбирается вдоль линии разреза, и его сечение ложится на чертёж рядом с пластами.\n\nЛиния и вертикальный масштаб берутся из определения разреза (линейный слой с полем vex - его выдаёт «Разрез по линии»). Поэтому линии гридов совпадают с разрезом без ручной подгонки.\n\nГодится для водоносных горизонтов, маркирующих поверхностей, кровли соли, поверхностей аномалий.': 'Places surface grids onto the section as lines in distance-elevation axes. Each grid is sampled along the section line, and its trace lies on the drawing next to the beds.\n\nThe line and the vertical scale come from the section definition (a line layer with a vex field produced by Cross-section along a line). So the grid lines match the section without manual fitting.\n\nGood for water tables, marker surfaces, the salt roof, anomaly surfaces.',
    'Нет объектов для проекции.': 'No objects to project.',
    'Ни один объект не спроецирован (коридор или геометрия).': 'No object was projected (corridor or geometry).',
    'Нужны определение и объекты.': 'A definition and objects are needed.',
    'Нужны определение разреза и хотя бы один грид.': 'A section definition and at least one grid are needed.',
    'Нужны ось и поверхности.': 'An axis and surfaces are needed.',
    'Объекты в плане (с отметкой Z)': 'Objects in plan (with Z elevation)',
    'Объекты для проекции': 'Objects to project',
    'Объекты на разрезе': 'Objects on the section',
    'Объекты на разрезе (чертёж)': 'Objects on the section (drawing)',
    'Объекты с разреза в плане': 'Section objects in plan',
    'Объекты с чертежа разреза': 'Objects from the section drawing',
    'Определение разреза': 'Section definition',
    'Определение разреза (линия с полем vex для других тулз)': 'Section definition (a line with a vex field for other tools)',
    'Определение разреза (линия с полем vex)': 'Section definition (a line with a vex field)',
    'Ось ствола (точка устья)': 'Shaft axis (collar point)',
    'Поверхности на разрезе': 'Surfaces on the section',
    'Поверхности-гриды': 'Surface grids',
    'Поверхности-гриды (маркирующие)': 'Surface grids (markers)',
    'Поле отметки (если геометрия без Z)': 'Elevation field (if the geometry has no Z)',
    'Проецирует объекты (точки, линии, полигоны) на разрез. Для каждой вершины горизонталь - расстояние вдоль линии до её проекции, высота - отметка из 3D-геометрии или из выбранного поля.\n\nЛиния и вертикальный масштаб берутся из определения разреза. Дальние объекты отсекаются коридором. Результат в тех же осях, что и чертёж разреза, кладётся поверх него.\n\nТак на разрез наносят аномалии, точки опробования, трассы, контуры - всё, что нужно увидеть в плоскости разреза.': 'Projects objects (points, lines, polygons) onto the section. For each vertex the horizontal coordinate is the distance along the line to its projection, the height is the elevation from the 3D geometry or from a chosen field.\n\nThe line and the vertical scale come from the section definition. Distant objects are cut off by a corridor. The result is in the same axes as the section drawing and is placed on top of it.\n\nThis is how anomalies, sampling points, traces and outlines are placed on the section - anything to be seen in the section plane.',
    'Радиус ствола, ед. карты': 'Shaft radius, map units',
    'Развёртка стенки (дуга × высота)': 'Wall unwrap (arc × elevation)',
    'Развёртка стенки ствола': 'Shaft wall unwrap',
    'Развёртка: поверхностей %d, окружность %.4g ед, шаг %.4g градусов.': 'Unwrap: %d surfaces, circle %.4g units, step %.4g degrees.',
    'Спроецировано объектов: %d, пропущено вне коридора %d.': 'Objects projected: %d, skipped outside the corridor %d.',
    'Угловой шаг, градусы': 'Angular step, degrees',
    'Цилиндрический разрез - развёртка стенки шахтного ствола. Вокруг оси ствола на заданном радиусе берётся окружность с угловым шагом (по умолчанию 1 градус), и поверхности-гриды выбираются вдоль неё.\n\nРазвёртка ложится в оси длина дуги по окружности - высота. Каждая маркирующая поверхность даёт линию своего пересечения со стенкой ствола: при падении пластов линии наклонены и волнисты.\n\nОсь задаётся точечным слоем (устье), радиус - в единицах карты. Вертикальный масштаб как у разреза.': 'A cylindrical section - the unwrapped wall of a mine shaft. Around the shaft axis at a given radius a circle is taken with an angular step (1 degree by default), and the surface grids are sampled along it.\n\nThe unwrap lies in axes of arc length along the circle and elevation. Each marker surface gives the line of its intersection with the shaft wall: where the beds dip the lines are tilted and wavy.\n\nThe axis is set by a point layer (the collar), the radius is in map units. The vertical scale is as in the section.',
    'Шаг выборки вдоль линии (0 = по ячейке)': 'Sampling step along the line (0 = by cell)',
    'Гидравлический градиент': 'Hydraulic gradient',
    'Изолинии': 'Isolines',
    'Индикаторный кригинг': 'Indicator kriging',
    'Кригинг': 'Kriging',
    'Кригинг с внешним дрейфом': 'External drift kriging',
    'Пример разреза': 'Section example',
    'Пример скважин': 'Example boreholes',
    'Разрез': 'Section',
    'Удельный расход': 'Specific discharge',
    'Инструмент: %s': 'Tool: %s',
    'Создано: %s': 'Created: %s',
    'Угловые вертикали разреза': 'Section corner verticals',
    'Угловые вертикали разреза (чертёж)': 'Section corner verticals (drawing)',
    'Угловые точки разреза': 'Section corner points',
    'Угловые точки разреза (чертёж)': 'Section corner points (drawing)',
    'Горизонтальные оси разреза': 'Section horizontal axes',
    'Горизонтальные оси с отметками (чертёж)': 'Horizontal axes with elevation ticks (drawing)',
    'Количество отметок высоты на осях': 'Number of elevation ticks on the axes',
    'Таблица углов разреза': 'Section corner table',
    'Таблица углов: азимут и расстояние (чертёж)': 'Corner table: azimuth and distance (drawing)',
    '4.02 Скважины на разрезе': '4.02 Boreholes on the section',
    '4.03 Состав пласта на разрезе': '4.03 Bed composition on the section',
    '3.5 Проекция объектов на разрез (бета)': '3.5 Project objects onto the section (beta)',
    '3.6 Спроецировать с разреза (бета)': '3.6 Unproject from the section (beta)',
    '3.7 Развёртка стенки ствола (бета)': '3.7 Unwrap a shaft wall (beta)',
    'Масштаб взят из определения разреза: vex = %.4g.': 'Scale taken from the section definition: vex = %.4g.',
    'Определение разреза (для общего масштаба, опционально)': 'Section definition (for a shared scale, optional)',
    '3.06 Гауссова симуляция (SGS)': '3.06 Gaussian simulation (SGS)',
    'SGS P10': 'SGS P10',
    'SGS P90': 'SGS P90',
    'SGS вероятность превышения': 'SGS exceedance probability',
    'SGS медиана P50': 'SGS median P50',
    'SGS среднее (E-type)': 'SGS mean (E-type)',
    'SGS стандартное отклонение': 'SGS standard deviation',
    'Ансамбль крупный (>400 МБ в памяти). Уменьшите количество реализаций или огрубите ячейку, если не хватит памяти.': 'The ensemble is large (>400 MB in memory). Reduce the number of realizations or coarsen the cell if you run out of memory.',
    'Вариограмма баллов: %s, наггет %.3f, порог %.3f, радиус %.4g (R2=%.2f).': 'Score variogram: %s, nugget %.3f, sill %.3f, range %.4g (R2=%.2f).',
    'Вероятность ВЫШЕ порога (иначе ниже)': 'Probability ABOVE the threshold (otherwise below)',
    'Вероятность превышения порога': 'Exceedance probability',
    'Гауссова симуляция': 'Gaussian simulation',
    'Зерно ГСЧ (0 = случайное)': 'RNG seed (0 = random)',
    'Квантиль P10': 'P10 quantile',
    'Квантиль P90': 'P90 quantile',
    'Макс. количество соседей на узел': 'Max neighbours per node',
    'Медиана P50': 'Median P50',
    'Модель вариограммы баллов': 'Score variogram model',
    'Не удалось подобрать вариограмму нормальных баллов (мало точек или нет структуры).': 'Could not fit a normal-score variogram (too few points or no structure).',
    'Поле значения': 'Value field',
    'Порог отсечки для вероятности (опционально)': 'Cut-off threshold for probability',
    'Последовательная гауссова симуляция: ансамбль равновероятных реализаций вместо одной сглаженной оценки кригинга. Каждая реализация воспроизводит гистограмму и вариограмму данных и проходит через скважины, поэтому по набору реализаций видна НЕОПРЕДЕЛЁННОСТЬ - разброс, квантили P10/P50/P90, вероятность превышения отсечки. Там, где реализации расходятся, оценка слабая.\n\nВариограмма нормальных баллов подбирается автоматически. Выходы - растры: среднее по ансамблю (E-type), стандартное отклонение (неопределённость), квантили P10/P50/P90 и при заданном пороге карта вероятности превышения. Время растёт с размером грида и числом реализаций - начинайте с грубой ячейки и 50-100 реализаций.': 'Sequential Gaussian simulation: an ensemble of equally probable realizations instead of a single smoothed kriging estimate. Each realization reproduces the data histogram and variogram and passes through the boreholes, so the set of realizations shows the UNCERTAINTY - spread, P10/P50/P90 quantiles, exceedance probability. Where the realizations diverge, the estimate is weak.\n\nThe normal-score variogram is fitted automatically. Outputs are rasters: the ensemble mean (E-type), the standard deviation (uncertainty), the P10/P50/P90 quantiles and, when a threshold is set, an exceedance-probability map. Runtime grows with grid size and the number of realizations - start with a coarse cell and 50-100 realizations.',
    'Радиус поиска (0 = авто, 3 радиуса вариограммы)': 'Search radius (0 = auto, 3 variogram ranges)',
    'Сетка %d x %d, ячейка %.4g, реализаций %d.': 'Grid %d x %d, cell %.4g, realizations %d.',
    'Слишком мало точек для симуляции (нужно хотя бы 8).': 'Too few points for simulation (at least 8 needed).',
    'Среднее по ансамблю (E-type)': 'Ensemble mean (E-type)',
    'Стандартное отклонение (неопределённость)': 'Standard deviation (uncertainty)',
    'Точки (скважины)': 'Points (boreholes)',
    'Количество реализаций': 'Number of realizations',
    'авто': 'auto',
    'гауссова': 'gaussian',
    'сферическая': 'spherical',
    'экспоненциальная': 'exponential',
    '4.05 Пересечение векторов с разрезом': '4.05 Vector intersection with the section',
    '4.07 Проекция объектов на разрез': '4.07 Project objects onto the section',
    '4.08 Спроецировать с разреза': '4.08 Unproject from the section',
    '4.09 Развёртка стенки ствола (бета)': '4.09 Shaft wall unwrap (beta)',
    '4.10 Пример для разреза (демо)': '4.10 Create a section example',
    'Масштаб Z (вертикальное преувеличение)': 'Z scale (vertical exaggeration)',
    'Смещение Z': 'Z offset',
    'Разнос по Z (шаг на каждый следующий грид)': 'Z spacing (step per next grid)',
    'Прореживание узлов (каждый N-й)': 'Node thinning (every Nth)',
    'Нужен хотя бы один грид.': 'At least one grid is required.',
    'Грид не открылся: %s': 'Grid could not be opened: %s',
    'Грид пропущен (мал или пуст): %s': 'Grid skipped (too small or empty): %s',
    'Меш записан: %s (узлов %d, треугольников %d).':
        'Mesh written: %s (%d nodes, %d triangles).',
    'Слой меша не загрузился: %s': 'Mesh layer failed to load: %s',
    'Вертикальное преувеличение': 'Vertical exaggeration',
    'Разнос по Z (шаг вниз)': 'Z spacing (step down)',
    'Поверхности (растры проекта):': 'Surfaces (project rasters):',
    'Отметьте хотя бы один растр.': 'Check at least one raster.',
    'Показано поверхностей: %d.': 'Surfaces shown: %d.',
    'Пропущено: %s': 'Skipped: %s',
    'Скважины (точки)': 'Boreholes (points)',
    'Поля отметок': 'Elevation fields',
    '(нет)': '(none)',
    'Скважин: %d.': 'Boreholes: %d.',
    'Прозрачность поверхностей (процентов)': 'Surface transparency (percent)',
    'Сверху': 'Top view',
    'Сбоку': 'Side view',
    'Снимок PNG…': 'PNG snapshot…',
    'Сохранить снимок': 'Save the snapshot',
    'Снимок сохранён: %s': 'Snapshot saved: %s',
    'кровля': 'roof',
    'подошва': 'bottom',
    'Пласт 1-й пром. (каналы: кровля, подошва, содержание, минтип)': '1st industrial bed (bands: roof, bottom, content, mineral type)',
    'Пласт 2-й пром. (каналы: кровля, подошва, содержание, минтип)': '2nd industrial bed (bands: roof, bottom, content, mineral type)',
    'Пласт 1-й пром. (демо)': '1st industrial bed (demo)',
    'Пласт 2-й пром. (демо)': '2nd industrial bed (demo)',

    'содержание': 'content',
    'минтип': 'mineral type',
    'Канал кровли': 'Roof band',
    'Канал подошвы': 'Bottom band',
    'Канал состава': 'Composition band',
    'Канал высот (Z)': 'Elevation band (Z)',
    'Канал атрибута': 'Attribute band',
    'Окраска поверхностей атрибутом (растр)': 'Colour surfaces by attribute (raster)',
    'Кровля (растр)': 'Roof (raster)',
    'Подошва (растр)': 'Bottom (raster)',
    'Параметры (растры, берётся канал 1)': 'Parameters (rasters, band 1 is taken)',
    'Канал содержания (пусто - без содержания)': 'Content band (empty - no content)',
    'Плотность руды, т/м³': 'Ore density, t/m³',
    'Контур подсчёта (полигоны, необязательно)': 'Reserve contour (polygons, optional)',
    'Отчёт (HTML)': 'Report (HTML)',
    'HTML-файлы (*.html)': 'HTML files (*.html)',
    'Канал содержания вне грида.': 'The content band is outside the grid.',
    'мощность': 'thickness',
    'Площадь подсчёта': 'Computed area',
    'Мощность средняя / мин / макс': 'Thickness mean / min / max',
    'Объём': 'Volume',
    'Плотность': 'Density',
    'Запасы руды': 'Ore reserves',
    'Содержание (взвешенное по мощности)': 'Content (thickness-weighted)',
    'Запасы металла': 'Metal reserves',
    'Ячеек с отрицательной мощностью': 'Cells with a negative thickness',
    'Блоков выгружено: %d.': 'Blocks exported: %d.',
    'Полигоны доменов': 'Domain polygons',
    'Поле кода домена (число, необязательно)': 'Domain code field (numeric, optional)',
    'Грид не открылся.': 'The grid did not open.',
    'Домены записаны в канал %d. Ячеек в доменах: %d.': 'Domains written to band %d. Cells in domains: %d.',
    'Модель «было» (центроиды)': 'The "before" model (centroids)',
    'Модель «стало» (центроиды)': 'The "after" model (centroids)',
    'Разность (центроиды)': 'Difference (centroids)',

    'Слоёв по вертикали (деление колонки)': 'Vertical layers (column split)',
    'Канал плотности (пусто - брать значение выше)': 'Density band (empty - use the value above)',

    '3.07 Фрактальная размерность': '3.07 Fractal dimension',
    'Считает карту фрактальной размерности поверхности '
    'вариограммным методом: в скользящем окне строится лог-лог '
    'вариограмма по лагам 1..N ячеек, её наклон даёт показатель '
    'Хёрста H, размерность D = 3 - H. Гладкие дифференцируемые '
    'участки дают D около 2, изрезанные и шумные - ближе к 3; '
    'перепады D подчёркивают зоны тектонических нарушений, границы '
    'блоков и смену характера рельефа кровли.\n\nВыход - грид D, '
    'готовый для «1.2 Изолинии из растра» (галка в дополнительных '
    'добавит H вторым каналом); глобальные D и '
    'H по всей поверхности печатаются в журнал. Малое окно (5-8 '
    'ячеек) показывает микроструктуру, большое (12-20) - '
    'региональные зоны. Растр должен быть в метрической системе '
    'координат.':
        'Computes a fractal-dimension map of a surface by the variogram '
        'method: a log-log variogram over lags of 1..N cells is built in a '
        'sliding window, its slope gives the Hurst exponent H, the '
        'dimension D = 3 - H. Smooth differentiable areas give D near 2, '
        'rugged and noisy ones tend to 3; the steps of D highlight zones '
        'of tectonic disturbance, block boundaries and changes of the roof '
        'relief character.\n\nThe output is a D grid ready for "1.2 '
        'Isolines from a raster" (an advanced checkbox adds H as band 2); '
        'the global D and H over the whole surface are '
        'printed to the log. A small window (5-8 cells) shows the '
        'microstructure, a large one (12-20) - regional zones. The raster '
        'must be in a metric CRS.',
    'Поверхность (растр)': 'Surface (raster)',
    'Канал высот': 'Elevation band',
    'Полурадиус окна, ячеек': 'Window half-radius, cells',
    'Количество лагов вариограммы': 'Number of variogram lags',
    'Фрактальная размерность (D)': 'Fractal dimension (D)',
    'Записать H вторым каналом': 'Write H as band 2',
    'Изолинии по карте D: «1.2 Изолинии из растра», канал 1.': 'Isolines over the D map: "1.2 Isolines from a raster", band 1.',
    'Окно или лаги велики для этого грида.': 'The window or the lags are too large for this grid.',
    'Глобально: D = %.3f, H = %.3f.': 'Globally: D = %.3f, H = %.3f.',
    '3.08 Box-counting маски': '3.08 Mask box-counting',
    'Классический box-counting: растр бинаризуется порогом '
    '(объект - значения больше порога), маска покрывается ячейками '
    'убывающего размера, наклон log N от log(1/размер) даёт одну '
    'размерность D на всю маску. Линейный объект даёт D около 1, '
    'пятно - около 2, изрезанные контуры замещения или выработок - '
    'между. Точность метода на конечных масках порядка ±0.1 - '
    'используйте его для сравнения масок между собой, а не как '
    'абсолютную меру.\n\nРезультат печатается в журнал вместе с '
    'таблицей размеров и счётов и возвращается числом D.':
        'Classic box-counting: the raster is binarised by a threshold '
        '(the object - values above it), the mask is covered by cells of '
        'a decreasing size, the slope of log N versus log(1/size) gives '
        'one dimension D for the whole mask. A linear object gives D near '
        '1, a blob - near 2, rugged replacement or workings outlines - in '
        'between. The accuracy on finite masks is about ±0.1 - use it to '
        'compare masks with each other rather than as an absolute '
        'measure.\n\nThe result is printed to the log with a table of '
        'sizes and counts and returned as the number D.',
    'Растр маски': 'Mask raster',
    'Порог (объект: значение > порога)': 'Threshold (object: value > threshold)',
    'Канал': 'Band',
    'Размерность D': 'Dimension D',
    'Маска пуста: нет значений выше порога.': 'The mask is empty: no values above the threshold.',
    'Пикселей в маске: %d.': 'Pixels in the mask: %d.',
    'Box-counting: D = %.3f.': 'Box-counting: D = %.3f.',
    '2.09 Размерность линий и границ': '2.09 Line and boundary dimension',
    'Считает размерность каждой линии методом циркуля (Ричардсона): линия проходится хордами убывающего раствора, наклон log N от log r даёт D. Прямая даёт 1, изрезанная линия - больше; для изолиний это диагностика сглаживания: пересглаженные изолинии теряют изрезанность и D падает к единице, а сравнение D до и после сглаживания показывает, сколько геометрии съедено.\n\nВыход - те же линии с полями D и steps (количество шагов минимального циркуля); среднее D печатается в журнал. Полигоны принимаются тоже: меряется внешнее кольцо границы. Короткие линии (меньше 30 вершин или очень малой длины) получают пустое D.':
        'Computes the dimension of every line by the divider (Richardson) '
        'method: the line is walked with chords of a decreasing span, the '
        'slope of log N versus log r gives D. A straight line gives 1, a '
        'rugged one - more; for isolines this is a smoothing diagnostic: '
        'oversmoothed isolines lose their ruggedness and D drops towards '
        'one, and comparing D before and after smoothing shows how much '
        'geometry was eaten.\n\nPolygons are accepted too: the exterior '
        'ring of the boundary is measured. The output is the same lines '
        'with the D and steps fields (the step count of the smallest '
        'divider); the mean D is printed to the log. Short lines (fewer '
        'than 30 vertices or of a very small length) get an empty D.',
    'Линии': 'Lines',
    'Линии или полигоны': 'Lines or polygons',
    'Объекты с размерностью': 'Features with the dimension',
    'Линии с размерностью': 'Lines with the dimension',
    'Среднее D по %d линиям: %.3f.': 'Mean D over %d lines: %.3f.',
    '2.10 Размерность Минковского (векторы)': '2.10 Minkowski dimension (vectors)',
    'Box-counting напрямую по векторам: линии и границы полигонов покрываются сеткой убывающего размера, наклон log N от log(1/размер) даёт размерность Минковского. Прямая линия и гладкая граница дают D около 1, речная сеть - 1.1-1.5, сильно изрезанная береговая линия - до 1.3 и выше.\n\nКаждый объект получает поле D_mink; отдельно считается и печатается в журнал D всего слоя как единого множества - для речной сети это размерность сети целиком, она выше размерности отдельных рукавов. Метод дополняет циркуль из 2.9: циркуль меряет извилистость одной линии, Минковский - заполнение плоскости набором объектов.\n\nПараметры: K - ступеней лесенки размеров (8-12 обычно; слишком большое K уводит мелкие ячейки ниже масштаба детальности линии, и D занижается к 1); сдвигов сетки - случайные смещения с минимальным покрытием, снимают привязку к сетке (3-5); фактор уплотнения - шаг выборки вдоль сегментов в долях ячейки, 0 - только вершины. Каждый объект получает и D_r2 - качество лог-лог аппроксимации: ниже 0.85 оценке доверять нельзя.':
        'Box-counting directly over vectors: lines and polygon boundaries '
        'are covered by a grid of a decreasing size, the slope of log N '
        'versus log(1/size) gives the Minkowski dimension. A straight line '
        'and a smooth boundary give D near 1, a river network - 1.1-1.5, a '
        'heavily rugged coastline - up to 1.3 and above.\n\nEvery feature '
        'gets a D_mink field; separately the D of the whole layer as one '
        'set is computed and printed to the log - for a river network that '
        'is the dimension of the network as a whole, higher than that of '
        'the individual branches. The method complements the divider of '
        '2.09: the divider measures the sinuosity of one line, Minkowski - '
        'the plane filling by a set of features.\n\nParameters: K - the '
        'size-ladder steps (8-12 typically; a too large K takes the small '
        'cells below the line detail scale and D drops towards 1); grid '
        'offsets - random shifts with the minimal cover, remove the grid '
        'alignment (3-5); the densify factor - the sampling step along '
        'the segments as a cell fraction, 0 - vertices only. Every feature '
        'also gets D_r2 - the log-log fit quality: below 0.85 the estimate '
        'cannot be trusted.',
    'Количество размеров сетки': 'Number of grid sizes',
    'Размерность слоя': 'Layer dimension',
    'Размерность Минковского слоя: D = %.3f.': 'Minkowski dimension of the layer: D = %.3f.',
    'Количество размеров сетки (K)': 'Number of grid sizes (K)',
    'Сдвигов сетки на размер': 'Grid offsets per size',
    'Фактор уплотнения выборки (0 - вершины)': 'Sampling densify factor (0 - vertices)',
    'R² аппроксимации слоя': 'Layer fit R²',
    'Размерность Минковского слоя: D = %.3f (R² = %.3f).': 'Minkowski dimension of the layer: D = %.3f (R² = %.3f).',
    'R² ниже 0.85: степенной закон не выдержан, оценке '
    'доверять нельзя (уменьшите K или проверьте данные).':
        'R² below 0.85: the power law does not hold, the estimate cannot '
        'be trusted (reduce K or check the data).',

    '2.11 Создать пример для фракталов (демо)': '2.11 Create a fractal example (demo)',
    'Генерирует учебные объекты для фрактальных инструментов: '
    'ветвящуюся речную сеть (поле order - порядок притока), полигон '
    'водосбора с изрезанной границей и отдельную береговую линию '
    '(срединные смещения). Реки подавайте в 2.10 - размерность '
    'сети; берег и границу водосбора - в 2.09 и 2.10; растеризуйте '
    'водосбор - и он же пример для 3.08.':
        'Generates study features for the fractal tools: a branching river '
        'network (the order field - the tributary order), a basin polygon '
        'with a rugged boundary and a separate coastline (midpoint '
        'displacements). Feed the rivers into 2.10 - the network '
        'dimension; the coast and the basin boundary - into 2.09 and 2.10; '
        'rasterise the basin - and it doubles as an example for 3.08.',
    'Охват': 'Extent',
    'Зерно генератора': 'Generator seed',
    'Реки (демо)': 'Rivers (demo)',
    'Водосбор (демо)': 'Basin (demo)',
    'Берег (демо)': 'Coast (demo)',
    'Рек сгенерировано: %d.': 'Rivers generated: %d.',



    'Isoliner развивается на задачах реальных предприятий. '
    'Если вашему производству не хватает функции - напишите '
    'нам: https://www.informpp.ru/главная-страница/'
    'предприятиям':
        'Isoliner grows on the tasks of real mining operations. '
        'If your production is missing a feature - contact us: '
        'https://www.informpp.ru/главная-страница/предприятиям',



    'Фильтр слоёв…': 'Filter layers…',
    'Все': 'All',
    'Ничего': 'None',
    'Слои': 'Layers',
    'Векторы': 'Vectors',
    'Параметры слоя': 'Layer settings',
    'Режим': 'Mode',
    'Авто': 'Auto',
    'Поверхность': 'Surface',
    'Внешний атрибут (растр)': 'External attribute (raster)',
    'канал %d': 'band %d',
    'Окраска': 'Colouring',
    'Поле подписи скважин': 'Borehole label field',
    'Задать свой цвет': 'Set a custom colour',






    'Плоскость разреза (линия)': 'Section plane (line)',
    'Плоскостей разреза: %d.': 'Section planes: %d.',





    'Окраска: %s [%.4g … %.4g].': 'Colour: %s [%.4g … %.4g].',



    'Слой для пересечения (линии или полигоны)': 'Layer to intersect (lines or polygons)',
    'Поле подписи (необязательно)': 'Label field',
    'Чертёж разреза (для высоты рамки)': 'Section drawing (for frame height, optional)',
    'Низ диапазона Z (если нет чертежа)': 'Bottom of Z range (if no drawing)',
    'Верх диапазона Z (если нет чертежа)': 'Top of Z range (if no drawing)',
    'Вертикали на разрезе (линии без Z)': 'Verticals on the section (lines without Z)',
    'Точки пересечения (линии с Z)': 'Intersection points (lines with Z)',
    'Полосы зон на разрезе (полигоны)': 'Zone bands on the section (polygons)',
    'Вертикали на разрезе': 'Verticals on the section',
    'Точки на разрезе': 'Points on the section',
    'Полосы зон на разрезе': 'Zone bands on the section',
    'Нужны определение разреза и слой для пересечения.': 'A section definition and a layer to intersect are required.',
    'Пересечения: точек %d, вертикалей %d, полос %d.': 'Intersections: %d points, %d verticals, %d bands.',
    'Для объектов без отметки Z нужна высота рамки: подайте чертёж разреза или задайте диапазон Z. Такие объекты пропущены.': 'Objects without a Z elevation need a frame height: supply the section drawing or set a Z range. Such objects were skipped.',
    'Разлом для пересечения (2D-линия)': 'Fault for intersection (2D line)',
    'Маркер с отметкой Z (3D-линия)': 'Marker with Z elevation (3D line)',
    'Зона замещения для пересечения (полигон)': 'Replacement zone for intersection (polygon)',
    'Разлом (демо, 2D)': 'Fault (demo, 2D)',
    'Разлом A': 'Fault A',
    'Маркер с Z (демо, 3D)': 'Marker with Z (demo, 3D)',
    'Маркер K (с Z)': 'Marker K (with Z)',
    'Зона (демо, полигон)': 'Zone (demo, polygon)',
    'Зона замещения': 'Replacement zone',
    'Высота рамки из определения: %.4g..%.4g.': 'Frame height from the definition: %.4g..%.4g.',
    'Для объектов без отметки Z нужна высота рамки. Возьмите определение от «Разрез по линии» (в нём уже есть высота) либо подайте чертёж разреза или задайте диапазон Z. Такие объекты пропущены.': 'Objects without a Z elevation need a frame height. Use a definition from "Cross-section along a line" (it already carries the height), or supply the section drawing or set a Z range. Such objects were skipped.',
    'Наносит векторные объекты на разрез по точному пересечению с линией разреза, в осях расстояние-высота.\n\nПравило по типу объекта. Линия БЕЗ отметки высоты (плоская в плане - разлом, граница, контур) даёт вертикаль на всю высоту в станции пересечения: известно где, неизвестно на какой глубине. Линия С отметкой (3D, координата Z - наклонный объект, контур поверхности) даёт точку на реальной высоте в месте пересечения. Полигон (зона в плане - замещение, шахтное поле, лицензия) даёт вертикальную полосу на интервале, где разрез идёт сквозь зону.\n\nЛиния и vex берутся из определения разреза. Высота рамки тоже берётся из определения (его пишет «Разрез по линии»), поэтому для объектов без Z подавать ничего не нужно. Если в определении высоты нет, она берётся из чертежа разреза или из диапазона Z в дополнительных параметрах.\n\n\n**Обрезка сверху по линии рельефа.** Подайте слой линий рельефа с чертежа, тот самый, что выдаёт «Разрез по линии». Верх зон и разломов ляжет по рельефу, а не по рамке, и кромка полосы повторит его переломы. Берётся именно линия с чертежа, а не растр ЦМР: разрез мог строиться по другой поверхности, и тогда растр с чертежом разойдутся, а обрезать надо по тому, что человек видит. Разрезы сопоставляются по полю sec_id.\n\n**Сохранять имя и стиль исходного слоя** - две галочки для случая, когда подан один слой. Выход тогда называется по нему («Геология на разрезе» вместо «Полосы зон на разрезе»), а оформление берётся у самого слоя, а не из штатного стиля модуля. Раскраска по полю переносится вместе с атрибутами, поэтому категорийный стиль геологии ложится на разрез как есть, без ручного повторения палитры. Слоёв подано несколько - обе галочки молчат и в журнал уходит строка почему. Линия с отметкой Z даёт точку, и линейный стиль на неё не встанет, там тоже остаётся штатный.\n\n**Обрезка снизу по линии низа** устроена так же и работает по той же линии с чертежа: подайте слой подошвы, почвы пласта или любой нижней поверхности, и низ зон и разломов ляжет по ней. Когда линии нет, низ остаётся по рамке. Если в слое несколько поверхностей, обрезка идёт по огибающей: сверху по самой высокой, снизу по самой низкой. Нужна одна конкретная поверхность, подайте слой, отфильтрованный по полю name.\n\n**Угол и азимут падения.** Линия без отметки по умолчанию даёт вертикаль: известно где, неизвестно под каким углом. Если заданы **угол падения** и **азимут падения** (полями по имени или постоянными на слой), вместо вертикали рисуется след падения от поверхности вниз.\n\nНа чертёж выходит не истинный угол, а **видимый**: tg(видимый) = tg(истинный) * cos(азимут падения - азимут разреза). Разрез вкрест простирания даёт истинный угол, разрез по простиранию - ноль, и объект ложится горизонтально. Азимут разреза берётся по звену, на котором лежит пересечение, поэтому на ломаном профиле наклон в разных местах разный.\n\n**Прореживание вершин полос.** Кромка ставит узел в каждой станции выборки, и на длинном разрезе их выходят сотни: чертёж тяжелеет, а глазом лишние вершины не видны. Допуск задаётся в метрах высоты, ноль отключает. Узлы выбрасываются парами: верх и низ обязаны стоять в одних станциях, иначе там, где кромки почти сходятся, полоса вывернулась бы бантиком.\n\nНаклон работает и для линий, и для полигонов. Линия даёт след падения от поверхности вниз, полоса зоны становится параллелограммом: каждый узел низа съезжает по падению на величину своего перепада. Вертикальной полоса остаётся только тогда, когда углы не заданы или видимый угол вышел нулевым - при разрезе точно по простиранию.\n\nАзимут обязателен: из геометрии он не выводится, один и тот же объект может падать в любую сторону. Без него объекты остаются вертикальными - молчаливое допущение «плоскость перпендикулярна разрезу» и есть частая ошибка построения. Сторону наклона задавать не надо, её решает знак косинуса.\n\n**Длина следа** задаётся по горизонтали в метрах, ноль означает до рамки. Короткий след-указатель обычно берут в полтора-два сантиметра на листе: при 1:2000 это 30-40 м.\n\nВ атрибуты пишутся три числа: **dip** (истинный), **dip_az** и **app_dip** (видимый). Мерить угол транспортиром по чертежу нельзя - вертикальный масштаб искажает нарисованный наклон, как искажает и всё остальное на разрезе.\n\n**Поле нижней отметки** задаёт низ полос и вертикалей поштучно, чтобы наносить зоны своей глубины, а не на всю рамку. По умолчанию значение читается как абсолютная отметка. Флажок в дополнительных параметрах переключает его на глубину от верха объекта. Низ ниже рамки не опускается.\n\n**Атрибуты объектов переносятся на разрез.** Флажок включён по умолчанию. Слоёв подаётся несколько, схемы у них разные, поэтому колонки сводятся в один общий набор: поле, которого у слоя нет, остаётся пустым, а одинаковое имя в разных слоях считается одной колонкой. Имена, совпадающие со служебными (sec, src, label, d, z, d1, d2), переименовываются с суффиксом: иначе атрибут объекта молча подменил бы координату разреза. Благодаря этому полосы и вертикали красятся по возрасту, индексу или любому своему полю без ручного связывания.\n\nВ отличие от «Проекции объектов на разрез» (приблизительной, по коридору) это точное пересечение.': 'Places vector objects on the section by exact intersection with the section line, in distance-elevation axes.\n\nRule by object type. A line WITHOUT an elevation (flat in plan - fault, boundary, contour) gives a full-height vertical at the crossing station: the where is known, the depth is not. A line WITH an elevation (3D, a Z coordinate - an inclined object, a surface contour) gives a point at the real elevation of the crossing. A polygon (a plan zone - replacement, mine field, licence) gives a vertical band over the interval where the section runs through the zone.\n\nThe line and vex are taken from the section definition. The frame height is taken from the definition too (written by "Cross-section along a line"), so nothing needs to be supplied for objects without Z. If the definition has no height, it is taken from the section drawing or from the Z range in the advanced parameters.\n\nUnlike "Project objects onto the section" (approximate, corridor-based) this is an exact intersection.\n\n**Clipping from above by the terrain line.** Supply the terrain line layer from the drawing, the one Cross-section along a line outputs. The top of zones and faults will follow the terrain rather than the frame, and the upper edge of a band will repeat its breaks. The line from the drawing is used rather than the DEM raster: the section may have been built over a different surface, and then the raster and the drawing would diverge, while clipping must follow what the person sees. Sections are matched by the sec_id field.\n\n**Keep the name and the style of the source layer** are two checkboxes for the case of a single supplied layer. The output is then named after it ("Geology on the section" instead of "Zone bands on the section"), and the appearance is taken from the layer itself rather than from the standard style of the module. A colouring by a field travels together with the attributes, so a categorised geology style lands on the section as it is, without repeating the palette by hand. If several layers are supplied both checkboxes stay silent and a line explaining why goes to the log. A line with a Z elevation gives a point, and a line style will not fit it, so the standard one stays there too.\n\n**Clipping from below by the bottom line** works the same way and uses the same line from the drawing: supply the layer of the sole, the floor of a seam or any lower surface, and the bottom of zones and faults will follow it. With no line supplied the bottom stays on the frame. If the layer holds several surfaces, clipping follows the envelope: the highest one above, the lowest one below. When one particular surface is needed, supply the layer filtered by the name field.\n\n**Dip and dip direction.** A line without an elevation gives a vertical by default: the position is known, the angle is not. When the **dip** and the **dip direction** are given (by field name or as constants for the layer), a dip trace is drawn from the surface downwards instead of the vertical.\n\nWhat reaches the drawing is not the true angle but the **apparent** one: tan(apparent) = tan(true) * cos(dip direction - section azimuth). A section across the strike gives the true angle, a section along the strike gives zero and the object honestly lies flat. The azimuth of the section is taken from the segment carrying the intersection, so on a bent profile the inclination differs from place to place.\n\n**Thinning the vertices of the bands.** An edge puts a node at every sampling station, and on a long section they run into hundreds: the drawing gets heavy while the extra vertices are invisible to the eye. The tolerance is given in metres of elevation, zero switches it off. Nodes are dropped in pairs: the top and the bottom must stand at the same stations, otherwise where the edges nearly converge the band would tie itself into a bow.\n\nThe inclination works both for lines and for polygons. A line gives a dip trace from the surface downwards, a zone band becomes a parallelogram: every node of the bottom slides down-dip by its own drop. A band stays vertical only when the angles are not given or the apparent angle came out zero - with a section exactly along the strike.\n\nThe dip direction is required: it does not follow from the geometry, one and the same object may dip either way. Without it the objects stay vertical - the silent assumption that the plane is perpendicular to the section is a common error of construction. The side of the inclination needs no parameter, the sign of the cosine decides it.\n\n**The trace length** is set horizontally in metres, zero means down to the frame. A short pointer trace is usually taken as one and a half to two centimetres on the sheet: at 1:2000 that is 30-40 m.\n\nThree numbers go into the attributes: **dip** (true), **dip_az** and **app_dip** (apparent). The angle must not be measured with a protractor on the drawing - the vertical exaggeration distorts the drawn inclination, as it distorts everything else on a section.\n\n**The bottom elevation field** sets the bottom of bands and verticals per feature, so zones of their own depth can be drawn instead of the full frame. By default the value is read as an absolute elevation. A checkbox in the advanced parameters switches it to a depth from the top of the feature. The bottom is never taken below the frame.\n\n**Feature attributes are carried onto the section.** The checkbox is on by default. Several layers are supplied and their schemas differ, so the columns are merged into one common set: a field a layer does not have stays empty, and the same name in different layers counts as one column. Names that clash with the service ones (sec, src, label, d, z, d1, d2) are renamed with a suffix, otherwise a feature attribute would silently replace a section coordinate. Thanks to this the bands and verticals can be coloured by age, index or any field of your own without manual joining.\n\n',
    'Слои для пересечения (линии и полигоны)': 'Layers to intersect (lines and polygons)',
    'Нужны определение разреза и хотя бы один слой для пересечения.': 'A section definition and at least one layer to intersect are required.',
    '4.06 Пересечение TIN с разрезом': '4.06 Intersect a TIN with the section',
    'Грани TIN (слои 3D-полигонов, PolygonZ)': 'TIN faces (layers of 3D polygons, PolygonZ)',
    'Меш-слой (2.5D, для общности)': 'Mesh layer (2.5D, for generality)',
    'Трасса TIN на разрезе (чертёж)': 'TIN trace on the section (drawing)',
    'Трасса TIN (3D)': 'TIN trace (3D)',
    'Трасса TIN на разрезе': 'TIN trace on the section',
    'Нужны определение разреза и хотя бы один слой граней или меш.': 'A section definition and at least one faces layer or a mesh are required.',
    'Граней обработано: %d, сегментов трассы: %d.': 'Faces processed: %d, trace segments: %d.',
    'Слой «%s» без 3D-полигонов (нет Z) - пропущен.': 'Layer "%s" has no 3D polygons (no Z) - skipped.',
    'Меш не прочитан: %s': 'Mesh not read: %s',
    'Трасса пуста: TIN не пересекает линию разреза или нет 3D-граней.': 'Empty trace: the TIN does not cross the section line or there are no 3D faces.',
    'Режет TIN (поверхность из 3D-треугольников) разрезом и кладёт трассу на чертёж в осях расстояние-высота.\n\nГлавное отличие от «Пересечения поверхностей» (4.04, гриды): грид это z = f(x,y), одно значение на точку, опрокинутое он не возьмёт. TIN из настоящих 3D-граней может нависать: над одной станцией несколько отметок, и трасса заворачивается - складки с опрокинутыми крыльями ложатся как есть.\n\nВход - слои 3D-полигонов (PolygonZ, грани TIN; не треугольники разбиваются веером) и/или меш-слой. Линия и vex берутся из определения разреза, высота - с самих граней, поэтому для TIN ничего задавать не нужно.\n\nВнимание: меш QGIS это 2.5D (z как скаляр на вершине), опрокинутое в нём не представимо. Нависание дают только настоящие 3D-грани от геомоделлера.': 'Cuts a TIN (a surface of 3D triangles) with the section and places the trace on the drawing in distance-elevation axes.\n\nThe key difference from "Intersect surfaces" (4.04, grids): a grid is z = f(x,y), one value per point, and cannot represent overturning. A TIN of true 3D faces can overhang: several elevations above one station, and the trace folds back - recumbent folds with overturned limbs come out as they are.\n\nInputs are layers of 3D polygons (PolygonZ, TIN faces; non-triangles are fan-split) and/or a mesh layer. The line and vex come from the section definition, the height from the faces themselves, so nothing needs to be set for a TIN.\n\nNote: a QGIS mesh is 2.5D (z as a scalar per vertex), overturning is not representable in it. Overhangs come only from true 3D faces from a geomodeller.',
    'Готово: шесть поверхностей (пять пластов: три вмещающих и два промышленных), линия и скважины. Поверхности и линию подайте в «Разрез по линии»; скважины с полями h1...h6 и линию - в «Скважины на разрез». Разлом, маркер с Z и зона - для «Пересечения векторов с разрезом», опрокинутая TIN - для «Пересечения TIN с разрезом».': 'Done: six surfaces (five beds: three host and two ore), a line and boreholes. Feed the surfaces and the line into "Cross-section along a line"; the boreholes with fields h1...h6 and the line into "Boreholes on the section". The fault, the Z marker and the zone are for "Vector intersection with the section", the overturned TIN for "Intersect a TIN with the section".',
    'Опрокинутая TIN (3D-грани для пересечения)': 'Overturned TIN (3D faces for intersection)',
    'Опрокинутая TIN (демо)': 'Overturned TIN (demo)',
    'Складка (опрокинутая)': 'Fold (overturned)',
    'О плагине…': 'About…',
    'О плагине': 'About',
    'Руководство (PDF)': 'Manual (PDF)',
    'История изменений': 'Changelog',
    'Версия %s': 'Version %s',
    'Исходный код': 'Source code',
    'Сообщить об ошибке': 'Report an issue',
    'Руководство не найдено.': 'Manual not found.',
    # 5.07 Создать пример полиэдра (демо)
    'Пример': 'Example',
    'Куб': 'Cube',
    'Тетраэдр': 'Tetrahedron',
    'Размер, ед. карты': 'Size, map units',
    'Выдать как TIN (триангулировать)': 'Output as TIN (triangulate)',
    'X начала': 'X of origin',
    'Y начала': 'Y of origin',
    'Не удалось собрать геометрию из WKT.':
        'Could not build geometry from WKT.',
    'Нативный тип {0} на этой сборке недоступен - вывод как MultiPolygon Z. '
    'Нативный PolyhedralSurface / TIN и QSFCGAL доступны с QGIS 3.40.':
        'The native {0} type is unavailable on this build, output as '
        'MultiPolygon Z. Native PolyhedralSurface / TIN and QSFCGAL are '
        'available from QGIS 3.40.',
    'Не удалось создать выходной слой типа %s.':
        'Could not create an output layer of type %s.',
    'Тип геометрии: %s Z.': 'Geometry type: %s Z.',
    'Граней: %d.': 'Patches: %d.',
    'Оболочка замкнута (водонепроницаема).':
        'Shell is closed (watertight).',
    'Оболочка НЕ замкнута: открытых рёбер %d.':
        'Shell is NOT closed: open edges %d.',
    'Охват (окно вида) - размещение и размер':
        'Extent (map view) - placement and size',
    'Мощность, ед. карты':
        'Thickness, map units',
    'Отметка залегания (подошва), ед. карты':
        'Base elevation (floor), map units',
    'Диапазон Z: %.3f .. %.3f (ед. карты).':
        'Z range: %.3f .. %.3f (map units).',
    'Тел: %d.':
        'Bodies: %d.',
    'Свита x%d (демо)': 'Suite x%d (demo)',
    'Куб (демо)': 'Cube (demo)',
    'Тетраэдр (демо)': 'Tetrahedron (demo)',
    'Объектов: %d, граней всего: %d.': 'Objects: %d, faces total: %d.',
    'Не удалось разнести свиту по слоям (%s) - вывод одним слоем.':
        'Could not split the suite into layers (%s) - output as one layer.',
    '1.8 Минимальная кривизна (точки → растр)':
        '1.8 Minimum curvature (points -> raster)',
    'Анизотропия (отношение осей Y/X)':
        'Anisotropy (Y/X axis ratio)',
    'Грид (минимальная кривизна)':
        'Grid (minimum curvature)',
    'Коэффициент релаксации (SOR)':
        'Relaxation factor (SOR)',
    'Максимум итераций':
        'Maximum iterations',
    'Натяжение (0 - мин. кривизна, 1 - мембрана)':
        'Tension (0 - minimum curvature, 1 - membrane)',
    'Натяжение на границе':
        'Boundary tension',
    'Охват (0 = по точкам)':
        'Extent (0 = from points)',
    'Порог невязки (0 = авто, 0.01% размаха)':
        'Residual threshold (0 = auto, 0.01% of the range)',
    'Сетка %d x %d, ячейка %.4g. Порог невязки %.4g.':
        'Grid %d x %d, cell %.4g. Residual threshold %.4g.',
    'Сошлось за %d итераций (невязка %.4g).':
        'Converged in %d iterations (residual %.4g).',
    'Узлов-данных: %d из %d.':
        'Data nodes: %d of %d.',
    'Достигнут потолок %d итераций, невязка %.4g больше порога %.4g. Увеличьте число итераций или порог невязки.':
        'Reached the cap of %d iterations, residual %.4g exceeds the threshold %.4g. Increase the iterations or the residual threshold.',
    'Строит грид методом минимальной кривизны: поверхность ведёт себя как тонкая упругая пластина, проходящая через данные с минимумом изгиба (решение бигармонического уравнения). Метод неточный - данные воспроизводятся приближённо, зато поверхность максимально гладкая, поэтому его любят для карт геофизических полей и любых плавных величин.\n\nНатяжение подмешивает мембранный член: 0 - чистая минимальная кривизна, 1 - натянутая мембрана (меньше выбросов между пробами). Отдельно задаётся натяжение на границе. Решение итеративное (SOR обходом девятью цветами): сетка сходится, пока изменение узла не станет меньше порога невязки или не исчерпаются итерации.\n\nРазмер ячейки 0 = min(охват)/50. Порог невязки 0 = 0.01 процента от размаха данных. Выход - грид, готовый для «1.2 Изолинии из растра». Это детерминированная альтернатива кригингу без подбора вариограммы; кригинг же даёт оценку с погрешностью.':
        'Builds a grid by minimum curvature: the surface behaves like a thin elastic plate passing through the data with the least bending (a solution of the biharmonic equation). The method is not exact - the data are honored approximately - but the surface is as smooth as possible, which is why it is favored for maps of geophysical fields and any smooth quantity.\n\nTension mixes in a membrane term: 0 is pure minimum curvature, 1 is a taut membrane (fewer overshoots between samples). Boundary tension is set separately. The solution is iterative (SOR with a nine-colour sweep): the grid converges until a node changes by less than the residual threshold or the iterations run out.\n\nCell size 0 = min(extent)/50. Residual threshold 0 = 0.01 percent of the data range. The output is a grid ready for "1.2 Isolines from raster". It is a deterministic alternative to kriging without variogram fitting; kriging, in turn, gives an estimate with an error.',
    'Скользящий контроль (leave-one-out) для метода гридирования - кригинга или минимальной кривизны. Каждая проверяемая точка по очереди исключается, её значение предсказывается методом по остальным и сравнивается с фактом. По ошибкам считаются ME (смещение), MAE, RMSE и R - объективная оценка качества метода и сравнение методов между собой.\n\nКак в Surfer: можно проверять случайную выборку из N точек (на больших данных быстрее), ограничить проверку подобластью (фильтр по охвату и по значению) и задать буфер исключения - соседние точки в прямоугольнике вокруг проверяемой не участвуют в её оценке (нужно для сгущённых кластеров, иначе оценка просто повторяет соседа).\n\nВыходы: слой точек с ошибками и HTML-отчёт (график оценка/факт, гистограмма, метрики). Для минимальной кривизны переоценка идёт с тёплого старта от полного решения, поэтому каждая точка считается быстро, но на очень больших выборках уменьшайте N.':
        'Leave-one-out cross-validation for a gridding method - kriging or minimum curvature. Each validation point is removed in turn, its value is predicted by the method from the rest and compared with the fact. From the errors it computes ME (bias), MAE, RMSE and R - an objective quality measure for the method and a way to compare methods.\n\nLike in Surfer: you can validate a random subset of N points (faster on large data), restrict validation to a subarea (extent and value filters) and set an exclusion buffer - neighbouring points in a rectangle around the validation point are left out of its estimate (needed for dense clusters, otherwise the estimate just repeats a neighbour).\n\nOutputs: an error point layer and an HTML report (estimate-vs-fact plot, histogram, metrics). For minimum curvature each re-estimate warm-starts from the full solution, so a point is fast to compute, but reduce N on very large samples.',
    '1.9 Кросс-валидация метода (LOO)':
        '1.9 Method cross-validation (LOO)',
    '== Кросс-валидация метода (LOO) ==':
        '== Method cross-validation (LOO) ==',
    'HTML (*.html)':
        'HTML (*.html)',
    'HTML-отчёт':
        'HTML report',
    'ME (смещение):   %+.4g':
        'ME (bias):       %+.4g',
    'MSDR:            %.3f':
        'MSDR:            %.3f',
    'RMSE:            %.4g':
        'RMSE:            %.4g',
    'Буфер исключения по X (0 = выкл.)':
        'Exclusion buffer in X (0 = off)',
    'Буфер исключения по Y (0 = выкл.)':
        'Exclusion buffer in Y (0 = off)',
    'Кросс-валидация метода: %s · %s':
        'Method cross-validation: %s · %s',
    'Метод':
        'Method',
    'Метод: %s. Проверяем %d из %d точек.':
        'Method: %s. Validating %d of %d points.',
    'Мин. кривизна: анизотропия (Y/X)':
        'Min curvature: anisotropy (Y/X)',
    'Мин. кривизна: коэффициент релаксации':
        'Min curvature: relaxation factor',
    'Мин. кривизна: максимум итераций':
        'Min curvature: maximum iterations',
    'Мин. кривизна: натяжение (0..1)':
        'Min curvature: tension (0..1)',
    'Мин. кривизна: натяжение на границе':
        'Min curvature: boundary tension',
    'Мин. кривизна: охват сетки (0 = по точкам)':
        'Min curvature: grid extent (0 = from points)',
    'Мин. кривизна: порог невязки (0 = авто)':
        'Min curvature: residual threshold (0 = auto)',
    'Мин. кривизна: размер ячейки (0 = авто)':
        'Min curvature: cell size (0 = auto)',
    'Минимальная кривизна':
        'Minimum curvature',
    'Натяжение':
        'Tension',
    'Оценка метода (LOO)':
        'Method estimate (LOO)',
    'Ошибки CV (%s) %s':
        'CV errors (%s) %s',
    'Ошибки кросс-валидации':
        'Cross-validation errors',
    'После фильтров осталось меньше двух проверяемых точек.':
        'Fewer than two validation points remain after the filters.',
    'Прервано.':
        'Cancelled.',
    'Проверяемых точек (0 = авто, min(N, 100))':
        'Points to validate (0 = auto, min(N, 100))',
    'Проверять при Z не выше (пусто = нет)':
        'Validate where Z is at most (empty = none)',
    'Проверять при Z не ниже (пусто = нет)':
        'Validate where Z is at least (empty = none)',
    'Проверять только в охвате (0 = везде)':
        'Validate only within the extent (0 = everywhere)',
    'Сетка':
        'Grid',
    'Ячейка':
        'Cell',
    'кригинг':
        'kriging',
    'мин. кривизна':
        'min. curvature',
    'минимальная кривизна':
        'minimum curvature',
    'Наклон Best Fit': 'Best-fit slope',
    '1.0 - идеал, меньше 1 - занижение высоких значений': '1.0 is ideal, below 1 means high values are underestimated',
    'Сдвиг Best Fit': 'Best-fit intercept',
    '0 - идеал': '0 is ideal',
    'Угол Best Fit': 'Best-fit angle',
    '45° - идеал': '45° is ideal',
    'Best Fit (оценка по факту): наклон %.3f, сдвиг %+.3g, угол %.1f°': 'Best fit (estimate vs fact): slope %.3f, intercept %+.3g, angle %.1f°',
    'серая - идеал (1:1), синяя - регрессия': 'grey - ideal (1:1), blue - regression',
    'Ячеистая декластеризация (порт GSLIB declus). Когда пробы сгущены неравномерно - одни блоки разбурены плотнее, - наивная глобальная статистика смещается в сторону переразведанных участков: если гуще бурили богатые зоны, среднее и гистограмма завышены. Инструмент даёт каждой пробе вес, обратный локальной плотности (в скоплении меньше, на отшибе больше), и считает представительное декластеризованное среднее.\n\nРазмер ячейки подбирается автоматически (свип по размерам, выбор по минимуму декластеризованного среднего) либо задаётся вручную. На регулярной сети декластеризация ничего не меняет - веса равны.\n\nВыход: слой точек с полем весов wt и HTML-отчёт (сводка, гистограмма сырая против взвешенной, кривая среднего). Декластеризованное среднее - готовая оценка для подсчёта запасов и для «Среднего» простого кригинга (1.1). Поле wt подаётся в гауссову симуляцию (3.06) для взвешенной гистограммы.':
        'Cell declustering (a port of GSLIB declus). When samples are clustered unevenly - some blocks drilled denser - the naive global statistics shift toward the over-sampled areas: if rich zones were drilled denser, the mean and histogram are overstated. The tool gives each sample a weight inversely proportional to the local density (less in a cluster, more on its own) and computes a representative declustered mean.\n\nThe cell size is chosen automatically (a sweep over sizes, picking the minimum declustered mean) or set manually. On a regular grid declustering changes nothing - the weights are equal.\n\nOutput: a point layer with a wt weight field and an HTML report (summary, raw-vs-weighted histogram, the mean curve). The declustered mean is a ready estimate for reserve calculation and for the Mean of simple kriging (1.1). The wt field feeds the Gaussian simulation (3.06) for a weighted histogram.',
    'Декластеризованное среднее - представительная оценка для подсчёта запасов и для «Среднего» простого кригинга. Поле весов wt подаётся в SGS (3.06) для взвешенной гистограммы.':
        'The declustered mean is a representative estimate for reserve calculation and for the Mean of simple kriging. The wt weight field feeds SGS (3.06) for a weighted histogram.',
    '1.0 Декластеризация (веса)': '1.0 Declustering (weights)',
    '== Декластеризация ==': '== Declustering ==',
    'plotly недоступен, отчёт без графиков (%s).': 'plotly unavailable, report without charts (%s).',
    'Авто (свип по размеру)': 'Auto (size sweep)',
    'Вес декластеризации': 'Declustering weight',
    'Веса декластеризации (%s)': 'Declustering weights (%s)',
    'Гистограмма строится с весами декластеризации (поле «%s»).': 'The histogram is built with declustering weights (field "%s").',
    'Гистограмма: сырая и взвешенная': 'Histogram: raw and weighted',
    'Декластеризация: %s': 'Declustering: %s',
    'Декластеризованное среднее': 'Declustered mean',
    'Декластеризованное среднее: %.4g (%+.2f%%)': 'Declustered mean: %.4g (%+.2f%%)',
    'Значение': 'Value',
    'Значение (%s)': 'Value (%s)',
    'Максимум среднего (скопления в бедном)': 'Maximum mean (clusters in the poor)',
    'Минимум среднего (скопления в богатом)': 'Minimum mean (clusters in the rich)',
    'Наивное среднее': 'Naive mean',
    'Наивное среднее:          %.4g': 'Naive mean:              %.4g',
    'Не удалось прочитать поле весов - веса игнорируются.': 'Could not read the weight field - weights ignored.',
    'Показатель': 'Metric',
    'Поле весов декластеризации (из 1.0, необязательно)': 'Declustering weight field (from 1.0, optional)',
    'Поле весов содержит пустые или неположительные значения - веса игнорируются.':
        'The weight field has empty or non-positive values - weights ignored.',
    'Размер ячейки': 'Cell size',
    'Размер ячейки для ручного режима': 'Cell size for manual mode',
    'Размер ячейки не задан - взят %.4g.': 'Cell size not set - using %.4g.',
    'Ручной размер': 'Manual size',
    'Сдвиг': 'Shift',
    'Слишком мало точек.': 'Too few points.',
    'Смещений начала сетки (усреднение)': 'Grid-origin offsets (averaging)',
    'Соотношение ячейки Y/X': 'Cell Y/X ratio',
    'Среднее от размера ячейки': 'Mean vs cell size',
    'Точек: %d, размер ячейки: %.4g': 'Points: %d, cell size: %.4g',
    'Точки с весами декластеризации': 'Points with declustering weights',
    'Цель свипа': 'Sweep objective',
    'Число размеров в свипе': 'Number of sizes in the sweep',
    'Это среднее ставьте в «Среднее» простого кригинга, а поле wt - в поле весов SGS.':
        'Put this mean into the Mean of simple kriging, and the wt field into the SGS weight field.',
    'взвешенная': 'weighted',
    'выбор': 'chosen',
    'декл. среднее': 'decl. mean',
    'сырая': 'raw',
    '1.01 Декластеризация (веса)': '1.01 Declustering (weights)',
    '1.02 2D Kriging (точки → растр)': '1.02 2D Kriging (points → raster)',
    '1.03 Минимальная кривизна (точки → растр)': '1.03 Minimum curvature (points -> raster)',
    '1.04 Изолинии из растра': '1.04 Isolines from raster',
    '1.05 Вариограмма (экспериментальная)': '1.05 Variogram (experimental)',
    '1.06 Вариограммная карта (анизотропия)': '1.06 Variogram map (anisotropy)',
    '1.07 Кросс-валидация вариограммы': '1.07 Variogram cross-validation',
    '1.08 Кросс-валидация метода (LOO)': '1.08 Method cross-validation (LOO)',
    '1.09 Профили обработки': '1.09 Processing profiles',
    '1.10 Пример скважин (демо)': '1.10 Create sample wells (demo)',
    'Пары взвешены декластеризацией (поле «%s»).': 'Pairs weighted by declustering (field "%s").',
    'Поле весов декластеризации (из 1.01)': 'Declustering weight field (from 1.01)',
    'Доли классов взвешены декластеризацией (поле «%s»).': 'Class proportions weighted by declustering (field "%s").',
    'Метрики взвешены декластеризацией (поле «%s»).': 'Metrics weighted by declustering (field "%s").',
    '5. Геологическая модель (бета)': '5. Geological model (beta)',
    '6. Гидрология рек': '6. River hydrology',
    '7. Фрактальный анализ': '7. Fractal analysis',
    '5.01 Согласованность пачки пластов': '5.01 Consistency of a bed stack',
    'Кровли и подошвы пластов': 'Roofs and floors of the beds',
    'Справочник пластов (порядок сверху вниз)': 'Bed reference (order from top down)',
    'Допуск выклинивания, м': 'Pinch-out tolerance, m',
    'Зоны несогласованности': 'Zones of inconsistency',
    'Пары кровля-подошва разобраны так:': 'The roof-floor pairs were parsed as follows:',
    'Не сложилось в пары:': 'Did not form a pair:',
    'Подайте растры пластов.': 'Supply the bed rasters.',
    'Ни одной пары кровля-подошва. Имена слоёв должны оканчиваться на признак роли, например B_top и B_bottom.': 'Not a single roof-floor pair. The layer names must end with a mark of the role, for example B_top and B_bottom.',
    'Растры разного размера: %s. Приведите пачку к одной сетке.': 'Rasters of different size: %s. Bring the stack to one grid.',
    'Несогласованность найдена на площади %.0f м2. Это места, где независимо построенные поверхности разошлись; смотреть их надо разрезом, а не картой.': 'Inconsistency found over an area of %.0f m2. These are the places where independently built surfaces diverged; they should be looked at on a section rather than on a map.',
    'Пачка согласована: перехлёстов и отрицательных мощностей нет.': 'The stack is consistent: no overlaps and no negative thicknesses.',
    'имя не содержит признака кровли или подошвы': 'the name carries no mark of a roof or a floor',
    'для пласта уже есть слой этой роли': 'the bed already has a layer of this role',
    'для пласта нет подошвы': 'the bed has no floor',
    'для пласта нет кровли': 'the bed has no roof',
    'Проверяет, согласована ли пачка кровель и подошв между собой. Ничего не исправляет: считает и показывает, а решение остаётся за геологом.\n\n**Откуда берётся несогласованность.** Кровли и подошвы обычно строятся кригингом независимо друг от друга: каждая поверхность знает свои замеры и ничего не знает о соседях. Пока пласты выдержаны, это сходит с рук. В зоне выклинивания, где мощность идёт к нулю, две независимо построенные поверхности почти неизбежно пересекаются, и дальше по такой пачке считаются отрицательные объёмы.\n\n**Что проверяется.** Выклинивание - мощность в пределах допуска от нуля, это геология, а не дефект. Отрицательная мощность - кровля ниже подошвы. Перехлёст соседей - подошва вышележащего опустилась ниже кровли нижележащего; каждый пласт по одиночке при этом может быть цел.\n\n**Пары собираются по именам слоёв.** Суффиксы кровли и подошвы разбираются сами: B_top и B_bottom дают пласт B. Как разобрано каждое имя, печатается в журнал таблицей, а неразобранное перечисляется отдельно - угадывать вслепую хуже, чем сказать «не понял». Порядок берётся из дерева слоёв, если справочник пластов не задан.\n\n**Допуск выклинивания** по смыслу равен точности построения поверхностей. При нуле численный шум в зоне схождения посыплется в ошибки.\n\n**Карта зазора** показывает, где пачка ближе всего к перехлёсту. Число в журнале говорит «сколько», карта - «где», и второе важнее: там перехлёст и возникнет при следующем пересчёте поверхностей. Наименьший зазор в метр при мощностях в десятки означает, что междупластье тоньше погрешности построения.\n\n**Если перехлёст занял почти всю площадь**, а внутри пластов чисто, инструмент предупредит: скорее всего, пласты поданы снизу вверх. Геология так не выглядит - настоящий перехлёст местный и соседствует с выклиниванием.\n\nВ журнал идёт площадь, а не число ячеек: тысяча ячеек на метровой сетке и на тридцатиметровой различаются в девятьсот раз.': 'Checks whether a stack of roofs and floors is consistent with itself. It corrects nothing: it counts and shows, and the decision stays with the geologist.\n\n**Where the inconsistency comes from.** Roofs and floors are usually built by kriging independently of one another: every surface knows its own measurements and nothing about its neighbours. While the beds hold up, this passes. In a pinch-out zone, where the thickness runs to zero, two independently built surfaces almost inevitably cross, and negative volumes are then computed over such a stack.\n\n**What is checked.** Pinch-out - the thickness within the tolerance of zero, which is geology rather than a defect. Negative thickness - the roof below the floor. Overlap of neighbours - the floor of the upper bed has dropped below the roof of the lower one; every bed on its own may be intact at that.\n\n**The pairs are assembled from the layer names.** The roof and floor suffixes are parsed automatically: B_top and B_bottom give the bed B. How every name was parsed is printed to the log as a table, and the unparsed ones are listed separately - guessing blindly is worse than saying it did not understand. The order comes from the layer tree unless a bed reference is given.\n\n**The pinch-out tolerance** equals, in meaning, the accuracy of the surfaces. At zero the numerical noise in the convergence zone spills into errors.\n\n**The gap map** shows where the stack comes closest to an overlap. The number in the log says how much, the map says where, and the second matters more: that is where the overlap will appear at the next recomputation of the surfaces. A smallest gap of a metre against thicknesses of tens means that the interbed is thinner than the error of construction.\n\n**If the overlap covers nearly the whole area** while the beds are clean inside, the tool warns: the beds were most likely supplied bottom-up. Geology does not look like that - a real overlap is local and sits next to a pinch-out.\n\nThe log carries an area rather than a count of cells: a thousand cells on a metre grid and on a thirty-metre one differ nine hundredfold.',
    'Наименьший зазор до соседа, м': 'Smallest gap to the neighbour, m',
    'Похоже, пласты поданы снизу вверх: внутри пластов всё чисто, а перехлёст занимает почти всю площадь. Геология так не выглядит - настоящий перехлёст местный и соседствует с выклиниванием. Проверьте порядок: он должен идти сверху вниз.': 'The beds appear to be supplied bottom-up: everything is clean inside the beds while the overlap covers nearly the whole area. Geology does not look like that - a real overlap is local and sits next to a pinch-out. Check the order: it must run from top down.',
    'Наименьший зазор по всей пачке %.2f м. Карта зазора показывает, где именно пачка ближе всего к перехлёсту: там он и возникнет при следующем пересчёте поверхностей.': 'The smallest gap over the whole stack is %.2f m. The gap map shows where the stack comes closest to an overlap: that is where it will appear at the next recomputation of the surfaces.',
    'Порядок пластов из дерева слоёв проекта': 'Bed order from the project layer tree',
    'Порядок пластов взят из справочника.': 'The bed order is taken from the reference.',
    'Порядок пластов взят из дерева слоёв проекта: %s.': 'The bed order is taken from the project layer tree: %s.',
    'Наименьший зазор по всей пачке %.2f м. Карта показывает, где именно пачка ближе всего к перехлёсту: там он и возникнет при следующем пересчёте поверхностей.': 'The smallest gap over the whole stack is %.2f m. The map shows where the stack comes closest to an overlap: that is where it will appear at the next recomputation of the surfaces.',
    'Справочник не описывает поданные пласты: ни один код не совпал. Порядок взят из дерева слоёв.': 'The reference does not describe the beds supplied: not a single code matched. The order was taken from the layer tree.',
    'В справочнике нашлись не все пласты (%d из %d); остальные встанут после них в порядке слоёв.': 'Not all the beds were found in the reference (%d of %d); the rest will follow them in the order of the layers.',
    '5.02 Создать пример пачки (демо)': '5.02 Create a bed stack example (demo)',
    'Шаг сети скважин, ячеек': 'Borehole grid step, cells',
    'Кровля пласта %s': 'Roof of bed %s',
    'Подошва пласта %s': 'Floor of bed %s',
    'Устья скважин collar (демо)': 'Borehole collars (demo)',
    'Интервалы interval (демо)': 'Intervals (demo)',
    'Границы выклинивания (демо)': 'Pinch-out boundaries (demo)',
    'Кровля тела %s': 'Top of body %s',
    'Подошва тела %s': 'Bottom of body %s',
    'Мощность водозащитной толщи (демо)': 'Water-protective thickness (demo)',
    'Купол со срезанной верхушкой в стороне от складки. Зеркало не задано числом, оно получено: соль растворена там, где поднялась выше уровня воды на отметке %.0f м, и там зеркало идёт по этому уровню. Пласт сведён к нулю на %.1f га, оборван зеркалом на %.1f га. Ниже зеркала опускается вся пачка, поэтому первой исчезает покровная соль, а под сводом обрывается и следующий пласт.': 'A salt dome with a dissolved top stands aside from the fold. The mirror is not set as a number, it is derived: the salt is dissolved where it rose above the water level at %.0f m, and there the mirror follows that level. A bed is brought to zero over %.1f ha and truncated by the mirror over %.1f ha. Everything below the mirror is lowered onto it, so the cover salt goes first and under the crest the next bed is truncated too.',
    'Водозащитная толща от кровли пласта B до подошвы водоносных горизонтов: от %.0f до %.0f м, тоньше %.0f м на %.1f га. Тоньше всего она над куполом: соль там растворена, и воде до пласта ближе. Порог здесь демонстрационный, а не нормативный.': 'The water-protective sequence from the roof of bed B to the base of the aquifers: from %.0f to %.0f m, thinner than %.0f m over %.1f ha. It is thinnest above the dome: the salt there is dissolved, and the water is closer to the bed. The threshold here is illustrative, not a norm.',
    '5.02 Пример разреза (демо)': '5.02 Example section (demo)',
    'Демо-разрез': 'Demo section',
    'Не задана папка для поверхностей.': 'No folder for the surfaces is set.',
    'Папка для поверхностей': 'Folder for the surfaces',
    'Скважин %d, из них %d вскрывают тело больше одного раза. Номер вскрытия лежит в поле entry. Наклонных %d, восходящих из выработки %d: у них отметки точек вскрытия считаются по оси, а не по устью.': 'Boreholes %d, of them %d penetrate a body more than once. The number of the penetration lies in the entry field. Inclined %d, upward from a working %d: for them the elevations of the penetration points are computed along the axis rather than from the collar.',
    'Складка: %.0f м поперёк, %.0f м вдоль простирания. У её замка одно тело вскрывается трижды, соседнее дважды - там z(x, y) не существует, и гриды в этом месте неверны по построению.': 'Fold: %.0f m across, %.0f m along strike. At its hinge one body is penetrated three times and the neighbouring one twice - there z(x, y) does not exist, and the grids are wrong by construction.',
    'Уровень растворения %.0f м. Под зеркало выходит: %s. Тела сведены к нулю на %.1f га - это то, что растворено и вынесено. Водозащитная толща от кровли В до зеркала: от %.0f до %.0f м, тоньше всего над сводом купола.': 'Dissolution level %.0f m. Under the mirror lie: %s. Bodies are brought to zero over %.1f ha - that is what has been dissolved and carried away. The water-protective sequence from the roof of bed B to the mirror runs from %.0f to %.0f m, thinnest over the crest of the dome.',
    'Строит учебный разрез верхнекамского типа: полная колонка из справочника пластов, от покровных отложений до нижней соли, со складкой, выклиниванием, соляным куполом и скважинами, которые всё это вскрывают.\n\n**Складка.** У её замка вертикальная скважина пересекает одно и то же тело трижды: в горизонтальном крыле, в верхней дуге и в нижней. Соседнее вскрывается дважды. Значит над точкой в плане оказывается несколько кровель, и z(x, y) перестаёт существовать как функция. Никакая плотность сети этого не исправит: дело не в разрешении, а в непригодности представления. Гриды строятся по первому сверху вскрытию - ровно так, как их собрал бы человек, не заметивший опрокидывания, и 5.01 на них обязана показать перехлёст.\n\n**Выклинивание.** Мощность пласта сводится к нулю сглаженной ступенью между двумя границами. Границы выдаются линиями - тем самым входом, который нужен для построения тренда мощности.\n\n**Купол и эрозия.** Уровень растворения это отметка, до которой дошла вода. Соль, поднятая куполом выше него, растворена и вынесена, а срез переносится проходом сверху вниз: поверхность, оказавшаяся выше, опускается на уровень. Зеркало это кровля не назначенного тела, а того, которое уцелело: в стороне от купола переходная пачка, над сводом покровная соль. Что именно выходит под зеркало, показывает растр subcrop. Соляно-мергельная толща легла на срезанную соль и заполняет всё до подошвы терригенно-карбонатной, поэтому над куполом она тонкая.\n\n**Водозащитная толща** считается от кровли пласта В до зеркала и выдаётся растром vzt. Над сводом она тоньше: часть соли растворена.\n\nПоверхности пишутся в папку по файлу на контакт и грузятся в группу в порядке колонки. Тридцать семь отдельных строк в диалоге открывать было бы нечем. Всё детерминировано: одни параметры дают один и тот же разрез.': 'Builds a teaching section of the Verkhnekamskoye type: the full column from the bed reference, from the cover deposits down to the lower salt, with a fold, a pinch-out, a salt dome and boreholes that penetrate all of it.\n\n**The fold.** At its hinge a vertical borehole crosses one and the same body three times: in the horizontal limb, in the upper arc and in the lower one. The neighbouring body is penetrated twice. So above a point in plan there are several roofs, and z(x, y) ceases to exist as a function. No density of the network will fix that: the matter is not the resolution but the unfitness of the representation. The grids are built from the first penetration from the top - exactly as a person would assemble them without noticing the overturning, and 5.01 must show overlaps on them.\n\n**The pinch-out.** The thickness of a bed is brought to zero by a smoothed step between two boundaries. The boundaries are produced as lines - the very input needed to build a thickness trend.\n\n**The dome and erosion.** The dissolution level is the elevation the water reached. Salt lifted by the dome above it has been dissolved and carried away, and the cut is transferred from the top down: a surface that went above the level is lowered onto it. The mirror is the roof not of an appointed body but of the one that survived: aside from the dome the transition unit, over the crest the cover salt. Which body comes out under the mirror is shown by the subcrop raster. The salt-marl sequence settled on the dissolved salt and fills everything up to the base of the terrigenous-carbonate one, so over the dome it is thin.\n\n**The water-protective sequence** is measured from the roof of bed B to the mirror and is produced as the vzt raster. Over the crest it is thinner: part of the salt has been dissolved.\n\nThe surfaces are written to a folder, one file per contact, and are loaded into a group in the order of the column. Thirty-seven separate rows in the dialog would be unopenable. Everything is deterministic: the same parameters give the same section.',
    '6.01 Створы и кривые расходов': '6.01 Cross-sections and rating curves',
                                'Строит по створу зависимость расхода от отметки - то, чем обосновывают затопление. Связь работает в обе стороны: по расходу видно, до какой отметки поднимается вода, по отметке в створе считается расход.\n\n**Профиль** берётся по вершинам створа, отметка из Z вершины. Промеренная отметка точнее любой модели рельефа, поэтому источником служит сама геометрия створа, а не срез ЦМР. Створы с промерами приходят из **6.03** и из демо **6.04**, а\nсрез с ЦМР и слой промеров отдельными точками появятся следующим шагом.\n\n**Участки** на левый берег, русло и правый берег задаётся одним из двух способов. Либо створ приходит одной линией, а границы стоят в полях расстояниями по профилю. Либо тремя линиями с полем роли и общим именем - тогда разбивка на участки живёт в геометрии, как гидрологи и рисуют профили. Считать раздельно обязательно: шероховатость поймы и русла различается в разы, и единый счёт занижает русловую составляющую.\n\n**Поля створа**: sec имя, km километраж в км, div_l и div_r границы участков расстояниями по профилю в м, n_left, n_channel, n_right\nшероховатость по участкам, slope уклон в м/м, role роль линии при\nподаче тремя линиями. Полный перечень полей всех входов и выходов с\nединицами есть в руководстве.\n\nЕдиницы: **уклон** безразмерен, метр на метр, то есть 0.0004, а не промилле. В подвале чертежа он же выводится в промилле отдельным\nполем, потому что в отчётных таблицах пишут так. **Шероховатость**\nзадаётся коэффициентом Маннинга: 0.030 для чистого русла, 0.070 для\nзаросшей поймы. Формула метрическая, расход выходит в м³/с, и для\nфутов она потребовала бы своего множителя. В подвале рядом идёт\nобратная величина 1/n, как её и печатают на гидростворе.\n\nПоля с ожидаемыми именами - sec, km, div_l, div_r, n_left, n_channel, n_right, slope - подхватываются сами, и подхваченные\nпечатаются в журнал. Явный выбор всегда старше найденного.\n\n**Шероховатость и уклон** берутся из полей створа, а не из параметров: створов много и у каждого свои значения, а калибровка тогда сводится к правке таблицы. Параметры служат умолчанием для створов без полей, принятые значения идут в журнал. Уклон умеет считаться **по цепочке створов** от километража и отметок дна, как его и прописывают вручную.\n\nДля чертежа гидроствора отдельно выдаётся **подвал** - строка на участок\nс шириной, средней глубиной, площадью, уклоном, шероховатостью,\nскоростью, расходом и долей от суммарного на заданной отметке. Без\nотметки берётся первая по обеспеченности. Рядом идут **отметки земли\nи расстояния** точками - нижние строки того же чертежа. Собирается\nлист компоновкой: инструмент отдаёт данные, оформление живёт в макете.\n\n**Расход** считается по Маннингу отдельно на каждом участке и складывается. Смоченный периметр берётся по твёрдым границам, без вертикальных границ участков.\n\nНаблюдаемые уровни подаются своей таблицей: отметка и подпись. Это\nзамер, а не расчёт, на кривую он не опирается и наносится рядом с расчётными,\nвида УВ 472.90 X/2021. В слое уровней такие строки помечены kind=obs.\n\nРасходы обеспеченности - 1%%, 5%%, 10%% - подаются таблицей пар обеспеченность-расход: считать их из рядов наблюдений не наше\nдело, это гидрологическая статистика. По кривой каждому расходу\nнаходится отметка, и уровни выходят линиями на чертёж, как их и\nнаносят на гидростворе, плюс строками в отчёт.\n\nФормула описывает установившееся равномерное движение: кривая это гидравлическая характеристика створа, а не расчёт волны попуска. Уклон входит в расход корнем, поэтому ошибка в нём сказывается прямо, и значение всегда печатается в журнал.': 'Builds the dependence of discharge on elevation for a cross-section - what flooding is justified by. The link works both ways: from a discharge one sees how high the water rises, from an elevation at the section the discharge is computed.\n\n**The profile** is taken along the vertices of the section, the elevation from the vertex Z. A surveyed elevation is more accurate than any terrain model, so the source is the geometry of the section itself rather than a DEM sample. Sections with survey data come from **6.03** and from the demo **6.04**, and\nsampling from a DEM and a separate layer of survey points will appear at the next step.\n\n**The division** into the left bank, the channel and the right bank is set in one of two ways. Either the section arrives as a single line and the boundaries stand in fields as distances along the profile. Or as three lines with a role field and a common name - then the division lives in the geometry, the way hydrologists draw profiles. Counting them separately is mandatory: the roughness of the floodplain and of the channel differ several times over, and a single count understates the channel part.\n\n**Fields of the section**: sec the name, km the chainage in km, div_l and div_r the part boundaries as distances along the profile in m, n_left, n_channel, n_right the roughness by part, slope the slope in m/m, role the role of the line when supplied as three lines. The full list of fields of every input and output with units is in the manual.\n\nUnits: the **slope** is dimensionless, metre per metre, that is 0.0004 rather than per mille. In the drawing footer it is also output in per mille as a separate field, because that is how it is written in report tables. The **roughness** is set as the Manning coefficient: 0.030 for a clean channel, 0.070 for an overgrown floodplain. The formula is metric, the discharge comes out in m3/s, and for feet it would require its own factor. In the footer the inverse 1/n goes next to it, the way it is printed on a gauging section.\n\nFields with the names of the contract - sec, km, div_l, div_r, n_left, n_channel, n_right, slope - are picked up on their own, and the picked ones\nare printed to the log. An explicit choice is always senior to what has been found.\n\n**Roughness and slope** are taken from the fields of the section rather than from the parameters: there are many sections and each has its own values, and calibration then comes down to editing a table. The parameters serve as a default for sections without fields, the accepted values go to the log. The slope can also be computed **from the chain of sections** from the chainage and the bed elevations, the way it is written out by hand.\n\nFor the drawing of a gauging section a **footer** is produced separately - a row per part with the width, mean depth, area, slope, roughness, velocity, discharge and the share of the total at a given level. Without a level the first one by probability is taken. Next to it go the **ground elevations and distances** as points - the bottom rows of the same drawing. The sheet is assembled by the layout: the tool gives the data, the design lives in the template.\n\n**The discharge** is computed by Manning separately on every part and summed. The wetted perimeter is taken along solid boundaries, without the vertical planes of the division.\n\nObserved levels are supplied by their own table: an elevation and a label. This is a measurement rather than a computation, it does not rely on the curve and is drawn next to the computed ones, in the manner of UV 472.90 X/2021. In the layer of levels such rows are marked kind=obs.\n\nProbability discharges - 1%, 5%, 10% - are supplied as a table of probability and discharge pairs: computing them from observation series is not our business, that is hydrological statistics. For every discharge a level is found along the curve, and the levels come out as lines onto the drawing, the way they are put on a gauging section, plus as rows in the report.\n\nThe formula describes steady uniform flow: the curve is a hydraulic characteristic of the section rather than a computation of a release wave. The slope enters the discharge under a square root, so an error in it tells directly, and the value is always printed to the log.',
    'Створы (линии)': 'Cross-sections (lines)',
    'Шероховатость по умолчанию': 'Default roughness',
    'Уклон по умолчанию': 'Default slope',
    'Уклон по цепочке створов': 'Slope from the chain of sections',
    'Шаг по отметке, м': 'Step in elevation, m',
    'Верхняя отметка (пусто - верх профиля)': 'Upper elevation (empty - top of the profile)',
    'Кривая расходов (таблица)': 'Rating curve (table)',
    'Профили створов (чертёж)': 'Section profiles (drawing)',
    'Не задан слой створов.': 'No layer of cross-sections is set.',
    'Уклон посчитан по цепочке из %d створов, размах %.5g - %.5g.': 'The slope is computed from a chain of %d sections, range %.5g to %.5g.',
    'Створ «%s» пропущен: в геометрии нет отметок Z.': 'Section "%s" is skipped: the geometry carries no Z elevations.',
    'Створ «%s»: участков %d, отметки из источника «%s», уклон %.5g, расход до %.4g м³/с.': 'Section "%s": %d parts, elevations from the source "%s", slope %.5g, discharge up to %.4g m3/s.',
    'Ни один створ не построен: проверьте отметки и геометрию.': 'No section has been built: check the elevations and the geometry.',
    'Кривая расходов': 'Rating curve',
    'Профили створов': 'Section profiles',
    'Построено створов: %d.': 'Sections built: %d.',
    'Кривые расходов по створам': 'Rating curves by section',
    'Створ %s': 'Section %s',
    'Километраж %s, уклон %.5g, отметки из источника «%s».': 'Chainage %s, slope %.5g, elevations from the source "%s".',
    'Отметка, м': 'Elevation, m',
    'Q м³/с': 'Q m3/s',
    'Итого Q, м³/с': 'Total Q, m3/s',
    'Площадь, м²': 'Area, m2',
    'Метод: живое сечение по профилю, расход по Маннингу отдельно на каждом участке, смоченный периметр по твёрдым границам. Формула описывает установившееся равномерное движение.': 'Method: the flow area from the profile, the discharge by Manning separately on every part, the wetted perimeter along solid boundaries. The formula describes steady uniform flow.',
    '6.04 Пример реки (демо)': '6.04 Example river (demo)',
            'Строит учебную цепочку створов с известным ответом: долина с руслом и двумя поймами, отметки в Z вершин, поля участков, шероховатости, уклона и километража заполнены.\n\nРусло и поймы имеют разную шероховатость, поэтому на кривой видно, как включается пойма: до бровок расход растёт круто, выше перелома пологая пойменная часть добавляет площадь, но мало добавляет расхода.\n\nКроме створов выдаются **таблица промеров** парами расстояние-отметка,\nто есть вход для **6.03**, и **поверхность долины** растром, то\nесть вход для **6.02**: резать затоплению нечего, пока долина\nсуществует только линиями. Поверхность строится из тех же створов,\nчто и кривые, поэтому полигон затопления и кривая расходов говорят\nоб одной долине, а не о двух похожих.\n\nЕщё одной таблицей идут учебные **наблюдаемые уровни** с подписями\nдат, чтобы было на чём показать замеры рядом с расчётными.\n\nОтдельной таблицей идут учебные **расходы обеспеченности**: настоящие\nвыходят из статистики рядов наблюдений и плагином не считаются, а\nэти взяты долями от наибольшего на кривой, чтобы уровни и подвал\nчертежа было на чём показать без экстраполяции.\n\nВторым выходом идёт эталонная кривая, посчитанная ядром напрямую. Расхождение с тем, что даст **6.01** на этих же створах, есть ошибка инструмента, а не данных: ответ известен заранее. Всё детерминировано.': 'Builds a teaching chain of cross-sections with a known answer: a valley with a channel and two floodplains, elevations in the vertex Z, the fields of division, roughness, slope and chainage filled in.\n\nThe channel and the floodplains have different roughness, so the curve shows how the floodplain comes in: up to the banks the discharge grows steeply, above the break the gentle floodplain part adds area but adds little discharge.\n\nBesides the sections it produces a **table of soundings** as distance and elevation pairs,\nthat is the input for **6.03**, and a **valley surface** as a raster, that is\nthe input for **6.02**: there is nothing for the flooding to cut while the valley\nexists as lines only. The surface is built from the same sections as the curves,\nso the flood extent and the rating curve speak of one valley rather than of two similar ones.\n\nOne more table holds teaching **observed levels** with date labels, so that measurements have something to be shown on next to the computed ones.\n\nA separate table holds teaching **probability discharges**: the real ones come out of the statistics of observation series and are not computed by the plugin, while these are taken as fractions of the largest on the curve so that the levels and the drawing footer have something to be shown on without extrapolation.\n\nThe second output is a reference curve computed by the core directly. A discrepancy with what **6.01** gives on the same sections is an error of the tool rather than of the data: the answer is known in advance. Everything is deterministic.',
    'Число створов': 'Number of sections',
    'Шаг по километражу, км': 'Chainage step, km',
    'Створы (демо)': 'Cross-sections (demo)',
    'Эталонная кривая (демо)': 'Reference curve (demo)',
    'Створов %d, ширина долины %.0f м, русло %.0f м при глубине %.1f м, шероховатость русла %.3f и поймы %.3f, уклон %.5g. Эталонная кривая: расход до %.4g м³/с.': 'Sections %d, valley width %.0f m, channel %.0f m at a depth of %.1f m, channel roughness %.3f and floodplain %.3f, slope %.5g. Reference curve: discharge up to %.4g m3/s.',
    'Отчёт HTML': 'HTML report',
    'Створ': 'Section',
    'Поля подхвачены по ожидаемым именам: %s.': 'Fields picked up by the names of the contract: %s.',
    '6.02 Полигон затопления': '6.02 Flood extent polygon',
            'Отрезает поверхность отметкой воды и выдаёт контур затопления и глубину.\n\n**Желаемый расход по готовой кривой.** Кривая не зависит от расхода,\nона характеристика створа. Поэтому для любого расхода, а не только\nрасчётного, отметки берутся обратным ходом по уже посчитанной\nкривой: подайте створы на карте, таблицу кривой и расход. По\nкаждому створу найдётся своя отметка, из них поднимется поверхность\nводы, и пересобирать 6.01 не потребуется. Створ, у которого расход\nвне кривой, пропускается с предупреждением.\n\nУровень вдоль реки не постоянен: вверх по течению он выше. Если подать\n**уровни по створам** линиями с отметкой, инструмент поднимет из них\nповерхность воды и будет считать глубину от неё. Иначе вся площадь\nрежется одной отметкой, и долина заливается там, где дно ниже этой\nотметки, хотя вода туда не доходит. Линии берутся прямо с выхода\n**6.01**.\n\nОтметку можно задать прямо, а можно **расходом**: тогда она берётся обратным ходом по кривой от **6.01** - тем самым, что на ручных построениях рисуют красной стрелкой. Кривая подаётся таблицей, расход числом, принятая отметка печатается в журнал.\n\nИнструмент отделён от 6.01 сознательно: у него другой вход и другой потребитель, и гонять весь расчёт кривой ради одного полигона незачем.\n\nМелкие пятна отсекаются по площади: на равнинной пойме одиночные ячейки ниже уреза дают крап, который к разливу отношения не имеет. Связности с руслом инструмент не проверяет - замкнутые понижения в стороне от реки останутся, и это видно на карте.': 'Cuts the surface by a water level and produces the flood extent and the depth.\n\n**A desired discharge over a curve already computed.** The curve does not depend on the discharge, it is a characteristic of the section. Therefore for any discharge, not only the design one, the levels are taken backwards along the curve already computed: supply the sections on the map, the table of the curve and a discharge. Every section gets its own level, a water surface rises from them, and there is no need to run 6.01 again. A section whose discharge falls outside the curve is skipped with a warning.\n\nThe level is not constant along the river: upstream it is higher. If **levels at the sections** are supplied as lines with an elevation, the tool raises a water surface out of them and computes the depth from it. Otherwise the whole area is cut by a single elevation, and the valley is flooded where the bed lies below that elevation even though the water does not reach there. The lines come straight from the output of **6.01**.\n\nThe level can be set directly or by a **discharge**: then it is taken backwards along the curve from **6.01** - the very move drawn as a red arrow on manual constructions. The curve is supplied as a table, the discharge as a number, the accepted level is printed to the log.\n\nThe tool is deliberately separate from 6.01: it has a different input and a different consumer, and there is no point in running the whole curve computation for the sake of one polygon.\n\nSmall patches are dropped by area: on a flat floodplain single cells below the water line give speckle that has nothing to do with the flood. The tool does not check connectivity with the channel - closed depressions away from the river will remain, and that is visible on the map.',
    'Отметка воды, м': 'Water level, m',
    'Кривая расходов (из 6.01)': 'Rating curve (from 6.01)',
    'Расход, м³/с (если отметка не задана)': 'Discharge, m3/s (if the level is not set)',
    'Имя створа в кривой (пусто - первый)': 'Section name in the curve (empty - the first one)',
    'Наименьшая площадь пятна, м²': 'Smallest patch area, m2',
    'Контур затопления': 'Flood extent',
    'Глубина затопления': 'Flood depth',
    'В таблице кривой нет строк «итого» с полями level и q.': 'The curve table has no total rows with the level and q fields.',
    'Кривая взята по створу «%s».': 'The curve is taken for section "%s".',
    'Расход %.4g больше наибольшего на кривой (%.4g): отметку пришлось бы экстраполировать.': 'The discharge %.4g is above the largest on the curve (%.4g): the level would have to be extrapolated.',
    'Не задана поверхность.': 'No surface is set.',
    'Задайте отметку воды либо кривую расходов и расход.': 'Set either a water level or a rating curve together with a discharge.',
    'Отметка получена обратным ходом по кривой: расход %.4g м³/с даёт %.3f м.': 'The level is obtained backwards along the curve: a discharge of %.4g m3/s gives %.3f m.',
    'Отметка воды задана: %.3f м.': 'The water level is set: %.3f m.',
    'Не удалось прочитать поверхность.': 'The surface could not be read.',
    'На отметке %.3f м вода не выходит на поверхность.': 'At %.3f m the water does not reach the surface.',
    'Все пятна затопления мельче заданной площади.': 'All flood patches are smaller than the given area.',
    'Затоплено %.2f га, пятен %d, отброшено мелких %d. Наибольшая глубина %.2f м. Связность с руслом не проверялась: замкнутые понижения в стороне от реки остаются в контуре.': 'Flooded %.2f ha, patches %d, small ones dropped %d. The greatest depth is %.2f m. Connectivity with the channel has not been checked: closed depressions away from the river stay in the extent.',
    '6.03 Импорт таблиц створов': '6.03 Import section tables',
                'Превращает таблицу промеров в створы с отметками в вершинах.\n\nСуществующие программы держат профиль парами расстояние от начала створа и абсолютная отметка, и за годы работы таких таблиц накапливается много. Перебивать их руками ради перехода в ГИС незачем: инструмент читает их напрямую и строит линии с Z, готовые для **6.01**.\n\nЕсли створы уже оцифрованы на карте, подайте их слоем: промеры лягут вдоль настоящих линий, и расстояние по створу станет расстоянием вдоль линии. Тогда никакой схемы не нужно вовсе.\n\nБез слоя линий геометрия строится прямыми створами: направление задаётся азимутом, положение по километражу, шаг между створами параметром. Это схема, а не съёмка - её место на месте поправит любой сдвиг линий, а расчёт кривой от плановой привязки не зависит вовсе, ему нужны расстояния вдоль створа и отметки.\n\nРасчётные свойства переносятся вместе с профилем, если они в таблице есть: границы участков div_l и div_r, шероховатости\nn_left, n_channel, n_right и уклон slope. Без них вернулась бы\nгеометрия, но не расчёт, и кривая по восстановленным створам\nразошлась бы с исходной.\n\nПоля с ожидаемыми именами - sec, dist, elev, km - подхватываются сами.': 'Turns a table of soundings into sections with elevations in the vertices.\n\nExisting programs keep the profile as pairs of a distance from the start of the section and an absolute elevation, and over years of work many such tables accumulate. There is no point in retyping them by hand for the sake of moving into GIS: the tool reads them directly and builds lines with Z, ready for **6.01**.\n\nIf the sections are already digitized on the map, supply them as a layer: the soundings will lie\nalong the real lines, and the distance along the section becomes the distance\nalong the line. Then no scheme is needed at all.\n\nWithout a line layer the geometry is built as straight sections: the direction is set by an azimuth, the position by the chainage, the spacing between sections by a parameter. This is a scheme rather than a survey - any shift of the lines is corrected on the spot, and the computation of the curve does not depend on the planimetric placement at all, it needs the distances along the section and the elevations.\n\nComputation properties are carried along with the profile if the table holds them: the division boundaries div_l and div_r, the roughness values n_left, n_channel, n_right and the slope. Without them the geometry would come back but not the computation, and the curve over the restored sections would part from the original one.\n\nFields with the names of the contract - sec, dist, elev, km - are picked up on their own.',
    'Таблица промеров': 'Table of soundings',
    'Азимут створа, градусы': 'Section azimuth, degrees',
    'Шаг между створами, м (без километража)': 'Spacing between sections, m (without chainage)',
    'Створы из таблицы': 'Sections from a table',
    'Не задана таблица.': 'No table is set.',
    'Нужны поля расстояния и отметки: задайте их явно.': 'The distance and elevation fields are required: set them explicitly.',
    'В таблице нет ни одной пары расстояние-отметка.': 'The table holds no distance and elevation pair at all.',
    'Ни одного створа: в каждом меньше двух промеров.': 'Not a single section: each holds fewer than two soundings.',
    'Створов построено %d, пропущено %d (меньше двух промеров). Плановая привязка схематична: на расчёт кривой она не влияет, ему нужны расстояния вдоль створа и отметки.': 'Sections built %d, skipped %d (fewer than two soundings). The planimetric placement is schematic: it does not affect the computation of the curve, which needs the distances along the section and the elevations.',
    'Таблица промеров (демо)': 'Table of soundings (demo)',
    'Поверхность долины (демо)': 'Valley surface (demo)',
    'Размер ячейки поверхности, м': 'Surface cell size, m',
    'Километраж первого створа %.3f принят за начало цепочки: положение считается от него, а не от нуля километража.': 'The chainage of the first section %.3f is taken as the start of the chain: the position is measured from it rather than from zero chainage.',
    'У %d промеров расстояние по створу больше длины линии на карте: они прижаты к её концу. Скорее всего линия короче промеренного профиля.': 'For %d soundings the distance along the section exceeds the length of the line on the map: they are pressed to its end. Most likely the line is shorter than the surveyed profile.',
    'Для %d створов линии на карте не нашлось, они построены схемой: проверьте имена.': 'For %d sections no line was found on the map, they are built by the scheme: check the names.',
    'Линии створов на карте (если есть)': 'Section lines on the map (if any)',
    'Поле имени створа в слое линий (обычно sec)': 'Section name field in the line layer (usually sec)',
    'СК выхода (метрическая), если линий нет': 'Output CRS (metric), if there are no lines',
    'Линий створов подано %d: промеры раскладываются вдоль них, схема не используется.': 'Section lines supplied %d: the soundings are laid along them, the scheme is not used.',
    'Из таблицы переносятся расчётные свойства: %s.': 'Computation properties carried from the table: %s.',
    'Расходы обеспеченности: поля prob и q (таблица)': 'Probability discharges: fields prob and q (table)',
    'Уровни обеспеченности (чертёж)': 'Probability levels (drawing)',
    'Уровни обеспеченности': 'Probability levels',
    'Уровень': 'Level',
    'В таблице обеспеченностей не найдено поле расхода (q): уровни не считаются.': 'The probability table holds no discharge field (q): the levels are not computed.',
    'Створ «%s»: расход %.4g выше кривой, уровень не найден.': 'Section "%s": the discharge %.4g is above the curve, no level found.',
    'Отметка для подвала чертежа': 'Level for the drawing footer',
    'Подвал чертежа (таблица)': 'Drawing footer (table)',
    'Подвал чертежа': 'Drawing footer',
    'Отметки земли и расстояния (чертёж)': 'Ground elevations and distances (drawing)',
    'Отметки земли и расстояния': 'Ground elevations and distances',
    'Расходы обеспеченности (демо)': 'Probability discharges (demo)',
    'Наблюдаемые уровни: поля level и label (таблица)': 'Observed levels: fields level and label (table)',
    'Наблюдаемые уровни (демо)': 'Observed levels (demo)',
    'В таблице наблюдаемых уровней не найдено поле отметки (level): они не наносятся.': 'The table of observed levels holds no elevation field (level): they are not drawn.',
    'Створ «%s»: отметки %.2f..%.2f, ширина %.1f м, вершин %d, площадь на верхней отметке %.1f м², шероховатости %s.': 'Section "%s": elevations %.2f..%.2f, width %.1f m, vertices %d, area at the top level %.1f m2, roughness %s.',
    'Створ «%s»: профиль плоский, кривая выйдет нулевой. Проверьте, что в геометрии есть отметки Z.': 'Section "%s": the profile is flat, the curve will come out zero. Check that the geometry carries Z elevations.',
    'Створ %d: км %.3f, отметки %.2f..%.2f, вершин %d.': 'Section %d: chainage %.3f, elevations %.2f..%.2f, vertices %d.',
    'Поле имени створа (обычно sec)': 'Section name field (usually sec)',
    'Поле роли: левый, русло, правый (обычно role)': 'Role field: left, channel, right (usually role)',
    'Поле километража (обычно km)': 'Chainage field (usually km)',
    'Поле границы участка: левый берег (обычно div_l)': 'Part boundary field: left bank (usually div_l)',
    'Поле границы участка: правый берег (обычно div_r)': 'Part boundary field: right bank (usually div_r)',
    'Поле шероховатости: левый берег (обычно n_left)': 'Roughness field: left bank (usually n_left)',
    'Поле шероховатости: русло (обычно n_channel)': 'Roughness field: channel (usually n_channel)',
    'Поле шероховатости: правый берег (обычно n_right)': 'Roughness field: right bank (usually n_right)',
    'Поле уклона (обычно slope)': 'Slope field (usually slope)',
    'Поле расстояния по створу (обычно dist)': 'Distance along the section field (usually dist)',
    'Урез как плоскость': 'Water edge as a plane',
    'Урез работает изолинией: закреплена только линия берега, поверхность внутри определяется точками и структурными линиями.': 'The water edge works as a contour: only the shore line is fixed, the surface inside is defined by the points and the structural lines.',
    'Включено «Заполнить понижения в итоге», а урез работает изолинией: русло и дно будут заровнены на последнем шаге, потому что для заполнения это обычное понижение. Снимите галочку, если строите ЦМР с дном.': '"Fill depressions at the end" is on while the water edge works as a contour: the channel and the bed will be levelled out at the last step, because for the filling this is an ordinary depression. Clear the checkbox if you are building a DEM with a bed.',
    'Понижения заполняются поверх русла, построенного урезом-изолинией: дно сейчас исчезнет.': 'The depressions are filled over a channel built by a contour water edge: the bed is about to disappear.',
    'Уровни по створам, линии с отметкой (из 6.01)': 'Levels at the sections, lines with an elevation (from 6.01)',
    'Поле отметки уровня (обычно level)': 'Level elevation field (usually level)',
    'В слое уровней нет линий с отметкой: проверьте поле.': 'The layer of levels holds no lines with an elevation: check the field.',
    'Задайте отметку воды, либо кривую расходов и расход, либо уровни по створам линиями.': 'Set a water level, or a rating curve together with a discharge, or levels at the sections as lines.',
    'Поверхность воды построена по %d уровням на створах: отметки %.2f..%.2f. Глубина считается от неё, а не от плоскости.': 'The water surface is built from %d level vertices at the sections: elevations %.2f..%.2f. The depth is computed from it rather than from a plane.',
    'Замеры оси скважин (демо)': 'Borehole axis surveys (demo)',
    'Замеры оси скважин': 'Borehole axis surveys',
    'Наземные наблюдения (демо)': 'Ground observations (demo)',
    'Наземные наблюдения': 'Ground observations',
    'След выхода на поверхность (демо)': 'Outcrop trace (demo)',
    'След выхода на поверхность': 'Outcrop trace',
    'Наземных наблюдений %d, цепочек следа выхода %d. Мощность вышележащего тела вдоль следа равна нулю, и этот ноль известен, а не оценен: вес у него выше скважинного.': 'Ground observations %d, chains of the outcrop trace %d. The thickness of the overlying body along the trace is zero, and this zero is known rather than estimated: its weight is higher than that of a borehole.',
    'Линии контакта (демо)': 'Contact lines (demo)',
    'Линии контакта': 'Contact lines',
    'Линий контакта %d, источник в поле source, вес в поле weight. Плотность узлов у линии выше точечной, поэтому слой отдельный: прореживание и вес назначаются линии, а не каждому узлу.': 'Contact lines %d, the source in the source field, the weight in the weight field. The density of vertices along a line is higher than that of points, hence a separate layer: the thinning and the weight are assigned to the line rather than to every vertex.',
    '5.03 Сборка пачки от рельефа': '5.03 Assembly of a stack from the relief',
        'Собирает колонку сверху вниз: от рельефа, тело за телом по справочнику. Для каждого тела строится растр мощности по скважинам, подошва получается вычитанием мощности из вышележащей поверхности, и она же служит верхом для следующего.\n\n**Достоинство схемы не в простоте.** Если мощности неотрицательны, поверхности не могут пересечься: они получаются вычитанием одна из другой. Непротиворечивость выходит по построению, а не проверкой после.\n\n**Опорной может быть не рельеф.** Если подать прослеженный контакт и\nуказать, чьей кровлей он служит, сборка идёт от него в обе стороны:\nвниз вычитанием мощностей, вверх прибавлением. Ошибка тогда делится\nпополам вместо накопления вниз от рельефа, и это единственный\nразумный путь для глубоких пачек.\n\n**Ограничение тоже понятное.** Ошибка каждой мощности складывается с предыдущими, и к нижним телам накопленное отклонение способно превысить саму мощность. Схема для неглубоких пачек и инженерных задач, где верхний контакт и есть дневная поверхность. Для глубоких пачек опорной берут прослеженный контакт и идут от него в обе стороны.\n\n**Мощность считается по стволу и приводится к вертикали.** У наклонной скважины вскрытая мощность больше истинной, и без поправки на угол пачка распухнет. Угол берётся из поля у устья, без него ствол считается вертикальным.\n\n**Отсутствие тела в скважине это ноль**, а не пропуск: между такой скважиной и соседней мощность уходит в ноль, и тело выклинивается само.\n\n**Линии контакта дают достоверные нули.** Там, где тело выходит на поверхность, мощность всего вышележащего равна нулю по определению границы, и это значение известно, а не оценено. Узлы линии прореживаются: густота оцифровки не должна превращаться в вес.': 'Builds the column from the top down: from the relief, body after body along the reference. For every body a raster of thickness is built from the boreholes, the floor is obtained by subtracting the thickness from the overlying surface, and it serves as the top for the next one.\n\n**The merit of the scheme is not its simplicity.** If the thicknesses are non-negative, the surfaces cannot intersect: they are obtained by subtracting one from another. Consistency comes out by construction rather than by a check afterwards.\n\n**The datum may be not the relief.** If a traced contact is supplied and it is said whose roof it serves as, the assembly goes from it in both directions: downwards by subtracting thicknesses, upwards by adding them. The error is then halved instead of accumulating downwards from the relief, and this is the only reasonable path for deep stacks.\n\n**The limitation is just as plain.** The error of every thickness adds up with the previous ones, and for the lower bodies the accumulated deviation can exceed the thickness itself. The scheme is for shallow stacks and engineering tasks, where the upper contact is the daylight surface itself. For deep stacks a traced contact is taken as the datum and the assembly goes from it in both directions.\n\n**The thickness is measured along the hole and reduced to the vertical.** In an inclined borehole the penetrated thickness is greater than the true one, and without a correction for the angle the stack swells. The angle is taken from a field at the collar, without it the hole is treated as vertical.\n\n**The absence of a body in a borehole is a zero**, not a gap: between such a borehole and its neighbour the thickness goes to zero, and the body pinches out on its own.\n\n**Contact lines give reliable zeros.** Where a body reaches the surface, the thickness of everything above it is zero by the definition of the boundary, and this value is known rather than estimated. The vertices of the line are thinned: the density of the digitizing must not turn into weight.',
    'Рельеф (ЦМР)': 'Relief (DEM)',
    'Интервалы по стволу': 'Intervals along the hole',
    'Линии контакта (нули мощности)': 'Contact lines (zero thickness)',
    'Поле кода линии (обычно code)': 'Line code field (usually code)',
    'Шаг прореживания линий, м (0 - по ячейке)': 'Line thinning step, m (0 - by the cell)',
    'Мощности по скважинам (точки)': 'Thicknesses by borehole (points)',
    'Нужны рельеф, устья, интервалы и справочник.': 'The relief, the collars, the intervals and the reference are required.',
    'Не найдены обязательные поля: задайте их явно.': 'The mandatory fields were not found: set them explicitly.',
    'Справочник пуст.': 'The reference is empty.',
    'Колонка из справочника, %d тел: %s.': 'The column from the reference, %d bodies: %s.',
    'Интервалов без устья: %d, пропущены.': 'Intervals without a collar: %d, skipped.',
    'Линии контакта дали %d узлов после прореживания шагом %.1f м: вдоль них мощность вышележащих тел нулевая.': 'The contact lines gave %d vertices after thinning with a step of %.1f m: along them the thickness of the overlying bodies is zero.',
    'Тело «%s» пропущено: меньше трёх замеров мощности.': 'The body "%s" is skipped: fewer than three thickness measurements.',
    'Ни одно тело не собрано: проверьте разбивку и справочник.': 'Not a single body has been built: check the logging and the reference.',
    'Собрано тел: %d. Мощности от %.2f до %.2f м. Перехлёстов быть не может: подошвы получены вычитанием неотрицательных мощностей, и непротиворечивость выходит по построению.': 'Bodies built: %d. Thicknesses from %.2f to %.2f m. Overlaps are impossible: the floors are obtained by subtracting non-negative thicknesses, and consistency comes out by construction.',
    'Мощности по скважинам': 'Thicknesses by borehole',
    'Справочник пластов': 'Bed reference',
    'Устья скважин': 'Borehole collars',
    'Опорная поверхность (если не от рельефа)': 'Datum surface (if not from the relief)',
    'Код тела, чья кровля опорная': 'Code of the body whose roof is the datum',
    'Задайте код тела, чья кровля служит опорной поверхностью, из справочника.': 'Set the code of the body whose roof serves as the datum surface, from the reference.',
    'Опорная поверхность и рельеф на разных сетках: приведите их к одной.': 'The datum surface and the relief are on different grids: bring them to one.',
    'Опорная поверхность: кровля «%s», тело %d из %d. Вверх от неё собирается %d тел, вниз %d: ошибка делится пополам вместо накопления вниз от рельефа.': 'Datum surface: the roof of "%s", body %d of %d. Upwards from it %d bodies are built, downwards %d: the error is halved instead of accumulating downwards from the relief.',
    'Уровень растворения, зеркало (если есть)': 'Dissolution level, the mirror (if any)',
    'Допуск совпадения с зеркалом, м': 'Tolerance of coincidence with the mirror, m',
    'Зеркало и пачка на разных сетках: приведите их к одной.': 'The mirror and the stack are on different grids: bring them to one.',
    'Зеркало подано: %.2f га нулевой мощности признаны срезом, остальное осталось выклиниванием. Разница не в арифметике: при срезе кровля лежит на зеркале, и выше тела нет.': 'The mirror is supplied: %.2f ha of zero thickness are recognized as a cut, the rest stays a pinch-out. The difference is not arithmetic: at a cut the roof lies on the mirror and there is no body above.',
    'Зеркало не подано: срез и выклинивание неразличимы, все нулевые мощности показаны выклиниванием.': 'No mirror is supplied: a cut and a pinch-out are indistinguishable, all zero thicknesses are shown as a pinch-out.',
    '5.04 Коррекция пачки по статистике мощностей': '5.04 Correction of a stack by the statistics of thicknesses',
    'Правит унаследованную пачку, которую никто не станет пересобирать заново. Приём известен из практики: по замерам считается статистика мощности каждого тела, берётся доверительный интервал, и мощности на гриде **срезаются по его границам** - всё, что вышло за них, заменяется самой границей. Из исправленных мощностей пачка собирается заново от верхней поверхности.\n\nЧисло ячеек при этом не меняется, в отличие от выбрасывания: место остаётся, обезврежена только величина. В статистике приём называется винзорированием.\n\n**Что именно делает срезание.** Оно отделяет артефакт интерполяции от геологии. Мощность вне интервала на выдержанном теле почти наверняка есть разгон метода между скважинами, а не настоящее утолщение. Там, где тело закономерно меняет мощность, интервал широк, и правка не срабатывает.\n\n**Статистика берётся из замеров, если они поданы.** Мощности по скважинам - выход 5.03 или своя таблица. Без них интервал считается по самому гриду, и это слабее: грид уже содержит артефакт, который мы ищем.\n\n**Перехлёсты уходят по построению.** Пачка пересобирается вычитанием неотрицательных мощностей, поэтому поверхности после правки пересечься не могут. Цена в том, что правка ложится поверх результата и не связана с исходными измерениями: более тонкий путь через искусственные точки в местах перехлёста остаётся на будущее.': 'Fixes an inherited stack that nobody is going to reassemble from scratch. The move is known from practice: the statistics of the thickness of every body is computed from the measurements, a confidence interval is taken, and the thicknesses on the grid are **cut by its bounds** - everything beyond them is replaced by the bound itself. From the corrected thicknesses the stack is reassembled from the upper surface.\n\nThe number of cells does not change, unlike with discarding: the place remains, only the value is disarmed. In statistics the move is called winsorizing.\n\n**What the cutting actually does.** It separates an artefact of interpolation from geology. A thickness outside the interval on a persistent body is almost certainly a run-away of the method between boreholes rather than a real thickening. Where a body changes its thickness in a regular way, the interval is wide and the correction does not fire.\n\n**The statistics come from the measurements if they are supplied.** Thicknesses by borehole are the output of 5.03 or a table of your own. Without them the interval is computed from the grid itself, and that is weaker: the grid already holds the artefact we are looking for.\n\n**Overlaps go away by construction.** The stack is reassembled by subtracting non-negative thicknesses, so the surfaces cannot intersect after the correction. The price is that the correction lies on top of the result and is not connected to the original measurements: the finer path through artificial points in the places of overlap is left for the future.',
    'Мощности по скважинам (из 5.03)': 'Thicknesses by borehole (from 5.03)',
    'Поле кода пласта (обычно code)': 'Bed code field (usually code)',
    'Поле мощности (обычно thick)': 'Thickness field (usually thick)',
    'Ширина интервала в сигмах': 'Interval width in sigmas',
    'Нижняя граница мощности, м (пусто - из сигм)': 'Lower bound of thickness, m (empty - from sigmas)',
    'Верхняя граница мощности, м (пусто - из сигм)': 'Upper bound of thickness, m (empty - from sigmas)',
    'Папка для исправленных поверхностей': 'Folder for the corrected surfaces',
    'Величина правки, м': 'Amount of the correction, m',
    'Подайте кровли и подошвы парами: их число должно быть чётным.': 'Supply roofs and floors in pairs: their number must be even.',
    'Статистика по замерам: тел %d, всего значений %d.': 'Statistics from the measurements: bodies %d, values in total %d.',
    'Мощности по скважинам не поданы: интервал считается по самому гриду, а он уже содержит артефакт, который мы ищем.': 'Thicknesses by borehole are not supplied: the interval is computed from the grid itself, and it already holds the artefact we are looking for.',
    '%s: интервал %.2f..%.2f м по источнику «%s», правка затронула %.2f га.': '%s: the interval %.2f..%.2f m from the source "%s", the correction touched %.2f ha.',
    'Величина правки': 'Amount of the correction',
    'Правка затронула %.2f га суммарно. Пачка пересобрана вычитанием неотрицательных мощностей, поэтому перехлёстов после неё быть не может.': 'The correction touched %.2f ha in total. The stack has been reassembled by subtracting non-negative thicknesses, so overlaps after it are impossible.',
    'замеры': 'measurements',
    'грид': 'the grid',
    '5.05 Манифест модели': '5.05 Model manifest',
    'Записывает, какую роль играет каждый слой проекта: опорная поверхность, контакт тела, зеркало, устья, интервалы, замеры оси, справочник, наземные наблюдения.\n\n**Зачем.** После сборки проект превращается в кучу растров и таблиц без явной структуры. Что из этого что, знает пользователь, но голова не передаётся вместе с проектом.\n\n**Где живёт.** В пользовательских свойствах проекта QGIS - штатное место, которое сохраняется в файле проекта и переносится вместе с ним. Ничего внешнего не нужно.\n\n**Правило, которое важнее прочих.** Инструменты читают манифест, но не требуют его. Есть роли - входы находятся сами. Нет ролей, потому что проект чужой или унаследованный, - всё работает по явному выбору, как раньше. Манифест сокращает путь, а не становится условием работы.\n\nРоли угадываются по именам слоёв, и это подсказка, а не решение за пользователя: имя ничего не гарантирует, поэтому разметка выдаётся таблицей на проверку. Чужие роли, записанные другими модулями, сохраняются: манифест общий, и вычищать незнакомое значит ломать соседям работу.': 'Records what role every layer of the project plays: the datum surface, a contact of a body, the mirror, the collars, the intervals, the axis surveys, the reference, the ground observations.\n\n**What for.** After the assembly the project turns into a heap of rasters and tables with no explicit structure. What is what is known to the user, but the head does not travel with the project.\n\n**Where it lives.** In the custom properties of the QGIS project - the regular place, which is saved in the project file and travels with it. Nothing external is needed.\n\n**The rule that matters more than the others.** The tools read the manifest but do not require it. If the roles are there, the inputs are found on their own. If they are not, because the project is foreign or inherited, everything works by explicit choice as before. The manifest shortens the path rather than becoming a condition of work.\n\nThe roles are guessed from the names of the layers, and this is a hint rather than a decision for the user: a name guarantees nothing, so the markup is produced as a table for checking. Foreign roles written by other modules are kept: the manifest is shared, and clearing out the unfamiliar means breaking the work of neighbours.',
    'Слои модели (пусто - весь проект)': 'Model layers (empty - the whole project)',
    'Записать роли в проект': 'Write the roles into the project',
    'Очистить манифест перед записью': 'Clear the manifest before writing',
    'Роли слоёв (таблица)': 'Layer roles (table)',
    'Манифест живёт в проекте, а проекта нет.': 'The manifest lives in a project, and there is no project.',
    'В проекте нет слоёв.': 'The project holds no layers.',
    'из манифеста': 'from the manifest',
    'по имени слоя': 'by the layer name',
    'не распознано': 'not recognized',
    'Записано ролей: %d. Чужие роли из манифеста сохранены: он общий, и вычищать незнакомое значит ломать соседям работу.': 'Roles written: %d. Foreign roles from the manifest are kept: it is shared, and clearing out the unfamiliar means breaking the work of neighbours.',
    'Запись выключена: таблица выдана на проверку, проект не тронут.': 'Writing is off: the table is produced for checking, the project is untouched.',
    'Слоёв просмотрено %d: из манифеста %d, угадано по имени %d, не распознано %d. Догадка это подсказка, а не решение: имя слоя ничего не гарантирует.': 'Layers examined %d: from the manifest %d, guessed by name %d, not recognized %d. A guess is a hint rather than a decision: the name of a layer guarantees nothing.',
    'Роли слоёв': 'Layer roles',
    '5.06 Складчатость поверхности': '5.06 Folding of a surface',
    'Считает, насколько поверхность смята, по разбросу отметок вокруг местного наклона.\n\n**Складчатость мерится по поверхности, а не по мощности.** Цилиндрическая складка с постоянной истинной мощностью существует и по мощности невидима вовсе: тело изгибается, не меняя толщины.\n\n**Прямая дисперсия отметок не годится.** На общем наклоне она велика всюду, и спокойный склон получает ту же оценку, что смятая зона. Поэтому в каждом окне подгоняется плоскость и считается разброс остатков вокруг неё: наклон уходит, извилистость остаётся. Тренд именно линейный, квадратичный вобрал бы в себя часть самой складчатости.\n\n**Одно окно ничего не решает.** Дисперсия зависит от масштаба, и правильная мера это скорость её роста с размером окна. Наклон в двойном логарифме и есть эта скорость: на спокойной поверхности он около нуля, на смятой заметно больше. Задайте несколько окон через запятую, и выйдет карта наклона.\n\n**Остаток выдаётся отдельно** и годится входом для фрактальной размерности: на детрендированной поверхности наклон вариограммы описывает извилистость, а не общее падение слоя.\n\nМощность из базы остаётся вторым, независимым признаком складчатости: она вскрытая, а не истинная, и на крыле растёт тем сильнее, чем круче залегание. Два разных измерения, сходящихся в одном месте, надёжнее одного.': 'Computes how crumpled a surface is, from the spread of elevations around the local slope.\n\n**Folding is measured on the surface rather than on the thickness.** A cylindrical fold with a constant true thickness exists and is invisible in the thickness altogether: the body bends without changing its thickness.\n\n**A plain variance of elevations will not do.** On a general slope it is large everywhere, and a quiet hillside gets the same score as a crumpled zone. Therefore a plane is fitted in every window and the spread of the residuals around it is computed: the slope goes, the sinuosity remains. The trend is linear on purpose, a quadratic one would absorb part of the folding itself.\n\n**One window decides nothing.** The variance depends on scale, and the proper measure is the rate of its growth with the size of the window. The slope in a double logarithm is that rate: on a quiet surface it is about zero, on a crumpled one noticeably larger. Give several windows separated by commas and a map of the slope comes out.\n\n**The residual is produced separately** and serves as an input for the fractal dimension: on a detrended surface the slope of the variogram describes the sinuosity rather than the general dip of the bed.\n\nThe thickness from the database stays a second, independent sign of folding: it is the penetrated thickness rather than the true one, and on a limb it grows the more steeply the steeper the dip. Two different measurements meeting in one place are more reliable than one.',
    'Поверхность (кровля тела)': 'Surface (roof of a body)',
    'Окно, м': 'Window, m',
    'Окна для наклона по масштабу, м через запятую': 'Windows for the slope by scale, m separated by commas',
    'Дисперсия со снятым наклоном, м²': 'Variance with the slope removed, m2',
    'Наклон по масштабу': 'Slope by scale',
    'Остаток поверхности (для 7.01)': 'Residual of the surface (for 7.01)',
    'Окно %.0f м это %d ячеек при размере ячейки %.1f м.': 'A window of %.0f m is %d cells at a cell size of %.1f m.',
    'Складчатость (дисперсия)': 'Folding (variance)',
    'Дисперсия от %.3g до %.3g м², медиана %.3g. Спокойная поверхность даёт около нуля: наклон снят подгонкой плоскости, и остаётся только извилистость.': 'The variance runs from %.3g to %.3g m2, median %.3g. A quiet surface gives about zero: the slope is removed by fitting a plane, and only the sinuosity remains.',
    'Складчатость (наклон по масштабу)': 'Folding (slope by scale)',
    'Наклон по масштабу считался по окнам %s ячеек: от %.2f до %.2f, медиана %.2f. Около нуля означает, что разброс не растёт с масштабом, то есть поверхность спокойна.': 'The slope by scale was computed over windows of %s cells: from %.2f to %.2f, median %.2f. About zero means the spread does not grow with scale, that is the surface is quiet.',
    'Окон для наклона меньше двух: карта наклона не строится. Одно окно о складчатости не говорит, потому что дисперсия зависит от масштаба.': 'Fewer than two windows for the slope: the map of the slope is not built. A single window says nothing about folding, because the variance depends on scale.',
    'Остаток поверхности': 'Residual of the surface',
    'Уровни по створам на карте (для 6.02)': 'Levels at the sections on the map (for 6.02)',
    'Уровни по створам на карте': 'Levels at the sections on the map',
    'Слой уровней лежит вне охвата поверхности. Похоже, подан чертёжный слой уровней: у него по горизонтали расстояние вдоль створа, а не координата на карте. Возьмите выход «Уровни по створам на карте» из 6.01.': 'The layer of levels lies outside the extent of the surface. It looks like the drawing layer of levels has been supplied: along its horizontal axis runs the distance along the section rather than a map coordinate. Take the output "Levels at the sections on the map" from 6.01.',
    'Створы на карте (для расхода по кривой)': 'Sections on the map (for a discharge along the curve)',
    'Поле имени створа (обычно sec)': 'Section name field (usually sec)',
    'Створ «%s»: расход %.4g вне кривой, створ пропущен.': 'Section "%s": the discharge %.4g is outside the curve, the section is skipped.',
    'Расход %.4g м³/с разнесён по %d створам обратным ходом по готовой кривой, пропущено %d. Поверхность воды поднята по ним: пересобирать кривую не потребовалось.': 'The discharge of %.4g m3/s is spread over %d sections backwards along the curve already computed, %d skipped. The water surface is raised from them: there was no need to rebuild the curve.',
    'Расход вне кривой на всех створах: уровень нельзя найти, не считая кривую заново.': 'The discharge is outside the curve at every section: the level cannot be found without computing the curve anew.',
    'Разломы (линии, барьеры влияния)': 'Faults (lines, barriers of influence)',
    'Амплитуда разлома, единицы значения': 'Fault throw, units of the value',
    'Разломы (линии, разрыв поверхности)': 'Faults (lines, break of the surface)',
    'Разломов подано %d, звеньев %d, перекрытых рёбер сетки %d. Ребро между соседними узлами, пересечённое линией, из шаблона выпадает, и поверхность вдоль разлома рвётся. В полосе шириной два узла вдоль линии работает мембрана: тринадцатиточечный шаблон кривизны дотягивается на две ячейки и перешагнул бы разрыв.': 'Faults supplied %d, segments %d, blocked grid edges %d. An edge between neighbouring nodes crossed by the line drops out of the stencil, and the surface breaks along the fault. Within a band two nodes wide along the line a membrane is used: the thirteen-point curvature stencil reaches two cells out and would step over the break.',
    'Разлом (демо)': 'Fault (demo)',
    'Разлом с амплитудой %.3g: значения сдвинуты по одну сторону от линии. Линия не доходит до краёв площади, и выше её конца поверхность обязана смыкаться.': 'A fault with a throw of %.3g: the values are shifted on one side of the line. The line does not reach the edges of the area, and above its end the surface must close up.',
    'Разломов подано %d, звеньев %d. Замер за разломом в выборку не идёт, и поверхность вдоль линии рвётся. Разлом проверяется точной геометрией, в сетку он не переводится, поэтому пустых ячеек вдоль линии не возникает. Отбираются по видимости только соседи: ковариации между самими замерами остаются евклидовыми, иначе система потеряет положительную определённость.': 'Faults supplied %d, segments %d. A measurement behind a fault does not enter the sample, and the surface breaks along the line. The fault is tested by exact geometry and is never turned into cells, so no empty cells appear along the line. Only the neighbours are selected by visibility: the covariances between the measurements themselves stay Euclidean, otherwise the system would lose positive definiteness.',
    'Наименьшая толщина полигона, ячеек (0 - не отсекать)': 'Smallest polygon thickness, cells (0 - do not cut off)',
    'Отброшено полос тоньше %.3g: %d. Такой полигон не возникает из склона, он только из скачка между соседними ячейками - у разлома, обрыва или края области.': 'Strips thinner than %.3g dropped: %d. Such a polygon does not arise from a slope, only from a jump between neighbouring cells - at a fault, a cliff or the edge of the area.',
    'Разломы (линии, разрыв изолиний)': 'Faults (lines, break of isolines)',
    'Разрез изолиний линиями разломов…': 'Splitting the isolines by the fault lines…',
    'Разломы поданы: изолинии режутся по линии, и граница поясов идёт точно по ней. Разрыв живёт в векторной части, поэтому ступенек по ячейкам не будет.': 'Faults are supplied: the isolines are split along the line and the boundary of the belts runs exactly along it. The break lives in the vector part, so there will be no steps by cells.',
    'Зона складки (демо)': 'Fold zone (demo)',
    'Поверхность растворения (демо)': 'Dissolution surface (demo)',
    'Справочник пластов (демо-пачка)': 'Bed reference (demo stack)',
    'Демо-пачка': 'Demo stack',
    'гриды здесь недействительны': 'the grids are void here',
    'Нужна метрическая система координат.': 'A metric coordinate system is required.',
    'Складка в середине площади: %.0f м поперёк, %.0f м вдоль простирания. У её замка один пласт вскрывается трижды, соседний дважды - там z(x, y) не существует, и гриды в этом месте неверны по построению.': 'The fold sits in the middle of the area: %.0f m across and %.0f m along the strike. At its hinge one bed is penetrated three times and its neighbour twice - z(x, y) does not exist there, and the grids in that place are wrong by construction.',
    'Скважин %d, из них %d вскрывают пласт больше одного раза. Номер вскрытия лежит в поле entry.': '%d boreholes, of which %d penetrate a bed more than once. The number of the penetration is in the entry field.',
    'Купол со срезанной верхушкой в стороне от складки: зеркало растворения на отметке %.0f м. Пласт сведён к нулю на %.1f га, оборван зеркалом на %.1f га. Срез переносится сверху вниз по всей пачке: каждая поверхность опускается до зеркала, если оказалась выше. Над сводом верхний пласт ложится на зеркало с нулевой мощностью, следующий обрывается. На краю среза мощность сходит к нулю и выглядит выклиниванием - различает их совпадение кровли с поверхностью растворения.': 'A salt dome with a dissolved top stands aside from the fold: the dissolution mirror is at %.0f m. A bed is brought to zero over %.1f ha and truncated by the mirror over %.1f ha. The cut is carried from the top down through the whole stack: every surface drops to the mirror if it went above it. Over the crest the upper bed lies on the mirror with zero thickness, the next one is truncated. At the edge of the cut the thickness goes to zero and looks like a pinch-out - what tells them apart is the roof lying on the dissolution surface.',
    'Строит учебную пачку из трёх пластов со сложной геологией: выклинивание, лежачая складка с опрокинутым залеганием и скважины, которые всё это вскрывают.\n\n**Главное в этом примере - складка.** У её замка вертикальная скважина пересекает один и тот же пласт трижды: в горизонтальном крыле, в верхней дуге и в нижней. Соседний пласт вскрывается дважды. Значит над точкой в плане оказывается несколько кровель, и z(x, y) перестаёт существовать как функция. Никакая плотность сети этого не исправит: дело не в разрешении, а в непригодности представления.\n\n**Гриды строятся по первому сверху вскрытию** - ровно так, как их собрал бы человек, не заметивший опрокидывания. В зоне складки они неверны по построению, и это нарочно: 5.01 на них обязана показать перехлёст и отрицательные мощности. Вне складки пачка обычная и согласованная.\n\n**Выклинивание** задано отдельно: мощность нижнего пласта сводится к нулю сглаженной ступенью между двумя границами. Границы выдаются линиями - тем самым входом, который нужен для построения тренда мощности.\n\n**Купол со срезанной верхушкой** стоит в стороне от складки. Купол поднимает пачку целиком, а поверхность растворения срезает поднятое сверху, и срезается не один пласт, а вся пачка вниз до глубины растворения. Срез переносится проходом сверху вниз: поверхность, оказавшаяся выше зеркала, опускается на него. Верхний пласт над сводом ложится на зеркало с нулевой мощностью, следующий обрывается. Пласт не выбрасывается в nodata сознательно: выброшенный обрывался бы на разрезе отвесной стенкой по границе ячейки, и чертёж шёл бы ступенями. Со сведением к нулю полоса сходит на зеркале клином. На краю среза мощность сходит к нулю и выглядит как выклинивание - отличает их то, что оборванная кровля лежит на поверхности растворения.\n\n**Колонка доведена до дневной поверхности.** Ниже зеркала лежат покровная соль ПКС и промышленные пласты, выше - СМТ, ТКТ и верхняя толща, заполняющая промежуток до рельефа. Подошва водоносных горизонтов взята по кровле СМТ, и отсюда же считается водозащитная толща: от кровли первого промышленного пласта до воды. Над куполом она тоньше всего, потому что соль там растворена, и это ровно та карта, ради которой такие модели и строят.\n\nМодель бурения описывает соляную часть: надсолевые толщи заданы поверхностями, а не интервалами по стволу.\n\nВыходы: четырнадцать растров кровель и подошв всей колонки, мощность водозащитной толщи, устья и интервалы модели бурения, границы выклинивания, контур зоны складки и справочник пластов. Всё детерминировано: одни параметры дают одну и ту же пачку.': 'Builds a teaching stack of three beds with awkward geology: a pinch-out, a recumbent fold with overturned bedding, and boreholes that penetrate all of it.\n\n**The fold is the point of this example.** At its hinge a vertical borehole crosses one and the same bed three times: in the horizontal limb, in the upper arc and in the lower one. The neighbouring bed is penetrated twice. So above a point in plan there are several roofs, and z(x, y) ceases to exist as a function. No density of the network will fix that: the matter is not the resolution but the unfitness of the representation.\n\n**The grids are built from the first penetration from the top** - exactly as a person would assemble them without noticing the overturning. In the fold zone they are wrong by construction, and that is deliberate: 5.01 must show overlaps and negative thicknesses on them. Outside the fold the stack is ordinary and consistent.\n\n**The pinch-out** is set separately: the thickness of the lower bed is brought to zero by a smoothed step between two boundaries. The boundaries are produced as lines - the very input needed to build a thickness trend.\n\n**A salt dome with a dissolved top** stands aside from the fold. The dome lifts the whole stack, the dissolution surface cuts away what has been lifted, and it is not one bed that is cut but the whole stack down to the depth of dissolution. The cut is carried from the top down: a surface that went above the mirror is lowered onto it. Over the crest the upper bed lies on the mirror with zero thickness, the next one is truncated. A bed is deliberately not thrown into nodata: a discarded bed would end on the section as a vertical wall along a cell edge, and the drawing would go in steps. Brought to zero, the band closes on the mirror as a wedge. At the edge of the cut the thickness goes to zero and looks like a pinch-out - what tells them apart is the truncated roof lying on the dissolution surface.\n\n**The column reaches the ground surface.** Below the mirror lie the cover salt PKS and the industrial beds, above it the SMT, the TKT and the upper unit filling the gap up to the relief. The base of the aquifers is taken at the roof of the SMT, and the water-protective thickness is measured from there: from the roof of the first industrial bed up to the water. Above the dome it is thinnest, because the salt there is dissolved, and that is exactly the map such models are built for.\n\nThe drilling model describes the salt part: the units above the mirror are given as surfaces, not as intervals along the hole.\n\nOutputs: fourteen rasters of roofs and floors for the whole column, the water-protective thickness, the collars and intervals of a drilling model, the pinch-out boundaries, the outline of the fold zone and a bed reference. Everything is deterministic: the same parameters give the same stack.',
    '7.01 Фрактальная размерность': '7.01 Fractal dimension',
    '7.02 Box-counting маски': '7.02 Box-counting of masks',
    '7.03 Размерность линий и границ': '7.03 Dimension of lines and boundaries',
    '7.04 Размерность Минковского (векторы)': '7.04 Minkowski dimension (vectors)',
    '7.05 Пример для фракталов (демо)': '7.05 Example for fractals (demo)',
    'Создаёт точечный слой геофизических профилей электроразведки для обучения и проверки инструментов без реальных данных. Несколько параллельных профилей с пикетами, вдоль которых заданы кажущееся сопротивление ρк (Ом·м) и потенциал естественного поля ЕП (мВ).\n\nВ данные заложена низкоомная аномалия - обводнённая или замещённая зона, где ρк проваливается с фоновых десятков Ом·м до единиц, а ЕП даёт отрицательный минимум. Аномалия вытянута поперёк профилей, поэтому проявляется при интерполяции ρк изолиниями: точки -> 2D Kriging по полю rho_k -> карта сопротивления -> изолинии, оконтуривающие аномалию.\n\nОбласть задаётся экстентом. Фоновое и минимальное ρк, амплитуду ЕП и шум можно изменить в разделе «Дополнительно».\n\nПоля результата: profile (номер профиля), picket_m (пикет в метрах от начала профиля), pk (метка ПК), rho_k (ρк, Ом·м), sp (ЕП, мВ).':
        'Creates a point layer of electrical-prospecting geophysical profiles for learning and testing the tools without real data. Several parallel profiles with pickets carrying apparent resistivity rho_k (Ohm*m) and self-potential SP (mV).\n\nThe data contains a low-resistivity anomaly - a water-bearing or replaced zone where rho_k drops from a background of tens of Ohm*m to units, and SP shows a negative minimum. The anomaly is elongated across the profiles, so it shows up when rho_k is interpolated into isolines: points -> 2D Kriging on rho_k -> a resistivity map -> isolines outlining the anomaly.\n\nThe area is set by an extent. The background and minimum rho_k, the SP amplitude and the noise can be changed under Advanced.\n\nOutput fields: profile (profile number), picket_m (picket in metres from the profile start), pk (a ПК label), rho_k (rho_k, Ohm*m), sp (SP, mV).',
    '1.11 Пример геофизических профилей (демо)': '1.11 Create a geophysical-profiles example (demo)',
    'ρк, Ом·м': 'rho_k, Ohm*m',
    'Амплитуда аномалии ЕП, мВ (обычно < 0)': 'SP anomaly amplitude, mV (usually < 0)',
    'Геофизические профили': 'Geophysical profiles',
    'Геофизические профили (демо)': 'Geophysical profiles (demo)',
    'ЕП, мВ': 'SP, mV',
    'Зерно ГСЧ (0 - случайно)': 'RNG seed (0 - random)',
    'Интерполируйте поле rho_k инструментом 1.02 2D Kriging и постройте изолинии - низкоомная аномалия оконтурится.':
        'Interpolate the rho_k field with tool 1.02 2D Kriging and build isolines - the low-resistivity anomaly will be outlined.',
    'Минимальное ρк в аномалии, Ом·м': 'Minimum rho_k in the anomaly, Ohm*m',
    'Не задан охват.': 'No extent set.',
    'Не создан слой результата.': 'Output layer not created.',
    'Пикет (ПК)': 'Picket (PK)',
    'Пикет, м': 'Picket, m',
    'Профилей: %d, точек: %d. ρк от %.4g до %.4g Ом·м, ЕП от %.1f до %.1f мВ.':
        'Profiles: %d, points: %d. rho_k from %.4g to %.4g Ohm*m, SP from %.1f to %.1f mV.',
    'Профиль': 'Profile',
    'Фоновое ρк, Ом·м': 'Background rho_k, Ohm*m',
    'Число профилей': 'Number of profiles',
    'Шаг пикетов, м': 'Picket step, m',
    'Шум ρк (доля, лог-масштаб)': 'rho_k noise (fraction, log scale)',
    'Создаёт точечный слой геофизических профилей для обучения и проверки инструментов без реальных данных. Параллельные профили с пикетами. Два режима.\n\nЭлектроразведка: кажущееся сопротивление ρк (Ом·м), потенциал естественного поля ЕП (мВ) и вызванная поляризация ВП (мВ/В). Заложена низкоомная аномалия компактным пятном (обводнение или замещение), а не полосой, поэтому профили не синхронны. ρк проваливается с фоновых десятков Ом·м до единиц, ЕП даёт отрицательный минимум. Поле rho_k интерполируется 2D Kriging или минимальной кривизной, аномалия оконтуривается изолиниями.\n\nОседания (мульда): оседание (мм) в виде мульды сдвижения над отработанной площадью, по нескольким турам. По одним пикетам можно посчитать разность между турами.\n\nВо всех режимах добавлены отметка z (м) и истинное значение без шума для проверки точности интерполяции против эталона. Диапазоны и число туров меняются в разделе «Дополнительно».\n\nПоля электроразведки: profile, picket_m, pk, z, rho_k, rho_true, sp, vp. Поля оседаний: profile, picket_m, pk, tour, z, settle, settle_true.':
        'Creates a point layer of geophysical profiles for learning and testing the tools without real data. Parallel profiles with pickets. Two modes.\n\nElectrical prospecting: apparent resistivity rho_k (Ohm*m), self-potential SP (mV) and induced polarisation IP (mV/V). A low-resistivity anomaly is embedded as a compact spot (water saturation or replacement), not a stripe, so the profiles are not synchronous. rho_k drops from a background of tens of Ohm*m to units, SP shows a negative minimum. The rho_k field is interpolated with 2D Kriging or minimum curvature, the anomaly is outlined by isolines.\n\nSubsidence (trough): settlement (mm) as a subsidence trough over a mined area, across several tours. The difference between tours at the same pickets gives the settlement rate.\n\nIn all modes a surface elevation z (m) and a noise-free true value are added, to check interpolation accuracy against a reference. Ranges and the number of tours are changed under Advanced.\n\nElectrical fields: profile, picket_m, pk, z, rho_k, rho_true, sp, vp. Subsidence fields: profile, picket_m, pk, tour, z, settle, settle_true.',
    'Интерполируйте rho_k (2D Kriging или минимальная кривизна) и постройте изолинии - аномалия-пятно оконтурится. Поле rho_true - эталон без шума для проверки точности.':
        'Interpolate rho_k (2D Kriging or minimum curvature) and build isolines - the spot anomaly will be outlined. The rho_true field is a noise-free reference for accuracy checks.',
    'Оседания: профилей %d, туров %d, точек %d. Мульда до %.1f мм. Разность settle между турами по одним пикетам даёт скорость оседания.':
        'Subsidence: %d profiles, %d tours, %d points. Trough down to %.1f mm. The settle difference between tours at the same pickets gives the settlement rate.',
    'Электроразведка: профилей %d, точек %d. ρк %.4g..%.4g Ом·м, ЕП %.1f..%.1f мВ.':
        'Electrical prospecting: %d profiles, %d points. rho_k %.4g..%.4g Ohm*m, SP %.1f..%.1f mV.',
    'ρк без шума, Ом·м': 'rho_k without noise, Ohm*m',
    'Амплитуда аномалии ВП, мВ/В': 'IP anomaly amplitude, mV/V',
    'ВП, мВ/В': 'IP, mV/V',
    'Максимальное оседание (мульда), мм': 'Maximum subsidence (trough), mm',
    'Оседание без шума, мм': 'Subsidence without noise, mm',
    'Оседание, мм': 'Subsidence, mm',
    'Оседания (мульда)': 'Subsidence (trough)',
    'Отметка z, м': 'Elevation z, m',
    'Отметка поверхности: амплитуда, м': 'Surface elevation: amplitude, m',
    'Отметка поверхности: база, м': 'Surface elevation: base, m',
    'Тур': 'Tour',
    'Число туров (для оседаний)': 'Number of tours (for subsidence)',
    'Электроразведка (ρк, ЕП, ВП)': 'Electrical prospecting (rho_k, SP, IP)',
    'Знак оседания': 'Subsidence sign',
    'Вниз (отрицательное)': 'Down (negative)',
    'Величина (положительное)': 'Magnitude (positive)',
    'Профили оседаний (мульда, туров: %d)': 'Subsidence profiles (trough, tours: %d)',
    'Профили электроразведки (ρк, ЕП, ВП)': 'Electrical-prospecting profiles (rho_k, SP, IP)',
    'Скважины разреза (демо)': 'Section wells (demo)',
    'Устья скважин collar (модель бурения)': 'Borehole collars (drilling model)',
    '4.02 Скважины на разрезе (модель бурения)': '4.02 Boreholes on sections (drilling model)',
    'Не нашлось поле «%s» (%s): задайте его в дополнительных параметрах.': 'Field \'%s\' (%s) was not found: set it in the advanced parameters.',
    'Поля: collar (%s), interval (%s).': 'Fields: collar (%s), interval (%s).',
    '(без кода)': '(no code)',
    'прочее': 'other',
    'Интервалы скважин interval (таблица)': 'Borehole intervals (table)',
    'Устья collar (демо)': 'Collars (demo)',
    'Интервалы interval (демо)': 'Intervals (demo)',
    'Устьев принято %d из %d, интервалов %d из %d.': 'Collars accepted %d of %d, intervals %d of %d.',
    'Пропущено: %s.': 'Skipped: %s.',
    'Принято с оговоркой: %s.': 'Accepted with a note: %s.',
    'устьев без hole_id: %d': 'collars without hole_id: %d',
    'устьев без отметки z: %d': 'collars without elevation z: %d',
    'устьев без координат: %d': 'collars without coordinates: %d',
    'повторов hole_id (взято первое): %d': 'duplicate hole_id (first kept): %d',
    'устьев без забоя eoh: %d': 'collars without eoh: %d',
    'интервалов без hole_id: %d': 'intervals without hole_id: %d',
    'интервалов с пустыми глубинами: %d': 'intervals with empty depths: %d',
    'интервалов нулевой длины: %d': 'zero-length intervals: %d',
    'интервалов без устья: %d': 'intervals without a collar: %d',
    'переставлено from и to: %d': 'from and to swapped: %d',
    'интервалов без кода: %d': 'intervals without a code: %d',
    'интервалов за забоем (как есть): %d': 'intervals beyond eoh (as is): %d',
    'перехлёстов (как есть): %d': 'overlaps (as is): %d',
    'разрывов между интервалами (как есть): %d': 'gaps between intervals (as is): %d',
    '4.11 Выноска скважин на разрез (модель бурения)': '4.11 Drillholes on sections (drilling model)',
    'Вынесено колонок %d (интервалов %d) на %d разрезов.': 'Placed %d columns (%d intervals) on %d sections.',
    'Интервалы скважин (3D)': 'Borehole intervals (3D)',
    'Интервалы скважин (interval, таблица)': 'Borehole intervals (interval, table)',
    'Интервалы скважин (чертёж)': 'Borehole intervals (drawing)',
    'Не заданы обязательные поля модели (hole_id, z, from, to).': 'Required model fields are not set (hole_id, z, from, to).',
    'Ни одна скважина не попала в коридор ни одного разреза. Ближайшее устье в журнале выше: если удаление в разы больше коридора, линии и устья лежат в разных местах, если немного больше - расширьте коридор.': 'No borehole fell within the corridor of any section. The nearest collar is in the log above: if the distance exceeds the corridor manyfold, the lines and collars live in different places, if only slightly - widen the corridor.',
    'СК устьев %s переведена в СК определения %s.': 'Collar CRS %s reprojected to the definition CRS %s.',
    'Первое устье: %.2f, %.2f.': 'First collar: %.2f, %.2f.',
    'Ближайшее устье в %.1f ед. карты.': 'Nearest collar at %.1f map units.',
    'Ни одна скважина не собралась: проверьте hole_id и глубины.': 'No borehole assembled: check hole_id and depths.',
    'Нужны устья collar и таблица интервалов interval.': 'Collars and an interval table are needed.',
    'Поле глубины забоя (обычно eoh)': 'End of hole depth field (usually eoh)',
    'Поле подписи устья (по умолчанию number)': 'Collar label field (number by default)',
    'Обрезать интервалы по рамке чертежа (zmin и zmax)': 'Clip intervals by the drawing frame (zmin and zmax)',
    'Допуск обрезки, ед. отметки': 'Clipping tolerance, elevation units',
    'Чертёж разреза (полигоны из 4.01, для обрезки)': 'Section drawing (polygons from 4.01, for clipping)',
    'Обрезка по чертежу разреза включена.': 'Clipping by the section drawing is on.',
    'Рамка: интервалов подрезано %d, за рамкой %d, скважин целиком за рамкой %d.': 'Frame: %d intervals trimmed, %d beyond the frame, %d boreholes entirely beyond the frame.',
    'Поле идентификатора скважины, устья (обычно hole_id)': 'Borehole id field, collars (usually hole_id)',
    'Поле идентификатора скважины, интервалы (обычно hole_id)': 'Borehole id field, intervals (usually hole_id)',
    'Поле кода пласта, чем красим (обычно code)': 'Bed code field, what we colour by (usually code)',
    'Поле конца интервала (обычно to)': 'Interval end field (usually to)',
    'Поле начала интервала (обычно from)': 'Interval start field (usually from)',
    'Поле отметки устья (обычно z)': 'Collar elevation field (usually z)',
    'Разрез «%s»: скважин %d, вне коридора %d.': 'Section \'%s\': %d boreholes, %d outside the corridor.',
    'Скважины на разрезе (модель)': 'Boreholes on the section (model)',
    'Стволы скважин (чертёж)': 'Borehole traces (drawing)',
    'Якоря подписей интервалов (чертёж)': 'Label anchors of intervals (drawing)',
    'Устья на чертеже (подписи)': 'Collars on the drawing (labels)',
    'Устья скважин (collar)': 'Borehole collars (collar)',
    'Модель бурения: устьев %d, интервалов %d (поля Д1 и Д2, номера между полями повторяются).': 'Drilling model: %d collars, %d intervals (fields D1 and D2, numbers repeat between fields).',
    'Оценка плотности, где замер задан не точкой, а носителем конечного размера: точка с сигмой неопределённости, отрезок линии (коридор полуширины), полигон. Единичная масса замера размазывается по носителю. Масса сохраняется, плотность обратна площади носителя, поэтому грубые привязки (регион, «где-то на Каме») самоослабляются геометрически, без порогов.\n\nЭто оценка плотности (сколько и где), не интерполяция значения - для значений остаётся кригинг. Тип геометрии один на запуск, смешение - серией запусков в один растр (дописывание).\n\nПоля: масса (по умолчанию 1 на объект); точность (для точек сигма в единицах карты, для линий полуширина коридора); для линий from_m/to_m - вырезка интервала по линейной привязке.\n\nВыход - трёхканальный растр: канал 1 плотность (масса на км², не зависит от размера ячейки), каналы 2-3 служебные (Σm·σ и Σm), чтобы дописывание и карта эффективной сигмы были точны. Необязательный второй растр - средневзвешенная сигма по ячейке (карта эффективной точности, аналог кригинговой дисперсии).\n\nИнвариант: интеграл плотности равен сумме масс входа, пишется в лог. Дазиметрия для полигонов - масса пропорциональна вспомогательному растру (население и т.п.), при пустом растре внутри полигона откат на равномерное. Слой должен быть в метрической системе координат.':
        'Density estimation where a measurement is given not by a point but by a finite-size support: a point with an uncertainty sigma, a line segment (a corridor of half-width), a polygon. The unit mass of a measurement is spread over its support. Mass is conserved and density is inverse to the support area, so coarse georeferencing (a region, "somewhere on the Kama") self-attenuates geometrically, without thresholds.\n\nThis is density estimation (how much and where), not value interpolation - kriging remains for values. One geometry type per run; mix by a series of runs into one raster (append).\n\nFields: mass (default 1 per object); precision (for points the sigma in map units, for lines the corridor half-width); for lines from_m/to_m cut an interval by linear referencing.\n\nOutput is a three-band raster: band 1 density (mass per km2, independent of cell size), bands 2-3 service (sum m*sigma and sum m) so that append and the effective-sigma map stay exact. Optional second raster - mass-weighted sigma per cell (effective precision map, an analogue of kriging variance).\n\nInvariant: the density integral equals the sum of input masses, written to the log. Dasymetry for polygons - mass proportional to an auxiliary raster (population etc.); if the raster is empty inside the polygon, fall back to uniform. The layer must be in a metric coordinate system.',
    'Синтетический набор для инструмента 3.07 с известной суммарной массой, чтобы проверить инвариант глазами. Точки (масса 500, сигмы от долей ячейки до крупных), линии (масса 200, у одной вырезка интервала from_m/to_m), полигоны (масса 300, один под дазиметрию) и вспомогательный растр. Итого масса 1000.\n\nЗапустите 3.07 на слое точек - интеграл плотности должен дать 500, на линиях 200, на полигонах 300. Поля: mass, prec, from_m, to_m.':
        'A synthetic set for tool 3.07 with a known total mass, to check the invariant by eye. Points (mass 500, sigmas from fractions of a cell to large), lines (mass 200, one with a from_m/to_m interval cut), polygons (mass 300, one for dasymetry) and an auxiliary raster. Total mass 1000.\n\nRun 3.07 on the point layer - the density integral should give 500, on lines 200, on polygons 300. Fields: mass, prec, from_m, to_m.',
    'Демо создано. Масса: точки 500, линии 200, полигоны 300, итого 1000. Прогоните 3.07 на каждом слое - интеграл плотности должен совпасть.':
        'Demo created. Mass: points 500, lines 200, polygons 300, total 1000. Run 3.07 on each layer - the density integral should match.',
    '3.07 Плотность по замерам (переменная опора)': '3.07 Density from measurements (variable support)',
    '3.08 Пример для плотности (демо)': '3.08 Create a density example (demo)',
    'Вспом. растр (дазиметрия)': 'Auxiliary raster (dasymetry)',
    'Вспом. растр для дазиметрии': 'Auxiliary raster for dasymetry',
    'Вспом. растр для дазиметрии (полигоны)': 'Auxiliary raster for dasymetry (polygons)',
    'Демо-линии': 'Demo lines',
    'Демо-линии (плотность)': 'Demo lines (density)',
    'Демо-полигоны': 'Demo polygons',
    'Демо-полигоны (плотность)': 'Demo polygons (density)',
    'Демо-точки': 'Demo points',
    'Демо-точки (плотность)': 'Demo points (density)',
    'Донормировать внутри': 'Renormalise inside',
    'Дописать в существующий растр (3 канала)': 'Append to an existing raster (3 bands)',
    'Дописывание в растр %d×%d, ячейка %.4g.': 'Appending into a %d×%d raster, cell %.4g.',
    'Замеры (точки, линии или полигоны)': 'Measurements (points, lines or polygons)',
    'Не задан слой замеров.': 'No measurement layer set.',
    'Носитель за краем области': 'Support beyond the area edge',
    'Область (по умолчанию по слою)': 'Area (by layer by default)',
    'Объектов: %d. Масса входа: %.6g. Масса на сетке: %.6g. Расхождение: %.3g.':
        'Objects: %d. Input mass: %.6g. Mass on grid: %.6g. Discrepancy: %.3g.',
    'Плотность (переменная опора)': 'Density (variable support)',
    'Поле from_m (линии, интервал)': 'Field from_m (lines, interval)',
    'Поле to_m (линии, интервал)': 'Field to_m (lines, interval)',
    'Поле «%s» не найдено в слое. Выберите поле значения Z.': 'Field "%s" not found in the layer. Select a Z value field.',
    'Поле массы (по умолчанию 1)': 'Mass field (default 1)',
    'Поле точности (сигма точки / полуширина линии)': 'Precision field (point sigma / line half-width)',
    'Потерять массу (с предупреждением)': 'Lose mass (with a warning)',
    'Размер ячейки, м': 'Cell size, m',
    'Растр дописывания должен иметь 3 канала (плотность, Σm·σ, Σm).':
        'The append raster must have 3 bands (density, sum m*sigma, sum m).',
    'Сигма по умолчанию, м (0 - полуячейка)': 'Default sigma, m (0 - half-cell)',
    'Слой в градусах. Перепроецируйте в метрическую систему координат.':
        'The layer is in degrees. Reproject to a metric coordinate system.',
    'Часть массы за пределами области (см. режим края).': 'Some mass is outside the area (see the edge mode).',
    'Эффективная сигма': 'Effective sigma',
    'Эффективная сигма': 'Effective sigma',
    'Ячейка вспом. растра, м': 'Auxiliary raster cell, m',
    'плотность, масса/км²': 'density, mass/km2',
    'Генерирует учебные объекты для фрактальных инструментов: ветвящуюся речную сеть (поле order - порядок притока), полигон водосбора с изрезанной границей и отдельную береговую линию (срединные смещения). Реки подавайте в 6.04 - размерность сети; берег и границу водосбора - в 6.03 и 5.04; растеризуйте водосбор - и он же пример для 5.02.':
        'Generates training objects for the fractal tools: a branching river network (the order field - tributary order), a catchment polygon with a rugged boundary and a separate coastline (midpoint displacement). Feed the rivers into 6.04 - network dimension; the coast and the catchment boundary into 6.03 and 5.04; rasterise the catchment - it is also an example for 5.02.',
    'Журнал…': 'Log…',
    'Открыть файл журнала Isoliner': 'Open the Isoliner log file',
    'Журнал': 'Log',
    'Журнал ещё не создан.': 'The log has not been created yet.',
    'Карта плотности (переменная опора)': 'Density map (variable support)',
    'Карта плотности…': 'Density map…',
    'Карта плотности': 'Density map',
    'Живой предпросмотр плотности с переменной опорой': 'Live preview of variable-support density',
    'Замеры': 'Measurements',
    'Поле массы': 'Mass field',
    'Поле точности': 'Precision field',
    'Сигма по умолчанию, м': 'Default sigma, m',
    '0 - полуячейка': '0 - half-cell',
    'Ячейка растра, м': 'Raster cell, m',
    'Размер ячейки итогового растра': 'Cell size of the resulting raster',
    'Носитель за краем': 'Support beyond the edge',
    'Потерять массу': 'Lose mass',
    'Поле from_m (линии)': 'Field from_m (lines)',
    'Поле to_m (линии)': 'Field to_m (lines)',
    'Вспом. растр (дазиметрия)': 'Auxiliary raster (dasymetry)',
    'Построить изолинии плотности': 'Build density isolines',
    'Слой эффективной сигмы (доверие)': 'Effective-sigma layer (trust)',
    'Демо': 'Demo',
    'Записать растр': 'Write raster',
    'Закрыть': 'Close',
    '(нет)': '(none)',
    'Слой не выбран.': 'No layer selected.',
    'Нет данных для предпросмотра.': 'No data for the preview.',
    'Объектов: %d.  Масса входа: %.6g.  На сетке: %.6g.  Потеряно на краю: %.2f%%':
        'Objects: %d.  Input mass: %.6g.  On grid: %.6g.  Lost at the edge: %.2f%%',
    'Предпросмотр %d×%d, максимум %.4g масса/км². Полный расчёт - по кнопке «Записать растр».':
        'Preview %d×%d, maximum %.4g mass/km2. Full computation - via the "Write raster" button.',
    'Предпросмотр не построен: %s': 'Preview failed: %s',
    'Приблизьте карту к нужной области.': 'Zoom the map to the area you need.',
    'Демо создано: масса точек 500, линий 200, полигонов 300. Выберите слой и смотрите предпросмотр.':
        'Demo created: mass of points 500, lines 200, polygons 300. Select a layer and watch the preview.',
    'Изолинии плотности': 'Density isolines',
    'Эффективная сигма (доверие)': 'Effective sigma (trust)',
    'Эффективная сигма постоянна (%.4g): у слоя одинаковая точность, карта доверия вырождена.':
        'Effective sigma is constant (%.4g): the layer has uniform precision, the trust map is degenerate.',
    # --- 2. Топография ---
    '2. Топография': '2. Topography',
    '2.01 Загрузка ЦМР по рамке': '2.01 Download DEM by extent',
    '2.02 Загрузка топоосновы по рамке': '2.02 Download base topography by extent',
    '2.10 Демо-рельеф': '2.10 Demo relief',
    'Epsilon уклона при заполнении, м': 'Slope epsilon for filling, m',
    'Epsilon уклона, м (0: только ямы)': 'Slope epsilon, m (0: pits only)',
    'Входная ЦМР': 'Input DEM',
    'Выберите целевую СК с кодом EPSG.': 'Choose a target CRS with an EPSG code.',
    'Высота, ячеек': 'Height, cells',
    'Гидрологическая коррекция (заполнение понижений)': 'Hydrological correction (fill depressions)',
    'Гидрологическая коррекция...': 'Hydrological correction...',
    'Готово: %dx%d ячеек, зерно %d.': 'Done: %dx%d cells, seed %d.',
    'Данные: Copernicus DEM © ESA.': 'Data: Copernicus DEM © ESA.',
    'Данные: © участники OpenStreetMap, ODbL.': 'Data: © OpenStreetMap contributors, ODbL.',
    'Демо-рельеф': 'Demo relief',
    'Компактный int16 (для поставки демо)': 'Compact int16 (for demo shipping)',
    'Не выбран ни один слой для загрузки.': 'No layer selected for download.',
    'Не удалось открыть входной растр через GDAL.': 'Failed to open the input raster via GDAL.',
    'Поднято ячеек: %d, максимальный подъём: %.2f м': 'Raised cells: %d, maximum raise: %.2f m',
    'Получено объектов (%s): %d': 'Features received (%s): %d',
    'Предел площади рамки, кв. градусов': 'Extent area limit, square degrees',
    'Предел числа плиток 1x1 градус': 'Limit of 1x1 degree tiles',
    'Рамка загрузки': 'Download extent',
    'СК выхода (метрическая)': 'Output CRS (metric)',
    'Таймаут запроса, с': 'Request timeout, s',
    'ЦМР (метрическая СК)': 'DEM (metric CRS)',
    'Целевая СК (пусто: СК проекта или UTM по центру)': 'Target CRS (empty: project CRS or UTM by center)',
    'Целевая СК должна быть метрической, градусные гриды в анализ не пускаем.': 'The target CRS must be metric, degree grids are not allowed into the analysis.',
    'Ширина, ячеек': 'Width, cells',
    'Водотоки (тальвеги)': 'Watercourses (streamlines)',
    'Водоёмы': 'Water bodies',
    'Вершины с отметками': 'Peaks with elevations',
    'Обрывы и насыпи': 'Cliffs and embankments',
    'Береговая линия': 'Coastline',
    'Водотоки': 'Watercourses',
    'Водоёмы (полигоны)': 'Water bodies (polygons)',
    'Вершины': 'Peaks',
    'Обрывы и насыпи (линии)': 'Cliffs and embankments (lines)',
    'Береговая линия (линии)': 'Coastline (lines)',

    # --- 2. Топография, расчётные инструменты ---
    '2.05 Сток и аккумуляция (D8)': '2.05 Flow and accumulation (D8)',
    '2.06 Речная сеть': '2.06 River network',
    '2.07 Бассейны и водоразделы': '2.07 Basins and watersheds',
    '2.08 Уклон и экспозиция': '2.08 Slope and aspect',
    '2.09 Вершины': '2.09 Peaks',
    'Аккумуляция, ячеек': 'Accumulation, cells',
    'Бассейнов: %d': 'Basins: %d',
    'Бассейны (полигоны)': 'Basins (polygons)',
    'Бассейны (растр меток)': 'Basins (label raster)',
    'Вершины (точки)': 'Peaks (points)',
    'Заполнить понижения перед расчётом': 'Fill depressions before computing',
    'Звеньев сети: %d': 'Network links: %d',
    'Максимальная аккумуляция: %d ячеек': 'Maximum accumulation: %d cells',
    'Минимальное превышение, м': 'Minimum drop, m',
    'Найдено вершин: %d': 'Peaks found: %d',
    'Направления стока (коды ESRI)': 'Flow directions (ESRI codes)',
    'Ни одна точка замыкания не попала на грид.': 'No pour point falls on the grid.',
    'Порог аккумуляции устья, ячеек (без точек)': 'Mouth accumulation threshold, cells (without points)',
    'Порог аккумуляции, ячеек': 'Accumulation threshold, cells',
    'Радиус окна, м': 'Window radius, m',
    'Радиус притяжки точек, м': 'Point snap radius, m',
    'Разметка бассейнов...': 'Labeling basins...',
    'Речная сеть': 'River network',
    'Точек замыкания принято: %d': 'Pour points accepted: %d',
    'Точки замыкания (пусто: устья)': 'Pour points (empty: mouths)',
    'Трассировка сети...': 'Tracing the network...',
    'Уклон, градусы': 'Slope, degrees',
    'Экспозиция, градусы': 'Aspect, degrees',
    'Заполнение понижений...': 'Filling depressions...',
    'Направления стока D8...': 'D8 flow directions...',
    'Аккумуляция...': 'Accumulation...',
    'Ячейка ЦМР не квадратная, переинтерполируйте грид.': 'The DEM cell is not square, resample the grid.',

    # --- 2.03 Topo2Raster ---
    '2.03 Topo2Raster (рельеф из векторов)': '2.03 Topo2Raster (terrain from vectors)',
    'Во входных слоях не нашлось ни одного узла с высотой.': 'No node with elevation found in the input layers.',
    'Готово: %dx%d ячеек.': 'Done: %dx%d cells.',
    'Заполнить понижения в итоге': 'Fill depressions in the result',
    'Итераций сглаживания на уровень': 'Smoothing iterations per level',
    'Минимальное падение тальвега, м/ячейку': 'Minimum streamline drop, m/cell',
    'Мультисеточная интерполяция...': 'Multigrid interpolation...',
    'Нужен хотя бы один слой с высотами: точки или изолинии.': 'At least one layer with elevations is required: points or contours.',
    'Обрывы (барьеры сглаживания)': 'Cliffs (smoothing barriers)',
    'Охват (пусто: по слоям)': 'Extent (empty: from layers)',
    'Поле высоты изолиний': 'Contour elevation field',
    'Поле высоты точек': 'Point elevation field',
    'Рельеф': 'Terrain',
    'СК первого слоя должна быть метрической, градусные гриды в анализ не пускаем.': 'The CRS of the first layer must be metric, degree grids are not allowed into the analysis.',
    'Тальвеги (вниз по течению)': 'Streamlines (downstream)',
    'Точки высот': 'Elevation points',
    'Узлов с высотой: %d': 'Nodes with elevation: %d',
    'Укажите поле высоты изолиний.': 'Set the contour elevation field.',
    'Укажите поле высоты точек.': 'Set the point elevation field.',

    # --- 2. Топография: обкатка 3.0.1 ---
    'Топография': 'Topography',
    'Целевая СК: %s': 'Target CRS: %s',
    'Нужна метрическая СК.': 'A metric CRS is required.',
    'Загружает по рамке из OpenStreetMap слои для работы с рельефом: водотоки (в OSM рисуются вниз по течению, это готовые тальвеги), водоёмы как плоскости постоянной высоты, вершины с отметками ele, обрывы и насыпи как линии разрыва, береговую линию. Выход в СК проекта. Публичные серверы Overpass имеют лимиты, для больших территорий уменьшайте рамку. Водоёмы берутся из замкнутых контуров way, составные мультиполигоны пока пропускаются. Выход: до пяти слоёв в группе Топография. Общие поля name и osm_id, у водотоков дополнительно waterway, у водоёмов water, у вершин ele (высота, м), у обрывов kind. Данные: © участники OpenStreetMap, ODbL.': 'Downloads terrain-related layers from OpenStreetMap by extent: watercourses (drawn downstream in OSM, ready-made streamlines), water bodies as constant-elevation planes, peaks with ele marks, cliffs and embankments as breaklines, the coastline. Output is in the project CRS. Public Overpass servers have limits, shrink the extent for large areas. Water bodies come from closed ways, compound multipolygons are skipped for now. Output: up to five layers in the Topography group. Common fields name and osm_id, watercourses also carry waterway, water bodies water, peaks ele (elevation, m), cliffs kind. Data: © OpenStreetMap contributors, ODbL.',
    'Считает направления стока D8 (Jenson-Domingue) и аккумуляцию: сколько ячеек стекает в каждую, включая её саму. Направления кодируются как в ArcGIS: E=1, SE=2, S=4, SW=8, W=16, NW=32, N=64, NE=128, сток=0. Береговая ячейка льёт в nodata, ячейка на рамке уходит с грида только без более низкого соседа внутри. Флажок заполнения понижений включён по умолчанию: на сырой ЦМР поток останавливается в ямах. Выход: два растра в группе Топография, направления GeoTIFF byte (nodata 255) и аккумуляция GeoTIFF float32 в ячейках (nodata -1).': 'Computes D8 flow directions (Jenson-Domingue) and accumulation: how many cells drain into each one, itself included. Directions are coded as in ArcGIS: E=1, SE=2, S=4, SW=8, W=16, NW=32, N=64, NE=128, sink=0. A shore cell pours into nodata, a cell on the frame leaves the grid only without a lower neighbor inside. The fill checkbox is on by default: on a raw DEM flow stops in pits. Output: two rasters in the Topography group, directions as a byte GeoTIFF (nodata 255) and accumulation as a float32 GeoTIFF in cells (nodata -1).',
    'Извлекает речную сеть: ячейки с аккумуляцией не ниже порога связываются в звенья от истоков и слияний вниз по течению. Вершины линий идут вниз по течению, как водотоки в OSM, выход годится тальвегами для Topo2Raster. Поля: порядок Стралера, аккумуляция в замыкании звена, длина. Порог в ячейках: площадь водосбора истока, делённая на площадь ячейки. Для ЦМР 30 м порог 1000 даёт начало рек с водосбора около 0.9 кв. км. Выход: линейный слой в группе Топография с полями order, acc_out и length_m.': 'Extracts the river network: cells with accumulation at or above the threshold are linked from heads and junctions downstream. Line vertices run downstream, like OSM watercourses, so the output works as streamlines for Topo2Raster. Fields: Strahler order, accumulation at the link outlet, length. Threshold is in cells: head catchment area divided by cell area. For a 30 m DEM a threshold of 1000 starts rivers at a catchment of about 0.9 sq. km. Output: a line layer in the Topography group with fields order, acc_out and length_m.',
    'Делит территорию на бассейны. С точками замыкания каждая точка притягивается к ячейке с наибольшей аккумуляцией в радиусе притяжки и собирает весь свой водосбор. Без точек бассейны строятся от устьев: ячеек, откуда поток покидает грид, с аккумуляцией не ниже порога. Границы полигонов - водоразделы. Ячейки, не попавшие ни в один бассейн, получают метку 0 и в полигоны не выводятся. Выход: полигоны в группе Топография с полями basin и area_m2, опционально растр меток GeoTIFF int32 (nodata 0).': 'Divides the area into basins. With pour points every point snaps to the cell with the highest accumulation within the snap radius and collects its whole catchment. Without points basins are built from mouths: cells where flow leaves the grid with accumulation at or above the threshold. Polygon boundaries are the watersheds. Cells outside every basin get label 0 and are not exported to polygons. Output: polygons in the Topography group with fields basin and area_m2, optionally a label raster as an int32 GeoTIFF (nodata 0).',
    'Уклон в градусах и экспозиция по ядру Horn 3x3, как в gdaldem. Экспозиция - азимут спуска в градусах от севера по часовой стрелке, у плоских ячеек -1. Ячейки nodata и их соседи получают nodata: ядро через дыры не считаем. Выход: два растра GeoTIFF float32 в группе Топография, nodata -9999.': 'Slope in degrees and aspect with the Horn 3x3 kernel, as in gdaldem. Aspect is the downslope azimuth in degrees from north clockwise, flat cells get -1. Nodata cells and their neighbors get nodata: the kernel is not computed across holes. Output: two float32 GeoTIFF rasters in the Topography group, nodata -9999.',
    'Находит вершины: ячейки, самые высокие в квадратном окне заданного радиуса, с превышением над минимумом окна не меньше порога. Радиус отсекает второстепенные макушки рядом с главной, превышение отсекает кочки на равнине. Выход: точечный слой в группе Топография с полями z (высота, м) и drop (превышение, м).': 'Finds peaks: cells that are the highest in a square window of the given radius, with a drop over the window minimum at or above the threshold. The radius suppresses secondary tops next to the main one, the drop suppresses bumps on a plain. Output: a point layer in the Topography group with fields z (elevation, m) and drop (drop, m).',
    'Создаёт синтетический рельеф: наклонная равнина, холмы, извилистая долина с постоянным падением. Рельеф детерминирован по зерну. Между холмами осознанно остаются локальные понижения, чтобы инструменту заполнения было что показывать. Служебный инструмент для примеров руководства и работы без сети, живые данные даёт инструмент 2.01. Выход: GeoTIFF float32 (или int16 флажком) в группе Топография.': 'Creates synthetic terrain: a tilted plain, hills, a winding valley with constant fall. The relief is deterministic by seed. Local depressions are left between the hills on purpose so the filling tool has something to show. A utility tool for manual examples and offline work, live data comes from tool 2.01. Output: a float32 GeoTIFF (or int16 by checkbox) in the Topography group.',

    # --- 2.01: два источника (3.1.0) ---
    'Источник рельефа': 'Terrain source',
    'Copernicus GLO-30 (DSM, поверхность)': 'Copernicus GLO-30 (DSM, surface)',
    'GEDTM30 (DTM, без леса и построек)': 'GEDTM30 (DTM, forest and buildings removed)',
    'Данные: GEDTM30 © OpenGeoHub, CC BY 4.0.': 'Data: GEDTM30 © OpenGeoHub, CC BY 4.0.',
    'Загружает ЦМР по рамке из открытого хранилища, без регистрации и ключей. Два источника на выбор. Copernicus GLO-30 - модель поверхности (DSM): высоты по кронам и кровлям, плиточная мозаика без швов. GEDTM30 - модель рельефа (DTM, CC BY 4.0): лес и постройки сняты машинным обучением по ICESat-2 и GEDI, под пологом леса точнее GLO-30, единый глобальный COG. Данные перепроецируются в метрическую систему координат с кубической интерполяцией. Флажок гидрокоррекции заполняет ложные понижения, чтобы вода текла вниз. Выход готов для изолиний (1.04) и всей группы Топография. Выход: GeoTIFF float32, высоты в метрах, слой попадает в группу Топография дерева слоёв. Данные: GLO-30 - Copernicus DEM © ESA, GEDTM30 - © OpenGeoHub, CC BY 4.0.': 'Downloads a DEM by extent from an open store, no registration or keys. Two sources to choose from. Copernicus GLO-30 is a surface model (DSM): heights over canopy and rooftops, a seamless tiled mosaic. GEDTM30 is a terrain model (DTM, CC BY 4.0): forest and buildings removed by machine learning from ICESat-2 and GEDI, more accurate than GLO-30 under forest canopy, a single global COG. The data is reprojected into a metric coordinate system with cubic resampling. The hydrological correction checkbox fills spurious depressions so water flows downhill. The output is ready for isolines (1.04) and the whole Topography group. Output: a float32 GeoTIFF, elevations in meters, the layer lands in the Topography group of the layer tree. Data: GLO-30 - Copernicus DEM © ESA, GEDTM30 - © OpenGeoHub, CC BY 4.0.',

    # --- FPDEMS и переменный урез (3.2.0) ---
    '2.04 Подготовка рельефа': '2.04 Terrain preparation',
    'Выберите хотя бы одну модификацию: сглаживание или заполнение понижений.': 'Select at least one modification: smoothing or depression filling.',
    'Заполнить понижения': 'Fill depressions',
    'Озёра и урез воды': 'Lakes and water edge',
    'Подготовленная ЦМР': 'Prepared DEM',
    'Поле отметки уреза (пусто: Z узлов или берег)': 'Water-edge elevation field (empty: node Z or shore)',
    'Сгладить рельеф (FPDEMS, сохраняет бровки)': 'Smooth terrain (FPDEMS, preserves edges)',
    'Сглаживание рельефа (FPDEMS)...': 'Terrain smoothing (FPDEMS)...',
    'Сглаживание: окно нормалей, ячеек': 'Smoothing: normals window, cells',
    'Сглаживание: порог различия нормалей, град': 'Smoothing: normals difference threshold, deg',
    'Сглаживание: число проходов': 'Smoothing: number of passes',
            'Строит рельеф из векторных данных мультисеточной интерполяцией от грубой сетки к тонкой, по мотивам ANUDEM. Каждый тип входа работает своим ограничением: точки высот и изолинии - жёсткие узлы, тальвеги - принудительное падение вниз по течению (вершины линий должны идти вниз по течению, водотоки OSM и выход инструмента 2.06 подходят как есть), обрывы - барьер **Урез** работает в двух режимах. Плоскость заливает всю площадь внутри\nровной отметкой - это зеркало озера или пруда. Изолиния закрепляет\nтолько линию берега, а поверхность внутри остаётся за точками и\nструктурными линиями: так строится русло с дном по промерам и\nтальвегу. Переключается галочкой **Урез как плоскость**.\n\nУрез-изолиния и **Заполнить понижения в итоге** работают навстречу друг другу: первое строит русло, второе его заравнивает, потому что для заполнения русло это обычная яма. Заполнение нужно рельефу суши, чтобы вода стекала, и вредно ЦМР с дном. При таком сочетании инструмент предупреждает в журнале.\n\nсглаживания, поверхности по сторонам независимы, урез воды - по трём приоритетам на каждый объект: у полигона с трёхмерными вершинами урез интерполируется по их высотам и наклоняется вдоль русла, у полигона с отметкой в поле держится плоскостью, без того и другого уровень берётся по минимуму берега. Разнотипные объекты в одном слое разбираются каждый своей веткой. Нужен хотя бы один слой с высотами: точки или изолинии. Все слои приводятся к СК первого заданного слоя, она должна быть метрической. Финальное заполнение понижений флажком. Выход: GeoTIFF float32, высоты в метрах, nodata -9999, слой в группе Топография.\n\n**Трёхмерные тальвеги.** Если у линии тальвега есть отметки вершин, они становятся жёсткими узлами, а не только условием падения: промер по руслу перестаёт быть подсказкой и начинает задавать дно. Отметки при этом один раз приводятся к падающим вниз по течению, потому что измерения шумят, и вершина, ушедшая вверх, спорила бы с принуждением падения каждую итерацию. Правка идёт только вниз, наибольшая её величина печатается в журнал. Линия без отметок ведёт себя как прежде, разнотипный слой разбирается по объектам.\n\n**Вес измеренных отметок** решает спор в общей ячейке. Точки высот и вершины уплотнённых изолиний идут одним потоком жёстких узлов, и при совпадении в ячейке простое среднее уравнивает их в правах. Измеренная отметка снята прибором, а вершина горизонтали нарисована по линии сечения и уклоняется на пределах половины сечения, поэтому вес больше единицы отдаёт ячейку измерению. Единица (по умолчанию) сохраняет прежнее поведение, старые прогоны воспроизводятся.\n\n**Граница области построения** ограничивает поверхность полигоном, как outer boundary в САПР. Маска накладывается после интерполяции, а не отсечением входа: данные снаружи продолжают формировать поверхность у самой границы, и края не заворачиваются. Слой границы можно подавать в любой системе координат, геометрия переводится сама.': 'The **water edge** works in two modes. A plane fills the whole area inside with a flat elevation - that is the mirror of a lake or a pond. A contour fixes only the shore line, while the surface inside stays with the points and the structural lines: this is how a channel with a bed is built from soundings and a thalweg. Switched by the **Water edge as a plane** checkbox.\n\nA contour water edge and **Fill depressions at the end** work against each other: the first builds a channel, the second levels it out, because for the filling a channel is an ordinary pit. The filling is needed for the relief of the land so that water runs off, and it is harmful to a DEM with a bed. With such a combination the tool warns in the log.\n\nBuilds terrain from vector data by multigrid interpolation from a coarse grid to a fine one, in the spirit of ANUDEM. Every input type works as its own constraint: elevation points and contours are hard nodes, streamlines force a downstream drop (line vertices must run downstream, OSM watercourses and the output of tool 2.06 fit as is), cliffs are smoothing barriers with independent surfaces on both sides, the water edge follows three priorities per feature: a polygon with three-dimensional vertices gets its edge interpolated from their heights and sloped along the channel, a polygon with an elevation field is held as a plane, and without either the level is taken from the shore minimum. Mixed feature types in one layer are handled each by its own branch. At least one layer with elevations is required: points or contours. All layers are brought to the CRS of the first given layer, which must be metric. Final depression filling by checkbox. Output: a float32 GeoTIFF, elevations in meters, nodata -9999, the layer in the Topography group.\n\n**Three-dimensional thalwegs.** When a thalweg line carries vertex elevations, they become hard nodes rather than merely a fall condition: a survey along the channel stops being a hint and starts setting the bed. The elevations are brought once to a downstream fall, because measurements are noisy and a vertex that goes uphill would fight the fall enforcement on every iteration. The correction only goes downwards and its largest value is printed to the log. A line without elevations behaves as before, and a mixed layer is handled object by object.\n\nThe **The weight of measured elevations** settles the dispute inside a shared cell. Spot heights and the vertices of densified contours go as one stream of hard nodes, and when they land in the same cell a plain average puts them on an equal footing. A measured elevation was taken with an instrument, while a contour vertex was drawn along a section line and errs within half a contour interval, so a weight above one gives the cell to the measurement. One (the default) keeps the previous behaviour and old runs reproduce.\n\n**Boundary of the build area** limits the surface to a polygon, like the outer boundary in a CAD system. The mask is applied after the interpolation rather than by clipping the input: data outside keep shaping the surface right at the boundary, so the edges do not curl. The boundary layer may be supplied in any coordinate system, the geometry is transformed automatically.',
    'Готовит ЦМР к анализу двумя независимыми модификациями, каждая своим флажком. Сглаживание рельефа (FPDEMS, метод Линдсея и др. 2019) убирает избыточную шероховатость спутниковых моделей, но сохраняет бровки, стенки террас и берега рек: работает не с высотами, а с полем нормалей поверхности, поэтому не заваливает структурные линии, в отличие от среднего и гауссова фильтров. Порог различия нормалей меньше - агрессивнее сохранение граней. Заполнение понижений (Планшона-Дарбу) поднимает ложные ямы, чтобы поток не останавливался. Epsilon задаёт минимальный уклон на плоскостях: ноль поднимает только ямы до слива, положительное строит сквозной уклон, нужный для D8. Порядок: сначала сглаживание, потом заполнение. Выход: GeoTIFF float32, слой в группе Топография.': 'Prepares a DEM for analysis with two independent modifications, each by its own checkbox. Terrain smoothing (FPDEMS, Lindsay et al. 2019) removes excessive roughness of satellite models but preserves edges, terrace walls and river banks: it works on the field of surface normals rather than heights, so it does not flatten structural lines, unlike mean and Gaussian filters. A smaller normals-difference threshold preserves edges more aggressively. Depression filling (Planchon-Darboux) raises spurious pits so flow does not stop. Epsilon sets the minimum slope on flats: zero raises pits to the spill only, positive builds a through slope needed for D8. Order: smoothing first, then filling. Output: a float32 GeoTIFF, the layer in the Topography group.',

}
