def sequence(self, per_exon=False): """ if per-exon is True, return an array of exon sequences NOTE: this is never reverse-complemented. TODO?? """ db = self.db if not per_exon: start = self.txStart + 1 return _sequence(db, self.chrom, start, self.txEnd) else: # TODO: use same strategy as cds_sequence to reduce # of requests. seqs = [] for start, end in self.exons: seqs.append(_sequence(db, self.chrom, start + 1, end)) return seqs
def cds_sequence(self): seqs = [] cds = self.cds # grab all the sequences at once to reduce number of requests. all_seq = _sequence(self.db, self.chrom, cds[0][0] + 1, cds[-1][1]) lowest = cds[0][0] cds0 = [(s - lowest, e - lowest) for s, e in cds] for cstart, cend in cds0: seqs.append(all_seq[cstart:cend]) return seqs
def _cds_sequence(self, cds): seqs = [] if len(cds) == 0: return [] # grab all the sequences at once to reduce number of requests. all_seq = _sequence(self.db, self.chrom, cds[0][0] + 1, cds[-1][1]) if len(cds) == 1: return all_seq lowest = cds[0][0] cds0 = [(s - lowest, e - lowest) for s, e in cds] for cstart, cend in cds0: seqs.append(all_seq[cstart:cend]) return seqs