- Author:
- David Nickerson <nickerso@users.sourceforge.net>
- Date:
- 2013-05-04 07:40:04+12:00
- Desc:
- adding initial TODO list to keep track of what I need to do to get things working with more recent tools than my original CellMLSimulator that I used in this paper
- Permanent Source URI:
- https://models.physiomeproject.org/w/andre/nickerson-2008/rawfile/d6328d18c94e9dad70f4d0e4b250e89429773b62/cellml/models/2004_tenTusscher-version-2/experiments/run.pl
#!/usr/bin/perl -w
use strict;
use lib qw(../..);
use Experiment;
# GnuplotIF doesn't seem very useful except by using
# gnuplot commands directly.
use GnuplotIF;
use Getopt::Long;
# default is to run simulations and can also be set with --run
# won't run simulations if --norun specify on command line.
my $runSimulations = 1;
# default is to do all the gates
my $ICaLgates = 0;
my $IKrgates = 0;
my $IKsgate = 0;
my $INagates = 0;
my $Itogates = 0;
my $periodic = 1;
GetOptions("run!"=>\$runSimulations,
"ICaLgates!"=>\$ICaLgates,
"IKrgates!"=>\$IKrgates,
"IKsgate!"=>\$IKsgate,
"INagates!"=>\$INagates,
"Itogates!"=>\$Itogates,
"periodic!"=>\$periodic
);
my $e = new Experiment;
$e->promptWarnings(1);
sub ICaLgates {
my $modelC = "ICaL_gates-calcium_clamp.xml";
my $dataC = "data/ICaL_gates-calcium_clamp.data";
if ($runSimulations) {
if ($e->makeDirectory($dataC) < 0) {
die "Error making data directory";
}
if ($e->simulate($modelC,$dataC) < 0) {
die "Error simulating the model";
}
}
my $modelV = "ICaL_gates-voltage_clamp.xml";
my $dataV = "data/ICaL_gates-voltage_clamp.data";
if ($runSimulations) {
if ($e->makeDirectory($dataV) < 0) {
die "Error making data directory";
}
if ($e->simulate($modelV,$dataV) < 0) {
die "Error simulating the model";
}
}
my $plot = GnuplotIF->new();
$plot->gnuplot_cmd("set multiplot");
# Figure 2(a) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0,0.5");
$plot->gnuplot_cmd("set size 0.5,0.5");
my ($Vm,$dInf) = $e->getDataIndices($dataV,"voltage_clamp/Vm",
"d_gate/d_infinity");
$plot->gnuplot_cmd(
"plot [-50:30] \"$dataV\" using $Vm:$dInf title \"d_inf\" with lines");
}
# Figure 2(b) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0.5,0.5");
$plot->gnuplot_cmd("set size 0.5,0.5");
my ($Vm,$fInf) = $e->getDataIndices($dataV,"voltage_clamp/Vm",
"f_gate/f_infinity");
$plot->gnuplot_cmd(
"plot [-80:40] \"$dataV\" using $Vm:$fInf title \"f_inf\" with lines");
}
# Figure 2(c) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0.0,0.0");
$plot->gnuplot_cmd("set size 0.5,0.5");
my ($Cai,$fCa) = $e->getDataIndices($dataC,"calcium_clamp/Cai",
"fCa_gate/fCa_infinity");
$plot->gnuplot_cmd(
"plot \"$dataC\" using $Cai:$fCa title \"fCa_inf\" with lines");
}
# Figure 2(d) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0.5,0.25");
$plot->gnuplot_cmd("set size 0.5,0.25");
my ($Vm,$tauD) = $e->getDataIndices($dataV,"voltage_clamp/Vm",
"d_gate/tau_d");
$plot->gnuplot_cmd(
"plot [-80:40] \"$dataV\" using $Vm:$tauD title \"tau_d\" with lines");
}
# Figure 2(e) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0.5,0.0");
$plot->gnuplot_cmd("set size 0.5,0.25");
my ($Vm,$tauF) = $e->getDataIndices($dataV,"voltage_clamp/Vm",
"f_gate/tau_f");
$plot->gnuplot_cmd(
"plot [-100:50] \"$dataV\" using $Vm:$tauF title \"tau_f\" with lines");
}
$plot->gnuplot_cmd("unset multiplot");
$plot->gnuplot_pause(-1,"Figure 2 from ten Tusscher et al (2004)");
}
sub IKrgates {
my $model = "IKr_gates-voltage_clamp.xml";
my $data = "data/IKr_gates-voltage_clamp.data";
if ($runSimulations) {
if ($e->makeDirectory($data) < 0) {
die "Error making data directory";
}
if ($e->simulate($model,$data) < 0) {
die "Error simulating the model";
}
}
my $plot = GnuplotIF->new();
$plot->gnuplot_cmd("set multiplot");
# Figure 6(a) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0,0.5");
$plot->gnuplot_cmd("set size 1,0.5");
my ($Vm,$X1,$X2) =
$e->getDataIndices($data,"voltage_clamp/Vm",
"Xr1_gate/Xr1_infinity",
"Xr2_gate/Xr2_infinity");
$plot->gnuplot_cmd(
"plot [-150:50] \"$data\" using $Vm:$X1 title \"Xr1\" with lines,"
."\"$data\" using $Vm:$X2 title \"Xr1\" with lines"
);
}
# Figure 6(b) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0,0");
$plot->gnuplot_cmd("set size 0.5,0.5");
my ($Vm,$tau) = $e->getDataIndices($data,"voltage_clamp/Vm",
"Xr1_gate/tau_Xr1");
$plot->gnuplot_cmd(
"plot [-150:50] \"$data\" using $Vm:$tau title \"tau_Xr1\" with lines");
}
# Figure 6(c) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0.5,0");
$plot->gnuplot_cmd("set size 0.5,0.5");
my ($Vm,$tau) = $e->getDataIndices($data,"voltage_clamp/Vm",
"Xr2_gate/tau_Xr2");
$plot->gnuplot_cmd(
"plot [-150:50] \"$data\" using $Vm:$tau title \"tau_Xr2\" with lines");
}
$plot->gnuplot_cmd("unset multiplot");
$plot->gnuplot_pause(-1,"Figure 6 from ten Tusscher et al (2004)");
}
sub IKsgate {
my $model = "IKs_gate-voltage_clamp.xml";
my $data = "data/IKs_gate-voltage_clamp.data";
if ($runSimulations) {
if ($e->makeDirectory($data) < 0) {
die "Error making data directory";
}
if ($e->simulate($model,$data) < 0) {
die "Error simulating the model";
}
}
my $plot = GnuplotIF->new();
$plot->gnuplot_cmd("set multiplot");
# Figure 5(a) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0,0.5");
$plot->gnuplot_cmd("set size 1,0.5");
my ($Vm,$Xs) = $e->getDataIndices($data,"voltage_clamp/Vm",
"Xs_gate/Xs_infinity");
$plot->gnuplot_cmd(
"plot [-100:100] \"$data\" using $Vm:$Xs title \"Xs_inf\" with lines"
);
}
# Figure 5(b) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0,0");
$plot->gnuplot_cmd("set size 1,0.5");
my ($Vm,$tau) = $e->getDataIndices($data,"voltage_clamp/Vm",
"Xs_gate/tau_Xs");
$plot->gnuplot_cmd(
"plot [-50:50] \"$data\" using $Vm:$tau title \"tau_Xs\" with lines");
}
$plot->gnuplot_cmd("unset multiplot");
$plot->gnuplot_pause(-1,"Figure 5 from ten Tusscher et al (2004)");
}
sub INagates {
my $model = "INa_gates-voltage_clamp.xml";
my $data = "data/INa_gates-voltage_clamp.data";
if ($runSimulations) {
if ($e->makeDirectory($data) < 0) {
die "Error making data directory";
}
if ($e->simulate($model,$data) < 0) {
die "Error simulating the model";
}
}
my $plot = GnuplotIF->new();
$plot->gnuplot_cmd("set multiplot");
# Figure 1(a) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0,0.5");
$plot->gnuplot_cmd("set size 0.5,0.5");
my ($Vm,$m) = $e->getDataIndices($data,"voltage_clamp/Vm",
"m_gate/m_infinity");
$plot->gnuplot_cmd(
"plot [-80:20] \"$data\" using $Vm:(\$$m*\$$m*\$$m) "
."title \"m_inf**3\" with lines"
);
}
# Figure 1(b) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0.5,0.5");
$plot->gnuplot_cmd("set size 0.5,0.5");
my ($Vm,$h,$j) =
$e->getDataIndices($data,"voltage_clamp/Vm","h_gate/h_infinity",
"j_gate/j_infinity");
$plot->gnuplot_cmd(
"plot [-150:0] \"$data\" using $Vm:(\$$h*\$$j) "
."title \"h*j\" with lines");
}
# Figure 1(c) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0.0,0.0");
$plot->gnuplot_cmd("set size 0.33,0.5");
my ($Vm,$tau) = $e->getDataIndices($data,"voltage_clamp/Vm",
"m_gate/tau_m");
$plot->gnuplot_cmd(
"plot [-100:40] \"$data\" using $Vm:$tau "
."title \"tau_m\" with lines");
}
# Figure 1(d) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0.33,0.0");
$plot->gnuplot_cmd("set size 0.33,0.5");
my ($Vm,$tau) = $e->getDataIndices($data,"voltage_clamp/Vm",
"h_gate/tau_h");
$plot->gnuplot_cmd(
"plot [-120:0] \"$data\" using $Vm:$tau "
."title \"tau_h\" with lines");
}
# Figure 1(e) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0.66,0.0");
$plot->gnuplot_cmd("set size 0.33,0.5");
my ($Vm,$tau) = $e->getDataIndices($data,"voltage_clamp/Vm",
"j_gate/tau_j");
$plot->gnuplot_cmd(
"plot [-130:0] \"$data\" using $Vm:$tau "
."title \"tau_j\" with lines");
}
$plot->gnuplot_cmd("unset multiplot");
$plot->gnuplot_pause(-1,"Figure 1 from ten Tusscher et al (2004)");
}
sub Itogates {
my $modelN = "Ito_gates-voltage_clamp-endo.xml";
my $dataN = "data/Ito_gates-voltage_clamp-endo.data";
if ($runSimulations) {
if ($e->makeDirectory($dataN) < 0) {
die "Error making data directory";
}
if ($e->simulate($modelN,$dataN) < 0) {
die "Error simulating the model";
}
}
my $modelP = "Ito_gates-voltage_clamp-epi.xml";
my $dataP = "data/Ito_gates-voltage_clamp-epi.data";
if ($runSimulations) {
if ($e->makeDirectory($dataP) < 0) {
die "Error making data directory";
}
if ($e->simulate($modelP,$dataP) < 0) {
die "Error simulating the model";
}
}
my $plot = GnuplotIF->new();
$plot->gnuplot_cmd("set multiplot");
# Figure 3(a) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0,0.5");
$plot->gnuplot_cmd("set size 0.5,0.5");
my ($VmN,$rN) = $e->getDataIndices($dataN,"voltage_clamp/Vm",
"r_gate/r_infinity");
my ($VmP,$rP) = $e->getDataIndices($dataP,"voltage_clamp/Vm",
"r_gate/r_infinity");
$plot->gnuplot_cmd(
"plot [-80:80] \"$dataN\" using $VmN:$rN "
."title \"r_inf-endo\" with lines,"
."\"$dataP\" using $VmP:$rP "
."title \"r_inf-epi\" with points"
);
}
# Figure 3(b) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0.5,0.5");
$plot->gnuplot_cmd("set size 0.5,0.5");
my ($VmN,$sN) = $e->getDataIndices($dataN,"voltage_clamp/Vm",
"endo_s_gate/s_infinity");
my ($VmP,$sP) = $e->getDataIndices($dataP,"voltage_clamp/Vm",
"epi_M_s_gate/s_infinity");
$plot->gnuplot_cmd(
"plot [-80:40] \"$dataN\" using $VmN:$sN "
."title \"s_inf-endo\" with lines,"
."\"$dataP\" using $VmP:$sP "
."title \"s_inf-epi\" with points"
);
}
# Figure 3(c) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0.0,0.0");
$plot->gnuplot_cmd("set size 0.33,0.5");
my ($VmN,$tN) = $e->getDataIndices($dataN,"voltage_clamp/Vm",
"r_gate/tau_r");
my ($VmP,$tP) = $e->getDataIndices($dataP,"voltage_clamp/Vm",
"r_gate/tau_r");
$plot->gnuplot_cmd(
"plot [-100:65] \"$dataN\" using $VmN:$tN "
."title \"tau_r-endo\" with lines,"
."\"$dataP\" using $VmP:$tP "
."title \"tau_r-epi\" with points"
);
}
# Figure 3(d) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0.33,0.0");
$plot->gnuplot_cmd("set size 0.33,0.5");
my ($Vm,$tau) = $e->getDataIndices($dataP,"voltage_clamp/Vm",
"epi_M_s_gate/tau_s");
$plot->gnuplot_cmd(
"plot [-100:40] \"$dataP\" using $Vm:$tau "
."title \"tau_s-epi\" with lines");
}
# Figure 1(e) of ten Tusscher (2004) article
{
$plot->gnuplot_cmd("set origin 0.66,0.0");
$plot->gnuplot_cmd("set size 0.33,0.5");
my ($Vm,$tau) = $e->getDataIndices($dataN,"voltage_clamp/Vm",
"endo_s_gate/tau_s");
$plot->gnuplot_cmd(
"plot [-100:50] \"$dataN\" using $Vm:$tau "
."title \"tau_s-endo\" with lines");
}
$plot->gnuplot_cmd("unset multiplot");
$plot->gnuplot_pause(-1,"Figure 3 from ten Tusscher et al (2004)");
}
sub periodic {
my $endoM = "periodic-stimulus-endocardial.xml";
my $endoD = "data/periodic-stimulus-endocardial.data";
if ($runSimulations) {
if ($e->makeDirectory($endoD) < 0) {
die "Error making data directory";
}
if ($e->simulate($endoM,$endoD) < 0) {
die "Error simulating the model";
}
}
my $epiM = "periodic-stimulus-epicardial.xml";
my $epiD = "data/periodic-stimulus-epicardial.data";
if ($runSimulations) {
if ($e->makeDirectory($epiD) < 0) {
die "Error making data directory";
}
if ($e->simulate($epiM,$epiD) < 0) {
die "Error simulating the model";
}
}
my $midM = "periodic-stimulus-M.xml";
my $midD = "data/periodic-stimulus-M.data";
if ($runSimulations) {
if ($e->makeDirectory($midD) < 0) {
die "Error making data directory";
}
if ($e->simulate($midM,$midD) < 0) {
die "Error simulating the model";
}
}
# the full trace
{
my $plot = GnuplotIF->new();
my ($epiT,$epiV) = $e->getDataIndices($epiD,"time",
"membrane_potential/V");
my ($endoT,$endoV) = $e->getDataIndices($endoD,"time",
"membrane_potential/V");
my ($midT,$midV) = $e->getDataIndices($midD,"time",
"membrane_potential/V");
$plot->gnuplot_cmd(
"plot "
."\"$endoD\" using $endoT:$endoV "
."title \"endo\" with lines,"
."\"$epiD\" using $epiT:$epiV "
."title \"epi\" with lines,"
."\"$midD\" using $midT:$midV "
."title \"M\" with lines"
);
$plot->gnuplot_pause(-1,"Figure 8(a) from my Noble review");
}
# something like figure 8(a) from my Noble review
{
my $plot = GnuplotIF->new();
my ($epiT,$epiV) = $e->getDataIndices($epiD,"time",
"membrane_potential/V");
my ($endoT,$endoV) = $e->getDataIndices($endoD,"time",
"membrane_potential/V");
my ($midT,$midV) = $e->getDataIndices($midD,"time",
"membrane_potential/V");
$plot->gnuplot_cmd(
"plot [19.9e3:20.4e3] "
."\"$endoD\" using $endoT:$endoV "
."title \"endo\" with lines,"
."\"$epiD\" using $epiT:$epiV "
."title \"epi\" with lines,"
."\"$midD\" using $midT:$midV "
."title \"M\" with lines"
);
$plot->gnuplot_pause(-1,"Figure 8(a) from my Noble review");
}
}
if ($ICaLgates) {
&ICaLgates();
}
if ($IKrgates) {
&IKrgates();
}
if ($IKsgate) {
&IKsgate();
}
if ($INagates) {
&INagates();
}
if ($Itogates) {
&Itogates();
}
if ($periodic) {
&periodic();
}
__END__