Untitled
unknown
python
8 months ago
2.3 kB
6
Indexable
Never
# Boldizer 1.0 with Multithreading support # A python script to extract BOLD-related data at participant level # # (C) 2024 Giovanni Federico, PhD # research@giovannifederico.net # www.giovannifederico.net import asyncio import os # SETUP FeatQueryBinWithPath = "/Users/neurogiovanni/fsl/bin/featquery" FeatQueryOptions = "-p -s -b" RootDir = "/Volumes/Samsung-SSD/lyon-exp-2-transactive-memory-1/fmri-second-level-z24-p001.gfeat/" OutputDir = "/Volumes/Samsung-SSD/lyon-exp-2-transactive-memory-1/boldizer/" if not os.path.exists(OutputDir): os.makedirs(OutputDir) ROIsDirectory = "/Volumes/Samsung-SSD/ad-hoc-rois/" Subjects = 27 TypeOfData = "pe" # or 'cope' for contrasts of beta weights string_subs_pe = " ".join([f"stats/{TypeOfData}{s}" for s in range(1, Subjects + 1)]) COPE_Condition = { "cope1.feat": "alone", "cope2.feat": "camera", "cope3.feat": "expert-deleg", "cope4.feat": "expert-help", "cope6.feat": "tutorial", } async def run_command(command): """Asynchronously run command""" process = await asyncio.create_subprocess_exec( *command, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE) stdout, stderr = await process.communicate() if process.returncode == 0: print(f"Success: {' '.join(command)}") else: print(f"Error: {' '.join(command)}\n{stderr.decode()}") async def main(): commands = [] for roi in os.listdir(ROIsDirectory): roi_path = os.path.join(ROIsDirectory, roi) if os.path.isfile(roi_path): for cope, condition in COPE_Condition.items(): command = [ FeatQueryBinWithPath, "1", os.path.join(RootDir, cope), str(Subjects), string_subs_pe, f"boldizer-{condition}-{roi[:-4]}", FeatQueryOptions, roi_path ] commands.append(command) sem = asyncio.Semaphore(5) # 5 concurrent subprocesses async def run_limited(command): async with sem: await run_command(command) await asyncio.gather(*(run_limited(command) for command in commands)) if __name__ == "__main__": asyncio.run(main())
Leave a Comment