Воспользовался - всё работает!
На выходе лучше указать, что возраст выдаётся в годах - TMRCA (years).
Если кому-то горит указывать возраст в поколениях, то можно выставить единицу вместо умолчательных 33.0
Но ещё лучше предусмотреть выбиралку - в годах или поколениях, и потом уже пусть выбирает средний возраст (25...33)
Отлично! Не хочу перегружать табличку, так что пометку про то, что ВБОП/TMRCA дан в годах, вынес в самый верх, где идет описание возможностей программы.
Думаю, что переключалка годы/поколения это тоже переусложнение: Ваш способ с задачей возраста =1 для получения поколений - это самое изящное решение проблемы

Как оказалось, программулина может обработать очень много строк (хоть таблицу из 111-маркерных гаплотипов на 1 Гб), а вот отрисовка результата займет много времени, т.к. браузер и машина пользователя это бутылочное горлышко. Едва ли пользователю интересны все 10кк результатов, так что я добавил возможность ограничить количество строк в выдаче.

Дальнейшие планы:
* сделать обработку делеций: если маркер эталона/образца имеет делецию (маркер = 0), то присваиваем ему значение образца/эталона + 1, что даст разницу при расчетах в 1 шаг. Если маркер имеет делецию и у эталона, и у образца, то ничего не делаем.
* исключать из обработки маркеры, которых нет у эталона: если для эталона заданы 37 маркеров, а для некоторых образцов аж 67 маркеров, то лишние 30 надо отбросить и не учитывать. Сейчас программу от такого пучит.