mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
228 lines
7.3 KiB
Python
228 lines
7.3 KiB
Python
#Provides Upload tool with access to list of available files
|
|
import glob,sys
|
|
import galaxy.app as thisapp
|
|
import galaxy.util
|
|
|
|
from elementtree.ElementTree import XML
|
|
|
|
librepos = '/usr/local/galaxy/data/rg'
|
|
myrepos = '/home/rerla/galaxy'
|
|
marchinirepos = '/usr/local/galaxy/data/rg/snptest'
|
|
|
|
from galaxy.tools.parameters import DataToolParameter
|
|
|
|
#Provides Upload tool with access to list of available builds
|
|
|
|
builds = []
|
|
#Read build names and keys from galaxy.util
|
|
for dbkey, build_name in galaxy.util.dbnames:
|
|
builds.append((build_name,dbkey,False))
|
|
|
|
#Return available builds
|
|
def get_available_builds(defval='hg18'):
|
|
for i,x in enumerate(builds):
|
|
if x[1] == defval:
|
|
x = list(x)
|
|
x[2] = True
|
|
builds[i] = tuple(x)
|
|
return builds
|
|
|
|
|
|
|
|
def get_tabular_cols( input, outformat='gg' ):
|
|
"""numeric only other than rs for strict genome graphs
|
|
otherwise tabular. Derived from galaxy tool source around August 2007 by Ross"""
|
|
columns = []
|
|
seenCnames = {}
|
|
elems = []
|
|
colnames = ['Col%d' % x for x in range(input.metadata.columns+1)]
|
|
strict = (outformat=='gg')
|
|
for i, line in enumerate( file ( input.file_name ) ):
|
|
if line and not line.startswith( '#' ):
|
|
line = line.rstrip('\r\n')
|
|
elems = line.split( '\t' )
|
|
|
|
"""
|
|
Strict gg note:
|
|
Since this tool requires users to select only those columns
|
|
that contain numerical values, we'll restrict the column select
|
|
list appropriately other than the first column which must be a marker
|
|
"""
|
|
if len(elems) > 0:
|
|
for col in range(1, input.metadata.columns+1):
|
|
isFloat = False # short circuit common result
|
|
try:
|
|
val = float(elems[col-1])
|
|
isFloat = True
|
|
except:
|
|
val = elems[col-1]
|
|
if val:
|
|
if i == 0: # header row
|
|
colnames[col] = val
|
|
if isFloat or (not strict) or (col == 1): # all in if not GG
|
|
option = colnames[col]
|
|
if not seenCnames.get(option,None): # new
|
|
columns.append((option,str(col),False))
|
|
seenCnames[option] = option
|
|
#print 'get_tab: %d=%s. Columns=%s' % (i,line,str(columns))
|
|
if len(columns) > 0 and i > 10:
|
|
"""
|
|
We have our select list built, so we can break out of the outer most for loop
|
|
"""
|
|
break
|
|
if i == 30:
|
|
break # Hopefully we never get here...
|
|
for option in range(min(5,len(columns))):
|
|
(x,y,z) = columns[option]
|
|
columns[option] = (x,y,True)
|
|
return columns # sorted select options
|
|
|
|
def get_marchini_dir():
|
|
"""return the filesystem directory for snptest style files"""
|
|
return marchinirepos
|
|
|
|
|
|
def get_lib_SNPTESTCaCofiles():
|
|
"""return a list of file names - without extensions - available for caco studies
|
|
These have a common file name with both _1 and _2 suffixes"""
|
|
d = get_marchini_dir()
|
|
testsuffix = '.gen_1' # glob these
|
|
flist = glob.glob('%s/*%s' % (d,testsuffix))
|
|
flist = [x.split(testsuffix)[0] for x in flist] # leaves with a list of file set names
|
|
if len(flist) > 0:
|
|
dat = [(flist[0],flist[0],True),]
|
|
dat += [(x,x,False) for x in flist[1:]]
|
|
else:
|
|
dat = [('No Marchini CaCo files found in %s - convert some using the Marchini converter tool' % d,'None',True),]
|
|
return dat
|
|
|
|
def getChropt():
|
|
"""return dynamic chromosome select options
|
|
"""
|
|
c = ['X','Y']
|
|
c += ['%d' % x for x in range(1,23)]
|
|
dat = [(x,x,False) for x in c]
|
|
x,y,z = dat[3]
|
|
dat[3] = (x,y,True)
|
|
return dat
|
|
|
|
|
|
def get_phecols(fname=''):
|
|
""" return a list of phenotype columns for a multi-select list
|
|
prototype:
|
|
foo = ('fake - not yet implemented','not implemented','False')
|
|
dat = [foo for x in range(5)]
|
|
return dat
|
|
"""
|
|
try:
|
|
header = file(fname,'r').next().split()
|
|
except:
|
|
return [('get_phecols unable to open file %s' % fname,'None',False),]
|
|
dat = [(x,x,False) for x in header]
|
|
return dat
|
|
|
|
#Return various kinds of files
|
|
|
|
def get_lib_pedfiles():
|
|
dat = glob.glob('%s/ped/*.ped' % librepos)
|
|
dat += glob.glob('%s/ped/*.ped' % myrepos)
|
|
dat.sort()
|
|
if len(dat) > 0:
|
|
dat = [x.split('.ped')[0] for x in dat]
|
|
dat = [(x,x,'True') for x in dat]
|
|
else:
|
|
dat = [('No ped files - add some to %s/ped or %s/ped' % (librepos,myrepos),'None',True),]
|
|
return dat
|
|
|
|
def get_lib_phefiles():
|
|
ext = 'phe'
|
|
dat = glob.glob('%s/pheno/*.%s' % (librepos,ext))
|
|
dat += glob.glob('%s/pheno/*.%s' % (myrepos,ext))
|
|
dat.sort()
|
|
if len(dat) > 0:
|
|
dat = [(x,x,'False') for x in dat]
|
|
else:
|
|
dat = [('No %s files - add some to %s/pheno or %s/pheno' % (ext,librepos,myrepos),'None',True),]
|
|
return dat
|
|
|
|
def get_lib_bedfiles():
|
|
dat = glob.glob('%s/plinkbed/*.bed' % librepos)
|
|
dat += glob.glob('%s/plinkbed/*.bed' % myrepos)
|
|
dat.sort()
|
|
if len(dat) > 0:
|
|
dat = [x.split('.bed')[0] for x in dat]
|
|
dat = [(x,x,False) for x in dat]
|
|
else:
|
|
dat = [('No bed files - Please import some to %s/plinkbed or %s/plinkbed' % (librepos,myrepos),'None',True),]
|
|
return dat
|
|
|
|
def get_lib_fbatfiles():
|
|
dat = glob.glob('%s/plinkfbat/*.ped' % librepos)
|
|
dat += glob.glob('%s/plinkfbat/*.ped' % myrepos)
|
|
dat.sort()
|
|
if len(dat) > 0:
|
|
dat = [(x,x,False) for x in dat]
|
|
else:
|
|
dat = [('No fbat bed files - Please import some to %s/plinkfbat or %s/plinkfbat' % (librepos,myrepos),'None',True),]
|
|
return dat
|
|
|
|
def get_lib_mapfiles():
|
|
dat = glob.glob('%s/ped/*.map' % librepos)
|
|
dat += glob.glob('%s/ped/*.map' % myrepos)
|
|
dat.sort()
|
|
if len(dat) > 0:
|
|
dat = [(x,x,False) for x in dat]
|
|
else:
|
|
dat = [('No map files - add some to %s/ped' % librepos,'None',True),]
|
|
return dat
|
|
|
|
def get_my_pedfiles():
|
|
dat = glob.glob('%s/*.ped' % myrepos)
|
|
if len(dat) > 0:
|
|
dat = [(x,x,False) for x in dat]
|
|
else:
|
|
dat = [('No ped files - add some to %s' % librepos,'None',True),]
|
|
return dat
|
|
|
|
def get_my_mapfiles():
|
|
dat = glob.glob('%s/*.map' % myrepos)
|
|
if len(dat) > 0:
|
|
dat = [(x,x,'True') for x in dat]
|
|
else:
|
|
dat = [('No ped files - add some to %s' % librepos,'None',True),]
|
|
return dat
|
|
|
|
def get_lib_xlsfiles():
|
|
dat = glob.glob('%s/*.xls' % librepos)
|
|
if len(dat) > 0:
|
|
dat = [(x,x,False) for x in dat]
|
|
else:
|
|
dat = [('No ped files - add some to %s' % librepos,'None',True),]
|
|
return dat
|
|
|
|
def get_lib_htmlfiles():
|
|
dat = glob.glob('%s/*.html' % librepos)
|
|
if len(dat) > 0:
|
|
dat = [(x,x,False) for x in dat]
|
|
else:
|
|
dat = [('No ped files - add some to %s' % librepos,'None',True),]
|
|
return dat
|
|
|
|
def get_my_xlsfiles():
|
|
dat = glob.glob('%s/*.xls' % myrepos)
|
|
if len(dat) > 0:
|
|
dat = [(x,x,False) for x in dat]
|
|
else:
|
|
dat = [('No ped files - add some to %s' % librepos,'None',True),]
|
|
return dat
|
|
|
|
def get_my_htmlfiles():
|
|
dat = glob.glob('%s/*.html' % myrepos)
|
|
if len(dat) > 0:
|
|
dat = [(x,x,False) for x in dat]
|
|
else:
|
|
dat = [('No ped files - add some to %s' % librepos,'None',True),]
|
|
return dat
|
|
|
|
|