Data containers¶
eitprocessing.datahandling.sequence.Sequence
dataclass
¶
Sequence(
label: str | None = None,
name: str | None = None,
description: str = "",
eit_data: DataCollection[EITData] = lambda: DataCollection(EITData)(),
continuous_data: DataCollection[ContinuousData] = lambda: DataCollection(
ContinuousData
)(),
sparse_data: DataCollection[SparseData] = lambda: DataCollection(
SparseData
)(),
interval_data: DataCollection[IntervalData] = lambda: DataCollection(
IntervalData
)(),
)
Sequence of timepoints containing respiratory data.
A Sequence object is a representation of data points over time. These data can consist of any combination of EIT
frames (EITData
), waveform data (ContinuousData
) from different sources, or individual events (SparseData
)
occurring at any given timepoint.
A Sequence can consist of an entire measurement, a section of a measurement, a single breath, or even a portion of a
breath. A Sequence can consist of multiple sets of each type of data from the same time-points or can be a single
measurement from just one source.
A Sequence can be split up into separate sections of a measurement or multiple (similar) Sequence objects can be merged together to form a single Sequence.
PARAMETER | DESCRIPTION |
---|---|
label
|
Computer readable naming of the instance.
TYPE:
|
name
|
Human readable naming of the instance.
TYPE:
|
description
|
Human readable extended description of the data.
TYPE:
|
eit_data
|
Collection of one or more sets of EIT data frames.
TYPE:
|
continuous_data
|
Collection of one or more sets of continuous data points.
TYPE:
|
sparse_data
|
Collection of one or more sets of individual data points.
TYPE:
|
t
property
¶
t: TimeIndexer
select_by_index
¶
select_by_index(
start: int | None = None,
end: int | None = None,
newlabel: str | None = None,
) -> Self
De facto implementation of the __getitem__
function.
This function can also be called directly to add a label to the sliced object. Otherwise a default label describing the slice and original object is attached.
isequivalent
¶
Test whether the data structure between two objects are equivalent.
Equivalence, in this case means that objects are compatible e.g. to be merged. Data content can vary, but e.g. the category of data (e.g. airway pressure, flow, tidal volume) and unit, etc., must match.
PARAMETER | DESCRIPTION |
---|---|
other
|
object that will be compared to self.
TYPE:
|
raise_
|
sets this method's behavior in case of non-equivalence. If
True, an
TYPE:
|
RAISES | DESCRIPTION |
---|---|
EquivalenceError
|
if |
RETURNS | DESCRIPTION |
---|---|
bool
|
bool describing result of equivalence comparison. |
concatenate
classmethod
¶
Create a merge of two Sequence objects.
select_by_time
¶
select_by_time(
start_time: float | None = None,
end_time: float | None = None,
start_inclusive: bool = True,
end_inclusive: bool = False,
label: str | None = None,
name: str | None = None,
description: str = "",
) -> Self
Return a sliced version of the Sequence.
See SelectByTime.select_by_time()
.
eitprocessing.datahandling.eitdata.EITData
dataclass
¶
EITData(
path: str | Path | list[Path | str],
nframes: int,
time: ndarray,
sample_frequency: float,
vendor: Vendor,
label: str | None = None,
name: str | None = None,
*,
pixel_impedance: ndarray
)
Container for EIT impedance data.
This class holds the pixel impedance from an EIT measurement, as well as metadata describing the measurement. The class is meant to hold data from (part of) a singular continuous measurement.
This class can't be initialized directly. Instead, use load_eit_data(<path>, vendor=<vendor>)
to load data from
disk.
PARAMETER | DESCRIPTION |
---|---|
path
|
The path of list of paths of the source from which data was derived. |
nframes
|
Number of frames.
TYPE:
|
time
|
The time of each frame (since start measurement).
TYPE:
|
sample_frequency
|
The (average) frequency at which the frames are collected, in Hz.
TYPE:
|
vendor
|
The vendor of the device the data was collected with.
TYPE:
|
label
|
Computer readable label identifying this dataset.
TYPE:
|
name
|
Human readable name for the data.
TYPE:
|
pixel_impedance
|
Impedance values for each pixel at each frame.
TYPE:
|
t
property
¶
t: TimeIndexer
select_by_time
¶
select_by_time(
start_time: float | None = None,
end_time: float | None = None,
start_inclusive: bool = False,
end_inclusive: bool = False,
label: str | None = None,
) -> Self
Get a shortened copy of the object, starting from start_time and ending at end_time.
Given a start and end time stamp (i.e. its value, not its index), return a slice of the original object, which must contain a time axis.
PARAMETER | DESCRIPTION |
---|---|
start_time
|
first time point to include. Defaults to first frame of sequence.
TYPE:
|
end_time
|
last time point. Defaults to last frame of sequence.
TYPE:
|
start_inclusive
|
TYPE:
|
label
|
Description. Defaults to None, which will create a label based on the original object label and the frames by which it is sliced.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
if |
ValueError
|
if time stamps are not sorted. |
RETURNS | DESCRIPTION |
---|---|
Self
|
A shortened copy of the object. |
select_by_index
¶
select_by_index(
start: int | None = None,
end: int | None = None,
newlabel: str | None = None,
) -> Self
De facto implementation of the __getitem__
function.
This function can also be called directly to add a label to the sliced object. Otherwise a default label describing the slice and original object is attached.
isequivalent
¶
Test whether the data structure between two objects are equivalent.
Equivalence, in this case means that objects are compatible e.g. to be merged. Data content can vary, but e.g. the category of data (e.g. airway pressure, flow, tidal volume) and unit, etc., must match.
PARAMETER | DESCRIPTION |
---|---|
other
|
object that will be compared to self.
TYPE:
|
raise_
|
sets this method's behavior in case of non-equivalence. If
True, an
TYPE:
|
RAISES | DESCRIPTION |
---|---|
EquivalenceError
|
if |
RETURNS | DESCRIPTION |
---|---|
bool
|
bool describing result of equivalence comparison. |
ensure_path_list
staticmethod
¶
Return the path or paths as a list.
The path of any EITData object can be a single str/Path or a list of str/Path objects. This method returns a list of Path objects given either a str/Path or list of str/Paths.
eitprocessing.datahandling.continuousdata.ContinuousData
dataclass
¶
ContinuousData(
label: str,
name: str,
unit: str,
category: str,
description: str = "",
parameters: dict[str, Any] = dict(),
derived_from: Any | list[Any] = list(),
*,
time: ndarray,
values: ndarray,
sample_frequency: float | None = None
)
Container for data with a continuous time axis.
Continuous data is assumed to be sequential (i.e. a single data point at each time point, sorted by time) and continuously measured/created at a fixed sampling frequency. However, a fixed interval between consecutive time points is not enforced to account for floating point arithmetic, devices with imperfect sampling frequencies, and other sources of variation.
PARAMETER | DESCRIPTION |
---|---|
label
|
Computer readable naming of the instance.
TYPE:
|
name
|
Human readable naming of the instance.
TYPE:
|
unit
|
Unit of the data, if applicable.
TYPE:
|
category
|
Category the data falls into, e.g. 'airway pressure'.
TYPE:
|
description
|
Human readable extended description of the data.
TYPE:
|
parameters
|
Parameters used to derive this data. |
derived_from
|
Traceback of intermediates from which the current data was derived. |
values
|
Data points.
TYPE:
|
t
property
¶
t: TimeIndexer
loaded
property
¶
loaded: bool
Return whether the data was loaded from disk, or derived from elsewhere.
select_by_time
¶
select_by_time(
start_time: float | None = None,
end_time: float | None = None,
start_inclusive: bool = False,
end_inclusive: bool = False,
label: str | None = None,
) -> Self
Get a shortened copy of the object, starting from start_time and ending at end_time.
Given a start and end time stamp (i.e. its value, not its index), return a slice of the original object, which must contain a time axis.
PARAMETER | DESCRIPTION |
---|---|
start_time
|
first time point to include. Defaults to first frame of sequence.
TYPE:
|
end_time
|
last time point. Defaults to last frame of sequence.
TYPE:
|
start_inclusive
|
TYPE:
|
label
|
Description. Defaults to None, which will create a label based on the original object label and the frames by which it is sliced.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
if |
ValueError
|
if time stamps are not sorted. |
RETURNS | DESCRIPTION |
---|---|
Self
|
A shortened copy of the object. |
select_by_index
¶
select_by_index(
start: int | None = None,
end: int | None = None,
newlabel: str | None = None,
) -> Self
De facto implementation of the __getitem__
function.
This function can also be called directly to add a label to the sliced object. Otherwise a default label describing the slice and original object is attached.
isequivalent
¶
Test whether the data structure between two objects are equivalent.
Equivalence, in this case means that objects are compatible e.g. to be merged. Data content can vary, but e.g. the category of data (e.g. airway pressure, flow, tidal volume) and unit, etc., must match.
PARAMETER | DESCRIPTION |
---|---|
other
|
object that will be compared to self.
TYPE:
|
raise_
|
sets this method's behavior in case of non-equivalence. If
True, an
TYPE:
|
RAISES | DESCRIPTION |
---|---|
EquivalenceError
|
if |
RETURNS | DESCRIPTION |
---|---|
bool
|
bool describing result of equivalence comparison. |
copy
¶
copy(
label: str,
*,
name: str | None = None,
unit: str | None = None,
description: str | None = None,
parameters: dict | None = None
) -> Self
Create a copy.
Whenever data is altered, it should probably be copied first. The alterations should then be made in the copy.
derive
¶
Create a copy deriving data from values attribute.
PARAMETER | DESCRIPTION |
---|---|
label
|
New label for the derived object.
TYPE:
|
function
|
Function that takes the values and returns the derived values.
TYPE:
|
func_args
|
Arguments to pass to function, if any.
TYPE:
|
**kwargs
|
Values for changed attributes of derived object.
DEFAULT:
|
Example:
def convert_data(x, add=None, subtract=None, multiply=None, divide=None):
if add:
x += add
if subtract:
x -= subtract
if multiply:
x *= multiply
if divide:
x /= divide
return x
data = ContinuousData(
name="Lung volume (in mL)", label="volume_mL", unit="mL", category="volume", values=some_loaded_data
)
derived = data.derive("volume_L", convert_data, {"divide": 1000}, name="Lung volume (in L)", unit="L")
lock
¶
lock(*attr: str) -> None
Lock attributes, essentially rendering them read-only.
Locked attributes cannot be overwritten. Attributes can be unlocked using unlock()
.
PARAMETER | DESCRIPTION |
---|---|
*attr
|
any number of attributes can be passed here, all of which will be locked. Defaults to "values".
TYPE:
|
Examples:
unlock
¶
unlock(*attr: str) -> None
Unlock attributes, rendering them editable.
Locked attributes cannot be overwritten, but can be unlocked with this function to make them editable.
PARAMETER | DESCRIPTION |
---|---|
*attr
|
any number of attributes can be passed here, all of which will be unlocked. Defaults to "values".
TYPE:
|
Examples:
>>> # lock the `values` attribute of `data`
>>> data.lock()
>>> data.values = [1, 2, 3] # will result in an AttributeError
>>> data.values[0] = 1 # will result in a RuntimeError
>>> data.unlock()
>>> data.values = [1, 2, 3]
>>> print(data.values)
[1,2,3]
>>> data.values[0] = 1 # will result in a RuntimeError
>>> print(data.values)
1
eitprocessing.datahandling.sparsedata.SparseData
dataclass
¶
SparseData(
label: str,
name: str,
unit: str | None,
category: str,
time: ndarray,
description: str = "",
parameters: dict[str, Any] = dict(),
derived_from: list[Any] = list(),
values: Any | None = None,
)
Container for data related to individual time points.
Sparse data is data for which the time points are not necessarily evenly spaced. Data can consist time-value pairs or only time points.
Sparse data differs from interval data in that each data points is associated with a single time point rather than a time range.
Examples are data points at end of inspiration/end of expiration (e.g. tidal volume, end-expiratoy lung impedance) or detected time points (e.g. QRS complexes).
PARAMETER | DESCRIPTION |
---|---|
label
|
Computer readable name.
TYPE:
|
name
|
Human readable name.
TYPE:
|
unit
|
Unit of the data, if applicable.
TYPE:
|
category
|
Category the data falls into, e.g. 'detected r peak'.
TYPE:
|
description
|
Human readable extended description of the data.
TYPE:
|
parameters
|
Parameters used to derive the data. |
derived_from
|
Traceback of intermediates from which the current data was derived. |
values
|
List or array of values. These van be numeric data, text or Python objects.
TYPE:
|
t
property
¶
t: TimeIndexer
select_by_time
¶
select_by_time(
start_time: float | None = None,
end_time: float | None = None,
start_inclusive: bool = False,
end_inclusive: bool = False,
label: str | None = None,
) -> Self
Get a shortened copy of the object, starting from start_time and ending at end_time.
Given a start and end time stamp (i.e. its value, not its index), return a slice of the original object, which must contain a time axis.
PARAMETER | DESCRIPTION |
---|---|
start_time
|
first time point to include. Defaults to first frame of sequence.
TYPE:
|
end_time
|
last time point. Defaults to last frame of sequence.
TYPE:
|
start_inclusive
|
TYPE:
|
label
|
Description. Defaults to None, which will create a label based on the original object label and the frames by which it is sliced.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
TypeError
|
if |
ValueError
|
if time stamps are not sorted. |
RETURNS | DESCRIPTION |
---|---|
Self
|
A shortened copy of the object. |
select_by_index
¶
select_by_index(
start: int | None = None,
end: int | None = None,
newlabel: str | None = None,
) -> Self
De facto implementation of the __getitem__
function.
This function can also be called directly to add a label to the sliced object. Otherwise a default label describing the slice and original object is attached.
isequivalent
¶
Test whether the data structure between two objects are equivalent.
Equivalence, in this case means that objects are compatible e.g. to be merged. Data content can vary, but e.g. the category of data (e.g. airway pressure, flow, tidal volume) and unit, etc., must match.
PARAMETER | DESCRIPTION |
---|---|
other
|
object that will be compared to self.
TYPE:
|
raise_
|
sets this method's behavior in case of non-equivalence. If
True, an
TYPE:
|
RAISES | DESCRIPTION |
---|---|
EquivalenceError
|
if |
RETURNS | DESCRIPTION |
---|---|
bool
|
bool describing result of equivalence comparison. |
eitprocessing.datahandling.intervaldata.IntervalData
dataclass
¶
IntervalData(
label: str,
name: str,
unit: str | None,
category: str,
intervals: list[Interval | tuple[float, float]],
values: list[Any] | None = None,
parameters: dict[str, Any] = dict(),
derived_from: list[Any] = list(),
description: str = "",
default_partial_inclusion: bool = False,
)
Container for interval data existing over a period of time.
Interval data is data that consists for a given time interval. Examples are a ventilator setting (e.g. end-expiratory pressure), the position of a patient, a maneuver (end-expiratory hold) being performed, detected periods in the data, etc.
Interval data consists of a number of intervals that may or may not have values associated with them.
Examples of IntervalData with associated values are certain ventilator settings (e.g. end-expiratory pressure) and the position of a patient. Examples of IntervalData without associated values are indicators of maneouvres (e.g. a breath hold) or detected occurences (e.g. a breath).
Interval data can be selected by time through the select_by_time(start_time, end_time)
method. Alternatively,
t[start_time:end_time]
can be used.
PARAMETER | DESCRIPTION |
---|---|
label
|
Computer readable label identifying this dataset.
TYPE:
|
name
|
Human readable name for the data.
TYPE:
|
unit
|
The unit of the data, if applicable.
TYPE:
|
category
|
Category the data falls into, e.g. 'breath'.
TYPE:
|
intervals
|
A list of intervals (tuples containing a start time and end time). |
values
|
An optional list of values associated with each interval. |
parameters
|
Parameters used to derive the data. |
derived_from
|
Traceback of intermediates from which the current data was derived. |
description
|
Extended human readible description of the data.
TYPE:
|
default_partial_inclusion
|
Whether to include a trimmed version of an interval when selecting data
TYPE:
|
t
property
¶
t: TimeIndexer
select_by_index
¶
select_by_index(
start: int | None = None,
end: int | None = None,
newlabel: str | None = None,
) -> Self
De facto implementation of the __getitem__
function.
This function can also be called directly to add a label to the sliced object. Otherwise a default label describing the slice and original object is attached.
isequivalent
¶
Test whether the data structure between two objects are equivalent.
Equivalence, in this case means that objects are compatible e.g. to be merged. Data content can vary, but e.g. the category of data (e.g. airway pressure, flow, tidal volume) and unit, etc., must match.
PARAMETER | DESCRIPTION |
---|---|
other
|
object that will be compared to self.
TYPE:
|
raise_
|
sets this method's behavior in case of non-equivalence. If
True, an
TYPE:
|
RAISES | DESCRIPTION |
---|---|
EquivalenceError
|
if |
RETURNS | DESCRIPTION |
---|---|
bool
|
bool describing result of equivalence comparison. |
select_by_time
¶
select_by_time(
start_time: float | None = None,
end_time: float | None = None,
partial_inclusion: bool | None = None,
newlabel: str | None = None,
) -> Self
Create a new copy of the object, selecting data between start_time and end_time.
This function returns a shortened copy of the object, containing data from the specified start_time to end_time.
If partial_inclusion
is set to True
, any intervals that overlap with the start_time or end_time are included
in the selection, and their times are adjusted to fit within the specified range. If partial_inclusion
is
False
, intervals that overlap the start or end times are excluded from the selection.
For example:
- Set partial_inclusion
to True
for cases like "set_driving_pressure" where you want to include settings
that were active before the start_time.
- Set partial_inclusion
to False
for cases like "detected_breaths" where you want to exclude partial data
that doesn't fully fit within the time range.
Note that the end_time is always included in the selection if it is present in the original object.
PARAMETER | DESCRIPTION |
---|---|
start_time
|
The earliest time point to include in the copy.
TYPE:
|
end_time
|
The latest time point to include in the copy.
TYPE:
|
partial_inclusion
|
Whether to include intervals that overlap with the start_time or end_time.
TYPE:
|
newlabel
|
A new label for the copied object.
TYPE:
|
eitprocessing.datahandling.datacollection.DataCollection
¶
DataCollection(data_type: type[V], *args, **kwargs)
A collection of a single type of data with unique labels.
A DataCollection functions largely as a dictionary, but requires a data_type argument, which must be one of the data containers existing in this package. When adding an item to the collection, the type of the value must match the data_type of the collection. Furthermore, the key has to match the attribute 'label' attached to the value.
The convenience method add()
adds an item by setting the key to value.label
.
PARAMETER | DESCRIPTION |
---|---|
data_type
|
the data container stored in this collection.
TYPE:
|
t
property
¶
t: TimeIndexer
isequivalent
¶
Test whether the data structure between two objects are equivalent.
Equivalence, in this case means that objects are compatible e.g. to be merged. Data content can vary, but e.g. the category of data (e.g. airway pressure, flow, tidal volume) and unit, etc., must match.
PARAMETER | DESCRIPTION |
---|---|
other
|
object that will be compared to self.
TYPE:
|
raise_
|
sets this method's behavior in case of non-equivalence. If
True, an
TYPE:
|
RAISES | DESCRIPTION |
---|---|
EquivalenceError
|
if |
RETURNS | DESCRIPTION |
---|---|
bool
|
bool describing result of equivalence comparison. |
add
¶
add(*item: V, overwrite: bool = False) -> None
Add one or multiple item(s) to the collection using the item label as the key.
get_loaded_data
¶
Return all data that was directly loaded from disk.
get_data_derived_from
¶
Return all data that was derived from a specific source.
get_derived_data
¶
Return all data that was derived from any source.
concatenate
¶
Concatenate this collection with an equivalent collection.
Each item of self of concatenated with the item of other with the same key.
eitprocessing.datahandling.breath.Breath
dataclass
¶
Represents a breath with a start, middle and end time.