diff options
Diffstat (limited to 'web/webqtl/textUI/cmdGeno.py')
-rwxr-xr-x | web/webqtl/textUI/cmdGeno.py | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/web/webqtl/textUI/cmdGeno.py b/web/webqtl/textUI/cmdGeno.py new file mode 100755 index 00000000..8dd0f924 --- /dev/null +++ b/web/webqtl/textUI/cmdGeno.py @@ -0,0 +1,118 @@ +# Copyright (C) University of Tennessee Health Science Center, Memphis, TN. +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU Affero General Public License +# as published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Affero General Public License for more details. +# +# This program is available from Source Forge: at GeneNetwork Project +# (sourceforge.net/projects/genenetwork/). +# +# Contact Drs. Robert W. Williams and Xiaodong Zhou (2010) +# at rwilliams@uthsc.edu and xzhou15@uthsc.edu +# +# +# +# This module is used by GeneNetwork project (www.genenetwork.org) +# +# Created by GeneNetwork Core Team 2010/08/10 +# +# Last updated by GeneNetwork Core Team 2010/10/20 + +import string +import os + +import reaper + +from base import webqtlConfig +from cmdClass import cmdClass + +######################################### +# Geno Class +######################################### +class cmdGeno(cmdClass): + + def __init__(self,fd=None): + + cmdClass.__init__(self,fd) + + if not webqtlConfig.TEXTUI: + self.contents.append("Please send your request to http://robot.genenetwork.org") + return + + if self.accessError: + return + self.error = 0 + self.RISet = None + self.chr = None + self.dataset = None + self.strainList = [] + try: + self.RISet = self.data.getvalue('riset') + if not self.RISet: + raise ValueError + except: + self.error = 1 + self.contents.append('###Example : http://www.genenetwork.org%s%s?cmd=%s&riset=BXD&chr=1' % (webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE, self.cmdID)) + return + try: + self.format = self.data.getvalue('format')[:3] + except: + self.format = 'row' + + try: + self.dataset = reaper.Dataset() + try: + self.dataset.read(os.path.join(webqtlConfig.GENODIR, self.RISet + '.geno')) + except: + self.dataset.read(os.path.join(webqtlConfig.GENODIR, self.RISet.upper() + '.geno')) + self.strainList = list(self.dataset.prgy) + except: + self.error = 1 + #traceback.print_exc() + self.contents.append('###The name of RISet is incorrect') + return + + try: + self.chr = self.data.getvalue('chr') + if self.chr: + if self.chr == 'X' or self.chr == 'x': + self.chr = '20' + self.chr = int(self.chr) + except: + pass + + self.readGeno() + + def readGeno(self): + try: + table = [['Chr'] + ['Locus'] + self.strainList] + if self.chr: + chr = self.dataset[self.chr-1] + for locus in chr: + items = string.split(string.join(locus.genotext, " ")) + items = [chr.name] + [locus.name] + items + table += [items] + else: + for chr in self.dataset: + for locus in chr: + items = string.split(string.join(locus.genotext, " ")) + items = [chr.name] + [locus.name] + items + table += [items] + if self.format == 'col': + table = [[r[col] for r in table] for col in range(1, len(table[0]))] + table[0][0] = 'Line' + lines = string.join(map(lambda x: string.join(x, '\t'), table), '\n') + self.contents.append(lines) + except: + self.contents =['###Error: Read file error or name of chromosome is incorrect'] + #traceback.print_exc() + return + + + |