Skip to content
Snippets Groups Projects
Commit e8dfb3cf authored by Tu, Ethan's avatar Tu, Ethan
Browse files

Delete pkOptimizer.html

parent 42a10088
No related branches found
No related tags found
No related merge requests found
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.7.4" />
<title>pkOptimizer API documentation</title>
<meta name="description" content="" />
<link href='https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css' rel='stylesheet'>
<link href='https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/8.0.0/sanitize.min.css' rel='stylesheet'>
<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css" rel="stylesheet">
<style>.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{font-weight:bold}#index h4 + ul{margin-bottom:.6em}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>pkOptimizer</code></h1>
</header>
<section id="section-intro">
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">#!/usr/bin/env python
# coding: utf-8
# In[9]:
from scipy.stats import gamma
from scipy.integrate import odeint
from scipy.optimize import minimize
from scipy.optimize import curve_fit
import os
import csv
import re
import math as math
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline
class pkOptimizer:
&#34;&#34;&#34;The pkOptimizer object is an optimizer for parameters in pk models.&#34;&#34;&#34;
def __init__ (self, wd, Flow = 1/60, Vp = 0.05, Visf = 0.15, PS = 1/60):
&#34;&#34;&#34;Initializes the model with initial guess parameter values for flow, Vp, Visf, and PS.
Parameters
----------
Flow : double
Flow is the flow of plasma through the blood vessel in mL/(mL*min). Defaults to 1/60.
Vp : double
Vp is the volume of plasma in mL. Defaults to 0.05.
Visf : double
Visf is the volume of interstitial fluid in mL. Defaults to 0.15.
PS : double
PS is the permeability-surface area constant in mL/(g*min). Defaults to 1/60.
&#34;&#34;&#34;
def getData(self, wd):
&#34;&#34;&#34;Imports data from all .csv files in directory.
Parameters
----------
wd : str
wd is the working directory path
Attributes
----------
t : double[]
list of all timepoints
aorta : double[]
concentration of tracer in aorta (input function)
myo : double[]
concentration of tracer in myocardial tissue (Cisf)
Returns
-------
t : double[]
list of all timepoints
aorta : double[]
concentration of tracer in aorta (input function)
myo : double[]
concentration of tracer in myocardial tissue (Cisf)
&#34;&#34;&#34;
os.chdir(wd)
#os.chdir(r&#34;C:\Users\Ethan\OneDrive - Michigan State University\MSU\Classwork\Computational Modeling\Models\Data&#34;)
#create directory of all csv files,
data = list(csv.reader(open(&#39;CTPERF005_stress.csv&#39;), delimiter = &#39;\t&#39;))
t = []
aorta = []
myo = []
for i in range(12):
t.append(float(re.compile(&#39;\d+[.]+\d+|\d+&#39;).findall(data[i+1][0])[0]))
aorta.append(float(re.compile(&#39;\d+[.]+\d+|\d+&#39;).findall(data[i+1][1])[0]))
myo.append(float(re.compile(&#39;\d+[.]+\d+|\d+&#39;).findall(data[i+1][2])[0]))
return t, aorta, myo
def gammaFunc(self, time, a, l, s):
&#34;&#34;&#34;Creates a gamma variate probability density function with given alpha, location, and scale values.
Parameters
----------
time : double[]
array of timepoints
a : double
alpha value of gamma PDF
l : double
location of 50th percentile of function
s : double
scale parameter
Returns
-------
rv.pdf(time)
probability density function of your gamma variate.
&#34;&#34;&#34;
rv = gamma(a, loc = l, scale = s) #input function
return rv.pdf(time)
def curveFit(self, t, aorta, myo, model):
&#34;&#34;&#34;Takes in data and fits gamma curve to aorta and Cisf from model to myo. Returns parameters for best fit.
Parameters
----------
t : double[]
list of all timepoints
aorta : double[]
concentration of tracer in aorta (input function)
myo : double[]
concentration of tracer in myocardial tissue (Cisf)
model : pkModel object
a pk model, either 1Comp or 2Comp
Returns
-------
Flow : double
Flow is the flow of plasma through the blood vessel in mL/(mL*min).
Vp : double
Vp is the volume of plasma in mL.
Visf : double
Visf is the volume of interstitial fluid in mL.
PS : double
PS is the permeability-surface area constant in mL/(g*min).
&#34;&#34;&#34;
def getPlot(self):
&#34;&#34;&#34;Plots the original data to the fitted curve.&#34;&#34;&#34;
plt.plot(t, aorta, &#39;bo&#39;, label=&#39;data&#39;)
#plt.plot(t, y, &#39;b-&#39;, label=&#39;data&#39;)
popt, pcov = curve_fit(gammaFunc, t, aorta, p0 = [2, 8, 10000], method = &#39;trf&#39;)
print(f&#39;alpha = {popt[0]}, loc = {popt[1]}, scale = {popt[2]}&#39;)
plt.plot(t, gammaFunc(t, *popt), &#39;r-&#39;, label=&#39;fit: a=%5.3f, b=%5.3f, c=%5.3f&#39; % tuple(popt))
plt.plot(time, gammaFunc(time, .1313, 8.533, 10000), &#39;b-&#39;)
# In[ ]:</code></pre>
</details>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="pkOptimizer.pkOptimizer"><code class="flex name class">
<span>class <span class="ident">pkOptimizer</span></span>
<span>(</span><span>wd, Flow=0.016666666666666666, Vp=0.05, Visf=0.15, PS=0.016666666666666666)</span>
</code></dt>
<dd>
<section class="desc"><p>The pkOptimizer object is an optimizer for parameters in pk models.</p>
<p>Initializes the model with initial guess parameter values for flow, Vp, Visf, and PS.
Parameters</p>
<hr>
<p>Flow : double
Flow is the flow of plasma through the blood vessel in mL/(mL*min). Defaults to 1/60.</p>
<p>Vp : double
Vp is the volume of plasma in mL. Defaults to 0.05.</p>
<p>Visf : double
Visf is the volume of interstitial fluid in mL. Defaults to 0.15.</p>
<p>PS : double
PS is the permeability-surface area constant in mL/(g*min). Defaults to 1/60.</p></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class pkOptimizer:
&#34;&#34;&#34;The pkOptimizer object is an optimizer for parameters in pk models.&#34;&#34;&#34;
def __init__ (self, wd, Flow = 1/60, Vp = 0.05, Visf = 0.15, PS = 1/60):
&#34;&#34;&#34;Initializes the model with initial guess parameter values for flow, Vp, Visf, and PS.
Parameters
----------
Flow : double
Flow is the flow of plasma through the blood vessel in mL/(mL*min). Defaults to 1/60.
Vp : double
Vp is the volume of plasma in mL. Defaults to 0.05.
Visf : double
Visf is the volume of interstitial fluid in mL. Defaults to 0.15.
PS : double
PS is the permeability-surface area constant in mL/(g*min). Defaults to 1/60.
&#34;&#34;&#34;
def getData(self, wd):
&#34;&#34;&#34;Imports data from all .csv files in directory.
Parameters
----------
wd : str
wd is the working directory path
Attributes
----------
t : double[]
list of all timepoints
aorta : double[]
concentration of tracer in aorta (input function)
myo : double[]
concentration of tracer in myocardial tissue (Cisf)
Returns
-------
t : double[]
list of all timepoints
aorta : double[]
concentration of tracer in aorta (input function)
myo : double[]
concentration of tracer in myocardial tissue (Cisf)
&#34;&#34;&#34;
os.chdir(wd)
#os.chdir(r&#34;C:\Users\Ethan\OneDrive - Michigan State University\MSU\Classwork\Computational Modeling\Models\Data&#34;)
#create directory of all csv files,
data = list(csv.reader(open(&#39;CTPERF005_stress.csv&#39;), delimiter = &#39;\t&#39;))
t = []
aorta = []
myo = []
for i in range(12):
t.append(float(re.compile(&#39;\d+[.]+\d+|\d+&#39;).findall(data[i+1][0])[0]))
aorta.append(float(re.compile(&#39;\d+[.]+\d+|\d+&#39;).findall(data[i+1][1])[0]))
myo.append(float(re.compile(&#39;\d+[.]+\d+|\d+&#39;).findall(data[i+1][2])[0]))
return t, aorta, myo
def gammaFunc(self, time, a, l, s):
&#34;&#34;&#34;Creates a gamma variate probability density function with given alpha, location, and scale values.
Parameters
----------
time : double[]
array of timepoints
a : double
alpha value of gamma PDF
l : double
location of 50th percentile of function
s : double
scale parameter
Returns
-------
rv.pdf(time)
probability density function of your gamma variate.
&#34;&#34;&#34;
rv = gamma(a, loc = l, scale = s) #input function
return rv.pdf(time)
def curveFit(self, t, aorta, myo, model):
&#34;&#34;&#34;Takes in data and fits gamma curve to aorta and Cisf from model to myo. Returns parameters for best fit.
Parameters
----------
t : double[]
list of all timepoints
aorta : double[]
concentration of tracer in aorta (input function)
myo : double[]
concentration of tracer in myocardial tissue (Cisf)
model : pkModel object
a pk model, either 1Comp or 2Comp
Returns
-------
Flow : double
Flow is the flow of plasma through the blood vessel in mL/(mL*min).
Vp : double
Vp is the volume of plasma in mL.
Visf : double
Visf is the volume of interstitial fluid in mL.
PS : double
PS is the permeability-surface area constant in mL/(g*min).
&#34;&#34;&#34;
def getPlot(self):
&#34;&#34;&#34;Plots the original data to the fitted curve.&#34;&#34;&#34;
plt.plot(t, aorta, &#39;bo&#39;, label=&#39;data&#39;)
#plt.plot(t, y, &#39;b-&#39;, label=&#39;data&#39;)
popt, pcov = curve_fit(gammaFunc, t, aorta, p0 = [2, 8, 10000], method = &#39;trf&#39;)
print(f&#39;alpha = {popt[0]}, loc = {popt[1]}, scale = {popt[2]}&#39;)
plt.plot(t, gammaFunc(t, *popt), &#39;r-&#39;, label=&#39;fit: a=%5.3f, b=%5.3f, c=%5.3f&#39; % tuple(popt))
plt.plot(time, gammaFunc(time, .1313, 8.533, 10000), &#39;b-&#39;)</code></pre>
</details>
<h3>Methods</h3>
<dl>
<dt id="pkOptimizer.pkOptimizer.curveFit"><code class="name flex">
<span>def <span class="ident">curveFit</span></span>(<span>self, t, aorta, myo, model)</span>
</code></dt>
<dd>
<section class="desc"><p>Takes in data and fits gamma curve to aorta and Cisf from model to myo. Returns parameters for best fit.</p>
<h2 id="parameters">Parameters</h2>
<p>t : double[]
list of all timepoints
aorta : double[]
concentration of tracer in aorta (input function)
myo : double[]
concentration of tracer in myocardial tissue (Cisf)
model : pkModel object
a pk model, either 1Comp or 2Comp</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><strong><code>Flow</code></strong> :&ensp;<code>double</code></dt>
<dd>Flow is the flow of plasma through the blood vessel in mL/(mL*min).</dd>
<dt><strong><code>Vp</code></strong> :&ensp;<code>double</code></dt>
<dd>Vp is the volume of plasma in mL.</dd>
<dt><strong><code>Visf</code></strong> :&ensp;<code>double</code></dt>
<dd>Visf is the volume of interstitial fluid in mL.</dd>
<dt><strong><code>PS</code></strong> :&ensp;<code>double</code></dt>
<dd>PS is the permeability-surface area constant in mL/(g*min).</dd>
</dl></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def curveFit(self, t, aorta, myo, model):
&#34;&#34;&#34;Takes in data and fits gamma curve to aorta and Cisf from model to myo. Returns parameters for best fit.
Parameters
----------
t : double[]
list of all timepoints
aorta : double[]
concentration of tracer in aorta (input function)
myo : double[]
concentration of tracer in myocardial tissue (Cisf)
model : pkModel object
a pk model, either 1Comp or 2Comp
Returns
-------
Flow : double
Flow is the flow of plasma through the blood vessel in mL/(mL*min).
Vp : double
Vp is the volume of plasma in mL.
Visf : double
Visf is the volume of interstitial fluid in mL.
PS : double
PS is the permeability-surface area constant in mL/(g*min).
&#34;&#34;&#34;</code></pre>
</details>
</dd>
<dt id="pkOptimizer.pkOptimizer.gammaFunc"><code class="name flex">
<span>def <span class="ident">gammaFunc</span></span>(<span>self, time, a, l, s)</span>
</code></dt>
<dd>
<section class="desc"><p>Creates a gamma variate probability density function with given alpha, location, and scale values.
Parameters</p>
<hr>
<p>time : double[]
array of timepoints
a : double
alpha value of gamma PDF
l : double
location of 50th percentile of function
s : double
scale parameter </p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>rv.pdf</code>(<code>time</code>)</dt>
<dd>probability density function of your gamma variate.</dd>
</dl></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def gammaFunc(self, time, a, l, s):
&#34;&#34;&#34;Creates a gamma variate probability density function with given alpha, location, and scale values.
Parameters
----------
time : double[]
array of timepoints
a : double
alpha value of gamma PDF
l : double
location of 50th percentile of function
s : double
scale parameter
Returns
-------
rv.pdf(time)
probability density function of your gamma variate.
&#34;&#34;&#34;
rv = gamma(a, loc = l, scale = s) #input function
return rv.pdf(time)</code></pre>
</details>
</dd>
<dt id="pkOptimizer.pkOptimizer.getData"><code class="name flex">
<span>def <span class="ident">getData</span></span>(<span>self, wd)</span>
</code></dt>
<dd>
<section class="desc"><p>Imports data from all .csv files in directory.
Parameters</p>
<hr>
<p>wd : str
wd is the working directory path</p>
<h2 id="attributes">Attributes</h2>
<dl>
<dt><strong><code>t</code></strong> :&ensp;<code>double</code>[]</dt>
<dd>list of all timepoints</dd>
<dt><strong><code>aorta</code></strong> :&ensp;<code>double</code>[]</dt>
<dd>concentration of tracer in aorta (input function)</dd>
<dt><strong><code>myo</code></strong> :&ensp;<code>double</code>[]</dt>
<dd>concentration of tracer in myocardial tissue (Cisf)</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><strong><code>t</code></strong> :&ensp;<code>double</code>[]</dt>
<dd>list of all timepoints</dd>
<dt><strong><code>aorta</code></strong> :&ensp;<code>double</code>[]</dt>
<dd>concentration of tracer in aorta (input function)</dd>
<dt><strong><code>myo</code></strong> :&ensp;<code>double</code>[]</dt>
<dd>concentration of tracer in myocardial tissue (Cisf)</dd>
</dl></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def getData(self, wd):
&#34;&#34;&#34;Imports data from all .csv files in directory.
Parameters
----------
wd : str
wd is the working directory path
Attributes
----------
t : double[]
list of all timepoints
aorta : double[]
concentration of tracer in aorta (input function)
myo : double[]
concentration of tracer in myocardial tissue (Cisf)
Returns
-------
t : double[]
list of all timepoints
aorta : double[]
concentration of tracer in aorta (input function)
myo : double[]
concentration of tracer in myocardial tissue (Cisf)
&#34;&#34;&#34;
os.chdir(wd)
#os.chdir(r&#34;C:\Users\Ethan\OneDrive - Michigan State University\MSU\Classwork\Computational Modeling\Models\Data&#34;)
#create directory of all csv files,
data = list(csv.reader(open(&#39;CTPERF005_stress.csv&#39;), delimiter = &#39;\t&#39;))
t = []
aorta = []
myo = []
for i in range(12):
t.append(float(re.compile(&#39;\d+[.]+\d+|\d+&#39;).findall(data[i+1][0])[0]))
aorta.append(float(re.compile(&#39;\d+[.]+\d+|\d+&#39;).findall(data[i+1][1])[0]))
myo.append(float(re.compile(&#39;\d+[.]+\d+|\d+&#39;).findall(data[i+1][2])[0]))
return t, aorta, myo</code></pre>
</details>
</dd>
<dt id="pkOptimizer.pkOptimizer.getPlot"><code class="name flex">
<span>def <span class="ident">getPlot</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>Plots the original data to the fitted curve.</p></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def getPlot(self):
&#34;&#34;&#34;Plots the original data to the fitted curve.&#34;&#34;&#34;
plt.plot(t, aorta, &#39;bo&#39;, label=&#39;data&#39;)
#plt.plot(t, y, &#39;b-&#39;, label=&#39;data&#39;)
popt, pcov = curve_fit(gammaFunc, t, aorta, p0 = [2, 8, 10000], method = &#39;trf&#39;)
print(f&#39;alpha = {popt[0]}, loc = {popt[1]}, scale = {popt[2]}&#39;)
plt.plot(t, gammaFunc(t, *popt), &#39;r-&#39;, label=&#39;fit: a=%5.3f, b=%5.3f, c=%5.3f&#39; % tuple(popt))
plt.plot(time, gammaFunc(time, .1313, 8.533, 10000), &#39;b-&#39;)</code></pre>
</details>
</dd>
</dl>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="pkOptimizer.pkOptimizer" href="#pkOptimizer.pkOptimizer">pkOptimizer</a></code></h4>
<ul class="">
<li><code><a title="pkOptimizer.pkOptimizer.curveFit" href="#pkOptimizer.pkOptimizer.curveFit">curveFit</a></code></li>
<li><code><a title="pkOptimizer.pkOptimizer.gammaFunc" href="#pkOptimizer.pkOptimizer.gammaFunc">gammaFunc</a></code></li>
<li><code><a title="pkOptimizer.pkOptimizer.getData" href="#pkOptimizer.pkOptimizer.getData">getData</a></code></li>
<li><code><a title="pkOptimizer.pkOptimizer.getPlot" href="#pkOptimizer.pkOptimizer.getPlot">getPlot</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.7.4</a>.</p>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad()</script>
</body>
</html>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment