vbi 0.1.3__cp310-cp310-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vbi/__init__.py +37 -0
- vbi/_version.py +17 -0
- vbi/dataset/__init__.py +0 -0
- vbi/dataset/connectivity_84/centers.txt +84 -0
- vbi/dataset/connectivity_84/centres.txt +84 -0
- vbi/dataset/connectivity_84/cortical.txt +84 -0
- vbi/dataset/connectivity_84/tract_lengths.txt +84 -0
- vbi/dataset/connectivity_84/weights.txt +84 -0
- vbi/dataset/connectivity_88/Aud_88.txt +88 -0
- vbi/dataset/connectivity_88/Bold.npz +0 -0
- vbi/dataset/connectivity_88/Labels.txt +17 -0
- vbi/dataset/connectivity_88/Region_labels.txt +88 -0
- vbi/dataset/connectivity_88/tract_lengths.txt +88 -0
- vbi/dataset/connectivity_88/weights.txt +88 -0
- vbi/feature_extraction/__init__.py +1 -0
- vbi/feature_extraction/calc_features.py +293 -0
- vbi/feature_extraction/features.json +535 -0
- vbi/feature_extraction/features.py +2124 -0
- vbi/feature_extraction/features_settings.py +374 -0
- vbi/feature_extraction/features_utils.py +1357 -0
- vbi/feature_extraction/infodynamics.jar +0 -0
- vbi/feature_extraction/utility.py +507 -0
- vbi/inference.py +98 -0
- vbi/models/__init__.py +0 -0
- vbi/models/cpp/__init__.py +0 -0
- vbi/models/cpp/_src/__init__.py +0 -0
- vbi/models/cpp/_src/__pycache__/mpr_sde.cpython-310.pyc +0 -0
- vbi/models/cpp/_src/_do.cpython-310-x86_64-linux-gnu.so +0 -0
- vbi/models/cpp/_src/_jr_sdde.cpython-310-x86_64-linux-gnu.so +0 -0
- vbi/models/cpp/_src/_jr_sde.cpython-310-x86_64-linux-gnu.so +0 -0
- vbi/models/cpp/_src/_km_sde.cpython-310-x86_64-linux-gnu.so +0 -0
- vbi/models/cpp/_src/_mpr_sde.cpython-310-x86_64-linux-gnu.so +0 -0
- vbi/models/cpp/_src/_vep.cpython-310-x86_64-linux-gnu.so +0 -0
- vbi/models/cpp/_src/_wc_ode.cpython-310-x86_64-linux-gnu.so +0 -0
- vbi/models/cpp/_src/bold.hpp +303 -0
- vbi/models/cpp/_src/do.hpp +167 -0
- vbi/models/cpp/_src/do.i +17 -0
- vbi/models/cpp/_src/do.py +467 -0
- vbi/models/cpp/_src/do_wrap.cxx +12811 -0
- vbi/models/cpp/_src/jr_sdde.hpp +352 -0
- vbi/models/cpp/_src/jr_sdde.i +19 -0
- vbi/models/cpp/_src/jr_sdde.py +688 -0
- vbi/models/cpp/_src/jr_sdde_wrap.cxx +18718 -0
- vbi/models/cpp/_src/jr_sde.hpp +264 -0
- vbi/models/cpp/_src/jr_sde.i +17 -0
- vbi/models/cpp/_src/jr_sde.py +470 -0
- vbi/models/cpp/_src/jr_sde_wrap.cxx +13406 -0
- vbi/models/cpp/_src/km_sde.hpp +158 -0
- vbi/models/cpp/_src/km_sde.i +19 -0
- vbi/models/cpp/_src/km_sde.py +671 -0
- vbi/models/cpp/_src/km_sde_wrap.cxx +17367 -0
- vbi/models/cpp/_src/makefile +52 -0
- vbi/models/cpp/_src/mpr_sde.hpp +327 -0
- vbi/models/cpp/_src/mpr_sde.i +19 -0
- vbi/models/cpp/_src/mpr_sde.py +711 -0
- vbi/models/cpp/_src/mpr_sde_wrap.cxx +18618 -0
- vbi/models/cpp/_src/utility.hpp +307 -0
- vbi/models/cpp/_src/vep.hpp +171 -0
- vbi/models/cpp/_src/vep.i +16 -0
- vbi/models/cpp/_src/vep.py +464 -0
- vbi/models/cpp/_src/vep_wrap.cxx +12968 -0
- vbi/models/cpp/_src/wc_ode.hpp +294 -0
- vbi/models/cpp/_src/wc_ode.i +19 -0
- vbi/models/cpp/_src/wc_ode.py +686 -0
- vbi/models/cpp/_src/wc_ode_wrap.cxx +24263 -0
- vbi/models/cpp/damp_oscillator.py +143 -0
- vbi/models/cpp/jansen_rit.py +543 -0
- vbi/models/cpp/km.py +187 -0
- vbi/models/cpp/mpr.py +289 -0
- vbi/models/cpp/vep.py +150 -0
- vbi/models/cpp/wc.py +216 -0
- vbi/models/cupy/__init__.py +0 -0
- vbi/models/cupy/bold.py +111 -0
- vbi/models/cupy/ghb.py +284 -0
- vbi/models/cupy/jansen_rit.py +473 -0
- vbi/models/cupy/km.py +224 -0
- vbi/models/cupy/mpr.py +475 -0
- vbi/models/cupy/mpr_modified_bold.py +12 -0
- vbi/models/cupy/utils.py +184 -0
- vbi/models/numba/__init__.py +0 -0
- vbi/models/numba/_ww_EI.py +444 -0
- vbi/models/numba/damp_oscillator.py +162 -0
- vbi/models/numba/ghb.py +208 -0
- vbi/models/numba/mpr.py +383 -0
- vbi/models/pytorch/__init__.py +0 -0
- vbi/models/pytorch/data/default_parameters.npz +0 -0
- vbi/models/pytorch/data/input/ROI_sim.mat +0 -0
- vbi/models/pytorch/data/input/fc_test.csv +68 -0
- vbi/models/pytorch/data/input/fc_train.csv +68 -0
- vbi/models/pytorch/data/input/fc_vali.csv +68 -0
- vbi/models/pytorch/data/input/fcd_test.mat +0 -0
- vbi/models/pytorch/data/input/fcd_test_high_window.mat +0 -0
- vbi/models/pytorch/data/input/fcd_test_low_window.mat +0 -0
- vbi/models/pytorch/data/input/fcd_train.mat +0 -0
- vbi/models/pytorch/data/input/fcd_vali.mat +0 -0
- vbi/models/pytorch/data/input/myelin.csv +68 -0
- vbi/models/pytorch/data/input/rsfc_gradient.csv +68 -0
- vbi/models/pytorch/data/input/run_label_testset.mat +0 -0
- vbi/models/pytorch/data/input/sc_test.csv +68 -0
- vbi/models/pytorch/data/input/sc_train.csv +68 -0
- vbi/models/pytorch/data/input/sc_vali.csv +68 -0
- vbi/models/pytorch/data/obs_kong0.npz +0 -0
- vbi/models/pytorch/ww_sde_kong.py +570 -0
- vbi/models/tvbk/__init__.py +9 -0
- vbi/models/tvbk/tvbk_wrapper.py +166 -0
- vbi/models/tvbk/utils.py +72 -0
- vbi/papers/__init__.py +0 -0
- vbi/papers/pavlides_pcb_2015/pavlides.py +211 -0
- vbi/tests/__init__.py +0 -0
- vbi/tests/_test_mpr_nb.py +36 -0
- vbi/tests/test_features.py +355 -0
- vbi/tests/test_ghb_cupy.py +90 -0
- vbi/tests/test_mpr_cupy.py +49 -0
- vbi/tests/test_mpr_numba.py +84 -0
- vbi/tests/test_suite.py +19 -0
- vbi/utils.py +402 -0
- vbi-0.1.3.dist-info/METADATA +166 -0
- vbi-0.1.3.dist-info/RECORD +121 -0
- vbi-0.1.3.dist-info/WHEEL +5 -0
- vbi-0.1.3.dist-info/licenses/LICENSE +201 -0
- vbi-0.1.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/bash
|
2
|
+
|
3
|
+
CXX=g++
|
4
|
+
CXXFLAGS = -std=c++11 -fopenmp -O2 -fPIC -c
|
5
|
+
SWIGFLAGS = -c++ -python -shadow
|
6
|
+
|
7
|
+
# location of the Python header files
|
8
|
+
# PYTHON_VERSION = 3.8
|
9
|
+
PYTHON_INCLUDE = $(shell python3-config --includes)
|
10
|
+
#PYTHON_INCLUDE = /p/software/jusuf/stages/2022/software/Python/3.9.6-GCCcore-11.2.0/include/python3.9
|
11
|
+
|
12
|
+
all: _do.so _jr_sde.so _jr_sdde.so _mpr_sde.so _km_sde.so _wc_ode.so _vep.so #_ww_sde.so _sl_sdde.so
|
13
|
+
|
14
|
+
help:
|
15
|
+
@echo "Usage:"
|
16
|
+
@echo " make all - Compile all models (default)"
|
17
|
+
@echo " make clean - Remove all .o, .so, .pyc, and SWIG generated files"
|
18
|
+
@echo " make <model> - Compile specific model, where <model> is one of:"
|
19
|
+
@echo " do, jr_sde, jr_sdde, mpr_sde, km_sde, wc_ode, vep"
|
20
|
+
|
21
|
+
#ww_sde, sl_sdde
|
22
|
+
|
23
|
+
# Model-specific targets
|
24
|
+
vep: _vep.so
|
25
|
+
km_sde: _km_sde.so
|
26
|
+
jr_sde: _jr_sde.so
|
27
|
+
jr_sdde: _jr_sdde.so
|
28
|
+
mpr_sde: _mpr_sde.so
|
29
|
+
# sl_sdde: _sl_sdde.so
|
30
|
+
# ww_sde: _ww_sde.so
|
31
|
+
wc_ode: _wc_ode.so
|
32
|
+
do: _do.so
|
33
|
+
|
34
|
+
# Pattern rule for compiling SWIG wrapped models
|
35
|
+
%_wrap.o : %_wrap.cpp %.hpp utility.hpp bold.hpp
|
36
|
+
$(CXX) $(CXXFLAGS) $< -I $(PYTHON_INCLUDE)
|
37
|
+
|
38
|
+
# Pattern rule for SWIG interface files
|
39
|
+
%_wrap.cpp : %.i
|
40
|
+
swig $(SWIGFLAGS) -o $@ $<
|
41
|
+
|
42
|
+
# Pattern rule for shared object files
|
43
|
+
_%.so: %_wrap.o
|
44
|
+
$(CXX) -shared -fopenmp $< -o $@
|
45
|
+
|
46
|
+
# Phony targets
|
47
|
+
.PHONY: help clean all
|
48
|
+
|
49
|
+
clean:
|
50
|
+
rm -rf *.o *.so *.pyc *_wrap.cpp *_wrap.cxx
|
51
|
+
rm -rf __pycache__
|
52
|
+
rm -rf do.py jr_sdde.py jr_sde.py km_sde.py mpr_sde.py wc_ode.py vep.py
|
@@ -0,0 +1,327 @@
|
|
1
|
+
#ifndef MPR_SDE_HPP
|
2
|
+
#define MPR_SDE_HPP
|
3
|
+
|
4
|
+
#include <cmath>
|
5
|
+
#include <vector>
|
6
|
+
#include <string>
|
7
|
+
#include <random>
|
8
|
+
#include <fstream>
|
9
|
+
#include <assert.h>
|
10
|
+
#include <iostream>
|
11
|
+
#include "utility.hpp"
|
12
|
+
|
13
|
+
using std::string;
|
14
|
+
using std::vector;
|
15
|
+
|
16
|
+
typedef std::vector<double> dim1;
|
17
|
+
typedef std::vector<dim1> dim2;
|
18
|
+
typedef std::vector<float> dim1f;
|
19
|
+
typedef std::vector<dim1f> dim2f;
|
20
|
+
|
21
|
+
struct BoldParams
|
22
|
+
{
|
23
|
+
double kappa = 0.65;
|
24
|
+
double gamma = 0.41;
|
25
|
+
double tau = 0.98;
|
26
|
+
double alpha = 0.32;
|
27
|
+
double epsilon = 0.34;
|
28
|
+
double Eo = 0.4;
|
29
|
+
double TE = 0.04;
|
30
|
+
double vo = 0.08;
|
31
|
+
double r0 = 25.0;
|
32
|
+
double theta0 = 40.3;
|
33
|
+
double rtol = 1e-5;
|
34
|
+
double atol = 1e-8;
|
35
|
+
double dt_b = 0.001;
|
36
|
+
double K1 = 4.3 * theta0 * Eo * TE;
|
37
|
+
double K2 = epsilon * r0 * Eo * TE;
|
38
|
+
double K3 = 1 - epsilon;
|
39
|
+
double ialpha = 1 / alpha;
|
40
|
+
|
41
|
+
BoldParams() = default;
|
42
|
+
|
43
|
+
BoldParams(double kappa, double gamma, double tau,
|
44
|
+
double alpha, double epsilon, double Eo, double TE,
|
45
|
+
double vo, double r0, double theta0, double rtol,
|
46
|
+
double atol) : kappa(kappa), gamma(gamma), tau(tau),
|
47
|
+
alpha(alpha), epsilon(epsilon), Eo(Eo),
|
48
|
+
TE(TE), vo(vo), r0(r0), theta0(theta0),
|
49
|
+
rtol(rtol), atol(atol)
|
50
|
+
{
|
51
|
+
K1 = 4.3 * theta0 * Eo * TE;
|
52
|
+
K2 = epsilon * r0 * Eo * TE;
|
53
|
+
K3 = 1 - epsilon;
|
54
|
+
ialpha = 1 / alpha;
|
55
|
+
}
|
56
|
+
};
|
57
|
+
|
58
|
+
class MPR_sde
|
59
|
+
{
|
60
|
+
|
61
|
+
private:
|
62
|
+
dim1 delta;
|
63
|
+
dim1 tau;
|
64
|
+
dim1 eta;
|
65
|
+
dim1 J;
|
66
|
+
dim1 i_app;
|
67
|
+
double dt;
|
68
|
+
double dt_b;
|
69
|
+
double G;
|
70
|
+
|
71
|
+
double rNoise;
|
72
|
+
double vNoise;
|
73
|
+
double noise_amp;
|
74
|
+
|
75
|
+
size_t num_nodes;
|
76
|
+
size_t num_steps;
|
77
|
+
size_t rv_decimate;
|
78
|
+
size_t idx_cut;
|
79
|
+
unsigned RECORD_RV;
|
80
|
+
unsigned RECORD_BOLD;
|
81
|
+
|
82
|
+
double t_end;
|
83
|
+
double t_cut;
|
84
|
+
double tr; // TR: repetition time [time interval for bold sampling]
|
85
|
+
vector<vector<unsigned>> adjlist;
|
86
|
+
|
87
|
+
dim2 weights;
|
88
|
+
dim1 t_arr;
|
89
|
+
int fix_seed;
|
90
|
+
dim1 initial_state;
|
91
|
+
BoldParams bp;
|
92
|
+
|
93
|
+
public:
|
94
|
+
dim2 bold_d;
|
95
|
+
dim1 bold_t;
|
96
|
+
dim2 r_d;
|
97
|
+
dim1 r_t;
|
98
|
+
|
99
|
+
MPR_sde(double dt,
|
100
|
+
double dt_b,
|
101
|
+
size_t rv_decimate,
|
102
|
+
dim2 weights,
|
103
|
+
dim1 initial_state,
|
104
|
+
dim1 delta,
|
105
|
+
dim1 tau,
|
106
|
+
dim1 eta,
|
107
|
+
dim1 J,
|
108
|
+
dim1 i_app,
|
109
|
+
double noise_amp,
|
110
|
+
double G,
|
111
|
+
double t_end,
|
112
|
+
double t_cut,
|
113
|
+
double tr,
|
114
|
+
size_t RECORD_RV,
|
115
|
+
size_t RECORD_BOLD,
|
116
|
+
int fix_seed,
|
117
|
+
const BoldParams &bp) : dt(dt), dt_b(dt_b), G(G), delta(delta),
|
118
|
+
tau(tau), eta(eta), J(J), t_end(t_end),
|
119
|
+
t_cut(t_cut), tr(tr), RECORD_RV(RECORD_RV),
|
120
|
+
RECORD_BOLD(RECORD_BOLD), fix_seed(fix_seed),
|
121
|
+
weights(weights), initial_state(initial_state),
|
122
|
+
rv_decimate(rv_decimate), noise_amp(noise_amp), i_app(i_app)
|
123
|
+
|
124
|
+
{
|
125
|
+
assert(t_end > t_cut && "t_end must be greater than t_cut");
|
126
|
+
assert(tr > 0);
|
127
|
+
assert(rv_decimate > 0);
|
128
|
+
|
129
|
+
num_nodes = weights.size();
|
130
|
+
num_steps = int((t_end) / dt);
|
131
|
+
idx_cut = int((t_cut) / dt);
|
132
|
+
rNoise = sqrt(dt) * sqrt(2 * noise_amp);
|
133
|
+
vNoise = sqrt(dt) * sqrt(4 * noise_amp);
|
134
|
+
adjlist = adjmat_to_adjlist(weights);
|
135
|
+
}
|
136
|
+
|
137
|
+
void f_mpr(
|
138
|
+
const dim1 &x,
|
139
|
+
dim1 &dxdt,
|
140
|
+
const double t)
|
141
|
+
{
|
142
|
+
size_t nn = num_nodes;
|
143
|
+
double p2 = M_PI * M_PI;
|
144
|
+
|
145
|
+
for (unsigned i = 0; i < nn; i++)
|
146
|
+
{
|
147
|
+
double cpl = 0;
|
148
|
+
for (unsigned j = 0; j < adjlist[i].size(); j++)
|
149
|
+
{
|
150
|
+
unsigned k = adjlist[i][j];
|
151
|
+
cpl += weights[i][k] * x[k];
|
152
|
+
}
|
153
|
+
dxdt[i] = 1.0 / tau[i] * (delta[i] / (tau[i] * M_PI) + 2 * x[i] * x[i + nn]);
|
154
|
+
dxdt[i + nn] = 1.0 / tau[i] * (x[i + nn] * x[i + nn] + i_app[i] + eta[i] + J[i] * tau[i] * x[i] - (p2 * tau[i] * tau[i] * x[i] * x[i]) + G * cpl);
|
155
|
+
}
|
156
|
+
}
|
157
|
+
|
158
|
+
void heun_step(dim1 &y, const double t)
|
159
|
+
{
|
160
|
+
std::normal_distribution<> normal(0, 1);
|
161
|
+
|
162
|
+
size_t nn = 2 * num_nodes;
|
163
|
+
size_t n = num_nodes;
|
164
|
+
dim1 tmp(nn);
|
165
|
+
dim1 k1(nn);
|
166
|
+
dim1 k2(nn);
|
167
|
+
|
168
|
+
f_mpr(y, k1, t);
|
169
|
+
|
170
|
+
for (size_t i = 0; i < nn; ++i)
|
171
|
+
if (i < n)
|
172
|
+
tmp[i] = y[i] + dt * k1[i] + rNoise * normal(rng(fix_seed));
|
173
|
+
else
|
174
|
+
tmp[i] = y[i] + dt * k1[i] + vNoise * normal(rng(fix_seed));
|
175
|
+
|
176
|
+
f_mpr(tmp, k2, t + dt);
|
177
|
+
for (size_t i = 0; i < nn; ++i)
|
178
|
+
{
|
179
|
+
if (i < n)
|
180
|
+
{
|
181
|
+
y[i] += 0.5 * dt * (k1[i] + k2[i]) + rNoise * normal(rng(fix_seed));
|
182
|
+
if (y[i] < 0)
|
183
|
+
y[i] = 0.0;
|
184
|
+
}
|
185
|
+
else
|
186
|
+
y[i] += 0.5 * dt * (k1[i] + k2[i]) + vNoise * normal(rng(fix_seed));
|
187
|
+
}
|
188
|
+
}
|
189
|
+
|
190
|
+
void bold_step(
|
191
|
+
const dim1 &r_in,
|
192
|
+
dim2 &s,
|
193
|
+
dim2 &f,
|
194
|
+
dim2 &ftilde,
|
195
|
+
dim2 &vtilde,
|
196
|
+
dim2 &qtilde,
|
197
|
+
dim2 &v,
|
198
|
+
dim2 &q,
|
199
|
+
const double dtt)
|
200
|
+
{
|
201
|
+
unsigned n = num_nodes;
|
202
|
+
// double dtt = dt_b;
|
203
|
+
// dim1 fv(n, 0.0);
|
204
|
+
// dim1 ff(n, 0.0);
|
205
|
+
|
206
|
+
for (int i = 0; i < n; i++)
|
207
|
+
{
|
208
|
+
s[1][i] = s[0][i] + dtt * (r_in[i] - bp.kappa * s[0][i] - bp.gamma * (f[0][i] - 1));
|
209
|
+
f[0][i] = std::max(f[0][i], 1.0);
|
210
|
+
ftilde[1][i] = ftilde[0][i] + dtt * (s[0][i] / f[0][i]);
|
211
|
+
double fv = pow(v[0][i], bp.ialpha);
|
212
|
+
vtilde[1][i] = vtilde[0][i] + dtt * ((f[0][i] - fv) / (bp.tau * v[0][i]));
|
213
|
+
q[0][i] = std::max(q[0][i], 0.01);
|
214
|
+
double ff = (1 - pow((1 - bp.Eo), 1.0 / f[0][i])) / bp.Eo;
|
215
|
+
qtilde[1][i] = qtilde[0][i] + dtt * ((f[0][i] * ff - fv * q[0][i] / v[0][i]) / (bp.tau * q[0][i]));
|
216
|
+
f[1][i] = exp(ftilde[1][i]);
|
217
|
+
v[1][i] = exp(vtilde[1][i]);
|
218
|
+
q[1][i] = exp(qtilde[1][i]);
|
219
|
+
f[0][i] = f[1][i];
|
220
|
+
s[0][i] = s[1][i];
|
221
|
+
ftilde[0][i] = ftilde[1][i];
|
222
|
+
vtilde[0][i] = vtilde[1][i];
|
223
|
+
qtilde[0][i] = qtilde[1][i];
|
224
|
+
v[0][i] = v[1][i];
|
225
|
+
q[0][i] = q[1][i];
|
226
|
+
}
|
227
|
+
}
|
228
|
+
|
229
|
+
void integrate()
|
230
|
+
{
|
231
|
+
unsigned n = num_nodes;
|
232
|
+
double r_period = dt * 10; // we extend time 10 times
|
233
|
+
unsigned b_decimate = (int)(std::round(tr / r_period));
|
234
|
+
double dtt = r_period / 1000.0; // in seconds
|
235
|
+
|
236
|
+
size_t nt = (int)(t_end / dt);
|
237
|
+
dim1 rv_current = initial_state;
|
238
|
+
|
239
|
+
if (RECORD_RV)
|
240
|
+
{
|
241
|
+
r_d.resize((int)(nt / rv_decimate), dim1(2 * n, 0.0));
|
242
|
+
r_t.resize((int)(nt / rv_decimate), 0.0);
|
243
|
+
}
|
244
|
+
|
245
|
+
dim2 s(2, dim1(n, 0.0));
|
246
|
+
dim2 f(2, dim1(n, 0.0));
|
247
|
+
dim2 ftilde(2, dim1(n, 0.0));
|
248
|
+
dim2 vtilde(2, dim1(n, 0.0));
|
249
|
+
dim2 qtilde(2, dim1(n, 0.0));
|
250
|
+
dim2 v(2, dim1(n, 0.0));
|
251
|
+
dim2 q(2, dim1(n, 0.0));
|
252
|
+
dim2 vv((int(nt / b_decimate)), dim1(n, 0.0));
|
253
|
+
dim2 qq((int(nt / b_decimate)), dim1(n, 0.0));
|
254
|
+
|
255
|
+
if (RECORD_BOLD)
|
256
|
+
{
|
257
|
+
bold_d.resize((int)(nt / b_decimate), dim1(n, 0.0));
|
258
|
+
bold_t.resize((int)(nt / b_decimate), 0.0);
|
259
|
+
}
|
260
|
+
|
261
|
+
s[0] = dim1(n, 1.0);
|
262
|
+
f[0] = dim1(n, 1.0);
|
263
|
+
v[0] = dim1(n, 1.0);
|
264
|
+
q[0] = dim1(n, 1.0);
|
265
|
+
|
266
|
+
for (unsigned itr = 0; itr < nt - 1; ++itr)
|
267
|
+
{
|
268
|
+
double t_current = itr * dt;
|
269
|
+
heun_step(rv_current, t_current);
|
270
|
+
|
271
|
+
if (RECORD_RV)
|
272
|
+
{
|
273
|
+
if (((itr % rv_decimate) == 0) && ((int)(itr / rv_decimate) < r_d.size()))
|
274
|
+
{
|
275
|
+
unsigned idx = (int)(itr / rv_decimate);
|
276
|
+
r_d[idx] = rv_current;
|
277
|
+
r_t[idx] = t_current;
|
278
|
+
}
|
279
|
+
}
|
280
|
+
if (RECORD_BOLD)
|
281
|
+
{
|
282
|
+
bold_step(rv_current, s, f, ftilde, vtilde, qtilde, v, q, dtt);
|
283
|
+
|
284
|
+
if (((itr % b_decimate) == 0) && ((int)(itr / b_decimate) < bold_d.size()))
|
285
|
+
{
|
286
|
+
unsigned idx = (int)(itr / b_decimate);
|
287
|
+
vv[idx] = v[1];
|
288
|
+
qq[idx] = q[1];
|
289
|
+
bold_t[idx] = t_current;
|
290
|
+
{
|
291
|
+
if (std::isnan(qq[idx][0]))
|
292
|
+
{
|
293
|
+
std::cout << "nan found! " << "\n";
|
294
|
+
break;
|
295
|
+
}
|
296
|
+
}
|
297
|
+
}
|
298
|
+
}
|
299
|
+
}
|
300
|
+
|
301
|
+
for (unsigned i = 0; i < bold_d.size(); i++)
|
302
|
+
{
|
303
|
+
for (int j = 0; j < n; ++j)
|
304
|
+
bold_d[i][j] = bp.vo * (bp.K1 * (1 - qq[i][j]) + bp.K2 * (1 - qq[i][j] / vv[i][j]) + bp.K3 * (1 - vv[i][j]));
|
305
|
+
}
|
306
|
+
}
|
307
|
+
|
308
|
+
dim2 get_bold_d()
|
309
|
+
{
|
310
|
+
return bold_d;
|
311
|
+
}
|
312
|
+
dim1 get_bold_t()
|
313
|
+
{
|
314
|
+
return bold_t;
|
315
|
+
}
|
316
|
+
|
317
|
+
dim2 get_r_d()
|
318
|
+
{
|
319
|
+
return r_d;
|
320
|
+
}
|
321
|
+
dim1 get_r_t()
|
322
|
+
{
|
323
|
+
return r_t;
|
324
|
+
}
|
325
|
+
};
|
326
|
+
|
327
|
+
#endif
|
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
%module mpr_sde
|
3
|
+
%{
|
4
|
+
#include "mpr_sde.hpp"
|
5
|
+
%}
|
6
|
+
|
7
|
+
%include stl.i
|
8
|
+
%include <std_vector.i>
|
9
|
+
%include "std_string.i"
|
10
|
+
/* instantiate the required template specializations */
|
11
|
+
namespace std {
|
12
|
+
%template(IntVector) std::vector<int>;
|
13
|
+
%template(DoubleVector) std::vector<double>;
|
14
|
+
%template(DoubleVector2) std::vector<vector<double> >;
|
15
|
+
%template(SingleVector) std::vector<float>;
|
16
|
+
%template(SingleVector2) std::vector<vector<float> >;
|
17
|
+
}
|
18
|
+
|
19
|
+
%include "mpr_sde.hpp"
|