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

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

Оффлайн kaa76

  • Сообщений: 663
  • Страна: ru
  • Рейтинг +214/-0
  • Y-ДНК: R-L1029
  • мтДНК: U5a2a2
Re: Программа TNT.
« Ответ #390 : 07 Апрель 2012, 23:36:56 »
Вопросы по инструкции.Не совсем понятно формирование исходника в Excel.
Для Phylip я формировал таблицу типа
217   13   24   13   10   16   18   11   12   12   13   11   31   15   9   9   11
5029   13   26   13   10   16   17   11   12   13   13   11   30   15   9   9   11
5231   14   25   13   10   16   18   11   12   11   13   11   30   16   9   9   11
13865   14   24   13   10   16   18   11   12   11   13   11   29   15   8   9   11
14529   13   24   13   10   16   19   11   12   11   12   12   29   16   9   9   11
16961   13   24   13   10   16   17   11   12   12   13   11   31   15   9   9   11
17034   14   24   13   10   16   16   11   12   12   13   11   30   16   9   9   11
17216   13   22   14   10   16   17   11   12   12   14   11   31   16   9   9   11

В инструкции к TNTнаписано:
4.придаём уникальность именам гаплотипов:
I.вставляем новый третий столбец
II.в ячейке B2 даём ему формулу =СЦЕПИТЬ(B20;»_»;A20) и распространяем до последнего гаплотипа
Непонятно зачем вставляется новый третий столбец? B2 это ячейка второго, а не третьего столбца и почему именно B2, а не B1?
Зачем ей присваивается это формула и почему она относится  к ячейкам именно 20 строки?

Далее
5.уменьшаем значение аллели в случае превышения максимального значения над 32, т.е. Значение=Значение-Минимум+1
А что такое минимум?


Я писал, что делал на примере базы Семаргла, а там первые 2 столбца идентифицируют гаплотип по разному, поэтому и делал через подчеркивание, чтобы, по возможности, сначала шла фамилия, а потом номер гаплотипа, т.к. встречаются одинаковые фамилии, а выборка должна быть обязательно уникальной.


Больше 32 быть не может, поэтому для таких значений вычисляем минимум и уменьшаем на него каждое значение аллели в таком столбце.


А 20-я строка было просто для примера.

Оффлайн wbull

  • Сообщений: 421
  • Страна: ru
  • Рейтинг +44/-0
    • Rickman Surname Project
  • Y-ДНК: E1b1b1a1, Cluster : E-L618* , Geno 2.0: E-CTC10912
  • мтДНК: U5a1g
Re: Программа TNT.
« Ответ #391 : 08 Апрель 2012, 13:30:23 »

Я писал, что делал на примере базы Семаргла, а там первые 2 столбца идентифицируют гаплотип по разному, поэтому и делал через подчеркивание, чтобы, по возможности, сначала шла фамилия, а потом номер гаплотипа, т.к. встречаются одинаковые фамилии, а выборка должна быть обязательно уникальной.


Больше 32 быть не может, поэтому для таких значений вычисляем минимум и уменьшаем на него каждое значение аллели в таком столбце.


А 20-я строка было просто для примера.
[/quote]
Большое спасибо. Теперь стало понятно.
Но теперь вопрос по следующему пункту:
В большое поле Paste haplotype rows here (without marker headers) вставляем скопированные из Excel столбцы от C до BR (речь про 67 Y-STR локусов).
Те, как я понял, вставляются только значения аллелей. А как же идентификаторы?

Оффлайн wbull

  • Сообщений: 421
  • Страна: ru
  • Рейтинг +44/-0
    • Rickman Surname Project
  • Y-ДНК: E1b1b1a1, Cluster : E-L618* , Geno 2.0: E-CTC10912
  • мтДНК: U5a1g
Re: Программа TNT.
« Ответ #392 : 09 Апрель 2012, 13:50:04 »
В инструкции не работает ссылка на конвертор Лифанова. >:(

Оффлайн Semargl

  • "El sueño de la razón produce monstruos" ©
  • Сообщений: 5213
  • Страна: hr
  • Рейтинг +2480/-5
  • www.semargl.me
    • www.semargl.me
  • Y-ДНК: R1a [CTS3402+]
  • мтДНК: U4a2g
Re: Программа TNT.
« Ответ #393 : 09 Апрель 2012, 14:29:00 »
В инструкции не работает ссылка на конвертор Лифанова. >:(

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

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

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

То есть, все эти операции легко можно сделать в экселе, без лишних преобразований между форматами.
Или с помощью скрипта.
Скрипт для конвертации из csv в формат tnt, я когда-то написал. Попробую поискать на компе, в свалке хлама, если найду - могу поделиться)

Оффлайн wbull

  • Сообщений: 421
  • Страна: ru
  • Рейтинг +44/-0
    • Rickman Surname Project
  • Y-ДНК: E1b1b1a1, Cluster : E-L618* , Geno 2.0: E-CTC10912
  • мтДНК: U5a1g
Re: Программа TNT.
« Ответ #394 : 09 Апрель 2012, 14:56:39 »
В инструкции не работает ссылка на конвертор Лифанова. >:(

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

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

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

То есть, все эти операции легко можно сделать в экселе, без лишних преобразований между форматами.
Или с помощью скрипта.
Скрипт для конвертации из csv в формат tnt, я когда-то написал. Попробую поискать на компе, в свалке хлама, если найду - могу поделиться)
Спасибо за ответ. Но мне хотелось бы работать с большими выборками и пересчитывать все вручную как то не вдохновляет. Эксель я знаю постольку поскольку и не очень пока понимаю как это сделать средствами эксель. Те нужно в столбце аллелей определить min и затем переписать в другой столбец  ячейка N нового столбца=ячейка N старого столбца  -min и так для всех столбцов гаплотипа. Или это делается как то по другому прямо в текущей столбец?
За скрипт буду очень благодарен.

Оффлайн Alexander

  • Сообщений: 669
  • Рейтинг +73/-0
  • Y-ДНК: J2b
Re: Программа TNT.
« Ответ #395 : 09 Апрель 2012, 21:17:15 »
мне хотелось бы работать с большими выборками и пересчитывать все вручную как то не вдохновляет. Эксель я знаю постольку поскольку и не очень пока понимаю как это сделать средствами эксель.
Могу предложить эксель-рыбу конвертера . Она расчитана на 155 Hp (67 маркерных). В пост не вкладывается (2 Мб), пришлось разместить на ifolder,
поэтому скачать можете ОТСЮДА.
Для примера там установлена выборка на 15 гаплотипов*67 маркеров.
Копируете свою 67 маркерную выборку (любых до 155 шт. размеров, желательно из эксель) и вставляете на жёлтый фон таблицы (копи-паст) - на место тестовой выборки_15_67. Копировать можно вместе с идентификаторами (предусмотрен 1 столбец для них). Старую выборку можно не удалять а вставлять прямо на неё.
Ниже жёлтого поля - вспомогательные таблицы с формулами, туда без особой нужды не суйтесь.
Сначала там идут три строки - в них формируются модальное, среднеарифметическое или медианное значения для Вашей выборки. Выбираете, какое нравится - у меня там МОДАЛ и он автоматом копируется в первую строку таблицы. Но по желанию в эту первую строку вставляете, что угодно, хоть "постороннего". Но это получится не автоматом (как для модала), а придётся делать ещё один копи-паст на этот первый гаплотип.
Ещё ниже - вспомогательная таблица из разностей и с амперсантом (конкатенация).
 А вот справа от неё - голубым фоном отмечен столбец (шириной в 1 ячейку), который и есть результат преобразования. Вам придётся его скопировать (в данном примере копируются только 15 первых клеточек).
Скопированный столбик вставляете в Блокнот-файл вида - вышеприведённого. (этот файл можно сделать "рыбой" и в него вставлять свои исходники).  Замечание - вставляете только в поле с числами выборки, шапку и окончание оставляете, как есть (или дописываете там же в блокноте, как Вам угодно, но вручную). В шапке придётся изменить число гаплотипов на 1(модал)+15(гаплотипов)=16.
Сохраняете его в файл с программой ТНТ с расширением .tnt
Всё, можете вызывать его с помощью меню и работать.
Если при вызове ТНТ начинает ругаться, что-то у Вас не то. Проверяйте Блокнот-файл на соответствие рыбе.

Можно увеличить таблицу на большее число гаплотипов (вставьте нужное число строк и откопируйте формулы на увеличенное поле).
Аналогично увеличивается число маркеров.
Уменьшение того и другого производится ДЕЛИТОМ. Если хотите сделать таблицу компактнее, то "УДАЛИТЬ" .Лучше это сделать один раз, и иметь несколько нужных "рыб-таблиц".
Замечание - после вставок-удалений строк всегда нужно проверять адресацию во вспомогательных таблицах, так, чтобы соответствующие строки совпадали по адресам.

Если Вам удастся скачать мой конвертер и прогнать тест, то в буфере ТНТ получите следующее деревце (установки по умолчанию, кроме галочки в опции "collaps tree after search").


Оффлайн wbull

  • Сообщений: 421
  • Страна: ru
  • Рейтинг +44/-0
    • Rickman Surname Project
  • Y-ДНК: E1b1b1a1, Cluster : E-L618* , Geno 2.0: E-CTC10912
  • мтДНК: U5a1g
Re: Программа TNT.
« Ответ #396 : 09 Апрель 2012, 22:58:36 »
мне хотелось бы работать с большими выборками и пересчитывать все вручную как то не вдохновляет. Эксель я знаю постольку поскольку и не очень пока понимаю как это сделать средствами эксель.
Могу предложить эксель-рыбу конвертера .
Большое спасибо. Скачал. Завтра попробою с ней поработать.

Оффлайн Semargl

  • "El sueño de la razón produce monstruos" ©
  • Сообщений: 5213
  • Страна: hr
  • Рейтинг +2480/-5
  • www.semargl.me
    • www.semargl.me
  • Y-ДНК: R1a [CTS3402+]
  • мтДНК: U4a2g
Re: Программа TNT.
« Ответ #397 : 10 Апрель 2012, 10:10:43 »
За скрипт буду очень благодарен.
По экселю не подскажу, бо для меня сие есть "темный лес".

Старый скрипт-конвертер csv2tnt не нашел. Пришлось набросать новый.
Не судите строго по красоте кода - главное правильно работает)

Что необходимо для использования скрипта?
1) Python. Для виндовс: x86 или 64-бит
2) Библиотека научных вычислений для питона - numpy (версия только для вин32)

Как использовать скрипт?
1) скрипт должен лежать в том же каталоге, где находится файл csv, который надо преобразовать для работы с TNT
2) Допустим, наш рабочий каталог, тот в котором находятся скрипт и csv-файл, находится по адресу C:\blablabla
в этом случае, переходим в рабочий каталог с помощью команды: cd C:\blablabla
3) Запускаем сам скрипт:
python csv2tnt.py myfile.csv 67
Разберем по порядку:
python - вызов интерпретатора
csv2tnt.py - передача питону названия скрипта для выполнения
myfile.csv - передача скрипту названия csv-файла для обработки
67 - количество маркёров, которые будут обработаны (число не должно превышать реальное число маркеров имеющихся в файле)

В результате работы скрипта, в нашем рабочем каталоге появится новый файл, с расширением tnt. Он уже готов для загрузки в программу TNT. Но можно в него дописать веса, синонимы маркеров и прочее.

Теперь о формате входного CSV-файла:
* Он не должен содержать никаких заголовков. Только данные, начиная с первой ячейки, первой строки.
* В качестве ограничителей ячеек, должен быть использован знак ';'
* В первом столбце должен быть номер кит (или другой уникальный идентификатор).
* Второй столбец содержит имена.
* Начиная с третьего столбца, и далее, вводятся маркёры. Количество маркеров, определяет сам пользователь. Следует оговориться, что количество маркеров, для всех гаплотипов, должно по возможности быть одинаковым. Не должно быть микса из 12-ти, 37-ми, 67-ми маркерных гаплотипов. В поля, предназначенные для ввода значений маркеров, следует вводить только числовые значения, при отсутствии оных - поле оставляем пустым!

Как-то так. Будут вопросы - постараюсь ответить.

Собственно скрипт:
__author__ = 'Semargl'
# -*- coding: utf-8 -*-
import csv, sys
from numpy import *

dict_translate = {0:'0',1:'1',2:'2',3:'3',4:'4',5:'5',6:'6',7:'7',8:'8',9:'9',10:'A',11:'B',12:'C',13:'D',14:'E',15:'F',16:'G',17:'H',18:'I',19:'J',20:'K',21:'L',22:'M',23:'N',24:'O',25:'P',26:'Q',27:'R',28:'S',29:'T',30:'U',31:'V',99:'?',98:'?'}
file_name = sys.argv[1]
num_col = int(sys.argv[2])
list_tax = []
list_ht = []

with open(file_name, 'r') as f:
   reader = csv.reader(f, delimiter = ';')
   for row in reader:
       taxon = '%s_%s ' % (row[1], row[0])
       taxon = taxon[:20]
       list_dys = []
       for i in range(2,num_col+2):
           if row[i] and row[i] != '0':
              list_dys.append(row[i])
           else:
               list_dys.append('99')
       list_tax.append(taxon)
       list_ht.append(list_dys)

ar = array(list_ht, dtype=int32)
num_tax = ar.shape[0]
num_column = ar.shape[1]
for i in range(num_column):
    column = ar[:,i]
    min_in_column = column.min()
    cnt = 0
    for value in column:
        column[cnt] = value - min_in_column
        cnt+=1
    ar[:,i] = column

out_file_name = '%s.tnt' % (file_name,)
f_out = open(out_file_name, 'w')
head = 'nstate 32\nxread %s %s\n' % (num_column, num_tax)
f_out.write(head)
cnt = 0
for row in ar:
    s = list_tax[cnt]
    for value in row:
        try:
            s += '%s' % (dict_translate[value])
        except KeyError:
            s += '?'
    s += '\n'
    cnt += 1
    f_out.write(s)

Оффлайн wbull

  • Сообщений: 421
  • Страна: ru
  • Рейтинг +44/-0
    • Rickman Surname Project
  • Y-ДНК: E1b1b1a1, Cluster : E-L618* , Geno 2.0: E-CTC10912
  • мтДНК: U5a1g
Re: Программа TNT.
« Ответ #398 : 10 Апрель 2012, 18:37:04 »
За скрипт буду очень благодарен.
По экселю не подскажу, бо для меня сие есть "темный лес".

Старый скрипт-конвертер csv2tnt не нашел. Пришлось набросать новый.
Большое спасибо, буду осваивать.
Вопрос по tnt файлу.
Если вставлять веса. Можно ли имеющиеся для 67 маркеров сократить до 37 и поменять начало типа
ccode +[0.36 /54 0 /50 1 /51 2 /53 3....?
Если можно, то куда правильно вставлять перед ccode +0.36; или вместо?
Я загрузил TNT для Windows, но в директории сидят 2 архива GenBank-to-TNT и tnt_scripts. Надо ли их открывать, и если да, то куда. Сама программа работает и без них.

Оффлайн Semargl

  • "El sueño de la razón produce monstruos" ©
  • Сообщений: 5213
  • Страна: hr
  • Рейтинг +2480/-5
  • www.semargl.me
    • www.semargl.me
  • Y-ДНК: R1a [CTS3402+]
  • мтДНК: U4a2g
Re: Программа TNT.
« Ответ #399 : 10 Апрель 2012, 19:02:42 »
Вопрос по tnt файлу.
Если вставлять веса. Можно ли имеющиеся для 67 маркеров сократить до 37 и поменять начало типа
ccode +[0.36 /54 0 /50 1 /51 2 /53 3....?
Если можно, то куда правильно вставлять перед ccode +0.36; или вместо?
Я загрузил TNT для Windows, но в директории сидят 2 архива GenBank-to-TNT и tnt_scripts. Надо ли их открывать, и если да, то куда. Сама программа работает и без них.
ccode +[0.36 - эта команда объявляет значения маркеров с 1-го по 37-й аддитивными. Если у Вас в файле меньше маркеров, чем 37, то по идее должна выскочить ошибка. Если больше 37, то все маркеры, следующие за 37-м НЕ БУДУТ аддитивными. Это не есть гуд.
Насчет весов: скольким маркерам объявите веса, у стольких они и будут) У всех необъявленных маркеров, вес будет равен единице. В этом случае (если маркеров 67, а вес объявите для 37), дерево сильно перекосит. В любом случае, говорить о каком либо реализме уже будет нельзя.

Сами веса обозначаются парой значений /<вес(целое число)> <номер маркера(отсчет с нуля)>, то есть для первого маркера /54 0, для десятого /75 9, и тд.
Вставлять веса можно после объявления аддитивности - ccode +[0.36. Но синтаксис может быть разный. Я когда использую веса, пишу объявление веса для каждого маркера отдельной строкой, так легче контролировать ошибки ввода. Я недавно писал о формате для TNT.

Архив (tnt_scripts), идущий с дистрибутивом TNT - образцы скриптов, среди них есть пара интересных примеров.
Архив GenBank-to-TNT не смотрел.

Оффлайн Alexander

  • Сообщений: 669
  • Рейтинг +73/-0
  • Y-ДНК: J2b
Re: Программа TNT.
« Ответ #400 : 10 Апрель 2012, 21:03:52 »
Вообще, о форме исходника в теме писалось много раз (в т.ч. даже у меня ТУТ). Нюанс: когда маркеров много и веса идут в несколько строчек, то нельзя заканчивать строку бэк слэшем (/), а следует перенести его в начало следующей строки.

Оффлайн wbull

  • Сообщений: 421
  • Страна: ru
  • Рейтинг +44/-0
    • Rickman Surname Project
  • Y-ДНК: E1b1b1a1, Cluster : E-L618* , Geno 2.0: E-CTC10912
  • мтДНК: U5a1g
Re: Программа TNT.
« Ответ #401 : 11 Апрель 2012, 17:27:44 »
Вопрос по tnt файлу.
Если вставлять веса. Можно ли имеющиеся для 67 маркеров сократить до 37 и поменять начало типа
ccode +[0.36 /54 0 /50 1 /51 2 /53 3....?
Если можно, то куда правильно вставлять перед ccode +0.36; или вместо?
Я загрузил TNT для Windows, но в директории сидят 2 архива GenBank-to-TNT и tnt_scripts. Надо ли их открывать, и если да, то куда. Сама программа работает и без них.
ccode +[0.36 - эта команда объявляет значения маркеров с 1-го по 37-й аддитивными. Если у Вас в файле меньше маркеров, чем 37, то по идее должна выскочить ошибка. Если больше 37, то все маркеры, следующие за 37-м НЕ БУДУТ аддитивными. Это не есть гуд.
Насчет весов: скольким маркерам объявите веса, у стольких они и будут) У всех необъявленных маркеров, вес будет равен единице. В этом случае (если маркеров 67, а вес объявите для 37), дерево сильно перекосит. В любом случае, говорить о каком либо реализме уже будет нельзя.

Сами веса обозначаются парой значений /<вес(целое число)> <номер маркера(отсчет с нуля)>, то есть для первого маркера /54 0, для десятого /75 9, и тд.
Вставлять веса можно после объявления аддитивности - ccode +[0.36. Но синтаксис может быть разный. Я когда использую веса, пишу объявление веса для каждого маркера отдельной строкой, так легче контролировать ошибки ввода. Я недавно писал о формате для TNT.

Архив (tnt_scripts), идущий с дистрибутивом TNT - образцы скриптов, среди них есть пара интересных примеров.
Архив GenBank-to-TNT не смотрел.
Спасибо. Все понял.
Просто я пока считаю 37 маркерные выборки (так как у меня пока оттестировано 37), поэтому все привожу к 37 маркерам. :)

Оффлайн wbull

  • Сообщений: 421
  • Страна: ru
  • Рейтинг +44/-0
    • Rickman Surname Project
  • Y-ДНК: E1b1b1a1, Cluster : E-L618* , Geno 2.0: E-CTC10912
  • мтДНК: U5a1g
Re: Программа TNT.
« Ответ #402 : 11 Апрель 2012, 17:33:39 »
Вообще, о форме исходника в теме писалось много раз (в т.ч. даже у меня ТУТ). Нюанс: когда маркеров много и веса идут в несколько строчек, то нельзя заканчивать строку бэк слэшем (/), а следует перенести его в начало следующей строки.
Спасибо. Просто трудно удержать в памяти 27 страниц. :)

Оффлайн wbull

  • Сообщений: 421
  • Страна: ru
  • Рейтинг +44/-0
    • Rickman Surname Project
  • Y-ДНК: E1b1b1a1, Cluster : E-L618* , Geno 2.0: E-CTC10912
  • мтДНК: U5a1g
Re: Программа TNT.
« Ответ #403 : 12 Апрель 2012, 14:48:49 »
Уважаемый Alexander.

Прочитал Ваш пост о конвертировании деревьев для Fig Tree с помощью меню Data-Export (Nexus format). Все получается, но пропали имена таксонов. Вместо них на экспортированных в Fig Tree древах стоят числовые номера. В чем моя ошибка?

Оффлайн Semargl

  • "El sueño de la razón produce monstruos" ©
  • Сообщений: 5213
  • Страна: hr
  • Рейтинг +2480/-5
  • www.semargl.me
    • www.semargl.me
  • Y-ДНК: R1a [CTS3402+]
  • мтДНК: U4a2g
Re: Программа TNT.
« Ответ #404 : 12 Апрель 2012, 15:00:11 »
Уважаемый Alexander.

Прочитал Ваш пост о конвертировании деревьев для Fig Tree с помощью меню Data-Export (Nexus format). Все получается, но пропали имена таксонов. Вместо них на экспортированных в Fig Tree древах стоят числовые номера. В чем моя ошибка?
Не Александр, но постараюсь ответить:
вам поможет команда taxname=;
В виндовой версии программы, вроде можно ввести внизу окна, в строку для команд. Попробуйте ввести эту команду перед экспортом в Nexus Format.
Еще можно поискать аналог этой команды в менюшках. Название должно быть наподобие "отображать имена таксонов".

 

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

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


Rambler's Top100