[2] | 1 | #Provides Upload tool with access to list of available files |
---|
| 2 | import glob,sys |
---|
| 3 | import galaxy.app as thisapp |
---|
| 4 | import galaxy.util |
---|
| 5 | |
---|
| 6 | from elementtree.ElementTree import XML |
---|
| 7 | |
---|
| 8 | librepos = '/usr/local/galaxy/data/rg' |
---|
| 9 | myrepos = '/home/rerla/galaxy' |
---|
| 10 | marchinirepos = '/usr/local/galaxy/data/rg/snptest' |
---|
| 11 | |
---|
| 12 | from galaxy.tools.parameters import DataToolParameter |
---|
| 13 | |
---|
| 14 | #Provides Upload tool with access to list of available builds |
---|
| 15 | |
---|
| 16 | builds = [] |
---|
| 17 | #Read build names and keys from galaxy.util |
---|
| 18 | for dbkey, build_name in galaxy.util.dbnames: |
---|
| 19 | builds.append((build_name,dbkey,False)) |
---|
| 20 | |
---|
| 21 | #Return available builds |
---|
| 22 | def get_available_builds(defval='hg18'): |
---|
| 23 | for i,x in enumerate(builds): |
---|
| 24 | if x[1] == defval: |
---|
| 25 | x = list(x) |
---|
| 26 | x[2] = True |
---|
| 27 | builds[i] = tuple(x) |
---|
| 28 | return builds |
---|
| 29 | |
---|
| 30 | |
---|
| 31 | |
---|
| 32 | def get_tabular_cols( input, outformat='gg' ): |
---|
| 33 | """numeric only other than rs for strict genome graphs |
---|
| 34 | otherwise tabular. Derived from galaxy tool source around August 2007 by Ross""" |
---|
| 35 | columns = [] |
---|
| 36 | seenCnames = {} |
---|
| 37 | elems = [] |
---|
| 38 | colnames = ['Col%d' % x for x in range(input.metadata.columns+1)] |
---|
| 39 | strict = (outformat=='gg') |
---|
| 40 | for i, line in enumerate( file ( input.file_name ) ): |
---|
| 41 | if line and not line.startswith( '#' ): |
---|
| 42 | line = line.rstrip('\r\n') |
---|
| 43 | elems = line.split( '\t' ) |
---|
| 44 | |
---|
| 45 | """ |
---|
| 46 | Strict gg note: |
---|
| 47 | Since this tool requires users to select only those columns |
---|
| 48 | that contain numerical values, we'll restrict the column select |
---|
| 49 | list appropriately other than the first column which must be a marker |
---|
| 50 | """ |
---|
| 51 | if len(elems) > 0: |
---|
| 52 | for col in range(1, input.metadata.columns+1): |
---|
| 53 | isFloat = False # short circuit common result |
---|
| 54 | try: |
---|
| 55 | val = float(elems[col-1]) |
---|
| 56 | isFloat = True |
---|
| 57 | except: |
---|
| 58 | val = elems[col-1] |
---|
| 59 | if val: |
---|
| 60 | if i == 0: # header row |
---|
| 61 | colnames[col] = val |
---|
| 62 | if isFloat or (not strict) or (col == 1): # all in if not GG |
---|
| 63 | option = colnames[col] |
---|
| 64 | if not seenCnames.get(option,None): # new |
---|
| 65 | columns.append((option,str(col),False)) |
---|
| 66 | seenCnames[option] = option |
---|
| 67 | #print 'get_tab: %d=%s. Columns=%s' % (i,line,str(columns)) |
---|
| 68 | if len(columns) > 0 and i > 10: |
---|
| 69 | """ |
---|
| 70 | We have our select list built, so we can break out of the outer most for loop |
---|
| 71 | """ |
---|
| 72 | break |
---|
| 73 | if i == 30: |
---|
| 74 | break # Hopefully we never get here... |
---|
| 75 | for option in range(min(5,len(columns))): |
---|
| 76 | (x,y,z) = columns[option] |
---|
| 77 | columns[option] = (x,y,True) |
---|
| 78 | return columns # sorted select options |
---|
| 79 | |
---|
| 80 | def get_marchini_dir(): |
---|
| 81 | """return the filesystem directory for snptest style files""" |
---|
| 82 | return marchinirepos |
---|
| 83 | |
---|
| 84 | |
---|
| 85 | def get_lib_SNPTESTCaCofiles(): |
---|
| 86 | """return a list of file names - without extensions - available for caco studies |
---|
| 87 | These have a common file name with both _1 and _2 suffixes""" |
---|
| 88 | d = get_marchini_dir() |
---|
| 89 | testsuffix = '.gen_1' # glob these |
---|
| 90 | flist = glob.glob('%s/*%s' % (d,testsuffix)) |
---|
| 91 | flist = [x.split(testsuffix)[0] for x in flist] # leaves with a list of file set names |
---|
| 92 | if len(flist) > 0: |
---|
| 93 | dat = [(flist[0],flist[0],True),] |
---|
| 94 | dat += [(x,x,False) for x in flist[1:]] |
---|
| 95 | else: |
---|
| 96 | dat = [('No Marchini CaCo files found in %s - convert some using the Marchini converter tool' % d,'None',True),] |
---|
| 97 | return dat |
---|
| 98 | |
---|
| 99 | def getChropt(): |
---|
| 100 | """return dynamic chromosome select options |
---|
| 101 | """ |
---|
| 102 | c = ['X','Y'] |
---|
| 103 | c += ['%d' % x for x in range(1,23)] |
---|
| 104 | dat = [(x,x,False) for x in c] |
---|
| 105 | x,y,z = dat[3] |
---|
| 106 | dat[3] = (x,y,True) |
---|
| 107 | return dat |
---|
| 108 | |
---|
| 109 | |
---|
| 110 | def get_phecols(fname=''): |
---|
| 111 | """ return a list of phenotype columns for a multi-select list |
---|
| 112 | prototype: |
---|
| 113 | foo = ('fake - not yet implemented','not implemented','False') |
---|
| 114 | dat = [foo for x in range(5)] |
---|
| 115 | return dat |
---|
| 116 | """ |
---|
| 117 | try: |
---|
| 118 | header = file(fname,'r').next().split() |
---|
| 119 | except: |
---|
| 120 | return [('get_phecols unable to open file %s' % fname,'None',False),] |
---|
| 121 | dat = [(x,x,False) for x in header] |
---|
| 122 | return dat |
---|
| 123 | |
---|
| 124 | #Return various kinds of files |
---|
| 125 | |
---|
| 126 | def get_lib_pedfiles(): |
---|
| 127 | dat = glob.glob('%s/ped/*.ped' % librepos) |
---|
| 128 | dat += glob.glob('%s/ped/*.ped' % myrepos) |
---|
| 129 | dat.sort() |
---|
| 130 | if len(dat) > 0: |
---|
| 131 | dat = [x.split('.ped')[0] for x in dat] |
---|
| 132 | dat = [(x,x,'True') for x in dat] |
---|
| 133 | else: |
---|
| 134 | dat = [('No ped files - add some to %s/ped or %s/ped' % (librepos,myrepos),'None',True),] |
---|
| 135 | return dat |
---|
| 136 | |
---|
| 137 | def get_lib_phefiles(): |
---|
| 138 | ext = 'phe' |
---|
| 139 | dat = glob.glob('%s/pheno/*.%s' % (librepos,ext)) |
---|
| 140 | dat += glob.glob('%s/pheno/*.%s' % (myrepos,ext)) |
---|
| 141 | dat.sort() |
---|
| 142 | if len(dat) > 0: |
---|
| 143 | dat = [(x,x,'False') for x in dat] |
---|
| 144 | else: |
---|
| 145 | dat = [('No %s files - add some to %s/pheno or %s/pheno' % (ext,librepos,myrepos),'None',True),] |
---|
| 146 | return dat |
---|
| 147 | |
---|
| 148 | def get_lib_bedfiles(): |
---|
| 149 | dat = glob.glob('%s/plinkbed/*.bed' % librepos) |
---|
| 150 | dat += glob.glob('%s/plinkbed/*.bed' % myrepos) |
---|
| 151 | dat.sort() |
---|
| 152 | if len(dat) > 0: |
---|
| 153 | dat = [x.split('.bed')[0] for x in dat] |
---|
| 154 | dat = [(x,x,False) for x in dat] |
---|
| 155 | else: |
---|
| 156 | dat = [('No bed files - Please import some to %s/plinkbed or %s/plinkbed' % (librepos,myrepos),'None',True),] |
---|
| 157 | return dat |
---|
| 158 | |
---|
| 159 | def get_lib_fbatfiles(): |
---|
| 160 | dat = glob.glob('%s/plinkfbat/*.ped' % librepos) |
---|
| 161 | dat += glob.glob('%s/plinkfbat/*.ped' % myrepos) |
---|
| 162 | dat.sort() |
---|
| 163 | if len(dat) > 0: |
---|
| 164 | dat = [(x,x,False) for x in dat] |
---|
| 165 | else: |
---|
| 166 | dat = [('No fbat bed files - Please import some to %s/plinkfbat or %s/plinkfbat' % (librepos,myrepos),'None',True),] |
---|
| 167 | return dat |
---|
| 168 | |
---|
| 169 | def get_lib_mapfiles(): |
---|
| 170 | dat = glob.glob('%s/ped/*.map' % librepos) |
---|
| 171 | dat += glob.glob('%s/ped/*.map' % myrepos) |
---|
| 172 | dat.sort() |
---|
| 173 | if len(dat) > 0: |
---|
| 174 | dat = [(x,x,False) for x in dat] |
---|
| 175 | else: |
---|
| 176 | dat = [('No map files - add some to %s/ped' % librepos,'None',True),] |
---|
| 177 | return dat |
---|
| 178 | |
---|
| 179 | def get_my_pedfiles(): |
---|
| 180 | dat = glob.glob('%s/*.ped' % myrepos) |
---|
| 181 | if len(dat) > 0: |
---|
| 182 | dat = [(x,x,False) for x in dat] |
---|
| 183 | else: |
---|
| 184 | dat = [('No ped files - add some to %s' % librepos,'None',True),] |
---|
| 185 | return dat |
---|
| 186 | |
---|
| 187 | def get_my_mapfiles(): |
---|
| 188 | dat = glob.glob('%s/*.map' % myrepos) |
---|
| 189 | if len(dat) > 0: |
---|
| 190 | dat = [(x,x,'True') for x in dat] |
---|
| 191 | else: |
---|
| 192 | dat = [('No ped files - add some to %s' % librepos,'None',True),] |
---|
| 193 | return dat |
---|
| 194 | |
---|
| 195 | def get_lib_xlsfiles(): |
---|
| 196 | dat = glob.glob('%s/*.xls' % librepos) |
---|
| 197 | if len(dat) > 0: |
---|
| 198 | dat = [(x,x,False) for x in dat] |
---|
| 199 | else: |
---|
| 200 | dat = [('No ped files - add some to %s' % librepos,'None',True),] |
---|
| 201 | return dat |
---|
| 202 | |
---|
| 203 | def get_lib_htmlfiles(): |
---|
| 204 | dat = glob.glob('%s/*.html' % librepos) |
---|
| 205 | if len(dat) > 0: |
---|
| 206 | dat = [(x,x,False) for x in dat] |
---|
| 207 | else: |
---|
| 208 | dat = [('No ped files - add some to %s' % librepos,'None',True),] |
---|
| 209 | return dat |
---|
| 210 | |
---|
| 211 | def get_my_xlsfiles(): |
---|
| 212 | dat = glob.glob('%s/*.xls' % myrepos) |
---|
| 213 | if len(dat) > 0: |
---|
| 214 | dat = [(x,x,False) for x in dat] |
---|
| 215 | else: |
---|
| 216 | dat = [('No ped files - add some to %s' % librepos,'None',True),] |
---|
| 217 | return dat |
---|
| 218 | |
---|
| 219 | def get_my_htmlfiles(): |
---|
| 220 | dat = glob.glob('%s/*.html' % myrepos) |
---|
| 221 | if len(dat) > 0: |
---|
| 222 | dat = [(x,x,False) for x in dat] |
---|
| 223 | else: |
---|
| 224 | dat = [('No ped files - add some to %s' % librepos,'None',True),] |
---|
| 225 | return dat |
---|
| 226 | |
---|
| 227 | |
---|