Source code for ReactionFunctions

import numpy as np
import PropensityFunctions as Propensity
import CoreClasses as Core 
import ReplicatorFunctions as Rep
import random

[docs]def pick_reaction(dice_roll, CRS, concentrations, **kwargs): ''' Picks a reaction to occur stochastically Arguements: - dice_roll: float which should be a number between zero and the total propensity of reactions - CRS: the CRS object which contains all possible reactions and molecules - concentrations: the list of concentrations indexed by molecule ID - propensity_function: which propensity function to use, default: standard Return: - rxn: a Reaction object''' checkpoint = 0.0 for rxn in CRS.reactions: reactant_concentrations = [concentrations[i] for i in rxn.reactants] catalyst_concentrations = [concentrations[i] for i in rxn.catalysts] reactant_coeff = rxn.reactant_coeff catalyzed_constants = rxn.catalyzed_constants #print rxn.catalysts if rxn.prop == 'STD': # print "Reactant concentrations: ", reactant_concentrations # print 'Product ID numbers: ',rxn.products checkpoint += Propensity.standard_propensity(rxn, CRS, concentrations) #print "dice_roll: ", dice_roll, ' checkpoint: ', checkpoint if checkpoint >= dice_roll: break elif rxn.prop == 'RCM': mu = kwargs ['mu'] #print mu checkpoint += Propensity.replicator_composition_propensity_envMutation(rxn, CRS, concentrations, mu = mu) #print "dice_roll: ", dice_roll, ' checkpoint: ', checkpoint if checkpoint >= dice_roll: mutation_dice_roll = random.random()*Propensity.replicator_composition_propensity_envMutation(rxn, CRS, concentrations, mu = mu) rep_rxn = Rep.pick_replicator(mutation_dice_roll, rxn, CRS, concentrations, mu = mu) rxn = rep_rxn break #raw_input("Enter") return rxn
[docs]def execute_rxn(rxn, CRS, concentrations): ''' Executes a single reaction instance Arguements: - rxn: Reaction object to execute_rxn - CRS: CRS object containing the entire system - concentrations: list of molecule concentrations indexed by ID Return: - concentrations: updated list of molecule concentrations indexed by ID ''' num_reactants = len(rxn.reactants) num_products = len(rxn.products) # Reduce Reactants for i in range(num_reactants): reactant_index = rxn.reactants[i] concentrations[reactant_index] -= rxn.reactant_coeff[i] # Increase Products for i in range(num_products): product_index =rxn.products[i] concentrations[product_index] += rxn.product_coeff[i] return concentrations