def from_gene_list(args): """Creates gene signature from a pre-existing gene list, not expression data. """ ranked_genes = args.get('ranked_genes', []) gene_list = gene_list_factory.from_uploaded_ranked_genes(ranked_genes) try: required_metadata = required_metadata_factory.from_http_request(args) except Exception as e: raise HttpRequestArgumentsException('Error in required metadata ' 'fields', e) try: optional_metadata = optional_metadata_factory.from_http_request(args) except Exception as e: raise HttpRequestArgumentsException('Error in optional metadata ' 'fields', e) try: tags = tag_factory.from_http_request(args) except Exception as e: raise HttpRequestArgumentsException('Error in metadata tags', e) resource = database.get_or_create(Resource, code='upload', name='User uploaded gene list') return GeneSignature(None, [gene_list], required_metadata, optional_metadata, tags, resource)
def from_gene_list(args): """Creates gene signature from a pre-existing gene list, not expression data. """ ranked_genes = args.get('ranked_genes', []) gene_list = gene_list_factory.from_uploaded_ranked_genes(ranked_genes) try: required_metadata = required_metadata_factory.from_http_request(args) except Exception as e: raise HttpRequestArgumentsException( 'Error in required metadata ' 'fields', e) try: optional_metadata = optional_metadata_factory.from_http_request(args) except Exception as e: raise HttpRequestArgumentsException( 'Error in optional metadata ' 'fields', e) try: tags = tag_factory.from_http_request(args) except Exception as e: raise HttpRequestArgumentsException('Error in metadata tags', e) resource = database.get_or_create(Resource, code='upload', name='User uploaded gene list') return GeneSignature(None, [gene_list], required_metadata, optional_metadata, tags, resource)
def from_uploaded_ranked_genes(ranked_genes): """Creates GeneList from a list of lists, where the first element in the inner list is the gene symbol and the second is the value. """ gene_list = [ RankedGene(database.get_or_create(Gene, name=g[0]), g[1]) for g in ranked_genes ] direction = 0 target_app_links = [] return GeneList(gene_list, direction, target_app_links)
def _create_gene_signature(soft_file, args): """Creates a new extraction, as opposed to an extraction from the database. """ required_metadata = required_metadata_factory.from_http_request(args) optional_metadata = optional_metadata_factory.from_http_request(args) tags = tag_factory.from_http_request(args) gene_lists = gene_list_factory.from_soft_file(soft_file, required_metadata, optional_metadata, tags) return GeneSignature(soft_file, gene_lists, required_metadata, optional_metadata, tags, database.get_or_create(Resource, code='geo'))
def from_soft_file(gene_signature): """Performs hierarchical clustering on SOFT file. """ target_app_link = __get_clustergrammer_link(gene_signature) # Only create the link from Clustergrammer once. # TODO: Move into targetapp module. API should not know about this. if not target_app_link: link = __from_soft_file(gene_signature) link = '{0}?preview=true'.format(link) target_app = database.get_or_create(TargetApp, name='clustergrammer') target_app_link = TargetAppLink(target_app, link) gene_signature.gene_lists[2].target_app_links.append(target_app_link) database.save_gene_signature(gene_signature) return target_app_link.link
def from_soft_file(gene_signature): """Performs hierarchical clustering on SOFT file. """ target_app_link = __get_clustergrammer_link(gene_signature) # Only create the link from Clustergrammer once. # TODO: Move into targetapp module. API should not know about this. if not target_app_link: link = __from_soft_file(gene_signature) link = '{0}?preview=true'.format(link) target_app = database.get_or_create(TargetApp, name='clustergrammer') target_app_link = TargetAppLink(target_app, link) gene_signature.gene_lists[2].target_app_links.append( target_app_link ) database.save_gene_signature(gene_signature) return target_app_link.link
def _create_gene_signature(soft_file, args): """Creates a new extraction, as opposed to an extraction from the database. """ required_metadata = required_metadata_factory.from_http_request(args) optional_metadata = optional_metadata_factory.from_http_request(args) tags = tag_factory.from_http_request(args) gene_lists = gene_list_factory.from_soft_file( soft_file, required_metadata, optional_metadata, tags ) return GeneSignature( soft_file, gene_lists, required_metadata, optional_metadata, tags, database.get_or_create(Resource, code='geo') )
def from_geo(args): """Constructs a SoftFile """ accession = args['dataset'] if not file_manager.file_exists(accession): file_manager.download(accession) dataset = database.get_geo_dataset(accession) if not dataset: platform = args['platform'] if platform.index('GPL') == 0: platform = platform[3:] title = args.get('title') summary = args.get('summary') if not title or not summary: title, summary = eutils.get_title_and_summary(accession) print('Fetched title and summary from EUtils API: %s, %s' % (title, summary)) dataset = GeoDataset(accession=accession, platform=platform, organism=args['organism'], title=title, summary=summary) else: print('Dataset %s already exists!' % (accession)) a_cols = get_param_as_list(args, 'A_cols') b_cols = get_param_as_list(args, 'B_cols') # Use get_or_create to track GSMs. We don't do this for custom files. control = [ database.get_or_create(SoftFileSample, name=sample, is_control=True) for sample in a_cols ] experimental = [ database.get_or_create(SoftFileSample, name=sample, is_control=False) for sample in b_cols ] samples = control + experimental genes, a_vals, b_vals, selections, stats = parser.parse( accession, True, dataset.platform, samples) if 'normalize' not in args or args['normalize'] == 'True': normalize = True else: normalize = False genes, a_vals, b_vals = cleaner.clean(genes, a_vals, b_vals, normalize) text_file = file_manager.write(accession, dataset.platform, normalize, genes, a_vals, b_vals, samples, selections, stats) return SoftFile(samples, dataset, text_file, genes, a_vals, b_vals, stats=stats, normalize=normalize)
def from_geo(args): """Constructs a SoftFile """ accession = args['dataset'] if not file_manager.file_exists(accession): file_manager.download(accession) dataset = database.get_geo_dataset(accession) if not dataset: platform = args['platform'] if platform.index('GPL') == 0: platform = platform[3:] title = args.get('title') summary = args.get('summary') if not title or not summary: title, summary = eutils.get_title_and_summary(accession) print('Fetched title and summary from EUtils API: %s, %s' % (title, summary)) dataset = GeoDataset( accession=accession, platform=platform, organism=args['organism'], title=title, summary=summary ) else: print 'Dataset %s already exists!' % accession a_cols = get_param_as_list(args, 'A_cols') b_cols = get_param_as_list(args, 'B_cols') # Use get_or_create to track GSMs. We don't do this for custom files. control = [database.get_or_create(SoftFileSample, name=sample, is_control=True) for sample in a_cols] experimental = [database.get_or_create(SoftFileSample, name=sample, is_control=False) for sample in b_cols] samples = control + experimental genes, a_vals, b_vals, selections, stats = parser.parse(accession, True, dataset.platform, samples) if 'normalize' not in args or args['normalize'] == 'True': normalize = True else: normalize = False genes, a_vals, b_vals = cleaner.clean(genes, a_vals, b_vals, normalize) text_file = file_manager.write(accession, dataset.platform, normalize, genes, a_vals, b_vals, samples, selections, stats) return SoftFile( samples, dataset, text_file, genes, a_vals, b_vals, stats=stats, normalize=normalize )