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.27.0.tar.gz (81.2 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.27.0-cp310-abi3-win_amd64.whl (251.6 kB view details)

Uploaded CPython 3.10+Windows x86-64

bidsaid-0.27.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (412.5 kB view details)

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

bidsaid-0.27.0-cp310-abi3-macosx_11_0_arm64.whl (361.8 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

bidsaid-0.27.0-cp310-abi3-macosx_10_12_x86_64.whl (366.0 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for bidsaid-0.27.0.tar.gz
Algorithm Hash digest
SHA256 9c55be15a9d9eddab7dbc1222313d529f0c237b609fca556f7274ca82dccf720
MD5 f1d19b171ffd8e1f145fa8c913712fe8
BLAKE2b-256 78729fca90095d491139dfae037c62aac78475df6744b233a6c2a46502df8aec

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bidsaid-0.27.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 251.6 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.27.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 19c07aec048b5fca807fe533cc991faaa9e852cde38ca8bfc08e0a24d51649d2
MD5 055e13c3bb01d163dcbf49a559a238b4
BLAKE2b-256 5a696b0361ccfe70a155e40c4e3496ed13aa7ba60b11ce8e8cca2198c87444e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bidsaid-0.27.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e8debc280bde4487fbe4db9ff1cbafb3c27e1441068e4c8bd884e53c9bf18c38
MD5 a5951ae8fc42910fcea93465a1d970ea
BLAKE2b-256 6356d8c3193bf588e17dda6b25a334770e9cc4e1d915c176fb2823bd3c6fc407

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bidsaid-0.27.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5201180780c93a69a6fc8603822edd40edb0248d80819f3b9f879e74df3991d8
MD5 51ad5a733f9c545e528501d44ce3ab3b
BLAKE2b-256 7db68a90d868a944848dcf329efe4eeceb76df521b9122929089b7c439275783

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bidsaid-0.27.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5f0953bf0b7836eb8dbc16a319220283fd61fda751baba9336553625df83e53b
MD5 14d89414c7813d40b4abbf73f2fcd09b
BLAKE2b-256 87439605d355938882a937c6f793b24227932fa7d1b7286fe4765cc44ee05499

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