Merge branch 'release_15.03' of https://github.com/galaxyproject/galaxy into release_15.03

This commit is contained in:
guerler
2015-02-28 01:36:21 -05:00
14 changed files with 155 additions and 52 deletions
+1 -1
View File
@@ -180,7 +180,7 @@
<datatype extension="scf" type="galaxy.datatypes.binary:Scf" mimetype="application/octet-stream" display_in_upload="true" description="A binary sequence file in 'scf' format with a '.scf' file extension. You must manually select this 'File Format' when uploading the file." description_url="https://wiki.galaxyproject.org/Learn/Datatypes#Scf"/>
<datatype extension="Sequences" type="galaxy.datatypes.assembly:Sequences" display_in_upload="false"/>
<datatype extension="snpeffdb" type="galaxy.datatypes.text:SnpEffDb" display_in_upload="True"/>
<datatype extension="snpsiftdbnsfp" type="galaxy.datatypes.txt:SnpSiftDbNSFP" display_in_upload="True"/>
<datatype extension="snpsiftdbnsfp" type="galaxy.datatypes.text:SnpSiftDbNSFP" display_in_upload="True"/>
<datatype extension="dbnsfp.tabular" type="galaxy.datatypes.tabular:Tabular" subclass="True" display_in_upload="True">
<converter file="tabular_to_dbnsfp.xml" target_datatype="snpsiftdbnsfp"/>
</datatype>
+5
View File
@@ -65,4 +65,9 @@
<columns>value, path</columns>
<file path="tool-data/twobit.loc" />
</table>
<!-- Available IGV builds, loaded from URL -->
<table name="igv_broad_genomes" comment_char="#">
<columns>name, url, value</columns>
<file url="http://igv.broadinstitute.org/genomes/genomes.txt" />
</table>
</tables>
+14 -1
View File
@@ -93,7 +93,20 @@
#end if
</param>
</dynamic_links>
<dynamic_links from_data_table="igv_broad_genomes" skip_startswith="#" id="value" name="name">
<!-- Our input data table is one line per dbkey -->
<filter>${ $dataset.dbkey == $value }</filter>
<!-- We define url and params as normal, but values defined in dynamic_param are available by specified name -->
<url>http://www.broadinstitute.org/igv/projects/current/igv.php?sessionURL=${bam_file.qp}&amp;genome=${bam_file.dbkey}&amp;merge=true&amp;name=${qp( $bam_file.name )}</url>
<param type="data" name="bam_file" url="galaxy_${DATASET_HASH}.bam" />
<param type="data" name="bai_file" url="galaxy_${DATASET_HASH}.bam.bai" metadata="bam_index" />
</dynamic_links>
</display>
<!-- Dan Blankenberg -->
+14 -1
View File
@@ -93,7 +93,20 @@
#end if
</param>
</dynamic_links>
<dynamic_links from_data_table="igv_broad_genomes" skip_startswith="#" id="value" name="name">
<!-- Our input data table is one line per dbkey -->
<filter>${ $dataset.dbkey == $value }</filter>
<!-- We define url and params as normal, but values defined in dynamic_param are available by specified name -->
<url>http://www.broadinstitute.org/igv/projects/current/igv.php?sessionURL=${bgzip_file.qp}&amp;genome=$bgzip_file.dbkey&amp;merge=true&amp;name=${qp( $bgzip_file.name )}</url>
<param type="data" name="bgzip_file" url="galaxy_${DATASET_HASH}.vcf.gz" format="vcf_bgzip" />
<param type="data" name="tabix_file" dataset="bgzip_file" url="galaxy_${DATASET_HASH}.vcf.gz.tbi" format="tabix" />
</dynamic_links>
</display>
<!-- Dan Blankenberg -->
+1 -1
View File
@@ -88,7 +88,7 @@ class UniverseApplication( object, config.ConfiguresGalaxyMixin ):
# Load proprietary datatype converters and display applications.
self.installed_repository_manager.load_proprietary_converters_and_display_applications()
# Load datatype display applications defined in local datatypes_conf.xml
self.datatypes_registry.load_display_applications()
self.datatypes_registry.load_display_applications( self )
# Load datatype converters defined in local datatypes_conf.xml
self.datatypes_registry.load_datatype_converters( self.toolbox )
# Load external metadata tool
@@ -80,21 +80,57 @@ class DisplayApplicationLink( object ):
return True
class DynamicDisplayApplicationBuilder( object ):
@classmethod
def __init__( self, elem, display_application, build_sites ):
rval = []
filename = None
data_table = None
if elem.get( 'site_type', None ) is not None:
filename = build_sites.get( elem.get( 'site_type' ) )
else:
filename = elem.get( 'from_file', None )
assert filename is not None, 'Filename and id attributes required for dynamic_links'
if filename is None:
data_table_name = elem.get( 'from_data_table', None )
if data_table_name:
data_table = display_application.app.tool_data_tables.get( data_table_name, None )
assert data_table is not None, 'Unable to find data table named "%s".' % data_table_name
assert filename is not None or data_table is not None,'Filename or data Table is required for dynamic_links.'
skip_startswith = elem.get( 'skip_startswith', None )
separator = elem.get( 'separator', '\t' )
id_col = int( elem.get( 'id', None ) )
name_col = int( elem.get( 'name', id_col ) )
dynamic_params = {}
id_col = elem.get( 'id', None )
try:
id_col = int( id_col )
except:
if data_table:
if id_col is None:
id_col = data_table.columns.get( 'id', None )
if id_col is None:
id_col = data_table.columns.get( 'value', None )
try:
id_col = int( id_col )
except:
# id is set to a string or None, use column by that name if available
id_col = data_table.columns.get( id_col, None )
id_col = int( id_col )
name_col = elem.get( 'name', None )
try:
name_col = int( name_col )
except:
if data_table:
if name_col is None:
name_col = data_table.columns.get( 'name', None )
else:
name_col = data_table.columns.get( name_col, None )
else:
name_col = None
if name_col is None:
name_col = id_col
max_col = max( id_col, name_col )
dynamic_params = {}
if data_table is not None:
max_col = max( [ max_col ] + data_table.columns.values() )
for key, value in data_table.columns.items():
dynamic_params[key] = { 'column': value, 'split': False, 'separator': ',' }
for dynamic_param in elem.findall( 'dynamic_param' ):
name = dynamic_param.get( 'name' )
value = int( dynamic_param.get( 'value' ) )
@@ -102,27 +138,38 @@ class DynamicDisplayApplicationBuilder( object ):
param_separator = dynamic_param.get( 'separator', ',' )
max_col = max( max_col, value )
dynamic_params[name] = { 'column': value, 'split': split, 'separator': param_separator }
for line in open( filename ):
if not skip_startswith or not line.startswith( skip_startswith ):
line = line.rstrip( '\n\r' )
if not line:
continue
fields = line.split( separator )
if len( fields ) > max_col:
new_elem = deepcopy( elem )
new_elem.set( 'id', fields[id_col] )
new_elem.set( 'name', fields[name_col] )
dynamic_values = {}
for key, attributes in dynamic_params.iteritems():
value = fields[ attributes[ 'column' ] ]
if attributes['split']:
value = value.split( attributes['separator'] )
dynamic_values[key] = value
#now populate
rval.append( DisplayApplicationLink.from_elem( new_elem, display_application, other_values = dynamic_values ) )
if filename:
data_iter = open( filename )
elif data_table:
version, data_iter = data_table.get_version_fields()
display_application.add_data_table_watch( data_table.name, version )
links = []
for line in data_iter:
if isinstance( line, basestring ):
if not skip_startswith or not line.startswith( skip_startswith ):
line = line.rstrip( '\n\r' )
if not line:
continue
fields = line.split( separator )
else:
log.warning( 'Invalid dynamic display application link specified in %s: "%s"' % ( filename, line ) )
self.links = rval
continue
else:
fields = line
if len( fields ) > max_col:
new_elem = deepcopy( elem )
new_elem.set( 'id', fields[id_col] )
new_elem.set( 'name', fields[name_col] )
dynamic_values = {}
for key, attributes in dynamic_params.iteritems():
value = fields[ attributes[ 'column' ] ]
if attributes['split']:
value = value.split( attributes['separator'] )
dynamic_values[key] = value
#now populate
links.append( DisplayApplicationLink.from_elem( new_elem, display_application, other_values = dynamic_values ) )
else:
log.warning( 'Invalid dynamic display application link specified in %s: "%s"' % ( filename, line ) )
self.links = links
def __iter__( self ):
return iter( self.links )
@@ -166,12 +213,12 @@ class PopulatedDisplayApplicationLink( object ):
class DisplayApplication( object ):
@classmethod
def from_file( cls, filename, datatypes_registry ):
return cls.from_elem( parse_xml( filename ).getroot(), datatypes_registry, filename=filename )
def from_file( cls, filename, app ):
return cls.from_elem( parse_xml( filename ).getroot(), app, filename=filename )
@classmethod
def from_elem( cls, elem, datatypes_registry, filename=None ):
def from_elem( cls, elem, app, filename=None ):
att_dict = cls._get_attributes_from_elem( elem )
rval = DisplayApplication( att_dict['id'], att_dict['name'], datatypes_registry, att_dict['version'], filename=filename, elem=elem )
rval = DisplayApplication( att_dict['id'], att_dict['name'], app, att_dict['version'], filename=filename, elem=elem )
rval._load_links_from_elem( elem )
return rval
@classmethod
@@ -181,29 +228,32 @@ class DisplayApplication( object ):
name = elem.get( 'name', display_id )
version = elem.get( 'version', None )
return dict( id=display_id, name=name, version=version )
def __init__( self, display_id, name, datatypes_registry, version = None, filename=None, elem=None ):
def __init__( self, display_id, name, app, version = None, filename=None, elem=None ):
self.id = display_id
self.name = name
self.datatypes_registry = datatypes_registry
self.app = app
if version is None:
version = "1.0.0"
self.version = version
self.links = odict()
self._filename = filename
self._elem = elem
self._data_table_versions = {}
def _load_links_from_elem( self, elem ):
for link_elem in elem.findall( 'link' ):
link = DisplayApplicationLink.from_elem( link_elem, self )
if link:
self.links[ link.id ] = link
for dynamic_links in elem.findall( 'dynamic_links' ):
for link in DynamicDisplayApplicationBuilder( dynamic_links, self, self.datatypes_registry.build_sites ):
for link in DynamicDisplayApplicationBuilder( dynamic_links, self, self.app.datatypes_registry.build_sites ):
self.links[ link.id ] = link
def get_link( self, link_name, data, dataset_hash, user_hash, trans, app_kwds ):
#returns a link object with data knowledge to generate links
self._check_and_reload()
return PopulatedDisplayApplicationLink( self.links[ link_name ], data, dataset_hash, user_hash, trans, app_kwds )
def filter_by_dataset( self, data, trans ):
filtered = DisplayApplication( self.id, self.name, self.datatypes_registry, version = self.version )
self._check_and_reload()
filtered = DisplayApplication( self.id, self.name, self.app, version = self.version )
for link_name, link_value in self.links.iteritems():
if link_value.filter_by_dataset( data, trans ):
filtered.links[link_name] = link_value
@@ -222,9 +272,24 @@ class DisplayApplication( object ):
# clear old links
for key in self.links.keys():
del self.links[key]
#clear data table versions:
for key in self._data_table_versions.keys():
del self._data_table_versions[ key ]
# Set new attributes
for key, value in attr_dict.iteritems():
setattr( self, key, value )
# Load new links
self._load_links_from_elem( elem )
return self
def add_data_table_watch( self, table_name, version=None ):
self._data_table_versions[ table_name ] = version
def _requires_reload( self ):
for key, value in self._data_table_versions.iteritems():
table = self.app.tool_data_tables.get( key, None )
if table and not table.is_current_version( value ):
return True
return False
def _check_and_reload( self ):
if self._requires_reload():
self.reload()
@@ -59,7 +59,7 @@ class DisplayApplicationDataParameter( DisplayApplicationParameter ):
@property
def formats( self ):
if self.extensions:
return tuple( map( type, map( self.link.display_application.datatypes_registry.get_datatype_by_extension, self.extensions ) ) )
return tuple( map( type, map( self.link.display_application.app.datatypes_registry.get_datatype_by_extension, self.extensions ) ) )
return None
def _get_dataset_like_object( self, other_values ):
#this returned object has file_name, state, and states attributes equivalent to a DatasetAssociation
+2 -2
View File
@@ -546,7 +546,7 @@ class Registry( object ):
else:
self.log.exception( "Error loading converter (%s): %s" % ( converter_path, str( e ) ) )
def load_display_applications( self, installed_repository_dict=None, deactivate=False ):
def load_display_applications( self, app, installed_repository_dict=None, deactivate=False ):
"""
If deactivate is False, add display applications from self.display_app_containers or
self.proprietary_display_app_containers to appropriate datatypes. If deactivate is
@@ -570,7 +570,7 @@ class Registry( object ):
config_path = os.path.join( self.display_applications_path, display_file )
try:
inherit = galaxy.util.string_as_bool( display_app.get( 'inherit', 'False' ) )
display_app = DisplayApplication.from_file( config_path, self )
display_app = DisplayApplication.from_file( config_path, app )
if display_app:
if display_app.id in self.display_applications:
if deactivate:
+5 -1
View File
@@ -1,5 +1,7 @@
import sys
import config
import sys
import time
import galaxy.model
from galaxy.web import security
@@ -26,6 +28,8 @@ class UniverseApplication( object ):
self.targets_mysql = 'mysql' in self.config.database_connection
# Security helper
self.security = security.SecurityHelper( id_secret=self.config.id_secret )
# used for cachebusting -- refactor this into a *SINGLE* UniverseApplication base.
self.server_starttime = int(time.time())
def shutdown( self ):
pass
+8 -5
View File
@@ -1,17 +1,18 @@
import config
import sys
from galaxy import tools
import galaxy.tools.data
import galaxy.quota
import time
import galaxy.datatypes.registry
import galaxy.quota
import galaxy.tools.data
import galaxy.webapps.tool_shed.model
from galaxy import tools
from galaxy.managers.tags import CommunityTagManager
from galaxy.openid.providers import OpenIDProviders
from galaxy.util.dbkeys import GenomeBuilds
from galaxy.web import security
from galaxy.managers.tags import CommunityTagManager
from tool_shed.grids.repository_grid_filter_manager import RepositoryGridFilterManager
import tool_shed.repository_registry
import tool_shed.repository_types.registry
from tool_shed.grids.repository_grid_filter_manager import RepositoryGridFilterManager
class UniverseApplication( object ):
@@ -70,6 +71,8 @@ class UniverseApplication( object ):
self.hgweb_config_manager.hgweb_config_dir = self.config.hgweb_config_dir
# Initialize the repository registry.
self.repository_registry = tool_shed.repository_registry.Registry( self )
# used for cachebusting -- refactor this into a *SINGLE* UniverseApplication base.
self.server_starttime = int(time.time())
print >> sys.stderr, "Tool shed hgweb.config file is: ", self.hgweb_config_manager.hgweb_config
def shutdown( self ):
@@ -214,5 +214,5 @@ class CustomDatatypeLoader( object ):
def load_installed_display_applications( self, installed_repository_dict, deactivate=False ):
"""Load or deactivate custom datatype display applications."""
self.app.datatypes_registry.load_display_applications( installed_repository_dict=installed_repository_dict,
self.app.datatypes_registry.load_display_applications( self.app, installed_repository_dict=installed_repository_dict,
deactivate=deactivate )
@@ -621,7 +621,7 @@ class InstallRepositoryManager( object ):
self.app.datatypes_registry.load_datatype_converters( self.app.toolbox, installed_repository_dict=repository_dict )
if display_path:
# Load proprietary datatype display applications
self.app.datatypes_registry.load_display_applications( installed_repository_dict=repository_dict )
self.app.datatypes_registry.load_display_applications( self.app, installed_repository_dict=repository_dict )
def handle_tool_shed_repositories( self, installation_dict, using_api=False ):
# The following installation_dict entries are all required.
@@ -523,7 +523,7 @@ class ToolMigrationManager( object ):
installed_repository_dict=repository_dict )
if display_path:
# Load proprietary datatype display applications
self.app.datatypes_registry.load_display_applications( installed_repository_dict=repository_dict )
self.app.datatypes_registry.load_display_applications( self.app, installed_repository_dict=repository_dict )
basic_util.remove_dir( work_dir )
def install_repository( self, repository_elem, tool_shed_repository, install_dependencies, is_repository_dependency=False ):
@@ -1,4 +1,4 @@
#site_id site_name site_url dbkey ivg_build_name
web_link_main web current http://www.broadinstitute.org/igv/projects/current/igv.php hg19,hg_g1k_v37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum hg19,b37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum
web_link_main web current http://www.broadinstitute.org/igv/projects/current/igv.php hg_g1k_v37 b37
#web_jnlp_1.5 web 1.5 http://www.broadinstitute.org/igvdata/jws/prod hg19,hg_g1k_v37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum hg19,b37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum
#local_default local http://localhost:60151/load hg19,hg_g1k_v37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum hg19,b37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum
#local_default local http://localhost:60151/load hg19,hg_g1k_v37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum hg19,b37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum