obci.analysis.obci_signal_processing.signal package

Submodules

obci.analysis.obci_signal_processing.signal.data_asci_write_proxy module

class obci.analysis.obci_signal_processing.signal.data_asci_write_proxy.DataAsciWriteProxy(p_file_path, p_unpack_later=False, p_append_ts=False, p_sample_type='FLOAT')[source]

Bases: obci.analysis.obci_signal_processing.signal.data_generic_write_proxy.DataGenericWriteProxy

Open p_file_name file in p_dir_path directory.

data_received(p_data)[source]

obci.analysis.obci_signal_processing.signal.data_buffered_write_proxy module

class obci.analysis.obci_signal_processing.signal.data_buffered_write_proxy.DataBufferedWriteProxy(p_file_path, p_unpack_later=False, p_append_ts=False, p_sample_type='FLOAT')[source]

Bases: obci.analysis.obci_signal_processing.signal.data_generic_write_proxy.DataGenericWriteProxy

Open p_file_name file in p_dir_path directory.

data_received(p_data)[source]

p_data must be protobuf SampleVector message, but serialized to string. Data is stored in temp buffer, once a while the buffer is flushed to a file.

finish_saving()[source]

Close the file, return a tuple - file`s name and number of samples.

obci.analysis.obci_signal_processing.signal.data_generic_write_proxy module

class obci.analysis.obci_signal_processing.signal.data_generic_write_proxy.DataGenericWriteProxy(p_file_path, p_unpack_later=False, p_append_ts=False, p_sample_type='FLOAT')[source]

Bases: object

A class representing data file. It should be an abstraction for saving raw data into a file. Decision whether save signal to one or few separate files should be made here and should be transparent regarding below interface - the interface should remain untouched. Public interface: - finish_saving() - closes data file and return its path, - data_received(p_data_sample) - gets and saves next sample of signal

Open p_file_name file in p_dir_path directory.

data_received(p_data)[source]
finish_saving()[source]

Close the file, return a tuple - file`s name and number of samples.

set_data_len(ln, sm)[source]

Set length of one unit of protobuf data stored in temporary file. It`ll be useful in finish_saving() while extracting data from the file.

set_first_sample_timestamp(timestamp)[source]

obci.analysis.obci_signal_processing.signal.data_raw_write_proxy module

class obci.analysis.obci_signal_processing.signal.data_raw_write_proxy.DataRawWriteProxy(p_file_path, p_unpack_later=False, p_append_ts=False, p_sample_type='FLOAT')[source]

Bases: obci.analysis.obci_signal_processing.signal.data_generic_write_proxy.DataGenericWriteProxy

Open p_file_name file in p_dir_path directory.

data_received(p_data)[source]

obci.analysis.obci_signal_processing.signal.data_read_proxy module

class obci.analysis.obci_signal_processing.signal.data_read_proxy.DataReadProxy(p_file_path, sample_type='FLOAT')[source]

Bases: object

finish_reading()[source]
get_all_values(p_channels_num=1)[source]
get_next_value()[source]

Return next value from data file (as python float). Close data file and raise NoNextValue exception if eof.

get_next_values(p_num)[source]

Return next p_num values from data file (as numpy array). Close data file and raise NoNextValue exception if eof.

goto_value(p_value_no)[source]

Set the engine, so that nex ‘get_next_value’ call will return value number p_value_no+1. Eg. if p_value_no == 0, calling get_next_value will return first value. if p_value_no == 11, calling get_next_value will return 12-th value.

start_reading()[source]

obci.analysis.obci_signal_processing.signal.data_simple_write_proxy module

class obci.analysis.obci_signal_processing.signal.data_simple_write_proxy.DataSimpleWriteProxy(p_file_path, p_unpack_later=False, p_append_ts=False, p_sample_type='FLOAT')[source]

Bases: obci.analysis.obci_signal_processing.signal.data_generic_write_proxy.DataGenericWriteProxy

Open p_file_name file in p_dir_path directory.

data_received(p_data)[source]

obci.analysis.obci_signal_processing.signal.data_write_proxy module

obci.analysis.obci_signal_processing.signal.data_write_proxy.get_proxy(file_path, append_ts=False, use_tmp_file=False, use_own_buffer=False, format='FLOAT')[source]

obci.analysis.obci_signal_processing.signal.generic_info_file_proxy module

class obci.analysis.obci_signal_processing.signal.generic_info_file_proxy.GenericInfoFileReadProxy(p_file_path)[source]

Bases: object

Info file reader.

...

get_param(p_param_name)[source]

Return parameter value for p_param_name. Raise NoParameter exception if p_param_name parameters was not found.

get_params()[source]
start_reading()[source]

Load xml to memory.

class obci.analysis.obci_signal_processing.signal.generic_info_file_proxy.GenericInfoFileWriteProxy(p_file_path)[source]

Bases: object

A class that is responsible for implementing logics of openbci signal parameters storage in info file. The file is supposed to be compatible with signalml2.0. By now it isn`t:) The class should be separated from all multiplexer-stuff logics. InfoFileProxy represents a process of saving one signal parameters. Init method gets a dictionary of signal params in format understadable by InfoFileProxy. See __init__ metod for more details. Wanna extend info file with a new param? See __init__ method for more details. Public interface: - finish_saving()

Init xml structure.

finish_saving(p_signal_params={})[source]

Write xml_doc to the file, return the file`s path. Arguments: - p_file_name - a name of to-be-created info file - p_dir_path - a dir-path where p_file_name is to be created - p_signal_params - a dictionary of all signal parameters that should be stored in info file.

What is the logics flow of analysing parameters? p_signal_params has keys representing signal parameters identificators. self._create_tags_controls creates a dictionary with the same keys, values are functions being ‘able’ to understand particular param values. Method self._process_signal_params, for every key in p_signal_params fires corresponding function from self._tags_control, giving as argument value from p_signal_params...

So, how can I implement a new parameter usage? Let`s say that the parameter is signal`s colour. Let`s call it ‘color’, values are strings. p_signal_params should contain a pair ‘color’ -> ‘color_value’. 1. Create function self._set_color(self, p_color) 2. Add pair ‘color’ -> self._set_color to self._tags_control in self._create_tags_control() 3. Implement the function so that it creates xml element for color parameter and appends it to self._xml_root. For simple params (with one value) you can fire self._set_simple_tag(‘color’, ‘color_value’).

set_attributes(p_attrs_dict)[source]

For every pair key-> value in p_attrs_dict create tag. The type of tag depends on self._tags_control.

class obci.analysis.obci_signal_processing.signal.generic_info_file_proxy.OpenBciDocument[source]

Bases: xml.dom.minidom.Document, object

Abstract class for future developement, used in proxies.

obci.analysis.obci_signal_processing.signal.generic_info_file_proxy.TAGS_DEFINITIONS = {'number_of_samples': ('simple', ['sampleCount']), 'page_size': ('simple', ['pageSize']), 'calibration': ('simple', ['calibration']), 'number_of_channels': ('simple', ['channelCount']), 'channels_names': ('list', ['channelLabels', 'label']), 'file': ('simple', ['sourceFileName']), 'channels_numbers': ('list', ['channelNumbers', 'number']), 'blocks_per_page': ('simple', ['blocksPerPage']), 'channels_gains': ('list', ['calibrationGain', 'calibrationParam']), 'export_date': ('simple', ['exportDate']), 'first_sample_timestamp': ('simple', ['firstSampleTimestamp']), 'sampling_frequency': ('simple', ['samplingFrequency']), 'byte_order': ('simple', ['byteOrder']), 'sample_type': ('simple', ['sampleType']), 'channels_offsets': ('list', ['calibrationOffset', 'calibrationParam']), 'export_file_name': ('simple', ['exportFileName']), 'file_format': ('list', ['sourceFileFormat', 'rawSignalInfo'])}

**For every tag we have entry in format* –* –

‘tag_universal_name’: (tag_type(‘list’ or ‘simple’),
list of tag translations (one element for ‘simple’
two elements for ‘list’)

)

obci.analysis.obci_signal_processing.signal.info_file_proxy module

Module implements specific info file manifest for svarog.

What is different from info_file_proxy:

  • root name (here we haver rs:rawSignal and xmlns)
  • tags namespace (here every tag has rs: previx)
  • tags ordering (svarog requires specific tags ordering)
  • additional tags (svarog requires only and only tags described in SvarogFileWriteProxy.ORDER)
class obci.analysis.obci_signal_processing.signal.info_file_proxy.InfoDocument[source]

Bases: obci.analysis.obci_signal_processing.signal.generic_info_file_proxy.OpenBciDocument

Subclass xml_document, so that we can add rs: prefix before every tag name.

createElement(tagName)[source]

Redefine the method so that every added tag has ‘rs:’ prefix.

prefix = 'rs:'
class obci.analysis.obci_signal_processing.signal.info_file_proxy.InfoFileReadProxy(p_file_path)[source]

Bases: obci.analysis.obci_signal_processing.signal.generic_info_file_proxy.GenericInfoFileReadProxy

Sublassed read proxy - every get_ method need to be subclassed to add rs: prefix before tag name.

...

class obci.analysis.obci_signal_processing.signal.info_file_proxy.InfoFileWriteProxy(p_file_path)[source]

Bases: obci.analysis.obci_signal_processing.signal.generic_info_file_proxy.GenericInfoFileWriteProxy

Subclass write proxy - ensure that every element has rs: prefix, ensure tags ordering, ensure tags required by svarog.

Init xml structure.

ORDER = ['rs:exportFileName', 'rs:sourceFileName', 'rs:sourceFileFormat', 'rs:samplingFrequency', 'rs:channelCount', 'rs:sampleCount', 'rs:calibration', 'rs:sampleType', 'rs:byteOrder', 'rs:pageSize', 'rs:blocksPerPage', 'rs:channelLabels', 'rs:calibrationGain', 'rs:calibrationOffset', 'rs:firstSampleTimestamp']

obci.analysis.obci_signal_processing.signal.read_data_source module

class obci.analysis.obci_signal_processing.signal.read_data_source.DataSource[source]

Bases: object

get_samples(p_from=None, p_len=None)[source]
iter_samples()[source]
class obci.analysis.obci_signal_processing.signal.read_data_source.FileDataSource(p_file, p_num_of_channels, p_sample_type='FLOAT')[source]

Bases: obci.analysis.obci_signal_processing.signal.read_data_source.DataSource

get_samples(p_from=None, p_len=None)[source]
iter_samples()[source]
set_samples(samples, copy)[source]
class obci.analysis.obci_signal_processing.signal.read_data_source.MemoryDataSource(p_data=None, p_copy=True, p_sample_source='FLOAT')[source]

Bases: obci.analysis.obci_signal_processing.signal.read_data_source.DataSource

get_samples(p_from=None, p_len=None)[source]

Always success. If p_from or p_len is somehow out of range return an empty array of samples

iter_samples()[source]
set_sample(p_sample_index, p_sample)[source]

Throws: - IndexError if p_sample_index is out of range - ValueError if len(p_sample) doesn`t fit number_of_channels

set_samples(p_data, p_copy=True)[source]

obci.analysis.obci_signal_processing.signal.read_info_source module

class obci.analysis.obci_signal_processing.signal.read_info_source.FileInfoSource(p_file)[source]

Bases: obci.analysis.obci_signal_processing.signal.read_info_source.InfoSource

get_param(p_key)[source]
get_params()[source]
reset_params()[source]
set_param(k, v)[source]
set_params(p_params)[source]
update_params(p_params)[source]
class obci.analysis.obci_signal_processing.signal.read_info_source.InfoSource[source]

Bases: object

get_param(p_key)[source]
get_params()[source]
reset_params()[source]
set_param(k, v)[source]
set_params(p_params)[source]
update_params(p_params)[source]
class obci.analysis.obci_signal_processing.signal.read_info_source.MemoryInfoSource(p_params={})[source]

Bases: obci.analysis.obci_signal_processing.signal.read_info_source.InfoSource

get_param(p_key)[source]
get_params()[source]
reset_params()[source]
set_param(p_key, p_value)[source]
set_params(p_params)[source]
update_params(p_params)[source]

obci.analysis.obci_signal_processing.signal.signal_constants module

obci.analysis.obci_signal_processing.signal.signal_exceptions module

exception obci.analysis.obci_signal_processing.signal.signal_exceptions.BadSampleFormat[source]

Bases: Exception

An exception that should be raised when data sample has arrived and it is not float (struct is unable to pack it).

exception obci.analysis.obci_signal_processing.signal.signal_exceptions.NoNextTag[source]

Bases: Exception

Raised when end of tag file is met in self.get_next_tag().

exception obci.analysis.obci_signal_processing.signal.signal_exceptions.NoNextValue[source]

Bases: Exception

Raised when end of data file is met in self.get_next_value().

exception obci.analysis.obci_signal_processing.signal.signal_exceptions.NoParameter(p_param)[source]

Bases: Exception

Raised when a ther is a requrest for non-existing parameter in info file.

obci.analysis.obci_signal_processing.signal.signal_logging module

Module defines a single method get_logger that returns logger with set logging level. Change loggin.INFO lines to change logging level.

obci.analysis.obci_signal_processing.signal.signal_logging.get_logger(p_name, p_level='info')[source]

Return logger with p_name as name. And logging level p_level. p_level should be in (starting with the most talkactive): ‘debug’, ‘info’, ‘warning’, ‘error’, ‘critical’.

Module contents