АвторТема: Программа TNT.  (Прочитано 97792 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Semargl

  • "El sueño de la razón produce monstruos" ©
  • Сообщений: 5994
  • Страна: ru
  • Рейтинг +4191/-5
  • www.semargl.me
    • www.semargl.me
  • Y-ДНК: R1a [CTS3402+]
  • мтДНК: U4a2g
Re: Программа TNT.
« Ответ #360 : 26 Март 2012, 17:44:02 »
Цитировать
Вставляем следующие строки в конец .tnt-файл для авторасчёта и сохранения первого (с номером 0) дерева.

Цитировать
taxname=;
xmult;
log my_log_file.log;
tsave *my_tree_file.tree;
ttags=;
rho 0;
save *;
log /;
tsave /;
Для того чтоб данная конструкция отработала успешно, в скрипте Овода, строка 'ttags -;' должна быть закомментирована (/* */) или удалена.

Иначе вызов макроса rho 0; посчитает возраст, выведет полученное дерево в текстовый буфер, и благополучно удалит все полученные теги.
Комманда ttags -; удаляет все теги в дереве.
То есть комманда save *; ругнется "No tags to save".

Оффлайн kaa76

  • Сообщений: 631
  • Страна: ru
  • Рейтинг +214/-0
  • Y-ДНК: R-L1029
  • мтДНК: U5a2a2
Re: Программа TNT.
« Ответ #361 : 26 Март 2012, 17:50:35 »
Цитировать
Вставляем следующие строки в конец .tnt-файл для авторасчёта и сохранения первого (с номером 0) дерева.

Цитировать
taxname=;
xmult;
log my_log_file.log;
tsave *my_tree_file.tree;
ttags=;
rho 0;
save *;
log /;
tsave /;
Для того чтоб данная конструкция отработала успешно, в скрипте Овода, строка 'ttags -;' должна быть закомментирована (/* */) или удалена.

Иначе вызов макроса rho 0; посчитает возраст, выведет полученное дерево в текстовый буфер, и благополучно удалит все полученные теги.
Комманда ttags -; удаляет все теги в дереве.
То есть комманда save *; ругнется "No tags to save".
Так я в инструкции и дал ссылку на такой скрипт, может и не последней версии, но он работает.

Оффлайн Semargl

  • "El sueño de la razón produce monstruos" ©
  • Сообщений: 5994
  • Страна: ru
  • Рейтинг +4191/-5
  • www.semargl.me
    • www.semargl.me
  • Y-ДНК: R1a [CTS3402+]
  • мтДНК: U4a2g
Re: Программа TNT.
« Ответ #362 : 26 Март 2012, 18:10:13 »
но он работает.
Он не может работать. Единственно могу предположить, что в виндовой версии программы подавляется вывод ошибок?
Вот что получается у меня, если я не изменю скрипт подсчета rho:
Цитировать
Tree 0
     ,-0 kyrgys
|0/33|    ,-3 ns
     `1/33|    ,-8 neur
          `1/33--0 malopol
Done! See tree ages above - move vertical bar up, or horizontal - right
Report is ON
Again reading from test.tnt
No tags to save                                                               
Error reading line 30 of test.tnt

Попробуй открыть полученный файл с деревом (my_tree_file.tree) в текстовом редакторе, и посмотреть, сохранены ли теги с возрастом?

Оффлайн kaa76

  • Сообщений: 631
  • Страна: ru
  • Рейтинг +214/-0
  • Y-ДНК: R-L1029
  • мтДНК: U5a2a2
Re: Программа TNT.
« Ответ #363 : 26 Март 2012, 18:21:16 »
Попробуй открыть полученный файл с деревом (my_tree_file.tree) в текстовом редакторе, и посмотреть, сохранены ли теги с возрастом?
Есть там возраст, только он в версии без веков:

Оффлайн Semargl

  • "El sueño de la razón produce monstruos" ©
  • Сообщений: 5994
  • Страна: ru
  • Рейтинг +4191/-5
  • www.semargl.me
    • www.semargl.me
  • Y-ДНК: R1a [CTS3402+]
  • мтДНК: U4a2g
Re: Программа TNT.
« Ответ #364 : 26 Март 2012, 18:57:58 »
Есть там возраст, только он в версии без веков
Можно мне в личку кинуть используемую версию скрипта для подсчета rho?

Оффлайн Alexander

  • Сообщений: 650
  • Рейтинг +73/-1
  • Y-ДНК: J2b
Re: Программа TNT.
« Ответ #365 : 26 Март 2012, 19:42:55 »
Вышла новая версия программы TNT 1.1 от 23.03.2012.
Спасибо, скачал. Новые фишки не употреблял. Остальное всё так же, работает чётко.

Замечания по инструкции:
Для продвинутых - нормально.
Но для менее продвинутых, я бы рекомендовал не заморачиваться многократными преобразованиями форматов при подготовке исходного .tnt файла. А воспользоваться банальной эксель-таблицей. с помощью которой следует привести текст исходника в блокноте в вид:

xread
67 6
Modal     1211112142124232221124221222211331141100111102225110003113120101112
101     1210113222102132121132121222321431141100111101213120003103220102111
102     1210112232112132121122111222321431141100111101214120003113220103111
103     1210112232112131121122121222321431141100111101213120003113220103110
104     1210111222122122121122121222321241141100111101213120003113220103112
105     1211112242122133021120141222221321131100111101215130001113220102112
;
ccode +0.66;

- который вы и сохраните в формате .tnt в папку с программой. И далее по тексту.
Левые столбцы - обозначения гаплотипов, потом любой пробел, потом разность между значением аллеля и минимумом в этом маркере.
Вместо модала авторитеты рекомендуют взять ближайший посторонний (вставить на первое место в списке).
Веса у продвинутых - у каждого свои. Для иных рекомендую в первом приближении делать без весов, т.е. равновесно (см. образец).
В этом приёме есть неудобство - нужно сделать себе эксель-"рыбы" под каждое число маркеров. Зато тогда дерево строится мгновенно.

Есть ещё вопрос по экпорту - как запустить в FigTree дерево Овода (т.е. с возрастами)?

Оффлайн Semargl

  • "El sueño de la razón produce monstruos" ©
  • Сообщений: 5994
  • Страна: ru
  • Рейтинг +4191/-5
  • www.semargl.me
    • www.semargl.me
  • Y-ДНК: R1a [CTS3402+]
  • мтДНК: U4a2g
Re: Программа TNT.
« Ответ #366 : 26 Март 2012, 19:49:55 »
Есть там возраст, только он в версии без веков
Можно мне в личку кинуть используемую версию скрипта для подсчета rho?
Все понятно. В старой версии скрипта, команда ttags-; отсутствовала. Поэтому скрипт отрабатывал без ошибок.
В новой весии скрипта, для правильного сохранения тегов с возрастом, в файл с деревом, необходимо, закомментировать команду ttags-;

Оффлайн Semargl

  • "El sueño de la razón produce monstruos" ©
  • Сообщений: 5994
  • Страна: ru
  • Рейтинг +4191/-5
  • www.semargl.me
    • www.semargl.me
  • Y-ДНК: R1a [CTS3402+]
  • мтДНК: U4a2g
Re: Программа TNT.
« Ответ #367 : 26 Март 2012, 20:29:58 »
Есть ещё вопрос по экпорту - как запустить в FigTree дерево Овода (т.е. с возрастами)?
Если Вы имеете ввиду как конвертировать выходной файл, с полученными тегами, в nexus формат для просмотра в FigTree, то я когда-то высылал Вам свой самописный скрипт, предназначенный для этого.
Вот новая версия того скрипта:
#!/usr/bin/python
__author__ = 'Semargl'

import re, sys, os
def tntfile2newick(fn):
    print fn
    fh = open(fn, 'r')
    treeslist = []
    for line in fh:
        if line.startswith("("):
            pass
        else:
            continue
        tntstr = line
        tntstr2 = tntstr2newick(tntstr)
        treeslist.append(tntstr2)
    outfn = fn + ".tree"
    outfh = open(outfn, 'w')
    outfh.write('#NEXUS\nbegin trees;\n')
    cnt = 1
    for newickstr in treeslist:
        outfh.write('\ttree tree_%s = [&R]\n%s\n' % (cnt, newickstr))
        cnt += 1
    outfh.write('end;\n')
    outfh.close()
    fh.close()
    print outfn

def tntstr2newick(tntstr):
    tntstr = re.sub(r'\s', ',', tntstr)
    tntstr = re.sub(r'\)\(', '),(', tntstr)
    tntstr = re.sub(r',\)', ')', tntstr)
    tntstr = re.sub(r'=', '', tntstr)
    tntstr = re.sub(r'__', '_', tntstr)
    tntstr = re.sub(r'/', '_', tntstr)
    tntstr = re.sub(r'\*', '', tntstr)
    tntstr = re.sub(r',,$', ';', tntstr)
    tntstr = re.sub(r',;,', ';', tntstr)
    r1=re.compile(r',(?P<r1>\d+)(?P<r2>,|\))')
    tntstr = r1.sub('[&!name="\g<r1>"]\g<r2>', tntstr)
    return tntstr
file_name = sys.argv[1]
tntfile2newick(file_name)
Написан для себя, поэтому есть некоторые недоделки :)
После того как скрипт сконвертирует tnt-дерево в nexsus-дерево, надо открыть полученное дерево в текстовом редакторе (блокноте), и проконтролировать чтоб после каждого полученного дерева (строки) шла точка с запятой. В зависимости от некоторых данных, скрипт иногда ставит в конец строки просто запятую.
Меня это не особо напрягает, а дописать скрипт лень)
Но обещаю, что в самое ближайшее будущее, допишу скрипт, и замыкающая точка с запятой будет стоять там, где ей положено. :)

В этой версии, я исправил ошибки официального скрипта, взятого с сайта разработчиков программы TNT.
Теперь если получается больше одного дерева в одном файле, нет проблем с сохранением результатов работы в FigTree.
Ну и исправены некоторые другие ошибки.

Скрипт написан на питоне, поэтому для запуска скрипта необходимо наличие питона)
При запуске скрипта первым аргументом передаем ему путь к файлу с tnt-деревом, которое мы хотим переконвертировать в nexus-дерево.
« Последнее редактирование: 26 Март 2012, 20:48:36 от Semargl »

Оффлайн Semargl

  • "El sueño de la razón produce monstruos" ©
  • Сообщений: 5994
  • Страна: ru
  • Рейтинг +4191/-5
  • www.semargl.me
    • www.semargl.me
  • Y-ДНК: R1a [CTS3402+]
  • мтДНК: U4a2g
Re: Программа TNT.
« Ответ #368 : 27 Март 2012, 08:41:40 »
Спасибо kaa76, он обратил мое внимание на то, что приведенный выше скрипт, для конвертации деревьев из tnt в newick, работает в питоне версии 2.X, но не работает в версии питона 3.X.
Привожу новую версию, которая одинаково работает и во второй версии питона, и в третьей:
#!/usr/bin/python
__author__ = 'Semargl'

import re, sys, os
def tntfile2newick(fn):
    print(fn)
    fh = open(fn, 'r')
    treeslist = []
    for line in fh:
        if line.startswith("("):
            pass
        else:
            continue
        tntstr = line
        tntstr2 = tntstr2newick(tntstr)
        treeslist.append(tntstr2)
    outfn = fn + ".tree"
    outfh = open(outfn, 'w')
    outfh.write('#NEXUS\nbegin trees;\n')
    cnt = 1
    for newickstr in treeslist:
        outfh.write('\ttree tree_%s = [&R]\n%s\n' % (cnt, newickstr))
        cnt += 1
    outfh.write('end;\n')
    outfh.close()
    fh.close()
    print(outfn)

def tntstr2newick(tntstr):
    tntstr = re.sub(r'\s', ',', tntstr)
    tntstr = re.sub(r'\)\(', '),(', tntstr)
    tntstr = re.sub(r',\)', ')', tntstr)
    tntstr = re.sub(r'=', '', tntstr)
    tntstr = re.sub(r'__', '_', tntstr)
    r2=re.compile(r'(?P<r3>\d+)/(?P<r4>\d+)')
    tntstr = re.sub(r'\*', '', tntstr)
    tntstr = re.sub(r',,$', ';', tntstr)
    tntstr = re.sub(r',;,', ';', tntstr)
    r1=re.compile(r',(?P<r1>\d+)(?P<r2>,|\))')
    tntstr = r1.sub('[&!name="\g<r1>"]\g<r2>', tntstr)
    r2=re.compile(r'(?P<r3>\d+\/\d+)')
    return tntstr
file_name = sys.argv[1]
tntfile2newick(file_name)

Оффлайн Alexander

  • Сообщений: 650
  • Рейтинг +73/-1
  • Y-ДНК: J2b
Re: Программа TNT.
« Ответ #369 : 27 Март 2012, 20:49:22 »
При запуске скрипта первым аргументом передаем ему путь к файлу с tnt-деревом, которое мы хотим переконвертировать в nexus-дерево.
После того как скрипт сконвертирует tnt-дерево в nexsus-дерево, надо открыть полученное дерево в текстовом редакторе (блокноте), и проконтролировать чтоб после каждого полученного дерева (строки) шла точка с запятой. В зависимости от некоторых данных, скрипт иногда ставит в конец строки просто запятую.
Спасибо. Но так как я не настолько продвинут, то просьба немного прояснить. - Понял так: мы сохраняем ТНТ дерево где-то в файле. Потом нужно скрипт запустить - это как? Или мы даём ему имя и впиываем имя в комстроку ТНТ? Где первый аргумент, в котором нужно указать путь к файлу? И где получаем нексус-результат - в отдельном файле или где-то в буфере ТНТ?

Оффлайн Semargl

  • "El sueño de la razón produce monstruos" ©
  • Сообщений: 5994
  • Страна: ru
  • Рейтинг +4191/-5
  • www.semargl.me
    • www.semargl.me
  • Y-ДНК: R1a [CTS3402+]
  • мтДНК: U4a2g
Re: Программа TNT.
« Ответ #370 : 27 Март 2012, 21:13:13 »
При запуске скрипта первым аргументом передаем ему путь к файлу с tnt-деревом, которое мы хотим переконвертировать в nexus-дерево.
После того как скрипт сконвертирует tnt-дерево в nexsus-дерево, надо открыть полученное дерево в текстовом редакторе (блокноте), и проконтролировать чтоб после каждого полученного дерева (строки) шла точка с запятой. В зависимости от некоторых данных, скрипт иногда ставит в конец строки просто запятую.
Спасибо. Но так как я не настолько продвинут, то просьба немного прояснить. - Понял так: мы сохраняем ТНТ дерево где-то в файле. Потом нужно скрипт запустить - это как? Или мы даём ему имя и впиываем имя в комстроку ТНТ? Где первый аргумент, в котором нужно указать путь к файлу? И где получаем нексус-результат - в отдельном файле или где-то в буфере ТНТ?
Завтра постараюсь ответить.

Оффлайн Alexander

  • Сообщений: 650
  • Рейтинг +73/-1
  • Y-ДНК: J2b
Re: Программа TNT.
« Ответ #371 : 28 Март 2012, 11:52:04 »
Веса у продвинутых - у каждого свои. Для иных рекомендую в первом приближении делать без весов, т.е. равновесно (см. образец).
Уважаемые посетители ТНТ-темы, заинтересованные в правильных весах.
Предлагаю вам посетить открытую Nimissin тему "Калибровка скоростей мутаций" и, по возможности, принять участие в обсуждении. Имеет место тенденция в пересмотре частот по по современным парам отец-сын. Как пример, приведу частоты (старые по Вертнеру) для DYS413b = 0,00244 и новые 0,0003. Разница довольно приличная, отразится, естественно, на весах. А мнение авторитетов филогении было бы очень ценно.

Оффлайн mouglley

  • ...
  • Сообщений: 7105
  • Страна: hr
  • Рейтинг +434/-7
  • Я знаю, что познаю всё.
    • Записки Маугли
  • Y-ДНК: N1c1-L1025
  • мтДНК: J1c3
Re: Программа TNT.
« Ответ #372 : 28 Март 2012, 14:07:32 »
Не думаю, что данные скорости, предназначенные для расчёта возраста какой-то группы гаплотипов в таблице могут оказать какое-то влияние на расчеры возрастов филогеническими программами.

В филогении берутся несколько групп гаплотипов у которых есть реальный или легендарный предок.

Прогоняется расчёт с любыми скоростями.
А затем деление-умножение - и вот она скорость мутаций для данной конркретной гаплогруппы.

То есть полученные возраста приводятся к реальным датам.

И, наверное, будет последним делом поменять такую скорость на какую-то иную.

Оффлайн Alexander

  • Сообщений: 650
  • Рейтинг +73/-1
  • Y-ДНК: J2b
Re: Программа TNT.
« Ответ #373 : 28 Март 2012, 17:46:28 »
Прогоняется расчёт с любыми скоростями.
А затем деление-умножение - и вот она скорость мутаций для данной конркретной гаплогруппы.
То есть, прогоняется, например, с весами, равными 1, затем подсчитывается средняя скорость мутаций? Зачем тогда разные веса к различным маркерам?

Оффлайн mouglley

  • ...
  • Сообщений: 7105
  • Страна: hr
  • Рейтинг +434/-7
  • Я знаю, что познаю всё.
    • Записки Маугли
  • Y-ДНК: N1c1-L1025
  • мтДНК: J1c3
Re: Программа TNT.
« Ответ #374 : 28 Март 2012, 17:56:39 »
Так мы про веса, или про скорости?
Если про скорости, то моё мнение выше.
Если про веса - вопрос индивидуальный для филогенистов каждой группы.

Для N1c1 они необходимы.

 

© 2007 Молекулярная Генеалогия (МолГен)

Внимание! Все сообщения отражают только мнения их авторов.
Все права на материалы принадлежат их авторам (владельцам) и сетевым изданиям, с которых они взяты.