В этом примере показано, как сравнить целые геномы для организмов, который позволяет вам сравнивать организмы в совсем другом разрешении относительно одного генных сравнений. Вместо того, чтобы только фокусироваться на различиях между гомологичными генами можно получить сведения о крупномасштабных функциях геномной эволюции.
Этот пример использует две деформации хламидии, Хламидии трахоматис и Chlamydophila pneumoniae. Это тесно связанные бактерии, которые вызывают отличающийся, хотя оба очень распространенные, болезни в людях. Целые геномы доступны в базе данных GenBank® для обоих организмов.
Можно загрузить эти геномы с помощью getgenbank
функция. Во-первых, загрузите геном Хламидии трахоматис. Заметьте, что геном является круговым и чуть более чем один миллион BP в длине. Эти последовательности являются довольно большими, так может требовать времени к загрузке.
seqtrachomatis = getgenbank('NC_000117');
Затем загрузите Chlamydophila pneumoniae. Этот геном является также круговым и немного более длинным в 1.2 Mbp.
seqpneumoniae = getgenbank('NC_002179');
Для вашего удобства ранее загруженные последовательности включены в MAT-файл. Обратите внимание на то, что данные в общедоступных репозиториях часто курируются и обновляются. Следовательно, результаты этого примера могут немного отличаться, когда вы используете актуальные наборы данных.
load('chlamydia.mat','seqtrachomatis','seqpneumoniae')
Очень простой подход для сравнения этих двух геномов должен выполнить попарное выравнивание между всеми генами в геномах. Учитывая, что это бактериальные геномы, простой подход должен был бы сравнить весь ORFs в этих двух геномах. Однако данные GenBank включают больше информации о генах в последовательностях. Это хранится в поле CDS структуры данных. У хламидии трахоматис есть 895 областей кодирования, в то время как Chlamydophila pneumoniae имеет 1112.
M = numel(seqtrachomatis.CDS) N = numel(seqpneumoniae.CDS)
M = 895 N = 1112
Большинство записей CDS содержит перевод в последовательности аминокислот. Первая запись CDS в данных о Хламидии трахоматис является гипотетическим белком длины 591 остаток.
seqtrachomatis.CDS(1)
ans = struct with fields: location: 'join(1041920..1042519,1..1176)' gene: [] product: 'hypothetical protein' codon_start: '1' indices: [1041920 1042519 1 1176] protein_id: 'NP_219502.1' db_xref: 'GeneID:884145' note: [] translation: 'MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKGNNKVEDRVCSLYSSRSNENRESPYAVVDVSSMIESTPTSGETTRASRGVFSRFQRGLVRVADKVRRAVQCAWSSVSTRRSSATRAAESGSSSRTARGASSGYREYSPSAARGLRLMFTDFWRTRVLRQTSPMAGVFGNLDVNEARLMAAYTSECADHLEANKLAGPDGVAAAREIAKRWEQRVRDLQDKGAARKLLNDPLGRRTPNYQSKNPGEYTVGNSMFYDGPQVANLQNVDTGFWLDMSNLSDVVLSREIQTGLRARATLEESMPMLENLEERFRRLQETCDAARTEIEESGWTRESASRMEGDEAQGPSRAQQAFQSFVNECNSIEFSFGSFGEHVRVLCARVSRGLAAAGEAIRRCFSCCKGSTHRYAPRDDLSPEGASLAETLARFADDMGIERGADGTYDIPLVDDWRRGVPSIEGEGSDSIYEIMMPIYEVMDMDLETRRSFAVQQGHYQDPRASDYDLPRASDYDLPRSPYPTPPLPPRYQLQNMDVEAGFREAVYASFVAGMYNYVVTQPQERIPNSQQVEGILRDMLTNGSQTFRDLMRRWNREVDRE' text: [19x58 char]
Четвертая запись CDS для gatA гена, который имеет glutamyl-тРНК продукта amidotransferase подблок A. Длина последовательности продукта является 491 остатком.
seqtrachomatis.CDS(4)
ans = struct with fields: location: '2108..3583' gene: 'gatA' product: [2x47 char] codon_start: '1' indices: [2108 3583] protein_id: 'NP_219505.1' db_xref: 'GeneID:884087' note: [7x58 char] translation: 'MYRKSALELRDAVVNRELSVTAITEYFYHRIESHDEQIGAFLSLCKERALLRASRIDDKLAKGDPIGLLAGIPIGVKDNIHITGVKTTCASKMLENFVAPFDSTVVRRIEMEDGILLGKLNMDEFAMGSTTRYSAFHPTNNPWDLERVPGGSSGGSAAAVSARFCPIALGSDTGGSIRQPAAFCGVVGFKPSYGAVSRYGLVAFGSSLDQIGPLTTVVEDVALAMDAFAGRDPKDSTTRDFFKGTFSQALSLEVPKLIGVPRGFLDGLQEDCKENFFEALAVMEREGSRIIDVDLSVLKHAVPVYYIVASAEAATNLARFDGVRYGHRCAQADNMHEMYARSRKEGFGKEVTRRILLGNYVLSAERQNIFYKKGMAVRARLIDAFQAAFERCDVIAMPVCATPAIRDQDVLDPVSLYLQDVYTVAVNLAYLPAISVPSGLSKEGLPLGVQFIGERGSDQQICQVGYSFQEHSQIKQLYPKAVNGLFDGGIE' text: [26x58 char]
Несколько из CDS Chlamydophila pneumoniae имеют пустые переводы. Заполните их можно следующим образом. Во-первых, найдите все пустые переводы, затем отобразите первый пустой перевод.
missingPn = find(cellfun(@isempty,{seqpneumoniae.CDS.translation})); seqpneumoniae.CDS(missingPn(1))
ans = struct with fields: location: 'complement(73364..73477)' gene: [] product: 'hypothetical protein' codon_start: '1' indices: [73477 73364] protein_id: 'NP_444613.1' db_xref: 'GeneID:963699' note: 'hypothetical protein; identified by Glimmer2' translation: [] text: [10x52 char]
Функциональный featureparse
функции извлечений, такие как CDS, от структуры последовательности. Можно затем использовать cellfun
применять nt2aa
к последовательностям с недостающими переводами.
allCDS = featureparse(seqpneumoniae,'Feature','CDS','Sequence',true); missingSeqs = cellfun(@nt2aa,{allCDS(missingPn).Sequence},'uniform',false); [seqpneumoniae.CDS(missingPn).translation] = deal(missingSeqs{:}); seqpneumoniae.CDS(missingPn(1))
ans = struct with fields: location: 'complement(73364..73477)' gene: [] product: 'hypothetical protein' codon_start: '1' indices: [73477 73364] protein_id: 'NP_444613.1' db_xref: 'GeneID:963699' note: 'hypothetical protein; identified by Glimmer2' translation: 'MLTDQRKHIQMLHKHNSIEIFLSNMVVEVKLFFKTLK*' text: [10x52 char]
Чтобы сравнить gatA ген у Хламидии трахоматис со всеми генами CDS в Chlamydophila pneumoniae, поместите for
цикл вокруг nwalign
функция. Вы могли альтернативно использовать локальное выравнивание (swalign
).
tic gatAScores = zeros(1,N); for inner = 1:N gatAScores(inner) = nwalign(seqtrachomatis.CDS(4).translation,... seqpneumoniae.CDS(inner).translation); end toc % |tic| and |toc| are used to report how long the calculation takes.
Elapsed time is 1.888283 seconds.
Гистограмма баллов показывает большое количество отрицательных баллов и одного очень высокого положительного счета.
hist(gatAScores,100) title(sprintf(['Alignment Scores for Chlamydia trachomatis %s\n',... 'with all CDS in Chlamydophila pneumoniae'],seqtrachomatis.CDS(4).gene))
Как ожидалось высокое соответствие выигрыша с gatA геном в Chlamydophila pneumoniae.
[gatABest, gatABestIdx] = max(gatAScores); seqpneumoniae.CDS(gatABestIdx)
ans = struct with fields: location: 'complement(838828..840306)' gene: 'gatA' product: [2x47 char] codon_start: '1' indices: [840306 838828] protein_id: 'NP_445311.1' db_xref: 'GeneID:963139' note: [7x58 char] translation: 'MYRYSALELAKAVTLGELTATGVTQHFFHRIEEAEGQVGAFISLCKEQALEQAELIDKKRSRGEPLGKLAGVPVGIKDNIHVTGLKTTCASRVLENYQPPFDATVVERIKKEDGIILGKLNMDEFAMGSTTLYSAFHPTHNPWDLSRVPGGSSGGSAAAVSARFCPVALGSDTGGSIRQPAAFCGVVGFKPSYGAVSRYGLVAFASSLDQIGPLANTVEDVALMMDVFSGRDPKDATSREFFRDSFMSKLSTEVPKVIGVPRTFLEGLRDDIRENFFSSLAIFEGEGTHLVDVELDILSHAVSIYYILASAEAATNLARFDGVRYGYRSPQAHTISQLYDLSRGEGFGKEVMRRILLGNYVLSAERQNVYYKKATAVRAKIVKAFRTAFEKCEILAMPVCSSPAFEIGEILDPVTLYLQDIYTVAMNLAYLPAIAVPSGFSKEGLPLGLQIIGQQGQDQQVCQVGYSFQEHAQIKQLFSKRYAKSVVLGGQS' text: [26x58 char]
Попарное выравнивание одного гена от Хламидии трахоматис со всеми генами от Chlamydophila pneumoniae занимает чуть менее чем минуту на Intel® Pentium 4, машина на 2,0 ГГц рабочий Windows® XP. Чтобы сделать это вычисление для всех 895 CDS у Хламидии трахоматис заняло бы приблизительно 12 часов на той же машине. Не прокомментируйте следующий код, если вы хотите выполнить целое вычисление.
scores = zeros(M,N); parfor outer = 1:M theScore = zeros(1,outer); theSeq = seqtrachomatis.CDS(outer).translation; for inner = 1:N theScore(inner) = ... nwalign(theSeq,... seqpneumoniae.CDS(inner).translation); end scores(outer,:) = theScore; end
Отметьте команду parfor
используется во внешнем контуре. Если ваша машина будет сконфигурирована, чтобы запустить несколько лабораторий затем, то внешний контур будет выполняться параллельно. Для полного понимания этого построения смотрите doc parfor
.
Распределения музыки к нескольким генам показывают шаблон. CDS (3) из Хламидии трахоматис является gatC геном. Это имеет относительно короткий продукт, подблок aspartyl/glutamyl-tRNA amidotransferase C, только с 100 остатками.
gatCScores = zeros(1,N); for inner = 1:N gatCScores(inner) = nwalign(seqtrachomatis.CDS(3).translation,... seqpneumoniae.CDS(inner).translation); end figure hist(gatCScores,100) title(sprintf(['Alignment Scores for Chlamydia trachomatis %s\n',... 'with all CDS in Chlamydophila pneumoniae'],seqtrachomatis.CDS(3).gene)) xlabel('Score');ylabel('Number of genes');
Лучший счет снова соответствует тому же гену в Chlamydophila pneumoniae.
[gatCBest, gatCBestIdx] = max(gatCScores); seqpneumoniae.CDS(gatCBestIdx).product
ans = 2x47 char array 'aspartyl/glutamyl-tRNA amidotransferase subunit' 'C '
CDS (339) из Хламидии трахоматис является uvrA геном. Это имеет очень длинный продукт, excinuclease подблок ABC A, длины 1786.
uvrAScores = zeros(1,N); for inner = 1:N uvrAScores(inner) = nwalign(seqtrachomatis.CDS(339).translation,... seqpneumoniae.CDS(inner).translation); end figure hist(uvrAScores,100) title(sprintf(['Alignment Scores for Chlamydia trachomatis %s\n',... 'with all CDS in Chlamydophila pneumoniae'],seqtrachomatis.CDS(339).gene)) xlabel('Score');ylabel('Number of genes'); [uvrABest, uvrABestIdx] = max(uvrAScores); seqpneumoniae.CDS(uvrABestIdx)
ans = struct with fields: location: '716887..722367' gene: [] product: 'excinuclease ABC subunit A' codon_start: '1' indices: [716887 722367] protein_id: 'NP_445220.1' db_xref: 'GeneID:963214' note: [6x58 char] translation: 'MKSLPVYVSGIKVRNLKNVSIHFNSEEIVLLTGVSGSGKSSIAFDTLYAAGRKRYISTLPTFFATTITTLPNPKVEEIHGLSPTIAIKQNHFSHYSHATVGSTTELFSHLALLFTLEGQARDPKTKEVLDLYSKEKVLSTIMELSEGVQISILAPLLRKDIAAIHEYAQQGFTKVRCNGTIHPIYSFLTSGIPEDCSVDIVIDTLIKSENNIARLKVSLFTALEFGEGHCSVLSDEELMTFSTKQQIDDVTYTPLTQQLFSPHALESRCSLCQGSGIFISIDNPLLIDENLSIKENCCSFAGNCSSYLYHTIYQALADALNFNLETPWKDLSPEIQNIFLRGKNNLVLPVRLFDQTLGKKNLTYKVWRGVLNDIGDKVRYTTKPSRYLSKGMSAHSCSLCKGTGLGDYASVATWEGKTFTEFQQMSLNNWHVFFSKVKSPSLSIQEILQGLKQRLSFLIDLGLGYLTPNRALATLSGGEQERTAIAKHLGGELFGITYILDEPSIGLHPQDTEKLIGVIKKLRDQGNTVILVEHEERMISLADRIIDIGPGAGIFGGEVLFNGKPEDFLMNSSSLTAKYLRQELTIPIPESREAPTSWLLLTEATIHNLKNLSIRLPLARLIGVTGVSGSGKSSLINNTLVPAIESFLKQENPKNLHFEWGCIGRLIHITRDLPGRSQRSIPLTYIKAFDDIRELFASQPRSLRQGLTKAHFSFNQPQGACIQCQGLGTMTISDDDTPIPCSECQGKRYHSEVLEILYEGKNIADILDMTAYEAEKFFISHPKIHEKIHALCSLRLDYLPLGRPLSTLSGGEIQRLKLAHELLFASPKQTLYVLDEPTTGLHTHDIQALIEVLLSLTYLGHTVLVIEHNMHVVKVCDYVLELGPEGGDLGGYLLASCTPKDLIQLNTPTAKALAPYIEGSLDIPVVKSEPPSSPKSCDILIKDAYQNNLKHIDLALPRNSLIAIAGPGASGKHSLVFDILYASGNIAYAELFPPYIRQGLLKETPLPSVGEVKGLSPVISVRKCSSSNRSYHTIASALGLSNGLEKLFAILGEPFSPLTEEKLSKTTPQTIIDSLLKSYKDDYVTITSPIPLGSDLEIFLQEKQKEGFIKLYSEGNLYDLDERLPLNLIEPAIVIQHTKVSPKNSSSLLSAISVAFSLSSEIWIYISQKKQRKLSYSLGWKDKKGRLYPEITHQLLSSDHPEGRCLTCGGRGEILKISLEEHKEKIAHYTPLEFFSLFFPKSYMKPVQKLLKDENASQPLKLLTTKEFLNFCRGSSEFPGMNALLMEQLDTESDSPLIKPLLALTSCPACKGSGLNDYANYVRINNTSLLDIYQEDATFLESFLNTIGTDDTRSIIQDLMNRLTFISKVGLSYITLGQRQDTLSDGENYRLHLAKKISINLTNIVYLFEEPLSGLHPQDLPTIVQLLKELVANNNTVIATDRSCSLIPHADHAIFLGPGSGPQGGFLMDSDTEVCPSVDLHANVPQTEVCPKAPLSISKANHTRGSDRTLKVNLSIHHIQNLKVSAPLHALVAIGGVSGSGKTSLLLEGFKKQAELLIAKGTTTFSDLVVIDSHPIASSQRSDISTYFDIAPSLRAFYASLTQAKALNISSTMFSTNTKQGQCSDCQGLGYQWIDRAFYALEKRPCPTCSGFRIQPLAQEVLYEGKHFGELLHTPIETVALRFPFIKKIQKPLKALLDIGLGYLPIGQKLSSLSVSEKTALKTAYFLYQTPETPTLFLIDELFSSLDPIKKQHLPEKLRSLINSGHSVIYIDHDVKLLKSADYLIEIGPGSGKQGGKLLFSGSPKDIYASKDSLLKKYICNEELDS' text: [46x58 char]
Распределение баллов затронуто длиной последовательностей с очень длинными последовательностями, потенциально имеющими намного выше или более низкими баллами, чем более короткие последовательности. Можно нормировать для этого различными способами. Один путь состоит в том, чтобы разделиться на длину последовательностей.
lnormgatABest = gatABest./length(seqtrachomatis.CDS(4).product) lnormgatCBest = gatCBest./length(seqtrachomatis.CDS(3).product) lnormuvrABest = uvrABest./length(seqtrachomatis.CDS(339).product)
lnormgatABest = 16.8794 lnormgatCBest = 2.2695 lnormuvrABest = 78.9615
Альтернативный метод нормализации должен использовать сам счет выравнивания, который является счетом от выравнивания последовательности с собой.
gatASelf = nwalign(seqtrachomatis.CDS(4).translation,... seqtrachomatis.CDS(4).translation); gatCSelf = nwalign(seqtrachomatis.CDS(3).translation,... seqtrachomatis.CDS(3).translation); uvrASelf = nwalign(seqtrachomatis.CDS(339).translation,... seqtrachomatis.CDS(339).translation); normgatABest = gatABest./gatASelf normgatCBest = gatCBest./gatCSelf normuvrABest = uvrABest./uvrASelf
normgatABest = 0.7380 normgatCBest = 0.5212 normuvrABest = 0.5253
All-all вычисление выравнивания не только занимает много времени, оно также генерирует большую матрицу баллов. Если вы ищете подобные гены через разновидности, то баллы, которые интересны, являются положительными баллами, которые указывают на хорошее выравнивание. Однако большинство этих баллов отрицательно, и фактические значения не особенно полезны для этого типа исследования. Разреженные матрицы позволяют вам хранить интересные значения более эффективным способом.
Разреженная матрица, spScores
, в MAT-файле chlamydia.mat
содержит положительные значения от всех против всего попарного вычисления выравнивания, нормированного на счет самосовмещения.
load('chlamydia.mat','spScores')
С матрицей баллов можно посмотреть на распределение множества генов Chlamydophila pneumoniae, выровненных с Хламидией трахоматис и обратным из этого, гены Хламидии трахоматис, выровненные с генами Chlamydophila pneumoniae
figure subplot(2,1,1) hist(max(spScores),100) title('Highest Alignment Scores for Chlamydophila pneumoniae Genes') xlabel('Score');ylabel('Number of genes'); subplot(2,1,2) hist(max(spScores,[],2),100) title('Highest Alignment Scores for Chlamydia trachomatis Genes') xlabel('Score');ylabel('Number of genes');
Помните, что существует 1 112 CDS в Chlamydophila pneumoniae и только 895 у Хламидии трахоматис. Высокое количество нулевых баллов в главной гистограмме указывает, что многие из дополнительного CDS в Chlamydophila pneumoniae не имеют хороших соответствий у Хламидии трахоматис.
Другой способ визуализировать данные состоит в том, чтобы посмотреть на положения точек в матрице баллов, которые положительны. Разреженный функциональный spy
простой способ быстро просмотреть точечные диаграммы матриц. Это показывает некоторую интересную структуру в положениях высоких соответствий выигрыша.
figure
spy(spScores > 0)
title(sprintf('Dot Plot of High-Scoring Alignments.\nNormalized Threshold = 0'))
Повысьте порог немного выше, чтобы видеть ясные диагональные линии в графике.
spy(spScores >.1)
title(sprintf('Dot Plot of High-Scoring Alignments.\nNormalized Threshold = 0.1'))
Помните, что это круговые геномы, и кажется, что начальные точки в GenBank произвольны. Переставьте матрицу баллов так, чтобы лучшее соответствие первого CDS в Chlamydophila pneumoniae было в первой строке, которая будет видеть ясный диагональный график. Это показывает synteny между этими двумя организмами.
[bestScore bestMatch] = max(spScores(:,1));
spy(spScores([bestMatch:end 1:bestMatch-1],:)>.1);
title('Synteny Plot of Chlamydophila pneumoniae and Chlamydia trachomatis')
Гены в различных геномах, которые связаны друг с другом, как говорят, гомологичны. Подобие может быть видообразованием (ортологические гены) или репликацией (paralogous гены). Наличие матрицы выигрыша позволяет вам искать оба типа отношений.
Самый очевидный способ найти ортологи состоит в том, чтобы искать самый высокий выигрыш, соединяющийся для каждого гена. Если счет будет значительным затем, то эти лучшие взаимные пары, очень вероятно, будут ортологическими.
[bestScores, bestIndices] = max(spScores);
Переменная bestIndices содержит индекс лучших взаимных пар для генов в Chlamydophila pneumoniae. Сортировка лучших баллов и составляет таблицу, чтобы сравнить описание лучших взаимных пар и обнаружить очень высокое подобие между самыми высокими выигрывающими лучшими взаимными парами.
[orderedScores, permScores] = sort(full(bestScores),'descend'); matches = [num2cell(orderedScores)',num2cell(bestIndices(permScores))',... num2cell((permScores))',... {seqtrachomatis.CDS(bestIndices(permScores)).product;... seqpneumoniae.CDS((permScores)).product; }']; for count = 1:7 fprintf(['Score %f\nChlamydia trachomatis Gene : %s\n',... 'Chlamydophila pneumoniae Gene : %s\n\n'],... matches{count,1}, matches{count,4}, matches{count,5}) end
Score 0.982993 Chlamydia trachomatis Gene : 50S ribosomal protein L36 Chlamydophila pneumoniae Gene : 50S ribosomal protein L36 Score 0.981818 Chlamydia trachomatis Gene : 30S ribosomal protein S15 Chlamydophila pneumoniae Gene : 30S ribosomal protein S15 Score 0.975422 Chlamydia trachomatis Gene : integration host factor alpha-subunit Chlamydophila pneumoniae Gene : integration host factor beta-subunit Score 0.971647 Chlamydia trachomatis Gene : 50S ribosomal protein L16 Chlamydophila pneumoniae Gene : 50S ribosomal protein L16 Score 0.970105 Chlamydia trachomatis Gene : 30S ribosomal protein S10 Chlamydophila pneumoniae Gene : 30S ribosomal protein S10 Score 0.969554 Chlamydia trachomatis Gene : rod shape-determining protein MreB Chlamydophila pneumoniae Gene : rod shape-determining protein MreB Score 0.953654 Chlamydia trachomatis Gene : hypothetical protein Chlamydophila pneumoniae Gene : hypothetical protein
Можно использовать Редактора переменных, чтобы посмотреть на данные в формате электронной таблицы.
open('matches')
Сравните описания, чтобы видеть, что у большинства лучших взаимных пар есть идентичные описания.
exactMatches = strcmpi(matches(:,4),matches(:,5)); sum(exactMatches)
ans = 808
Возможно, более интересный лучшие взаимные пары, где описания не идентичны. Некоторые - просто различия в том, как тот же ген описан, но другие показывают очень отличающиеся описания.
mismatches = matches(~exactMatches,:); for count = 1:7 fprintf(['Score %f\nChlamydia trachomatis Gene : %s\n',... 'Chlamydophila pneumoniae Gene : %s\n\n'],... mismatches{count,1}, mismatches{count,4}, mismatches{count,5}) end
Score 0.975422 Chlamydia trachomatis Gene : integration host factor alpha-subunit Chlamydophila pneumoniae Gene : integration host factor beta-subunit Score 0.929565 Chlamydia trachomatis Gene : low calcium response D Chlamydophila pneumoniae Gene : type III secretion inner membrane protein SctV Score 0.905000 Chlamydia trachomatis Gene : NrdR family transcriptional regulator Chlamydophila pneumoniae Gene : transcriptional regulator NrdR Score 0.903226 Chlamydia trachomatis Gene : Yop proteins translocation protein S Chlamydophila pneumoniae Gene : type III secretion inner membrane protein SctS Score 0.896212 Chlamydia trachomatis Gene : ATP-dependent protease ATP-binding subunit ClpX Chlamydophila pneumoniae Gene : ATP-dependent protease ATP-binding protein ClpX Score 0.890705 Chlamydia trachomatis Gene : ribonuclease E Chlamydophila pneumoniae Gene : ribonuclease G Score 0.884234 Chlamydia trachomatis Gene : ClpC protease ATPase Chlamydophila pneumoniae Gene : ATP-dependent Clp protease ATP-binding protein
Просмотрите данные для несоответствий.
open('mismatches')
Если у вас есть выигрыш, матрицируют, это открывает много возможностей для дальнейшего расследования. Например, вы могли искать CDS, где существует несколько высоких выигрывающих взаимных CDS. Смотрите Кристьанини и Хана [1] для дальнейших идей.
[1] Cristianini, N. и Хан, M.W., "Введение в вычислительную геномику: подход тематических исследований", издательство Кембриджского университета, 2007.