Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
if isinstance(config['param_notch_widths'], str):
    config['param_notch_widths'] = list(map(float, config['param_notch_widths'].split(', ')))
    config['param_notch_widths'] = np.array(config['param_notch_widths'])

Case of a slice

It is also impossible to enter directly a slice on BL. So we enter the parameter as a STRING. In the config.json, such parameter is written as follows:

Code Block
{
config['param_picks_by_channel_indices']: "0, 10, 2"
}
Info

This parameter is entered the same way as a numpy.nd.array. So far it is not an issue because no parameter is either a numpy.nd.array or a slice.

In the Python file, we added:

Code Block
if isinstance(picks, str) and picks.find(",") != -1 and picks.find("[") == -1 and picks is not None:
    picks = list(map(int, picks.split(', ')))
    if len(picks) == 2:
        config['param_picks_by_channel_indices'] = slice(picks[0], picks[1])
    elif len(picks) == 3:
        config['param_picks_by_channel_indices'] = slice(picks[0], picks[1], picks[2])
    else:
        value_error_message = f"If you want to select channels using a slice, you must give two or three elements."
        raise ValueError(value_error_message)

Case of a tuple

A tuple can not be entered on BL. So we registered the parameter as a STRING. In the config.json, such parameter is run as follows:

Code Block

Case of a list of integers/floats

On Brainlife, when we enter a list, we have to use the type STRING and so the elements of the list are considered as strings, so they need to be converted.

Indeed, a list of floats or integers are written as follows in the config.json:

Code Block

Cases when a parameter can be two types

When the App is run locally, this configuration is not an issue, but on Brainlife when you define the parameter, it must be either STRING or NUMBER. So when a parameter can be both a str or a float/ int, we registered it as a STRING on BL, and then we convert it as a floator int.

But we must be careful: we only want to convert a str into float/int when the App runs on BL. For instance the parameter param_filter_length can be “auto”, a str with the duration in s, or ms, or a int. So to be sure that the conversion into float happens only on Brainlife and only when the user does want to use a float:

Code Block
if config['param_filter_length'] != "auto" and config['param_filter_length'].find("s") == -1:
    config['param_filter_length'] = int(config['param_filter_length'])