py-neuromodulation 0.0.2__py3-none-any.whl → 0.0.3__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 (204) hide show
  1. docs/build/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +68 -0
  2. docs/build/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +233 -0
  3. docs/build/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +219 -0
  4. docs/build/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +97 -0
  5. docs/build/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +64 -0
  6. docs/build/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +192 -0
  7. docs/build/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +210 -0
  8. docs/build/html/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +68 -0
  9. docs/build/html/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +239 -0
  10. docs/build/html/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +219 -0
  11. docs/build/html/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +97 -0
  12. docs/build/html/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +64 -0
  13. docs/build/html/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +192 -0
  14. docs/build/html/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +210 -0
  15. docs/source/_build/html/_downloads/09df217f95985497f45d69e2d4bdc5b1/plot_2_example_add_feature.py +76 -0
  16. docs/source/_build/html/_downloads/0d0d0a76e8f648d5d3cbc47da6351932/plot_real_time_demo.py +97 -0
  17. docs/source/_build/html/_downloads/3b4900a2b2818ff30362215b76f7d5eb/plot_1_example_BIDS.py +240 -0
  18. docs/source/_build/html/_downloads/5d73cadc59a8805c47e3b84063afc157/plot_example_BIDS.py +233 -0
  19. docs/source/_build/html/_downloads/7660317fa5a6bfbd12fcca9961457fc4/plot_example_rmap_computing.py +63 -0
  20. docs/source/_build/html/_downloads/7e92dd2e6cc86b239d14cafad972ae4f/plot_3_example_sharpwave_analysis.py +219 -0
  21. docs/source/_build/html/_downloads/839e5b319379f7fd9e867deb00fd797f/plot_example_gridPointProjection.py +210 -0
  22. docs/source/_build/html/_downloads/ae8be19afe5e559f011fc9b138968ba0/plot_first_demo.py +192 -0
  23. docs/source/_build/html/_downloads/b8b06cacc17969d3725a0b6f1d7741c5/plot_example_sharpwave_analysis.py +219 -0
  24. docs/source/_build/html/_downloads/c2db0bf2b334d541b00662b991682256/plot_6_real_time_demo.py +121 -0
  25. docs/source/_build/html/_downloads/c31a86c0b68cb4167d968091ace8080d/plot_example_add_feature.py +68 -0
  26. docs/source/_build/html/_downloads/ce3914826f782cbd1ea8fd024eaf0ac3/plot_5_example_rmap_computing.py +64 -0
  27. docs/source/_build/html/_downloads/da36848a41e6a3235d91fb7cfb6d59b4/plot_0_first_demo.py +189 -0
  28. docs/source/_build/html/_downloads/eaa4305c75b19a1e2eea941f742a6331/plot_4_example_gridPointProjection.py +210 -0
  29. docs/source/auto_examples/plot_0_first_demo.py +189 -0
  30. docs/source/auto_examples/plot_1_example_BIDS.py +240 -0
  31. docs/source/auto_examples/plot_2_example_add_feature.py +76 -0
  32. docs/source/auto_examples/plot_3_example_sharpwave_analysis.py +219 -0
  33. docs/source/auto_examples/plot_4_example_gridPointProjection.py +210 -0
  34. docs/source/auto_examples/plot_5_example_rmap_computing.py +64 -0
  35. docs/source/auto_examples/plot_6_real_time_demo.py +121 -0
  36. docs/source/conf.py +105 -0
  37. examples/plot_0_first_demo.py +189 -0
  38. examples/plot_1_example_BIDS.py +240 -0
  39. examples/plot_2_example_add_feature.py +76 -0
  40. examples/plot_3_example_sharpwave_analysis.py +219 -0
  41. examples/plot_4_example_gridPointProjection.py +210 -0
  42. examples/plot_5_example_rmap_computing.py +64 -0
  43. examples/plot_6_real_time_demo.py +121 -0
  44. packages/realtime_decoding/build/lib/realtime_decoding/__init__.py +4 -0
  45. packages/realtime_decoding/build/lib/realtime_decoding/decoder.py +104 -0
  46. packages/realtime_decoding/build/lib/realtime_decoding/features.py +163 -0
  47. packages/realtime_decoding/build/lib/realtime_decoding/helpers.py +15 -0
  48. packages/realtime_decoding/build/lib/realtime_decoding/run_decoding.py +345 -0
  49. packages/realtime_decoding/build/lib/realtime_decoding/trainer.py +54 -0
  50. packages/tmsi/build/lib/TMSiFileFormats/__init__.py +37 -0
  51. packages/tmsi/build/lib/TMSiFileFormats/file_formats/__init__.py +36 -0
  52. packages/tmsi/build/lib/TMSiFileFormats/file_formats/lsl_stream_writer.py +200 -0
  53. packages/tmsi/build/lib/TMSiFileFormats/file_formats/poly5_file_writer.py +496 -0
  54. packages/tmsi/build/lib/TMSiFileFormats/file_formats/poly5_to_edf_converter.py +236 -0
  55. packages/tmsi/build/lib/TMSiFileFormats/file_formats/xdf_file_writer.py +977 -0
  56. packages/tmsi/build/lib/TMSiFileFormats/file_readers/__init__.py +35 -0
  57. packages/tmsi/build/lib/TMSiFileFormats/file_readers/edf_reader.py +116 -0
  58. packages/tmsi/build/lib/TMSiFileFormats/file_readers/poly5reader.py +294 -0
  59. packages/tmsi/build/lib/TMSiFileFormats/file_readers/xdf_reader.py +229 -0
  60. packages/tmsi/build/lib/TMSiFileFormats/file_writer.py +102 -0
  61. packages/tmsi/build/lib/TMSiPlotters/__init__.py +2 -0
  62. packages/tmsi/build/lib/TMSiPlotters/gui/__init__.py +39 -0
  63. packages/tmsi/build/lib/TMSiPlotters/gui/_plotter_gui.py +234 -0
  64. packages/tmsi/build/lib/TMSiPlotters/gui/plotting_gui.py +440 -0
  65. packages/tmsi/build/lib/TMSiPlotters/plotters/__init__.py +44 -0
  66. packages/tmsi/build/lib/TMSiPlotters/plotters/hd_emg_plotter.py +446 -0
  67. packages/tmsi/build/lib/TMSiPlotters/plotters/impedance_plotter.py +589 -0
  68. packages/tmsi/build/lib/TMSiPlotters/plotters/signal_plotter.py +1326 -0
  69. packages/tmsi/build/lib/TMSiSDK/__init__.py +54 -0
  70. packages/tmsi/build/lib/TMSiSDK/device.py +588 -0
  71. packages/tmsi/build/lib/TMSiSDK/devices/__init__.py +34 -0
  72. packages/tmsi/build/lib/TMSiSDK/devices/saga/TMSi_Device_API.py +1764 -0
  73. packages/tmsi/build/lib/TMSiSDK/devices/saga/__init__.py +34 -0
  74. packages/tmsi/build/lib/TMSiSDK/devices/saga/saga_device.py +1366 -0
  75. packages/tmsi/build/lib/TMSiSDK/devices/saga/saga_types.py +520 -0
  76. packages/tmsi/build/lib/TMSiSDK/devices/saga/xml_saga_config.py +165 -0
  77. packages/tmsi/build/lib/TMSiSDK/error.py +95 -0
  78. packages/tmsi/build/lib/TMSiSDK/sample_data.py +63 -0
  79. packages/tmsi/build/lib/TMSiSDK/sample_data_server.py +99 -0
  80. packages/tmsi/build/lib/TMSiSDK/settings.py +45 -0
  81. packages/tmsi/build/lib/TMSiSDK/tmsi_device.py +111 -0
  82. packages/tmsi/build/lib/__init__.py +4 -0
  83. packages/tmsi/build/lib/apex_sdk/__init__.py +34 -0
  84. packages/tmsi/build/lib/apex_sdk/device/__init__.py +41 -0
  85. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API.py +1009 -0
  86. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API_enums.py +239 -0
  87. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_API_structures.py +668 -0
  88. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_device.py +1611 -0
  89. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_dongle.py +38 -0
  90. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_event_reader.py +57 -0
  91. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_channel.py +44 -0
  92. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_config.py +150 -0
  93. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_const.py +36 -0
  94. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_impedance_channel.py +48 -0
  95. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/apex_info.py +108 -0
  96. packages/tmsi/build/lib/apex_sdk/device/devices/apex/apex_structures/dongle_info.py +39 -0
  97. packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/download_measurement.py +77 -0
  98. packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/eeg_measurement.py +150 -0
  99. packages/tmsi/build/lib/apex_sdk/device/devices/apex/measurements/impedance_measurement.py +129 -0
  100. packages/tmsi/build/lib/apex_sdk/device/threads/conversion_thread.py +59 -0
  101. packages/tmsi/build/lib/apex_sdk/device/threads/sampling_thread.py +57 -0
  102. packages/tmsi/build/lib/apex_sdk/device/tmsi_channel.py +83 -0
  103. packages/tmsi/build/lib/apex_sdk/device/tmsi_device.py +201 -0
  104. packages/tmsi/build/lib/apex_sdk/device/tmsi_device_enums.py +103 -0
  105. packages/tmsi/build/lib/apex_sdk/device/tmsi_dongle.py +43 -0
  106. packages/tmsi/build/lib/apex_sdk/device/tmsi_event_reader.py +50 -0
  107. packages/tmsi/build/lib/apex_sdk/device/tmsi_measurement.py +118 -0
  108. packages/tmsi/build/lib/apex_sdk/sample_data_server/__init__.py +33 -0
  109. packages/tmsi/build/lib/apex_sdk/sample_data_server/event_data.py +44 -0
  110. packages/tmsi/build/lib/apex_sdk/sample_data_server/sample_data.py +50 -0
  111. packages/tmsi/build/lib/apex_sdk/sample_data_server/sample_data_server.py +136 -0
  112. packages/tmsi/build/lib/apex_sdk/tmsi_errors/error.py +126 -0
  113. packages/tmsi/build/lib/apex_sdk/tmsi_sdk.py +113 -0
  114. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/apex/apex_structure_generator.py +134 -0
  115. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/decorators.py +60 -0
  116. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/logger_filter.py +42 -0
  117. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/singleton.py +42 -0
  118. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/support_functions.py +72 -0
  119. packages/tmsi/build/lib/apex_sdk/tmsi_utilities/tmsi_logger.py +98 -0
  120. py_neuromodulation/{helper.py → _write_example_dataset_helper.py} +1 -1
  121. py_neuromodulation/nm_EpochStream.py +2 -3
  122. py_neuromodulation/nm_IO.py +43 -70
  123. py_neuromodulation/nm_RMAP.py +308 -11
  124. py_neuromodulation/nm_analysis.py +1 -1
  125. py_neuromodulation/nm_artifacts.py +25 -0
  126. py_neuromodulation/nm_bispectra.py +64 -29
  127. py_neuromodulation/nm_bursts.py +44 -30
  128. py_neuromodulation/nm_coherence.py +2 -1
  129. py_neuromodulation/nm_features.py +4 -2
  130. py_neuromodulation/nm_filter.py +63 -32
  131. py_neuromodulation/nm_filter_preprocessing.py +91 -0
  132. py_neuromodulation/nm_fooof.py +47 -29
  133. py_neuromodulation/nm_mne_connectivity.py +1 -1
  134. py_neuromodulation/nm_normalization.py +50 -74
  135. py_neuromodulation/nm_oscillatory.py +151 -31
  136. py_neuromodulation/nm_plots.py +13 -10
  137. py_neuromodulation/nm_rereference.py +10 -8
  138. py_neuromodulation/nm_run_analysis.py +28 -13
  139. py_neuromodulation/nm_sharpwaves.py +103 -136
  140. py_neuromodulation/nm_stats.py +44 -30
  141. py_neuromodulation/nm_stream_abc.py +18 -10
  142. py_neuromodulation/nm_stream_offline.py +181 -40
  143. py_neuromodulation/utils/_logging.py +24 -0
  144. {py_neuromodulation-0.0.2.dist-info → py_neuromodulation-0.0.3.dist-info}/METADATA +182 -142
  145. py_neuromodulation-0.0.3.dist-info/RECORD +188 -0
  146. {py_neuromodulation-0.0.2.dist-info → py_neuromodulation-0.0.3.dist-info}/WHEEL +2 -1
  147. py_neuromodulation-0.0.3.dist-info/top_level.txt +5 -0
  148. tests/__init__.py +0 -0
  149. tests/conftest.py +117 -0
  150. tests/test_all_examples.py +10 -0
  151. tests/test_all_features.py +63 -0
  152. tests/test_bispectra.py +70 -0
  153. tests/test_bursts.py +105 -0
  154. tests/test_feature_sampling_rates.py +143 -0
  155. tests/test_fooof.py +16 -0
  156. tests/test_initalization_offline_stream.py +41 -0
  157. tests/test_multiprocessing.py +58 -0
  158. tests/test_nan_values.py +29 -0
  159. tests/test_nm_filter.py +95 -0
  160. tests/test_nm_resample.py +63 -0
  161. tests/test_normalization_settings.py +146 -0
  162. tests/test_notch_filter.py +31 -0
  163. tests/test_osc_features.py +424 -0
  164. tests/test_preprocessing_filter.py +151 -0
  165. tests/test_rereference.py +171 -0
  166. tests/test_sampling.py +57 -0
  167. tests/test_settings_change_after_init.py +76 -0
  168. tests/test_sharpwave.py +165 -0
  169. tests/test_target_channel_add.py +100 -0
  170. tests/test_timing.py +80 -0
  171. py_neuromodulation/data/README +0 -6
  172. py_neuromodulation/data/dataset_description.json +0 -8
  173. py_neuromodulation/data/derivatives/sub-testsub_ses-EphysMedOff_task-gripforce_run-0/MOV_aligned_features_ch_ECOG_RIGHT_0_all.png +0 -0
  174. py_neuromodulation/data/derivatives/sub-testsub_ses-EphysMedOff_task-gripforce_run-0/all_feature_plt.pdf +0 -0
  175. py_neuromodulation/data/derivatives/sub-testsub_ses-EphysMedOff_task-gripforce_run-0/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_FEATURES.csv +0 -182
  176. py_neuromodulation/data/derivatives/sub-testsub_ses-EphysMedOff_task-gripforce_run-0/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_LM_ML_RES.p +0 -0
  177. py_neuromodulation/data/derivatives/sub-testsub_ses-EphysMedOff_task-gripforce_run-0/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_SETTINGS.json +0 -273
  178. py_neuromodulation/data/derivatives/sub-testsub_ses-EphysMedOff_task-gripforce_run-0/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_SIDECAR.json +0 -6
  179. py_neuromodulation/data/derivatives/sub-testsub_ses-EphysMedOff_task-gripforce_run-0/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_decoding_performance.png +0 -0
  180. py_neuromodulation/data/derivatives/sub-testsub_ses-EphysMedOff_task-gripforce_run-0/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_nm_channels.csv +0 -11
  181. py_neuromodulation/data/participants.json +0 -32
  182. py_neuromodulation/data/participants.tsv +0 -2
  183. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_space-mni_coordsystem.json +0 -5
  184. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_space-mni_electrodes.tsv +0 -11
  185. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_channels.tsv +0 -11
  186. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.eeg +0 -0
  187. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.json +0 -18
  188. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.vhdr +0 -35
  189. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/ieeg/sub-testsub_ses-EphysMedOff_task-gripforce_run-0_ieeg.vmrk +0 -13
  190. py_neuromodulation/data/sub-testsub/ses-EphysMedOff/sub-testsub_ses-EphysMedOff_scans.tsv +0 -2
  191. py_neuromodulation/grid_cortex.tsv +0 -40
  192. py_neuromodulation/grid_subcortex.tsv +0 -1429
  193. py_neuromodulation/nm_settings.json +0 -290
  194. py_neuromodulation/plots/STN_surf.mat +0 -0
  195. py_neuromodulation/plots/Vertices.mat +0 -0
  196. py_neuromodulation/plots/faces.mat +0 -0
  197. py_neuromodulation/plots/grid.mat +0 -0
  198. py_neuromodulation/py_neuromodulation.egg-info/PKG-INFO +0 -104
  199. py_neuromodulation/py_neuromodulation.egg-info/dependency_links.txt +0 -1
  200. py_neuromodulation/py_neuromodulation.egg-info/requires.txt +0 -26
  201. py_neuromodulation/py_neuromodulation.egg-info/top_level.txt +0 -1
  202. py_neuromodulation-0.0.2.dist-info/RECORD +0 -73
  203. /py_neuromodulation/{py_neuromodulation.egg-info/SOURCES.txt → utils/__init__.py} +0 -0
  204. {py_neuromodulation-0.0.2.dist-info → py_neuromodulation-0.0.3.dist-info}/LICENSE +0 -0
@@ -0,0 +1,95 @@
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")
@@ -0,0 +1,63 @@
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
@@ -0,0 +1,99 @@
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)
@@ -0,0 +1,45 @@
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
@@ -0,0 +1,111 @@
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
@@ -0,0 +1,4 @@
1
+ """tmsi is a package derived from TMSi's python interface."""
2
+ from . import TMSiFileFormats
3
+ from . import TMSiPlotters
4
+ from . import TMSiSDK
@@ -0,0 +1,34 @@
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
@@ -0,0 +1,41 @@
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
+ )