def SSAModel(base, vol, nrep=1, y0_pop=None): """ nrep repeats the model (uncoupled system) to allow for the passing of a matrix of initial values. y0_pop should be a matrix of size (NREP x NEQ) """ if y0_pop is None: y0_pop = np.tile((vol * base.y0[:-1]), (nrep, 1)).astype(int) else: y0_pop = vol * y0_pop stoch_fn = stk.StochKitModel(name=base.model.getOption('name') + '_stoch_' + str(nrep)) bd = mb.SSA_builder(mb.SSA_builder.expand_labelarray(base.ylabels, nrep), mb.SSA_builder.expand_labelarray(base.plabels, nrep), y0_pop.flatten(order='C'), np.tile(base.paramset, (nrep, 1)).flatten(order='C'), stoch_fn, vol) for index in xrange(nrep): si = '_' + str(index) bd.SSA_tyson_x('x prod nonlinear term' + si, 'X' + si, 'Y' + si, 'P' + si) bd.SSA_MA_deg('x degradation' + si, 'X' + si, '1') bd.SSA_MA_tln('y creation' + si, 'Y' + si, 'kt' + si, 'X' + si) bd.SSA_MA_deg('y degradation linear' + si, 'Y' + si, 'kd' + si) bd.SSA_tyson_y('y nonlinear term' + si, 'Y' + si, 'a0' + si, 'a1' + si, 'a2' + si) return stoch_fn
def SSAModel(base, vol, nrep=1, y0_pop=None): """ nrep repeats the model (uncoupled system) to allow for the passing of a matrix of initial values. y0_pop should be a matrix of size (NREP x NEQ) """ if y0_pop is None: y0_pop = np.tile((vol * base.y0[:-1]), (nrep, 1)).astype(int) else: y0_pop = vol * y0_pop stoch_fn = stk.StochKitModel(name=base.model.getOption('name') + '_stoch_' + str(nrep)) bd = mb.SSA_builder(mb.SSA_builder.expand_labelarray(base.ylabels, nrep), mb.SSA_builder.expand_labelarray(base.plabels, nrep), y0_pop.flatten(order='C'), np.tile(base.paramset, (nrep, 1)).flatten(order='C'), stoch_fn, vol) # ADD REACTIONS # ============= # for index in xrange(nrep): si = '_' + str(index) bd.SSA_MA(name="Y1_production" + si, reactants={bd.species_array[bd.ydict['Y2' + si]]: 1}, products={bd.species_array[bd.ydict['Y1' + si]]: 1}, rate=bd.param_array[bd.pdict['c1x1' + si]]) bd.SSA_MA(name="Y1_Y2_deg" + si, reactants={ bd.species_array[bd.ydict['Y1' + si]]: 1, bd.species_array[bd.ydict['Y2' + si]]: 1 }, rate=bd.param_array[bd.pdict['c2' + si]]) bd.SSA_MA(name="Y1_X2" + si, reactants={bd.species_array[bd.ydict['Y1' + si]]: 1}, products={ bd.species_array[bd.ydict['Y1' + si]]: 2, bd.species_array[bd.ydict['Y3' + si]]: 1 }, rate=bd.param_array[bd.pdict['c3x2' + si]]) bd.SSA_MA(name="Y1_deg" + si, reactants={bd.species_array[bd.ydict['Y1' + si]]: 2}, rate=bd.param_array[bd.pdict['c4' + si]]) bd.SSA_MA(name="Y2_prod" + si, reactants={bd.species_array[bd.ydict['Y3' + si]]: 1}, products={bd.species_array[bd.ydict['Y2' + si]]: 1}, rate=bd.param_array[bd.pdict['c5x3' + si]]) return stoch_fn
def SSAModel(base, vol, nrep=1, y0_pop=None): """ nrep repeats the model (uncoupled system) to allow for the passing of a matrix of initial values. y0_pop should be a matrix of size (NREP x NEQ) """ if y0_pop is None: y0_pop = np.tile((vol*base.y0[:-1]), (nrep, 1)).astype(int) else: y0_pop = vol*y0_pop stoch_fn = stk.StochKitModel( name=base.model.getOption('name') + '_stoch_' + str(nrep)) bd = mb.SSA_builder( mb.SSA_builder.expand_labelarray(base.ylabels, nrep), mb.SSA_builder.expand_labelarray(base.plabels[1:], nrep), y0_pop.flatten(order='C'), np.tile(base.paramset, (nrep, 1)).flatten(order='C'), stoch_fn, vol) # ADD REACTIONS # ============= # for index in xrange(nrep): si = '_' + str(index) bd.SSA_MM_P_Goodwin('X1 Production'+si, Prod='X1'+si, Rep='X3'+si, P=int(base.paramset[base.pdict['h']])) bd.SSA_MA_tln('X2 Production'+si, 'X2'+si, '1', 'X1'+si) bd.SSA_MA_tln('X3 Production'+si, 'X3'+si, '1', 'X2'+si) bd.SSA_MA(name="X1 Deg" + si, reactants={bd.species_array[bd.ydict['X1' + si]]:1}, rate=bd.param_array[bd.pdict['a' + si]]) bd.SSA_MA(name="X2 Deg" + si, reactants={bd.species_array[bd.ydict['X2' + si]]:1}, rate=bd.param_array[bd.pdict['i' + si]]) bd.SSA_MA(name="X3 Deg" + si, reactants={bd.species_array[bd.ydict['X3' + si]]:1}, rate=bd.param_array[bd.pdict['r' + si]]) return stoch_fn
def SSAModel(base, vol): """ Abandoning, as stochkit (at least the python version) does not want to handle a tri-molecular reaction. Expansion into multiple events (i.e. oregonator) will be tried next """ y0_pop = (vol * base.y0[:-1]).astype(int) stoch_fn = stk.StochKitModel(name=base.model.getOption('name') + '_stoch') bd = mb.SSA_builder(base.ylabels, base.plabels, y0_pop, base.paramset, stoch_fn, vol) # ADD REACTIONS # ============= rxn1 = stk.Reaction(name="Y1_production", products={bd.species_array[bd.ydict['Y1']]: 1}, massaction=True, rate=bd.param_array[bd.pdict['c1x1']]) bd.SSAmodel.addReaction(rxn1) rxn2 = stk.Reaction(name="Y2_from_Y1", reactants={bd.species_array[bd.ydict['Y1']]: 1}, products={bd.species_array[bd.ydict['Y2']]: 1}, massaction=True, rate=bd.param_array[bd.pdict['c2x2']]) bd.SSAmodel.addReaction(rxn2) rxn3 = stk.Reaction(name="trimolecular", reactants={ bd.species_array[bd.ydict['Y1']]: 2, bd.species_array[bd.ydict['Y2']]: 1 }, products={bd.species_array[bd.ydict['Y1']]: 3}, massaction=True, rate=bd.param_array[bd.pdict['c3']]) bd.SSAmodel.addReaction(rxn3) rxn4 = stk.Reaction(name="Y2_deg", reactants={bd.species_array[bd.ydict['Y2']]: 1}, massaction=True, rate=bd.param_array[bd.pdict['c4']]) bd.SSAmodel.addReaction(rxn4) return stoch_fn
def SSAModel(base, vol, nrep=1, y0_pop=None): if y0_pop is None: y0_pop = np.tile((vol * base.y0[:-1]), (nrep, 1)).astype(int) else: y0_pop = vol * y0_pop stoch_fn = stk.StochKitModel(name=base.model.getOption('name') + '_stoch_' + str(nrep)) bd = mb.SSA_builder(mb.SSA_builder.expand_labelarray(base.ylabels, nrep), mb.SSA_builder.expand_labelarray(base.plabels, nrep), y0_pop.flatten(order='C'), np.tile(base.paramset, (nrep, 1)).flatten(order='C'), stoch_fn, vol) # ADD REACTIONS # ============= for index in xrange(nrep): si = '_' + str(index) # Per mRNA bd.SSA_MM_P('per mRNA repression' + si, 'vtp' + si, km=['knp' + si], Prod=['p' + si], Rep=['C1P' + si, 'C2P' + si], P=3) bd.SSA_MM('per mRNA degradation' + si, 'vdp' + si, km=['kdp' + si], Rct=['p' + si]) # Cry1 mRNA bd.SSA_MM_P('c1 mRNA repression' + si, 'vtc1' + si, km=['knc1' + si], Prod=['c1' + si], Rep=['C1P' + si, 'C2P' + si], P=3) bd.SSA_MM('c1 mRNA degradation' + si, 'vdc1' + si, km=['kdc1' + si], Rct=['c1' + si]) # Cry2 mRNA (shares cry1 km constants) bd.SSA_MM_P('c2 mRNA repression' + si, 'vtc2' + si, km=['knc1' + si], Prod=['c2' + si], Rep=['C1P' + si, 'C2P' + si], P=3) bd.SSA_MM('c2 mRNA degradation' + si, 'vdc2' + si, km=['kdc1' + si], Rct=['c2' + si]) # Free protein creation and degradation bd.SSA_MA_tln('PER translation' + si, 'P' + si, 'ktxnp' + si, 'p' + si) bd.SSA_MA_tln('CRY1 translation' + si, 'C1' + si, '1', 'c1' + si) bd.SSA_MA_tln('CRY2 translation' + si, 'C2' + si, '1', 'c2' + si) bd.SSA_MM('PER degradation' + si, 'vdP' + si, km=['kdP' + si], Rct=['P' + si]) bd.SSA_MM('C1 degradation' + si, 'vdC1' + si, km=['kdC1' + si], Rct=['C1' + si]) bd.SSA_MM('C2 degradation' + si, 'vdC2' + si, km=['kdC1' + si], Rct=['C2' + si]) #CRY1 CRY2 complexing bd.SSA_MA_complex('CRY1-P complex' + si, 'C1' + si, 'P' + si, 'C1P' + si, 'vaC1P' + si, 'vdC1P' + si) bd.SSA_MA_complex('CRY2-P complex' + si, 'C2' + si, 'P' + si, 'C2P' + si, 'vaC1P' + si, 'vdC1P' + si) bd.SSA_MM('C1P degradation' + si, 'vdCn' + si, km=['kdCn' + si], Rct=['C1P' + si, 'C2P' + si]) bd.SSA_MM_C2('C2P degradation' + si, 'vdCn' + si, km=['kdCn' + si], Rct=['C2P' + si, 'C1P' + si], M='MC2n' + si) return stoch_fn
def SSAModel(base, vol): y0_pop = (vol * base.y0[:-1]).astype(int) stoch_fn = stk.StochKitModel(name=base.model.getOption('name') + '_stoch') SSA_builder = mb.SSA_builder(base.ylabels, base.plabels, y0_pop, base.paramset, stoch_fn, vol) # ADD REACTIONS # ============= # Per mRNA SSA_builder.SSA_MM_P('per mRNA repression', 'vtp', km=['knp'], Prod=['p'], Rep=['C1P', 'C2P'], P=3) SSA_builder.SSA_MM('per mRNA degradation', 'vdp', km=['kdp'], Rct=['p']) # Cry1 mRNA SSA_builder.SSA_MM_P('c1 mRNA repression', 'vtc1', km=['knc1'], Prod=['c1'], Rep=['C1P', 'C2P'], P=3) SSA_builder.SSA_MM('c1 mRNA degradation', 'vdc1', km=['kdc1'], Rct=['c1']) # Cry2 mRNA (shares cry1 km constants) SSA_builder.SSA_MM_P('c2 mRNA repression', 'vtc2', km=['knc1'], Prod=['c2'], Rep=['C1P', 'C2P'], P=3) SSA_builder.SSA_MM('c2 mRNA degradation', 'vdc2', km=['kdc1'], Rct=['c2']) # Free protein creation and degradation SSA_builder.SSA_MA_tln('PER translation', 'P', 'ktxnp', 'p') SSA_builder.SSA_MA_tln('CRY1 translation', 'C1', '1', 'c1') SSA_builder.SSA_MA_tln('CRY2 translation', 'C2', '1', 'c2') SSA_builder.SSA_MM('PER degradation', 'vdP', km=['kdP'], Rct=['P']) SSA_builder.SSA_MM('C1 degradation', 'vdC1', km=['kdC1'], Rct=['C1']) SSA_builder.SSA_MM('C2 degradation', 'vdC2', km=['kdC1'], Rct=['C2']) #CRY1 CRY2 complexing SSA_builder.SSA_MA_complex('CRY1-P complex', 'C1', 'P', 'C1P', 'vaC1P', 'vdC1P') SSA_builder.SSA_MA_complex('CRY2-P complex', 'C2', 'P', 'C2P', 'vaC1P', 'vdC1P') SSA_builder.SSA_MM('C1P degradation', 'vdCn', km=['kdCn'], Rct=['C1P', 'C2P']) SSA_builder.SSA_MM_C2('C2P degradation', 'vdCn', km=['kdCn'], Rct=['C2P', 'C1P'], M='MC2n') return stoch_fn