예제 #1
0
def gene_snps_filter(request):
    flanks = int(request.GET.get('f'))
    order_by = request.GET.get('order_by', 'library__library_code')
    gene = request.GET.get('s')
    fmin = Feature.objects.values_list(
        'fmin', flat=True).filter(geneid=gene).filter(featuretype='gene')[0]
    fmax = Feature.objects.values_list(
        'fmax', flat=True).filter(geneid=gene).filter(featuretype='gene')[0]
    try:
        cds_fmin = Feature.objects.values_list('fmin', flat=True).filter(
            geneid=gene, featuretype='CDS')[0]
        cds_fmax = Feature.objects.values_list('fmax', flat=True).filter(
            geneid=gene, featuretype='CDS')[0]
    except IndexError:
        print "There are no CDS regions associated with this gene."
        cds_fmin = 0
        cds_fmax = 0
        pass
    result_list = SNP.objects.values(
        'library__library_code', 'result_id', 'chromosome__chromosome_name',
        'snp_id', 'snp_position', 'ref_base', 'alt_base').filter(
            snp_position__range=(
                (Feature.objects.values_list('fmin', flat=True).filter(
                    geneid=gene).filter(featuretype='gene')[0]) + flanks,
                (Feature.objects.values_list('fmax', flat=True).filter(
                    geneid=gene).filter(featuretype='gene')[0]) + flanks),
            chromosome__chromosome_name=Feature.objects.values_list(
                'chromosome', flat=True).filter(geneid=gene).filter(
                    featuretype='gene')[0]).order_by(order_by)
    count = result_list.count()
    paginator = Paginator(result_list, 50)
    page = request.GET.get('page')
    filter_urls = build_orderby_urls(request.get_full_path(), [
        'library__library_code', 'result_id', 'chromosome__chromosome_name',
        'snp_id', 'snp_position', 'ref_base', 'alt_base'
    ])
    try:
        results = paginator.page(page)
    except PageNotAnInteger:
        results = paginator.page(1)
    except EmptyPage:
        results = paginator.page(paginator.num_pages)

    toolbar_max = min(results.number + 4, paginator.num_pages)
    toolbar_min = max(results.number - 4, 0)

    return render_to_response(
        'snpdb/snps_in_gene_filter.html', {
            "results": results,
            "filter_urls": filter_urls,
            "paginator": paginator,
            "toolbar_max": toolbar_max,
            "toolbar_min": toolbar_min,
            "cds_fmin": cds_fmin,
            "cds_fmax": cds_fmax,
            "fmin": fmin,
            "fmax": fmax,
            "gene": gene,
            "count": count
        })
예제 #2
0
def gene_list(request):
    order_by = request.GET.get('order_by', 'start')
    library = request.GET.get('lib')
    results = Feature.objects.values(
        'geneid', 'fmin', 'fmax', 'chromosome').filter(
            featuretype='gene',
            genome__organism__library__library_code=library).order_by(order_by)
    count = len(results)

    paginator = Paginator(results, 200)
    page = request.GET.get('page')

    filter_urls = build_orderby_urls(request.get_full_path(),
                                     ['geneid', 'chromosome', 'fmin', 'fmax'])
    try:
        results = paginator.page(page)
    except PageNotAnInteger:
        results = paginator.page(1)
    except EmptyPage:
        results = paginator.page(paginator.num_pages)
    toolbar_max = min(results.number + 4, paginator.num_pages)
    toolbar_min = max(results.number - 4, 0)

    return render_to_response(
        'snpdb/gene_list.html', {
            "results": results,
            "library": library,
            "count": count,
            "filter_urls": filter_urls,
            "paginator": paginator,
            "toolbar_max": toolbar_max,
            "toolbar_min": toolbar_min
        })
예제 #3
0
def gene_feature(request):
    geneid = request.GET.get('geneid')
    order_by = request.GET.get('order_by', 'geneid')

    feature = Feature.objects.all().filter(
        geneid=geneid, featuretype='gene').order_by(order_by)
    paginator = Paginator(feature, 50)
    page = request.GET.get('page')
    filter_urls = build_orderby_urls(request.get_full_path(), [
        'snp_id', 'snp_position', 'ref_base', 'alt_base',
        'library__library_code'
    ])
    try:
        results = paginator.page(page)
    except PageNotAnInteger:
        results = paginator.page(1)
    except EmptyPage:
        results = paginator.page(paginator.num_pages)

    toolbar_max = min(results.number + 4, paginator.num_pages)
    toolbar_min = max(results.number - 4, 0)

    return render_to_response(
        'snpdb/gene_feature.html', {
            "geneid": geneid,
            "results": results,
            "filter_urls": filter_urls,
            "toolbar_max": toolbar_max,
            "toolbar_min": toolbar_min,
        })
예제 #4
0
def library_snp_summary(request):
    order_by = request.GET.get('order_by', 'library')
    results = SNP.objects.values(
        'library_id',
        'library__library_code',
        'result__genome__organism__organismcode',
    ).distinct().annotate(
        num_snps=Count('snp_id'),
        hetero=BooleanSum('heterozygosity'),
        indel=BooleanSum('snp_type__indel'),
        trans=BooleanSum('snp_type__transition'),
    ).order_by(order_by)
    result = []
    for each in results:
        library = each['library__library_code']
        organismcode = SNP.objects.values_list(
            'result__genome__organism__organismcode',
            flat=True).filter(library__library_code=library)[0]
        contig = get_chromosome_size(organismcode)
        for key, value in contig.iteritems():
            each[key] = value
        result.append(each)
    paginator = Paginator(result, 50)
    page = request.GET.get('page')
    count = len(result)

    # Calls utils method to append new filters or order_by to the current url
    filter_urls = build_orderby_urls(request.get_full_path(), [
        'library__library_id', 'library__library_code', 'snp_id', 'num_snps',
        'hetero', 'h**o', 'indel', 'trans', 'snp_density'
    ])
    try:
        result = paginator.page(page)
    except PageNotAnInteger:
        result = paginator.page(1)
    except EmptyPage:
        result = paginator.page(paginator.num_pages)

    toolbar_max = min(result.number + 4, paginator.num_pages)
    toolbar_min = max(result.number - 4, 0)

    return render_to_response(
        'snpdb/library_snp_summary.html', {
            "result": result,
            "count": count,
            "filter_urls": filter_urls,
            "paginator": paginator,
            "toolbar_max": toolbar_max,
            "toolbar_min": toolbar_min
        })
예제 #5
0
def compare_gene_lib(request):
    order_by = request.GET.get('order_by', 'library__library_code')
    gene = request.GET.get('s')

    if not gene:
        return render_to_response('snpdb/compare_gene_library.html')

    else:
        genes = gene.split()
        genomes = Feature.objects.values_list(
            'genome_id', flat=True).filter(geneid__in=genes).distinct()
        libraries = []
        for each in genomes:
            result_list = SNP.objects.values(
                'library__library_code',
                'result__genome__organism__organismcode',
                'result__genome__version', 'result__genome__genome_id').filter(
                    result__genome__genome_id=each).distinct().order_by(
                        order_by)
            libraries.append(result_list)
        page = request.GET.get('page')
        filter_urls = build_orderby_urls(request.get_full_path(), [
            'library__library_code', 'result__genome__organism__organismcode',
            'result__genome____genome_id', 'result__genome__version'
        ])
        count = len(libraries)
        paginator = Paginator(libraries, 50)
        try:
            results = paginator.page(page)
        except PageNotAnInteger:
            results = paginator.page(1)
        except EmptyPage:
            results = paginator.page(paginator.num_pages)

        toolbar_max = min(results.number + 4, paginator.num_pages)
        toolbar_min = max(results.number - 4, 0)

        return render_to_response(
            'snpdb/compare_gene_library_filter.html', {
                "results": results,
                "gene": gene,
                "count": count,
                "filter_urls": filter_urls,
                "toolbar_max": toolbar_max,
                "toolbar_min": toolbar_min
            })
예제 #6
0
def chromosome_library_snp_summary_filter(request):
    order_by = request.GET.get('order_by', 'chromosome__chromosome_name')
    library = request.GET.get('library')
    results = SNP.objects.values(
        'chromosome__chromosome_name', 'library_id', 'library__library_code',
        'result__genome__organism__organismcode').filter(
            library__library_code=library).annotate(
                num_snps=Count('snp_id'),
                hetero=BooleanSum('heterozygosity'),
                indel=BooleanSum('snp_type__indel'),
                trans=BooleanSum('snp_type__transition'))
    organismcode = SNP.objects.values_list(
        'result__genome__organism__organismcode',
        flat=True).filter(library__library_code=library)[0]
    library_size = get_chromosome_size(organismcode)
    result_list = results.order_by(order_by)
    paginator = Paginator(result_list, 50)
    page = request.GET.get('page')

    # Calls utils method to append new filters or order_by to the current url
    filter_urls = build_orderby_urls(request.get_full_path(), [
        'chromosome__chromosome_name', 'library__librarysize', 'library_id',
        'library__library_code', 'num_snps', 'hetero', 'trans', 'indel'
    ])

    try:
        results = paginator.page(page)
    except PageNotAnInteger:
        results = paginator.page(1)
    except EmptyPage:
        results = paginator.page(paginator.num_pages)

    toolbar_max = min(results.number + 4, paginator.num_pages)
    toolbar_min = max(results.number - 4, 0)

    return render_to_response(
        'snpdb/chromosome_library_snp_summary_filter.html', {
            "results": results,
            "library_size": library_size,
            "filter_urls": filter_urls,
            "paginator": paginator,
            "toolbar_max": toolbar_max,
            "toolbar_min": toolbar_min
        })
예제 #7
0
def impact_snps(request):

    # Collects all values from the GET request
    analysis_path = request.GET.get('analysis_path')
    group1 = ast.literal_eval(request.GET.get('add'))
    group2 = ast.literal_eval(request.GET.get('neg'))
    wt = request.GET.get('wt')
    libraries = group1 + group2
    impact = request.GET.get('impact')
    order_by = request.GET.get('order_by', 'chromosome')
    s = request.GET.get('s')
    att = request.GET.get('att')
    high_ct = request.GET.get('high_ct')
    moderate_ct = request.GET.get('moderate_ct')
    low_ct = request.GET.get('low_ct')

    group1.sort()
    group2.sort()

    result_path_0 = os.path.join(analysis_path, '0000.vcf')
    result_path_1 = os.path.join(analysis_path, '0001.vcf')
    output_path_0 = os.path.join(analysis_path, '%s_impact_0000.vcf' % impact)
    output_path_1 = os.path.join(analysis_path, '%s_impact_0001.vcf' % impact)

    print settings.MEDIA_URL
    java_jar = settings.SNPEFF_JAR_PATH
    print java_jar

    #If output file has not been created
    if not os.path.isfile(output_path_1):

        #If no specific sort is required
        if not s:
            cmd = """cat %s| java -jar %s "( ANN[*].IMPACT = '%s')" > %s """

            subprocess.call(cmd %
                            (result_path_0, java_jar, impact, output_path_0),
                            shell=True,
                            stdout=subprocess.PIPE)
            subprocess.call(cmd %
                            (result_path_1, java_jar, impact, output_path_1),
                            shell=True,
                            stdout=subprocess.PIPE)

        #Sorts results by specified value
        else:

            print "In else statement"
            if att == "0":
                s = int(s)
                cmd = """cat %s | /usr/local/snpEff/scripts/vcfEffOnePerLine.pl | java -jar %s "(ANN[*].IMPACT = '%s') & (POS = %d)" """
            elif att == "ref":
                cmd = """cat %s | /usr/local/snpEff/scripts/vcfEffOnePerLine.pl | java -jar %s "(ANN[*].IMPACT = '%s') & (REF = '%s')" """
            elif att == "alt":
                cmd = """cat %s | /usr/local/snpEff/scripts/vcfEffOnePerLine.pl | java -jar %s "(ANN[*].IMPACT = '%s') & (ALT = '%s')" """
            elif att == "quality":
                s = int(s)
                cmd = """cat %s | /usr/local/snpEff/scripts/vcfEffOnePerLine.pl | java -jar %s "(ANN[*].IMPACT = '%s') & (QUAL = %d)" """
            elif att == "chromosome":
                cmd = """cat %s | /usr/local/snpEff/scripts/vcfEffOnePerLine.pl | java -jar %s "(ANN[*].IMPACT = '%s') & (CHROM =~ '%s')" """
            elif att == "impact":
                s = s.replace(' ', '_').upper()
                cmd = """cat %s | /usr/local/snpEff/scripts/vcfEffOnePerLine.pl | java -jar %s "(ANN[*].IMPACT = '%s') & (ANN[*].EFFECT = '%s')" """
            elif att == "gene":
                cmd = """cat %s | /usr/local/snpEff/scripts/vcfEffOnePerLine.pl | java -jar %s "(ANN[*].IMPACT = '%s') & (ANN[*].GENE = '%s')" """

            subprocess.call(
                cmd % (result_path_0, java_jar, impact, output_path_0, s),
                shell=True,
                stdout=subprocess.PIPE)
            subprocess.call(
                cmd % (result_path_1, java_jar, impact, output_path_1, s),
                shell=True,
                stdout=subprocess.PIPE)

    snp_dict = defaultdict(dict)

    snp_dicts = add_snps_from_vcf(output_path_0, libraries, group1, snp_dict,
                                  wt, impact)
    snp_dicts = add_snps_from_vcf(output_path_1, libraries, group2,
                                  snp_dicts[0], wt, impact)

    genome_id = snp_dicts[1]

    test_dict = dict(snp_dict)
    if order_by == '0':
        sorted_snp = sorted(test_dict.iteritems())
    elif order_by == 'quality':
        sorted_snp = sorted(test_dict.iteritems(),
                            key=lambda (k, d): (
                                d['chromosome'],
                                k,
                            ))
    else:
        sorted_snp = sorted(test_dict.iteritems(),
                            key=lambda (k, d): (
                                d['chromosome'],
                                k,
                            ))

    count = len(snp_dict)
    paginator = Paginator(sorted_snp, 200)
    page = request.GET.get('page')

    # Calls utils method to append new filters or order_by to the current url
    filter_urls = build_orderby_urls(request.get_full_path(), [
        'chromosome', 'ref', 'quality', 'impact', 'gene', 'gene_length', 'aa',
        'wt_allele', 'alt', 'group1_consistency', 'group2_consistency'
    ])
    try:
        results = paginator.page(page)
    except PageNotAnInteger:
        results = paginator.page(1)
    except EmptyPage:
        results = paginator.page(paginator.num_pages)

    toolbar_max = min(results.number + 4, paginator.num_pages)
    toolbar_min = max(results.number - 4, 0)
    c = {
        "analysis_path": analysis_path,
        "paginator": paginator,
        "results": results,
        "libraries": libraries,
        "add": group1,
        "impact": impact,
        "neg": group2,
        "wt": wt,
        "high_ct": high_ct,
        "low_ct": low_ct,
        "moderate_ct": moderate_ct,
        "filter_urls": filter_urls,
        "toolbar_max": toolbar_max,
        "toolbar_min": toolbar_min,
        "count": count,
        "genome_id": genome_id
    }
    return render_to_response('snpdb/impact_snps_search.html',
                              c,
                              context_instance=RequestContext(request))
예제 #8
0
def library_gene_snps_filter(request):
    order_by = request.GET.get('order_by', 'library__library_code')
    gene = request.GET.get('s')
    library = request.GET.get('lib')
    cds_fmin = Feature.objects.values_list('fmin', flat=True).filter(
        geneid=gene, featuretype='CDS')[0]
    cds_fmax = Feature.objects.values_list('fmax', flat=True).filter(
        geneid=gene, featuretype='CDS')[0]
    fmin = Feature.objects.values_list(
        'fmin', flat=True).filter(geneid=gene).filter(featuretype='gene')[0]
    fmax = Feature.objects.values_list(
        'fmax', flat=True).filter(geneid=gene).filter(featuretype='gene')[0]
    result_list = SNP.objects.values(
        'library__library_code', 'result_id', 'chromosome__chromosome_name',
        'snp_id', 'snp_position', 'ref_base', 'alt_base', 'quality',
        'heterozygosity').filter(
            snp_position__range=(Feature.objects.values_list(
                'fmin',
                flat=True).filter(geneid=gene).filter(featuretype='gene')[0],
                                 Feature.objects.values_list(
                                     'fmax',
                                     flat=True).filter(geneid=gene).filter(
                                         featuretype='gene')[0]),
            library__library_code=library,
            chromosome__chromosome_name=Feature.objects.values_list(
                'chromosome', flat=True).filter(geneid=gene).filter(
                    featuretype='gene')[0]).order_by(order_by)
    count = result_list.count()
    page = request.GET.get('page')
    filter_urls = build_orderby_urls(request.get_full_path(), [
        'library__library_code', 'result_id', 'chromosome__chromosome_name',
        'snp_id', 'snp_position', 'ref_base', 'alt_base', 'quality',
        'heterozygosity'
    ])
    paginator = Paginator(result_list, 50)
    try:
        results = paginator.page(page)
    except PageNotAnInteger:
        results = paginator.page(1)
    except EmptyPage:
        results = paginator.page(paginator.num_pages)
        print "Error"

    toolbar_max = min(results.number + 4, paginator.num_pages)
    toolbar_min = max(results.number - 4, 0)

    print toolbar_max
    return render_to_response(
        'snpdb/library_to_snp_filter.html', {
            "results": results,
            "gene": gene,
            "library": library,
            "cds_fmin": cds_fmin,
            "cds_fmax": cds_fmax,
            "fmin": fmin,
            "fmax": fmax,
            "filter_urls": filter_urls,
            "paginator": paginator,
            "toolbar_max": toolbar_max,
            "toolbar_min": toolbar_min,
            "count": count
        })
예제 #9
0
def compare_gene_lib_filter_results(request):
    order_by = request.GET.get('order_by', 'library__library_code')
    gene = request.GET.get('s')
    library = request.GET.getlist('check')

    #Gets the start and stop position of the coding region of the gene.
    cds_fmin = Feature.objects.values_list('fmin', flat=True).filter(
        geneid=gene, featuretype='CDS')[0]
    cds_fmax = Feature.objects.values_list('fmax', flat=True).filter(
        geneid=gene, featuretype='CDS')[0]

    #Gets the start and stop position of gene.
    fmin = Feature.objects.filter(geneid=gene).filter(
        featuretype='gene').values('fmin')[0]
    fmax = Feature.objects.filter(geneid=gene).filter(
        featuretype='gene').values('fmax')[0]

    #Collects libraries that are effected by this gene
    result_list = SNP.objects.values(
        'snp_id', 'snp_position', 'ref_base', 'alt_base',
        'library__library_code').filter(
            library__library_code__in=library,
            snp_position__range=(Feature.objects.values_list(
                'fmin',
                flat=True).filter(geneid=gene).filter(featuretype='gene')[0],
                                 Feature.objects.values_list(
                                     'fmax',
                                     flat=True).filter(geneid=gene).filter(
                                         featuretype='gene')[0]),
            chromosome__chromosome_name=Feature.objects.values_list(
                'chromosome', flat=True).filter(geneid=gene).filter(
                    featuretype='gene')[0]).order_by(order_by)
    snp_group = []
    library_group = []
    max_snps = 0
    count = 0
    for each in result_list:
        snp_position = each['snp_position']
        library = each['library__library_code']
        if snp_position in snp_group:
            count += 1
            pass
        else:
            snp_group.append(snp_position)
            count = 1
            pass
        if count > max_snps:
            max_snps = count
            count = 0
        if library in library_group:
            pass
        else:
            library_group.append(library)
    paginator = Paginator(result_list, 50)
    page = request.GET.get('page')
    filter_urls = build_orderby_urls(request.get_full_path(), [
        'snp_id', 'snp_position', 'ref_base', 'alt_base',
        'library__library_code'
    ])
    try:
        results = paginator.page(page)
    except PageNotAnInteger:
        results = paginator.page(1)
    except EmptyPage:
        results = paginator.page(paginator.num_pages)

    toolbar_max = min(results.number + 4, paginator.num_pages)
    toolbar_min = max(results.number - 4, 0)

    return render_to_response(
        'snpdb/compare_gene_library_filter_result.html', {
            "results": results,
            "gene": gene,
            "cds_fmin": cds_fmin,
            "cds_fmax": cds_fmax,
            "fmin": fmin,
            "fmax": fmax,
            "count": len(snp_group),
            "library_group": library_group,
            "snp_group": snp_group,
            "max_snps": range(max_snps),
            "filter_urls": filter_urls,
            "toolbar_max": toolbar_max,
            "toolbar_min": toolbar_min
        })
예제 #10
0
def compare_gene_lib_results(request):
    # order_by = request.GET.get('order_by', 'library__library_code')
    gene_string = request.GET.get('s')
    genes = gene_string.split()
    library_data = request.GET.getlist('check')

    library = []
    genome_id = []
    for each in library_data:
        data = each.split('_')
        library.append(data[0])

        if data[1] not in genome_id:
            genome_id.append(data[1])

    test = {}
    for gene in genes:
        try:
            cds_fmin = Feature.objects.values_list('fmin', flat=True).filter(
                geneid=gene, genome_id__in=genome_id, featuretype='CDS')[0]
            cds_fmax = Feature.objects.values_list('fmax', flat=True).filter(
                geneid=gene, genome_id__in=genome_id, featuretype='CDS')[0]
        except IndexError:
            cds_fmin = 0
            cds_fmax = 0

        try:
            fmin = Feature.objects.filter(
                geneid=gene, genome_id__in=genome_id).filter(
                    featuretype='gene').values('fmin')[0]
            fmax = Feature.objects.filter(
                geneid=gene, genome_id__in=genome_id).filter(
                    featuretype='gene').values('fmax')[0]
        except IndexError:
            fmin = 0
            fmax = 0

        chromosome = Feature.objects.filter(
            geneid=gene,
            genome_id__in=genome_id).filter(featuretype='gene').values_list(
                'chromosome', flat=True)[0]

        result_list = SNP.objects.filter(
            effect__effect_id=6,
            effect__effect_string__exact=gene,
            library__library_code__in=library).values(
                'library', 'library__library_code', 'snp_id', 'snp_position',
                'ref_base', 'alt_base', 'heterozygosity', 'quality',
                'chromosome__chromosome_name', 'effect__effect_string',
                'effect__effect_class',
                'effect__effect').distinct().order_by('snp_position')
        #Checks to see if tuples have all libraries present. Inserts blank tuples if not.
        for each in result_list:
            new_tuple = [
                (None, None, None, gene, cds_fmin, cds_fmax, fmin['fmin'],
                 fmax['fmax'], chromosome, each['snp_position'])
            ] * len(library)
            curr_library = each['library__library_code']
            tup = (curr_library, each['ref_base'], each['alt_base'], gene,
                   cds_fmin, cds_fmax, fmin['fmin'], fmax['fmax'], chromosome,
                   each['snp_position'])
            index = library.index(curr_library)
            if each['snp_position'] in test:
                current_tup = test[each['snp_position']]
                current_tup[index] = tup
                test[each['snp_position']] = current_tup
            else:
                new_tuple[index] = tup
                test[each['snp_position']] = new_tuple
    test = OrderedDict(sorted(test.items(), key=lambda key: key[0]))
    count = len(test)
    filter_urls = build_orderby_urls(request.get_full_path(), [
        'gene', 'snp_position', 'ref_base', 'alt_base',
        'library__library_code', 'fmin', 'fmax'
    ])

    paginator = Paginator(test.items(), 50)
    page = request.GET.get('page')
    try:
        results = paginator.page(page)
    except PageNotAnInteger:
        results = paginator.page(1)
    except EmptyPage:
        results = paginator.page(paginator.num_pages)

    toolbar_max = min(results.number + 4, paginator.num_pages)
    toolbar_min = max(results.number - 4, 0)
    return render_to_response('snpdb/compare_gene_library_filter_result.html',
                              {
                                  "results": results,
                                  "genes": genes,
                                  "gene": gene_string,
                                  "library": library,
                                  "test": test,
                                  "count": count,
                                  "library_group": sorted(library),
                                  "filter_urls": filter_urls,
                                  "toolbar_max": toolbar_max,
                                  "toolbar_min": toolbar_min
                              },
                              context_instance=RequestContext(request))
예제 #11
0
def compare_cnv_libraries(request):
    ref_genome = request.GET.get('ref_genome')
    library_codes = request.GET.getlist('library_codes')
    chromosome = request.GET.getlist('chromosome')
    order_by = request.GET.get('order_by', 'start').encode('UTF8')

    if chromosome and library_codes:
        result_list = CNV.objects.values(
            'start', 'stop', 'library__library_code', 'coverage',
            'cnv_value').filter(library__library_code__in=library_codes,
                                cnv_type=1,
                                chromosome__chromosome_name=chromosome[0])
        somy_list = CNV.objects.values(
            'library__library_code',
            'cnv_value').filter(library__library_code__in=library_codes,
                                cnv_type=2,
                                chromosome__chromosome_name=chromosome[0])

        somys = {}
        for each in somy_list:
            if each['library__library_code'].encode('UTF8') not in somys:
                somys[each['library__library_code'].encode(
                    'UTF8')] = each['cnv_value']

        cnv_dict = {}

        #Checks to see if tuples have all libraries present. Inserts blank tuples if not.
        for each in result_list:
            pos = chromosome[0] + '_' + str(each['start'])

            if pos in cnv_dict:
                library_dict = {
                    'cnv': each['cnv_value'],
                    'coverage': each['coverage'],
                    'somy': somys[each['library__library_code'].encode('UTF8')]
                }

                if each['library__library_code'] not in cnv_dict[pos]:
                    cnv_dict[pos][each['library__library_code'].encode(
                        'UTF8')] = library_dict

            else:
                library_dict = {
                    each['library__library_code'].encode('UTF8'): {
                        'cnv': each['cnv_value'],
                        'coverage': each['coverage'],
                        'somy':
                        somys[each['library__library_code'].encode('UTF8')]
                    },
                    'start': each['start'],
                    'stop': each['stop']
                }
                cnv_dict[pos] = library_dict

        cnvs = cnv_dict.items()
        if order_by == 'cnv':
            lib = request.GET.get('lib').encode('UTF8')
            cnvs.sort(key=lambda (k, d): (
                d[lib],
                d['start'],
            ))
        else:
            cnvs.sort(key=lambda (k, d): (
                d[order_by],
                d['start'],
            ))

        # Calls utils method to append new filters or order_by to the current url
        filter_urls = build_orderby_urls(request.get_full_path(), [
            'chromosome', 'start', 'stop', 'cnv', 'coverage', 'library', 'somy'
        ])

        paginator = Paginator(cnvs, 50)
        page = request.GET.get('page')

        try:
            cnvs = paginator.page(page)
        except PageNotAnInteger:
            cnvs = paginator.page(1)
        except EmptyPage:
            cnvs = paginator.page(paginator.num_pages)

        toolbar_max = min(cnvs.number + 4, paginator.num_pages)
        toolbar_min = max(cnvs.number - 4, 0)

        return render_to_response('snpdb/compare_cnv_libraries.html', {
            "cnvs": cnvs,
            "somys": somys,
            "chromosome": chromosome[0],
            "ref_genome": ref_genome,
            "library_codes": library_codes,
            "filter_urls": filter_urls,
            "toolbar_max": toolbar_max,
            "toolbar_min": toolbar_min
        },
                                  context_instance=RequestContext(request))

    elif library_codes and not chromosome:
        print library_codes, type(library_codes)
        chrom_list = Chromosome.objects.values('chromosome_name').filter(
            genome_name=ref_genome).order_by('chromosome_name')

        page = request.GET.get('page')
        paginator = Paginator(chrom_list, 500)

        try:
            results = paginator.page(page)
        except PageNotAnInteger:
            results = paginator.page(1)
        except EmptyPage:
            results = paginator.page(paginator.num_pages)
        toolbar_max = min(results.number + 4, paginator.num_pages)
        toolbar_min = max(results.number - 4, 0)
        return render_to_response('snpdb/compare_cnv_libraries.html', {
            "results": results,
            "library_codes": library_codes,
            "paginator": paginator,
            "toolbar_max": toolbar_max,
            "toolbar_min": toolbar_min
        },
                                  context_instance=RequestContext(request))

    elif ref_genome:
        lib_list = Library.objects.values(
            'library_code', 'result__genome__organism__organismcode').filter(
                result__genome__organism__organismcode=ref_genome).distinct(
                ).order_by('library_code')

    else:
        lib_list = Organism.objects.values('organismcode').distinct().order_by(
            'organismcode')

    page = request.GET.get('page')
    paginator = Paginator(lib_list, 500)

    try:
        results = paginator.page(page)
    except PageNotAnInteger:
        results = paginator.page(1)
    except EmptyPage:
        results = paginator.page(paginator.num_pages)
    toolbar_max = min(results.number + 4, paginator.num_pages)
    toolbar_min = max(results.number - 4, 0)
    return render_to_response('snpdb/compare_cnv_libraries.html', {
        "results": results,
        "ref_genome": ref_genome,
        "paginator": paginator,
        "toolbar_max": toolbar_max,
        "toolbar_min": toolbar_min
    },
                              context_instance=RequestContext(request))