Skip to main content

A toolkit for creating and managing BIDS-compliant fMRI datasets without original DICOMs.

Project description

BIDS-Aid

Latest Version Python Versions Source Code License Test Status codecov Code style: black Documentation Status

A toolkit for creating and managing BIDS-compliant fMRI datasets without original DICOMs. Intended for cases that require custom code and flexibility, such as when NIfTI source files lack consistent naming conventions, organized folder hierarchies, or sidecar metadata. Includes utilities for metadata reconstruction from NIfTI headers, file renaming, neurobehavioral log parsing (for E-Prime and Presentation), and JSON sidecar generation.

Installation

Standard Installation

pip install bidsaid[all]

Development Version

git clone --depth 1 https://github.com/donishadsmith/bidsaid/
cd bidsaid
pip install -e .[all]

Features

  • File renaming: Convert arbitrary filenames to BIDS-compliant naming

  • File creation: Generate dataset_description.json and participants.tsv

  • Metadata utilities: Extract header metadata (e.g., TR, orientation, scanner info) and generate slice timing for singleband and multiband acquisitions

  • Log parsing: Load Presentation (e.g., .log) and E-Prime 3 (e.g, .edat3, .txt) files as DataFrames, or use extractor classes to generate BIDS events for block and event designs:

    Class Software Design Description
    PresentationBlockExtractor Presentation Block Extracts block-level timing with mean RT and accuracy
    PresentationEventExtractor Presentation Event Extracts trial-level timing with individual responses
    EPrimeBlockExtractor E-Prime 3 Block Extracts block-level timing with mean RT and accuracy
    EPrimeEventExtractor E-Prime 3 Event Extracts trial-level timing with individual responses
  • Auditing: Generate a table of showing the presence or abscence of certain files for each subject and session

  • QC: Creation and computation of certain quality control metrics (e.g., framewise displacement)

Quick Start

Creating BIDS-Compliant Filenames

from bidsaid.bids import create_bids_file

create_bids_file(
    src_file="101_mprage.nii.gz",
    subj_id="101",
    ses_id="01",
    desc="T1w",
    dst_dir="/data/bids/sub-101/ses-01/anat",
)

Extracting Metadata from NIfTI Headers

from bidsaid.metadata import get_tr, create_slice_timing, get_image_orientation

tr = get_tr("sub-01_bold.nii.gz")
slice_timing = create_slice_timing(
    "sub-01_bold.nii.gz",
    slice_acquisition_method="interleaved",
    multiband_factor=4,
)
orientation_map, orientation = get_image_orientation("sub-01_bold.nii.gz")

Loading Raw Log Files

from bidsaid.parsers import (
    load_presentation_log,
    load_eprime_log,
    convert_edat3_to_txt,
)

presentation_df = load_presentation_log("sub-01_task.log", convert_to_seconds=["Time"])

# E-Prime 3: convert .edat3 to text first, or load .txt directly
eprime_txt_path = convert_edat3_to_txt("sub-01_task.edat3")
eprime_df = load_eprime_log(eprime_txt_path, convert_to_seconds=["Stimulus.OnsetTime"])

Creating BIDS Events from Presentation Logs

from bidsaid.bids import PresentationBlockExtractor
import pandas as pd

extractor = PresentationBlockExtractor(
    "sub-01_task-faces.log",
    trial_types=("Face", "Place"),  # Can use regex ("Fa.*", "Pla.*")
    scanner_event_type="Pulse",
    scanner_trigger_code="99",
    convert_to_seconds=["Time"],
    rest_block_codes="crosshair",
    rest_code_pattern="fixed",
    split_cue_from_block=True,
)

events_df = pd.DataFrame(
    {
        "onset": extractor.extract_onsets(),
        "duration": extractor.extract_durations(),
        "trial_type": extractor.extract_trial_types(),
        "mean_rt": extractor.extract_mean_reaction_times(),
    }
)

Creating BIDS Events from E-Prime Logs

from bidsaid.bids import EPrimeEventExtractor
import pandas as pd

extractor = EPrimeEventExtractor(
    "sub-01_task-gonogo.txt",
    trial_types="Go|NoGo",  # Can also use ("Go", "NoGo")
    onset_column_name="Stimulus.OnsetTime",
    procedure_column_name="Procedure",
    trigger_column_name="ScannerTrigger.RTTime",
    convert_to_seconds=[
        "Stimulus.OnsetTime",
        "Stimulus.OffsetTime",
        "ScannerTrigger.RTTime",
    ],
)

events_df = pd.DataFrame(
    {
        "onset": extractor.extract_onsets(),
        "duration": extractor.extract_durations(
            offset_column_name="Stimulus.OffsetTime"
        ),
        "trial_type": extractor.extract_trial_types(),
        "reaction_time": extractor.extract_reaction_times(
            reaction_time_column_name="Stimulus.RT"
        ),
    }
)

Audit BIDS Dataset

from bidsaid.audit import BIDSAuditor
from bidsaid.simulate import simulate_bids_dataset

bids_root = simulate_bids_dataset()

auditor = BIDSAuditor(bids_root)
auditor.check_raw_nifti_availability()
auditor.check_raw_sidecar_availability()
auditor.check_events_availability()
auditor.check_preprocessed_nifti_availability()

analysis_dir = bids_root / "first_level"
analysis_sub_dir = analysis_dir / "sub-1" / "ses-1"
analysis_sub_dir.mkdir(parents=True, exist_ok=True)

with open(analysis_sub_dir / "sub-1_task-rest_desc-betas.nii.gz", "w") as f:
    pass

auditor.check_first_level_availability(analysis_dir=analysis_dir, desc="betas")

Compute QC

from bidsaid.qc import create_censor_mask, compute_consecutive_censor_stats

censor_mask = create_censor_mask(
    "confounds.tsv",
    column_name="framewise_displacement",
    threshold=0.5,
    n_dummy_scans=4,
)

consecutive_censor_mean, consecutive_censor_std = compute_consecutive_censor_stats(
    censor_mask, n_dummy_scans=4
)

See the API documentation for full parameter details and additional utilities.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bidsaid-0.26.0.tar.gz (81.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

bidsaid-0.26.0-cp310-abi3-win_amd64.whl (251.5 kB view details)

Uploaded CPython 3.10+Windows x86-64

bidsaid-0.26.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (412.4 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

bidsaid-0.26.0-cp310-abi3-macosx_11_0_arm64.whl (361.6 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

bidsaid-0.26.0-cp310-abi3-macosx_10_12_x86_64.whl (365.8 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file bidsaid-0.26.0.tar.gz.

File metadata

  • Download URL: bidsaid-0.26.0.tar.gz
  • Upload date:
  • Size: 81.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for bidsaid-0.26.0.tar.gz
Algorithm Hash digest
SHA256 b962a54d53b1b8009330b0359c8987846ba367a28b3c6745d929af3495867b7d
MD5 f84cf1d3e8c52e2c740a0d8530a72f8d
BLAKE2b-256 ccea8cbedcc22b9d58bfe6b49e6834e1c9d51e0251f06880b0210c2e2b77b243

See more details on using hashes here.

File details

Details for the file bidsaid-0.26.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: bidsaid-0.26.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 251.5 kB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for bidsaid-0.26.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 d0d691d13394fcf1d66fba30d903ab0353261623773c5112e4bd4f9acb3edc0b
MD5 b00c57a1a8a05992b6bf8290b0b62202
BLAKE2b-256 c8ff2bff8574d22a4ddc1c7cc2f8a1cdcec01c2ee1549698f6187d62b75559ab

See more details on using hashes here.

File details

Details for the file bidsaid-0.26.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for bidsaid-0.26.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0a1f88c66dc6f36374e0c67e5e4ec5f8456c2fce1f4a05026fa25400e0bd52d9
MD5 aa78edde55cce5d8abd26268b3e1a23a
BLAKE2b-256 6841b8f4be080a6f754db1f1f0889c4ba8e71ef0181ed9c5b95a5568a18590ed

See more details on using hashes here.

File details

Details for the file bidsaid-0.26.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bidsaid-0.26.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d59b6ea83d5dd3573c1456b7d1122412368fa51c025fd297fb8ee7da746af75c
MD5 0b784cd7b405c2efe2f206a150183fb8
BLAKE2b-256 ed9333070ab5c295abefe4328a553d85e897a15e43f975c64a00c759bf8d58a5

See more details on using hashes here.

File details

Details for the file bidsaid-0.26.0-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for bidsaid-0.26.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e57b0eedaa02f84d1d353e254b77a8a341ff2c8f1d368d59bbc9900614bae5c8
MD5 1655f931f41c97db3ac950cfb82c9f33
BLAKE2b-256 93a8886c1059252daad1ffe6c12f7d1d3bd54d839a9d9c1a82c9747ccead11b0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page