Andrej 2 år sedan
förälder
incheckning
7f590c0a14
3 ändrade filer med 99 tillägg och 55 borttagningar
  1. 65 17
      models/humanHG_parameters1.json
  2. 2 2
      pythonScripts/cModel.py
  3. 32 36
      pythonScripts/compartmentModel.ipynb

+ 65 - 17
models/humanHG_parameters1.json

@@ -1,6 +1,6 @@
 {"parameters":{
 {"parameters":{
         "bodyWeight":{"value":70,"units":"kg"},
         "bodyWeight":{"value":70,"units":"kg"},
-        "bodyWeight0p75":{"derived":"bwPower0p75"},
+        "bwPower0p75":{"derived":"bwPower0p75"},
         "kidneyPC":{"value":4.0},
         "kidneyPC":{"value":4.0},
         "richlyPerfusedPC":{"value":1},
         "richlyPerfusedPC":{"value":1},
         "fatPC":{"value":0.15},
         "fatPC":{"value":0.15},
@@ -13,18 +13,30 @@
 	     "liverPC":{"value":5},
 	     "liverPC":{"value":5},
         "gutPC":{"value":1},
         "gutPC":{"value":1},
         "rbcPC":{"value":12},
         "rbcPC":{"value":12},
-        "flowNotes":"assuming 70kg individual, fetus at 0.1kg",
-        "plasmaFlow":{"value":8.067,"unit":"l/min"},
-        "plasmaFlowScaled":{"value":0.333,"unit":"l/min"},
-        "kidneyFlow":{"value":1.412,"unit":"l/min"},
-        "richlyPerfusedFlow":{"value":1.484,"unit":"l/min"},
-        "fatFlow":{"value":0.419,"unit":"l/min"},
-        "slowlyPerfusedFlow":{"value":2.01,"unit":"l/min"},
-        "brainBloodFlow":{"value":0.920,"unit":"l/min"},
-        "placentaFlow":{"value":0.173,"unit":"l/min"},
-        "liverInFlow":{"value":0.391,"unit":"l/min"},
-        "liverOutFlow":{"value":1.928,"unit":"l/min"},
-        "gutFlow":{"value":1.538,"unit":"l/min"},
+        "commentCardiacOutput":"X",
+        "cardiacOutput":{"derived":"cardiacOutput"},
+        "cardiacOutputScaled":{"value":0.333,"unit":"l/min","dist":"normal","cv":0.22},
+        "commentFlows":"X",
+        "plasmaFlow":{"derived":"plasmaFlow"},
+        "kidneyFlow":{"derived":"kidneyFlow"},
+        "richlyPerfusedFlow":{"derived":"richlyPerfusedFlow"},
+        "fatFlow":{"derived":"fatFlow"},
+        "slowlyPerfusedFlow":{"derived":"slowlyPerfusedFlow"},
+        "brainBloodFlow":{"derived":"brainBloodFlow"},
+        "liverInFlow":{"derived":"liverInFlow"},
+        "liverOutFlow":{"derived":"liverOutFlow"},
+        "gutFlow":{"derived":"gutFlow"},
+        "commentFlowFraction":"X",
+        "plasmaFlowFraction":{"value":1},
+        "kidneyFlowFraction":{"value":0.175,"dist":"normal","cv":0.3},
+        "richlyPerfusedFlowFraction":{"value":0.183,"dist":"normal","cv":0.3},
+        "fatFlowFraction":{"value":0.052,"dist":"normal","cv":0.3},
+        "slowlyPerfusedFlowFraction":{"value":0.249,"dist":"normal","cv":0.3},
+        "brainBloodFlowFraction":{"value":0.114,"dist":"normal","cv":0.3},
+        "liverInFlowFraction":{"value":0.046,"dist":"normal","cv":0.32},
+        "commentLiverOutFlow":"sum of liver in and gut",
+        "liverOutFlowFraction":{"value":0.227,"dist":"normal","cv":0.3},
+        "gutFlowFraction":{"value":0.181,"dist":"normal","cv":0.33},
         "commentVolumes":"X",
         "commentVolumes":"X",
         "plasmaVolume":{"derived":"plasmaVolume"},
         "plasmaVolume":{"derived":"plasmaVolume"},
         "redBloodCellsVolume":{"derived":"redBloodCellsVolume"},
         "redBloodCellsVolume":{"derived":"redBloodCellsVolume"},
@@ -81,6 +93,46 @@
            "W2":"heavisideTransition",
            "W2":"heavisideTransition",
            "C":"hairVolumeMax"}},
            "C":"hairVolumeMax"}},
     "derivedParameters":{
     "derivedParameters":{
+       "cardiacOutput":{
+          "type":"product",
+          "a":"cardiacOutputScaled",
+          "b":"bwPower0p75"},
+        "plasmaFlow":{
+           "type":"product",
+           "a":"cardiacOutput",
+           "b":"plasmaFlowFraction"},
+        "kidneyFlow":{
+           "type":"product",
+           "a":"cardiacOutput",
+           "b":"kidneyFlowFraction"},
+        "richlyPerfusedFlow":{
+           "type":"product",
+           "a":"cardiacOutput",
+           "b":"richlyPerfusedFlowFraction"},
+        "fatFlow":{
+           "type":"product",
+           "a":"cardiacOutput",
+           "b":"fatFlowFraction"},
+        "slowlyPerfusedFlow":{
+           "type":"product",
+           "a":"cardiacOutput",
+           "b":"slowlyPerfusedFlowFraction"},
+        "brainBloodFlow":{
+           "type":"product",
+           "a":"cardiacOutput",
+           "b":"brainBloodFlowFraction"},
+        "liverInFlow":{
+           "type":"product",
+           "a":"cardiacOutput",
+           "b":"liverInFlowFraction"},
+        "liverOutFlow":{
+           "type":"product",
+           "a":"cardiacOutput",
+           "b":"liverOutFlowFraction"},
+        "gutFlow":{
+           "type":"product",
+           "a":"cardiacOutput",
+           "b":"gutFlowFraction"},
         "plasmaVolume":{
         "plasmaVolume":{
            "type":"product",
            "type":"product",
            "a":"plasmaVolumeFraction",
            "a":"plasmaVolumeFraction",
@@ -145,10 +197,6 @@
           "type":"power",
           "type":"power",
           "a":"bodyWeight",
           "a":"bodyWeight",
           "n":"threeQuarters"},
           "n":"threeQuarters"},
-       "plasmaFlow":{
-          "type":"product",
-          "a":"plasmaFlowScaled",
-          "b":"bodyWeight0p75"},
        "hairPC":{
        "hairPC":{
           "type":"ratio",
           "type":"ratio",
           "a":"hairPCBlood",
           "a":"hairPCBlood",

+ 2 - 2
pythonScripts/cModel.py

@@ -504,7 +504,7 @@ class model:
          pN=self.get(d['n'])
          pN=self.get(d['n'])
          n=pN['value']
          n=pN['value']
          DN=pN['derivatives']
          DN=pN['derivatives']
-         if any(['function' in pA,'function' in pB]):
+         if any(['function' in pA,'function' in pN]):
             fa=function.to(a)
             fa=function.to(a)
             fn=function.to(n)
             fn=function.to(n)
             f=lambda t,a=fa,n=fn:numpy.power(a(t),n(t))
             f=lambda t,a=fa,n=fn:numpy.power(a(t),n(t))
@@ -515,7 +515,7 @@ class model:
             return function.Object(f,[dA,dN])
             return function.Object(f,[dA,dN])
          else:
          else:
             f=numpy.power(a,n)
             f=numpy.power(a,n)
-            return derivedObject(f,{'df':n*f/a,'D':DA},{'df':f*numpy.log(a),'D':DN})
+            return derivedObject(f,[{'df':n*f/a,'D':DA},{'df':f*numpy.log(a),'D':DN}])
       
       
       if d['type']=='ratio':
       if d['type']=='ratio':
          #print('{}/{}'.format(d['a'],d['b']))
          #print('{}/{}'.format(d['a'],d['b']))

+ 32 - 36
pythonScripts/compartmentModel.ipynb

@@ -2,28 +2,37 @@
  "cells": [
  "cells": [
   {
   {
    "cell_type": "code",
    "cell_type": "code",
-   "execution_count": 46,
+   "execution_count": 57,
    "metadata": {},
    "metadata": {},
    "outputs": [
    "outputs": [
     {
     {
      "name": "stdout",
      "name": "stdout",
      "output_type": "stream",
      "output_type": "stream",
      "text": [
      "text": [
-      "Calculating for hairPCBlood/5:(711, 16) [24664.976951005923]\n",
-      "Calculating for plasmaVolumeFraction/0:(711, 16) [1.1289600000000003e-05]\n",
-      "Calculating for redBloodCellsVolumeFraction/1:(711, 16) [3.6e-05]\n",
-      "Calculating for kidneyVolumeFraction/2:(711, 16) [1.44e-06]\n",
-      "Calculating for richlyPerfusedVolumeFraction/11:(711, 16) [0.0009]\n",
-      "Calculating for fatVolumeFraction/12:(711, 16) [0.004292870400000001]\n",
-      "Calculating for hairVolumeFraction/4:(711, 16) [1e-06]\n",
-      "Calculating for slowlyPerfusedVolumeFraction/3:(711, 16) [0.0031359999999999995]\n",
-      "Calculating for brainBloodVolumeFraction/6:(711, 16) [4.41e-06]\n",
-      "Calculating for brainVolumeFraction/7:(711, 16) [3.6e-05]\n",
-      "Calculating for liverVolumeFraction/8:(711, 16) [4.225e-05]\n",
-      "Calculating for gutVolumeFraction/10:(711, 16) [6.502500000000001e-06]\n",
-      "Calculating for intestineVolumeFraction/9:(711, 16) [0.0017640000000000002]\n",
+      "Calculating for hairPCBlood/5:(507, 16) [24664.976951005923]\n",
+      "Calculating for cardiacOutputScaled/11:(507, 16) [0.005367027600000001]\n",
+      "Calculating for kidneyFlowFraction/12:(507, 16) [0.00275625]\n",
+      "Calculating for richlyPerfusedFlowFraction/14:(507, 16) [0.0030140099999999997]\n",
+      "Calculating for fatFlowFraction/15:(507, 16) [0.00024335999999999995]\n",
+      "Calculating for slowlyPerfusedFlowFraction/17:(507, 16) [0.00558009]\n",
+      "Calculating for brainBloodFlowFraction/18:(507, 16) [0.00116964]\n",
+      "Calculating for liverInFlowFraction/21:(507, 16) [0.0002166784]\n",
+      "Calculating for liverOutFlowFraction/19:(507, 16) [0.00463761]\n",
+      "Calculating for gutFlowFraction/20:(507, 16) [0.0035676729]\n",
+      "Calculating for plasmaVolumeFraction/0:(507, 16) [1.1289600000000003e-05]\n",
+      "Calculating for redBloodCellsVolumeFraction/1:(507, 16) [3.6e-05]\n",
+      "Calculating for kidneyVolumeFraction/2:(507, 16) [1.44e-06]\n",
+      "Calculating for richlyPerfusedVolumeFraction/13:(507, 16) [0.0009]\n",
+      "Calculating for fatVolumeFraction/16:(507, 16) [0.004292870400000001]\n",
+      "Calculating for hairVolumeFraction/4:(507, 16) [1e-06]\n",
+      "Calculating for slowlyPerfusedVolumeFraction/3:(507, 16) [0.0031359999999999995]\n",
+      "Calculating for brainBloodVolumeFraction/6:(507, 16) [4.41e-06]\n",
+      "Calculating for brainVolumeFraction/7:(507, 16) [3.6e-05]\n",
+      "Calculating for liverVolumeFraction/8:(507, 16) [4.225e-05]\n",
+      "Calculating for gutVolumeFraction/10:(507, 16) [6.502500000000001e-06]\n",
+      "Calculating for intestineVolumeFraction/9:(507, 16) [0.0017640000000000002]\n",
       "Done simultaneous LSODA SE\n",
       "Done simultaneous LSODA SE\n",
-      "Time: 1.902 s\n"
+      "Time: 2.189 s\n"
      ]
      ]
     }
     }
    ],
    ],
@@ -125,21 +134,20 @@
   },
   },
   {
   {
    "cell_type": "code",
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 58,
    "metadata": {},
    "metadata": {},
    "outputs": [
    "outputs": [
     {
     {
      "name": "stdout",
      "name": "stdout",
      "output_type": "stream",
      "output_type": "stream",
      "text": [
      "text": [
-      "*************inspect************\n",
       "***********done************\n",
       "***********done************\n",
-      "(17, 17)\n",
-      "1\n",
-      "Time: 0.768 s\n",
+      "(16, 16)\n",
+      "22\n",
+      "Time: 0.714 s\n",
       "[ 0.          0.          0.          0.          0.          0.\n",
       "[ 0.          0.          0.          0.          0.          0.\n",
       "  0.          0.12434798 -0.00099998  0.          0.          0.\n",
       "  0.          0.12434798 -0.00099998  0.          0.          0.\n",
-      "  0.          0.          0.          0.          0.        ]\n"
+      "  0.          0.          0.          0.        ]\n"
      ]
      ]
     },
     },
     {
     {
@@ -163,19 +171,8 @@
     "modelFile=os.path.join(fh,'software','src','PBPK','models','humanHG.json')\n",
     "modelFile=os.path.join(fh,'software','src','PBPK','models','humanHG.json')\n",
     "parameterFile=os.path.join(fh,'software','src','PBPK','models','humanHG_parameters1.json')\n",
     "parameterFile=os.path.join(fh,'software','src','PBPK','models','humanHG_parameters1.json')\n",
     "sys.parse(modelFile,parameterFile)\n",
     "sys.parse(modelFile,parameterFile)\n",
-    "with open(setupFile,'r') as f:\n",
-    "    setup=json.load(f)\n",
-    "#print(sys.u(10)[sys.lut['venous']])\n",
-    "print(\"*************inspect************\")\n",
-    "tscale=1\n",
-    "if setup['tUnit']=='hour':\n",
-    "    tscale=60\n",
-    "if setup['tUnit']=='day':\n",
-    "    tscale=60*24\n",
-    "if setup['tUnit']=='month':\n",
-    "    tscale=60*24*30\n",
-    "if setup['tUnit']=='year':\n",
-    "    tscale=60*24*365\n",
+    "setup=runSolver.parseSetup(setupFile)\n",
+    "tscale=runSolver.getScale(setup)\n",
     "\n",
     "\n",
     "#sys.inspect()    \n",
     "#sys.inspect()    \n",
     "\n",
     "\n",
@@ -184,7 +181,7 @@
     "#print(sys.fSS(2))\n",
     "#print(sys.fSS(2))\n",
     "print(sys.m)\n",
     "print(sys.m)\n",
     "\n",
     "\n",
-    "nt=201\n",
+    "nt=setup['nt']\n",
     "qtmax=24*60*365*10\n",
     "qtmax=24*60*365*10\n",
     "qt=numpy.linspace(0,qtmax,nt)\n",
     "qt=numpy.linspace(0,qtmax,nt)\n",
     "#ft=[fw['derivatives']['fetusGrowthDuration'](x) for x in qt]\n",
     "#ft=[fw['derivatives']['fetusGrowthDuration'](x) for x in qt]\n",
@@ -247,7 +244,6 @@
    ],
    ],
    "source": [
    "source": [
     "# #copy output of Thompson et al1\n",
     "# #copy output of Thompson et al1\n",
-    "tscale=24*60*365\n",
     "fig, axs = matplotlib.pyplot.subplots(5, 3,figsize=(15,25))\n",
     "fig, axs = matplotlib.pyplot.subplots(5, 3,figsize=(15,25))\n",
     "name=['arterial','adipose','brain','heart','kidney','liver','lung','muscle','skin',\n",
     "name=['arterial','adipose','brain','heart','kidney','liver','lung','muscle','skin',\n",
     "      'splanchnic','stomach','testes','excrement']\n",
     "      'splanchnic','stomach','testes','excrement']\n",