mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-21 13:50:20 +08:00
155 lines
7.2 KiB
Python
155 lines
7.2 KiB
Python
|
|
def load_microbial_data( GALAXY_DATA_INDEX_DIR, sep='\t' ):
|
|
# FIXME: this function is duplicated in the DynamicOptions class. It is used here only to
|
|
# set data.name in exec_after_process().
|
|
microbe_info= {}
|
|
orgs = {}
|
|
|
|
filename = "%s/microbial_data.loc" % GALAXY_DATA_INDEX_DIR
|
|
for i, line in enumerate( open( filename ) ):
|
|
line = line.rstrip( '\r\n' )
|
|
if line and not line.startswith( '#' ):
|
|
fields = line.split( sep )
|
|
#read each line, if not enough fields, go to next line
|
|
try:
|
|
info_type = fields.pop(0)
|
|
if info_type.upper() == "ORG":
|
|
#ORG 12521 Clostridium perfringens SM101 bacteria Firmicutes CP000312,CP000313,CP000314,CP000315 http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=genomeprj&cmd=Retrieve&dopt=Overview&list_uids=12521
|
|
org_num = fields.pop(0)
|
|
name = fields.pop(0)
|
|
kingdom = fields.pop(0)
|
|
group = fields.pop(0)
|
|
chromosomes = fields.pop(0)
|
|
info_url = fields.pop(0)
|
|
link_site = fields.pop(0)
|
|
if org_num not in orgs:
|
|
orgs[ org_num ] = {}
|
|
orgs[ org_num ][ 'chrs' ] = {}
|
|
orgs[ org_num ][ 'name' ] = name
|
|
orgs[ org_num ][ 'kingdom' ] = kingdom
|
|
orgs[ org_num ][ 'group' ] = group
|
|
orgs[ org_num ][ 'chromosomes' ] = chromosomes
|
|
orgs[ org_num ][ 'info_url' ] = info_url
|
|
orgs[ org_num ][ 'link_site' ] = link_site
|
|
elif info_type.upper() == "CHR":
|
|
#CHR 12521 CP000315 Clostridium perfringens phage phiSM101, complete genome 38092 110684521 CP000315.1
|
|
org_num = fields.pop(0)
|
|
chr_acc = fields.pop(0)
|
|
name = fields.pop(0)
|
|
length = fields.pop(0)
|
|
gi = fields.pop(0)
|
|
gb = fields.pop(0)
|
|
info_url = fields.pop(0)
|
|
chr = {}
|
|
chr[ 'name' ] = name
|
|
chr[ 'length' ] = length
|
|
chr[ 'gi' ] = gi
|
|
chr[ 'gb' ] = gb
|
|
chr[ 'info_url' ] = info_url
|
|
if org_num not in orgs:
|
|
orgs[ org_num ] = {}
|
|
orgs[ org_num ][ 'chrs' ] = {}
|
|
orgs[ org_num ][ 'chrs' ][ chr_acc ] = chr
|
|
elif info_type.upper() == "DATA":
|
|
#DATA 12521_12521_CDS 12521 CP000315 CDS bed /home/djb396/alignments/playground/bacteria/12521/CP000315.CDS.bed
|
|
uid = fields.pop(0)
|
|
org_num = fields.pop(0)
|
|
chr_acc = fields.pop(0)
|
|
feature = fields.pop(0)
|
|
filetype = fields.pop(0)
|
|
path = fields.pop(0)
|
|
data = {}
|
|
data[ 'filetype' ] = filetype
|
|
data[ 'path' ] = path
|
|
data[ 'feature' ] = feature
|
|
|
|
if org_num not in orgs:
|
|
orgs[ org_num ] = {}
|
|
orgs[ org_num ][ 'chrs' ] = {}
|
|
if 'data' not in orgs[ org_num ][ 'chrs' ][ chr_acc ]:
|
|
orgs[ org_num ][ 'chrs' ][ chr_acc ][ 'data' ] = {}
|
|
orgs[ org_num ][ 'chrs' ][ chr_acc ][ 'data' ][ uid ] = data
|
|
else: continue
|
|
except: continue
|
|
for org_num in orgs:
|
|
org = orgs[ org_num ]
|
|
if org[ 'kingdom' ] not in microbe_info:
|
|
microbe_info[ org[ 'kingdom' ] ] = {}
|
|
if org_num not in microbe_info[ org[ 'kingdom' ] ]:
|
|
microbe_info[ org[ 'kingdom' ] ][org_num] = org
|
|
return microbe_info
|
|
|
|
#post processing, set build for data and add additional data to history
|
|
from galaxy import datatypes, config, jobs, tools
|
|
from shutil import copyfile
|
|
|
|
def exec_after_process(app, inp_data, out_data, param_dict, tool, stdout, stderr):
|
|
base_dataset = out_data.items()[0][1]
|
|
history = base_dataset.history
|
|
if history == None:
|
|
print "unknown history!"
|
|
return
|
|
kingdom = param_dict.get( 'kingdom', None )
|
|
#group = param_dict.get( 'group', None )
|
|
org = param_dict.get( 'org', None )
|
|
|
|
#if not (kingdom or group or org):
|
|
if not (kingdom or org):
|
|
print "Parameters are not available."
|
|
#workflow passes galaxy.tools.parameters.basic.UnvalidatedValue instead of values
|
|
if isinstance( kingdom, tools.parameters.basic.UnvalidatedValue ):
|
|
kingdom = kingdom.value
|
|
if isinstance( org, tools.parameters.basic.UnvalidatedValue ):
|
|
org = org.value
|
|
|
|
GALAXY_DATA_INDEX_DIR = app.config.tool_data_path
|
|
microbe_info = load_microbial_data( GALAXY_DATA_INDEX_DIR, sep='\t' )
|
|
new_stdout = ""
|
|
split_stdout = stdout.split("\n")
|
|
basic_name = ""
|
|
for line in split_stdout:
|
|
fields = line.split("\t")
|
|
if fields[0] == "#File1":
|
|
description = fields[1]
|
|
chr = fields[2]
|
|
dbkey = fields[3]
|
|
file_type = fields[4]
|
|
name, data = out_data.items()[0]
|
|
data.set_size()
|
|
basic_name = data.name
|
|
data.name = data.name + " (" + microbe_info[kingdom][org]['chrs'][chr]['data'][description]['feature'] +" for " + microbe_info[kingdom][org]['name'] + ":" + chr + ")"
|
|
data.dbkey = dbkey
|
|
data.info = data.name
|
|
data = app.datatypes_registry.change_datatype( data, file_type )
|
|
data.init_meta()
|
|
data.set_peek()
|
|
app.model.context.add( data )
|
|
app.model.context.flush()
|
|
elif fields[0] == "#NewFile":
|
|
description = fields[1]
|
|
chr = fields[2]
|
|
dbkey = fields[3]
|
|
filepath = fields[4]
|
|
file_type = fields[5]
|
|
newdata = app.model.HistoryDatasetAssociation( create_dataset = True, sa_session = app.model.context ) #This import should become a library
|
|
newdata.set_size()
|
|
newdata.extension = file_type
|
|
newdata.name = basic_name + " (" + microbe_info[kingdom][org]['chrs'][chr]['data'][description]['feature'] +" for "+microbe_info[kingdom][org]['name']+":"+chr + ")"
|
|
app.model.context.add( newdata )
|
|
app.model.context.flush()
|
|
app.security_agent.copy_dataset_permissions( base_dataset.dataset, newdata.dataset )
|
|
history.add_dataset( newdata )
|
|
app.model.context.add( history )
|
|
app.model.context.flush()
|
|
try:
|
|
copyfile(filepath,newdata.file_name)
|
|
newdata.info = newdata.name
|
|
newdata.state = jobs.JOB_OK
|
|
except:
|
|
newdata.info = "The requested file is missing from the system."
|
|
newdata.state = jobs.JOB_ERROR
|
|
newdata.dbkey = dbkey
|
|
newdata.init_meta()
|
|
newdata.set_peek()
|
|
app.model.context.flush()
|