electrodes
Description¶
This module contains informations about the electrodes commonly used for HD-EMG recordings. Functions to sort the electrode position are also included.
Notes¶
The files saved from the DEMUSE software are supposed to be already sorted.
sort_rawemg(emgfile, code='GR08MM1305', orientation=180, dividebycolumn=True, n_rows=None, n_cols=None, custom_sorting_order=None)
¶
Sort RAW_SIGNAL based on matrix type and orientation.
To date, built-in sorting functions have been implemented for the matrices:
Code (Orientation)
GR08MM1305 (0, 180)
GR04MM1305 (0, 180)
GR10MM0808 (0, 180)
Trigno Galileo Sensor (na)
Custom order (any)
PARAMETER | DESCRIPTION |
---|---|
emgfile
|
The dictionary containing the emgfile.
TYPE:
|
code
|
The code of the matrix used. It can be one of:
If "None", the electodes are not sorted but n_rows and n_cols must be specified when dividebycolumn == True. If "Custom order", the electrodes are sorted based on custom_sorting_order.
TYPE:
|
orientation
|
Orientation in degree of the matrix. E.g. 180 corresponds to the matrix connection toward the researcher or the ground (depending on the limb). Ignore if using the "Trigno Galileo Sensor". In this case, channels will be oriented as in the Delsys Neuromap Explorer software. This Parameter is ignored if code=="Custom order" or code=="None".
TYPE:
|
dividebycolumn
|
Whether to return the sorted channels classified by matrix column.
DEFAULT:
|
n_rows
|
The number of rows of the matrix. This parameter is used to divide the channels based on the matrix shape. These are inferred by the matrix code and must be specified only if code==None.
TYPE:
|
n_cols
|
The number of columns of the matrix. This parameter is used to divide the channels based on the matrix shape. These are inferred by the matrix code and must be specified only if code==None.
TYPE:
|
custom_sorting_order
|
If code=="Custom order", custom_sorting_order will be used for channels sorting. In this case, custom_sorting_order must be a list of lists containing the order of the matrix channels. Specifically, the number of columns are defined by len(custom_sorting_order) while the number of rows by len(custom_sorting_order[0]). np.nan can be used to specify empty channels. Please refer to the Notes and Examples section for the structure of the custom sorting order.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
sorted_rawemg
|
If dividebycolumn == True, a dict containing the sorted electrodes is returned. Every key of the dictionary represents a different column of the matrix. Rows are stored in the dict as a pd.DataFrame. If dividebycolumn == False a pd.DataFrame containing the sorted electrodes is returned. The matrix channels are stored in the pd.DataFrame columns.
TYPE:
|
Notes
The returned file is called sorted_rawemg
for convention.
Additional info on how to create the custom sorting order is available at: https://www.giacomovalli.com/openhdemg/gui_settings/#electrodes
Examples:
Sort emgfile RAW_SIGNAL and divide it by columns with built-in sorting orders.
>>> import openhdemg.library as emg
>>> emgfile = emg.askopenfile(filesource="OTB", otb_ext_factor=8)
>>> sorted_rawemg = emg.sort_rawemg(
... emgfile=emgfile,
... code="GR08MM1305",
... orientation=180,
... dividebycolumn=True,
... )
>>> sorted_rawemg["col0"]
0 1 2 ... 10 11 12
0 NaN -11.189778 3.560384 ... -2.034505 -3.051758 -0.508626
1 NaN -12.715657 4.577637 ... 2.034505 -7.120768 -0.508626
2 NaN 0.508626 21.870932 ... 17.801920 8.646647 16.276041
3 NaN 6.103516 26.957193 ... 26.448568 19.327799 19.836426
4 NaN -5.594889 13.224284 ... 10.681152 2.034505 3.560384
... .. ... ... ... ... ... ...
63483 NaN -15.767415 -22.379557 ...-12.207031 -12.207031 -15.767415
63484 NaN -9.155273 -19.327799 ... -7.629395 -8.138021 -8.138021
63485 NaN -6.103516 -12.207031 ... -6.103516 -5.086263 -3.051758
63486 NaN -6.103516 -15.767415 ... -3.560384 -0.508626 2.543132
63487 NaN -8.138021 -18.819174 ... -2.034505 -1.525879 3.560384
Sort emgfile RAW_SIGNAL without dividing it by columns.
>>> emgfile = emg.askopenfile(filesource="OTB", otb_ext_factor=8)
>>> sorted_rawemg = emg.sort_rawemg(
... emgfile,
... code="GR08MM1305",
... orientation=180,
... dividebycolumn=False,
... )
>>> sorted_rawemg
0 1 2 ... 62 63 64
0 NaN -11.189778 3.560384 ... -5.086263 -9.663899 2.034505
1 NaN -12.715657 4.577637 ... -3.560384 -8.646647 1.017253
2 NaN 0.508626 21.870932 ... 11.189778 6.612142 17.293295
3 NaN 6.103516 26.957193 ... 22.888184 14.750163 21.362305
4 NaN -5.594889 13.224284 ... 9.663899 1.525879 6.612142
... .. ... ... ... ... ... ...
63483 NaN -15.767415 -22.379557 ... -8.646647 -20.345053 -15.258789
63484 NaN -9.155273 -19.327799 ... -7.120768 -19.327799 -13.732910
63485 NaN -6.103516 -12.207031 ... -3.051758 -10.681152 -6.103516
63486 NaN -6.103516 -15.767415 ... 2.543132 -7.120768 -4.069010
63487 NaN -8.138021 -18.819174 ... 2.034505 -3.051758 -0.508626
Avoid RAW_SIGNAL sorting but divide it by columns.
>>> emgfile = emg.askopenfile(filesource="CUSTOM")
>>> sorted_rawemg = emg.sort_rawemg(
... emgfile, code="None", n_cols=5, n_rows=13,
... )
>>> sorted_rawemg["col0"]
0 1 2 ... 10 11 12
0 0.008138 0.001017 0.002035 ... 0.005595 0.008647 NaN
1 -0.005595 -0.011190 -0.014750 ... 0.000000 0.005086 NaN
2 -0.017293 -0.020854 -0.021871 ... 0.009664 -0.004578 NaN
3 -0.003560 -0.012716 -0.009155 ... 0.004578 0.007121 NaN
4 0.001526 -0.005595 -0.005595 ... 0.007121 0.010173 NaN
... ... ... ... ... ... ... ..
62459 0.011698 0.015259 0.004069 ... 0.000000 0.031026 NaN
62460 0.007629 0.011698 0.002543 ... 0.002035 0.026449 NaN
62461 0.001526 0.009664 0.000000 ... 0.001526 0.025940 NaN
62462 0.033061 0.037130 0.027974 ... 0.022380 0.049845 NaN
62463 0.020854 0.028992 0.017802 ... 0.013733 0.037638 NaN
Sort RAW_SIGNAL based on a custom order and divide it by columns. The custom_sorting_order refers to a grid of 13 rows and 5 columns with the empty channel in last position.
Additional info on how to create the custom sorting order is available at: https://www.giacomovalli.com/openhdemg/gui_settings/#electrodes
>>> import openhdemg.library as emg
>>> emgfile = emg.askopenfile(filesource="OTB", otb_ext_factor=8)
>>> custom_sorting_order = [
... [63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51,],
... [38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,],
... [37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25,],
... [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,],
... [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, np.nan,],
... ] # 13 rows and 5 columns
>>> sorted_rawemg = emg.sort_rawemg(
... emgfile=emgfile,
... code="Custom order",
... dividebycolumn=True,
... custom_sorting_order=custom_sorting_order,
... )
>>> sorted_rawemg["col0"]
0 1 2 ... 10 11 12
0 2.034505 -9.663899 -5.086263 ... -26.957193 -8.138021 -2.034505
1 1.017253 -8.646647 -3.560384 ... -26.957193 -8.138021 -9.663899
2 17.293295 6.612142 11.189778 ... -13.224284 9.663899 6.612142
3 21.362305 14.750163 22.888184 ... -9.155273 17.293295 12.715657
... ... ... ... ... ... ... ...
63483 -15.258789 -20.345053 -8.646647 ... -20.853678 -15.767415 -10.681152
63484 -13.732910 -19.327799 -7.120768 ... -21.362305 -17.801920 -14.241536