Skip to content

Choose a tag to compare

@michaelhallquist michaelhallquist released this 09 Oct 20:05
29b2f5b
  • Preserve integer NIfTI storage types after interpolation, regression, and
    filtering. Recalculate slope and intercept from the processed range and round
    to the output grid, avoiding fractional-value truncation, constant-output
    scaling failures, clipping, and narrowing integer intermediates. Reserve
    RNifti's INT32 missing-value code and reject non-finite integer output before
    writing a file. Regression tests cover all eight integer types, NIfTI-1/2,
    input scaling, expanded ranges, zero backgrounds, and extreme values.

  • Decode integer images into double-precision working buffers and preserve
    FLOAT64 results without an intermediate FLOAT32 cast. This retains small
    differences at large offsets and supports NIfTI-2 scaling outside FLOAT32's
    range. Integer working buffers use twice the memory of the previous FLOAT32
    buffers; conversion temporaries are now freed instead of leaked.

  • Suppress RNifti pointer/reference-count diagnostics in all native image
    helpers, including debug builds where pkgbuild overrides -DNDEBUG.
    Preserve normal BrainGnomes logging and other debug settings. Cleanly rebuild
    the package and create new runtime bundles to update future workers; existing
    sealed bundles retain their installed binary.

  • Correct spline interpolation when retained timepoints are constant:
    censored spikes and edge samples now receive the retained value. Reject
    non-finite interpolation points explicitly.

  • Apply fitted regression models to censored volumes even when fitted rows are
    constant. Respect partial regression that retains the intercept, including
    constant input series. Recenter residuals over fitted rows before applying
    a requested nonzero mean in both image and matrix regression.

  • Support scalar-gain filters without invalid memory access, including
    steady-state initialization. Validate empty/non-finite coefficients and
    padding before processing, including all-zero images. Filter and demean
    nonzero constant signals when requested.

  • Reject images with extra dimensions instead of silently processing their
    first block, and use size-safe voxel indices in native image operations.

  • Reject missing regression selections, non-finite designs, and non-finite
    retained quantile voxels with clear errors. Quantiles continue to permit
    non-finite values outside a supplied mask.

  • Detect configuration changes inside unnamed, mixed-name, and duplicate-name
    lists so confirmed saves retain those edits.

  • Allow SQLite reads for job status, project inspection, submission history,
    and table existence to wait up to ten seconds for concurrent writers rather
    than failing immediately while a worker publishes its state.

  • Correct menu titles and single-choice selection indices. Reject partial
    numeric choices and exit menu loops on EOF. Escape, Ctrl+D, and EOF cancel
    typed prompts cleanly and restore terminal settings. Cancelling guided
    stream selection stops before submission instead of selecting every stream.

  • Preserve negative CLI values, empty assignments, and trailing equals signs.
    Keep leading zeros in subject/session identifiers and reject invalid boolean
    options before acting.

  • Preserve literal shell-quoted paths containing spaces or apostrophes across
    CLI plans/setup/validation and worker entry points, while retaining vector
    option parsing.

  • Parse complete BIDS filename entities instead of incidental substrings, and
    preserve alphanumeric resolution labels when constructing filenames.

  • Validate motion-filter flags and require finite motion-QC thresholds before
    summarization.

  • Document CLI activation after installation, correct the quickstart's Bash
    activation command, and clarify guided and prompt-free project creation.
    Update native function documentation for validation, mean handling, storage
    precision, and quantization behavior.

  • Fix the missing quickstart pipeline diagram on the pkgdown website by
    referencing a vignette-local PNG that is copied into the rendered article.
    Installed vignette sources fall back to the existing package image.

  • Correct reversed temporal-filter examples, zero-padded CompCor and motion
    column selections, AROMA mode support and its fMRIPrep removal version, and
    intensity-normalization variance scaling. Clarify ROI masking, censoring,
    minimum-voxel settings, local extraction, output-directory requirements, and
    connectivity limits. Refresh container setup, offline TemplateFlow guidance,
    debug-versus-dry-run behavior, scheduler polling defaults, article links,
    and contribution instructions; finish the intermediate-file documentation
    and make shell run-ID examples safe to copy after substituting the ID.

  • Snapshot tracked worker scripts, helpers, and the BrainGnomes runtime into
    sealed, reusable project/run-owned bundles. Package reinstalls no longer
    change queued workers' startup code. Independent bootstrap handlers publish
    failure receipts and record non-array startup failures without loading
    BrainGnomes; external R dependencies and containers remain shared inputs.

  • Register UUID submission attempts in SQLite before invoking Slurm, TORQUE,
    or local execution, including dynamically submitted postprocessing arrays.
    Workers can bind their own allocation IDs before submission returns, and
    late acknowledgements preserve started or completed states. Retain uncertain
    submissions, block duplicate launches of the same work unit and role, and
    expose these attempts through inspect_project()$submissions. Inspection
    and scheduler refresh remain read-only and SQLite-first.

  • Aggregate Slurm array-task accounting under the tracked array identifier,
    preserving active and uncertain states until all observed tasks terminate.
    Distinguish scheduler query failures from missing records. Do not infer success
    from expired TORQUE records; verify retained completed jobs using exit status.
    Retain confirmed terminal observations while waiting for other jobs to finish.
    Scheduler refresh remains read-only and project summaries remain SQLite-first.

  • Require tracked worker status updates to persist in SQLite or exit with an error.
    Store completion status, timestamp, and output manifest atomically so failed
    manifest writes cannot leave a falsely completed job in the tracking database.
    Close SQLite connections after rejected queries as well as successful ones.

  • Extend spatial smoothing checks to isotropic and anisotropic voxel spacings
    of 1.8--4 mm and kernels 1.5--3 times geometric mean voxel spacing. Use smooth
    directional FWHM response functions only where calibration and independent
    validation meet the half-voxel error limit. Use operator replay for conditions
    whose FWHM response cannot meet that limit, preserving full-run SUSAN
    parameters and checking Gaussian output with the matching AFNI operator.
    Replay compares 96 distributed volumes in bounded chunks, rejects incorrect
    kernels and unchanged outputs, and records only compact QA metadata.
    Automatic checks also replay in-domain outputs whose FWHM comparison fails,
    retaining the failed comparison and the replay result separately in QA.
    The current continuous coefficient model passes for template-masked-input
    SUSAN; the other eight production contexts require replay.

  • Calibrate SUSAN and Gaussian spatial validation for isotropic 2 mm images
    with 3--8 mm kernels using separate resolution-specific fits. Verify those
    fits on held-out subjects, including genuine 2 mm fMRIPrep outputs. Establish
    2 mm error limits from internal cohort-transfer checks, capped at 1 mm, while
    preserving coarser-resolution coefficients and limits. Reject unchanged
    images even when their predicted change is smaller than the error limit.

  • Resample template masks and atlases using reference header geometry without
    loading the reference BOLD voxel data.

  • Reject image objects, spatial arrays, and binary payloads before writing
    provenance JSON, configuration snapshots, validation records, or QC inventories.
    Keep image files out of provenance companion directories.

  • Keep intensity-reference NIfTI voxel arrays out of derivative JSON; record
    published companion paths and compact header geometry instead. Validate
    intensity normalization across all volumes in bounded chunks to avoid
    memory spikes on long runs.

  • Match QC validation audits to missing outputs through filesystem aliases,
    retaining their failed status instead of incorrectly marking them invalid.
    Canonicalize missing-configuration diagnostics consistently across platforms.
    Keep setup menu text portable and bound headless CLI tests so inherited
    Windows consoles cannot stall the test suite.

  • Resolve relative configuration paths from a colocated project YAML: the YAML
    establishes the project root, all runtime and scheduler paths become
    absolute, and project-contained paths are saved portably relative to that
    root. Reject detached or mismatched project configurations before execution,
    and remove unsafe project_directory changes from the ordinary field editor.

  • Ask about motion filtering after optionally adding framewise displacement
    during postprocessing setup, ensuring the saved stream records an explicit
    motion-filter decision and can be passed directly to run_project().

  • Present temporal-filtering and intensity-normalization methods as descriptive
    numbered menus during guided setup instead of requiring users to type internal
    configuration values. Interactive prompts no longer insert an extra blank line
    between their final instruction and the input marker.

  • Allow BrainGnomes setup_project (or init) with no project name to open the
    guided setup and prompt for the project name, project directory, and workflow
    settings. Supplying a project name retains prompt-free creation and defaults
    its project directory to the current working directory. Explicit project
    directories, configuration YAMLs, and saved run plans remain supported;
    overwriting a prompt-free configuration and retrying/cancelling work still
    require their existing explicit flags.

  • Organize the website reference by task: setup, execution, monitoring and
    recovery, QC, provenance, and advanced tools.

  • Remove diagnose_pipeline() and its export, without a compatibility wrapper.
    Use diagnose_project(); pass interactive = TRUE for the guided browser
    or interactive = FALSE for structured results. The CLI remains diagnose.

  • Use the same selected-stage and stream configuration checks for plans, dry
    runs, and submission. Invalid licenses/resources now fail before project
    writes or scheduling, while unrelated stages/streams do not block selected
    work. Saved plans are revalidated at submission. Use steps (and optional
    stream selections) with validate_project_config() or config validate to
    inspect the same checks; exploratory invalid plans are explicitly labeled.

  • Make CLI JSON output a single document on stdout, with progress, warnings,
    and log tails on stderr. Validate formats before acting, reject machine-format
    watch/interactive combinations, and require explicit stages for JSON runs.

  • Make plans and dry runs concrete: show subject/session/stage/stream work,
    input/output and log locations, dependencies, per-job resources, and
    completion-marker skip decisions. Flywheel scope remains explicitly deferred.
    run_project(dry_run = TRUE) now returns a bg_project_plan instead of TRUE
    and no longer creates directories or repairs permissions. Full preview rows
    remain available in plan$preview$work and CLI JSON beyond the console limit.

  • Resolve existing parent-directory aliases before rebasing missing template
    paths. Cloned projects now keep future Flywheel DICOM inputs and nested
    outputs under the new project on macOS, Windows, and symlinked filesystems,
    without creating those directories in the source project or shared inputs.

  • Begin new guided setup with the user's starting point: DICOMs on Flywheel,
    local DICOMs, existing BIDS, or existing fMRIPrep derivatives. Preview the
    route, skip completed upstream stages, distinguish existing inputs from
    future download/output destinations, and retain explicit downstream choices.
    The menu also offers read-only project inspection and custom setup. Existing
    configured projects and targeted edits retain their selections; headless
    creation remains prompt-free. Use starting_point to preselect a guided route.

  • Keep explicit run_project() arguments when choosing stages interactively,
    including dry_run = TRUE. The CLI preserves the same argument precedence.

  • Retry exact failed subject/session/stage/stream combinations instead of
    recombining independent selections. Saved retry plans retain that scope and
    their source-run provenance; missing or ambiguous work fails safely.

  • Isolate new projects created from templates: rebase project directories and
    give outputs, logs, scratch space, and tracking a fresh destination. Preserve
    external inputs and resource files, and inherit stage settings. Intentional
    sharing requires reuse_template_paths = TRUE (CLI: --reuse-template-paths).

  • Restrict scheduler-contract checksums to recognized immutable execution
    inputs and explicitly selected environment artifacts. Mutable operational
    files, including SQLite tracking databases, logs, status markers, state
    files, receipts, and output manifests, remain recorded as environment
    metadata but no longer trigger false contract-drift failures when jobs start.

  • Native postprocessing and ROI outputs now carry versioned JSON provenance,
    draft methods text, BibTeX, and available upstream citations and reports.
    Records distinguish executed, skipped, failed, and reused operations, retain
    actual confound columns and censor indices, and identify source files,
    atlas geometry, software, and applicable run/job records. Use
    read_derivative_provenance() to inspect a derivative without SQLite and
    export_derivative_provenance() to copy it with verified companions into a
    portable bundle. Generated methods always require human review. Existing
    derivatives without producer records are explicitly marked unknown.

  • Add collect_qc_inventory(), write_qc_inventory(), and
    render_qc_dashboard() for study QC snapshots. R objects and TSV tables join
    configured workflow expectations, job history, derivative availability,
    postprocessing audits, original fMRIPrep motion summaries, MRIQC IQMs, censor
    masks, and regional voxel retention. The optional Quarto dashboard includes
    searchable React tables, interactive plots, expandable evidence, and snapshot
    downloads. Collection is read-only; no human review or inclusion decisions
    are implemented.

  • Treat platform-equivalent filesystem spellings as one QC path identity,
    preventing duplicate derivative rows from Windows short/long path aliases.

  • Consolidate project creation in setup_project(). It now supports portable,
    prompt-free creation with interactive = FALSE, including templates and
    overwrite control. The headless BrainGnomes init command uses this pathway,
    and the redundant initialize_project() entry point has been removed.

  • Remove the redundant doctor() R alias before 1.0. Use
    doctor_project() for R preflight checks; the BrainGnomes doctor CLI
    command remains available.

  • Harmonize project inputs across the R lifecycle API. load_project(),
    edit_project(), validate_project_config(), doctor_project(),
    plan_project(), run_project(), run_bids_validation(), status and log
    helpers, provenance inspection, retry, and cancellation now default to the
    current working directory and accept project configuration objects, YAML
    files, or project directories where applicable.

  • Distinguish optional request plans from final scheduler contracts. Plans now
    report whether their subject scope is resolved or deferred. Flywheel runs
    record the realized post-sync scope before downstream submission; every
    tracked scheduler job receives an immutable pre-submission manifest and a
    compute-host runtime receipt that verifies execution-driving files. Structured
    work-unit and contract fields are stored in the tracking database with an
    automatic migration for existing projects.