def enrichment_analysis(request): start = time.time() form = EnrichmentAnalysisSearchForm(request.POST or None) template_params = {'ea_form': form} template_params.update(GLOBAL_TEMPLATE_PARAMS) if not form.is_valid(): return render_to_response("search.html", template_params, context_instance=RequestContext(request)) print form.cleaned_data raw_user_list = form.cleaned_data['gene_list'] user_list = set(s.strip(',') for s in raw_user_list.split()) if len(user_list) == 0: return render_to_response("search.html", template_params, context_instance=RequestContext(request)) user_list = set(_search_genes(user_list)) print "User list is %s" % user_list all_genes = Gene.objects.all() results = [] expts, count, row_index = _search(form) for tf in set(TFS.itervalues()): print tf expts_for_loop = copy.deepcopy(expts) expts_for_loop = expts_for_loop.filter(transcription_factor=tf) targeted = set(expt.gene for expt in _direct_search(expts_for_loop)) if len(targeted) == 0: print "Setting enrichment to 1.0 for %s" % tf enrichment = 1.0 else: overlap = user_list.intersection(targeted) if len(overlap) == 0: print "Setting enrichment to 1.0 for %s" % tf enrichment = 1.0 else: enrichment = stats.hypergeom.sf(len(overlap) - 1, all_genes.count(), len(user_list), len(targeted)) results.append({'tf': tf, 'enrichment': enrichment}) results = sorted(results, key=lambda tf: tf['tf']) print time.time() - start return HttpResponse(json.dumps(results))
def validate_transcription_factor(value, line): canonical_value = TFS.get(value.translate(None, '-_. ').lower()) if not canonical_value: raise DBImportError("Error on line %d: Transcription factor %s" " is not valid." % (line, value)) return canonical_value