def get_prop_primers(primers, vector): vector_name = vector.name seq = str.lower(vector.sequence) seq = Dseq(seq.replace(' ', '')) L = len(str(seq)) rseq = seq.reverse_complement() for primer in primers: primer_nor = primer.sequence.replace(' ', '') p_seq = Dseq(primer_nor) p_seq_s = str.lower(str(p_seq)) # all lower case nt = 'atcgn' idt_codes_subtract1 = ['icy5', 'icy3', '5biosg', '(am)'] idt_codes_subtract2 = ['dspacer'] idt_codes_subtract3 = ['dbcoteg'] idt_codes_subtract4 = ['biotinteg'] idt_codes_plus1 = ['ds', 'idsp'] Lp_subtract = 0 for s1 in idt_codes_subtract1: if p_seq_s.find(s1) >= 0: Lp_subtract += 1 for s2 in idt_codes_subtract2: if p_seq_s.find(s2) >= 0: Lp_subtract += 2 for s3 in idt_codes_subtract3: if p_seq_s.find(s3) >= 0: Lp_subtract += 3 for s4 in idt_codes_subtract4: if p_seq_s.find(s4) >= 0: Lp_subtract += 4 for p1 in idt_codes_plus1: if p_seq_s.find(p1) >= 0: Lp_subtract -= 1 Lp = 0 for i in nt: Lp += p_seq_s.count(i) Lp = Lp - Lp_subtract if seq.find(p_seq_s) != -1: # match it position = seq.find(p_seq_s) + 1 dir = 'forward' in_vector = True elif rseq.find(p_seq_s) != -1: position = rseq.find(p_seq_s) - L - 1 dir = 'reverse' in_vector = True else: position = -1 dir = 'none' in_vector = False primer.position = position primer.dir = dir primer.in_vector = in_vector primer.length = Lp primer.save() return vector_name, seq, L, position, dir, in_vector
def calpcr(request): # pbr = Vector.objects.get(name='pbr322') primers = Primer.objects.all() vector = primers[0].vector vector_name = vector.name seq = str.lower(vector.sequence) seq = Dseq(seq.replace(' ', '')) L = len(str(seq)) rseq = seq.reverse_complement() poss = [] for primer in primers: p_seq = Dseq(primer.sequence.replace(' ', '')) p_seq_s = str.lower(str(p_seq)) # all lower case nt='atcgn' idt_codes_subtract1 = ['icy5', 'icy3', '5biosg', '(am)'] idt_codes_subtract2 = ['dspacer'] idt_codes_subtract3 = ['dbcoteg'] idt_codes_subtract4 = ['biotinteg'] idt_codes_plus1 = ['ds', 'idsp'] Lp_subtract = 0 for s1 in idt_codes_subtract1: if p_seq_s.find(s1) >= 0: Lp_subtract += 1 for s2 in idt_codes_subtract2: if p_seq_s.find(s2) >= 0: Lp_subtract += 2 for s3 in idt_codes_subtract3: if p_seq_s.find(s3) >= 0: Lp_subtract += 3 for s4 in idt_codes_subtract4: if p_seq_s.find(s4) >= 0: Lp_subtract += 4 for p1 in idt_codes_plus1: if p_seq_s.find(p1) >= 0: Lp_subtract -= 1 Lp = 0 for i in nt: Lp += p_seq_s.count(i) Lp = Lp - Lp_subtract # Lp = len(p_seq_s) if seq.find(p_seq_s) != -1: # match it position = seq.find(p_seq_s) + 1 dir = 'forward' in_vector = True elif rseq.find(p_seq_s) != -1: position = rseq.find(p_seq_s) - L - 1 dir = 'reverse' in_vector = True else: position = -1 dir = 'none' in_vector = False primer.position = position primer.dir = dir primer.in_vector = in_vector primer.length = Lp primer.save() primers = primers.filter(in_vector=True).order_by('position') # primers = Primer.objects.all().order_by('-created_at') primerFilter = PrimerFilter(queryset=primers) if request.method == 'POST' and 'Search' in request.POST: primerFilter = PrimerFilter(request.POST, queryset=primers) L = len(str(seq)) # if request.method == 'POST' and 'cal' in request.POST: check_box_list = request.POST.getlist("check_box") if len(check_box_list) == 2: primer_1 = Primer.objects.get(id=check_box_list[0]) p1_name = primer_1.name primer_2 = Primer.objects.get(id=check_box_list[1]) p2_name = primer_2.name if primer_1.dir == 'reverse' and primer_2.dir == 'forward': pr = primer_1.position pr_name = primer_1.name pr_seq = primer_1.sequence pf = primer_2.position pf_name = primer_2.name pf_seq = primer_2.sequence elif primer_2.dir == 'reverse' and primer_1.dir == 'forward': pr = primer_2.position pr_name = primer_2.name pr_seq = primer_2.sequence pf = primer_1.position pf_name = primer_1.name pf_seq = primer_1.sequence else: pr = 0 pf = 0 if abs(pr) >= abs(pf): L_pcr = -pr - pf else: L_pcr = L - pr - pf show_seq = plotpcr(str(seq), pf_seq, pr_seq) primer_name = [pf_name] + [pr_name] primer_position = [pf, pr] else: L_pcr = 'You can only select two primers!!' primer_name = ['',''] show_seq = "can't pcr" primer_name = [''] + [''] primer_position = ['x', 'x'] return render(request, template_name='primer/seq.html', context={'seq': seq, 'L': L, 'primers': primers, 'show_seq': show_seq, 'primerFilter': primerFilter, 'primer_name': primer_name, 'L_pcr': L_pcr, 'vector_name': vector_name, 'primer_position': primer_position, })