arrhythpy 1.0.0__py3-none-any.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.
arrhythpy/__init__.py ADDED
@@ -0,0 +1,36 @@
1
+ """
2
+ Arrhythpy
3
+ =========
4
+
5
+ Arrhythpy is an open-source Python program to quantify and classify
6
+ arrhythmias in calcium transients in an automated manner.
7
+
8
+ See the paper: https://doi.org/10.1152/ajpheart.00414.2025
9
+
10
+ This package exposes the core analysis functions so Arrhythpy can be
11
+ used as a library, in addition to its GUI and command-line tools:
12
+
13
+ >>> from arrhythpy import run, analyse_single, load_transient
14
+ """
15
+ from .core import (
16
+ run,
17
+ analyse_single,
18
+ load_transient,
19
+ is_numeric,
20
+ calc_accuracy,
21
+ get_threshold_freq,
22
+ get_threshold_arrythmia,
23
+ )
24
+
25
+ __version__ = "1.0.0"
26
+
27
+ __all__ = [
28
+ "run",
29
+ "analyse_single",
30
+ "load_transient",
31
+ "is_numeric",
32
+ "calc_accuracy",
33
+ "get_threshold_freq",
34
+ "get_threshold_arrythmia",
35
+ "__version__",
36
+ ]
arrhythpy/batch_cli.py ADDED
@@ -0,0 +1,82 @@
1
+ """
2
+ Command-line entry point for running Arrhythpy over many sub-folders at
3
+ once. Equivalent to running the original ``run_folders.py`` script.
4
+ """
5
+ import glob
6
+ import os
7
+
8
+ import yaml
9
+
10
+ from .core import run, is_numeric
11
+
12
+
13
+ def main():
14
+ print('\n')
15
+ path = input('Path:\t')
16
+ print('\n')
17
+
18
+ file_path = os.path.join(path, "config.yaml")
19
+ if os.path.exists(file_path):
20
+ print("Parameter file found in folder: " + os.path.basename(path))
21
+ with open(os.path.join(path, "config.yaml"), 'r') as yaml_file:
22
+ params = yaml.safe_load(yaml_file)
23
+ frequency = params["frequency"]
24
+ duration = params["duration"]
25
+ threshold_freq = params["threshold_freq"]
26
+ threshold_arrythmia = params["threshold_arrythmia"]
27
+
28
+ show = params["show"]
29
+ sigma0 = params["sigma0"]
30
+ threshold_abs = params["threshold_abs"]
31
+ prominence = params["prominence"]
32
+ varfreq_weight = params["varfreq_weight"]
33
+ scale = params["scale"]
34
+ else:
35
+ print("No paramter file found. Specify the following paramters:\n")
36
+ frequency = input('Pacing / Eigen frequency:\t')
37
+ if is_numeric(frequency):
38
+ frequency = float(frequency)
39
+ print('\n')
40
+ duration = float(input('Duration of signal in sec:\t'))
41
+ print('\n')
42
+ threshold_freq = float(input('Threshold for Tachycardia / Bradicardia in Hz:\t'))
43
+ print('\n')
44
+ threshold_arrythmia = float(input('Threshold for Arrythmia:\t'))
45
+ print('\n')
46
+
47
+ show = False
48
+ sigma0 = .01
49
+ threshold_abs = .1
50
+ prominence = 0.05
51
+ varfreq_weight = 0.5
52
+ scale = 1.
53
+
54
+ params = {
55
+ 'frequency': frequency,
56
+ 'duration': duration,
57
+ 'threshold_freq': threshold_freq,
58
+ 'threshold_arrythmia': threshold_arrythmia,
59
+ 'show': show, # set to True if you want to check the plots and edit them.
60
+ 'sigma0': sigma0, # inital width of gaussian smoothing
61
+ 'threshold_abs': threshold_abs, # threshold for peak detection of wavelet transform
62
+ 'prominence': prominence, # omit any peaks in the correlation smaller than this value
63
+ 'varfreq_weight': varfreq_weight, # weight of VF in weight sum of IMC and VF
64
+ 'scale': scale # scales the VF distribution before cropping to e [0,1]
65
+ }
66
+ with open(os.path.join(path, 'config.yaml'), 'w') as yaml_file:
67
+ yaml.dump(params, yaml_file)
68
+
69
+ directories = [os.path.join(path, name) for name in os.listdir(path) if os.path.isdir(os.path.join(path, name))]
70
+
71
+ files = []
72
+ for p in directories:
73
+ files_single = glob.glob(os.path.join(p, '*'))
74
+ files += files_single
75
+
76
+ run(files, frequency=frequency, threshold_freq=threshold_freq, prominence=prominence,
77
+ threshold_arrythmia=threshold_arrythmia, duration=duration, sigma0=sigma0,
78
+ threshold_abs=threshold_abs, path=path, show=show)
79
+
80
+
81
+ if __name__ == "__main__":
82
+ main()
arrhythpy/cli.py ADDED
@@ -0,0 +1,78 @@
1
+ """
2
+ Command-line entry point for running Arrhythpy on a single folder of
3
+ line scans (or a folder of split CSV transients).
4
+
5
+ Equivalent to running the original ``main.py`` script directly.
6
+ """
7
+ import glob
8
+ import os
9
+
10
+ import yaml
11
+
12
+ from .core import run, is_numeric
13
+
14
+
15
+ def main():
16
+ print('\n')
17
+ path = input('Path:\t')
18
+ print('\n')
19
+
20
+ file_path = os.path.join(path, "config.yaml")
21
+ if os.path.exists(file_path):
22
+ print("Parameter file found in folder: " + os.path.basename(path))
23
+ with open(os.path.join(path, "config.yaml"), 'r') as yaml_file:
24
+ params = yaml.safe_load(yaml_file)
25
+ frequency = params["frequency"]
26
+ duration = params["duration"]
27
+ threshold_freq = params["threshold_freq"]
28
+ threshold_arrythmia = params["threshold_arrythmia"]
29
+
30
+ show = params["show"]
31
+ sigma0 = params["sigma0"]
32
+ threshold_abs = params["threshold_abs"]
33
+ prominence = params["prominence"]
34
+ varfreq_weight = params["varfreq_weight"]
35
+ scale = params["scale"]
36
+ else:
37
+ print("No paramter file found. Specify the following paramters:\n")
38
+ frequency = input('Pacing / Eigen frequency:\t')
39
+ if is_numeric(frequency):
40
+ frequency = float(frequency)
41
+ print('\n')
42
+ duration = float(input('Duration of signal in sec:\t'))
43
+ print('\n')
44
+ threshold_freq = float(input('Threshold for Tachycardia / Bradicardia in Hz:\t'))
45
+ print('\n')
46
+ threshold_arrythmia = float(input('Threshold for Arrythmia:\t'))
47
+ print('\n')
48
+
49
+ show = False
50
+ sigma0 = .01
51
+ threshold_abs = .1
52
+ prominence = 0.05
53
+ varfreq_weight = 0.5
54
+ scale = 1.
55
+
56
+ params = {
57
+ 'frequency': frequency,
58
+ 'duration': duration,
59
+ 'threshold_freq': threshold_freq,
60
+ 'threshold_arrythmia': threshold_arrythmia,
61
+ 'show': show, # set to True if you want to check the plots and edit them.
62
+ 'sigma0': sigma0, # inital width of gaussian smoothing
63
+ 'threshold_abs': threshold_abs, # threshold for peak detection of wavelet transform
64
+ 'prominence': prominence, # omit any peaks in the correlation smaller than this value
65
+ 'varfreq_weight': varfreq_weight, # weight of VF in weight sum of IMC and VF
66
+ 'scale': scale # scales the VF distribution before cropping to e [0,1]
67
+ }
68
+ with open(os.path.join(path, 'config.yaml'), 'w') as yaml_file:
69
+ yaml.dump(params, yaml_file)
70
+
71
+ files = glob.glob(os.path.join(path, '*'))
72
+ run(files, frequency=frequency, threshold_freq=threshold_freq, threshold_arrythmia=threshold_arrythmia,
73
+ duration=duration, sigma0=sigma0, prominence=prominence, threshold_abs=threshold_abs,
74
+ varfreq_weight=varfreq_weight, scale=scale, show=show)
75
+
76
+
77
+ if __name__ == "__main__":
78
+ main()