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,38 +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 apex_dongle.py
|
|
26
|
-
* @brief
|
|
27
|
-
* APEX Dongle object.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
from ...tmsi_dongle import TMSiDongle
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class ApexDongle(TMSiDongle):
|
|
37
|
-
def __init__(self, dongle_id, serial_number):
|
|
38
|
-
super().__init__(dongle_id, serial_number)
|
|
@@ -1,57 +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 apex_event_reader.py
|
|
26
|
-
* @brief
|
|
27
|
-
* APEX Event reader.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
from ctypes import c_ushort, pointer
|
|
34
|
-
|
|
35
|
-
from ....sample_data_server.sample_data_server import SampleDataServer
|
|
36
|
-
from ...tmsi_event_reader import TMSiEventReader
|
|
37
|
-
from .apex_device import ApexDevice, TMSiEvent
|
|
38
|
-
from ....tmsi_utilities.tmsi_logger import TMSiLogger
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
class ApexEventReader(TMSiEventReader):
|
|
42
|
-
def __init__(self, name="Apex Event Reader"):
|
|
43
|
-
super().__init__(name)
|
|
44
|
-
|
|
45
|
-
def start(self):
|
|
46
|
-
ApexDevice.reset_device_event_buffer()
|
|
47
|
-
self._reading_thread.start()
|
|
48
|
-
|
|
49
|
-
def _reading_function(self):
|
|
50
|
-
num_events = (c_ushort)(0)
|
|
51
|
-
ApexDevice.get_event_buffer(pointer(num_events))
|
|
52
|
-
while num_events.value > 0:
|
|
53
|
-
TMSiLogger().warning("An event occurred")
|
|
54
|
-
event = TMSiEvent()
|
|
55
|
-
ApexDevice.get_event(pointer(event))
|
|
56
|
-
SampleDataServer().put_event_data(id=event.TMSiDeviceID, data=event)
|
|
57
|
-
num_events.value -= 1
|
|
@@ -1,44 +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 apex_channel.py
|
|
26
|
-
* @brief
|
|
27
|
-
* APEX Channel object.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
from ....tmsi_channel import TMSiChannel, ChannelType
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class ApexChannel(TMSiChannel):
|
|
37
|
-
def set_device_channel_information(self, channel_metadata):
|
|
38
|
-
self._type = ChannelType(channel_metadata.ChannelType)
|
|
39
|
-
self._format = channel_metadata.ChannelFormat
|
|
40
|
-
self._chan_divider = channel_metadata.ChanDivider
|
|
41
|
-
self._enabled = self._chan_divider != -1
|
|
42
|
-
self._imp_divider = channel_metadata.ImpDivider
|
|
43
|
-
self._exp = channel_metadata.Exp
|
|
44
|
-
self._unit_name = channel_metadata.UnitName.decode("windows-1252")
|
|
@@ -1,150 +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 apex_config.py
|
|
26
|
-
* @brief
|
|
27
|
-
* APEX Configuration object.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
import xml.etree.ElementTree as ET
|
|
34
|
-
from xml.dom import minidom
|
|
35
|
-
|
|
36
|
-
from ..apex_API_enums import *
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
class ApexConfig:
|
|
40
|
-
def __init__(self):
|
|
41
|
-
self.__base_sample_rate = TMSiBaseSampleRate.Decimal
|
|
42
|
-
self.__channels = []
|
|
43
|
-
self.__impedance_channels = []
|
|
44
|
-
self.__impedance_limit = 0
|
|
45
|
-
self.__live_impedance = TMSiLiveImpedance.Off
|
|
46
|
-
self.__sampling_frequency = 0
|
|
47
|
-
|
|
48
|
-
def export_to_xml(self, filename):
|
|
49
|
-
try:
|
|
50
|
-
root = ET.Element("ApexConfig")
|
|
51
|
-
xml_device = ET.SubElement(root, "Device")
|
|
52
|
-
ET.SubElement(xml_device, "BaseSampleRate").text = str(
|
|
53
|
-
self.__base_sample_rate
|
|
54
|
-
)
|
|
55
|
-
ET.SubElement(xml_device, "ImpedanceLimit").text = str(
|
|
56
|
-
self.__impedance_limit
|
|
57
|
-
)
|
|
58
|
-
ET.SubElement(xml_device, "LiveImpedance").text = str(
|
|
59
|
-
self.__live_impedance
|
|
60
|
-
)
|
|
61
|
-
xml_channels = ET.SubElement(root, "Channels")
|
|
62
|
-
for idx, channel in enumerate(self.__channels):
|
|
63
|
-
xml_channel = ET.SubElement(xml_channels, "Channel")
|
|
64
|
-
ET.SubElement(xml_channel, "ChanIdx").text = str(idx)
|
|
65
|
-
ET.SubElement(
|
|
66
|
-
xml_channel, "AltChanName"
|
|
67
|
-
).text = channel.get_channel_name()
|
|
68
|
-
ET.SubElement(xml_channel, "ReferenceStatus").text = str(
|
|
69
|
-
channel.is_reference()
|
|
70
|
-
)
|
|
71
|
-
xml_data = ApexConfig.__prettify(root)
|
|
72
|
-
xml_file = open(filename, "w")
|
|
73
|
-
xml_file.write(xml_data)
|
|
74
|
-
return True
|
|
75
|
-
except:
|
|
76
|
-
return False
|
|
77
|
-
|
|
78
|
-
def import_from_xml(self, filename):
|
|
79
|
-
try:
|
|
80
|
-
tree = ET.parse(filename)
|
|
81
|
-
root = tree.getroot()
|
|
82
|
-
for elem in root:
|
|
83
|
-
for subelem in elem:
|
|
84
|
-
if elem.tag == "Device":
|
|
85
|
-
if subelem.tag == "BaseSampleRate":
|
|
86
|
-
self.__base_sample_rate = int(subelem.text)
|
|
87
|
-
if subelem.tag == "ImpedanceLimit":
|
|
88
|
-
self.__impedance_limit = int(subelem.text)
|
|
89
|
-
if subelem.tag == "LiveImpedance":
|
|
90
|
-
self.__live_impedance = int(subelem.text)
|
|
91
|
-
if elem.tag == "Channels":
|
|
92
|
-
if subelem.tag == "Channel":
|
|
93
|
-
found = False
|
|
94
|
-
idx = subelem.find("ChanIdx")
|
|
95
|
-
if idx is None:
|
|
96
|
-
continue
|
|
97
|
-
idx = int(idx.text)
|
|
98
|
-
self.__channels[idx].set_device_channel_names(
|
|
99
|
-
alternative_channel_name=subelem.find(
|
|
100
|
-
"AltChanName"
|
|
101
|
-
).text
|
|
102
|
-
)
|
|
103
|
-
reference = subelem.find("ReferenceStatus").text
|
|
104
|
-
if reference != "None":
|
|
105
|
-
self.__channels[idx].set_device_reference(
|
|
106
|
-
int(reference)
|
|
107
|
-
)
|
|
108
|
-
else:
|
|
109
|
-
self.__channels[idx].set_device_reference(0)
|
|
110
|
-
return True
|
|
111
|
-
except:
|
|
112
|
-
return False
|
|
113
|
-
|
|
114
|
-
def get_channels(self):
|
|
115
|
-
return self.__channels
|
|
116
|
-
|
|
117
|
-
def get_impedance_channels(self):
|
|
118
|
-
return self.__impedance_channels
|
|
119
|
-
|
|
120
|
-
def get_impedance_limit(self):
|
|
121
|
-
return self.__impedance_limit
|
|
122
|
-
|
|
123
|
-
def get_live_impedance(self):
|
|
124
|
-
return self.__live_impedance
|
|
125
|
-
|
|
126
|
-
def get_sample_rate(self):
|
|
127
|
-
return self.__base_sample_rate
|
|
128
|
-
|
|
129
|
-
def get_sampling_frequency(self):
|
|
130
|
-
return self.__sampling_frequency
|
|
131
|
-
|
|
132
|
-
def set_channels(self, channels):
|
|
133
|
-
self.__channels = channels
|
|
134
|
-
|
|
135
|
-
def set_impedance_channels(self, channels):
|
|
136
|
-
self.__impedance_channels = channels
|
|
137
|
-
|
|
138
|
-
def set_device_sampling_config(self, device_sampling_config):
|
|
139
|
-
self.__base_sample_rate = device_sampling_config.BaseSampleRate
|
|
140
|
-
self.__impedance_limit = device_sampling_config.ImpedanceLimit
|
|
141
|
-
self.__live_impedance = device_sampling_config.LiveImpedance
|
|
142
|
-
|
|
143
|
-
def set_sampling_frequency(self, sampling_frequency):
|
|
144
|
-
self.__sampling_frequency = sampling_frequency
|
|
145
|
-
|
|
146
|
-
def __prettify(elem):
|
|
147
|
-
"""Return a pretty-printed XML string for the Element."""
|
|
148
|
-
rough_string = ET.tostring(elem, "utf-8")
|
|
149
|
-
reparsed = minidom.parseString(rough_string)
|
|
150
|
-
return reparsed.toprettyxml(indent=" ")
|
|
@@ -1,36 +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 apex_const.py
|
|
26
|
-
* @brief
|
|
27
|
-
* APEX Constants.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
class ApexConst:
|
|
35
|
-
TMSI_DEVICE_ID_NONE = 0xFFFF
|
|
36
|
-
TMSI_DONGLE_ID_NONE = 0xFFFF
|
packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_impedance_channel.py
DELETED
|
@@ -1,48 +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 apex_impedance_channel.py
|
|
26
|
-
* @brief
|
|
27
|
-
* APEX Impedance Channel object.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
class ApexImpedanceChannel:
|
|
35
|
-
def __init__(self, channel_metadata):
|
|
36
|
-
self.set_device_impedance_channel_metadata(channel_metadata)
|
|
37
|
-
|
|
38
|
-
def get_channel_name(self):
|
|
39
|
-
return self.__channel_name
|
|
40
|
-
|
|
41
|
-
def get_channel_unit_name(self):
|
|
42
|
-
return (self.__impedance_re_unit, self.__impedance_im_unit)
|
|
43
|
-
|
|
44
|
-
def set_device_impedance_channel_metadata(self, channel_metadata):
|
|
45
|
-
self.__channel_index = channel_metadata.ChanIdx
|
|
46
|
-
self.__channel_name = channel_metadata.ChanName.decode()
|
|
47
|
-
self.__impedance_im_unit = channel_metadata.ImpedanceImUnit.decode()
|
|
48
|
-
self.__impedance_re_unit = channel_metadata.ImpedanceReUnit.decode()
|
|
@@ -1,108 +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 apex_info.py
|
|
26
|
-
* @brief
|
|
27
|
-
* APEX Information object.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
from ....tmsi_device_enums import *
|
|
34
|
-
|
|
35
|
-
from .apex_const import ApexConst
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
class ApexInfo:
|
|
39
|
-
def __init__(
|
|
40
|
-
self,
|
|
41
|
-
dongle_serial_number=0,
|
|
42
|
-
serial_number=0,
|
|
43
|
-
id=ApexConst.TMSI_DEVICE_ID_NONE,
|
|
44
|
-
dr_interface=DeviceInterfaceType.none,
|
|
45
|
-
pairing_status=PairingStatus.no_pairing_needed,
|
|
46
|
-
):
|
|
47
|
-
self.__dr_interface = dr_interface
|
|
48
|
-
self.__dr_serial_number = serial_number
|
|
49
|
-
self.__id = id
|
|
50
|
-
self.__dongle_id = ApexConst.TMSI_DONGLE_ID_NONE
|
|
51
|
-
self.__state = DeviceState.disconnected
|
|
52
|
-
self.__pairing_status = pairing_status
|
|
53
|
-
self.__dongle_serial_number = dongle_serial_number
|
|
54
|
-
self.__num_hw_channels = 0
|
|
55
|
-
self.__num_cycling_states = 0
|
|
56
|
-
self.__num_imp_channels = 0
|
|
57
|
-
self.__num_channels = 0
|
|
58
|
-
|
|
59
|
-
def get_dr_interface(self):
|
|
60
|
-
return self.__dr_interface
|
|
61
|
-
|
|
62
|
-
def get_id(self):
|
|
63
|
-
return self.__id
|
|
64
|
-
|
|
65
|
-
def get_num_channels(self):
|
|
66
|
-
return self.__num_channels
|
|
67
|
-
|
|
68
|
-
def get_num_impedance_channels(self):
|
|
69
|
-
return self.__num_imp_channels
|
|
70
|
-
|
|
71
|
-
def get_dongle_serial_number(self):
|
|
72
|
-
return self.__dongle_serial_number
|
|
73
|
-
|
|
74
|
-
def get_dr_serial_number(self):
|
|
75
|
-
return self.__dr_serial_number
|
|
76
|
-
|
|
77
|
-
def get_pairing_status(self):
|
|
78
|
-
return self.__pairing_status
|
|
79
|
-
|
|
80
|
-
def get_state(self):
|
|
81
|
-
return self.__state
|
|
82
|
-
|
|
83
|
-
def set_device_info_report(self, device_info_report):
|
|
84
|
-
self.__num_channels = device_info_report.NrOfChannels
|
|
85
|
-
self.__num_hw_channels = device_info_report.NrOfHWChannels
|
|
86
|
-
self.__num_imp_channels = device_info_report.NrOfImpChannels
|
|
87
|
-
self.__num_cycling_states = device_info_report.NrOfCyclingStates
|
|
88
|
-
|
|
89
|
-
def set_dongle_id(self, dongle_id):
|
|
90
|
-
self.__dongle_id = dongle_id
|
|
91
|
-
|
|
92
|
-
def set_dongle_serial_number(self, dongle_serial_number):
|
|
93
|
-
self.__dongle_serial_number = dongle_serial_number
|
|
94
|
-
|
|
95
|
-
def set_dr_interface(self, dr_interface):
|
|
96
|
-
self.__dr_interface = dr_interface
|
|
97
|
-
|
|
98
|
-
def set_dr_serial_number(self, dr_serial_number):
|
|
99
|
-
self.__dr_serial_number = dr_serial_number
|
|
100
|
-
|
|
101
|
-
def set_id(self, id):
|
|
102
|
-
self.__id = id
|
|
103
|
-
|
|
104
|
-
def set_pairing_status(self, pairing_status):
|
|
105
|
-
self.__pairing_status = pairing_status
|
|
106
|
-
|
|
107
|
-
def set_state(self, state):
|
|
108
|
-
self.__state = state
|
|
@@ -1,39 +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 dongle_info.py
|
|
26
|
-
* @brief
|
|
27
|
-
* APEX Dongle information.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
from .apex_const import ApexConst
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class DongleInfo:
|
|
37
|
-
def __init__(self):
|
|
38
|
-
self.TMSiDongleID = ApexConst.TMSI_DONGLE_ID_NONE
|
|
39
|
-
self.SerialNumber = ApexConst.TMSI_DONGLE_ID_NONE
|
|
@@ -1,77 +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 download_measurement.py
|
|
26
|
-
* @brief
|
|
27
|
-
* Class to handle the download of a file from the device.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
from .....tmsi_utilities.decorators import LogPerformances
|
|
34
|
-
from ..apex_API_structures import TMSiDevSetCardFileReq
|
|
35
|
-
from ..apex_API_enums import SampleControl
|
|
36
|
-
from .eeg_measurement import EEGMeasurement
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
class DownloadMeasurement(EEGMeasurement):
|
|
40
|
-
def __init__(
|
|
41
|
-
self,
|
|
42
|
-
dev,
|
|
43
|
-
file_id: int,
|
|
44
|
-
n_of_samples: int = None,
|
|
45
|
-
name: str = "Download Measurement",
|
|
46
|
-
):
|
|
47
|
-
super().__init__(dev, name)
|
|
48
|
-
self._file_id = file_id
|
|
49
|
-
if n_of_samples is None:
|
|
50
|
-
header, metadata = self._dev.get_device_card_file_info(
|
|
51
|
-
self._file_id
|
|
52
|
-
)
|
|
53
|
-
self._n_of_samples = metadata.NumberOfSamples
|
|
54
|
-
else:
|
|
55
|
-
self._n_of_samples = n_of_samples
|
|
56
|
-
self.set_download_samples_limit(self._n_of_samples)
|
|
57
|
-
|
|
58
|
-
@LogPerformances
|
|
59
|
-
def start(self):
|
|
60
|
-
self._dev.reset_device_data_buffer()
|
|
61
|
-
file_request = TMSiDevSetCardFileReq()
|
|
62
|
-
file_request.RecFileID = self._file_id
|
|
63
|
-
file_request.StartCounter = 0
|
|
64
|
-
file_request.NumberOfSamples = self._n_of_samples
|
|
65
|
-
file_request.StartStop = SampleControl.StartSampling.value
|
|
66
|
-
self._dev.set_device_download_file_request(file_request)
|
|
67
|
-
self._sampling_thread.start()
|
|
68
|
-
self._conversion_thread.start()
|
|
69
|
-
|
|
70
|
-
@LogPerformances
|
|
71
|
-
def stop(self):
|
|
72
|
-
file_request = TMSiDevSetCardFileReq()
|
|
73
|
-
file_request.RecFileID = self._file_id
|
|
74
|
-
file_request.StartStop = SampleControl.StopSampling.value
|
|
75
|
-
self._dev.set_device_download_file_request(file_request)
|
|
76
|
-
self._sampling_thread.stop()
|
|
77
|
-
self._conversion_thread.stop()
|