Exemplo n.º 1
0
def main(request):
    params = {}
    params['queries'] = internal.ListQueries(request, {'projectID': [request.session['projectID']]})
    params['attributes'] = internal.ListAttributes(request, {'projectID': [request.session['projectID']]})
    queryname = request.GET.get('query') or None
    inputdataset = request.GET.get('dataset') or None
    method = request.GET.get('method') or None
    category = request.GET.get('category') or None
    attribute = request.GET.get('attribute') or None
    mydata = {}
    sa = {}
    if queryname:
        if not queryname or not inputdataset or not method or not category: return HttpResponse("required GET parameters: query, dataset, method, category" , content_type='text/plain')
        dataset =  internal.GetDataset(request, params={'queryname': [queryname], 'projectID': [request.session['projectID']], 'dataset': [inputdataset], 'category': [category], 'method': [method]})
        attributes =  internal.GetData(request, {'queryname': [queryname], 'projectID': [request.session['projectID']], 'attribute': [attribute,],})
        attributes.pop(0)
        for a in attributes: sa[a[0]] = a[1]
        samples = list(set(dataset.values_list('sample', flat=True)))
        for row in dataset:
            if row.entity in mydata: mydata[row.entity][row.sample] = row.profile/100
            else: mydata[row.entity] = {row.sample: row.profile/100}
 
        inputfile = "/tmp/%d-%d-%s.txt" %(request.user.pk, int(time.time()), attribute.replace(' ', '_'))
        formatfile = inputfile+".format"
        resultfile = inputfile+".result"
        with open(inputfile, 'w') as f:
            f.write(attribute)
            for s in samples: 
                if s in sa: f.write("\t"+str(sa[s]).lower())
                else: f.write("\tNA")
            f.write("\nsubject_id")
            for s in samples: f.write("\t"+str(s))
            for e in sorted(mydata):
                f.write("\n"+e)
                for s in samples:
                    if s in mydata[e]: f.write("\t"+str(mydata[e][s]))
                    else: f.write("\t0")
        formatresp = myutils.runPython("lefse/format_input.py", inputfile, [formatfile, "-u2", "-o1000000"])
        lefseresp = myutils.runPython("lefse/run_lefse.py", formatfile, [resultfile]).strip()
        lefseresp = lefseresp.replace('\n', '<br />')
        lefseresp = "<strong>Query:</strong> "+queryname+"<br><strong>Attribute:</strong> "+attribute+"<hr>"+lefseresp
        #lefseresp = myutils.runCmd("python /home/orean/OREAN/scripts/misc/lefse/run_lefse.py "+ formatfile+" "+resultfile)
        rows = ""
        with open(resultfile, 'r') as f:
            rows = f.read()
        os.remove(inputfile)
        os.remove(formatfile)
        os.remove(resultfile)
        return HttpResponse(json.dumps({'msg': lefseresp, 'data': rows}), content_type='application/json')
    return render(request, "lefse.html", params)
Exemplo n.º 2
0
def main(request):
    params = {}
    params['queries'] = internal.ListQueries(
        request, {'projectID': [request.session['projectID']]})
    params['attributes'] = internal.ListAttributes(
        request, {'projectID': [request.session['projectID']]})
    queryname = request.GET.get('query') or None
    inputdataset = request.GET.get('dataset') or None
    method = request.GET.get('method') or None
    category = request.GET.get('category') or None
    attribute = request.GET.get('attribute') or None
    mydata = {}
    sa = {}
    if queryname:
        if not queryname or not inputdataset or not method or not category:
            return HttpResponse(
                "required GET parameters: query, dataset, method, category",
                content_type='text/plain')
        dataset = internal.GetDataset(request,
                                      params={
                                          'queryname': [queryname],
                                          'projectID':
                                          [request.session['projectID']],
                                          'dataset': [inputdataset],
                                          'category': [category],
                                          'method': [method]
                                      })
        attributes = internal.GetData(
            request, {
                'queryname': [queryname],
                'projectID': [request.session['projectID']],
                'attribute': [
                    attribute,
                ],
            })
        attributes.pop(0)
        for a in attributes:
            sa[a[0]] = a[1]
        samples = list(set(dataset.values_list('sample', flat=True)))
        for row in dataset:
            if row.entity in mydata:
                mydata[row.entity][row.sample] = row.profile / 100
            else:
                mydata[row.entity] = {row.sample: row.profile / 100}

        inputfile = "/tmp/%d-%d-%s.txt" % (request.user.pk, int(
            time.time()), attribute.replace(' ', '_'))
        formatfile = inputfile + ".format"
        resultfile = inputfile + ".result"
        with open(inputfile, 'w') as f:
            f.write(attribute)
            for s in samples:
                if s in sa: f.write("\t" + str(sa[s]).lower())
                else: f.write("\tNA")
            f.write("\nsubject_id")
            for s in samples:
                f.write("\t" + str(s))
            for e in sorted(mydata):
                f.write("\n" + e)
                for s in samples:
                    if s in mydata[e]: f.write("\t" + str(mydata[e][s]))
                    else: f.write("\t0")
        formatresp = myutils.runPython("lefse/format_input.py", inputfile,
                                       [formatfile, "-u2", "-o1000000"])
        lefseresp = myutils.runPython("lefse/run_lefse.py", formatfile,
                                      [resultfile]).strip()
        lefseresp = lefseresp.replace('\n', '<br />')
        lefseresp = "<strong>Query:</strong> " + queryname + "<br><strong>Attribute:</strong> " + attribute + "<hr>" + lefseresp
        #lefseresp = myutils.runCmd("python /home/orean/OREAN/scripts/misc/lefse/run_lefse.py "+ formatfile+" "+resultfile)
        rows = ""
        with open(resultfile, 'r') as f:
            rows = f.read()
        os.remove(inputfile)
        os.remove(formatfile)
        os.remove(resultfile)
        return HttpResponse(json.dumps({
            'msg': lefseresp,
            'data': rows
        }),
                            content_type='application/json')
    return render(request, "lefse.html", params)
Exemplo n.º 3
0
def main(request):
    params = {}
    params['queries'] = internal.ListQueries(request, {'projectID': [request.session['projectID']]})
    params['attributes'] = internal.ListAttributes(request, {'projectID': [request.session['projectID']]})
    querynamelist = request.GET.getlist('query') or None
    inputdataset = request.GET.get('dataset') or None
    method = request.GET.get('method') or None
    category = request.GET.get('category') or None
    bothcount = 0
    mydata = {}
    sa = {}
    if querynamelist:
        if not len(querynamelist) == 2 or not inputdataset or not method or not category: return HttpResponse("required GET parameters: query, dataset, method, category, query2" , content_type='text/plain')
        queryname, queryname2 = querynamelist
        query1dataset =  internal.GetDataset(request, params={'queryname': [queryname], 'projectID': [request.session['projectID']], 'dataset': [inputdataset], 'category': [category], 'method': [method]})
        query2dataset =  internal.GetDataset(request, params={'queryname': [queryname2], 'projectID': [request.session['projectID']], 'dataset': [inputdataset], 'category': [category], 'method': [method]})
        #query1dataset =  internal.GetDataset(request, params={'queryname': [queryname], 'projectID': [request.session['projectID']], 'dataset': [inputdataset], 'method': [method]})
        #query2dataset =  internal.GetDataset(request, params={'queryname': [queryname2], 'projectID': [request.session['projectID']], 'dataset': [inputdataset], 'method': [method]})
        query1samples = internal.ListQueries(request, {'projectID': [request.session['projectID']], 'full': [True], 'queryname': [queryname]})[0]['results'].split(',')
        query2samples = internal.ListQueries(request, {'projectID': [request.session['projectID']], 'full': [True], 'queryname': [queryname2]})[0]['results'].split(',')
        totalsamples = list(set(query1samples+query2samples))
        dataset = query1dataset | query2dataset
        for s in totalsamples:
            if s in query1samples and s in query2samples: 
                sa[s] = "Both"
                bothcount+=1
            elif s in query1samples and s not in query2samples:
                sa[s] = queryname
            elif s not in query1samples and s in query2samples:
	        sa[s] = queryname2
            else: 
                return HttpResponse(json.dumps({'msg': "Could not determine how to group sample '%s'. Aborting LefSE analysis." % s, 'data': False}), content_type='application/json')
        if bothcount == len(totalsamples): return HttpResponse(json.dumps({'msg': "Queries have the same sample composition. Cannot perform an analysis", 'data': False}), content_type='application/json')
        samples = list(set(dataset.values_list('sample', flat=True)))
        for row in dataset:
            #if row.entity in mydata: mydata[row.entity][row.sample] = row.profile/100
            #else: mydata[row.entity] = {row.sample: row.profile/100}
            taxaName = row.entity
            if row.taxatree is not None: taxaName = row.taxatree.full_tree
            if taxaName in mydata: mydata[taxaName][row.sample] = row.profile/100
            else: mydata[taxaName] = {row.sample: row.profile/100}
        inputfile = "/tmp/%d-%d-lefse.txt" %(request.user.pk, int(time.time()))
        formatfile = inputfile+".format"
        resultfile = inputfile+".result"
        with open(inputfile, 'w') as f:
            f.write("QueryStatus")
            for s in samples: 
                if s in sa: f.write("\t"+str(sa[s]).lower())
                else: f.write("\tNA")
            f.write("\nsubject_id")
            for s in samples: f.write("\t"+str(s))
            for e in sorted(mydata):
                f.write("\n"+e)
                for s in samples:
                    if s in mydata[e]: f.write("\t"+str(mydata[e][s]))
                    else: f.write("\t0")
        formatresp = myutils.runPython("lefse/format_input.py", inputfile, [formatfile, "-u2", "-o1000000"])
        lefseresp = myutils.runPython("lefse/run_lefse.py", formatfile, [resultfile]).strip()
        lefseresp = lefseresp.replace('\n', '<br />')
        lefseresp = "<strong>Query 1:</strong> "+queryname+"<br><strong>Query 2:</strong> "+queryname2+"<hr>"+lefseresp
        #lefseresp = myutils.runCmd("python /home/orean/OREAN/scripts/misc/lefse/run_lefse.py "+ formatfile+" "+resultfile)
        rows = ""
        with open(resultfile, 'r') as f:
            rows = f.read()
        #os.remove(inputfile)
        #os.remove(formatfile)
        #os.remove(resultfile)
        return HttpResponse(json.dumps({'msg': lefseresp, 'data': rows}), content_type='application/json')
    return render(request, "lefse2.html", params)