Source code for bioplus.wrappers
# this module wraps the built-in module random
# and provides some useful random sequence generators, etc.
import random
import itertools
[docs]def random_seq(n=1,GC=0.5):
'''random_seq provides a random nucleotide (A, T, G, or C). You may optionally provide n, a positive integer, which will cause random_seq to return a string of n nucleotides. You may also optionally provide GC, the probability of encountering a G or C, which must be on the closed interval [0,1]. The probability of encountering an A or T is calculated as 1 - GC.
'''
return ''.join( list(random_seq_generator(n,GC)) )
[docs]def random_seq_generator(n=1,GC=0.5):
'''
random_seq_generator acts like random_seq, but returns a generator that
returns the nucleotides one by one
'''
myError = ValueError('randomN requires a positive integer n (default = 1) \
and a probability GC (float 0.0 to 1.0)')
#AT = 1 - GC
if not type(GC)==float or GC == 0 or GC == 1: raise myError
elif not GC >= 0 and GC <= 1: raise myError
elif not type(n)==int: raise myError
elif n < 1: raise myError
else:
randomGenerator = itertools.repeat(random.random())
gc_or_at = lambda x: random.choice(['G','C']) \
if x < GC else random.choice(['A','T'])
return itertools.imap(gc_or_at, randomGenerator)