| 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 |  | 
|---|