def find_pep_change(self, refseq): """Finds effect on protein sequence given event""" if self.event_type == 'novel_transcript': return self.longest_orf() coord = re.split('[:-]', self.coordinate()) variant = None if self.event_type == 'novel_utr': # include the block that's 'matching' (partially) if min(self.align_blocks) == 1: b1 = self.align_blocks[0] b2 = self.align_blocks[-1] + 1 else: b1 = self.align_blocks[0] - 1 b2 = self.align_blocks[-1] qcoord1 = self.align.query_blocks[b1-1][0] qcoord2 = self.align.query_blocks[b2-1][1] else: qcoord1 = self.align.query_blocks[self.align_blocks[0]-1][0] qcoord2 = self.align.query_blocks[self.align_blocks[-1]-1][1] if qcoord1 < qcoord2: variant = self.align.contig.sequence[qcoord1-1:qcoord2] else: variant = self.align.contig.sequence[qcoord2-1:qcoord1] variant = reverse_complement(variant) # constructs cDNA sequence of both reference and sequence with event cdna_original = self.construct_cdna(coord, self.txt, refseq) cdna_changed = self.construct_cdna(coord, self.txt, refseq, variant=variant, change=self.event_type, exons=self.exons) frame = 0 if self.event_type == 'novel_utr': frame = None if self.txt.strand == '+': pep_original = translate(cdna_original, orient='+', frame=0) pep_changed = translate(cdna_changed, orient='+', frame=frame) else: pep_original = translate(cdna_original, orient='-', frame=0) pep_changed = translate(cdna_changed, orient='-', frame=frame) if not pep_changed or not pep_original or self.event_type == 'read-through': return 'na' self.orf = pep_change(pep_original, pep_changed)
def find_pep_change(self, coord, txt, refseq, variant, change): """Finds peptide change due to variant""" cdna_original = self.construct_cdna(coord, txt, refseq) cdna_changed = self.construct_cdna(coord, txt, refseq, variant, change) if txt.strand == '+': pep_original = translate(cdna_original, orient='+', frame=0) pep_changed = translate(cdna_changed, orient='+', frame=0) else: pep_original = translate(cdna_original, orient='-', frame=0) pep_changed = translate(cdna_changed, orient='-', frame=0) if not pep_changed or not pep_original: return 'na' mutation = pep_change(pep_original, pep_changed) return mutation
def longest_orf(self): """Returns longest ORF of all 6-frame translation""" orf = translate(self.align.contig.sequence, full=True) if orf: coverage = "%.2f" % ((float(orf[1]) - float(orf[0]) + 1) / float(len(self.align.contig.sequence))) self.orf = "%d-%d;%s;%s..%s;%s" % (orf[0], orf[1], coverage, orf[-1][:3], orf[-1][-3:], orf[2]) else: self.orf = 'na' return None