# 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 from htmlgen import HTMLgen2 as HT import webqtlConfig class webqtlDataset: """ Database class defines a database in webqtl, can be either Microarray, Published phenotype, genotype, or user input database(temp) """ def __init__(self, dbName, cursor=None): assert dbName self.id = 0 self.name = '' self.type = '' self.riset = '' self.cursor = cursor #temporary storage if dbName.find('Temp') >= 0: self.searchfield = ['name','description'] self.disfield = ['name','description'] self.type = 'Temp' self.id = 1 self.fullname = 'Temporary Storage' self.shortname = 'Temp' elif dbName.find('Publish') >= 0: self.searchfield = ['name','post_publication_description','abstract','title','authors'] self.disfield = ['name','pubmed_id', 'pre_publication_description', 'post_publication_description', 'original_description', 'pre_publication_abbreviation', 'post_publication_abbreviation', 'lab_code', 'submitter', 'owner', 'authorized_users', 'authors','title','abstract', 'journal','volume','pages','month', 'year','sequence', 'units', 'comments'] self.type = 'Publish' elif dbName.find('Geno') >= 0: self.searchfield = ['name','chr'] self.disfield = ['name','chr','mb', 'source2', 'sequence'] self.type = 'Geno' else: #ProbeSet self.searchfield = ['name','description','probe_target_description', 'symbol','alias','genbankid','unigeneid','omim', 'refseq_transcriptid','probe_set_specificity', 'probe_set_blat_score'] self.disfield = ['name','symbol','description','probe_target_description', 'chr','mb','alias','geneid','genbankid', 'unigeneid', 'omim', 'refseq_transcriptid','blatseq','targetseq','chipid', 'comments', 'strand_probe','strand_gene','probe_set_target_region', 'probe_set_specificity', 'probe_set_blat_score','probe_set_blat_mb_start', 'probe_set_blat_mb_end', 'probe_set_strand', 'probe_set_note_by_rw', 'flag'] self.type = 'ProbeSet' self.name = dbName if self.cursor and self.id == 0: self.retrieveName() def __str__(self): return self.name __repr__ = __str__ def getRISet(self): assert self.cursor if self.type == 'Publish': query = ''' SELECT InbredSet.Name, InbredSet.Id FROM InbredSet, PublishFreeze WHERE PublishFreeze.InbredSetId = InbredSet.Id AND PublishFreeze.Name = "%s" ''' % self.name elif self.type == 'Geno': query = ''' SELECT InbredSet.Name, InbredSet.Id FROM InbredSet, GenoFreeze WHERE GenoFreeze.InbredSetId = InbredSet.Id AND GenoFreeze.Name = "%s" ''' % self.name elif self.type == 'ProbeSet': query = ''' SELECT InbredSet.Name, InbredSet.Id FROM InbredSet, ProbeSetFreeze, ProbeFreeze WHERE ProbeFreeze.InbredSetId = InbredSet.Id AND ProbeFreeze.Id = ProbeSetFreeze.ProbeFreezeId AND ProbeSetFreeze.Name = "%s" ''' % self.name else: return "" self.cursor.execute(query) RISet, RIID = self.cursor.fetchone() if RISet == 'BXD300': RISet = "BXD" self.riset = RISet self.risetid = RIID return RISet def retrieveName(self): assert self.id == 0 and self.cursor query = ''' SELECT Id, Name, FullName, ShortName FROM %sFreeze WHERE public > %d AND (Name = "%s" OR FullName = "%s" OR ShortName = "%s") '''% (self.type, webqtlConfig.PUBLICTHRESH, self.name, self.name, self.name) try: self.cursor.execute(query) self.id,self.name,self.fullname,self.shortname=self.cursor.fetchone() except: raise KeyError, `self.name`+' doesn\'t exist.' def genHTML(self, Class='c0dd'): return HT.Href(text = HT.Span('%s Database' % self.fullname, Class= "fwb " + Class), url= webqtlConfig.INFOPAGEHREF % self.name,target="_blank")