From 5795d4d42fcd8d05c4e6b0017a6d87a2eee75a0b Mon Sep 17 00:00:00 2001
From: Rui Ribeiro <rui.ribeiro@icloud.com>
Date: Mon, 5 Sep 2022 15:18:27 +0200
Subject: [PATCH] pre-release beta2

---
 .gitignore                                    |   2 +-
 src/lib/pathways/Gi.py                        | 150 +++++++++---------
 src/lib/pathways/Gq.py                        |  17 +-
 src/lib/pathways/Gs.py                        |  20 ++-
 .../pathways/__pycache__/Gs.cpython-39.pyc    | Bin 8173 -> 8888 bytes
 5 files changed, 107 insertions(+), 82 deletions(-)

diff --git a/.gitignore b/.gitignore
index f315f45..73346d4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,4 +5,4 @@ src/lib/__pycache__/
 src/lib/autogrid_reference_files/
 src/lib/autogrids/
 .ipynb_checkpoints/
-
+debugging.txt
diff --git a/src/lib/pathways/Gi.py b/src/lib/pathways/Gi.py
index 1551975..00bb42e 100644
--- a/src/lib/pathways/Gi.py
+++ b/src/lib/pathways/Gi.py
@@ -18,79 +18,87 @@ from pysb.macros import *
 from pysb.macros import create_t_obs, drug_binding
 from sympy import Piecewise
 
-
+defaultParameters = {
+    'time_in':0,
+    'time_out':0,
+    'L_init':0.01,
+    'R_init': 2,
+    'Gi_init': 3,
+    'AC5_init': 0.7,
+    'Ca_cytos_free': 0.06,
+    'ATP_init': 5000,
+    'PDE4_init': 2,
+    'PDE10_init': 1,
+    'PKA_init': 1.2,        
+    'RL_kon':0.1*1E3,
+    'RL_koff':200,
+    'RL_Gi_kon':6.6*1E3,
+    'RL_Gi_koff':200,
+    'RL_Gi_decay': 60,
+    'GaiGTP_decay': 30,
+    'Gi_formation': 100,
+    'AC5_ATP_kon': 0.0001*1E3,
+    'AC5_ATP_koff': 1,
+    'AC5_basal': 1,
+    'AC5_reverse_basal': 0.0004,
+    'AC5_Ca_kon': 0.001*1E3,
+    'AC5_Ca_koff': 0.9,
+    'AC5_Ca_ATP_kon': 7.50E-5*1E3,
+    'AC5_Ca_ATP_koff': 1,
+    'AC5_Ca_ATP_to_cAMP': 0.5,
+    'AC5_Ca_ATP_to_cAMP_reverse': 0.00015,
+    'AC5_ATP_Ca_kon': 0.001*1E3,
+    'AC5_ATP_Ca_koff': 0.9,
+    'AC5_GaiGTP_kon': 50*1E3,
+    'AC5_GaiGTP_koff': 5,
+    'AC5_GaiGTP_ATP_kon': 6.25E-5*1E3,
+    'AC5_GaiGTP_ATP_koff': 1,
+    'AC5_ATP_GaiGTP_kon': 50*1E3,
+    'AC5_ATP_GaiGTP_koff': 5,
+    'AC5_GaiGTP_ATP_to_cAMP': 0.25,
+    'AC5_GaiGTP_ATP_to_cAMP_reverse': 0.00105,
+    'AC5_GaiGTP_decay': 30,
+    'AC5_GaiGTP_decay_koff': 30,
+    'AC5_Ca_GaiGTP_kon': 50*1E3,
+    'AC5_Ca_GaiGTP_koff': 5,
+    'AC5_Ca_GaiGTP_ATP_kon': 5.63E-5*1E3,
+    'AC5_Ca_GaiGTP_ATP_koff': 1,
+    'AC5_Ca_ATP_GaiGTP_kon': 50*1E3,
+    'AC5_Ca_ATP_GaiGTP_koff': 5,
+    'AC5_Ca_GaiGTP_ATP_to_cAMP': 0.125,
+    'AC5_Ca_GaiGTP_ATP_to_cAMP_reverse': 2.81E-5,
+    'AC5_Ca_GaiGTP_decay': 30,
+    'AC5_Ca_GaiGTP_ATP_decay': 30,
+    'PDE4_cAMP_kon': 0.01*1E3,
+    'PDE4_cAMP_koff': 1,
+    'PDE4_cAMP_to_AMP': 2,
+    'PDE10_2cAMP_kon': 1.0E-6*1E3,
+    'PDE10_2cAMP_koff': 9,
+    'PDE10_cAMP_kon': 0.1*1E3,
+    'PDE10_cAMP_koff': 2,
+    'PDE10_2cAMP_cAMP_kon': 0.13*1E3,
+    'PDE10_2cAMP_cAMP_koff': 2,
+    'PDE10_cAMP_decay': 3,
+    'PDE10_2cAMP_cAMP_decay': 10,
+    'PKA_cAMP2_kon': 0.00026*1E3,
+    'PKA_cAMP2_koff': 1,
+    'PKA_cAMP4_kon': 0.000346*1E3,
+    'PKA_cAMP4_koff': 1,
+    'PKA_activation': 10*1E3,
+    'PKA_activation_reverse': 0.025
+}
 
 def network(LR=None, kinetics=True, **kwargs):
-    defaultKwargs = {
-        'time_in':0,
-        'time_out':0,
-        'L_init':0.01,
-        'R_init': 2,
-        'Gi_init': 3,
-        'AC5_init': 0.7,
-        'Ca_cytos_free': 0.06,
-        'ATP_init': 5000,
-        'PDE4_init': 2,
-        'PDE10_init': 1,
-        'PKA_init': 1.2,        
-        'RL_kon':0.1*1E3,
-        'RL_koff':200,
-        'RL_Gi_kon':6.6*1E3,
-        'RL_Gi_koff':200,
-        'RL_Gi_decay': 60,
-        'GaiGTP_decay': 30,
-        'Gi_formation': 100,
-        'AC5_ATP_kon': 0.0001*1E3,
-        'AC5_ATP_koff': 1,
-        'AC5_basal': 1,
-        'AC5_reverse_basal': 0.0004,
-        'AC5_Ca_kon': 0.001*1E3,
-        'AC5_Ca_koff': 0.9,
-        'AC5_Ca_ATP_kon': 7.50E-5*1E3,
-        'AC5_Ca_ATP_koff': 1,
-        'AC5_Ca_ATP_to_cAMP': 0.5,
-        'AC5_Ca_ATP_to_cAMP_reverse': 0.00015,
-        'AC5_ATP_Ca_kon': 0.001*1E3,
-        'AC5_ATP_Ca_koff': 0.9,
-        'AC5_GaiGTP_kon': 50*1E3,
-        'AC5_GaiGTP_koff': 5,
-        'AC5_GaiGTP_ATP_kon': 6.25E-5*1E3,
-        'AC5_GaiGTP_ATP_koff': 1,
-        'AC5_ATP_GaiGTP_kon': 50*1E3,
-        'AC5_ATP_GaiGTP_koff': 5,
-        'AC5_GaiGTP_ATP_to_cAMP': 0.25,
-        'AC5_GaiGTP_ATP_to_cAMP_reverse': 0.00105,
-        'AC5_GaiGTP_decay': 30,
-        'AC5_GaiGTP_decay_koff': 30,
-        'AC5_Ca_GaiGTP_kon': 50*1E3,
-        'AC5_Ca_GaiGTP_koff': 5,
-        'AC5_Ca_GaiGTP_ATP_kon': 5.63E-5*1E3,
-        'AC5_Ca_GaiGTP_ATP_koff': 1,
-        'AC5_Ca_ATP_GaiGTP_kon': 50*1E3,
-        'AC5_Ca_ATP_GaiGTP_koff': 5,
-        'AC5_Ca_GaiGTP_ATP_to_cAMP': 0.125,
-        'AC5_Ca_GaiGTP_ATP_to_cAMP_reverse': 2.81E-5,
-        'AC5_Ca_GaiGTP_decay': 30,
-        'AC5_Ca_GaiGTP_ATP_decay': 30,
-        'PDE4_cAMP_kon': 0.01*1E3,
-        'PDE4_cAMP_koff': 1,
-        'PDE4_cAMP_to_AMP': 2,
-        'PDE10_2cAMP_kon': 1.0E-6*1E3,
-        'PDE10_2cAMP_koff': 9,
-        'PDE10_cAMP_kon': 0.1*1E3,
-        'PDE10_cAMP_koff': 2,
-        'PDE10_2cAMP_cAMP_kon': 0.13*1E3,
-        'PDE10_2cAMP_cAMP_koff': 2,
-        'PDE10_cAMP_decay': 3,
-        'PDE10_2cAMP_cAMP_decay': 10,
-        'PKA_cAMP2_kon': 0.00026*1E3,
-        'PKA_cAMP2_koff': 1,
-        'PKA_cAMP4_kon': 0.000346*1E3,
-        'PKA_cAMP4_koff': 1,
-        'PKA_activation': 10*1E3,
-        'PKA_activation_reverse': 0.025
-    }
-    parameters={**defaultKwargs, **kwargs}
+
+    parameters={**defaultParameters, **kwargs}
+    def myeval(x):
+            try:
+                y = eval(x)
+            except:
+                y=x
+            return y
+
+    parameters = dict(zip(parameters.keys(), map(myeval, parameters.values())))
 
     #Start a model
     Model()
diff --git a/src/lib/pathways/Gq.py b/src/lib/pathways/Gq.py
index ea4c958..e3f15b5 100644
--- a/src/lib/pathways/Gq.py
+++ b/src/lib/pathways/Gq.py
@@ -31,10 +31,7 @@ __email__ = "rui.ribeiro@univr.it"
 __status__ = "Production"
 
 USAGE = __doc__.format(__author__, __email__)
-
-def network(LR=None, kinetics=True, **kwargs):
-
-    defaultKwargs = {
+defaultParameters = {
         'time_in':0,
         'time_out':0,
         'L_init':0,
@@ -76,7 +73,17 @@ def network(LR=None, kinetics=True, **kwargs):
         'DAG_decay':0.15,
     }
 
-    parameters={**defaultKwargs, **kwargs}
+def network(LR=None, kinetics=True, **kwargs):
+
+    parameters={**defaultParameters, **kwargs}
+    def myeval(x):
+        try:
+            y = eval(x)
+        except:
+            y=x
+        return y
+
+    parameters = dict(zip(parameters.keys(), map(myeval, parameters.values())))
 
     #Start a model
     Model()
diff --git a/src/lib/pathways/Gs.py b/src/lib/pathways/Gs.py
index 2f23250..c1e2af0 100644
--- a/src/lib/pathways/Gs.py
+++ b/src/lib/pathways/Gs.py
@@ -19,10 +19,7 @@ from pysb.macros import *
 from sympy import Piecewise
 from pysb.macros import create_t_obs, drug_binding
 
-
-def network(LR=None, kinetics=True, **kwargs):
-
-    defaultKwargs = {
+defaultParameters = {
         'time_in':0,
         'time_out':0,
         'L_init':0.01,
@@ -91,8 +88,21 @@ def network(LR=None, kinetics=True, **kwargs):
         'PKA_activation': 10*1E3,
         'PKA_activation_reverse': 0.01
     }
-    parameters={**defaultKwargs, **kwargs}
+
+def network(LR=None, kinetics=True, **kwargs):
+
+    parameters={**defaultParameters, **kwargs}
  
+    def myeval(x):
+        try:
+            y = eval(x)
+        except:
+            y=x
+        return y
+
+    parameters = dict(zip(parameters.keys(), map(myeval, parameters.values())))
+
+
     #Start a model
     Model()
 
diff --git a/src/lib/pathways/__pycache__/Gs.cpython-39.pyc b/src/lib/pathways/__pycache__/Gs.cpython-39.pyc
index 5a2fd0988d52e19212fe139ec90a2fdf3167f03d..f2526a339a1f76d36c791c488a40bd6551e3282a 100644
GIT binary patch
literal 8888
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

literal 8173
zcmYe~<>g{vU|=v`E0gpnkb&Vbh=Yuo85kHG7#J9eofsGxQW#Pga~MJ(G$WX1%3;c7
zj$&p6i81Fe=CVYw<g!MwGBTuarm&^3w=hPrr8A^(EMkmePhkmW(BygvGF_AL7NeFX
z<1NmB%+%!6^338?O{QBs$wjG&C8_Zx@%c%`w|G*DO4H+$GV@Y0^V0o7l9@pIpqQP3
zfx(4=fx#Q(um$`K3@MB$j44bh%qh$%EGeuhY+#x_g(HPCg)4<4g*$~Og*SySg+GNq
zMIc2mMJPo$g+E0kMHI{yOW{iqPvK9INRdndv87U^z_fG<KbV$Dkxc=K$))h8FsI0;
zD5NN+FsCS`FsCS|$fT&G@TaJz@TaJyFr}!^ajs>~WT;_Y%2>m+l(CkjgrS*%k)edK
znW2`ohBb?+maT+2MI%Ksow1pTk)eb+MJt^lMSBrricX4dI#Y^Xihep%ioqPFW@fOg
zVTuu4rExPOSj;5F6fR~46*Es~NU>PNm|_VrA(IiR-zuFU#d;BAicN}bI#Y^WihVj$
ziUZtqN2qQmDD4cTT~b`r8B<)*%yLU{Pw_}+O7Tqbg1gikZkA7qZ#rX&Z#qMY-y%l1
z{r)KdaJL46Os`=~3Cd=gz*zLAgr$Tvg&{>JMK49Wm$`&3CAfwqB}9^;nF$;+EG6tI
z3@M?#j3sO-VKpo%;V_vz8@Nt=sLqHQgf6UR)-XsQRB)s)q(p+vjjCZuiH4b5!cxMS
z0!qXTDS9auy(}ecDKRxHDX~cMTqz7GHYs)~)?oL>)v%<*Bgt|%GnBBUB-F5^BqE9O
zr0At2fo)5!VM$3rlHpD9Owmj6?qw=rOG&L^Nl8PJ<4Z|T$pGuhtYJyXg2_NbkGbeX
z4NFS4Btr^gHuD7LqN*B}lpF-Fgg+&>L?DH+h7BT~&637c!;+FK$p99~mSg~lq~tX-
zgF~7vCBKFxB_Cu5BSVQ`N&!l|Kx09i0V)a(b0>xpp%UR{7Dk3VpAxo|T!`sZFbx!f
zg*7ZGg;3Y9r4-e$q!dAUf+@wwt|)=VB-m{wDLN@&x0P_Dlz`$_jKPVaM5II%<jNAZ
zl+qfOlv21kWhJaBSahJ6F4oK-&QKzr!jMwl%P7uZ&rl)(&Q)wF6*Vj=6>zgEVQNYw
zn?b6ipsGNzQUzC44U#Q^m<e^aJwu5!RBcTSOG*t?En7-$4NFQblqZ-{hn6n6!R~^k
zReexebz&%yDUpTxw7!NVr5>)k0j?XY63&C9aXFA#_6#NRP<J%eu%tA?^)_Ks4HpBO
zXU|Zg0M*-E!;;br)ytOBQp1wc0_6#&w8C{k>_y5+;tXIpi4<7A<4Tc8u}QH9<uY&_
zDwZfgeb!dPlF|k>lP#sah9#vP$`efKz-LMcBFsScfL&gKZjW+_3e=v?8kUq!xXE2`
zld<S4k!!~5esH=`g@#af4NFQl+}s|xxv(%n@;As_q>#a4vpqwJ8r0n08kUq^sJUz@
zeKjm8eNdiYN<Y{ZP`L&(173#VH{Xe&M7=}<8X^;FSW+fH&16fNSi_Ps5y}%xnFO~1
z;tzO^Dd9{h0hg#S@e)u@0>`Oli5Ar4$u%q~lc8p@rA(<|NtpuW38qZNWdb}tA?8DT
zCZ2*YU%NyHYW}numXv956Q{#XMAHKoM{_GA9_$%PbfIBAqlP7A2Hd=v`1QeM(QLD4
zDA9wOH>-vvWfs&twv^d5EGe_0Ji(MX@Q{V+hn7XS%ynWY(JwK8`h0E;OUhihS@Ym}
z(0vFiNg(2q&=SEA>c06kEGhHhrYwM)0&@{G%+Xv5GsOsM%EB6!l!Z`J*ishNu%s-4
z@&r>BgY|;)CBy|N`4U#Pg41eA3T{<UcQ`SW7?+qpLtse_OUe?cJ!~mUYgkg2LV1EI
z%fLP%XdY5Z1F41h8r_8myG={Xpmr~>VM$pIwT&%hMGZ^J3Mfx7WhLCl*v&(ZWnyeK
zFR_5yx~hgHWfk0>)o?#zw+HHOxGL=74^suJD=eXLx~7IDWewb}wWOE=SBuwO_6#Lf
zP`lREu%xVm+qE99AHR!1DH{}i*i}J8*`A@q8fwdi8kUp|a9cLQZNckGcwAz$1(pwN
zpf+r(VM*BpwSg^Va}7(%W++cEWlIUHtq2b35}p)&P|MMYp~SYt4jR8(YgkgY!gXwe
zse$XXhvr@fsD0aOSW>n_)w8ASs9{Oj0p$s%>?}dFKp{3lNZu4LNW0XDp~SJo32O7M
z8kUq@P`zv^yK7idc0+lBDSI$X0-3B2YTG(7lsK2TK+V`&!;-QWs*5dUUkyvjJ}6Hx
zWq%3WUPze>=EKZzEpdaIaiE4J<p5mQL9oqWRbUpRJq-&5cW5Xas$oev1lMyIVKSJ7
zs>cJW=SU4p$`Pm@wv?kaEGb8!Ji(M>C9w86B*Y*jU&?V%o85__#IwW;>RM1c{RC7W
zTgu5AmXwoFo?yzU5~vQSe_^JahMMAC;sZ71ObtuQ8K^$Cl(RJ~DQBTP!IX0)d?{cZ
zCB7*PDd&3`OZ-4-z=@&6za#*xKQQG2v|S7CX@OhmfhiZEV&FD2RO}M=RxwoeGRU1!
z_7!ldhqo#~qR_qxf6<(hz?7@7-Wy1!Bq*3c^O|1~BLf3NdbP+p_lH$2_Af!*`Sdg}
zcxIozL$398;Er|nnH|Cm4C%&T@Yy~c(%lzvc*zRV3*m7%yyRzKV0bA9B2qx&vu1+8
zPWzW&8+4szUOzIkf@%I>pMLfX2)wa}n!6b$^}s$o(J0hFYo#(wB+~(^_=EjR5e5c^
zbZPy&Dr}8g?b9K4oP;qR+P~xi$?x*yVbX4&2Gg(Nkp5@o$4kCR0roFBLGlnMM>;@!
z;*j9*5;UHYzPP}a>-ypg_UZfQOX=TLxdzqWao9oA`4)RgW^QVHX5K9hFeAUT<QAJx
zd}dx|$t|`Z2+ir9pOXe*ayUAhLRjq1i4X>dV@Lpm#Tnq@Y64+$1-Q5x8bH__0p5-f
z7F&={e0F}`Ep{-SmUfFf$R{3bI7pNS!AVQI#S7!5q$Vd;-r{pl%+E=44+)5e@j-4%
z%P-1JEXmBzyTuK17|11HlMtM=v|F4YUQ%LlV$Ll=5VI(?EVZaOH69|w1rl;j1iK4t
z2$-Fgc8d=x0W*{zg`bvoO9)AzBtJgc(Kq0h6sA}_)INxTAk)A$<lO=r2<NAz-4Xz4
zhWiub5wLraMAFi3iJ>S0Y0m_^T^y@8$R8kw#UnzB2h4{#3ez}9P+%Gd5{LO3?j%TL
zU>X7u7Y4b>IWZot9ONevOu@9YTVVT;m4bW*QZ9k693lbN;usGSK(PU$1w$e&?Upn)
z!(efzj7Jh4iK6I=AU>5u7X~>BBE<{N72rSz`G*gg3yO3Eza&2%l!o{rdB+H@MF3R*
z6sHgoxC*EiC_gRjmIy=v#0;o#-YroqqEIIo8h{fpG<S(%D1`aN+YzkJ2%P5lKsg&^
zI*1F(voO91sx*iTcD1)-d}4A*W*H>Uih-0P`0y}h^tr|26Q5*wi!n%(If^9+#AFVN
zFSx}V6kmLcslebCQ-R?v#>`uciJDABVGIlmMd1t#47XT7MaeC85DC)4=AM+EpObcr
z1C}^$al=?3X{fMEz%6D+XH!j<C^k?WCK*C$BPeZrixnhZT$Bv5g2_2ilR1jjIT2(6
zi*sUp&MgpG9L1VkS(0CTi#fHT<Q7X>QEKWfmZZ|OG)<<WRFM19K$@8yLjrEGfWqq*
zGbo~2Kv92-4MfHl-(m%a`7L%Z6`u@a6yIX>yTur($y8JTGN=%2P=L4NEmlzI6>Boz
zVg;FK0HKT^l*uiY0B=W-8QzY`Ag8hgcsmxQriVl^2gMr{2{SM-XfhUsFfcGgG5f?D
z6bXS?EI~f;2AYgTu^<i`I1~+vK=o1-I0OueL_rd~&WZ70zs7@nStJG$V+EylgCcQ=
zv3VdNh_4KaBtRUfpA3p5L0%|>C@TfYfIVSQBn1)|01<*9LK>uk30#GT6v=?paTcY5
z5=wraVUa9I1*kfXf(shIGy)0Aqo}mhWGqSm2`hkvx!?vE6e*$#7#1mklqsW#8W|R;
zpb8ijsiF!P7pZ~tsiTM*niXk)L^V-FjZBKPPz6kjv{41jigZBwbWuc&4T|(YqWUPJ
zhNeXZAW=h9QHvr_C`2KAYFT8AqQc0a$ONR%6jju`$P87$qR1Roz_Q2!q|XvX)X==h
z3M6WcB5G_{WCIelMHMwFvO^UxF0w}zFew7f`ygCzY+B@qs=}-YG$~Z%j3R1oTm+h$
zLFh9#DRKolzztQIX^}ff)B{!2tjH52>V+z5UId!yK{C>!$Ol!0WsxsPpC5{-g+Wm{
zNYo!h1fWV87FB>m13^R(s+5r?V^I|-SF`3P6~_nNVgpk?QQQz3+&;R+0pfu2`7L%3
z%hB013as2mGx!#(Z+=Q@P7w>p491dM?7sPV`MIe@x7a=NGD|WObBaPiGMoX4MTxno
zC8<S4!5~+}fQTdz0czD2Wr0|^AR-?`lz_BwxmFYur4|=w=I0fG8j`nIf=Y8zi$J*(
zoGTGou_z9tDIP?CGGS37hy}`b;Jk*&Uq#s<2~frYXC_1jLS!0nMgeCIM20|Q0z|?G
zCw6cGM<i-+LIx*ZM1n;mQbfW8Cq{4r1SdLhLPI33q8yMTL8%Ink`So}kz&B91e`Ju
zsi6oS`9+l=Q>sA(Jl1b<`6m^p7L_F?<)q$X%>_l9Ci^WWpP*YD*_nB%C7H>^x7f1F
z6N}P|qj*zN(-KQ_O1#0`TU-UO=qtV@oSdIqke`>DS5h1gX|yL5!<z3&#VZ+#CNMBC
z{Ib-~$j?pHFDlARO3f_F*AFPl&q_@$Db^1Tb}Grw&&kd#(JwAa*3ZdI(l1CX$tX{(
zEY^1~)+?yI#h#a1Ql4Lw4Jy!!=YaY-%uI}f0PbaT<zZ!GW@BXI=V6p%<YD9hV+lq%
zMh-9(W0YeQ1BtP4G0HK@Fi9~gF-b8hfJLPkWf-N{xfo>_^%(gWjhOgABr}M#V&Y@8
zW8!0!VB%wx;|7TsF!3?!fiPI!4XoCOiI33>iuoAbz%n3Re2gwke2h*|3^B=qiI33&
ztRf1mHvvq7*l|pJj36Ar#K#x{R-wYg$EXCB2ieHSr~zh!NHr!tMm4Y+EwC7bRACWe
z6k!7SUW}28QGl^%5~#LhDXIk}wK@<{4<Z^sqD+1vnjE)S3Mz|}ZgGQ1z1+m)qWt1p
zti_eN1(o1j4K6r}KwVz2Nw<V^GK)*%^V2}n;?T5O3{Fu<#6(c>z+sb{pHiBWY6q&b
Wi}@HB7(kK0!zjSaRnJh*pbY>mfL@#c

-- 
GitLab