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.
Files changed (176) hide show
  1. py_neuromodulation/ConnectivityDecoding/Automated Anatomical Labeling 3 (Rolls 2020).nii +0 -0
  2. py_neuromodulation/ConnectivityDecoding/_get_grid_hull.m +34 -0
  3. py_neuromodulation/ConnectivityDecoding/_get_grid_whole_brain.py +106 -0
  4. py_neuromodulation/ConnectivityDecoding/_helper_write_connectome.py +119 -0
  5. py_neuromodulation/ConnectivityDecoding/mni_coords_cortical_surface.mat +0 -0
  6. py_neuromodulation/ConnectivityDecoding/mni_coords_whole_brain.mat +0 -0
  7. py_neuromodulation/ConnectivityDecoding/rmap_func_all.nii +0 -0
  8. py_neuromodulation/ConnectivityDecoding/rmap_struc.nii +0 -0
  9. py_neuromodulation/data/README +6 -0
  10. py_neuromodulation/data/dataset_description.json +8 -0
  11. py_neuromodulation/data/participants.json +32 -0
  12. py_neuromodulation/data/participants.tsv +2 -0
  13. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_space-mni_coordsystem.json +5 -0
  14. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_space-mni_electrodes.tsv +11 -0
  15. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_channels.tsv +11 -0
  16. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.eeg +0 -0
  17. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.json +18 -0
  18. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.vhdr +35 -0
  19. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.vmrk +13 -0
  20. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/sub-testsub_ses-EphysMedOff_scans.tsv +2 -0
  21. py_neuromodulation/grid_cortex.tsv +40 -0
  22. py_neuromodulation/grid_subcortex.tsv +1429 -0
  23. py_neuromodulation/nm_settings.json +338 -0
  24. py_neuromodulation/nm_stream_offline.py +7 -6
  25. py_neuromodulation/plots/STN_surf.mat +0 -0
  26. py_neuromodulation/plots/Vertices.mat +0 -0
  27. py_neuromodulation/plots/faces.mat +0 -0
  28. py_neuromodulation/plots/grid.mat +0 -0
  29. {py_neuromodulation-0.0.3.dist-info → py_neuromodulation-0.0.4.dist-info}/METADATA +182 -182
  30. py_neuromodulation-0.0.4.dist-info/RECORD +72 -0
  31. {py_neuromodulation-0.0.3.dist-info → py_neuromodulation-0.0.4.dist-info}/WHEEL +1 -2
  32. docs/build/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +0 -68
  33. docs/build/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +0 -233
  34. docs/build/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +0 -219
  35. docs/build/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +0 -97
  36. docs/build/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +0 -64
  37. docs/build/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +0 -192
  38. docs/build/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +0 -210
  39. docs/build/html/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +0 -68
  40. docs/build/html/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +0 -239
  41. docs/build/html/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +0 -219
  42. docs/build/html/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +0 -97
  43. docs/build/html/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +0 -64
  44. docs/build/html/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +0 -192
  45. docs/build/html/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +0 -210
  46. docs/source/_build/html/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +0 -76
  47. docs/source/_build/html/_downloads/0d0d0a76e8f648d5d3cbc47da6351932/plot_real_time_demo.py +0 -97
  48. docs/source/_build/html/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +0 -240
  49. docs/source/_build/html/_downloads/5d73cadc59a8805c47e3b84063afc157/plot_example_BIDS.py +0 -233
  50. docs/source/_build/html/_downloads/7660317fa5a6bfbd12fcca9961457fc4/plot_example_rmap_computing.py +0 -63
  51. docs/source/_build/html/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +0 -219
  52. docs/source/_build/html/_downloads/839e5b319379f7fd9e867deb00fd797f/plot_example_gridPointProjection.py +0 -210
  53. docs/source/_build/html/_downloads/ae8be19afe5e559f011fc9b138968ba0/plot_first_demo.py +0 -192
  54. docs/source/_build/html/_downloads/b8b06cacc17969d3725a0b6f1d7741c5/plot_example_sharpwave_analysis.py +0 -219
  55. docs/source/_build/html/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +0 -121
  56. docs/source/_build/html/_downloads/c31a86c0b68cb4167d968091ace8080d/plot_example_add_feature.py +0 -68
  57. docs/source/_build/html/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +0 -64
  58. docs/source/_build/html/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +0 -189
  59. docs/source/_build/html/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +0 -210
  60. docs/source/auto_examples/plot_0_first_demo.py +0 -189
  61. docs/source/auto_examples/plot_1_example_BIDS.py +0 -240
  62. docs/source/auto_examples/plot_2_example_add_feature.py +0 -76
  63. docs/source/auto_examples/plot_3_example_sharpwave_analysis.py +0 -219
  64. docs/source/auto_examples/plot_4_example_gridPointProjection.py +0 -210
  65. docs/source/auto_examples/plot_5_example_rmap_computing.py +0 -64
  66. docs/source/auto_examples/plot_6_real_time_demo.py +0 -121
  67. docs/source/conf.py +0 -105
  68. examples/plot_0_first_demo.py +0 -189
  69. examples/plot_1_example_BIDS.py +0 -240
  70. examples/plot_2_example_add_feature.py +0 -76
  71. examples/plot_3_example_sharpwave_analysis.py +0 -219
  72. examples/plot_4_example_gridPointProjection.py +0 -210
  73. examples/plot_5_example_rmap_computing.py +0 -64
  74. examples/plot_6_real_time_demo.py +0 -121
  75. packages/realtime_decoding/build/lib/realtime_decoding/__init__.py +0 -4
  76. packages/realtime_decoding/build/lib/realtime_decoding/decoder.py +0 -104
  77. packages/realtime_decoding/build/lib/realtime_decoding/features.py +0 -163
  78. packages/realtime_decoding/build/lib/realtime_decoding/helpers.py +0 -15
  79. packages/realtime_decoding/build/lib/realtime_decoding/run_decoding.py +0 -345
  80. packages/realtime_decoding/build/lib/realtime_decoding/trainer.py +0 -54
  81. packages/tmsi/build/lib/TMSiFileFormats/__init__.py +0 -37
  82. packages/tmsi/build/lib/TMSiFileFormats/file_formats/__init__.py +0 -36
  83. packages/tmsi/build/lib/TMSiFileFormats/file_formats/lsl_stream_writer.py +0 -200
  84. packages/tmsi/build/lib/TMSiFileFormats/file_formats/poly5_file_writer.py +0 -496
  85. packages/tmsi/build/lib/TMSiFileFormats/file_formats/poly5_to_edf_converter.py +0 -236
  86. packages/tmsi/build/lib/TMSiFileFormats/file_formats/xdf_file_writer.py +0 -977
  87. packages/tmsi/build/lib/TMSiFileFormats/file_readers/__init__.py +0 -35
  88. packages/tmsi/build/lib/TMSiFileFormats/file_readers/edf_reader.py +0 -116
  89. packages/tmsi/build/lib/TMSiFileFormats/file_readers/poly5reader.py +0 -294
  90. packages/tmsi/build/lib/TMSiFileFormats/file_readers/xdf_reader.py +0 -229
  91. packages/tmsi/build/lib/TMSiFileFormats/file_writer.py +0 -102
  92. packages/tmsi/build/lib/TMSiPlotters/__init__.py +0 -2
  93. packages/tmsi/build/lib/TMSiPlotters/gui/__init__.py +0 -39
  94. packages/tmsi/build/lib/TMSiPlotters/gui/_plotter_gui.py +0 -234
  95. packages/tmsi/build/lib/TMSiPlotters/gui/plotting_gui.py +0 -440
  96. packages/tmsi/build/lib/TMSiPlotters/plotters/__init__.py +0 -44
  97. packages/tmsi/build/lib/TMSiPlotters/plotters/hd_emg_plotter.py +0 -446
  98. packages/tmsi/build/lib/TMSiPlotters/plotters/impedance_plotter.py +0 -589
  99. packages/tmsi/build/lib/TMSiPlotters/plotters/signal_plotter.py +0 -1326
  100. packages/tmsi/build/lib/TMSiSDK/__init__.py +0 -54
  101. packages/tmsi/build/lib/TMSiSDK/device.py +0 -588
  102. packages/tmsi/build/lib/TMSiSDK/devices/__init__.py +0 -34
  103. packages/tmsi/build/lib/TMSiSDK/devices/saga/TMSi_Device_API.py +0 -1764
  104. packages/tmsi/build/lib/TMSiSDK/devices/saga/__init__.py +0 -34
  105. packages/tmsi/build/lib/TMSiSDK/devices/saga/saga_device.py +0 -1366
  106. packages/tmsi/build/lib/TMSiSDK/devices/saga/saga_types.py +0 -520
  107. packages/tmsi/build/lib/TMSiSDK/devices/saga/xml_saga_config.py +0 -165
  108. packages/tmsi/build/lib/TMSiSDK/error.py +0 -95
  109. packages/tmsi/build/lib/TMSiSDK/sample_data.py +0 -63
  110. packages/tmsi/build/lib/TMSiSDK/sample_data_server.py +0 -99
  111. packages/tmsi/build/lib/TMSiSDK/settings.py +0 -45
  112. packages/tmsi/build/lib/TMSiSDK/tmsi_device.py +0 -111
  113. packages/tmsi/build/lib/__init__.py +0 -4
  114. packages/tmsi/build/lib/apex_sdk/__init__.py +0 -34
  115. packages/tmsi/build/lib/apex_sdk/device/__init__.py +0 -41
  116. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API.py +0 -1009
  117. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API_enums.py +0 -239
  118. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API_structures.py +0 -668
  119. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_device.py +0 -1611
  120. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_dongle.py +0 -38
  121. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_event_reader.py +0 -57
  122. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_channel.py +0 -44
  123. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_config.py +0 -150
  124. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_const.py +0 -36
  125. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_impedance_channel.py +0 -48
  126. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_info.py +0 -108
  127. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/dongle_info.py +0 -39
  128. packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/download_measurement.py +0 -77
  129. packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/eeg_measurement.py +0 -150
  130. packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/impedance_measurement.py +0 -129
  131. packages/tmsi/build/lib/apex_sdk/device/threads/conversion_thread.py +0 -59
  132. packages/tmsi/build/lib/apex_sdk/device/threads/sampling_thread.py +0 -57
  133. packages/tmsi/build/lib/apex_sdk/device/tmsi_channel.py +0 -83
  134. packages/tmsi/build/lib/apex_sdk/device/tmsi_device.py +0 -201
  135. packages/tmsi/build/lib/apex_sdk/device/tmsi_device_enums.py +0 -103
  136. packages/tmsi/build/lib/apex_sdk/device/tmsi_dongle.py +0 -43
  137. packages/tmsi/build/lib/apex_sdk/device/tmsi_event_reader.py +0 -50
  138. packages/tmsi/build/lib/apex_sdk/device/tmsi_measurement.py +0 -118
  139. packages/tmsi/build/lib/apex_sdk/sample_data_server/__init__.py +0 -33
  140. packages/tmsi/build/lib/apex_sdk/sample_data_server/event_data.py +0 -44
  141. packages/tmsi/build/lib/apex_sdk/sample_data_server/sample_data.py +0 -50
  142. packages/tmsi/build/lib/apex_sdk/sample_data_server/sample_data_server.py +0 -136
  143. packages/tmsi/build/lib/apex_sdk/tmsi_errors/error.py +0 -126
  144. packages/tmsi/build/lib/apex_sdk/tmsi_sdk.py +0 -113
  145. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/apex/apex_structure_generator.py +0 -134
  146. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/decorators.py +0 -60
  147. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/logger_filter.py +0 -42
  148. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/singleton.py +0 -42
  149. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/support_functions.py +0 -72
  150. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/tmsi_logger.py +0 -98
  151. py_neuromodulation-0.0.3.dist-info/RECORD +0 -188
  152. py_neuromodulation-0.0.3.dist-info/top_level.txt +0 -5
  153. tests/__init__.py +0 -0
  154. tests/conftest.py +0 -117
  155. tests/test_all_examples.py +0 -10
  156. tests/test_all_features.py +0 -63
  157. tests/test_bispectra.py +0 -70
  158. tests/test_bursts.py +0 -105
  159. tests/test_feature_sampling_rates.py +0 -143
  160. tests/test_fooof.py +0 -16
  161. tests/test_initalization_offline_stream.py +0 -41
  162. tests/test_multiprocessing.py +0 -58
  163. tests/test_nan_values.py +0 -29
  164. tests/test_nm_filter.py +0 -95
  165. tests/test_nm_resample.py +0 -63
  166. tests/test_normalization_settings.py +0 -146
  167. tests/test_notch_filter.py +0 -31
  168. tests/test_osc_features.py +0 -424
  169. tests/test_preprocessing_filter.py +0 -151
  170. tests/test_rereference.py +0 -171
  171. tests/test_sampling.py +0 -57
  172. tests/test_settings_change_after_init.py +0 -76
  173. tests/test_sharpwave.py +0 -165
  174. tests/test_target_channel_add.py +0 -100
  175. tests/test_timing.py +0 -80
  176. {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
@@ -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()