Skip to content

Comments

Fix gfp computation#197

Open
vferat wants to merge 5 commits intomainfrom
dev-gfp
Open

Fix gfp computation#197
vferat wants to merge 5 commits intomainfrom
dev-gfp

Conversation

@vferat
Copy link
Owner

@vferat vferat commented Sep 10, 2024

As discussed in #160 and #195, introduces changes to the Global Field Power (GFP) computation based on the selected channel type.

When the channel type is eeg, the GFP is now computed using the standard deviation (std).
When the channel type is grador mag, the GFP is computed using the root mean square (rms).

Comment on lines 34 to 45
def _std():
def compute_std(data):
return np.std(data, axis=0)

return compute_std


def _rms():
def compute_rms(data):
return np.sqrt(np.mean(data**2, axis=0))

return compute_rms
Copy link
Collaborator

@mscheltienne mscheltienne Sep 10, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need to nest here and you could use a dict to store the GFP functions per channel type:

_GFP_FUNC: dict[str, Callable] = {
    "eeg": lambda x: np.std(x, axis=0),
    "grad": lambda x: np.sqrt(np.mean(x**2, axis=0)),
    "mag": lambda x: np.sqrt(np.mean(x**2, axis=0)),
}

# and later to use it:
_check_value(ch_type, _GFP_FUNC, "ch_type")
gfp = _GFP_FUNC[ch_type](data)

It removes the additional private functions and the nesting of function within, and removes the if/else logic on channel types.

@mscheltienne
Copy link
Collaborator

This is good to merge? @vferat

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants