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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
X7A*$!BqC<z|I4V^T5`lVVl@2=TK@!n

literal 8173
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
M^c5WO9PzCBH!Xl(oB#j-

-- 
GitLab