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 })
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 })
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, })
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 })
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 })
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 })
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))
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 })
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 })
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))
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))