Skip to content

bidmc

Classes

BidmcDataset

BidmcDataset(leads: list[int] | None = None, **kwargs)

BIDMC dataset

Source code in heartkit/datasets/bidmc.py
def __init__(
    self,
    leads: list[int] | None = None,
    **kwargs,
) -> None:
    super().__init__(**kwargs)
    self.leads = leads or list(BidmcLeadsMap.values())

Attributes

name property
name: str

Dataset name

sampling_rate property
sampling_rate: int

Sampling rate in Hz

mean property
mean: float

Dataset mean

std property
std: float

Dataset st dev

patient_ids cached property
patient_ids: NDArray

Get dataset patient IDs

Returns:

  • NDArray

    npt.NDArray: patient IDs

Functions

get_train_patient_ids
get_train_patient_ids() -> npt.NDArray

Get dataset training patient IDs

Returns:

  • NDArray

    npt.NDArray: patient IDs

Source code in heartkit/datasets/bidmc.py
def get_train_patient_ids(self) -> npt.NDArray:
    """Get dataset training patient IDs

    Returns:
        npt.NDArray: patient IDs
    """
    idx = int(len(self.patient_ids) * 0.80)
    return self.patient_ids[:idx]
get_test_patient_ids
get_test_patient_ids() -> npt.NDArray

Get dataset patient IDs reserved for testing only

Returns:

  • NDArray

    npt.NDArray: patient IDs

Source code in heartkit/datasets/bidmc.py
def get_test_patient_ids(self) -> npt.NDArray:
    """Get dataset patient IDs reserved for testing only

    Returns:
        npt.NDArray: patient IDs
    """
    idx = int(len(self.patient_ids) * 0.80)
    return self.patient_ids[idx:]
patient_data
patient_data(patient_id: int) -> Generator[h5py.Group, None, None]

Get patient data

Parameters:

  • patient_id
    (int) –

    Patient ID

Returns:

  • None

    Generator[h5py.Group, None, None]: Patient data

Source code in heartkit/datasets/bidmc.py
@contextlib.contextmanager
def patient_data(self, patient_id: int) -> Generator[h5py.Group, None, None]:
    """Get patient data

    Args:
        patient_id (int): Patient ID

    Returns:
        Generator[h5py.Group, None, None]: Patient data
    """
    with h5py.File(self.path / f"{self._pt_key(patient_id)}.h5", mode="r") as h5:
        yield h5
signal_generator
signal_generator(
    patient_generator: PatientGenerator, frame_size: int, samples_per_patient: int = 1, target_rate: int | None = None
) -> Generator[npt.NDArray, None, None]

Generate random frames.

Parameters:

  • patient_generator
    (PatientGenerator) –

    Patient Generator

  • frame_size
    (int) –

    Frame size

  • samples_per_patient
    (int, default: 1 ) –

    Samples per patient. Defaults to 1.

  • target_rate
    (int, default: None ) –

    Target rate. Defaults to None.

Returns:

  • None

    Generator[npt.NDArray, None, None]: Generator of input data

Source code in heartkit/datasets/bidmc.py
def signal_generator(
    self,
    patient_generator: PatientGenerator,
    frame_size: int,
    samples_per_patient: int = 1,
    target_rate: int | None = None,
) -> Generator[npt.NDArray, None, None]:
    """Generate random frames.

    Args:
        patient_generator (PatientGenerator): Patient Generator
        frame_size (int): Frame size
        samples_per_patient (int, optional): Samples per patient. Defaults to 1.
        target_rate (int, optional): Target rate. Defaults to None.

    Returns:
        Generator[npt.NDArray, None, None]: Generator of input data
    """
    if target_rate is None:
        target_rate = self.sampling_rate

    input_size = int(np.ceil((self.sampling_rate / target_rate) * frame_size))
    for pt in patient_generator:
        with self.patient_data(pt) as h5:
            data: h5py.Dataset = h5["data"][:]
        # END WITH
        for _ in range(samples_per_patient):
            lead = random.choice(self.leads)
            start = np.random.randint(0, data.shape[1] - input_size)
            x = data[lead, start : start + input_size].squeeze()
            x = np.nan_to_num(x).astype(np.float32)
            if self.sampling_rate != target_rate:
                x = pk.signal.resample_signal(x, self.sampling_rate, target_rate, axis=0)
                x = x[:frame_size]
            # END IF
            yield x
download
download(num_workers: int | None = None, force: bool = False)

Download dataset

This will download preprocessed HDF5 files from S3.

Parameters:

  • num_workers
    (int | None, default: None ) –
    parallel workers. Defaults to None.
  • force
    (bool, default: False ) –

    Force redownload. Defaults to False.

Source code in heartkit/datasets/bidmc.py
def download(self, num_workers: int | None = None, force: bool = False):
    """Download dataset

    This will download preprocessed HDF5 files from S3.

    Args:
        num_workers (int | None, optional): # parallel workers. Defaults to None.
        force (bool, optional): Force redownload. Defaults to False.
    """
    raise NotImplementedError("Download not implemented for BIDMC dataset")