def get_frames(seq1, seq2, shift_left, shift_right, all_frames): """Take output of check_input function and insert into flanking sequences. take from database all miRNA results and check if ends of input is suitable for flanking sequences. If first value == and miRNA_end_5 second value == miRNA_end_3 then simply concatenate sequences flanks5_s + first_sequence + loop_s + second_sequence + flanks3_s. If any end is different function has to modify end of the insert: Right end: if miRNA_end_5 < first_end add to right site of second sequence additional nucleotides (as many as |miRNA_end_5 - first_end|) like (dots are nucleotides to add, big letter are flanking sequences, small are input): AAAGGGGCTTTTagtcttaga TTTCCCCGAA....agaatct if miRNA_end_5 > first_end cut nucleotides from rigth site of flanks3_s and/or from right site of second sequence before cut: AAAGGGGCTTTTagtcttaga TTTCCCCGAAAATTcctcagaatct (-2, +2) After AAAGGGGCTTTTagtcttaga TTTCCCCGAAAAtcagaatct Returns list of tuples (frame, sequence_1 sequence_2) input: string, string, int, int, pri-miRNA objects output: List of list of Backbone object, 1st strand 2nd strand """ frames = [] for elem in all_frames: frame = Backbone(**elem) if shift_left == frame.miRNA_end_5 and shift_right == frame.miRNA_end_5: frames.append([frame, seq1, seq2]) else: _seq1 = seq1[:] _seq2 = seq2[:] #miRNA 5 end (left) if frame.miRNA_end_5 < shift_left: if frame.miRNA_end_5 < 0 and shift_left < 0: _seq2 += reverse_complement( frame.flanks5_s[frame.miRNA_end_5:shift_left]) elif frame.miRNA_end_5 < 0 and shift_left > 0: frame.flanks5_s = frame.flanks5_s[:frame.miRNA_end_5] _seq2 += reverse_complement(_seq1[:shift_left]) elif shift_left == 0: _seq2 += reverse_complement( frame.flanks5_s[:frame.miRNA_end_5]) elif frame.miRNA_end_5 == 0: _seq2 += reverse_complement(_seq1[:frame.miRNA_end_5]) else: _seq2 += reverse_complement( _seq1[frame.miRNA_end_5:shift_left]) elif frame.miRNA_end_5 > shift_left: if frame.miRNA_end_5 > 0 and shift_left < 0: frame.flanks5_s += reverse_complement( _seq2[frame.miRNA_end_5:]) frame.flanks3_s = frame.flanks3_s[frame.miRNA_end_5:] elif frame.miRNA_end_5 > 0 and shift_left > 0: frame.flanks5_s += reverse_complement( frame.flanks3_s[shift_left:frame.miRNA_end_5]) elif shift_left == 0: frame.flanks5_s += reverse_complement( frame.flanks3_s[:frame.miRNA_end_5]) elif frame.miRNA_end_5 == 0: frame.flanks5_s += reverse_complement(_seq2[shift_left:]) else: frame.flanks5_s += reverse_complement( _seq2[shift_left:frame.miRNA_end_5]) #miRNA 3 end (right) if frame.miRNA_end_3 < shift_right: if frame.miRNA_end_3 < 0 and shift_right > 0: frame.loop_s = frame.loop_s[-frame.miRNA_end_3:] frame.loop_s += reverse_complement( _seq1[-shift_right:]) elif frame.miRNA_end_3 > 0 and shift_right > 0: frame.loop_s += reverse_complement( _seq1[-shift_right:-frame.miRNA_end_3]) elif frame.miRNA_end_3 == 0: frame.loop_s += reverse_complement(_seq1[-shift_right:]) elif shift_right == 0: frame.loop_s += reverse_complement( frame.loop_s[:-frame.miRNA_end_3]) else: frame.loop_s += reverse_complement( frame.loop_s[-shift_right:-frame.miRNA_end_3]) elif frame.miRNA_end_3 > shift_right: if frame.miRNA_end_3 > 0 and shift_right < 0: _seq1 += reverse_complement( _seq2[:-shift_right]) frame.loop_s = frame.loop_s[:-frame.miRNA_end_3] elif frame.miRNA_end_3 > 0 and shift_right > 0: _seq1 += reverse_complement( frame.loop_s[-frame.miRNA_end_3:-shift_right]) elif shift_right == 0: _seq1 += reverse_complement( frame.loop_s[:frame.miRNA_end_3]) elif frame.miRNA_end_3 == 0: _seq1 += reverse_complement(_seq2[:-shift_right]) else: _seq1 += reverse_complement( _seq2[-frame.miRNA_end_3:-shift_right]) frames.append([frame, _seq1, _seq2]) return frames
def get_frames(seq1, seq2, shift_left, shift_right, all_frames): """Take output of check_input function and insert into flanking sequences. take from database all miRNA results and check if ends of input is suitable for flanking sequences. If first value == and miRNA_end_5 second value == miRNA_end_3 then simply concatenate sequences flanks5_s + first_sequence + loop_s + second_sequence + flanks3_s. If any end is different function has to modify end of the insert: Right end: if miRNA_end_5 < first_end add to right site of second sequence additional nucleotides (as many as |miRNA_end_5 - first_end|) like (dots are nucleotides to add, big letter are flanking sequences, small are input): AAAGGGGCTTTTagtcttaga TTTCCCCGAA....agaatct if miRNA_end_5 > first_end cut nucleotides from rigth site of flanks3_s and/or from right site of second sequence before cut: AAAGGGGCTTTTagtcttaga TTTCCCCGAAAATTcctcagaatct (-2, +2) After AAAGGGGCTTTTagtcttaga TTTCCCCGAAAAtcagaatct Returns list of tuples (frame, sequence_1 sequence_2) input: string, string, int, int, pri-miRNA objects output: List of list of Backbone object, 1st strand 2nd strand """ frames = [] for elem in all_frames: frame = Backbone(**elem) if shift_left == frame.miRNA_end_5 and shift_right == frame.miRNA_end_5: frames.append([frame, seq1, seq2]) else: _seq1 = seq1[:] _seq2 = seq2[:] #miRNA 5 end (left) if frame.miRNA_end_5 < shift_left: if frame.miRNA_end_5 < 0 and shift_left < 0: _seq2 += reverse_complement( frame.flanks5_s[frame.miRNA_end_5:shift_left]) elif frame.miRNA_end_5 < 0 and shift_left > 0: frame.flanks5_s = frame.flanks5_s[:frame.miRNA_end_5] _seq2 += reverse_complement(_seq1[:shift_left]) elif shift_left == 0: _seq2 += reverse_complement( frame.flanks5_s[:frame.miRNA_end_5]) elif frame.miRNA_end_5 == 0: _seq2 += reverse_complement(_seq1[:frame.miRNA_end_5]) else: _seq2 += reverse_complement( _seq1[frame.miRNA_end_5:shift_left]) elif frame.miRNA_end_5 > shift_left: if frame.miRNA_end_5 > 0 and shift_left < 0: frame.flanks5_s += reverse_complement( _seq2[frame.miRNA_end_5:]) frame.flanks3_s = frame.flanks3_s[frame.miRNA_end_5:] elif frame.miRNA_end_5 > 0 and shift_left > 0: frame.flanks5_s += reverse_complement( frame.flanks3_s[shift_left:frame.miRNA_end_5]) elif shift_left == 0: frame.flanks5_s += reverse_complement( frame.flanks3_s[:frame.miRNA_end_5]) elif frame.miRNA_end_5 == 0: frame.flanks5_s += reverse_complement(_seq2[shift_left:]) else: frame.flanks5_s += reverse_complement( _seq2[shift_left:frame.miRNA_end_5]) #miRNA 3 end (right) if frame.miRNA_end_3 < shift_right: if frame.miRNA_end_3 < 0 and shift_right > 0: frame.loop_s = frame.loop_s[-frame.miRNA_end_3:] frame.loop_s += reverse_complement(_seq1[-shift_right:]) elif frame.miRNA_end_3 > 0 and shift_right > 0: frame.loop_s += reverse_complement( _seq1[-shift_right:-frame.miRNA_end_3]) elif frame.miRNA_end_3 == 0: frame.loop_s += reverse_complement(_seq1[-shift_right:]) elif shift_right == 0: frame.loop_s += reverse_complement( frame.loop_s[:-frame.miRNA_end_3]) else: frame.loop_s += reverse_complement( frame.loop_s[-shift_right:-frame.miRNA_end_3]) elif frame.miRNA_end_3 > shift_right: if frame.miRNA_end_3 > 0 and shift_right < 0: _seq1 += reverse_complement(_seq2[:-shift_right]) frame.loop_s = frame.loop_s[:-frame.miRNA_end_3] elif frame.miRNA_end_3 > 0 and shift_right > 0: _seq1 += reverse_complement( frame.loop_s[-frame.miRNA_end_3:-shift_right]) elif shift_right == 0: _seq1 += reverse_complement( frame.loop_s[:frame.miRNA_end_3]) elif frame.miRNA_end_3 == 0: _seq1 += reverse_complement(_seq2[:-shift_right]) else: _seq1 += reverse_complement( _seq2[-frame.miRNA_end_3:-shift_right]) frames.append([frame, _seq1, _seq2]) return frames