Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IMP: migrate types/formats/transformers from types-genomics #309

Merged
merged 8 commits into from
Feb 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion ci/recipe/meta.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,12 @@ requirements:
- ijson
- h5py
- qiime2 {{ qiime2_epoch }}.*
- samtools

test:
commands:
- py.test --pyargs q2_types

requires:
- pytest
- qiime2 >={{ qiime2 }}
Expand Down
25 changes: 25 additions & 0 deletions q2_types/feature_data_mag/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# ----------------------------------------------------------------------------
# Copyright (c) 2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
# ----------------------------------------------------------------------------

import importlib

from ._format import (
MAGSequencesDirFmt,
OrthologAnnotationDirFmt,
OrthologFileFmt
)

from ._type import MAG, NOG, OG, KEGG
from ._transformer import MAGIterator

__all__ = [
'MAG', 'MAGSequencesDirFmt', 'MAGIterator', 'NOG', 'OG', 'KEGG',
'OrthologAnnotationDirFmt', 'OrthologFileFmt',
]

importlib.import_module('q2_types.feature_data._transformer')
78 changes: 78 additions & 0 deletions q2_types/feature_data_mag/_format.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# ----------------------------------------------------------------------------
# Copyright (c) 2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
# ----------------------------------------------------------------------------

import re

from q2_types.feature_data import DNAFASTAFormat
from q2_types.genome_data._format import OrthologFileFmt
from qiime2.plugin import model

from ..plugin_setup import plugin


class MAGSequencesDirFmt(model.DirectoryFormat):
pathspec = (
r"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-"
r"[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}\.(fa|fasta)$"
)

sequences = model.FileCollection(pathspec, format=DNAFASTAFormat)

@sequences.set_path_maker
def sequences_path_maker(self, mag_id):
return r'%s.fasta' % mag_id

def feature_dict(self, relative=False):
'''
Returns a mapping of mag id to filepath for each mag.

Parameters
---------
relative : bool
Whether to return filepaths relative to the directory's location.
Returns absolute filepaths by default.

Returns
-------
dict
Mapping of feature id -> filepath as described above. Sorted
alphabetically by key.
'''
pattern = re.compile(self.pathspec)
ids = {}
for path in self.path.iterdir():
if not pattern.match(path.name):
continue

id = path.stem
absolute_path = path.absolute()
if relative:
ids[id] = str(
absolute_path.relative_to(self.path.absolute())
)
else:
ids[id] = str(absolute_path)

return dict(sorted(ids.items()))


plugin.register_formats(MAGSequencesDirFmt)


class OrthologAnnotationDirFmt(model.DirectoryFormat):
annotations = model.FileCollection(
r'.+\.annotations',
format=OrthologFileFmt
)

@annotations.set_path_maker
def annotations_path_maker(self, file_name):
return file_name.split(sep="_")[0]


plugin.register_formats(OrthologAnnotationDirFmt)
91 changes: 91 additions & 0 deletions q2_types/feature_data_mag/_transformer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# ----------------------------------------------------------------------------
# Copyright (c) 2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
# ----------------------------------------------------------------------------

import collections.abc
import glob
import os.path
from itertools import repeat

import pandas as pd
import skbio
from q2_types.feature_data._transformer import _fastaformats_to_series

from . import MAGSequencesDirFmt
from ..plugin_setup import plugin

CONSTRUCTORS = {
'DNA': skbio.DNA,
'RNA': skbio.RNA,
'protein': skbio.Protein
}


def _get_filename(full_path):
return os.path.splitext(os.path.basename(full_path))[0]


def _series_to_fasta(series, ff, seq_type='DNA'):
fp = os.path.join(str(ff), f'{series.name}.fasta')
with open(fp, 'w') as fh:
for id_, seq in series.iteritems():
if seq:
sequence = CONSTRUCTORS[seq_type](seq, metadata={'id': id_})
skbio.io.write(sequence, format='fasta', into=fh)


def _fastafiles_to_dataframe(ff):
data = {}
for fp in sorted(glob.glob(os.path.join(str(ff), '*.fa*'))):
fname = _get_filename(fp)
data[fname] = _fastaformats_to_series(fp, constructor=skbio.DNA)
df = pd.DataFrame.from_dict(data, orient='index')
df.index.name = 'Feature ID'
df = df.astype(str).replace({'nan': None})
return df


@plugin.register_transformer
def _2(ff: MAGSequencesDirFmt) -> pd.DataFrame:
return _fastafiles_to_dataframe(ff)


@plugin.register_transformer
def _3(df: pd.DataFrame) -> MAGSequencesDirFmt:
result = MAGSequencesDirFmt()
df.apply(_series_to_fasta, axis=1, ff=result, seq_type='DNA')
return result


class MAGIterator(collections.abc.Iterable):
def __init__(self, generator):
self.generator = generator

def __iter__(self):
yield from self.generator


@plugin.register_transformer
def _4(ff: MAGSequencesDirFmt) -> MAGIterator:
def _multi_generator(files):
for fp in files:
fname = _get_filename(fp)
fg = skbio.read(fp, format='fasta', constructor=skbio.DNA)
yield from zip(repeat(fname), fg)

fps = sorted(glob.glob(os.path.join(str(ff), '*.fa*')))
return MAGIterator(_multi_generator(fps))


@plugin.register_transformer
def _5(data: MAGIterator) -> MAGSequencesDirFmt:
result = MAGSequencesDirFmt()
for fn, seq in data:
fp = os.path.join(str(result), f'{fn}.fasta')
with open(fp, 'a') as fin:
skbio.io.write(seq, format='fasta', into=fin)
return result
48 changes: 48 additions & 0 deletions q2_types/feature_data_mag/_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# ----------------------------------------------------------------------------
# Copyright (c) 2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
# ----------------------------------------------------------------------------

from q2_types.feature_data import FeatureData

from q2_types.feature_data_mag._format import (
MAGSequencesDirFmt, OrthologAnnotationDirFmt
)
from qiime2.core.type import SemanticType

from ..plugin_setup import plugin


MAG = SemanticType('MAG', variant_of=FeatureData.field['type'])

plugin.register_semantic_types(MAG)
plugin.register_semantic_type_to_format(
FeatureData[MAG],
artifact_format=MAGSequencesDirFmt
)

NOG = SemanticType('NOG', variant_of=FeatureData.field['type'])

plugin.register_semantic_types(NOG)
plugin.register_artifact_class(
FeatureData[NOG],
directory_format=OrthologAnnotationDirFmt)


OG = SemanticType('OG', variant_of=FeatureData.field['type'])

plugin.register_semantic_types(OG)
plugin.register_artifact_class(
FeatureData[OG],
directory_format=OrthologAnnotationDirFmt)


KEGG = SemanticType('KEGG', variant_of=FeatureData.field['type'])

plugin.register_semantic_types(KEGG)
plugin.register_artifact_class(
FeatureData[KEGG],
directory_format=OrthologAnnotationDirFmt)
7 changes: 7 additions & 0 deletions q2_types/feature_data_mag/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# ----------------------------------------------------------------------------
# Copyright (c) 2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
# ----------------------------------------------------------------------------
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
1000565.METUNv1_03812 1000565.METUNv1_03812 4.71e-264 714.0 COG0012@1|root,COG0012@2|Bacteria,1MVM4@1224|Proteobacteria,2VJ1W@28216|Betaproteobacteria,2KUD2@206389|Rhodocyclales 206389|Rhodocyclales J ATPase that binds to both the 70S ribosome and the 50S ribosomal subunit in a nucleotide-independent manner ychF - - ko:K06942 - - - - ko00000,ko03009 - - - MMR_HSR1,YchF-GTPase_C
362663.ECP_0061 362663.ECP_0061 0.0 1624.0 COG0417@1|root,COG0417@2|Bacteria,1MVY9@1224|Proteobacteria,1RMQ1@1236|Gammaproteobacteria,3XPER@561|Escherichia 1236|Gammaproteobacteria L DNA polymerase polB GO:0003674,GO:0003824,GO:0003887,GO:0004518,GO:0004527,GO:0004529,GO:0004536,GO:0006139,GO:0006259,GO:0006260,GO:0006261,GO:0006281,GO:0006725,GO:0006807,GO:0006950,GO:0006974,GO:0007154,GO:0008150,GO:0008152,GO:0008296,GO:0008408,GO:0009058,GO:0009059,GO:0009432,GO:0009605,GO:0009987,GO:0009991,GO:0016740,GO:0016772,GO:0016779,GO:0016787,GO:0016788,GO:0016796,GO:0016895,GO:0018130,GO:0019438,GO:0031668,GO:0033554,GO:0034061,GO:0034641,GO:0034645,GO:0034654,GO:0043170,GO:0044237,GO:0044238,GO:0044249,GO:0044260,GO:0044271,GO:0045004,GO:0045005,GO:0046483,GO:0050896,GO:0051716,GO:0071496,GO:0071704,GO:0071897,GO:0090304,GO:0090305,GO:0140097,GO:1901360,GO:1901362,GO:1901576 2.7.7.7 ko:K02336 - - - - ko00000,ko01000,ko03400 - - - DNA_pol_B,DNA_pol_B_exo1
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
>k129_5480
TTATTTTCAAGATAATGAGCCAATTTAAGCGGTGTCTGGCCGCCAAGCTGCACGATCACA
CCTTTAA
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
>k129_5112
CCCCGGAAAGGGCTGGCGACCGACGATGACCTCGGGAAGCCCCAACTCGCGGCCGATGGC
GCGTACCTCGTC
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
>k129_6525
AAACTCTATCAAGCGTATACCAAAGTGAGTGGTGTATTGATCAGTCAGCTCATTATTGAA
TCGGA
>k129_6531
TCGGATTTGCCGAATGCTTTTTGTAAGGGCCTTCAATTGATTTGGCGATAGCGAGCCCGT
ATTTACGGT
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
>k129_5401
CCATTGTATGTCTTTAGGTAGCTCCTCATGTTTGAGGTTCATGTCTTGGATTTTGTTTTC
TCCAAAAATC
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
>k129_4684
TGATACCGACGCGGCACTTGAGTGCGCGCTATCCTTCAAGGAAGCCACATGCGTTATTGT
TAAACA
>k129_5618
GTGCTAATCGCACCCTCATGAGCGACACCATTATTCTTTATTTTTGAGTCTTCAGCAAAA
>k129_5631
TCATGATGATCCAAAAGCAGTTGCGGAAGCATCTGGGATAATTACGCGGAGTGGATGTCG
CCG
>k129_2817
GTCGCCAATTAGCAACTATGATGTCTTCTGGAGTACCTTTGGTCCAATCATTTGAAATCA
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
1000565.METUNv1_03812 1000565.METUNv1_03812 4.71e-264 714.0 COG0012@1|root,COG0012@2|Bacteria,1MVM4@1224|Proteobacteria,2VJ1W@28216|Betaproteobacteria,2KUD2@206389|Rhodocyclales 206389|Rhodocyclales J ATPase that binds to both the 70S ribosome and the 50S ribosomal subunit in a nucleotide-independent manner ychF - - ko:K06942 - - - - ko00000,ko03009 - - - MMR_HSR1,YchF-GTPase_C
362663.ECP_0061 362663.ECP_0061 0.0 1624.0 COG0417@1|root,COG0417@2|Bacteria,1MVY9@1224|Proteobacteria,1RMQ1@1236|Gammaproteobacteria,3XPER@561|Escherichia 1236|Gammaproteobacteria L DNA polymerase polB GO:0003674,GO:0003824,GO:0003887,GO:0004518,GO:0004527,GO:0004529,GO:0004536,GO:0006139,GO:0006259,GO:0006260,GO:0006261,GO:0006281,GO:0006725,GO:0006807,GO:0006950,GO:0006974,GO:0007154,GO:0008150,GO:0008152,GO:0008296,GO:0008408,GO:0009058,GO:0009059,GO:0009432,GO:0009605,GO:0009987,GO:0009991,GO:0016740,GO:0016772,GO:0016779,GO:0016787,GO:0016788,GO:0016796,GO:0016895,GO:0018130,GO:0019438,GO:0031668,GO:0033554,GO:0034061,GO:0034641,GO:0034645,GO:0034654,GO:0043170,GO:0044237,GO:0044238,GO:0044249,GO:0044260,GO:0044271,GO:0045004,GO:0045005,GO:0046483,GO:0050896,GO:0051716,GO:0071496,GO:0071704,GO:0071897,GO:0090304,GO:0090305,GO:0140097,GO:1901360,GO:1901362,GO:1901576 2.7.7.7 ko:K02336 - - - - ko00000,ko01000,ko03400 - - - DNA_pol_B,DNA_pol_B_exo1
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
1000565.METUNv1_03812 1000565.METUNv1_03812,1121035.AUCH01000015_gene2548,1123367.C666_07595,1123487.KB892857_gene2312,1304883.KI912532_gene1239,1348657.M622_06940,159087.Daro_3733,305700.B447_07764,497321.C664_16088,62928.azo0752,640081.Dsui_1039,748247.AZKH_0690,76114.ebA4139,85643.Tmz1t_3631
362663.ECP_0061 1001530.BACE01000011_gene2341,1001585.MDS_3838,1004785.AMBLS11_15500,1005395.CSV86_15315,1005994.GTGU_01680,1005995.GTPT_1156,1005999.GLGR_2221,1006000.GKAS_03113,1006004.GBAG_3457,1027273.GZ77_06950,1027273.GZ77_06975,1028307.EAE_11080,1038922.PflQ2_3424,1042209.HK44_015680,1042375.AFPL01000045_gene1053,1042375.AFPL01000051_gene192,1042377.AFPJ01000007_gene1879,1042876.PPS_1981,1045856.EcWSU1_00673,104623.Ser39006_03906,1046714.AMRX01000001_gene1551,1051646.VITU9109_20279,1056512.D515_04005,1073999.BN137_3094,1076550.LH22_19005,1080067.BAZH01000004_gene4111,1082705.JIBP01000020_gene1660,1085623.GNIT_0082,1109445.AGSX01000022_gene1619,1109445.AGSX01000023_gene1794,1111728.ATYS01000002_gene2032,1112217.PPL19_23878,1114922.CIFAM_14_00570,1114970.PSF113_3842,1115512.EH105704_02_03110,1115515.EV102420_08_02570,1116375.VEJY3_10210,1117314.PCIT_16365,1117315.AHCA01000002_gene3366,1117318.PRUB_20823,1117319.PSPO_10129,1117647.M5M_09500,1117958.PE143B_0119780,1120953.AUBH01000004_gene3192,1120963.KB894506_gene3814,1120970.AUBZ01000052_gene2919,1121374.KB891591_gene3511,1121878.AUGL01000024_gene3733,1121921.KB898710_gene523,1121935.AQXX01000142_gene2202,1121937.AUHJ01000011_gene2966,1121939.L861_00110,1121943.KB899993_gene35,1122201.AUAZ01000003_gene1977,1122207.MUS1_09280,1122599.AUGR01000012_gene874,1123020.AUIE01000047_gene1779,1123228.AUIH01000013_gene228,1123236.KB899382_gene2208,1123519.PSJM300_10125,1124983.PFLCHA0_c25450,1124991.MU9_896,1127673.GLIP_3806,1128912.GMES_0635,1129794.C427_0719,1134474.O59_003286,1136138.JH604622_gene2217,1136163.M565_ctg1P0716,1137799.GZ78_23460,1141662.OOA_13757,1141663.OOC_06427,1144325.PMI22_02075,1149133.ppKF707_3157,1151116.Q7S_19140,1151127.KB906326_gene533,1163398.AJJP01000153_gene3010,1163398.AJJP01000154_gene2728,1166016.W5S_3969,1166130.H650_19135,1166948.JPZL01000001_gene2228,1179778.PMM47T1_15041,1182590.BN5_03028,1187848.AJYQ01000080_gene1281,1188252.AJYK01000104_gene18,1190603.AJYD01000005_gene4046,1190606.AJYG01000064_gene1318,1191299.AJYX01000010_gene534,1196835.A458_14590,1197719.A464_88,1197719.A464_89,1201293.AKXQ01000005_gene187,1202962.KB907152_gene1129,1205683.CAKR01000014_gene261,1205908.AKXW01000045_gene3571,1206777.B195_15802,1207075.PputUW4_01630,1207076.ALAT01000047_gene3451,1207076.ALAT01000076_gene1696,1208321.D104_17215,1209072.ALBT01000065_gene1128,1211112.ALJC01000025_gene3695,1211579.PP4_34220,1212548.B381_10908,1214065.BAGV01000052_gene1889,1215092.PA6_033_00130,1215114.BBIU01000009_gene1489,1216007.AOPM01000111_gene322,1216966.BAUC01000023_gene1579,1218086.BBNB01000010_gene760,1218352.B597_008110,1219065.VPR01S_08_00960,1219072.VHA01S_049_00040,1219076.N646_1029,1219077.VAZ01S_024_00390,1219080.VEZ01S_14_00060,1221522.B723_22150,1224136.AMFN01000004_gene1724,1224318.DT73_07600,1225184.ALXE01000004_gene139,1225785.CM001983_gene2995,1226994.AMZB01000058_gene5029,1229485.AMYV01000161_gene1756,1232683.ADIMK_2705,1236541.BALL01000005_gene907,1236542.BALM01000018_gene1511,1238450.VIBNISOn1_1710005,1240350.AMZE01000004_gene2404,1245471.PCA10_33960,1248232.BANQ01000035_gene3916,1249634.D781_0685,1265490.JHVY01000003_gene3179,1265503.KB905165_gene1170,1267600.JFGT01000005_gene2743,1268068.PG5_19750,1268237.G114_12253,1268239.PALB_26410,1278307.KB906974_gene1764,1278309.KB907099_gene2467,1279015.KB908456_gene1623,1280001.BAOA01000128_gene1213,1282356.H045_05955,1283284.AZUK01000001_gene515,1286170.RORB6_14920,1294143.H681_11200,1298593.TOL_2986,1298865.H978DRAFT_0156,1301098.PKB_1141,1307437.J139_01197,1316927.ATKI01000146_gene923,1328313.DS2_18293,1333507.AUTQ01000175_gene1502,1333856.L686_02350,1336233.JAEH01000026_gene973,1336237.JAEE01000001_gene1943,1344012.ATMI01000002_gene1472,1348114.OM33_12680,1348635.BBJY01000017_gene4157,1357272.AVEO02000138_gene691,1357275.AVEL02000076_gene2015,1357279.N018_15585,1388763.O165_013170,1390370.O203_23445,1395516.PMO01_16945,1395571.TMS3_0100805,1397284.AYMN01000025_gene4216,1399774.JDWH01000001_gene2409,1410619.SRDD_35890,1415630.U771_10760,1419583.V466_14160,1437882.AZRU01000027_gene839,1437882.AZRU01000027_gene840,1439940.BAY1663_04623,1440052.EAKF1_ch1361,1441629.PCH70_24170,1441930.Z042_17410,1443113.LC20_04540,1443113.LC20_04541,1448139.AI20_07565,1453496.AT03_18325,1453501.JELR01000001_gene2440,1453503.AU05_13350,1454202.PPBDW_130199___1,1469245.JFBG01000054_gene2118,1470593.BW43_03461,1484157.PSNIH2_14570,1484158.PSNIH1_08275,1488328.JMCL01000179_gene3609,1492922.GY26_06990,1499686.BN1079_00467,1500890.JQNL01000001_gene2109,1500893.JQNB01000001_gene1060,1515746.HR45_05935,1517681.HW45_07820,1523503.JPMY01000010_gene2641,1524467.IV04_00325,1535422.ND16A_0750,1537994.JQFW01000056_gene934,155864.EDL933_0062,1565129.JSFF01000001_gene1169,156578.ATW7_09016,156578.ATW7_09021,157783.LK03_16860,1577887.JSYG01000001_gene667,158822.LH89_15865,160488.PP_2393,198214.SF0055,198628.Dda3937_01373,199310.c0071,203122.Sde_1511,205918.Psyr_2361,205922.Pfl01_3734,207954.MED92_02394,211586.SO_1820,214092.YPO0518,216142.LT40_12375,216595.PFLU_2067,218491.ECA3852,218493.SBG_0085,220341.16501382,220664.PFL_2480,223283.PSPTO_2621,223926.28806938,225849.swp_3211,234831.PSM_A2035,237609.PSAKL28_32080,243277.VC_1212,247633.GP2143_14671,247634.GPB2148_2486,264730.PSPPH_2495,273526.SMDB11_0043,28152.DJ57_2731,28229.ND2E_3600,28258.KP05_04835,283699.D172_3177,287.DR97_5961,29486.NJ56_03155,29495.EA26_06645,298386.PBPRA1531,301.JNHE01000034_gene4200,305900.GV64_17865,312309.VF_1628,314275.MADE_1016665,314282.PCNPT3_06855,314292.VAS14_03703,316275.VSAL_I2142,316407.85674307,318161.Sden_2428,318167.Sfri_2629,319224.Sputcn32_1514,32042.PstZobell_08221,321846.PS417_09565,323850.Shew_2482,326297.Sama_1250,326442.PSHAa1990,342610.Patl_3630,345073.VC395_1331,349521.HCH_01557,349965.yinte0001_42170,349965.yinte0001_42180,349966.DJ58_1292,351746.Pput_3302,35703.DQ02_16995,357804.Ping_1857,362663.ECP_0061,371042.NG99_21800,379731.PST_2786,380703.AHA_2107,382245.ASA_2190,384676.PSEEN3365,390235.PputW619_1903,392500.Swoo_3085,393305.YE0637,398579.Spea_2655,399739.Pmen_3572,399741.Spro_0731,399742.Ent638_0607,400668.Mmwyl1_2210,406817.XNC1_4058,406818.XBJ1_1795,425104.Ssed_1567,42565.FP66_08165,440512.C211_04698,458817.Shal_2729,465817.ETA_07310,469008.B21_00061,469595.CSAG_03356,471874.PROSTU_01143,471881.PROPEN_00979,471881.PROPEN_00980,471881.PROPEN_00981,477228.YO5_10215,481805.EcolC_3597,491952.Mar181_1745,493475.GARC_4665,498211.CJA_2886,500637.PROVRUST_06038,500640.CIT292_09418,502347.ESCAB7627_3201,511062.GU3_08445,511145.b0060,517433.PanABDRAFT_1681,520999.PROVALCAL_02276,521000.PROVRETT_06774,527002.yaldo0001_28460,529507.PMI2327,549.BW31_03194,550540.Fbal_1160,55207.KP22_11025,553385.JEMF01000001_gene570,55601.VANGNB10_cI1556,558884.JRGM01000153_gene949,561229.Dd1591_0570,561230.PC1_3628,561231.Pecwa_3819,568768.CM001975_gene3021,571.MC52_12495,573.JG24_29705,575788.VS_1957,579405.Dd703_0609,585.DR95_2445,587753.EY04_11270,589873.EP13_15875,590409.Dd586_3566,592316.Pat9b_0640,593105.S7A_15715,595494.Tola_2147,598467.BrE312_0653,61647.LG71_24775,617140.AJZE01000124_gene2547,629265.PMA4326_20105,630626.EBL_c32930,633.DJ40_1710,634499.EpC_07180,634500.EbC_06980,637905.SVI_2972,637910.ROD_00651,640513.Entas_0660,642227.HA49_19235,644801.Psest_1519,658612.MD26_00790,66269.NL54_08390,665029.EAMY_2919,667121.ET1_10_00490,672.VV93_v1c11490,674977.VMC_25520,674977.VMC_25530,675806.VII_002578,675812.VHA_002685,675813.VIB_001445,675814.VIC_004442,675815.VOA_000407,675816.VIA_002663,675817.VDA_002186,690597.JH730923_gene1694,690597.JH730923_gene1695,69328.PVLB_14735,693444.D782_3810,701176.VIBRN418_07876,701347.Entcl_3665,706191.PANA_0690,712898.Pvag_0098,715451.ambt_00830,716541.ECL_00856,717774.Marme_2143,722419.PH505_ad00150,741091.Rahaq_3758,743720.Psefu_4133,745277.GRAQ_02860,745411.B3C1_16722,754331.AEME01000001_gene2079,754436.JCM19237_4567,754436.JCM19237_4568,754436.JCM19237_4569,76869.PputGB1_1999,78398.KS43_07875,796620.VIBC2010_15254,82995.CR62_04670,82996.sch_03475,870967.VIS19158_15604,87626.PTD2_10919,891974.E05_44490,891974.E05_44500,891974.E05_44510,90371.CY43_00480,910964.GEAM_0249,911008.GLAD_03089,911239.CF149_11719,930166.CD58_19980,932213.SPM24T3_00530,932677.PAJ_0037,94122.Shewana3_2629,945543.VIBR0546_10799,945550.VISI1226_06239,95619.PM1_0216955,983545.Glaag_3623,998088.B565_1731,998674.ATTE01000001_gene309
Loading
Loading