def buildModel( num_bins = 3, annotate_terminals = None ): """build evolutionary trace like model. This model is parameterized by the number of bins. Each bin corresponds to a column evolving at a differnent rate. X chains {X: 0..num_bins-1} are created, in which transitions are parameterized as KX * PAB, where PAB is the rate for going from A to B (amino acid alphabet), and KX is rate constant for chain X. If initial_model is given, initial frequencies and rate estimates are taken from this model. Otherwise, uniform frequencies are chosen. Note, that the naming scheme in the initial model has to follow the one chosen here. """ model = XGram.Model.Model() grammar = XGram.Model.Grammar() alphabet = XGram.Model.Alphabet() for x in range(num_bins): chain = XGram.Model.Chain() generator_chain = Chain( \ alphabet = Bio.Alphabet.IUPAC.IUPACProtein.letters.lower(), generator_initial_states = InitialStatesParametric( is_const = True), generator_transitions = TransitionsScaledConst( rate = "K%i" % x, is_const = True) ) generator_chain.buildGrammar( chain ) chain.setTerminals( ("T%i" % x,) ) grammar.addChain( chain ) # add annotaions generator_grammar = GrammarLinearSequenceMultipleChains( annotate_terminals = annotate_terminals ) generator_grammar.buildGrammar( grammar ) grammar.setName( "XGramProteinSites" ) generator_alphabet = AlphabetProtein() generator_alphabet.buildGrammar(alphabet) model.setAlphabet( alphabet ) model.setGrammar( grammar ) return model
def buildModel(num_bins=3, annotate_terminals=None): """build evolutionary trace like model. This model is parameterized by the number of bins. Each bin corresponds to a column evolving at a differnent rate. X chains {X: 0..num_bins-1} are created, in which transitions are parameterized as KX * PAB, where PAB is the rate for going from A to B (amino acid alphabet), and KX is rate constant for chain X. If initial_model is given, initial frequencies and rate estimates are taken from this model. Otherwise, uniform frequencies are chosen. Note, that the naming scheme in the initial model has to follow the one chosen here. """ model = XGram.Model.Model() grammar = XGram.Model.Grammar() alphabet = XGram.Model.Alphabet() for x in range(num_bins): chain = XGram.Model.Chain() generator_chain = Chain( \ alphabet = Bio.Alphabet.IUPAC.IUPACProtein.letters.lower(), generator_initial_states = InitialStatesParametric( is_const = True), generator_transitions = TransitionsScaledConst( rate = "K%i" % x, is_const = True) ) generator_chain.buildGrammar(chain) chain.setTerminals(("T%i" % x, )) grammar.addChain(chain) # add annotaions generator_grammar = GrammarLinearSequenceMultipleChains( annotate_terminals=annotate_terminals) generator_grammar.buildGrammar(grammar) grammar.setName("XGramProteinSites") generator_alphabet = AlphabetProtein() generator_alphabet.buildGrammar(alphabet) model.setAlphabet(alphabet) model.setGrammar(grammar) return model
def __init__( self, generator_initial_states = None, generator_transitions = None, *args, **kwargs ): if not generator_transitions: generator_transitions = Transitions( *args, **kwargs ) # the alphabet is given by the codon table, but the states # are separated. alphabet = ('a', 'c', 'g', 't' ) Chain.__init__(self, alphabet = alphabet, generator_initial_states = generator_initial_states, generator_transitions = generator_transitions, ) self.mName = "dna"
def __init__( self, codon_table = Bio.Data.CodonTable.standard_dna_table, generator_initial_states = None, generator_transitions = None ): if not generator_transitions: generator_transitions = TransitionsCodons( codon_table = codon_table ) self.mCodonTable = codon_table # the alphabet is given by the codon table, but the states # are separated. alphabet = map( lambda x: tuple(x.lower()), codon_table.forward_table.keys()) Chain.__init__(self, alphabet = alphabet, generator_initial_states = generator_initial_states, generator_transitions = generator_transitions, ) self.mName = "codons"
def __init__(self, generator_initial_states=None, generator_transitions=None, *args, **kwargs): if not generator_transitions: generator_transitions = Transitions(*args, **kwargs) # the alphabet is given by the codon table, but the states # are separated. alphabet = ('a', 'c', 'g', 't') Chain.__init__( self, alphabet=alphabet, generator_initial_states=generator_initial_states, generator_transitions=generator_transitions, ) self.mName = "dna"
def __init__(self, codon_table=Bio.Data.CodonTable.standard_dna_table, generator_initial_states=None, generator_transitions=None): if not generator_transitions: generator_transitions = TransitionsCodons(codon_table=codon_table) self.mCodonTable = codon_table # the alphabet is given by the codon table, but the states # are separated. alphabet = map(lambda x: tuple(x.lower()), codon_table.forward_table.keys()) Chain.__init__( self, alphabet=alphabet, generator_initial_states=generator_initial_states, generator_transitions=generator_transitions, ) self.mName = "codons"
def buildGrammar(self, chain): """output the grammar.""" Chain.buildGrammar( self, chain ) chain.setUpdatePolicy( "parametric" )
def buildGrammar(self, chain): """output the grammar.""" Chain.buildGrammar(self, chain) chain.setUpdatePolicy("parametric")
def buildPFold(strand_symmetric=False, fix_frequencies=False, weak_strong=False, copy_parameters=None): """build the PFold grammar. if copy_parameters is set to a filename of a grammar, then parameters from the grammar are copied to the generated chain. if weak_strong is set to true, than the strand-symmetric/weak-strong model is built. Note: for this option to be in effect strand_symmetric has to be set to True . """ alphabet = XGram.Model.Alphabet() XGram.Generator.AlphabetRNA().buildGrammar(alphabet) # build di-nucleotide alphabet aa_mono = [] for x in alphabet.getTokens(): aa_mono.append((x, )) chain1 = XGram.Model.Chain() XGram.Generator.Chain(alphabet=aa_mono).buildGrammar(chain1) chain1.setUpdatePolicy("rev") chain1.setTerminals(('NUC', )) aa_di = [] for x in alphabet.getTokens(): for y in alphabet.getTokens(): aa_di.append((x, y)) chain2 = XGram.Model.Chain() if strand_symmetric: if weak_strong: generator_transitions = \ TransitionsSymmetricStemWeakStrong( fix_frequencies = fix_frequencies ) else: generator_transitions = \ TransitionsSymmetricStem( fix_frequencies = fix_frequencies ) generator_initial_states = InitialStatesFromTransitions() Chain(generator_transitions=generator_transitions, generator_initial_states=generator_initial_states, alphabet=aa_di).buildGrammar(chain2) chain2.setUpdatePolicy("parametric") else: Chain(alphabet=aa_di).buildGrammar(chain2) chain2.setUpdatePolicy("rev") chain2.setTerminals(('LNUC', 'RNUC')) grammar = XGram.Model.Grammar() grammar.addChain(chain1) grammar.addChain(chain2) ## build Grammar for PFold GeneratorGrammarPFold().buildGrammar(grammar) if strand_symmetric: if weak_strong: grammar.setName("pfold_strand_symmetric_weak_strong") else: grammar.setName("pfold_strand_symmetric") else: grammar.setName("pfold") ## if desired, copy data from another chain if copy_parameters: other = XGram.Parser.parseGrammar( open(copy_parameters, "r").readlines()) if strand_symmetric: ## first copy rules over grammar.copyParameters(other.mGrammar, remove_missing=True, skip_rules=False, skip_variables=True, skip_constants=True, skip_chains=True) ## filter states from the chains grammar.copyParameters(other.mGrammar, remove_missing=True, copy=False, skip_rules=True, skip_variables=True, skip_constants=True, skip_chains=False) grammar.checkContent() else: grammar.copyParameters(other.mGrammar, remove_missing=True) model = XGram.Model.Model() model.setGrammar(grammar) model.setAlphabet(alphabet) return model