LTAFDB

class torch_ecg.databases.LTAFDB(db_dir: str | bytes | PathLike | None = None, working_dir: str | bytes | PathLike | None = None, verbose: int = 1, **kwargs: Any)[source]

Bases: PhysioNetDataBase

Long Term AF Database

ABOUT

  1. contains 84 long-term ECG recordings of subjects with paroxysmal or sustained atrial fibrillation

  2. each record contains two simultaneously recorded ECG signals digitized at 128 Hz

  3. records have duration 24 - 25 hours

  4. qrs annotations (.qrs files) were produced by an automated QRS detector, in which detected beats (including occasional ventricular ectopic beats) are labelled “N”, detected artifacts are labelled “|”, and AF terminations are labelled “T” (inserted manually)

  5. atr annotations (.atr files) were obtained by manual review of the output of an automated ECG analysis system; in these annotation files, all detected beats are labelled by type (‘”’, “+”, “A”, “N”, “Q”, “V”), and rhythm changes (” Aux”, “(AB”, “(AFIB”, “(B”, “(IVR”, “(N”, “(SBR”, “(SVTA”, “(T”, “(VT”, “M”, “MB”, “MISSB”, “PSE”) are also annotated

  6. Webpage of the database on PhysioNet [1]. Paper describing the database [2].

Note

  1. both channels of the signals have name “ECG”

  2. the automatically generated qrs annotations (.qrs files) contains NO rhythm annotations

  3. aux_note of .atr files of all but one (“64”) record start with valid rhythms, all but one end with “” (“30” ends with “ Aux”)

  4. for more statistics on the whole database, see [ref 3](#ref3)

Usage

  1. Atrial fibrillation (AF) detection

  2. (3 or 4) beat type classification

  3. Rhythm classification

References

Citation

10.1093/europace/eum096 10.13026/C2QG6Q

Parameters:
  • db_dir (path-like, optional) – Storage path of the database. If not specified, data will be fetched from Physionet.

  • working_dir (path-like, optional) – Working directory, to store intermediate files and log files.

  • verbose (int, default 1) – Level of logging verbosity.

  • kwargs (dict, optional) – Auxilliary key word arguments.

property database_info: DataBaseInfo

The DataBaseInfo object of the database.

get_subject_id(rec: str | int) int[source]

Attach a unique subject ID for the record.

Parameters:

rec (str or int) – Record name or index of the record in all_records.

Returns:

Subject ID associated with the record.

Return type:

int

load_ann(rec: str | int, sampfrom: int | None = None, sampto: int | None = None, rhythm_format: str = 'interval', beat_format: str = 'beat', keep_original: bool = False) dict[source]

Load rhythm and beat annotations of the record.

Rhythm and beat annotations are stored in the aux_note, symbol attributes of corresponding annotation files. NOTE that qrs annotations (.qrs files) do NOT contain any rhythm annotations.

Parameters:
  • rec (str or int) – Record name or index of the record in all_records.

  • sampfrom (int, optional) – Start index of the annotations to be loaded.

  • sampto (int, optional) – End index of the annotations to be loaded.

  • rhythm_format ({"interval", "mask"}, optional) – Format of returned annotation, by default “interval”, case insensitive.

  • beat_format ({"beat", "dict"}, optional) – Format of returned annotation, by default “beat”, case insensitive.

  • keep_original (bool, default False) – If True, indices will keep the same with the annotation file, otherwise subtract sampfrom if specified.

Returns:

ann – The annotations of rhythm and beat, with rhythm annotatoins in the format of intervals, or mask; beat annotations in the format of dict or BeatAnn.

Return type:

dict

Note

At head and tail of the record, segments named “NOISE” were added.

load_beat_ann(rec: str | int, sampfrom: int | None = None, sampto: int | None = None, beat_format: str = 'beat', keep_original: bool = False) Dict[str, ndarray] | List[BeatAnn][source]

Load beat annotations of the record.

Beat annotations are stored in the symbol attribute of corresponding annotation files.

Parameters:
  • rec (str or int) – Record name or index of the record in all_records.

  • sampfrom (int, optional) – Start index of the annotations to be loaded.

  • sampto (int, optional) – End index of the annotations to be loaded.

  • beat_format ({"beat", "dict"}, optional) – Format of returned annotation, by default “beat”, case insensitive.

  • keep_original (bool, default False) – If True, indices will keep the same with the annotation file, otherwise subtract sampfrom if specified.

Returns:

ann – Locations (indices) of the all the beat types (“A”, “N”, “Q”, “V”).

Return type:

dict or list

load_data(rec: str | int, leads: int | List[int] | None = None, sampfrom: int | None = None, sampto: int | None = None, data_format: str = 'channel_first', units: str = 'mV', fs: Real | None = None, return_fs: bool = False) ndarray | Tuple[ndarray, Real][source]

Load physical (converted from digital) ECG data, which is more understandable for humans; or load digital signal directly.

Parameters:
  • rec (str or int) – Record name or index of the record in all_records.

  • leads (str or int or Sequence[str] or Sequence[int], optional) – The leads of the ECG data to load. None or “all” for all leads.

  • sampfrom (int, optional) – Start index of the data to be loaded.

  • sampto (int, optional) – End index of the data to be loaded.

  • data_format (str, default "channel_first") – Format of the ECG data, “channel_last” (alias “lead_last”), or “channel_first” (alias “lead_first”), or “flat” (alias “plain”) which is valid only when leads is a single lead

  • units (str or None, default "mV") – Units of the output signal, can also be “μV” (aliases “uV”, “muV”). None for digital data, without digital-to-physical conversion.

  • fs (numbers.Real, optional) – Sampling frequency of the output signal. If not None, the loaded data will be resampled to this frequency; if None, self.fs will be used if available and not None; otherwise, the original sampling frequency will be used.

  • return_fs (bool, default False) – Whether to return the sampling frequency of the output signal.

Returns:

  • data (numpy.ndarray) – The ECG data loaded from the record, with given units and data_format.

  • data_fs (numbers.Real, optional) – Sampling frequency of the output signal. Returned if return_fs is True.

load_rhythm_ann(rec: str | int, sampfrom: int | None = None, sampto: int | None = None, rhythm_format: str = 'interval', keep_original: bool = False) Dict[str, list] | ndarray[source]

Load rhythm annotations of the record.

Rhythm annotations are stored in the aux_note attribute of corresponding annotation files. NOTE that qrs annotations (.qrs files) do NOT contain any rhythm annotations.

Parameters:
  • rec (str or int) – Record name or index of the record in all_records.

  • sampfrom (int, optional) – Start index of the annotations to be loaded.

  • sampto (int, optional) – End index of the annotations to be loaded.

  • rhythm_format ({"interval", "mask"}, optional) – Format of returned annotation, by default “interval”, case insensitive.

  • keep_original (bool, default False) – If True, indices will keep the same with the annotation file, otherwise subtract sampfrom if specified.

Returns:

ann – Annotations in the format of intervals or mask.

Return type:

dict or numpy.ndarray

Note

At head and tail of the record, segments named “NOISE” were added.

load_rpeak_indices(rec: str | int, sampfrom: int | None = None, sampto: int | None = None, use_manual: bool = True, keep_original: bool = False) ndarray[source]

Load rpeak indices of the record.

Rpeak indices, or equivalently qrs complex locations, are stored in the symbol attribute of corresponding annotation files, regardless of their beat types.

Parameters:
  • rec (str or int) – Record name or index of the record in all_records.

  • sampfrom (int, optional) – Start index of the annotations to be loaded.

  • sampto (int, optional) – End index of the annotations to be loaded.

  • use_manual (bool, default True) – If True, manually annotated beat annotations (qrs) will be used, instead of those generated by algorithms.

  • keep_original (bool, default False) – If True, indices will keep the same with the annotation file, otherwise subtract sampfrom if specified.

Returns:

rpeak_inds – Locations (indices) of the all the rpeaks (qrs complexes).

Return type:

numpy.ndarray

plot(rec: str | int, data: ndarray | None = None, ann: Dict[str, ndarray] | None = None, beat_ann: Dict[str, ndarray] | None = None, rpeak_inds: Sequence[int] | ndarray | None = None, ticks_granularity: int = 0, leads: int | List[int] | None = None, sampfrom: int | None = None, sampto: int | None = None, same_range: bool = False, **kwargs: Any) None[source]

Plot the signals of a record or external signals (units in μV), with metadata (fs, labels, tranche, etc.), possibly also along with wave delineations.

Parameters:
  • rec (str or int) – Record name or index of the record in all_records.

  • data (numpy.ndarray, optional) – (2-lead) ECG signal to plot, should be of the format “channel_first”, and compatible with leads. If is not None, data of rec will not be used. This is useful when plotting filtered data.

  • ann (dict, optional) – Rhythm annotations for data, covering those from annotation files, in the form of {k: l_itv, ...}, where k are listed in self.rhythm_types_map, and l_itv are of the form of [[a, b], ...]. Ignored if data is None

  • beat_ann (dict, optional) – Beat annotations for data, covering those from annotation files, in the form of {k: l_inds, ...}, where k are listed in self.beat_types, and l_inds are array of indices. Ignored if data is None.

  • rpeak_inds (array_like, optional) – Indices of R peaks, covering those from annotation files. If data is None, then indices should be absolute indices in the record

  • ticks_granularity (int, default 0) – Granularity to plot axis ticks, the higher the more ticks. 0 (no ticks) –> 1 (major ticks) –> 2 (major + minor ticks)

  • leads (int or List[int], optional,) – The lead number(s) of the data to plot.

  • sampfrom (int, optional) – Start index of the data to plot.

  • sampto (int, optional) – End index of the data to plot.

  • same_range (bool, default False) – If True, all leads are forced to have the same y range.

  • kwargs (dict, optional) – Additional arguments to be passed to matplotlib.pyplot.plot, etc.