def GetPTDPrimerInfo(self, primer_info): #{ # [event_id, chimera.id, chimera.left, chimera.right, gene.id, # gene.left, gene.right] # event_id event_id = primer_info.EventID() # contig_id contig = PrimerSeqCls(primer_info.ctg_id) # contig_left contig.left = min(primer_info.c2t_aligns[0].ctg_end, primer_info.c2t_aligns[1].ctg_start) # contig_right contig.right = max(primer_info.c2t_aligns[0].ctg_end, primer_info.c2t_aligns[1].ctg_start) # gene_id gene = PrimerSeqCls(primer_info.c2t_aligns[0].transcript) # gene.left gene.left = min(primer_info.c2t_aligns[0].transcript_end, primer_info.c2t_aligns[1].transcript_start) # gene.right gene.right = max(primer_info.c2t_aligns[0].transcript_end, primer_info.c2t_aligns[1].transcript_start) # dup_length dup_length = (gene.right - gene.left) + 1 # construct inferred chimera sequence ctg_overlap = primer_info.C2TAlignOverlap() extra = "" if (0 > ctg_overlap): #{ extra = self.contigs[primer_info.ctg_id][contig_left+1:contig_right] #} end if if ("-" == primer_info.c2t_aligns[0].strand): #{ extra = ReverseComplement(extra) #} end if # chimera_id chimera = PrimerSeqCls("G%i_%s_%s" % (primer_info.group_id, primer_info.ctg_id, gene.id)) chimera.seq = (self.transcripts[gene.id][:gene.right] + extra + self.transcripts[gene.id][gene.left-1:]) if (chimera.id in self.transcripts and self.transcripts[chimera.id] != chimera.seq): #{ raise PrimerDesignerError("conflicting chimeric PTD sequences: %s" % chimera.id) #} end if self.transcripts[chimera.id] = chimera.seq # chimera_left chimera.left = gene.left # chimera_right chimera.right = gene.right + len(extra) + dup_length DebugMsg(self, "Overlap: %i, Extra: \"%s\", WT_Length: %i, Dup_Length: " "%i, CT_Length: %i, Calc_Length: %i" % (ctg_overlap, extra, len(self.transcripts[gene.id]), dup_length, len(chimera.seq), len(self.transcripts[gene.id])+len(extra)+dup_length)) return map(str, [event_id, chimera.id, chimera.left, chimera.right, gene.id, gene.left, gene.right])
def ConstructFusionSeq(self, primer_info, contig, ctg_overlap): #{ # chimera_id chimera = PrimerSeqCls("G%i_%s_%s/%s" % (primer_info.group_id, primer_info.ctg_id, primer_info.c2t_aligns[0].transcript, primer_info.c2t_aligns[1].transcript)) left_seq = self.RefSeqFromAlign0(primer_info.c2t_aligns[0]) right_seq = self.RefSeqFromAlign1(primer_info.c2t_aligns[1]) extra = "" if (0 > ctg_overlap): #{ extra = self.contigs[primer_info.ctg_id][contig.left:contig.right-1] else: right_seq = right_seq[ctg_overlap:] #} end if chimera.seq = (left_seq + extra + right_seq) # chimera_left chimera.left = min(len(left_seq), len(left_seq)+ctg_overlap) # chimera_right chimera.right = max(len(left_seq), len(left_seq)+ctg_overlap) DebugMsg(self, "Left: %s\nExtra: %s\nRight: %s\nOverlap: %i, " "WT_Length0: %i, WT_Length1: %i, Extra_len: %i, CT_Length: %i, " "Calc_Length: %i" % (left_seq, extra, right_seq, ctg_overlap, len(left_seq), len(right_seq)+max(0,ctg_overlap), len(extra), len(chimera.seq), len(left_seq)+len(right_seq)+len(extra))) return chimera