py-neuromodulation 0.0.3__py3-none-any.whl → 0.0.4__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.
- py_neuromodulation/ConnectivityDecoding/Automated Anatomical Labeling 3 (Rolls 2020).nii +0 -0
- py_neuromodulation/ConnectivityDecoding/_get_grid_hull.m +34 -0
- py_neuromodulation/ConnectivityDecoding/_get_grid_whole_brain.py +106 -0
- py_neuromodulation/ConnectivityDecoding/_helper_write_connectome.py +119 -0
- py_neuromodulation/ConnectivityDecoding/mni_coords_cortical_surface.mat +0 -0
- py_neuromodulation/ConnectivityDecoding/mni_coords_whole_brain.mat +0 -0
- py_neuromodulation/ConnectivityDecoding/rmap_func_all.nii +0 -0
- py_neuromodulation/ConnectivityDecoding/rmap_struc.nii +0 -0
- py_neuromodulation/data/README +6 -0
- py_neuromodulation/data/dataset_description.json +8 -0
- py_neuromodulation/data/participants.json +32 -0
- py_neuromodulation/data/participants.tsv +2 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_space-mni_coordsystem.json +5 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_space-mni_electrodes.tsv +11 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_channels.tsv +11 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.eeg +0 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.json +18 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.vhdr +35 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.vmrk +13 -0
- py_neuromodulation/data/sub-testsub/ses-EphysMedOff/sub-testsub_ses-EphysMedOff_scans.tsv +2 -0
- py_neuromodulation/grid_cortex.tsv +40 -0
- py_neuromodulation/grid_subcortex.tsv +1429 -0
- py_neuromodulation/nm_settings.json +338 -0
- py_neuromodulation/nm_stream_offline.py +7 -6
- py_neuromodulation/plots/STN_surf.mat +0 -0
- py_neuromodulation/plots/Vertices.mat +0 -0
- py_neuromodulation/plots/faces.mat +0 -0
- py_neuromodulation/plots/grid.mat +0 -0
- {py_neuromodulation-0.0.3.dist-info → py_neuromodulation-0.0.4.dist-info}/METADATA +182 -182
- py_neuromodulation-0.0.4.dist-info/RECORD +72 -0
- {py_neuromodulation-0.0.3.dist-info → py_neuromodulation-0.0.4.dist-info}/WHEEL +1 -2
- docs/build/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +0 -68
- docs/build/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +0 -233
- docs/build/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +0 -219
- docs/build/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +0 -97
- docs/build/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +0 -64
- docs/build/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +0 -192
- docs/build/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +0 -210
- docs/build/html/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +0 -68
- docs/build/html/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +0 -239
- docs/build/html/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +0 -219
- docs/build/html/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +0 -97
- docs/build/html/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +0 -64
- docs/build/html/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +0 -192
- docs/build/html/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +0 -210
- docs/source/_build/html/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +0 -76
- docs/source/_build/html/_downloads/0d0d0a76e8f648d5d3cbc47da6351932/plot_real_time_demo.py +0 -97
- docs/source/_build/html/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +0 -240
- docs/source/_build/html/_downloads/5d73cadc59a8805c47e3b84063afc157/plot_example_BIDS.py +0 -233
- docs/source/_build/html/_downloads/7660317fa5a6bfbd12fcca9961457fc4/plot_example_rmap_computing.py +0 -63
- docs/source/_build/html/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +0 -219
- docs/source/_build/html/_downloads/839e5b319379f7fd9e867deb00fd797f/plot_example_gridPointProjection.py +0 -210
- docs/source/_build/html/_downloads/ae8be19afe5e559f011fc9b138968ba0/plot_first_demo.py +0 -192
- docs/source/_build/html/_downloads/b8b06cacc17969d3725a0b6f1d7741c5/plot_example_sharpwave_analysis.py +0 -219
- docs/source/_build/html/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +0 -121
- docs/source/_build/html/_downloads/c31a86c0b68cb4167d968091ace8080d/plot_example_add_feature.py +0 -68
- docs/source/_build/html/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +0 -64
- docs/source/_build/html/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +0 -189
- docs/source/_build/html/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +0 -210
- docs/source/auto_examples/plot_0_first_demo.py +0 -189
- docs/source/auto_examples/plot_1_example_BIDS.py +0 -240
- docs/source/auto_examples/plot_2_example_add_feature.py +0 -76
- docs/source/auto_examples/plot_3_example_sharpwave_analysis.py +0 -219
- docs/source/auto_examples/plot_4_example_gridPointProjection.py +0 -210
- docs/source/auto_examples/plot_5_example_rmap_computing.py +0 -64
- docs/source/auto_examples/plot_6_real_time_demo.py +0 -121
- docs/source/conf.py +0 -105
- examples/plot_0_first_demo.py +0 -189
- examples/plot_1_example_BIDS.py +0 -240
- examples/plot_2_example_add_feature.py +0 -76
- examples/plot_3_example_sharpwave_analysis.py +0 -219
- examples/plot_4_example_gridPointProjection.py +0 -210
- examples/plot_5_example_rmap_computing.py +0 -64
- examples/plot_6_real_time_demo.py +0 -121
- packages/realtime_decoding/build/lib/realtime_decoding/__init__.py +0 -4
- packages/realtime_decoding/build/lib/realtime_decoding/decoder.py +0 -104
- packages/realtime_decoding/build/lib/realtime_decoding/features.py +0 -163
- packages/realtime_decoding/build/lib/realtime_decoding/helpers.py +0 -15
- packages/realtime_decoding/build/lib/realtime_decoding/run_decoding.py +0 -345
- packages/realtime_decoding/build/lib/realtime_decoding/trainer.py +0 -54
- packages/tmsi/build/lib/TMSiFileFormats/__init__.py +0 -37
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/__init__.py +0 -36
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/lsl_stream_writer.py +0 -200
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/poly5_file_writer.py +0 -496
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/poly5_to_edf_converter.py +0 -236
- packages/tmsi/build/lib/TMSiFileFormats/file_formats/xdf_file_writer.py +0 -977
- packages/tmsi/build/lib/TMSiFileFormats/file_readers/__init__.py +0 -35
- packages/tmsi/build/lib/TMSiFileFormats/file_readers/edf_reader.py +0 -116
- packages/tmsi/build/lib/TMSiFileFormats/file_readers/poly5reader.py +0 -294
- packages/tmsi/build/lib/TMSiFileFormats/file_readers/xdf_reader.py +0 -229
- packages/tmsi/build/lib/TMSiFileFormats/file_writer.py +0 -102
- packages/tmsi/build/lib/TMSiPlotters/__init__.py +0 -2
- packages/tmsi/build/lib/TMSiPlotters/gui/__init__.py +0 -39
- packages/tmsi/build/lib/TMSiPlotters/gui/_plotter_gui.py +0 -234
- packages/tmsi/build/lib/TMSiPlotters/gui/plotting_gui.py +0 -440
- packages/tmsi/build/lib/TMSiPlotters/plotters/__init__.py +0 -44
- packages/tmsi/build/lib/TMSiPlotters/plotters/hd_emg_plotter.py +0 -446
- packages/tmsi/build/lib/TMSiPlotters/plotters/impedance_plotter.py +0 -589
- packages/tmsi/build/lib/TMSiPlotters/plotters/signal_plotter.py +0 -1326
- packages/tmsi/build/lib/TMSiSDK/__init__.py +0 -54
- packages/tmsi/build/lib/TMSiSDK/device.py +0 -588
- packages/tmsi/build/lib/TMSiSDK/devices/__init__.py +0 -34
- packages/tmsi/build/lib/TMSiSDK/devices/saga/TMSi_Device_API.py +0 -1764
- packages/tmsi/build/lib/TMSiSDK/devices/saga/__init__.py +0 -34
- packages/tmsi/build/lib/TMSiSDK/devices/saga/saga_device.py +0 -1366
- packages/tmsi/build/lib/TMSiSDK/devices/saga/saga_types.py +0 -520
- packages/tmsi/build/lib/TMSiSDK/devices/saga/xml_saga_config.py +0 -165
- packages/tmsi/build/lib/TMSiSDK/error.py +0 -95
- packages/tmsi/build/lib/TMSiSDK/sample_data.py +0 -63
- packages/tmsi/build/lib/TMSiSDK/sample_data_server.py +0 -99
- packages/tmsi/build/lib/TMSiSDK/settings.py +0 -45
- packages/tmsi/build/lib/TMSiSDK/tmsi_device.py +0 -111
- packages/tmsi/build/lib/__init__.py +0 -4
- packages/tmsi/build/lib/apex_sdk/__init__.py +0 -34
- packages/tmsi/build/lib/apex_sdk/device/__init__.py +0 -41
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API.py +0 -1009
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API_enums.py +0 -239
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API_structures.py +0 -668
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_device.py +0 -1611
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_dongle.py +0 -38
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_event_reader.py +0 -57
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_channel.py +0 -44
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_config.py +0 -150
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_const.py +0 -36
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_impedance_channel.py +0 -48
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_info.py +0 -108
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/dongle_info.py +0 -39
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/download_measurement.py +0 -77
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/eeg_measurement.py +0 -150
- packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/impedance_measurement.py +0 -129
- packages/tmsi/build/lib/apex_sdk/device/threads/conversion_thread.py +0 -59
- packages/tmsi/build/lib/apex_sdk/device/threads/sampling_thread.py +0 -57
- packages/tmsi/build/lib/apex_sdk/device/tmsi_channel.py +0 -83
- packages/tmsi/build/lib/apex_sdk/device/tmsi_device.py +0 -201
- packages/tmsi/build/lib/apex_sdk/device/tmsi_device_enums.py +0 -103
- packages/tmsi/build/lib/apex_sdk/device/tmsi_dongle.py +0 -43
- packages/tmsi/build/lib/apex_sdk/device/tmsi_event_reader.py +0 -50
- packages/tmsi/build/lib/apex_sdk/device/tmsi_measurement.py +0 -118
- packages/tmsi/build/lib/apex_sdk/sample_data_server/__init__.py +0 -33
- packages/tmsi/build/lib/apex_sdk/sample_data_server/event_data.py +0 -44
- packages/tmsi/build/lib/apex_sdk/sample_data_server/sample_data.py +0 -50
- packages/tmsi/build/lib/apex_sdk/sample_data_server/sample_data_server.py +0 -136
- packages/tmsi/build/lib/apex_sdk/tmsi_errors/error.py +0 -126
- packages/tmsi/build/lib/apex_sdk/tmsi_sdk.py +0 -113
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/apex/apex_structure_generator.py +0 -134
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/decorators.py +0 -60
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/logger_filter.py +0 -42
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/singleton.py +0 -42
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/support_functions.py +0 -72
- packages/tmsi/build/lib/apex_sdk/tmsi_utilities/tmsi_logger.py +0 -98
- py_neuromodulation-0.0.3.dist-info/RECORD +0 -188
- py_neuromodulation-0.0.3.dist-info/top_level.txt +0 -5
- tests/__init__.py +0 -0
- tests/conftest.py +0 -117
- tests/test_all_examples.py +0 -10
- tests/test_all_features.py +0 -63
- tests/test_bispectra.py +0 -70
- tests/test_bursts.py +0 -105
- tests/test_feature_sampling_rates.py +0 -143
- tests/test_fooof.py +0 -16
- tests/test_initalization_offline_stream.py +0 -41
- tests/test_multiprocessing.py +0 -58
- tests/test_nan_values.py +0 -29
- tests/test_nm_filter.py +0 -95
- tests/test_nm_resample.py +0 -63
- tests/test_normalization_settings.py +0 -146
- tests/test_notch_filter.py +0 -31
- tests/test_osc_features.py +0 -424
- tests/test_preprocessing_filter.py +0 -151
- tests/test_rereference.py +0 -171
- tests/test_sampling.py +0 -57
- tests/test_settings_change_after_init.py +0 -76
- tests/test_sharpwave.py +0 -165
- tests/test_target_channel_add.py +0 -100
- tests/test_timing.py +0 -80
- {py_neuromodulation-0.0.3.dist-info → py_neuromodulation-0.0.4.dist-info/licenses}/LICENSE +0 -0
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
(c) 2022 Twente Medical Systems International B.V., Oldenzaal The Netherlands
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
|
|
16
|
-
####### # # ##### #
|
|
17
|
-
# ## ## #
|
|
18
|
-
# # # # # # #
|
|
19
|
-
# # # # ##### #
|
|
20
|
-
# # # # #
|
|
21
|
-
# # # # #
|
|
22
|
-
# # # ##### #
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @file ${error.py}
|
|
26
|
-
* @brief General SDK errors
|
|
27
|
-
*
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
from enum import Enum, unique
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
@unique
|
|
36
|
-
class TMSiErrorCode(Enum):
|
|
37
|
-
general_error = 0
|
|
38
|
-
missing_dll = 1
|
|
39
|
-
already_in_use_dll = 2
|
|
40
|
-
device_error = 100
|
|
41
|
-
device_not_connected = 101
|
|
42
|
-
no_devices_found = 102
|
|
43
|
-
api_no_driver = 200
|
|
44
|
-
api_incorrect_argument = 201
|
|
45
|
-
api_invalid_command = 202
|
|
46
|
-
file_writer_error = 300
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
class TMSiError(Exception):
|
|
50
|
-
def __init__(self, code):
|
|
51
|
-
self.code = code
|
|
52
|
-
|
|
53
|
-
def __str__(self):
|
|
54
|
-
return repr(self.code)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
def DeviceErrorLookupTable(code):
|
|
58
|
-
_lookup_table = {
|
|
59
|
-
"0x1010001": "DR reported 'Checksum error in received block'",
|
|
60
|
-
"0x2010001": "DS reported 'Checksum error in received block'",
|
|
61
|
-
"0x1010002": "DR reported 'Unknown command'",
|
|
62
|
-
"0x2010002": "DS reported 'Unknown command'",
|
|
63
|
-
"0x1010003": "DR reported 'Response timeout'",
|
|
64
|
-
"0x2010003": "DS reported 'Response timeout'",
|
|
65
|
-
"0x1010004": "DR reported 'Device busy try again in x msec'",
|
|
66
|
-
"0x2010004": "DS reported 'Device busy try again in x msec'",
|
|
67
|
-
"0x1010005": "DR reported 'Command not supported over current interface'",
|
|
68
|
-
"0x2010005": "DS reported 'Command not supported over current interface'",
|
|
69
|
-
"0x1010006": "DR reported 'Command not possible, device is recording'",
|
|
70
|
-
"0x1010007": "DR reported 'Device not available'",
|
|
71
|
-
"0x2010007": "DS reported 'Device not available'",
|
|
72
|
-
"0x2010008": "DS reported 'Interface not available'",
|
|
73
|
-
"0x2010009": "DS reported 'Command not allowed in current mode'",
|
|
74
|
-
"0x201000A": "DS reported 'Processing error'",
|
|
75
|
-
"0x201000B": "DS reported 'Unknown internal error'",
|
|
76
|
-
"0x1030001": "DR reported 'Command not supported by Channel'",
|
|
77
|
-
"0x1030002": "DR reported 'Illegal start control for ambulant recording",
|
|
78
|
-
"0x201000C": "DS reports that data request does not fit with one Device Api Packet",
|
|
79
|
-
"0x201000D": "DS reports that DR is already opened",
|
|
80
|
-
"0x3001000": "DLL Function is declared, but not yet implemented",
|
|
81
|
-
"0x3001001": "DLL Function called with invalid parameters",
|
|
82
|
-
"0x3001002": "Incorrect checksum of response message",
|
|
83
|
-
"0x3001003": "DLL Function failed because of header failure",
|
|
84
|
-
"0x3001004": "DLL Function failed because an underlying process failed",
|
|
85
|
-
"0x3001005": "DLL Function called with a too small buffer",
|
|
86
|
-
"0x3001006": "DLL Function called with a Handle that's not assigned to a device",
|
|
87
|
-
"0x3002000": "DLL Function failed becasue could not open selected interface",
|
|
88
|
-
"0x3002001": "DLL Function failed because could not close selected interface",
|
|
89
|
-
"0x3002002": "DLL Function failed because could not send command-data",
|
|
90
|
-
"0x3002003": "DLL Function failed because could not receive data",
|
|
91
|
-
"0x3002004": "DLL Function failed because commination timed out",
|
|
92
|
-
"0x3002005": "Lost connection to DS, USB / Ethernet disconnect",
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
print("\n " + _lookup_table[code] + "\n")
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
(c) 2022 Twente Medical Systems International B.V., Oldenzaal The Netherlands
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
|
|
16
|
-
####### # # ##### #
|
|
17
|
-
# ## ## #
|
|
18
|
-
# # # # # # #
|
|
19
|
-
# # # # ##### #
|
|
20
|
-
# # # # #
|
|
21
|
-
# # # # #
|
|
22
|
-
# # # ##### #
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @file ${sample_data.py}
|
|
26
|
-
* @brief Sample data class definitions.
|
|
27
|
-
*
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
class SampleSet:
|
|
35
|
-
"""<SampleSet> represents a set of samples taken by the device from all
|
|
36
|
-
active channels at the same event. It has the next properties:
|
|
37
|
-
|
|
38
|
-
num_samples: <int> The number of samples within the sample-set.
|
|
39
|
-
|
|
40
|
-
samples: <float[]> Array of samples, in order of the active channels in
|
|
41
|
-
the active channel list <Device.channels[]>
|
|
42
|
-
"""
|
|
43
|
-
|
|
44
|
-
def __init__(self, num_samples, samples):
|
|
45
|
-
self.num_samples = num_samples
|
|
46
|
-
self.samples = samples
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
class SampleData:
|
|
50
|
-
"""<SampleData> represents an array of received samples. It has the next properties:
|
|
51
|
-
|
|
52
|
-
num_sample_sets: <int> The number of sample-sets within the
|
|
53
|
-
samples-array
|
|
54
|
-
|
|
55
|
-
num_samples_per_sample_set: <int> The number of samples within one sample-set.
|
|
56
|
-
|
|
57
|
-
samples: <float[]> Array of samples, sequentially in sample-sets and sampling-event.
|
|
58
|
-
"""
|
|
59
|
-
|
|
60
|
-
def __init__(self, num_sample_sets, num_samples_per_sample_set, samples):
|
|
61
|
-
self.num_sample_sets = num_sample_sets
|
|
62
|
-
self.num_samples_per_sample_set = num_samples_per_sample_set
|
|
63
|
-
self.samples = samples
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
(c) 2022 Twente Medical Systems International B.V., Oldenzaal The Netherlands
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
|
|
16
|
-
####### # # ##### #
|
|
17
|
-
# ## ## #
|
|
18
|
-
# # # # # # #
|
|
19
|
-
# # # # ##### #
|
|
20
|
-
# # # # #
|
|
21
|
-
# # # # #
|
|
22
|
-
# # # ##### #
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @file ${sample_data_server.py}
|
|
26
|
-
* @brief Sample Data Server module
|
|
27
|
-
*
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
from TMSiSDK import settings
|
|
34
|
-
from copy import copy
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
class SampleDataConsumer:
|
|
38
|
-
"""Local class which identifies which consumer registered for what device"""
|
|
39
|
-
|
|
40
|
-
def __init__(self, id, q):
|
|
41
|
-
self.id = id
|
|
42
|
-
self.q = q
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def registerConsumer(id, q):
|
|
46
|
-
"""Registers a consumer-queue to receive the sample-data of a specific
|
|
47
|
-
device.
|
|
48
|
-
This method is called by sample-data-consumers.
|
|
49
|
-
|
|
50
|
-
Args:
|
|
51
|
-
id: <int> : Unique id of a device <Device.id>.
|
|
52
|
-
Indicates from which specific device, received sample-data
|
|
53
|
-
must be put into the registered <queue>
|
|
54
|
-
|
|
55
|
-
q: <queue> The queue into which received sample-data will be put.
|
|
56
|
-
"""
|
|
57
|
-
settings._consumer_list.append(SampleDataConsumer(id, q))
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
def unregisterConsumer(id, q):
|
|
61
|
-
"""Unregisters a consumer-queue associated with a file-writer or plotter
|
|
62
|
-
object.
|
|
63
|
-
This method is called by close-methods of the sample-data-consumers.
|
|
64
|
-
|
|
65
|
-
Args:
|
|
66
|
-
id: <int> : Unique id of a device <Device.id>.
|
|
67
|
-
Indicates from which specific device, received sample-data
|
|
68
|
-
must be put into the registered <queue>
|
|
69
|
-
|
|
70
|
-
q: <queue> The queue object which has to be removed from the global
|
|
71
|
-
consumer list.
|
|
72
|
-
"""
|
|
73
|
-
num_consumers = len(settings._consumer_list)
|
|
74
|
-
for i in range(num_consumers):
|
|
75
|
-
if settings._consumer_list[i].id == id:
|
|
76
|
-
if settings._consumer_list[i].q == q:
|
|
77
|
-
idx_remove = copy(i)
|
|
78
|
-
# try:
|
|
79
|
-
# settings._consumer_list[idx_remove].q.close()
|
|
80
|
-
# except AttributeError:
|
|
81
|
-
# pass
|
|
82
|
-
settings._consumer_list.pop(idx_remove)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
def putSampleData(id, data):
|
|
86
|
-
"""Puts a <SampleData>-object, coming from device <Device.id> into the queues
|
|
87
|
-
of registered consumers.
|
|
88
|
-
This method is called by sample-data-producers.
|
|
89
|
-
|
|
90
|
-
Args:
|
|
91
|
-
id: <int> : Unique id of the device (<Device>.id), which forwards
|
|
92
|
-
received sample-data to the sample-data-server.
|
|
93
|
-
|
|
94
|
-
data <SampleData> The sample-data.
|
|
95
|
-
"""
|
|
96
|
-
num_consumers = len(settings._consumer_list)
|
|
97
|
-
for i in range(num_consumers):
|
|
98
|
-
if settings._consumer_list[i].id == id:
|
|
99
|
-
settings._consumer_list[i].q.put(data)
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
(c) 2022 Twente Medical Systems International B.V., Oldenzaal The Netherlands
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
|
|
16
|
-
####### # # ##### #
|
|
17
|
-
# ## ## #
|
|
18
|
-
# # # # # # #
|
|
19
|
-
# # # # ##### #
|
|
20
|
-
# # # # #
|
|
21
|
-
# # # # #
|
|
22
|
-
# # # ##### #
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @file ${settings.py}
|
|
26
|
-
* @brief Module for SDK 'locally' used settings
|
|
27
|
-
*
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def _initialize():
|
|
35
|
-
"""
|
|
36
|
-
Instantiates and initializes 'local' static variables fro SDK-modules.
|
|
37
|
-
This method must be called once befor start using the SDK.
|
|
38
|
-
|
|
39
|
-
Returns
|
|
40
|
-
-------
|
|
41
|
-
None.
|
|
42
|
-
|
|
43
|
-
"""
|
|
44
|
-
global _consumer_list # used in <sample_data_server.py> : list of registered
|
|
45
|
-
_consumer_list = [] # consumer for receipt of sample-data
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
(c) 2022 Twente Medical Systems International B.V., Oldenzaal The Netherlands
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
|
|
16
|
-
####### # # ##### #
|
|
17
|
-
# ## ## #
|
|
18
|
-
# # # # # # #
|
|
19
|
-
# # # # ##### #
|
|
20
|
-
# # # # #
|
|
21
|
-
# # # # #
|
|
22
|
-
# # # ##### #
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @file ${tmsi_device.py}
|
|
26
|
-
* @brief Starting module to instantiate <Device>-objects of TMSi measurement
|
|
27
|
-
* systems.
|
|
28
|
-
*
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"""
|
|
33
|
-
|
|
34
|
-
from enum import Enum
|
|
35
|
-
|
|
36
|
-
from TMSiSDK.error import TMSiError, TMSiErrorCode
|
|
37
|
-
from TMSiSDK.device import DeviceInterfaceType
|
|
38
|
-
from TMSiSDK.devices.saga import saga_device
|
|
39
|
-
from TMSiSDK.devices.saga.saga_device import SagaDevice
|
|
40
|
-
|
|
41
|
-
from TMSiSDK import settings
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
class DeviceType(Enum):
|
|
45
|
-
none = 0
|
|
46
|
-
saga = 1
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
def initialize():
|
|
50
|
-
"""Initializes the TMSi-SDK environment.
|
|
51
|
-
This must be done once before starting using the SDK.
|
|
52
|
-
"""
|
|
53
|
-
settings._initialize()
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def create(dev_type, dr_interface, ds_interface=DeviceInterfaceType.none):
|
|
57
|
-
"""Creates a Device-object to interface with a TMSI measurement system.
|
|
58
|
-
|
|
59
|
-
Args:
|
|
60
|
-
dev_type : <DeviceType> The measurement-system type.
|
|
61
|
-
Momentarily only the SAGA system is supported.
|
|
62
|
-
|
|
63
|
-
dr_interface : <DeviceInterfaceType> The interface-type between the
|
|
64
|
-
data-recorder and docking-station (if the system exists
|
|
65
|
-
out of a DS and DR like the SAGA-system) or a PC.
|
|
66
|
-
The default interface-type = DeviceInterfaceType.docked
|
|
67
|
-
|
|
68
|
-
ds_interface : <DeviceInterfaceType> The interface-type between the
|
|
69
|
-
docking station and PC.
|
|
70
|
-
The default interface-type = DeviceInterfaceType.usb
|
|
71
|
-
|
|
72
|
-
Returns:
|
|
73
|
-
<Device> An object of the system-implementation of the <Device-class>-interface.
|
|
74
|
-
With this object one can interface with the attached system.
|
|
75
|
-
"""
|
|
76
|
-
dev = None
|
|
77
|
-
if dev_type == DeviceType.saga:
|
|
78
|
-
dev = SagaDevice(ds_interface, dr_interface)
|
|
79
|
-
else:
|
|
80
|
-
raise TMSiError(TMSiErrorCode.api_incorrect_argument)
|
|
81
|
-
|
|
82
|
-
return dev
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
def discover(dev_type, dr_interface, ds_interface=DeviceInterfaceType.none):
|
|
86
|
-
"""Creates a list with Device-objects to interface with found TMSI measurement systems.
|
|
87
|
-
|
|
88
|
-
Args:
|
|
89
|
-
dev_type : <DeviceType> The measurement-system type.
|
|
90
|
-
Momentarily only the SAGA system is supported.
|
|
91
|
-
|
|
92
|
-
dr_interface : <DeviceInterfaceType> The interface-type between the
|
|
93
|
-
data-recorder and docking-station (if the system exists
|
|
94
|
-
out of a DS and DR like the SAGA-system) or a PC.
|
|
95
|
-
The default interface-type = DeviceInterfaceType.docked
|
|
96
|
-
|
|
97
|
-
ds_interface : <DeviceInterfaceType> The interface-type between the
|
|
98
|
-
docking station and PC.
|
|
99
|
-
The default interface-type = DeviceInterfaceType.usb
|
|
100
|
-
|
|
101
|
-
Returns:
|
|
102
|
-
<Device[]> An array with objects of the system-implementation of the
|
|
103
|
-
<Device-class>-interface. With these object one can interface with the
|
|
104
|
-
attached systems.
|
|
105
|
-
"""
|
|
106
|
-
discoveryList = []
|
|
107
|
-
|
|
108
|
-
if dev_type == DeviceType.saga:
|
|
109
|
-
discoveryList = saga_device.discover(ds_interface, dr_interface)
|
|
110
|
-
|
|
111
|
-
return discoveryList
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
(c) 2022 Twente Medical Systems International B.V., Oldenzaal The Netherlands
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
|
|
16
|
-
####### # # ##### #
|
|
17
|
-
# ## ## #
|
|
18
|
-
# # # # # # #
|
|
19
|
-
# # # # ##### #
|
|
20
|
-
# # # # #
|
|
21
|
-
# # # # #
|
|
22
|
-
# # # ##### #
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @file __init__.py
|
|
26
|
-
* @brief
|
|
27
|
-
* Initialization of the SDK.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
from .tmsi_utilities.tmsi_logger import TMSiLogger
|
|
34
|
-
from .tmsi_utilities.decorators import LogPerformances
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
(c) 2022 Twente Medical Systems International B.V., Oldenzaal The Netherlands
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
|
|
16
|
-
####### # # ##### #
|
|
17
|
-
# ## ## #
|
|
18
|
-
# # # # # # #
|
|
19
|
-
# # # # ##### #
|
|
20
|
-
# # # # #
|
|
21
|
-
# # # # #
|
|
22
|
-
# # # ##### #
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @file __init__.py
|
|
26
|
-
* @brief
|
|
27
|
-
* Initialization of the device.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
from .devices.apex import apex_API_enums as ApexEnums
|
|
34
|
-
from .devices.apex import apex_API_structures as ApexStructures
|
|
35
|
-
from .devices.apex.apex_structures.apex_channel import ApexChannel, ChannelType
|
|
36
|
-
from .devices.apex.apex_structures.apex_impedance_channel import (
|
|
37
|
-
ApexImpedanceChannel,
|
|
38
|
-
)
|
|
39
|
-
from ..tmsi_utilities.apex.apex_structure_generator import (
|
|
40
|
-
ApexStructureGenerator,
|
|
41
|
-
)
|