2023-07-10 14:36:01 +02:00
# gevi
2023-07-10 14:47:58 +02:00
## Main files:
Anime.py : Is a class used for displaying 2d Movies from a 3D Matrix.
ImageAlignment.py: Is a class used for aligning two images (move and rotate as well as an unused scale option). This source code is based on https://github.com/matejak/imreg_dft . Is was ported to PyTorch such it can run in GPUs.
DataContailer.py: Main class for data pre-processing of the gevi raw data.
2023-07-10 14:36:01 +02:00
## TODO / Known problems
2023-07-10 14:40:02 +02:00
Support for several part files was included but, due to missing data with several part files, never tested.
2023-07-10 14:42:51 +02:00
## Installation
2023-07-10 14:40:02 +02:00
The code was tested on a Python 3.11.2 (Linux) with the following pip packages installed:
2023-07-10 14:40:22 +02:00
2023-07-10 14:40:47 +02:00
numpy scipy pandas flake8 pep8-naming black matplotlib seaborn ipython jupyterlab mypy dataclasses-json dataconf mat73 ipympl torch torchtext pywavelets scikit-image opencv-python scikit-learn tensorflow_datasets tensorboard tqdm argh sympy jsmin pybind11 pybind11-stubgen pigar asciichartpy torchvision torchaudio tensorflow natsort roipoly
2023-07-10 14:40:22 +02:00
2023-07-10 14:41:36 +02:00
Not all packages are necessary (probably these are enougth: torch torchaudio torchvision roipoly natsort numpy matplotlib) but this is our default in-house installation plus roipoly.
2023-07-10 14:40:02 +02:00
We used a RTX 3090 as test GPU.
2023-07-10 18:23:18 +02:00
## Data processing chain
### SVD
- start automatic_load
- try to load previous mask: NOT found
- start cleaned_load_data
- start load_data
- work in XXXX.npy
- np.load
- organize acceptor
- organize donor
- move axis
- move intra timeseries
- rotate inter timeseries
- move inter timeseries
- spatial pooling
2023-07-10 18:25:50 +02:00
- data(x,y,t) = data(x,y,t) / data(x,y,t).mean(t) + 1
2023-07-10 18:23:18 +02:00
- remove the heart beat via SVD
- remove mean
- remove linear trends
- remove heart beat (heartbeat_scale)
- apply bandpass donor_residuum (filtfilt)
- apply bandpass acceptor_residuum (filtfilt)
- calculate mask (optinal)
- don't use regression
2023-07-10 18:25:50 +02:00
- scale acceptor signal (result_a(x,y,t)) and donor signal (result_d(x,y,t))
- result(x,y,t) = 1.0 + result_a(x,y,t) - result_d(x,y,t)
2023-07-10 18:23:18 +02:00
- update inital mask
- end automatic_load
2023-07-10 18:33:30 +02:00
### Classic
- start automatic_load
- try to load previous mask: NOT found
- start cleaned_load_data
- start load_data
- work in XXXX.npy
- np.load
- organize acceptor
- organize donor
- organize oxygenation
- organize volume
- move axis
- move intra timeseries
- rotate inter timeseries
- move inter timeseries
- spatial pooling
- data(x,y,t) = data(x,y,t) / data(x,y,t).mean(t) + 1
- frame shift
- measure heart rate (measure_heartbeat_frequency)
- use "regression" (i.e. iterative non-orthogonal basis decomposition)
- donor: measure heart beat spectral power (measure_heartbeat_power)
- acceptor: measure heart beat spectral power (measure_heartbeat_power)
- scale acceptor and donor signals
- result(x,y,t) = 1.0 + result_a(x,y,t) - result_d(x,y,t)
- end automatic_load