示例#1
0
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))
示例#2
0
 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