Этот пример показывает, как вычислить отношения Ka/Ks для восьми генов в геномах вируса H5N1 и H2N3, и выполнить филогенетический анализ гена HA из вируса H5N1 выделенного из цыплят по всей Африке и Азии. Для филогенетического анализа вы восстановите соседнее дерево и создадите 3-D график расстояний последовательности с помощью многомерного масштабирования. Наконец, вы будете отображать географические местоположения, где каждый последовательность HA был найден на региональной карте. Последовательности, используемые в этом примере, были выбраны из тематического исследования птичьего гриппа на веб-сайте вычислительной геномики [1]. Примечание.В заключительном разделе этого примера требуется Mapping Toolbox™.
Есть три типа вируса гриппа: Тип A, B и C. Все геномы гриппа состоят из восьми сегментов или генов, которые кодируют для полимеразы B2 (PB2), полимеразы B1 (PB1), полимераза A (PA), гемагглютинин (ХА), нуклеобелок (NP), нейраминидаза (NA), матрица (M1) и неструктурные белки (NS1). Примечание: Вирус типа C имеет гемагглютининэстеразу (HE), гомолог HA.
Из трех типов гриппа тип А может быть наиболее разрушительным. Он поражает птиц (его естественный резервуар), людей и других млекопитающих и был основной причиной глобальных эпидемий гриппа. Тип B поражает только людей, вызывающих локальные эпидемии, и тип C не имеет тенденцию вызывать серьезные заболевания.
Инфлюэнзы типа А далее классифицируются на различные подтипы согласно изменений в аминокислотных последовательностях белков HA (H1-16) и NA (N1-9). Оба белка расположены снаружи вируса. HA присоединяет вирус к хозяину камеры затем помогает в процессе слияния вируса с камерой. NA клипирует недавно созданный вирус из камеры, чтобы он мог перейти к здоровой новой камере. Различие в аминокислотной композиции в белке и рекомбинация различных белков HA и NA способствуют способности инфлюэнза типа A скачкообразным видам хозяина (то есть птице к человеку) и широкой области значений тяжести. Многие новые лекарства разрабатываются для нацеливания на HA и NA белки [2,3,4].
В 1997 году H5N1 подтип вируса птичьего гриппа, вируса гриппа типа А, совершил неожиданный переход к людям в Гонконге, вызвав смерть шести человек. Чтобы контролировать быстро распространяющуюся болезнь, вся птица в Гонконге была уничтожена. Последовательный анализ вируса H5N1 показан здесь [2,4].
Исследование коэффициентов Ka/Ks для каждого генного сегмента H5N1 вируса даст некоторое представление о том, как каждый изменяется с течением времени. Ka/Ks - отношение несинонимических изменений к синонимам в последовательности. Для более подробного объяснения коэффициентов Ka/Ks смотрите Анализ Синонимических и несинонимических частот замещения. Чтобы вычислить Ka/Ks, нужна копия гена с двух временных точек. Можно использовать вирус H5N1 выделенный из цыплят в Гонконге в 1997 и 2001 годах. Для сравнения можно включить вирус H2N3 выделенный из кряквы в Альберте в 1977 и 1985 годах [1].
Для целей этого примера данные последовательности предоставляются в четырех структурах MATLAB ®, которые были созданы genbankread.
Загрузите H5N1 и H2N3 данные последовательности.
load('birdflu.mat','chicken1997','chicken2001','mallard1977','mallard1985')
Данные в публичных хранилищах часто кураторятся и обновляются. Вы можете извлечь актуальные наборы данных с помощью getgenbank функция. Обратите внимание, что если данные действительно изменились, результаты этого примера могут несколько отличаться, когда вы используете современные наборы данных.
chicken1997 = arrayfun(@(x)getgenbank(x{:}),{chicken1997.Accession});
chicken2001 = arrayfun(@(x)getgenbank(x{:}),{chicken2001.Accession});
mallard1977 = arrayfun(@(x)getgenbank(x{:}),{mallard1977.Accession});
mallard1985 = arrayfun(@(x)getgenbank(x{:}),{mallard1985.Accession});
Можно извлечь только кодирующий фрагмент нуклеотидных последовательностей, используя featureparse функция. The featureparse функция возвращает структуру с полями, содержащими информацию из раздела Features в файле GenBank, включая поле Sequence, которое содержит только последовательность кодирования.
for ii = 1:numel(chicken1997) ntSeq97{ii} = featureparse(chicken1997(ii),'feature','cds','sequence',true); ntSeq01{ii} = featureparse(chicken2001(ii),'feature','cds','sequence',true); ntSeq77{ii} = featureparse(mallard1977(ii),'feature','cds','sequence',true); ntSeq85{ii} = featureparse(mallard1985(ii),'feature','cds','sequence',true); end ntSeq97{1}
ans =
struct with fields:
Location: '<1..>2273'
Indices: [1 2273]
UnknownFeatureBoundaries: 1
gene: 'PB2'
codon_start: '1'
product: 'PB2 protein'
protein_id: 'AAF02361.1'
db_xref: 'GI:6048850'
translation: 'RIKELRDLMSQSRTREILTKTTVDHMAIIKKYTSGRQEKNPALRMKWMMAMKYPITADKRIMEMIPERNEQGQTLWSKTNDAGSDRVMVSPLAVTWWNRNGPTTSTVHYPKVYKTYFEKVERLKHGTFGPVHFRNQVKIRRRVDMNPGHADLSAKEAQDVIMEVVFPNEVGARILTSESQLTITKEKREELKNCNISPLMVAYMLERELVRKTRFLPVAGGTSSVYIEVLHLTQGTCWEQMYTPGGEVRNDDVDQSLIIAARNIVRRATVSADPLASLLEMCHSTQIGGVRMVDILKQNPTEEQAVDICKAAMGLRISSSFSFGGFTFKRTKGFSVKREEEVLTGNLQTLKIQVHEGYEEFTMVGRRATAILRKATRRMIQLIVSGRDEQSIAEAIIVAMVFSQEDCMIKAVRGDLNFVNRANQRLNPMHQLLRHFQKDAKVLFQNWGIEPIDNVMGMIGILPDMTPSTEMSLRGVRVSKMGVDEYSSTERVVVSIDRFLRVRDQQGNVLLSPEEVSETQGMEKLTITYSSSMMWEINGPESVLVNTYQWIIRNWETVKIQWSQEPTMLYNKMEFEPFQSLVPKAARSQYSGFVRTLFQQMRDVLGTFDTVQIIKLLPFAAAPPEQSRMQFSSLTVNVRGSGMRILVRGNSPAFNYNKTTKRLTILGKDAGAITEDPDEGAAGVESAVLRGFLILGKEDKRYGPALSINELSNLTKGEKANVLIGQGDVVLVMKRKRDSSILTDSQTATKRIRMAIN'
Sequence: 'agaataaaagaactaagagatttgatgtcgcaatctcgcacacgcgagatactgacaaaaaccactgtggatcatatggccataattaagaagtacacatcaggaagacaggagaagaaccccgctcttagaatgaaatggatgatggcgatgaaatacccgatcacagctgacaaaagaataatggagatgatccctgaaaggaatgagcaaggtcaaactctttggagcaaaacaaatgacgctggatcagacagggtaatggtatcacctctggctgtaacgtggtggaacagaaatggaccaacaacaagtacagtccattatccaaaggtgtataaaacctactttgaaaaggttgaaagattaaaacacggaacctttggccctgttcatttccggaatcaagtcaaaatacgccgcagggttgacatgaaccctggccatgcagatctcagcgctaaagaagcacaagatgtcatcatggaggtcgttttcccaaatgaagttggagccaggatattgacatcagagtcacagctgacaataacaaaggaaaagagggaggaactcaagaattgtaatatttctcctttaatggtggcatatatgttggaaagagaattggttcgcaagaccagattcctaccagtggctggtgggacaagcagcgtatatatagaagtattgcatttgacccaaggaacctgctgggagcagatgtacacaccaggaggggaggtaagaaatgatgatgttgaccaaagtttaatcattgctgctaggaacattgtcaggagagcaacagtatcagcagacccattggcttcactcttggagatgtgccatagcacacaaattggcggagtaagaatggtagacatccttaaacaaaacccaacagaagagcaagctgtagatatatgcaaggcagcaatgggtttaagaatcagctcatccttcagctttggagggttcactttcaaaagaacaaaggggttttctgtcaaaagagaggaagaagtgcttacaggcaacctccaaacattgaagatacaagtacatgaaggatatgaggaattcacaatggttggacgaagagcaacagccattctaagaaaagcaaccagaaggatgatccaactgatagtcagcgggagggacgagcaatcaattgctgaggcaattattgtagcaatggtgttctcacaagaagattgcatgataaaggcagtccgaggtgatttgaatttcgtaaacagagcaaatcaacgactgaaccccatgcaccaactcctgagacacttccaaaaggatgcaaaggtgctgtttcaaaactggggaattgaaccaatcgacaatgtcatggggatgattggaatattgcctgacatgacccccagcacggaaatgtcactaagaggagtgagagttagtaaaatgggggtggatgaatattctagcactgaaagagtggtcgtgagcattgaccgtttcttaagggtccgagatcagcaaggaaatgtactcctatcccctgaagaagttagtgagacacagggaatggaaaagttgacgataacttattcatcgtctatgatgtgggaaattaacggcccagaatcagttctagttaacacataccaatggatcattaggaattgggagactgtaaagatccaatggtcccaagaacccaccatgctatacaataagatggagtttgaaccatttcaatctttagtaccaaaggctgccagaagccaatatagtggatttgtgagaacgctattccagcagatgcgtgatgttttgggaacatttgacactgttcaaataatcaaactactaccatttgcagcagccccacctgaacagagtaggatgcaattttcttctctgactgtgaatgtgaggggatcaggaatgagaatacttgtgagaggtaactcccctgcgtttaactacaacaagacaactaagaggcttacaatacttgggaaggacgcaggtgcaattacagaggacccagatgaaggagcagcaggggtagagtctgcagtattgagagggtttctaattctcggcaaagaagacaaaagatatggaccagcattgagcatcaatgaactgagcaatcttacgaaaggggagaaagctaatgtattgatagggcaaggagacgtggtgttggtaatgaaacggaaacgggactctagcatacttactgacagccagacagcgaccaaaagaattcggatggccatcaatta'
Визуальный осмотр структур последовательности выявил, что некоторые из генов имеют варианты сращивания, представленные в файлах GenBank. Поскольку этот анализ проводится только на PB2, PB1, PA, HA, NP, NA, M1 и NS1 генах, необходимо удалить любые варианты сращивания.
Удалите варианты сращивания из H5N1 1997 года
ntSeq97{7}(1) = [];% M2
ntSeq97{8}(1) = [];% NS2
Удалите варианты сращивания из H2N3 1977 года
ntSeq77{2}(2) = [];% PB1-F2
ntSeq77{7}(1) = [];% M2
ntSeq77{8}(1) = [];% NS2
Удалите варианты сращивания из H2N3 1985 года
ntSeq85{2}(2) = [];% PB1-F2
ntSeq85{7}(1) = [];% M2
ntSeq85{8}(1) = [];% NS2
Вам нужно выровнять нуклеотидные последовательности, чтобы вычислить отношение Ka/Ks. Выравнивание белковых последовательностей для каждого гена (доступно в поле 'translation') с помощью nwalign функцию, затем вставить зазоры в нуклеотидную последовательность с помощью seqinsertgaps. Используйте функцию dnds вычислить несинонимические и синонимичные скорости замещения для каждого из восьми генов в геномах вируса. Если вы заинтересованы в просмотре выравниваний последовательности, задайте для опции 'verbose' значение true при использовании dnds.
Имена генов гриппа
proteins = {'PB2','PB1','PA','HA','NP','NA','M1','NS1'};
H5N1 вирус
for ii = 1:numel(ntSeq97) [sc,align] = nwalign(ntSeq97{ii}.translation,ntSeq01{ii}.translation,'alpha','aa'); ch97seq = seqinsertgaps(ntSeq97{ii}.Sequence,align(1,:)); ch01seq = seqinsertgaps(ntSeq01{ii}.Sequence,align(3,:)); [dn,ds] = dnds(ch97seq,ch01seq); H5N1.(proteins{ii}) = dn/ds; end
H2N3 вирус
for ii = 1:numel(ntSeq77) [sc,align] = nwalign(ntSeq77{ii}.translation,ntSeq85{ii}.translation,'alpha','aa'); ch77seq = seqinsertgaps(ntSeq77{ii}.Sequence,align(1,:)); ch85seq = seqinsertgaps(ntSeq85{ii}.Sequence,align(3,:)); [dn,ds] = dnds(ch77seq,ch85seq); H2N3.(proteins{ii}) = dn/ds; end H5N1 H2N3
H5N1 =
struct with fields:
PB2: 0.0226
PB1: 0.0240
PA: 0.0307
HA: 0.0943
NP: 0.0517
NA: 0.1015
M1: 0.0460
NS1: 0.3010
H2N3 =
struct with fields:
PB2: 0.0048
PB1: 0.0021
PA: 0.0089
HA: 0.0395
NP: 0.0071
NA: 0.0559
M1: 0
NS1: 0.1954
Примечание: Результаты отношения Ka/Ks могут отличаться от результатов, показанных на [1], из-за вариантов сращивания последовательности.
Визуализируйте коэффициенты Ka/Ks в 3-D гистограммы.
H5N1rates = cellfun(@(x)(H5N1.(x)),proteins);
H2N3rates = cellfun(@(x)(H2N3.(x)),proteins);
bar3([H2N3rates' H5N1rates']);
ax = gca;
ax.XTickLabel = {'H2N3','H5N1'};
ax.YTickLabel = proteins;
zlabel('Ka/Ks');
view(-115,16);
title('Ka/Ks Ratios for H5N1 (Chicken) and H2N3 (Mallard) Viruses');

NS1 HA и NA имеют большие несинонимические и синонимические отношения по сравнению с другими генами как в H5N1, так и в H2N3. Изменения последовательности белков в этих генах были связаны с увеличением патогенности H5N1. В частности, изменения в гене HA могут обеспечить вирусу способность переносить в другие виды, помимо птиц [2,3].
Вирус H5N1 присоединяется к камерам желудочно-кишечного тракта птиц и дыхательных путей человека. Изменения в белке HA, который помогает связать вирус со здоровой камерой и облегчает его включение в камеру, позволяют вирусу поражать различные органы у одного и того же и разных видов. Это может обеспечить ему способность прыгать от птиц к человеку [2,3]. Вы можете выполнить филогенетический анализ белка HA из вируса H5N1 выделенного из цыплят в разное время (годы) в разных областях Азии и Африки, чтобы исследовать их связь друг с другом.
Загрузите данные аминокислотной последовательности HA из 16 областей/раз из предоставленного MAT-файла birdflu.mat или извлечь актуальные данные последовательности из репозитория NCBI с помощью getgenpept функция.
load('birdflu.mat','HA')
HA = arrayfun(@(x)getgenpept(x{:}),{HA.Accession});
Создайте новый массив структур, содержащий поля, соответствующие аминокислотной последовательности (Sequence) и исходной информации (Header). Можно извлечь исходную информацию из HA с помощью featureparse затем выполните синтаксический анализ с regexp.
for ii = 1:numel(HA) source = featureparse(HA(ii),'feature','source'); strain = regexp(source.strain,'A/[Cc]hicken/(\w+\s*\w*).*/(\d+)','tokens'); proteinHA(ii).Header = sprintf('%s_%s',char(strain{1}(1)),char(strain{1}(2))); proteinHA(ii).Sequence = HA(ii).Sequence; end proteinHA(1)
ans =
struct with fields:
Header: 'Nigeria_2006'
Sequence: 'mekivllfaivslvksdqicigyhannsteqvdtimeknvtvthaqdilekthngklcdldgvkplilrdcsvagwllgnpmcdeflnvpewsyivekinpandlcypgnfndyeelkhllsrinhfekiqiipksswsdheassgvssacpyqgrssffrnvvwlikkdnayptikrsynntnqedllvlwgihhpndaaeqtrlyqnpttyisvgtstlnqrlvpkiatrskvngqsgrmeffwtilkpndainfesngnfiapenaykivkkgdstimkseleygncntkcqtpigainssmpfhnihpltigecpkyvksnrlvlatglrnspqgerrrkkrglfgaiagfieggwqgmvdgwygyhhsneqgsgyaadkestqkaidgvtnkvnsiidkmntqfeavgrefnnlerrienlnkkmedgfldvwtynaellvlmenertldfhdsnvknlydkvrlqlrdnakelgngcfefyhrcdnecmesvrngtydypqyseearlkreeisgvklesigtyqilsiystvasslalaimvaglslwmcsngslqcrici'
Выравнивание аминокислотных последовательностей HA с помощью multialign и визуализируйте выравнивание с seqalignviewer.
alignHA = multialign(proteinHA); seqalignviewer(alignHA);

Вычислите расстояния между последовательностями с помощью seqpdist с методом Юкса-Кантора. Использование seqneighjoin восстановление филогенетического дерева методом соединения соседей. Seqneighjoin возвращает phytree объект.
distHA = seqpdist(alignHA,'method','Jukes-Cantor','alpha','aa'); HA_NJtree = seqneighjoin(distHA,'equivar',alignHA);
Используйте view метод, сопоставленный с phytree объекты для открытия дерева в Phylogenetic Tree Tool.
view(HA_NJtree);

Другой способ визуализации связи между последовательностями - это использование многомерного масштабирования (MDS) с расстояниями, рассчитанными для филогенетического дерева. Эта функциональность обеспечивается cmdscale функция в Statistics and Machine Learning Toolbox™.
[Y,eigvals] = cmdscale(distHA);
Можно использовать собственные значения, возвращенные cmdscale чтобы помочь привести ваше решение о том, использовать ли первые две или три размерности на вашем графике.
sigVecs = [1:3;eigvals(1:3)';eigvals(1:3)'/max(abs(eigvals))]; report = ['Dimension Eigenvalues Normalized' ... sprintf('\n %d\t %1.4f %1.4f',sigVecs)]; display(report);
report =
'Dimension Eigenvalues Normalized
1 0.0062 1.0000
2 0.0028 0.4462
3 0.0014 0.2209'
Первые две размерности представляют большой фрагмент данных, но третий все еще содержит информацию, которая может помочь разрешить кластеры в данных последовательности. Трехмерный график поля точек можно создать с помощью plot3 функция.
locations = {proteinHA(:).Header};
figure
plot3(Y(:,1),Y(:,2),Y(:,3),'ok');
text(Y(:,1)+0.002,Y(:,2),Y(:,3)+0.001,locations,'interpreter','no');
title('MDS Plot of HA Sequences');
view(-21,12);

Кластеры, по-видимому, соответствуют группировкам в филогенетическом дереве. Найдите последовательности, принадлежащие каждому кластеру, используя subtree метод phytree. Один из subtreeтребуемыми входами являются номер узла (количество листьев + количество ветвей), который будет корневым узлом нового поддерева. Для вашего примера, кластер, содержащий Хэбэй и Гонконг на графике MDS, эквивалентен поддереву, корневым узлом которого является Branch 14, который является Node 30 (16 оставляет + 14 ветвей).
cluster1 = get(subtree(HA_NJtree,30),'LeafNames'); cluster2 = get(subtree(HA_NJtree,21),'LeafNames'); cluster3 = get(subtree(HA_NJtree,19),'LeafNames');
Получите индекс для последовательностей, принадлежащих каждому кластеру.
[cl1,cl1_ind] = intersect(locations,cluster1);
[cl2,cl2_ind] = intersect(locations,cluster2);
[cl3,cl3_ind] = intersect(locations,cluster3);
[cl4,cl4_ind] = setdiff(locations,{cl1{:} cl2{:} cl3{:}});
Измените цвет и символы маркера на графике MDS, чтобы соответствовать каждому кластеру.
h = plot3(Y(cl1_ind,1),Y(cl1_ind,2),Y(cl1_ind,3),'^',... Y(cl2_ind,1),Y(cl2_ind,2),Y(cl2_ind,3),'o',... Y(cl3_ind,1),Y(cl3_ind,2),Y(cl3_ind,3),'d',... Y(cl4_ind,1),Y(cl4_ind,2),Y(cl4_ind,3),'v'); numClusters = 4; col = autumn(numClusters); for i = 1:numClusters h(i).MarkerFaceColor = col(i,:); end set(h(:),'MarkerEdgeColor','k'); text(Y(:,1)+0.002,Y(:,2),Y(:,3),locations,'interpreter','no'); title('MDS Plot of HA Sequences'); view(-21,12);

Для получения более подробной информации об использовании коэффициентов Ka/Ks, филогенетики и MDS для анализа последовательности см. Cristianini и Hahn [5].
ПРИМЕЧАНИЕ. Вам нужен Mapping Toolbox, чтобы создать следующий рисунок.
Используя инструменты из Mapping Toolbox, можно построить график местоположения, где был выделен каждый вирус, на карте Африки и Азии. Для этого нужны широта и долгота для каждого места. Для получения информации о поиске геопространственных данных в Интернете смотрите Find Geospatial Data Online. Для этого примера предусмотрены широта и долгота для столицы каждой географической области, где были выделены вирусы.
Создайте геоstruct, regionHA, которая содержит географическую информацию для каждого функции или последовательности. Геоstruct должен иметь поля Геометрия, Лат и Лон, которые задают тип функции, широту и долготу. Эта информация используется функциями отображения в Mapping Toolbox для отображения геопространственных данных.
[regionHA(1:16).Geometry] = deal('Point'); [regionHA(:).Lat] = deal(9.10, 34.31, 15.31, 39.00, 39.00, 39.00, 55.26,... 15.56, 34.00, 33.14, 34.20, 23.00, 37.35, 44.00,... 22.11, 22.11); [regionHA(:).Lon] = deal(7.10, 69.08, 32.35, 116.00, 116.00, 116.00,... 65.18, 105.48, 114.00, 131.36, 131.40, 113.00,... 127.00, 127.00, 114.14, 114.14);
Геоstruct может также иметь поля атрибутов, которые содержат дополнительную информацию о каждой функции. Добавьте поля атрибута Name и Cluster к regionHA структура. Поле Cluster содержит номер кластера последовательности, который будет использоваться для идентификации принадлежности кластеров к последовательностям.
[regionHA(:).Name] = deal(proteinHA.Header); [regionHA(cl1_ind).Cluster] = deal(1); [regionHA(cl2_ind).Cluster] = deal(2); [regionHA(cl3_ind).Cluster] = deal(3); [regionHA(cl4_ind).Cluster] = deal(4); regionHA(1)
ans =
struct with fields:
Geometry: 'Point'
Lat: 9.1000
Lon: 7.1000
Name: 'Nigeria_2006'
Cluster: 3
Создайте структуру с помощью makesymbolspec функция, которая будет содержать маркер и спецификации для каждого маркера, отображаемого на карте. Вы передадите эту структуру в geoshow функция. Маркеры и цвета символов соответствуют кластерам на графике MDS.
clusterSymbols = makesymbolspec('Point',... {'Cluster',1,'Marker', '^'},... {'Cluster',2,'Marker', 'o'},... {'Cluster',3,'Marker', 'd'},... {'Cluster',4,'Marker', 'v'},... {'Cluster',[1 4],'MarkerFaceColor',autumn(4)},... {'Default','MarkerSize', 6},... {'Default','MarkerEdgeColor','k'});
Загрузите информацию о отображении и используйте geoshow функция для построения графиков расположения вирусов на карте.
load coast load topo figure fig = gcf; fig.Renderer = 'zbuffer'; worldmap([-45 85],[0 160]) setm(gca,'mapprojection','robinson',... 'plabellocation',30,'mlabelparallel',-45,'mlabellocation',30) plotm(lat, long) geoshow(topo, topolegend, 'DisplayType', 'texturemap') demcmap(topo) brighten(.60) geoshow(regionHA,'SymbolSpec',clusterSymbols); title('Geographic Locations of HA Sequence in Africa and Asia')

ПРИМЕЧАНИЕ. Вам нужен Mapping Toolbox, чтобы экспортировать данные в файл в формате KML.
Использование kmlwrite функция из Mapping Toolbox, можно записать информацию о местоположении и аннотации для каждой последовательности в файл в формате KML. Google Earth отображает географические данные из файлов KML в своем браузере Earth. Mapping Toolbox функция переводит геоstruct, такой как regionHA, в файл в формате KML, который будет использоваться Google Earth. Для получения дополнительной информации о kmlwrite см. «Экспорт данных векторной точки в KML».
Можно далее аннотировать каждую последовательность с информацией из раздела Features файла GenBank с помощью featureparse функция. Затем можно использовать эту информацию для заполнения геоstruct, regionHA, и отобразить его в таблицу форме как тег-описание для каждого плацемента в браузере Google Earth. В геоstruct обязательными полями являются поля Геометрия, Лат и Лон. Все другие поля считаются атрибутами знака заполнения.
for i = 1:numel(HA) feats = featureparse(HA(i),'Feature','source'); regionHA(i).Strain = feats.strain; if isfield(feats,'country') regionHA(i).Country = feats.country; else regionHA(i).Country = 'N/A'; end year = regexp(regionHA(i).Name,'\d+','match'); regionHA(i).Year = year{1}; % Create a link to GenPept record through the accession number regionHA(i).AccessionNumber = ... ['<a href="http://www.ncbi.nlm.nih.gov/sites/entrez?db=Protein&cmd=search&term=',... HA(i).Accession,'">',HA(i).Accession,'</a>']; end [regionHA.SequenceLength] = deal(HA.LocusSequenceLength);
Создайте структуру атрибута с помощью makeattribspec функция, которую вы будете использовать для форматирования таблицы описаний для каждого маркера. Структура атрибутов диктует порядок и форматирование каждого атрибута. Можно также использовать его, чтобы не отображать один из атрибутов в геоstruct, regionHA.
attribStruct = makeattribspec(regionHA);
Удалите поле Имя и переупорядочьте поля в структуре атрибутов.
attribStruct = rmfield(attribStruct,'Name'); attribStruct = orderfields(attribStruct,{'AccessionNumber','Strain',... 'SequenceLength','Country','Year','Cluster'}); regionHA = orderfields(regionHA,{'AccessionNumber','Strain',... 'SequenceLength','Country','Year','Cluster','Geometry','Lon','Lat',... 'Name'});
Переформатируйте метки атрибутов для отображения в таблице.
attribStruct.AccessionNumber.AttributeLabel = '<b>Accession Number</b>'; attribStruct.Strain.AttributeLabel = '<b>Viral Strain</b>'; attribStruct.SequenceLength.AttributeLabel = '<b>Sequence Length</b>'; attribStruct.Country.AttributeLabel = '<b>Country of Origin</b>'; attribStruct.Year.AttributeLabel = '<b>Year Isolated</b>'; attribStruct.Cluster.AttributeLabel = '<b>Cluster Membership</b>';
Напишите regionHA геоstruct в файл в формате KML во временной директории.
kmlDirectory = tempdir; filename = fullfile(kmlDirectory,'HA_geographic_locations.kml'); kmlwrite(filename,regionHA,'Description',attribStruct,'Name',{regionHA.Strain},... 'Icon','http://maps.google.com/mapfiles/kml/shapes/arrow.png','iconscale',1.5);
Можно отобразить файл KML в браузере Google Earth [6]. В системе должен быть установлен Google Earth. На платформах Windows ® отобразите файл KML с:
winopen(filename)
Для пользователей Unix и MAC отобразите файл KML с:
cmd = 'googleearth ';
fullfilename = fullfile(pwd, filename);
system([cmd fullfilename])
В данном примере файл KML ранее отображался с помощью Google Earth Pro. Изображение Google Earth затем сохранялось с помощью меню Google Earth «Файл - > Сохранить изображение». Так выглядят данные в вашем файле KML при загрузке в Google Earth. Чтобы получить это представление, перемещайтесь и масштабируйте область над Азией.

Щелкните значок, чтобы просмотреть информацию о последовательности. Номер доступа в каждой таблице данных является гиперссылкой на файл последовательности GenPept в базе данных белка NCBI.

Вы можете удалить новый файл KML из выходной директории KML.
delete(filename)
close all
[1] https://computationalgenomics.blogs.bristol.ac.uk/case_studies/birdflu_demo
[2] Laver, W.G., Bischofberger, N. and Webster, R.G., «Disarming Flu Viruses», Scientific American, 280 (1): 78-87, 1999.
[3] Suzuki, Y. and Masatoshi, N. «, Источник и эволюция генов гемагглютинина вируса гриппа», Молекулярная биология и эволюция, 19 (4): 501-9, 2002.
[4] Gambaryan, A., et al. «, Эволюция фенотипа связывания рецепторов вирусов гриппа A (H5)», Вирусология, 344 (2): 432-8, 2006.
[5] Cristianini, N. and Hahn, M.W., «Introduction to Computational Genomics: A Case Studies Approach», Cambridge University Press, 2007.
[6] Изображения Google Earth были получены с помощью Google Earth Pro. Для получения дополнительной информации о Google Earth и Google Earth Pro посетите http://earth.google.com/