Changelog#
0.4.8#
BasePrepare: introduced
launchcontainers/prepare/base_prepare.pywith aBasePreparebase class shared by all prepare pipelines. Providesbasedir/bidsdirproperties and thewrite_example_config/_example_config_dictclassmethod pair so every subclass can auto-generate an annotatedlc_config_example.yamlwithout duplicating boilerplate.GLMPrepare now subclasses
BasePrepare. Removed the redundantbasedir/bidsdirproperties and replaced the@staticmethod write_example_configwith@classmethod _example_config_dict.GLMPrepare — Word-Center (WC) mode: new
output_bidsandoutput_bids_dirproperties. Whenis_WC=Truethe prepare workflow writes all outputs (events TSVs, BIDS bold symlinks, fMRIprep bold symlinks, and their JSON sidecars) into a separate BIDS-mirrored directory tree rooted at<basedir>/<output_bids>(e.g.BIDS_WC/), including aderivatives/<fmriprep_analysis_name>/sub-tree.Symlinks now include JSON sidecars: both
gen_bids_bold_symlinksandgen_fmriprep_bold_symlinkscreate a matching.jsonsymlink alongside every NIfTI / GIFTI symlink.Mapping TSV moved to vistadisplog dir:
PRFPrepare.parse_prf_matnow writessub-<sub>_ses-<ses>_desc-mapping_PRF_acqtime.tsvto the vistadisplog source directory instead of the BIDSfunc/directory.GLMPrepare._load_mapping_tsvreads from the same location.Bug fix:
run_glm_preparewas not forwarding thelayoutargument torun_prf_glm_prepare, causing anAttributeError: 'NoneType' object has no attribute 'get'at runtime.Type annotations: added
TYPE_CHECKINGguard inglm_prepare.pyforpandas.DataFrameandbids.BIDSLayout; all public wrapper functions now carry full type signatures.Docs: added tutorial sub-pages
prepare_glm.rst,prepare_dwi.rst,prepare_ret.rstunder the Tutorial section. Rewroteextending.rstto document the actualBasePreparepattern with step-by-step guidance. Updatedconfiguration.rstcontainer_specificsection andapi.rstfMRI-GLM preparation section.
0.4.7#
Logging: replaced ad-hoc output redirection with a structured logging architecture.
log_setup.pynow provides_LoggingConsole, a RichConsolesubclass that auto-forwards everyconsole.print()call to a Pythonlogging.Logger. Two log files are written per CLI command and copied into the analysis directory on completion:<cmd>_<timestamp>.log— all messages (DEBUG and above)<cmd>_<timestamp>.err— warnings and errors only
gen_jobscript package: replaced the single
gen_launch_cmd.pymodule with agen_jobscript/package. The orchestrator (__init__.py) routes to per-type command builders:gen_container_cmd.py— Apptainer/Singularity containers (existing logic)gen_matlab_cmd.py— MATLAB script launcher (stub, raisesNotImplementedError)gen_py_cmd.py— Python script launcher (stub, raisesNotImplementedError)
clusters/local.py: renamed
job_scheduler.pytolocal.py. Addedlaunch_serial()andlaunch_parallel()functions controlled by the newlaunch_modeyaml key. Each subprocess now runs insidebash -lso thatmodule loadcommands work correctly. Parallel mode supports amem_per_jobmemory ceiling enforced viaresource.setrlimiton each worker process.host_options.local yaml keys updated:
launch_mode(serial/parallel),max_workers(concurrent container limit),mem_per_job(per-worker memory cap). Old Dask-era keys (njobs,memory_limit,threads_per_worker) are no longer used.
0.4.6#
Added
GLMPreparerandBasePreparerabstract class hierarchy for analysis-based (fMRI) pipelines.Introduced
PREPARER_REGISTRYfor zero-touch extension of new analysis types.cli.py: two-path dispatch — legacy DWI path untouched; new registry path for analysis-based pipelines.Added
glm_specificconfig section andglm_config_template.yaml.
0.4.3#
Improved temporal proximity matching for sbref↔bold pairing (180-second window).
Fixed DWI file mapping for PA/AP direction naming.
Fixed datetime parsing for ISO timestamp formats in scans.tsv validation.
Fixed bidirectional file matching to always produce
_dwi.nii.gzsuffixes.
0.4.0#
Initial public release of the
lcCLI withprepare,run,qc,copy_configs,gen_subses, andcreate_bidssubcommands.SLURM (DIPC) and SGE (BCBL) scheduler support.
Container-based pipeline support:
anatrois,freesurferator,rtppreproc,rtp-pipeline,rtp2-preproc,rtp2-pipeline.