def rxn(self, string, k = 1, rtype = 'condensed'): """ Dummy function for generating reactions between formal species """ reactants, products = string.split('->') reactants = reactants.split('+') products = products.split('+') reactants = [self.cplx(x) for x in reactants] products = [self.cplx(x) for x in products] rxn = PepperReaction(reactants, products, rtype.strip()) rxn.rate_constant = k self.reactions.add(rxn)
def test_condense_simple(self): complexes, reactions = read_pil(""" # File generated by peppercorn-v0.5.0 # Domain Specifications length d1 = 15 length t0 = 5 # Resting-set Complexes c1 = t0 d1 c2 = d1( + ) t0* c4 = t0( d1( + ) ) c5 = d1 # Transient Complexes c3 = t0( d1 + d1( + ) ) # Detailed Reactions reaction [bind21 = 100 /M/s ] c1 + c2 -> c3 reaction [open = 50 /s ] c3 -> c1 + c2 reaction [branch-3way = 50 /s ] c3 -> c4 + c5 """) # (rs1) c1 c4 (rs3) # \ / # <---> c3 ----> # / \ # (rs2) c2 c5 (rs4) enum = Enumerator(complexes.values(), reactions) enum.enumerate() enum.condense() for con in enum.condensed_reactions: assert con.rate_constant[0] == 50 del enum # old interface ... c1 = PepperMacrostate([complexes['c1']]) c2 = PepperMacrostate([complexes['c2']]) c4 = PepperMacrostate([complexes['c4']]) c5 = PepperMacrostate([complexes['c5']]) cond_react = PepperReaction([c1, c2], [c4, c5], 'condensed') cond_react.rate_constant = 20, None enum = Enumerator(complexes.values(), reactions) enum.dry_run() enumRG = PepperCondensation(enum) enumRG.condense() for con in enumRG.condensed_reactions: assert con.rate_constant[0] == 20