def allSingleBaseMutations(templateSequence, positions=None): """ Same as ``uniqueSingleBaseMutations``, but no filtering as to whether the mutated sequences are unique. """ allBases = "ACGT" positions = positions or xrange(0, len(templateSequence)) for tplStart in positions: tplBase = templateSequence[tplStart] # snvs for subsBase in allBases: if subsBase != tplBase: yield cc.Mutation_Substitution(tplStart, subsBase) # Insertions for insBase in allBases: yield cc.Mutation_Insertion(tplStart, insBase) # Deletion yield cc.Mutation_Deletion(tplStart, 1)
def uniqueSingleBaseMutations(templateSequence, positions=None): """ Return an iterator over all single-base mutations of a templateSequence that result in unique mutated sequences. """ allBases = "ACGT" positions = positions or xrange(0, len(templateSequence)) for tplStart in positions: tplBase = templateSequence[tplStart] prevTplBase = templateSequence[tplStart-1] if (tplStart > 0) else None # snvs for subsBase in allBases: if subsBase != tplBase: yield cc.Mutation_Substitution(tplStart, subsBase) # Insertions---only allowing insertions that are not cognate # with the previous base. for insBase in allBases: if insBase != prevTplBase: yield cc.Mutation_Insertion(tplStart, insBase) # Deletion--only allowed if refBase does not match previous tpl base if tplBase != prevTplBase: yield cc.Mutation_Deletion(tplStart, 1)