From 2c8a302c4d25d4beb203f1b13a33265e86f64b12 Mon Sep 17 00:00:00 2001 From: Alejandro Veloz Date: Wed, 9 Jul 2025 15:55:51 -0400 Subject: [PATCH 1/8] solve pyyawt compatibility --- build/lib/rsHRF/CLI.py | 447 ++++++++++++++++++ build/lib/rsHRF/VERSION | 1 + build/lib/rsHRF/__about__.py | 12 + build/lib/rsHRF/__init__.py | 10 + build/lib/rsHRF/__main__.py | 3 + build/lib/rsHRF/basis_functions/__init__.py | 1 + .../rsHRF/basis_functions/basis_functions.py | 69 +++ build/lib/rsHRF/canon/__init__.py | 1 + build/lib/rsHRF/canon/canon_hrf2dd.py | 29 ++ build/lib/rsHRF/fourD_rsHRF.py | 201 ++++++++ build/lib/rsHRF/iterative_wiener_deconv.py | 39 ++ build/lib/rsHRF/parameters.py | 44 ++ build/lib/rsHRF/processing/__init__.py | 2 + build/lib/rsHRF/processing/knee.py | 90 ++++ build/lib/rsHRF/processing/rest_filter.py | 34 ++ build/lib/rsHRF/rsHRF_GUI/__init__.py | 6 + build/lib/rsHRF/rsHRF_GUI/core/__init__.py | 1 + build/lib/rsHRF/rsHRF_GUI/core/core.py | 356 ++++++++++++++ .../lib/rsHRF/rsHRF_GUI/datatypes/__init__.py | 2 + .../rsHRF_GUI/datatypes/misc/__init__.py | 3 + .../rsHRF_GUI/datatypes/misc/parameters.py | 442 +++++++++++++++++ .../rsHRF/rsHRF_GUI/datatypes/misc/store.py | 80 ++++ .../rsHRF/rsHRF_GUI/datatypes/misc/subject.py | 180 +++++++ .../datatypes/timeseries/__init__.py | 3 + .../datatypes/timeseries/bold_deconv.py | 62 +++ .../datatypes/timeseries/bold_preprocessed.py | 69 +++ .../datatypes/timeseries/bold_raw.py | 55 +++ .../rsHRF_GUI/datatypes/timeseries/hrf.py | 76 +++ .../datatypes/timeseries/timeseries.py | 77 +++ .../documentation/developer/class_diagram.png | Bin 0 -> 161601 bytes .../documentation/developer/class_info.md | 350 ++++++++++++++ .../documentation/rsHRF-GUI-User-Manual.pdf | Bin 0 -> 403373 bytes .../rsHRF/rsHRF_GUI/gui_windows/__init__.py | 6 + .../rsHRF_GUI/gui_windows/inputWindow.py | 105 ++++ .../rsHRF_GUI/gui_windows/loggingWindow.py | 129 +++++ build/lib/rsHRF/rsHRF_GUI/gui_windows/main.py | 286 +++++++++++ .../rsHRF_GUI/gui_windows/parameterWindow.py | 54 +++ .../gui_windows/plotterOptionsWindow.py | 76 +++ .../rsHRF_GUI/gui_windows/plotterWindow.py | 37 ++ build/lib/rsHRF/rsHRF_GUI/misc/__init__.py | 1 + build/lib/rsHRF/rsHRF_GUI/misc/status.py | 39 ++ build/lib/rsHRF/rsHRF_GUI/run.py | 4 + build/lib/rsHRF/sFIR/__init__.py | 1 + build/lib/rsHRF/sFIR/smooth_fir.py | 161 +++++++ build/lib/rsHRF/spm_dep/__init__.py | 2 + build/lib/rsHRF/spm_dep/spm.py | 153 ++++++ build/lib/rsHRF/unit_tests/__init__.py | 0 .../rsHRF/unit_tests/test_basis_functions.py | 30 ++ .../lib/rsHRF/unit_tests/test_canon_hrf2dd.py | 32 ++ .../test_iterative_wiener_deconv.py | 15 + build/lib/rsHRF/unit_tests/test_knee.py | 20 + build/lib/rsHRF/unit_tests/test_parameters.py | 11 + .../lib/rsHRF/unit_tests/test_rest_filter.py | 27 ++ build/lib/rsHRF/unit_tests/test_smooth_fir.py | 91 ++++ build/lib/rsHRF/unit_tests/test_spm.py | 97 ++++ build/lib/rsHRF/utils/__init__.py | 2 + build/lib/rsHRF/utils/bids.py | 53 +++ build/lib/rsHRF/utils/hrf_estimation.py | 144 ++++++ consistency_test/VoxelTest/rsHRF_python.py | 2 +- requirements.txt | 2 +- rsHRF/fourD_rsHRF.py | 4 +- rsHRF/iterative_wiener_deconv.py | 57 +-- rsHRF/processing/knee.py | 4 +- rsHRF/processing/rest_filter.py | 2 +- rsHRF/rsHRF_GUI/core/core.py | 2 +- rsHRF/spm_dep/spm.py | 2 +- rsHRF/unit_tests/test_knee.py | 6 +- rsHRF/utils/hrf_estimation.py | 6 +- setup.py | 3 +- 69 files changed, 4371 insertions(+), 40 deletions(-) create mode 100644 build/lib/rsHRF/CLI.py create mode 100755 build/lib/rsHRF/VERSION create mode 100644 build/lib/rsHRF/__about__.py create mode 100644 build/lib/rsHRF/__init__.py create mode 100644 build/lib/rsHRF/__main__.py create mode 100644 build/lib/rsHRF/basis_functions/__init__.py create mode 100644 build/lib/rsHRF/basis_functions/basis_functions.py create mode 100644 build/lib/rsHRF/canon/__init__.py create mode 100644 build/lib/rsHRF/canon/canon_hrf2dd.py create mode 100644 build/lib/rsHRF/fourD_rsHRF.py create mode 100644 build/lib/rsHRF/iterative_wiener_deconv.py create mode 100644 build/lib/rsHRF/parameters.py create mode 100644 build/lib/rsHRF/processing/__init__.py create mode 100644 build/lib/rsHRF/processing/knee.py create mode 100644 build/lib/rsHRF/processing/rest_filter.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/__init__.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/core/__init__.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/core/core.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/datatypes/__init__.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/datatypes/misc/__init__.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/datatypes/misc/parameters.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/datatypes/misc/store.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/datatypes/misc/subject.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/__init__.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/bold_deconv.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/bold_preprocessed.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/bold_raw.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/hrf.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/timeseries.py create mode 100755 build/lib/rsHRF/rsHRF_GUI/documentation/developer/class_diagram.png create mode 100755 build/lib/rsHRF/rsHRF_GUI/documentation/developer/class_info.md create mode 100755 build/lib/rsHRF/rsHRF_GUI/documentation/rsHRF-GUI-User-Manual.pdf create mode 100644 build/lib/rsHRF/rsHRF_GUI/gui_windows/__init__.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/gui_windows/inputWindow.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/gui_windows/loggingWindow.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/gui_windows/main.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/gui_windows/parameterWindow.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/gui_windows/plotterOptionsWindow.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/gui_windows/plotterWindow.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/misc/__init__.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/misc/status.py create mode 100644 build/lib/rsHRF/rsHRF_GUI/run.py create mode 100644 build/lib/rsHRF/sFIR/__init__.py create mode 100644 build/lib/rsHRF/sFIR/smooth_fir.py create mode 100644 build/lib/rsHRF/spm_dep/__init__.py create mode 100644 build/lib/rsHRF/spm_dep/spm.py create mode 100644 build/lib/rsHRF/unit_tests/__init__.py create mode 100644 build/lib/rsHRF/unit_tests/test_basis_functions.py create mode 100644 build/lib/rsHRF/unit_tests/test_canon_hrf2dd.py create mode 100644 build/lib/rsHRF/unit_tests/test_iterative_wiener_deconv.py create mode 100644 build/lib/rsHRF/unit_tests/test_knee.py create mode 100644 build/lib/rsHRF/unit_tests/test_parameters.py create mode 100644 build/lib/rsHRF/unit_tests/test_rest_filter.py create mode 100644 build/lib/rsHRF/unit_tests/test_smooth_fir.py create mode 100644 build/lib/rsHRF/unit_tests/test_spm.py create mode 100644 build/lib/rsHRF/utils/__init__.py create mode 100644 build/lib/rsHRF/utils/bids.py create mode 100644 build/lib/rsHRF/utils/hrf_estimation.py diff --git a/build/lib/rsHRF/CLI.py b/build/lib/rsHRF/CLI.py new file mode 100644 index 0000000..792af34 --- /dev/null +++ b/build/lib/rsHRF/CLI.py @@ -0,0 +1,447 @@ +import sys +import numpy as np +import os.path as op +import json +from argparse import ArgumentParser +from bids.layout import BIDSLayout +from pathlib import Path +from rsHRF import spm_dep, fourD_rsHRF, utils + +import warnings +warnings.filterwarnings("ignore") + +with open(op.join(op.dirname(op.realpath(__file__)), "VERSION"), "r") as fh: + __version__ = fh.read().strip('\n') + +def get_parser(): + parser = ArgumentParser(description='retrieves the onsets of pseudo-events triggering a ' + 'haemodynamic response from resting state fMRI BOLD ' + 'voxel-wise signal') + + group_input = parser.add_mutually_exclusive_group(required=True) + + group_input.add_argument('--ts', action='store', type=op.abspath, + help='the absolute path to a single data file') + + group_input.add_argument('--input_file', action='store', type=op.abspath, + help='the absolute path to a single data file') + + group_input.add_argument('--bids_dir', nargs='?', action='store', type=op.abspath, + help='the root folder of a BIDS valid dataset ' + '(sub-XXXXX folders should be found at the ' + 'top level in this folder).') + + group_input.add_argument('--GUI', action='store_true', + help='to execute the toolbox in GUI mode') + + parser.add_argument('--output_dir', action='store', type=op.abspath, + help='the output path for the outcomes of processing') + + parser.add_argument('--n_jobs', action='store', type=int, default=-1, + help='the number of parallel processing elements') + + parser.add_argument('-V', '--version', action='version', version='rsHRF version {}'.format(__version__)) + + parser.add_argument('--analysis_level', help='Level of the analysis that will be performed. ' + 'Multiple participant level analyses can be run independently ' + '(in parallel) using the same output_dir.', choices=['participant'], nargs='?') + + parser.add_argument('--participant_label', + help='The label(s) of the participant(s) that should be analyzed. The label ' + 'corresponds to sub- from the BIDS spec ' + '(so it does not include "sub-"). If this parameter is not ' + 'provided all subjects should be analyzed. Multiple ' + 'participants can be specified with a space separated list.', + nargs="+") + + parser.add_argument('--bids_filter_file', action='store', type=op.abspath, + help='a JSON file describing custom BIDS input filters using PyBIDS. ' + 'For further details, please check out http://bids-apps.neuroimaging.io/rsHRF/') + + group_mask = parser.add_mutually_exclusive_group(required=False) + + group_mask.add_argument('--atlas', action='store', type=op.abspath, + help='the absolute path to a single atlas file') + + group_mask.add_argument('--brainmask', action='store_true', + help='to enable the use of mask files present in the BIDS ' + 'directory itself') + + group_para = parser.add_argument_group('Parameters') + + group_para.add_argument('--estimation', action='store', + choices=['canon2dd', 'sFIR', 'FIR', 'fourier', 'hanning', 'gamma'], + help='Choose the estimation procedure from ' + 'canon2dd (canonical shape with 2 derivatives), ' + 'sFIR (smoothed Finite Impulse Response), ' + 'FIR (Finite Impulse Response), ' + 'fourier (Fourier Basis Set), ' + 'hanning (Fourier Basis w Hanning), ' + 'gamma (Gamma Basis Set)') + + group_para.add_argument('--passband', action='store', type=float, nargs=2, metavar=('LOW_FREQ','HIGH_FREQ'), + default=[0.01, 0.08], + help='set intervals for bandpass filter, default is 0.01 - 0.08') + + group_para.add_argument('--passband_deconvolve', action='store', type=float, nargs=2, metavar=('LOW_FREQ', 'HIGH_FREQ'), + default=[0.0, sys.float_info.max], + help='set intervals for bandpass filter (used while deconvolving BOLD), default is no-filtering') + + group_para.add_argument('-TR', action='store', type=float, default=-1, + help='set TR parameter') + + group_para.add_argument('-T', action='store', type=int, default=3, + help='set T parameter') + + group_para.add_argument('-T0', action='store', type=int, default=1, + help='set T0 parameter') + + group_para.add_argument('-TD_DD', action='store', type=int, default=2, + help='set TD_DD parameter') + + group_para.add_argument('-AR_lag', action='store', type=int, default=1, + help='set AR_lag parameter') + + group_para.add_argument('--thr', action='store', type=float, default=1, + help='set thr parameter') + + group_para.add_argument('--temporal_mask', action='store', type=op.abspath, + help='the path for the (temporal) mask file.\n The mask file should be a ".dat" file, consisting of a binary string of the same length as the signal') + + group_para.add_argument('--order', action='store', type=int, default=3, + help='set the number of basis vectors') + + group_para.add_argument('--len', action='store', type=int, default=24, + help='set len parameter') + + group_para.add_argument('--min_onset_search', action='store', type=int, default=4, + help='set min_onset_search parameter') + + group_para.add_argument('--max_onset_search', action='store', type=int, default=8, + help='set max_onset_search parameter') + + group_para.add_argument('--localK', action='store', type=int, + help='set localK') + + group_para.add_argument('--wiener', action='store_true', + help='to perform iterative wiener deconvolution') + + return parser + + +def run_rsHRF(): + parser = get_parser() + args = parser.parse_args() + arg_groups = {} + for group in parser._action_groups: + group_dict = {a.dest: getattr(args, a.dest, None) for a in group._group_actions } + arg_groups[group.title] = group_dict + para = arg_groups['Parameters'] + nargs = len(sys.argv) + temporal_mask = [] + + if (not args.GUI) and (args.output_dir is None): + parser.error('--output_dir is required when executing in command-line interface') + + if (not args.GUI) and (args.estimation is None): + parser.error('--estimation rule is required when executing in command-line interface') + + if (args.GUI): + if (nargs == 2): + try: + from .rsHRF_GUI import run + run.run() + except ModuleNotFoundError: + parser.error('--GUI should not be used inside a Docker container') + else: + parser.error('--no other arguments should be supplied with --GUI') + + if (args.input_file is not None or args.ts is not None) and args.analysis_level: + parser.error('analysis_level cannot be used with --input_file or --ts, do not supply it') + + if (args.input_file is not None or args.ts is not None) and args.participant_label: + parser.error('participant_labels are not to be used with --input_file or --ts, do not supply it') + + if args.input_file is not None and args.brainmask: + parser.error('--brainmask cannot be used with --input_file, use --atlas instead') + + if args.ts is not None and (args.brainmask or args.atlas): + parser.error('--atlas or --brainmask cannot be used with --ts, do not supply it') + + if args.bids_dir is not None and not (args.brainmask or args.atlas): + parser.error('--atlas or --brainmask needs to be supplied with --bids_dir') + + if args.bids_dir is not None and not args.analysis_level: + parser.error('analysis_level needs to be supplied with bids_dir, choices=[participant]') + + if args.input_file is not None and (not args.input_file.endswith(('.nii', '.nii.gz', '.gii', '.gii.gz'))): + parser.error('--input_file should end with .gii, .gii.gz, .nii or .nii.gz') + + if args.atlas is not None and (not args.atlas.endswith(('.nii', '.nii.gz','.gii', '.gii.gz'))): + parser.error('--atlas should end with .gii, .gii.gz, .nii or .nii.gz') + + if args.ts is not None and (not args.ts.endswith(('.txt'))): + parser.error('--ts file should end with .txt') + + if args.temporal_mask is not None and (not args.temporal_mask.endswith(('.dat'))): + parser.error('--temporal_mask ile should end with ".dat"') + + if args.temporal_mask is not None: + f = open(args.temporal_mask,'r') + for line in f: + for each in line: + if each in ['0','1']: + temporal_mask.append(int(each)) + + if args.estimation == 'sFIR' or args.estimation == 'FIR': + para['T'] = 1 + + if args.ts is not None: + file_type = op.splitext(args.ts) + if para['TR'] <= 0: + parser.error('Please supply a valid TR using -TR argument') + else: + TR = para['TR'] + para['dt'] = para['TR'] / para['T'] + para['lag'] = np.arange(np.fix(para['min_onset_search'] / para['dt']), + np.fix(para['max_onset_search'] / para['dt']) + 1, + dtype='int') + fourD_rsHRF.demo_rsHRF(args.ts, None, args.output_dir, para, args.n_jobs, file_type, mode='time-series', temporal_mask=temporal_mask, wiener=args.wiener) + + if args.input_file is not None: + if args.atlas is not None: + if (args.input_file.endswith(('.nii', '.nii.gz')) and args.atlas.endswith(('.gii', '.gii.gz'))) or (args.input_file.endswith(('.gii', '.gii.gz')) and args.atlas.endswith(('.nii', '.nii.gz'))): + parser.error('--atlas and input_file should be of the same type [NIfTI or GIfTI]') + + # carry analysis with input_file and atlas + file_type = op.splitext(args.input_file) + if file_type[-1] == ".gz": + file_type = op.splitext(file_type[-2])[-1] + file_type[-1] + else: + file_type = file_type[-1] + if ".nii" in file_type: + TR = (spm_dep.spm.spm_vol(args.input_file).header.get_zooms())[-1] + else: + if para['TR'] == -1: + parser.error('Please supply a valid TR using -TR argument') + else: + TR = para['TR'] + if TR <= 0: + if para['TR'] <= 0: + parser.error('Please supply a valid TR using -TR argument') + else: + if para['TR'] == -1: + para['TR'] = TR + elif para['TR'] <= 0: + print('Invalid TR supplied, using implicit TR: {0}'.format(TR)) + para['TR'] = TR + para['dt'] = para['TR'] / para['T'] + para['lag'] = np.arange(np.fix(para['min_onset_search'] / para['dt']), + np.fix(para['max_onset_search'] / para['dt']) + 1, + dtype='int') + fourD_rsHRF.demo_rsHRF(args.input_file, args.atlas, args.output_dir, para, args.n_jobs, file_type, mode='input', temporal_mask=temporal_mask, wiener=args.wiener) + + if args.bids_dir is not None: + utils.bids.write_derivative_description(args.bids_dir, args.output_dir) + bids_dir = Path(args.bids_dir) + fname = bids_dir / 'dataset_description.json' + + if fname.exists(): + desc = json.loads(Path(fname).read_text()) + if 'DataType' in desc : + if desc['DataType'] != 'derivative': + parser.error('Input data is not a derivative dataset' + ' (DataType in dataset_description.json is not equal to "derivative")') + + else : + parser.error('DataType is not defined in the dataset_description.json file. Please make sure DataType is defined. ' + 'Information on the dataset_description.json file can be found online ' + '(https://bids-specification.readthedocs.io/en/stable/03-modality-agnostic-files.html' + '#derived-dataset-and-pipeline-description)') + else : + parser.error('Could not find dataset_description.json file. Please make sure the BIDS data ' + 'structure is present and correct. Datasets can be validated online ' + 'using the BIDS Validator (http://incf.github.io/bids-validator/).') + + + if args.bids_dir is not None and args.atlas is not None: + # carry analysis with bids_dir and 1 atlas + layout = BIDSLayout(args.bids_dir, validate=False, config =['bids', 'derivatives']) + + if args.participant_label: + input_subjects = args.participant_label + subjects_to_analyze = layout.get_subjects(subject=input_subjects) + else: + subjects_to_analyze = layout.get_subjects() + + if not subjects_to_analyze: + parser.error('Could not find participants. Please make sure the BIDS data ' + 'structure is present and correct. Datasets can be validated online ' + 'using the BIDS Validator (http://incf.github.io/bids-validator/).') + + if not args.atlas.endswith(('.nii', '.nii.gz')): + parser.error('--atlas should end with .nii or .nii.gz') + + if args.bids_filter_file is not None: + filter_list = json.loads(Path(args.bids_filter_file).read_text()) + + default_input = {'extension': 'nii.gz', + 'datatype' : 'func', + 'desc': 'preproc', + 'task' : 'rest', + 'suffix': 'bold'} + default_input['subject']=subjects_to_analyze + default_input.update(filter_list['bold']) + + all_inputs = layout.get(return_type='filename',**default_input) + + else : + all_inputs = layout.get(return_type='filename',datatype='func', subject=subjects_to_analyze, task='rest',desc='preproc',suffix='bold', extension=['nii', 'nii.gz']) + + if not all_inputs != []: + parser.error('There are no files of type *bold.nii / *bold.nii.gz ' + 'Please make sure to have at least one file of the above type ' + 'in the BIDS specification') + else: + num_errors = 0 + for file_count in range(len(all_inputs)): + try: + TR = layout.get_metadata(all_inputs[file_count])['RepetitionTime'] + except KeyError as e: + TR = spm_dep.spm.spm_vol(all_inputs[file_count]).header.get_zooms()[-1] + para['TR'] = TR + para['dt'] = para['TR'] / para['T'] + para['lag'] = np.arange(np.fix(para['min_onset_search'] / para['dt']), + np.fix(para['max_onset_search'] / para['dt']) + 1, + dtype='int') + num_errors += 1 + try: + fourD_rsHRF.demo_rsHRF(all_inputs[file_count], args.atlas, args.output_dir, para, args.n_jobs, file_type, mode='bids w/ atlas', temporal_mask=temporal_mask, wiener=args.wiener) + num_errors -=1 + except ValueError as err: + print(err.args[0]) + except: + print("Unexpected error:", sys.exc_info()[0]) + success = len(all_inputs) - num_errors + if success == 0: + raise RuntimeError('Dimensions were inconsistent for all input-mask pairs; \n' + 'No inputs were processed!') + + if args.bids_dir is not None and args.brainmask: + # carry analysis with bids_dir and brainmask + layout = BIDSLayout(args.bids_dir, validate=False, config =['bids', 'derivatives']) + + if args.participant_label: + input_subjects = args.participant_label + subjects_to_analyze = layout.get_subjects(subject=input_subjects) + else: + subjects_to_analyze = layout.get_subjects() + + if not subjects_to_analyze: + parser.error('Could not find participants. Please make sure the BIDS data ' + 'structure is present and correct. Datasets can be validated online ' + 'using the BIDS Validator (http://incf.github.io/bids-validator/).') + + if args.bids_filter_file is not None: + filter_list = json.loads(Path(args.bids_filter_file).read_text()) + + default_input = {'extension': 'nii.gz', + 'datatype' : 'func', + 'desc': 'preproc', + 'task' : 'rest', + 'suffix': 'bold'} + default_input['subject']=subjects_to_analyze + default_input.update(filter_list['bold']) + + all_inputs = layout.get(return_type='filename',**default_input) + + default_mask={'extension': 'nii.gz', + 'datatype': 'func', + 'desc': 'brain', + 'task':'rest', + 'suffix':'mask'} + default_mask['subject']=subjects_to_analyze + default_mask.update(filter_list['mask']) + + all_masks = layout.get(return_type='filename',**default_mask) + + + else: + all_inputs = layout.get(return_type='filename',datatype='func', subject=subjects_to_analyze, task='rest',desc='preproc',suffix='bold', extension=['nii', 'nii.gz']) + all_masks = layout.get(return_type='filename', datatype='func', subject=subjects_to_analyze, task='rest',desc='brain',suffix='mask', extension=['nii', 'nii.gz']) + + if not all_inputs != []: + parser.error('There are no files of type *bold.nii / *bold.nii.gz ' + 'Please make sure to have at least one file of the above type ' + 'in the BIDS specification') + if not all_masks != []: + parser.error('There are no files of type *mask.nii / *mask.nii.gz ' + 'Please make sure to have at least one file of the above type ' + 'in the BIDS specification') + if len(all_inputs) != len(all_masks): + parser.error('The number of *bold.nii / .nii.gz and the number of ' + '*mask.nii / .nii.gz are different. Please make sure that ' + 'there is one mask for each input_file present') + + all_inputs.sort() + all_masks.sort() + + all_prefix_match = False + prefix_match_count = 0 + for i in range(len(all_inputs)): + input_prefix = all_inputs[i].split('/')[-1].split('_desc')[0] + mask_prefix = all_masks[i].split('/')[-1].split('_desc')[0] + if input_prefix == mask_prefix: + prefix_match_count += 1 + else: + all_prefix_match = False + break + if prefix_match_count == len(all_inputs): + all_prefix_match = True + + if not all_prefix_match: + parser.error('The mask and input files should have the same prefix for correspondence. ' + 'Please consider renaming your files') + else: + num_errors = 0 + for file_count in range(len(all_inputs)): + file_type = all_inputs[file_count].split('bold')[1] + if file_type == ".nii" or file_type == ".nii.gz": + try: + TR = layout.get_metadata(all_inputs[file_count])['RepetitionTime'] + except KeyError as e: + TR = spm_dep.spm.spm_vol(all_inputs[file_count]).header.get_zooms()[-1] + para['TR'] = TR + else: + spm_dep.spm.spm_vol(all_inputs[file_count]) + TR = spm_dep.spm.spm_vol(all_inputs[file_count]).get_arrays_from_intent("NIFTI_INTENT_TIME_SERIES")[0].meta.get_metadata()["TimeStep"] + para['TR'] = float(TR) * 0.001 + + + para['dt'] = para['TR'] / para['T'] + para['lag'] = np.arange(np.fix(para['min_onset_search'] / para['dt']), + np.fix(para['max_onset_search'] / para['dt']) + 1, + dtype='int') + num_errors += 1 + try: + fourD_rsHRF.demo_rsHRF(all_inputs[file_count], all_masks[file_count], args.output_dir, para, args.n_jobs, mode='bids', temporal_mask=temporal_mask, wiener=args.wiener) + num_errors -=1 + except ValueError as err: + print(err.args[0]) + except: + print("Unexpected error:", sys.exc_info()[0]) + success = len(all_inputs) - num_errors + if success == 0: + raise RuntimeError('Dimensions were inconsistent for all input-mask pairs; \n' + 'No inputs were processed!') + + + +def main(): + warnings.filterwarnings("ignore") + run_rsHRF() + + +if __name__ == '__main__': + raise RuntimeError("CLI.py should not be run directly;\n" + "Please `pip install` rsHRF and use the `rsHRF` command") \ No newline at end of file diff --git a/build/lib/rsHRF/VERSION b/build/lib/rsHRF/VERSION new file mode 100755 index 0000000..fa5512a --- /dev/null +++ b/build/lib/rsHRF/VERSION @@ -0,0 +1 @@ +1.5.8 \ No newline at end of file diff --git a/build/lib/rsHRF/__about__.py b/build/lib/rsHRF/__about__.py new file mode 100644 index 0000000..33bc2ee --- /dev/null +++ b/build/lib/rsHRF/__about__.py @@ -0,0 +1,12 @@ +"""Base module variables.""" +from os import path as op + +with open(op.join(op.dirname(op.realpath(__file__)), "VERSION"), "r") as fh: + __version__ = fh.read().strip('\n') + +__packagename__ = 'rsHRF' +__url__ = 'https://github.com/BIDSapps/rsHRF' + +DOWNLOAD_URL = ( + 'https://github.com/BIDS-Apps/{name}/'.format( + name=__packagename__)) \ No newline at end of file diff --git a/build/lib/rsHRF/__init__.py b/build/lib/rsHRF/__init__.py new file mode 100644 index 0000000..1b18cf2 --- /dev/null +++ b/build/lib/rsHRF/__init__.py @@ -0,0 +1,10 @@ +import rsHRF.spm_dep +import rsHRF.processing +import rsHRF.canon +import rsHRF.sFIR +import rsHRF.parameters +import rsHRF.fourD_rsHRF +import rsHRF.CLI +__all__ = ["spm_dep", "processing", "canon", "utils", + "sFIR", "parameters", "basis_functions", + "fourD_rsHRF.py", "CLI.py", "iterative_wiener_deconv"] diff --git a/build/lib/rsHRF/__main__.py b/build/lib/rsHRF/__main__.py new file mode 100644 index 0000000..a1d7bba --- /dev/null +++ b/build/lib/rsHRF/__main__.py @@ -0,0 +1,3 @@ +from rsHRF import CLI + +CLI.main() diff --git a/build/lib/rsHRF/basis_functions/__init__.py b/build/lib/rsHRF/basis_functions/__init__.py new file mode 100644 index 0000000..b3b472e --- /dev/null +++ b/build/lib/rsHRF/basis_functions/__init__.py @@ -0,0 +1 @@ +from . import basis_functions diff --git a/build/lib/rsHRF/basis_functions/basis_functions.py b/build/lib/rsHRF/basis_functions/basis_functions.py new file mode 100644 index 0000000..d0d50b2 --- /dev/null +++ b/build/lib/rsHRF/basis_functions/basis_functions.py @@ -0,0 +1,69 @@ +import math +import numpy as np +from scipy.stats import gamma +from rsHRF import canon, spm_dep, sFIR + +import warnings +warnings.filterwarnings("ignore") + +""" +BASIS FUNCTION COMPUTATION +""" + +def get_basis_function(bold_sig_shape, para): + N, nvar = bold_sig_shape + dt = para['dt'] # 'time bin for basis functions {secs}'; + l = para['len'] + if "gamma" in para['estimation']: + pst = np.arange(0,l+0.01,dt) #the 0.01 is because the rounding is different between python and matlab + bf = gamma_bf(pst,para['order']) + elif 'fourier' in para['estimation'] or 'hanning' in para['estimation']: + pst = np.arange(0,l+0.01,dt) #the 0.01 is because the rounding is different between python and matlab + pst = pst/max(pst) + bf = fourier_bf(pst,para) + elif 'canon' in para['estimation']: + bf = canon2dd_bf(bold_sig_shape, para) + bf = spm_dep.spm.spm_orth(np.asarray(bf)) + return bf + +def canon2dd_bf(data_shape, para): + """ + Returns canon basis functions + """ + N, nvar = data_shape + bf = canon.canon_hrf2dd.wgr_spm_get_canonhrf(para) + if 'Volterra' in para: + if para['Volterra'] == 2: + bf2 = np.einsum('i...,j...->ij...',bf.T,bf.T).reshape(-1, bf.shape[0]).T + bf = np.column_stack((bf, bf2)) + return bf + +def fourier_bf(pst, para): + """ + Returns Fourier (Hanning) basis functions + """ + if "hanning" in para['estimation']: + g = (1 - np.cos(2*math.pi*pst)) / 2 + else: + g = np.ones(len(pst)) + sin_ = lambda x : np.sin(x*2*math.pi) + cos_ = lambda x : np.cos(x*2*math.pi) + sin_ = np.vectorize(sin_) + cos_ = np.vectorize(cos_) + arr = np.arange(1, para['order']+1) + s = sin_(np.einsum('i,j->ij',arr,pst)) + c = cos_(np.einsum('i,j->ij',arr,pst)) + s = np.multiply(g,s) + c = np.multiply(g,c) + g = np.expand_dims(g, axis=1).T + return np.concatenate((g, s, c), axis=0).T + +def gamma_bf(u,h): + """ + Returns Gamma basis functions + """ + arr = np.arange(2, h+2) + f = np.vectorize(gamma.pdf, signature='(n),()->(n)') + m = np.power(2, arr) + return f(u,m).T + diff --git a/build/lib/rsHRF/canon/__init__.py b/build/lib/rsHRF/canon/__init__.py new file mode 100644 index 0000000..1674993 --- /dev/null +++ b/build/lib/rsHRF/canon/__init__.py @@ -0,0 +1 @@ +from . import canon_hrf2dd diff --git a/build/lib/rsHRF/canon/canon_hrf2dd.py b/build/lib/rsHRF/canon/canon_hrf2dd.py new file mode 100644 index 0000000..78826cf --- /dev/null +++ b/build/lib/rsHRF/canon/canon_hrf2dd.py @@ -0,0 +1,29 @@ +import numpy as np +from ..spm_dep import spm + +import warnings +warnings.filterwarnings("ignore") + +def wgr_spm_get_canonhrf(xBF): + dt = xBF['dt'] + fMRI_T = xBF['T'] + p = np.array([6, 16, 1, 1, 6, 0, 32], dtype=float) + p[len(p) - 1] = xBF['len'] + bf = spm.spm_hrf(dt, p, fMRI_T) + bf = bf[:, np.newaxis] + # time-derivative + if xBF['TD_DD']: + dp = 1 + p[5] = p[5] + dp + D = (bf[:, 0] - spm.spm_hrf(dt, p, fMRI_T)) / dp + D = D[:, np.newaxis] + bf = np.append(bf, D, axis=1) + p[5] = p[5] - dp + # dispersion-derivative + if xBF['TD_DD'] == 2: + dp = 0.01 + p[2] = p[2] + dp + D = (bf[:, 0] - spm.spm_hrf(dt, p, fMRI_T)) / dp + D = D[:, np.newaxis] + bf = np.append(bf, D, axis=1) + return bf diff --git a/build/lib/rsHRF/fourD_rsHRF.py b/build/lib/rsHRF/fourD_rsHRF.py new file mode 100644 index 0000000..d178f04 --- /dev/null +++ b/build/lib/rsHRF/fourD_rsHRF.py @@ -0,0 +1,201 @@ +import os +import matplotlib +matplotlib.use('agg') +import numpy as np +import nibabel as nib +import scipy.io as sio +import matplotlib.pyplot as plt +from bids.layout import BIDSLayout, parse_file_entities +from scipy import stats, signal +from scipy.sparse import lil_matrix +from rsHRF import spm_dep, processing, parameters, basis_functions, utils, iterative_wiener_deconv + +import warnings +warnings.filterwarnings("ignore") + +def demo_rsHRF(input_file, mask_file, output_dir, para, p_jobs, file_type=".nii", mode="bids", wiener=False, temporal_mask=[]): + # book-keeping w.r.t parameter values + if 'localK' not in para or para['localK'] == None: + if para['TR']<=2: + para['localK'] = 1 + else: + para['localK'] = 2 + # creating the output-directory if not already present + if not os.path.isdir(output_dir): + os.mkdir(output_dir) + # for four-dimensional input + if mode != 'time-series': + if mode == 'bids' or mode == 'bids w/ atlas': + name = input_file.split('/')[-1].split('.')[0] + v1 = spm_dep.spm.spm_vol(input_file) + else: + name = input_file.split('/')[-1].split('.')[0] + v1 = spm_dep.spm.spm_vol(input_file) + if mask_file != None: + if mode == 'bids': + mask_name = mask_file.split('/')[-1].split('.')[0] + v = spm_dep.spm.spm_vol(mask_file) + else: + mask_name = mask_file.split('/')[-1].split('.')[0] + v = spm_dep.spm.spm_vol(mask_file) + if file_type == ".nii" or file_type == ".nii.gz": + brain = spm_dep.spm.spm_read_vols(v) + else: + brain = v.agg_data().flatten(order='F') + if ((file_type == ".nii" or file_type == ".nii.gz") and \ + v1.header.get_data_shape()[:-1] != v.header.get_data_shape()) or \ + ((file_type == ".gii" or file_type == ".gii.gz") and \ + v1.agg_data().shape[0]!= v.agg_data().shape[0]): + raise ValueError ('Inconsistency in input-mask dimensions' + '\n\tinput_file == ' + name + file_type + '\n\tmask_file == ' + mask_name + file_type) + else: + if file_type == ".nii" or file_type == ".nii.gz" : + data = v1.get_fdata() + else: + data = v1.agg_data() + else: + print('No atlas provided! Generating mask file...') + if file_type == ".nii" or file_type == ".nii.gz" : + data = v1.get_fdata() + brain = np.nanvar(data.reshape(-1, data.shape[3]), -1, ddof=0) + else: + data = v1.agg_data() + brain = np.nanvar(data, -1, ddof=0) + print('Done') + voxel_ind = np.where(brain > 0)[0] + mask_shape = data.shape[:-1] + nobs = data.shape[-1] + data1 = np.reshape(data, (-1, nobs), order='F').T + bold_sig = stats.zscore(data1[:, voxel_ind], ddof=1) + # for time-series input + else: + name = input_file.split('/')[-1].split('.')[0] + data1 = (np.loadtxt(input_file, delimiter=",")) + if data1.ndim == 1: + data1 = np.expand_dims(data1, axis=1) + nobs = data1.shape[0] + bold_sig = stats.zscore(data1, ddof=1) + if len(temporal_mask) > 0 and len(temporal_mask) != nobs: + raise ValueError ('Inconsistency in temporal_mask dimensions.\n' + 'Size of mask: ' + str(len(temporal_mask)) + '\n' + 'Size of time-series: ' + str(nobs)) + bold_sig = np.nan_to_num(bold_sig) + bold_sig_deconv = processing. \ + rest_filter. \ + rest_IdealFilter(bold_sig, para['TR'], para['passband_deconvolve']) + bold_sig = processing. \ + rest_filter. \ + rest_IdealFilter(bold_sig, para['TR'], para['passband']) + data_deconv = np.zeros(bold_sig.shape) + event_number = np.zeros((1, bold_sig.shape[1])) + print('Retrieving HRF ...') + #Estimate HRF for the fourier / hanning / gamma / cannon basis functions + if not (para['estimation'] == 'sFIR' or para['estimation'] == 'FIR'): + bf = basis_functions.basis_functions.get_basis_function(bold_sig.shape, para) + beta_hrf, event_bold = utils.hrf_estimation.compute_hrf(bold_sig, para, temporal_mask, p_jobs, bf=bf) + hrfa = np.dot(bf, beta_hrf[np.arange(0, bf.shape[1]), :]) + #Estimate HRF for FIR and sFIR + else: + para['T'] = 1 + beta_hrf, event_bold = utils.hrf_estimation.compute_hrf(bold_sig, para, temporal_mask, p_jobs) + hrfa = beta_hrf[:-1,:] + nvar = hrfa.shape[1] + PARA = np.zeros((3, nvar)) + for voxel_id in range(nvar): + hrf1 = hrfa[:, voxel_id] + PARA[:, voxel_id] = \ + parameters.wgr_get_parameters(hrf1, para['TR'] / para['T']) + print('Done') + print('Deconvolving HRF ...') + if para['T'] > 1: + hrfa_TR = signal.resample_poly(hrfa, 1, para['T']) + else: + hrfa_TR = hrfa + for voxel_id in range(nvar): + hrf = hrfa_TR[:, voxel_id] + if not wiener: + H = np.fft.fft( + np.append(hrf, + np.zeros((nobs - max(hrf.shape), 1))), axis=0) + M = np.fft.fft(bold_sig_deconv[:, voxel_id]) + data_deconv[:, voxel_id] = \ + np.fft.ifft(H.conj() * M / (H * H.conj() + .1*np.mean((H * H.conj())))) + else: + data_deconv[:, voxel_id] = iterative_wiener_deconv.rsHRF_iterative_wiener_deconv(bold_sig_deconv[:, voxel_id], hrf) + event_number[:, voxel_id] = np.amax(event_bold[voxel_id].shape) + print('Done') + print('Saving Output ...') + # setting the output-path + if mode == 'bids' or mode == 'bids w/ atlas': + layout_output = BIDSLayout(output_dir) + entities = parse_file_entities(input_file) + sub_save_dir = layout_output.build_path(entities).rsplit('/',1)[0] + else: + sub_save_dir = output_dir + if not os.path.isdir(sub_save_dir): + os.makedirs(sub_save_dir, exist_ok=True) + dic = {'para': para, 'hrfa': hrfa, 'event_bold': event_bold, 'PARA': PARA} + ext = '_hrf.mat' + if mode == "time-series": + dic["event_number"] = event_number + dic["data_deconv"] = data_deconv + ext = '_hrf_deconv.mat' + name = name.rsplit('_bold', 1)[0] + sio.savemat(os.path.join(sub_save_dir, name + ext), dic) + HRF_para_str = ['height', 'T2P', 'FWHM'] + if mode != "time-series": + mask_data = np.zeros(mask_shape).flatten(order='F') + for i in range(3): + fname = os.path.join(sub_save_dir, + name + '_' + HRF_para_str[i]) + mask_data[voxel_ind] = PARA[i, :] + mask_data = mask_data.reshape(mask_shape, order='F') + spm_dep.spm.spm_write_vol(v1, mask_data, fname, file_type) + mask_data = mask_data.flatten(order='F') + fname = os.path.join(sub_save_dir, name + '_eventnumber') + mask_data[voxel_ind] = event_number + mask_data = mask_data.reshape(mask_shape, order='F') + spm_dep.spm.spm_write_vol(v1, mask_data, fname, file_type) + mask_data = np.zeros(data.shape) + dat3 = np.zeros(data.shape[:-1]).flatten(order='F') + for i in range(nobs): + fname = os.path.join(sub_save_dir, name + '_deconv') + dat3[voxel_ind] = data_deconv[i, :] + dat3 = dat3.reshape(data.shape[:-1], order='F') + if file_type == ".nii" or file_type == ".nii.gz" : + mask_data[:, :, :, i] = dat3 + else: + mask_data[:, i] = dat3 + dat3 = dat3.flatten(order='F') + spm_dep.spm.spm_write_vol(v1, mask_data, fname, file_type) + pos = 0 + while pos < hrfa_TR.shape[1]: + if np.any(hrfa_TR[:,pos]): + break + pos += 1 + event_plot = lil_matrix((1, nobs)) + if event_bold.size: + event_plot[:, event_bold[pos]] = 1 + else: + print("No Events Detected!") + return 0 + event_plot = np.ravel(event_plot.toarray()) + plt.figure() + plt.plot(para['TR'] * np.arange(1, np.amax(hrfa_TR[:, pos].shape) + 1), + hrfa_TR[:, pos], linewidth=1) + plt.xlabel('time (s)') + plt.savefig(os.path.join(sub_save_dir, name + '_hrf_plot.png')) + plt.figure() + plt.plot(para['TR'] * np.arange(1, nobs + 1), + np.nan_to_num(stats.zscore(bold_sig[:, pos], ddof=1)), + linewidth=1) + plt.plot(para['TR'] * np.arange(1, nobs + 1), + np.nan_to_num(stats.zscore(data_deconv[:, pos], ddof=1)), + color='r', linewidth=1) + markerline, stemlines, baseline = \ + plt.stem(para['TR'] * np.arange(1, nobs + 1), event_plot) + plt.setp(baseline, 'color', 'k', 'markersize', 1) + plt.setp(stemlines, 'color', 'k') + plt.setp(markerline, 'color', 'k', 'markersize', 3, 'marker', 'd') + plt.legend(['BOLD', 'Deconvolved BOLD', 'Events'], loc='best') + plt.xlabel('time (s)') + plt.savefig(os.path.join(sub_save_dir, name + '_deconvolution_plot.png')) + print('Done') + return 0 diff --git a/build/lib/rsHRF/iterative_wiener_deconv.py b/build/lib/rsHRF/iterative_wiener_deconv.py new file mode 100644 index 0000000..774ed7a --- /dev/null +++ b/build/lib/rsHRF/iterative_wiener_deconv.py @@ -0,0 +1,39 @@ +# import pyyawt +import pywt +import numpy as np +from rsHRF.processing import knee + +def rsHRF_iterative_wiener_deconv(y, h, Iterations=1000): + N = y.shape[0] + nh = max(h.shape) + h = np.append(h, np.zeros((N - nh, 1))) + H = np.fft.fft(h, axis=0) + Y = np.fft.fft(y, axis=0) + coeffs = pywt.wavedec(abs(y), 'db2', level=1) + sigma = np.median(np.abs(coeffs[-1])) / 0.6745 + Phh = np.square(abs(H)) + sqrdtempnorm = ((((np.linalg.norm(y-np.mean(y), 2)**2) - (N-1)*(sigma**2))) / (np.linalg.norm(h,1))**2) + Nf = (sigma**2)*N + tempreg = Nf/sqrdtempnorm + Pxx0 = np.square(abs(np.multiply(Y, (np.divide(np.conj(H), (Phh + N*tempreg)))))) + Pxx = Pxx0 + Sf = Pxx.reshape(-1, 1) + for i in range(0, Iterations): + M = np.divide(np.multiply(np.multiply(np.conjugate(H), Pxx), Y), np.add(np.multiply(np.square(abs(H)), Pxx), Nf)) + PxxY = np.divide(np.multiply(Pxx, Nf), np.add(np.multiply(np.square(abs(H)), Pxx), Nf)) + Pxx = np.add(PxxY, np.square(abs(M))) + Sf = np.concatenate((Sf, Pxx.reshape(-1, 1)), axis=1) + dSf = np.diff(Sf, 1, 1) + dSfmse = np.mean(np.square(dSf), axis=1) + _, idx = knee.knee_pt(dSfmse) + idm = np.argmin(dSfmse) + ratio = np.abs(dSfmse[idx] - dSfmse[idm])/(np.abs(np.max(dSfmse) - np.min(dSfmse))) + if ratio > 0.5: + id0 = idm + else: + id0 = idx + # Safe indexing to avoid IndexError + safe_index = min(id0 + 1, Sf.shape[1] - 1) + Pxx = Sf[:, safe_index] + WienerFilterEst = np.divide(np.multiply(np.conj(H), Pxx), np.add(np.multiply(np.square(abs(H)), Pxx), Nf)) + return np.real(np.fft.ifft(np.multiply(WienerFilterEst, Y))) \ No newline at end of file diff --git a/build/lib/rsHRF/parameters.py b/build/lib/rsHRF/parameters.py new file mode 100644 index 0000000..df81114 --- /dev/null +++ b/build/lib/rsHRF/parameters.py @@ -0,0 +1,44 @@ +import numpy as np +import warnings + +warnings.filterwarnings("ignore") + +def wgr_get_parameters(hdrf, dt): + """ + Find Model Parameters + h - Height + p - Time to peak (in units of dt where dt = TR/para.T) + w - Width at half-peak + """ + param = np.zeros((3, 1)) + + if(np.any(hdrf)): + n = np.fix(np.amax(hdrf.shape) * 0.8) + + p = np.argmax(np.absolute(hdrf[np.arange(0, n, dtype='int')])) + h = hdrf[p] + + if h > 0: + v = (hdrf >= (h / 2)) + else: + v = (hdrf <= (h / 2)) + v = v.astype(int) + b = np.argmin(np.diff(v)) + v[b + 1:] = 0 + w = np.sum(v) + + cnt = p - 1 + g = hdrf[1:] - hdrf[0:-1] + + while cnt > 0 and np.abs(g[cnt]) < 0.001: + h = hdrf[cnt - 1] + p = cnt + cnt = cnt - 1 + + param[0] = h + param[1] = (p + 1) * dt + param[2] = w * dt + + else: + print('.') + return param.ravel() diff --git a/build/lib/rsHRF/processing/__init__.py b/build/lib/rsHRF/processing/__init__.py new file mode 100644 index 0000000..9751036 --- /dev/null +++ b/build/lib/rsHRF/processing/__init__.py @@ -0,0 +1,2 @@ +from . import knee +from . import rest_filter diff --git a/build/lib/rsHRF/processing/knee.py b/build/lib/rsHRF/processing/knee.py new file mode 100644 index 0000000..d1cf95d --- /dev/null +++ b/build/lib/rsHRF/processing/knee.py @@ -0,0 +1,90 @@ +import numpy as np +import warnings + +warnings.filterwarnings("ignore") + +def knee_pt(y): + res_x, _id = knee_pt_helper(y) + _idm = np.argmin(y) + ratio = np.abs(y[_id]-y[_idm])/np.abs(np.max(y) - np.min(y)) + if ratio > 0.5: + idx_of_result = _idm + else: + idx_of_result = _id + return res_x, idx_of_result + +def knee_pt_helper(y, x=None): + x_was_none = False + use_absolute_dev_p = True + res_x = np.nan + idx_of_result = np.nan + + if not isinstance(y, np.ndarray): + print('knee_pt: y must be a numpy 1D vector') + return res_x, idx_of_result + else: + if y.ndim >= 2: + print('knee_pt: y must be 1 dimensional') + return res_x, idx_of_result + if np.size(y) == 0: + print('knee_pt: y can not be an empty vector') + return res_x, idx_of_result + else: + if x is None: + x_was_none = True + x = np.arange(1, np.amax(y.shape) + 1, dtype=int) + if x.shape != y.shape: + print('knee_pt: y and x must have the same dimensions') + return res_x, idx_of_result + if y.size < 3: + res_x, idx_of_result = np.min(y), np.argmin(y) + return res_x, idx_of_result + if np.all(np.diff(x) >= 0) and (not x_was_none): + idx = np.argsort(x) + y = np.sort(y) + x = np.sort(x) + else: + idx = np.arange(0, np.amax(x.shape)) + sigma_xy = np.cumsum(np.multiply(x, y), axis=0) + sigma_x = np.cumsum(x, axis=0) + sigma_y = np.cumsum(y, axis=0) + sigma_xx = np.cumsum(np.multiply(x, x), axis=0) + n = np.arange(1, np.amax(y.shape) + 1).conj().T + det = np.multiply(n, sigma_xx) - np.multiply(sigma_x, sigma_x) + mfwd = (np.multiply(n, sigma_xy) - + np.multiply(sigma_x, sigma_y)) / det + bfwd = -1 * ((np.multiply(sigma_x, sigma_xy) - + np.multiply(sigma_xx, sigma_y)) / det) + + sigma_xy = np.cumsum(np.multiply(x[::-1], y[::-1]), axis=0) + sigma_x = np.cumsum(x[::-1], axis=0) + sigma_y = np.cumsum(y[::-1], axis=0) + sigma_xx = np.cumsum(np.multiply(x[::-1], x[::-1]), axis=0) + n = np.arange(1, np.amax(y.shape) + 1).conj().T + det = np.multiply(n, sigma_xx) - np.multiply(sigma_x, sigma_x) + mbck = ((np.multiply(n, sigma_xy) - + np.multiply(sigma_x, sigma_y)) / det)[::-1] + bbck = (-1 * + ((np.multiply(sigma_x, sigma_xy) - + np.multiply(sigma_xx, sigma_y)) / det))[::-1] + + error_curve = np.full(y.shape, np.nan) + for breakpt in range(1, np.amax((y - 1).shape)): + delsfwd = (np.multiply(mfwd[breakpt], x[0:breakpt + 1]) + + bfwd[breakpt]) - y[0:breakpt + 1] + delsbck = (np.multiply(mbck[breakpt], x[breakpt:]) + + bbck[breakpt]) - y[breakpt:] + if use_absolute_dev_p: + error_curve[breakpt] = \ + np.sum(np.abs(delsfwd)) + np.sum(np.abs(delsbck)) + else: + error_curve[breakpt] = \ + np.sqrt(np.sum(np.multiply(delsfwd, delsfwd))) + \ + np.sqrt(np.sum(np.multiply(delsbck, delsbck))) + try: + loc = np.nanargmin(error_curve) + except ValueError as e: + loc = 0 + res_x = x[loc] + idx_of_result = idx[loc] + return res_x, idx_of_result diff --git a/build/lib/rsHRF/processing/rest_filter.py b/build/lib/rsHRF/processing/rest_filter.py new file mode 100644 index 0000000..9cb1e1b --- /dev/null +++ b/build/lib/rsHRF/processing/rest_filter.py @@ -0,0 +1,34 @@ +import numpy as np +import numpy.matlib +import warnings + +warnings.filterwarnings("ignore") + +def rest_IdealFilter(x, TR, Bands, m=5000): + nvar = x.shape[1] + nbin = int(np.ceil(nvar/m)) + for i in range(1, nbin + 1): + if i != nbin: + ind_X = [j for j in range((i-1)*m, i*m)] + else: + ind_X = [j for j in range((i-1)*m, nvar)] + x1 = x[:, ind_X] + x1 = conn_filter(TR,Bands,x1) + np.mean(x1, keepdims=True).repeat(x1.shape[0], axis=0) + x[:,ind_X] = x1 + return x + +def conn_filter(rt, filter, x): + Nx = x.shape[0] + fy = np.fft.fft(np.concatenate((x, np.flipud(x)), axis=0), axis=0) + f = np.arange(fy.shape[0]) + f = f.reshape(1, -1) + f = np.min((f, fy.shape[0]-f), axis=0) + low = filter[0]*(rt*fy.shape[0]) + high = filter[1]*(rt*fy.shape[0]) + idx_low = np.argwhere(np.any(f < low, axis=0)) + idx_high = np.argwhere(np.any(f >= high, axis=0)) + idx = np.concatenate((idx_low, idx_high)).reshape(-1) + fy[idx,:] = 0. + y = np.real(np.fft.ifft(fy, axis=0)) + y = y[0:Nx,:] + return y \ No newline at end of file diff --git a/build/lib/rsHRF/rsHRF_GUI/__init__.py b/build/lib/rsHRF/rsHRF_GUI/__init__.py new file mode 100644 index 0000000..d8668c3 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/__init__.py @@ -0,0 +1,6 @@ +from . import core +from . import misc +from . import datatypes +from . import gui_windows + +__all__ = ["core", "misc", "datatypes", "gui_windows"] diff --git a/build/lib/rsHRF/rsHRF_GUI/core/__init__.py b/build/lib/rsHRF/rsHRF_GUI/core/__init__.py new file mode 100644 index 0000000..a8d584a --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/core/__init__.py @@ -0,0 +1 @@ +from .core import Core \ No newline at end of file diff --git a/build/lib/rsHRF/rsHRF_GUI/core/core.py b/build/lib/rsHRF/rsHRF_GUI/core/core.py new file mode 100644 index 0000000..ad48722 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/core/core.py @@ -0,0 +1,356 @@ +import os +import numpy as np +import nibabel as nib +import scipy.io as sio +from bids.layout import BIDSLayout +from scipy import stats, signal +from scipy.sparse import lil_matrix +from ... import spm_dep, processing, parameters, basis_functions, utils + +from ..datatypes.timeseries.hrf import HRF +from ..datatypes.timeseries.bold_raw import BOLD_Raw +from ..datatypes.timeseries.bold_preprocessed import BOLD_Preprocessed +from ..datatypes.timeseries.bold_deconv import Bold_Deconv +from ..datatypes.misc.parameters import Parameters +from ..datatypes.misc.subject import Subject +from ..datatypes.misc.store import Store +from ..misc.status import Status + +import warnings +warnings.filterwarnings("ignore") + + +class Core(): + """ + All of the processing occurs here + """ + + def __init__(self): + # constructor + self.parameters = Parameters() # rsHRF parameters + self.dataStore = Store() # stores the information for the subjects + + # getters for data-store + def updateParameters(self, dic={}): + # updates the rsHRF-parameters + return self.parameters.set_parameters(dic) + + def get_parameters(self): + # returns the rsHRF-parameters + return self.parameters.get_parameters() + + def get_time_series(self, curr): + # gets the time-series + return self.dataStore.get_time_series(curr) + + def get_plotables(self, curr): + # gets all the time-series objects that can be plotted + return self.dataStore.get_plotables(curr) + + def get_store_info(self, curr): + # gets the information regarding the time-series objects + return self.dataStore.get_info(curr) + + def get_subjects(self): + # gets all the subjects present in the data-store + return self.dataStore.get_subjects() + + def get_data_labels(self, curr): + # gets all the labels present in the data-store + return self.dataStore.get_data_labels(curr) + + # saving data + def save_info(self, curr, out): + return self.dataStore.save_info(curr, out) + + def makeInput(self, inp): + """ + Obtains the input (file-paths and input-mode) from the main window + and updates the subjects/time-series objects appropriately + """ + # obtains the Raw BOLD data and preprocessed data, and updates the data-store + # each input comprises of an input_file, mask_file and a file_type, and the mode + input_file, mask_file, file_type, mode = inp + # if the mode is file (that is input is a stand-alone NIfTI or GIfTI file) + if mode == "file": + return self.makeInputFile(input_file, mask_file, file_type, 'file') + # if the input is present in a directory organized in BIDS format + elif "bids" in mode: + # obtaining all the input files + layout = BIDSLayout(input_file, validate=False, + config=['bids', 'derivatives']) + subjects_to_analyze = layout.get_subjects() + # if no subjects were found + if not subjects_to_analyze: + return Status(False, error='Could not find participants. Please make sure the BIDS data ' + 'structure is present and correct. Datasets can be validated online ' + 'using the BIDS Validator (http://incf.github.io/bids-validator/).') + all_inputs = layout.get(return_type='filename', datatype='func', subject=subjects_to_analyze, + task='rest', desc='preproc', suffix='bold', extension=['nii', 'nii.gz']) + # if no *bold.nii or *bold.nii.gz files were found + if not all_inputs != []: + return Status(False, error='There are no files of type *bold.nii / *bold.nii.gz ' + 'Please make sure to have at least one file of the above type ' + 'in the BIDS specification') + # if the atlas file is provided + if mode == "bids w/ atlas": + for file_count in range(len(all_inputs)): + # making input for every combination of input-file and atlas + temp = (self.makeInputFile( + all_inputs[file_count], mask_file, ".nii", 'bids w/ atlas')) + if not temp.get_state(): + return temp + # returns the status + return Status(True, info="Preprocessed all input", dic={"Number of Input Subjects: ": len(all_inputs)}) + # if the atlas file is not provided + elif mode == "bids": + # obtaining the masks + all_masks = layout.get(return_type='filename', datatype='func', subject=subjects_to_analyze, + task='rest', desc='brain', suffix='mask', extension=['nii', 'nii.gz']) + # if no mask files were found + if not all_masks != []: + return Status(False, error='There are no files of type *mask.nii / *mask.nii.gz ' + 'Please make sure to have at least one file of the above type ' + 'in the BIDS specification') + # if the number of mask files != number of input files + if len(all_inputs) != len(all_masks): + return Status(False, error='The number of *bold.nii / .nii.gz and the number of ' + '*mask.nii / .nii.gz are different. Please make sure that ' + 'there is one mask for each input_file present') + all_inputs.sort() + all_masks.sort() + # matching the prefix to align the inputs and the masks together + all_prefix_match = False + prefix_match_count = 0 + for i in range(len(all_inputs)): + input_prefix = all_inputs[i].split('/')[-1].split('_desc')[0] + mask_prefix = all_masks[i].split('/')[-1].split('_desc')[0] + + if input_prefix == mask_prefix: + prefix_match_count += 1 + else: + all_prefix_match = False + break + if prefix_match_count == len(all_inputs): + all_prefix_match = True + # if the mask and input files have different prefix + if not all_prefix_match: + return Status(False, error='The mask and input files should have the same prefix for correspondence. ' + 'Please consider renaming your files') + else: + # making input for every combination of input-file and mask-file + for file_count in range(len(all_inputs)): + temp = (self.makeInputFile( + all_inputs[file_count], all_masks[file_count], ".nii", 'bids')) + if not temp.get_state(): + return temp + # returns the status + return Status(True, info="Preprocessed all input", dic={"Number of Input Subjects: ": len(all_inputs)}) + + def makeInputFile(self, input_file, mask_file, file_type, mode): + """ + Obtains the Raw BOLD Time-series and Preprocessed BOLD Time-series + when the input is a stand-alone NIfTI or GIfTI file + """ + # if the input is in form of a File object + if 'bids' in mode: + input_file = input_file + # if the mask is in form of a File object + if mode == 'bids': + mask_file = mask_file + # getting the subject index + try: + subject_index = input_file.split("/")[-1].split("_")[0][4:] + except: + return Status(False, error="Input file should begin with 'sub-'") + # obtaining the header for the mask + try: + v = spm_dep.spm.spm_vol(mask_file) + except: + return Status(False, error="Invalid Mask File!") + # obtaining the header for the input + try: + v1 = spm_dep.spm.spm_vol(input_file) + except: + return Status(False, error="Invalid Input File!") + # obtaining the mask data + if file_type == ".nii" or file_type == ".nii.gz": + brain = spm_dep.spm.spm_read_vols(v) + elif file_type == ".gii" or file_type == ".gii.gz": + brain = v.agg_data().flatten(order='F') + else: + return Status(False, error="Invalid Input File Type!") + # brain voxel indices with as obtained by mask-data + voxel_ind = np.where(brain > 0)[0] + # checking the dimensions of the mask-file and input-file + if ((file_type == ".nii" or file_type == ".nii.gz") and v1.header.get_data_shape()[:-1] != v.header.get_data_shape()) or ((file_type == ".gii" or file_type == ".gii.gz") and v.agg_data().shape[0] != v.agg_data().shape[0]): + return Status(False, error='The dimension of your mask is different than the one of your fMRI data!') + # checking whether the subject is already present in the datastore + if not self.dataStore.is_present(subject_index): + # instantiating a new object if it is not present + subject = Subject(index=subject_index) + self.dataStore.add_subject(subject) + else: + # obtaining the object if it is present + subject = self.dataStore.get_subject_by_index(subject_index) + # checks if the BOLD time-series is already present + # if the time-series is not present + if not subject.is_present("BOLD", input_file): + if file_type == ".nii" or file_type == ".nii.gz": + data = v1.get_fdata() + nobs = data.shape[3] + data1 = np.reshape(data, (-1, nobs), order='F').T + elif file_type == ".gii" or file_type == ".gii.gz": + data = v1.agg_data() + _, nobs = data.shape + data1 = np.reshape(data, (-1, nobs), order='F').T + bold_ts = BOLD_Raw(label="BOLD", ts=np.array( + data1), para=self.parameters, subject_index=subject.get_subject_index()) + # the Raw BOLD Time-series is associated to a particular input-file + bold_ts.set_inputfile(input_file) + subject.add_BOLD_raw(bold_ts) # adding the time-series object + else: + bold_ts = subject.is_present("BOLD", input_file, getts=True) + data1 = bold_ts.get_ts() + # checks if the Preprocessed-BOLD time-series is already present + if not subject.is_present("Preprocessed-BOLD", (self.parameters, mask_file, bold_ts)): + # pre-processing the time-series + bold_sig = stats.zscore(data1[:, voxel_ind], ddof=1) + bold_sig = np.nan_to_num(bold_sig) + # instantiating the time-series objects + bold_pre_ts = BOLD_Preprocessed(label="Preprocessed-BOLD", ts=np.array( + bold_sig), para=self.parameters, subject_index=subject.get_subject_index()) + # the Preprocessed BOLD Time-series is associated to a particular Raw BOLD Time-Series + bold_pre_ts.set_BOLD_Raw(bold_ts) + bold_pre_ts.set_maskfile(mask_file) # and a particular mask_file + # adding the time-series objects + subject.add_BOLD_pre(bold_pre_ts) + # returning the status + return Status(True, info="Preprocessed Input!", dic={"Number of Time-Slices: ": bold_ts.get_shape()[0], "Number of Brain-Voxels: ": bold_ts.get_shape()[1]}) + return Status(False, error="Time series already exists. No new additions were made.") + + def retrieveHRF(self, bold_pre_ts, get_pos=False): + """ + Retrieves the resting-state Hemodynamic Response Function + with Preprocessed BOLD Time-series as input, and self.parameters + as the parameters + """ + subject_index = bold_pre_ts.get_subject_index( + ) # gets the subject-index associated to the preprocessed BOLD Time-series + subject = self.dataStore.get_subject_by_index( + subject_index) # gets the subject from the index + # if the HRF has already been retrieved for this particular set of inputs + if not subject.is_present("HRF", (self.parameters, bold_pre_ts)): + # inputs for retrieving the HRF + bold_sig = bold_pre_ts.get_ts() + bold_sig = processing. \ + rest_filter. \ + rest_IdealFilter(bold_sig, self.parameters.get_TR( + ), self.parameters.get_passband_deconvolve()) + para = self.parameters.get_parameters() + if not (para['estimation'] == 'sFIR' or para['estimation'] == 'FIR'): + # estimate HRF for the fourier / hanning / gamma / cannon basis functions + bf = basis_functions.basis_functions.get_basis_function( + bold_sig.shape, para) # obtaining the basis set + beta_hrf, event_bold = utils.hrf_estimation.compute_hrf( + bold_sig, para, [], -1, bf) + hrfa = np.dot(bf, beta_hrf[np.arange(0, bf.shape[1]), :]) + else: + # estimate HRF for FIR and sFIR + beta_hrf, event_bold = utils.hrf_estimation.compute_hrf( + bold_sig, para, [], -1) + hrfa = beta_hrf + # instantiating the time-series objects + hrf = HRF(label="HRF", ts=hrfa, + subject_index=subject_index, para=self.parameters) + # the HRF is associated to a particular Preprocessed BOLD Time-series + hrf.set_BOLD(bold_pre_ts) + hrf.set_event_bold(event_bold) # setting the bold-events + pos = subject.add_HRF(hrf) # adding the HRF to the subject + # returning the status + if get_pos: + return Status(True, info="Retrieved HRF!", dic={"Shape of HRF: ": hrf.get_shape()}), pos + else: + return Status(True, info="Retrieved HRF!", dic={"Shape of HRF: ": hrf.get_shape()}) + if get_pos: + return Status(False, error="Time series already exists. No new additions were made."), None + else: + return Status(False, error="Time series already exists. No new additions were made.") + + def getHRFParameters(self, hrf): + """ + Retrieves the resting-state Hemodynamic Response Function Parameters + with HRF as input, and self.parameters as the parameters + """ + # checking if the parameters have already been computed for HRF + if hrf.get_HRF_para().size != 0: + return Status(False, error="Parameters have already been computed for this HRF") + # inputs for obtaining the parameters + hrfa = hrf.get_ts() + para = hrf.get_parameters().get_parameters() + nvar = hrfa.shape[1] + PARA = np.zeros((3, nvar)) + average = [0 for i in range(3)] + # obtaining the parameters for each voxel + for voxel_id in range(nvar): + hrf1 = hrfa[:, voxel_id] + PARA[:, voxel_id] = parameters.wgr_get_parameters( + hrf1, para['TR'] / para['T']) + for i in range(3): + average[i] += PARA[i, voxel_id] + for i in range(3): + average[i] /= nvar + # setting the parameters + hrf.set_para(PARA) + # returning the status + return Status(True, info="Retrieved HRF Parameters", dic={"Average Height: ": str(average[0])[:3], + "Avearage Time-To-Peak: ": str(average[1])[:3] + " seconds", "Avearge Full-Width at Half-Max: ": str(average[2])[:3]}) + + def deconvolveHRF(self, hrf): + """ + Retrieves the Deconvolved BOLD Time-series + with HRF as input, and self.parameters as the parameters + """ + subject_index = hrf.get_subject_index( + ) # gets the subject-index associated to the preprocessed BOLD Time-series + subject = self.dataStore.get_subject_by_index( + subject_index) # gets the subject from the index + para = self.parameters.get_parameters() + # if the HRF has already been retrieved for this particular set of inputs + if not subject.is_present("Deconvolved-BOLD", (self.parameters, hrf)): + # inputs for retrieving the deconvolved BOLD + hrfa = hrf.get_ts() + bold_sig = hrf.get_associated_BOLD().get_ts() + bold_sig = processing. \ + rest_filter. \ + rest_IdealFilter(bold_sig, self.parameters.get_TR( + ), self.parameters.get_passband_deconvolve()) + event_bold = hrf.get_event_bold() + nvar = hrfa.shape[1] + nobs = bold_sig.shape[0] + data_deconv = np.zeros(bold_sig.shape) + event_number = np.zeros((1, bold_sig.shape[1])) + if para['T'] > 1: + hrfa_TR = signal.resample_poly(hrfa, 1, para['T']) + else: + hrfa_TR = hrfa + # obtaining the deconvolved BOLD for each voxel + for voxel_id in range(nvar): + hrf_ = hrfa_TR[:, voxel_id] + H = np.fft.fft(np.append(hrf_, np.zeros( + (nobs - max(hrf_.shape), 1))), axis=0) + M = np.fft.fft(bold_sig[:, voxel_id]) + data_deconv[:, voxel_id] = np.fft.ifft( + H.conj() * M / (H * H.conj() + .1*np.mean((H * H.conj())))) + event_number[:, voxel_id] = np.amax(event_bold[voxel_id].shape) + # instantiating the time-series object + dd = Bold_Deconv(label="Deconvolved-BOLD", ts=data_deconv, + subject_index=subject_index, para=hrf.get_parameters()) + # the deconvoled BOLD Time-series is associated to a particular HRF + dd.set_HRF(hrf) + dd.set_event_num(event_number) # setting the BOLD events + # adding the time-series to the subject + pos = subject.add_BOLD_deconv(dd) + # returning the status + return Status(True, info="Deconvolved BOLD Signal") + return Status(False, error="Time series already exists. No new additions were made.") diff --git a/build/lib/rsHRF/rsHRF_GUI/datatypes/__init__.py b/build/lib/rsHRF/rsHRF_GUI/datatypes/__init__.py new file mode 100644 index 0000000..a811498 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/datatypes/__init__.py @@ -0,0 +1,2 @@ +from . import misc +from . import timeseries \ No newline at end of file diff --git a/build/lib/rsHRF/rsHRF_GUI/datatypes/misc/__init__.py b/build/lib/rsHRF/rsHRF_GUI/datatypes/misc/__init__.py new file mode 100644 index 0000000..92df576 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/datatypes/misc/__init__.py @@ -0,0 +1,3 @@ +from . import parameters +from . import subject +from . import store diff --git a/build/lib/rsHRF/rsHRF_GUI/datatypes/misc/parameters.py b/build/lib/rsHRF/rsHRF_GUI/datatypes/misc/parameters.py new file mode 100644 index 0000000..a6a5de5 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/datatypes/misc/parameters.py @@ -0,0 +1,442 @@ +import sys +import numpy as np +from copy import deepcopy +from ...misc.status import Status + +class Parameters(): + """ + rsHRF-Toolbox Parameters + For more information, visit https://github.com/BIDS-Apps/rsHRF/tree/master/rsHRF + """ + def __init__(self): + # initialize default parameters + self.estimation = 'canon2dd' + self.passband = [0.01, 0.08] + self.passband_deconvolve = [0.0, sys.float_info.max] + self.TR = 2.0 + self.localK = 1 + self.T = 3 + self.T0 = 1 + self.TD_DD = 2 + self.AR_lag = 1 + self.thr = 1 + self.order = 3 + self.volterra = 0 + self.len = 24 + self.temporal_mask = [] + self.min_onset_search = 4 + self.max_onset_search = 8 + self.dt = self.TR/self.T + self.lag = np.arange(np.fix(self.min_onset_search / self.dt), + np.fix(self.max_onset_search / self.dt) + 1, + dtype='int') + + # getters + def get_estimation(self): + return self.estimation + + def get_passband(self): + return deepcopy(self.passband) + + def get_passband_deconvolve(self): + return deepcopy(self.passband_deconvolve) + + def get_TR(self): + return self.TR + + def get_localK(self): + return self.localK + + def get_T(self): + return self.T + + def get_T0(self): + return self.get_T0 + + def get_TD_DD(self): + # TD_DD is only relevant for canon2dd estimation + if self.estimation == 'canon2dd': + return self.TD_DD + else: + return None + + def get_AR_lag(self): + return self.get_AR_lag + + def get_thr(self): + return self.thr + + def get_order(self): + # order is only relevant for fourier and gamma estimation + if 'gamma' in self.get_estimation or 'fourier' in self.get_estimation: + return self.order + else: + return None + + def get_Volterra(self): + # volterra is only relevant for canon2dd estimation + if self.get_estimation == 'canon2dd': + return self.volterra + else: + return None + + def get_len(self): + return self.len + + def get_temporal_mask(self): + return tuple(self.temporal_mask) + + def get_min_onset_search(self): + return self.min_onset_search + + def get_max_onset_search(self): + return self.max_onset_search + + # setters + def set_estimation(self,s): + self.estimation = s + return Status(True) + + def set_passband(self, l): + """ + Takes a list (with two entries) as input and sets the + passband-range + Checks whether both the values are non-negative + """ + try: + l = [float(i) for i in l.split(",")] + if l[0] < 0 or l[1] < 0: + return Status(False, error="Passband frequency values cannot be negative") + except: + return Status(False, error="Bad datatype for passband range") + else: + self.passband = deepcopy(l) + return Status(True) + + def set_passband_deconvolve(self, l): + """ + Takes a list (with two entries) as input and sets the + passband-range + Checks whether both the values are non-negative + """ + try: + l = [float(i) for i in l.split(",")] + if l[0] < 0 or l[1] < 0: + return Status(False, error="Passband frequency values cannot be negative") + except: + return Status(False, error="Bad datatype for passband range") + else: + self.passband_deconvolve = deepcopy(l) + return Status(True) + + def set_TR(self, TR): + """ + Checks whether the value is postiive + and updates 'dt' as it is dependent on TR + """ + try: + TR = float(TR) + except: + return Status(False,error="Bad Datatype For TR") + else: + if TR <= 0: + return Status(False, error="BOLD Repetition Time must be greater than 0") + else: + self.TR = TR + self.update_dt() + return Status(True) + + def set_localK(self, localK): + """ + Checks whether the value of localK is positive + """ + try: + localK = int(localK) + except: + return Status(False,error="Bad Datatype For localK") + else: + if localK <= 0: + return Status(False, error="localK must be greater than 0") + else: + self.localK = localK + return Status(True) + + def set_T(self, T): + """ + Checks whether the value of T >= 1 + and updates 'dt' as it is dependent on T + """ + try: + T = int(T) + except: + return Status(False, error="Bad Datatype For T") + else: + if T < 1: + return Status(False, error="Magnification factor must not be less than 1") + else: + self.T = T + self.update_dt() + return Status(True) + + def set_T0(self, T0): + try: + T0 = int(T0) + except: + return Status(False, error="Bad Datatype For T0") + else: + self.T0 = T0 + return Status(True) + + def set_TD_DD(self, TD_DD): + """ + Sets the value of TD_DD if the estimation is canon2dd + """ + if self.estimation == 'canon': + try: + TD_DD = int(TD_DD) + except: + return Status(False, error="Magnification factor must not be less than 1") + if TD_DD not in [0,1,2]: + return Status(False,error="TD_DD can only take one of these values: 0, 1, 2") + else: + self.TD_DD = TD_DD + return Status(True) + else: + return Status(True) + + def set_AR_lag(self, AR_lag): + """ + Checks whether the AR_lag is non-negative + """ + try: + AR_lag = int(AR_lag) + except: + return Status(False, error="Bad datatype for AR_lag") + else: + if AR_lag < 0: + return Status(False, error="AR_lag must not be negative") + else: + self.AR_lag = AR_lag + return Status(True) + + def set_thr(self, thr): + """ + If estimation is FIR or sFIR, thr is a list + Otherwise, it is an int + """ + if 'FIR' not in self.estimation : + try: + thr = int(thr) + except: + return Status(False, error="Bad datatype for thr") + else: + self.thr = thr + return Status(True) + else: + try: + thr = [int(i) for i in thr.split(",")] + except: + return Status(False, error="Bad datatype for thr") + else: + self.thr = thr + return Status(True) + + def set_order(self, order): + """ + Checks whether the order lies between 1 to 60 + """ + try: + order = int(order) + except: + return Status(False, error="Bad datatype for order") + else: + if order < 0 or order > 60: + status = Status(False) + if order < 0: + status.set_error("Order must not be negative") + elif order > 60: + status.set_error("Order is too high") + return status + else: + self.order = order + return Status(True) + + def set_Volterra(self, volterra): + """ + Sets Volterra if the estimation rule is canon2dd + """ + if self.estimation == 'canon': + try: + volterra = int(volterra) + except: + return Status(False, error="Bad datatype for Volterra") + else: + self.volterra = volterra + return Status(True) + else: + return Status(True) + + def set_len(self, length): + """ + Checks whether the length of the hemodynamic response function is non-negative + """ + try: + length = int(length) + except: + return Status(False, error="Bad datatype for len") + else: + if length <= 0: + status = Status(False) + status.set_error("HRF length must not be postitive") + return status + else: + self.len = length + return Status(True) + + def set_temporal_mask(self, temporal_mask): + self.temporal_mask = deepcopy(temporal_mask) + return Status(True) + + def set_min_onset_search(self, mos): + """ + Checks whether the min-onset-search is smaller than max-onset-search + and non-negative + """ + try: + mos = int(mos) + except: + return Status(False, error="Bad datatype for min_onset_search") + else: + if mos > self.max_onset_search or mos < 0: + status = Status(False) + if mos > self.max_onset_search: + status.set_error("Min Onset Search must not be greater than Max Onset Search") + elif mos < 0: + status.set_error("Onset Search values must not be negative") + return status + else: + self.min_onset_search = mos + self.update_lag() + return Status(True) + + def set_max_onset_search(self, mos): + """ + Checks whether max-onset-search is greater than min-onset-search + and non-negative + """ + try: + mos = int(mos) + except: + return Status(False, error="Bad datatype for max_onset_search") + else: + if mos < self.min_onset_search or mos < 0: + status = Status(False) + if mos < self.min_onset_search: + status.set_error("Max Onset Search must not be lesser than Min Onset Search") + elif mos < 0: + status.set_error("Onset Search values must not be negative") + return status + else: + self.max_onset_search = mos + self.update_lag() + return Status(True) + + def update_dt(self): + """ + Re-calculating dt + """ + self.dt = self.TR / self.T + self.update_lag() + + def update_lag(self): + """ + Re-calculating lag + """ + self.lag = np.arange(np.fix(self.min_onset_search / self.dt), + np.fix(self.max_onset_search / self.dt) + 1, + dtype='int') + + def get_parameters(self): + """ + Gets all the parameters in the form of a dictionary for rsHRF computation + """ + para = {} + para['estimation'] = self.estimation + para['passband'] = deepcopy(self.passband) + para['passband_deconvolve'] = deepcopy(self.passband_deconvolve) + para['TR'] = self.TR + para['T'] = self.T + para['localK'] = self.localK + para['T0'] = self.T0 + para['AR_lag'] = self.AR_lag + para['thr'] = self.thr + para['len'] = self.len + para['temporal_mask'] = deepcopy(self.temporal_mask) + para['min_onset_search'] = self.min_onset_search + para['max_onset_search'] = self.max_onset_search + if self.estimation == 'canon2dd': + para['TD_DD'] = self.TD_DD + para['Volterra'] = self.volterra + elif 'gamma' in self.estimation or 'fourier' in self.estimation: + para['order'] = self.order + para['dt'] = self.dt + para['lag'] = self.lag + return para + + def set_parameters(self, dic): + """ + Takes a dictionary as input and sets all the rsHRF parameters accordingly + """ + for key in dic.keys(): + if key == "estimation": + out = self.set_estimation(dic[key]) + elif key == "passband": + out = self.set_passband(dic[key]) + elif key == "passband_deconvolve": + out = self.set_passband_deconvolve(dic[key]) + elif key == "T": + out = self.set_T(dic[key]) + elif key == "TR": + out = self.set_TR(dic[key]) + elif key == "localK": + out = self.set_localK(dic[key]) + elif key == "T0": + out = self.set_T0(dic[key]) + elif key == "TD_DD": + out = self.set_TD_DD(dic[key]) + elif key == "AR_lag": + out = self.set_AR_lag(dic[key]) + elif key == "thr": + out = self.set_thr(dic[key]) + elif key == "order": + out = self.set_order(dic[key]) + elif key == "Volterra": + out = self.set_thr(dic[key]) + elif key == "len": + out = self.set_len(dic[key]) + elif key == "temporal_mask": + out = self.set_temporal_mask(dic[key]) + elif key == "min_onset_search": + out = self.set_min_onset_search(dic[key]) + elif key == "max_onset_search": + out = self.set_max_onset_search(dic[key]) + if not out.get_state(): + return out + return Status(True, info="Parameters Updated Succefully") + + def compareParameters(self, p): + """ + Takes another parameter object and determines if it is equal + to the this object + """ + x = self.get_parameters() + y = p.get_parameters() + for key in x.keys(): + if key not in y.keys(): + return False + elif key == "dt" or key == "lag": + continue + else: + if x[key] != y[key]: + return False + return True diff --git a/build/lib/rsHRF/rsHRF_GUI/datatypes/misc/store.py b/build/lib/rsHRF/rsHRF_GUI/datatypes/misc/store.py new file mode 100644 index 0000000..3c8ad0c --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/datatypes/misc/store.py @@ -0,0 +1,80 @@ +from . import subject + +class Store(): + """ + Stores all the subjects as a dictionary, with their keys as the index + """ + def __init__(self): + self.subjects = {} + + # getters + def get_subjects(self): + """ Returns a tuple with the indices of all subjects""" + return tuple(self.subjects.keys()) + + def get_subject_by_index(self, index): + """ Takes subject-index as the input and returns the corresponding subject """ + try: + return self.subjects[index] + except: + return None + + def get_plotables(self, index): + """ Gets all the time-series that can be plotted, for a particular subject""" + return self.subjects[index].get_plotables() + + def get_data_labels(self, index): + """ Gets the labels for all the time-series data for that subject""" + return self.subjects[index].get_data_labels() + + # misc. + def get_time_series(self, s): + """ Gets the time-series object corresponding to s""" + s = s.split("_") + index = s[0] + ts_type = s[1] + ts_num = int(s[2]) + return self.subjects[index].get_time_series_by_index(ts_type, ts_num) + + def get_info(self, s): + """ Gets all the information about a time-series to be displayed to the logging-window """ + ts = self.get_time_series(s) + subject_index = ts.get_subject_index() + subject = self.subjects[subject_index] + dic = ts.get_info() + if ts.get_label() == "BOLD": + dic["Input File"] = ts.get_inputfile() + elif ts.get_label() == "Preprocessed-BOLD": + dic["Mask File"] = ts.get_maskfile() + dic["Associated Raw BOLD"] = subject_index + "_BOLD_" + subject.get_time_series_pos(ts.get_BOLD_Raw()) + elif ts.get_label() == "HRF": + dic["Associated BOLD"] = subject_index + "_Preprocessed-BOLD_" + subject.get_time_series_pos(ts.get_associated_BOLD()) + elif ts.get_label() == "Deconvolved-BOLD": + dic["Associated HRF"] = subject_index + "_HRF_" + subject.get_time_series_pos(ts.get_associated_HRF()) + return dic + + def is_present(self, subject_index): + """ Checks whether a subject-index is present is already present""" + if subject_index in self.subjects.keys(): + return True + return False + + def add_subject(self, sub): + """ Adds a new subject """ + self.subjects[sub.get_subject_index()] = sub + + def remove_subject(self, sub): + """ Removing a subject """ + try: + del self.subjects[sub.get_subject_index()] + except: + return + + def number_of_subjects(self): + """ Gets the number of subjects """ + return len(self.subjects.keys()) + + def save_info(self, s, out): + """ Saves all the time-series objects for a particular subject in the form of .mat files """ + ts = self.get_time_series(s) + return ts.save_info(out+"/sub-"+s+".mat") \ No newline at end of file diff --git a/build/lib/rsHRF/rsHRF_GUI/datatypes/misc/subject.py b/build/lib/rsHRF/rsHRF_GUI/datatypes/misc/subject.py new file mode 100644 index 0000000..956a829 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/datatypes/misc/subject.py @@ -0,0 +1,180 @@ +import numpy as np + +class Subject(): + """ + Stores the information corresponding to a particular subject. + + Attrbutes: + 1. index : This is the index of the subject (as determined by BIDS convention) + 2. BOLD_raw : An array which stores the corresponding Raw BOLD time-series for the subject + 3. BOLD_pre : An array which stores the corresponding Preprocessed-BOLD time-series for the subject + 4. BOLD_deconv : An array which stores the corresponding Deconvolved-BOLD time-series for the subject + 5. HRF : An array which stores the corresponding Hemodynamic Response Function time-series for the subject + + -> All the attributes from 2-5, are arrays of TimeSeries objects + """ + def __init__(self, index): + self.index = index + self.BOLD_raw = [] + self.BOLD_pre = [] + self.BOLD_deconv = [] + self.HRF = [] + + # getters + def get_input_filename(self): + return self.input_filename + + def get_subject_index(self): + return self.index + + def get_BOLD_raw(self): + return tuple(self.BOLD_raw) + + def get_BOLD_pre(self): + return tuple(self.BOLD_pre) + + def get_BOLD_deconv(self): + return tuple(self.BOLD_deconv) + + def get_HRF(self): + return tuple(self.HRF) + + # adding to time-series objects of the existing subject + def add_BOLD_raw(self, ts): + self.BOLD_raw.append(ts) + return len(self.BOLD_raw) - 1 + + def add_BOLD_deconv(self, ts): + self.BOLD_deconv.append(ts) + return len(self.BOLD_raw) - 1 + + def add_BOLD_pre(self, ts): + self.BOLD_pre.append(ts) + return len(self.BOLD_raw) - 1 + + def add_HRF(self, ts): + self.HRF.append(ts) + return len(self.BOLD_raw) - 1 + + # misc. + def is_present(self, label, misc, getts=False): + """ Checks whether a time-series is already present + Misc takes in all the relevant information which determines the uniqueness + of a time-series + If getts = True, the function returns the time-series object if it is present """ + if label == "BOLD": + # Looking for Raw BOLD Data + for each in self.BOLD_raw: + # Determines whether the Raw BOLD data is already present + # Checks for the input-file + if misc == each.get_inputfile(): + if getts : + return each + return True + elif label == "Preprocessed-BOLD": + # Looking for Preprocessed BOLD Data + para = misc[0] + mask = misc[1] + bold = misc[2] + for each in self.BOLD_pre: + # Determines whether Preprocessed BOLD data is already present + # Checks the parameters, mask-file and RAW Bold + if para.compareParameters(each.get_parameters()) \ + and each.get_maskfile() == misc[1] \ + and bold.compareTimeSeries(each.get_BOLD_Raw()): + if getts: + return each + return True + elif label == "HRF": + # Looking for HRF Data + para = misc[0] + BOLD_pre = misc[1] + for each in self.HRF: + # Determines whether the HRF is already present + # Checks the parameters and Preprocessed BOLD + if para.compareParameters(each.get_parameters()) \ + and BOLD_pre.compareTimeSeries(each.get_associated_BOLD()): + if getts: + return each + return True + elif label == "Deconvolved-BOLD": + # Looking for Deconvolved BOLD Data + para = misc[0] + HRF = misc[1] + for each in self.BOLD_deconv: + # Determines whether the Deconvolved BOLD is already present + # Checks the associated HRF + if para.compareParameters(each.get_parameters()) \ + and HRF.compareTimeSeries(each.get_associated_HRF()): + if getts : + return each + return True + return False + + def get_time_series_pos(self, ts): + """ + Takes the time-series as input and returns its position in the array + """ + label = ts.get_label() + if label == "BOLD": + arr = self.BOLD_raw + elif label == "Preprocessed-BOLD": + arr = self.BOLD_pre + elif label == "Deconvolved-BOLD": + arr = self.BOLD_deconv + elif label == "HRF": + arr = self.HRF + else : + arr = [] + for i in range(len(arr)): + if ts.compareTimeSeries(arr[i]): + return str(i) + return None + + def get_time_series_by_index(self, ts_type, index): + """ Takes the index of a time-series and returns the time-series """ + if ts_type == "BOLD": + arr = self.BOLD_raw + elif ts_type == "Preprocessed-BOLD": + arr = self.BOLD_pre + elif ts_type == "Deconvolved-BOLD": + arr = self.BOLD_deconv + elif ts_type == "HRF": + arr = self.HRF + else: + return + return arr[index] + + def get_plotables(self): + """ + Returns an array of all the time-series objects that can be plotted for the subject + The array contains of tuples of the format : (time-series labels, time-series numpy arrays) + """ + out = [] + for i in range(len(self.BOLD_raw)): + out.append((self.index+"_BOLD_"+str(i),self.BOLD_raw[i].get_ts())) + for i in range(len(self.BOLD_pre)): + out.append((self.index+"_Preprocessed-BOLD_"+str(i),self.BOLD_pre[i].get_ts())) + for i in range(len(self.BOLD_deconv)): + out.append((self.index+"_Deconvolved-BOLD_"+str(i),self.BOLD_deconv[i].get_ts())) + for i in range(len(self.HRF)): + out.append((self.index+"_HRF_"+str(i),self.HRF[i].get_ts())) + return out + + def get_data_labels(self): + """ + Returns an array with labels for all the time-series objects for the subject + """ + out = [] + for i in range(len(self.BOLD_raw)): + out.append(self.index+"_BOLD_"+str(i)) + for i in range(len(self.BOLD_pre)): + out.append(self.index+"_Preprocessed-BOLD_"+str(i)) + for i in range(len(self.BOLD_deconv)): + out.append(self.index+"_Deconvolved-BOLD_"+str(i)) + for i in range(len(self.HRF)): + out.append(self.index+"_HRF_"+str(i)) + return out + + + diff --git a/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/__init__.py b/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/__init__.py new file mode 100644 index 0000000..0815fa4 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/__init__.py @@ -0,0 +1,3 @@ +from . import bold_deconv +from . import timeseries +from . import hrf diff --git a/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/bold_deconv.py b/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/bold_deconv.py new file mode 100644 index 0000000..1937fc1 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/bold_deconv.py @@ -0,0 +1,62 @@ +import numpy as np +from scipy.io import savemat +from copy import deepcopy + +from .hrf import HRF +from .timeseries import TimeSeries +from ...datatypes.misc.parameters import Parameters + +class Bold_Deconv(TimeSeries): + """ + This stores the Deconvolved BOLD Time-series + + Attributes: + 1. HRF : The HRF used to obtain the Deconvolved BOLD + 2. event_num : The event-numbers + """ + def __init__(self, label="",ts=np.array([]),subject_index="", para=Parameters()): + TimeSeries.__init__(self, label="",ts=np.array([]),subject_index="", para=Parameters()) + self.label = label + self.subject_index = subject_index + self.timeseries = ts + self.shape = ts.shape + self.parameters = deepcopy(para) + self.HRF = HRF() + self.event_num = np.array([]) + + #setters + def set_HRF(self, HRF): + self.HRF = HRF + def set_event_num(self, ev): + self.event_num = ev + + #getters + def get_event_num(self): + return self.event_num + def get_associated_HRF(self): + return self.HRF + + #misc + def compareTimeSeries(self, ts): + """ Compares another time-series with itself to determine if both are identical + Two checks are performed: + 1. Label + 2. HRF + If all the three comparisions return true, then both the HRF + time-series objects are identical + """ + if self.label == ts.get_label() \ + and self.HRF.compareTimeSeries(ts.get_associated_HRF()): + return True + else: + return False + def save_info(self, name): + """ Saves the information about the time-series in a .mat file """ + dic = {} + dic["timeseries"] = self.timeseries + dic["eventNum"] = self.event_num + para = self.parameters.get_parameters() + for each in para.keys(): + dic[each] = para[each] + savemat(name, dic) + return True \ No newline at end of file diff --git a/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/bold_preprocessed.py b/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/bold_preprocessed.py new file mode 100644 index 0000000..20e3bb7 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/bold_preprocessed.py @@ -0,0 +1,69 @@ +import numpy as np +from scipy.io import savemat +from copy import deepcopy + +from ...datatypes.misc.parameters import Parameters +from .timeseries import TimeSeries +from .bold_raw import BOLD_Raw + +class BOLD_Preprocessed(TimeSeries): + """ + This stores the Preprocessed BOLD Time-series + + Attributes: + 1. BOLD_Raw : The Raw BOLD time-series object through which it was derived + 2. mask_file : The mask-file path + """ + def __init__(self, label="",ts=np.array([]),subject_index="", para=Parameters()): + TimeSeries.__init__(self, label="",ts=np.array([]),subject_index="", para=Parameters()) + self.label = label + self.subject_index = subject_index + self.timeseries = ts + self.shape = ts.shape + self.parameters = deepcopy(para) + self.BOLD_Raw = BOLD_Raw() + self.mask_file = "" + + # setters + def set_maskfile(self, mask_file): + self.mask_file = mask_file + + def set_BOLD_Raw(self, BOLD_Raw): + self.BOLD_Raw = BOLD_Raw + + # getters + def get_maskfile(self): + return self.mask_file + + def get_BOLD_Raw(self): + return self.BOLD_Raw + + # misc. + def compareTimeSeries(self, ts): + """ Compares another time-series with itself to determine if both are identical + Four checks are performed: + 1. Label + 2. Parameters + 3. Raw BOLD associated with it + 4. Mask-file + If all the three comparisions return true, then both the HRF + time-series objects are identical + """ + if self.label == ts.get_label() \ + and self.parameters == ts.get_parameters() \ + and self.BOLD_Raw.compareTimeSeries(ts.get_BOLD_Raw()) \ + and ts.get_maskfile() == self.mask_file: + return True + else: + return False + + def save_info(self, name): + """ Saves the information about the time-series in a .mat file """ + try: + dic = {} + dic["timeseries"] = self.timeseries + dic["mask_file"] = self.mask_file + savemat(name, dic) + return True + except: + return False \ No newline at end of file diff --git a/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/bold_raw.py b/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/bold_raw.py new file mode 100644 index 0000000..5f81a53 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/bold_raw.py @@ -0,0 +1,55 @@ +import numpy as np +from scipy.io import savemat +from copy import deepcopy + +from ...datatypes.misc.parameters import Parameters +from .timeseries import TimeSeries + +class BOLD_Raw(TimeSeries): + """ + This stores the Raw BOLD Time-series + + Attributes: + 1. input_file : the input-file path of the Raw BOLD Time-series + """ + def __init__(self, label="",ts=np.array([]),subject_index="", para=Parameters()): + TimeSeries.__init__(self, label="",ts=np.array([]),subject_index="", para=Parameters()) + self.label = label + self.subject_index = subject_index + self.timeseries = ts + self.shape = ts.shape + self.parameters = deepcopy(para) + self.input_file = "" + + # setters + def set_inputfile(self, input_file): + self.input_file = input_file + + # getters + def get_inputfile(self): + return self.input_file + + # misc. + def compareTimeSeries(self, ts): + """ Compares another time-series with itself to determine if both are identical + Two checks are performed: + 1. Label + 2. Input-file name + If all the three comparisions return true, then both the HRF + time-series objects are identical + """ + if self.label == ts.get_label() and self.input_file == ts.get_inputfile(): + return True + else: + return False + + def save_info(self, name): + """ Saves the information about the time-series in a .mat file """ + try: + dic = {} + dic["timeseries"] = self.timeseries + dic["input_file"] = self.input_file + savemat(name, dic) + return True + except: + return False diff --git a/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/hrf.py b/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/hrf.py new file mode 100644 index 0000000..2d14b65 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/hrf.py @@ -0,0 +1,76 @@ +import numpy as np +from scipy.io import savemat +from copy import deepcopy + +from ...datatypes.misc.parameters import Parameters +from .timeseries import TimeSeries + +class HRF(TimeSeries): + """ + This stores the Hemodynamic Response Function Time-series + + Attributes: + 1. BOLD = stores the associated Preprocessed-BOLD time-series object through which it was retrieved + 2. PARA = stores the HRF parameters (Full-width at half-max, Time-to-peak and height) + 3. event_bold = stores the bold-events + """ + def __init__(self, label="",ts=np.array([]),subject_index="", para=Parameters()): + TimeSeries.__init__(self, label="",ts=np.array([]),subject_index="", para=Parameters()) + self.label = label + self.subject_index = subject_index + self.timeseries = ts + self.shape = ts.shape + self.parameters = deepcopy(para) + self.BOLD = TimeSeries() + self.PARA = np.array([]) + self.event_bold = np.array([]) + + # setters + def set_para(self, PARA): + self.PARA = PARA + + def set_BOLD(self, BOLD): + self.BOLD = BOLD + + def set_event_bold(self, event_bold): + self.event_bold = event_bold + + # getters + def get_event_bold(self): + return self.event_bold + + def get_associated_BOLD(self): + return self.BOLD + + def get_HRF_para(self): + return self.PARA + + # misc. + def compareTimeSeries(self, ts): + """ Compares whether another HRF time-series is similar to it. + Three checks are performed for this: + 1. Label + 2. rsHRF Parameters + 3. Preprocessed-BOLD which was used as input + If all the three comparisions return true, then both the HRF + time-series objects are identical + """ + if self.label == ts.get_label() and self.parameters.compareParameters(ts.get_parameters()) and self.BOLD.compareTimeSeries(ts.get_associated_BOLD()): + return True + else: + return False + + def save_info(self, name): + """ Saves the information about the time-series in a .mat file """ + try: + dic = {} + dic["timeseries"] = self.timeseries + dic["PARA"] = self.PARA + dic["eventBold"] = self.event_bold + para = self.parameters.get_parameters() + for each in para.keys(): + dic[each] = para[each] + savemat(name, dic) + return True + except: + return False \ No newline at end of file diff --git a/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/timeseries.py b/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/timeseries.py new file mode 100644 index 0000000..5bde3f1 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/datatypes/timeseries/timeseries.py @@ -0,0 +1,77 @@ +import numpy as np +from copy import deepcopy + +from ...datatypes.misc.parameters import Parameters + +class TimeSeries(): + """ + Deals with all the time-series artifacts that appear during the processing. + + These are the various time-series that are dealt with: + 1. BOLD : (Raw BOLD Data) + 2. HRF : (Hemodynamic Response Function) + 3. Preprocessed-BOLD : (Z-score and Passband filtered) + 4. Deconvolved-BOLD : (Deconvolved using the HRF) + + Attributes: + 1. label : Takes on one of the values as described above + 2. subject_index : index of the subject to which the current time-series belongs + 3. timeseries : stores the time-series as a 2-dimensional numpy array + 4. shape : shape of the time-series (voxels x time-slices) + 5. parameters : rsHRF-parameters associated in retrieving this time-series + """ + def __init__(self, label="",subject_index="",ts=np.array([]), para=Parameters()): + self.label = label + self.subject_index = subject_index + self.timeseries = deepcopy(ts) + self.shape = ts.shape + self.parameters = deepcopy(para) + + # setters + def set_ts(self, ts): + self.timeseries = deepcopy(ts) + self.shape = self.timeseries.shape + + def set_parameters(self,para): + self.parameters = deepcopy(para) + + def set_label(self,label): + self.label = label + + def set_subject_index(self,subject_index): + self.subject_index = subject_index + + # getters + def get_ts(self): + return self.timeseries + + def get_subject_index(self): + return self.subject_index + + def get_label(self): + return self.label + + def get_parameters(self): + return self.parameters + + def get_shape(self): + return self.shape + + # misc. + def get_info(self): + """ Returns the information about the time-series in the form of a dictionary """ + dic = {} + dic["Type"] = self.label + dic["Subject"] = self.subject_index + dic["Time Series Shape"] = self.shape + dic["Parameters"] = self.parameters.get_parameters() + return dic + + def compareTimeSeries(self, ts): + """ Compares another time-series with itself to determine if both are identical """ + raise NotImplementedError("This needs to be overridden in the child-classes") + + def save_info(self, name): + """ Saves the information about the time-series in a .mat file """ + raise NotImplementedError("This needs to be overridden in the child-classes") + diff --git a/build/lib/rsHRF/rsHRF_GUI/documentation/developer/class_diagram.png b/build/lib/rsHRF/rsHRF_GUI/documentation/developer/class_diagram.png new file mode 100755 index 0000000000000000000000000000000000000000..158392c20ccefa28b9340add6931358ed090893c GIT binary patch literal 161601 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

fvWcnS7;hLvard~pwM97RKrhSgG_}ygjVfhg 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 S8rJ}KS-`gJgq8=#ocj;(u?GeK literal 0 HcmV?d00001 diff --git a/build/lib/rsHRF/rsHRF_GUI/documentation/developer/class_info.md b/build/lib/rsHRF/rsHRF_GUI/documentation/developer/class_info.md new file mode 100755 index 0000000..21f29a1 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/documentation/developer/class_info.md @@ -0,0 +1,350 @@ +# Class-Structure Information + +Here we have tried to define the purpose and usage of each class relavant to the rsHRF-GUI. + +--- + +## rsHRF_GUI.core.Core + +This class in concerned with all the technical data-processing w.r.t the rsHRF toolbox. + +### Class Variables +- `self.parameters` - an instance of the Parameters() object +- `self.dataStre` - an instance of the Store() object + +--- + +### Class Methods +- `updateParameters(self, dic={})` - takes a dictionary and updates the *self.parameters* variables.
+- `get_parameters(self)` - returns the rsHRF parameters as a dictionary +- `get_time_series(self, curr)` - returns the time-series object as defined by the string variable *curr*. +- `get_plotables(self, curr)` - returns the plotable artefact corresponding to the string variable *curr*. +- `get_store_info(self, curr)` - returns the information about the time-series object corresponding to the string variable *curr*. +- `get_subjects(self)` - returns a list of all the subjects that are present in the *self.dataStore*. +- `get_data_labels(self, curr)` - returns a label string corresponding to the string variable *curr*. +- `save_info(self, curr, out)` - save sthe info regarding the time-series corresponding to the variable *curr*, in the directory as specified using *out*. +- `makeInput(self, inp)` - takes different forms of input files and forms the *RAW-BOLD* and *Preprocessed-BOLD* time-series objects, and saves it with respect to their corresponding subjects in the *self.dataStore*. +- `makeInputFile(self, input_file, mask_file, file_type, mode)` - deals with one-input-instance at a time. +- `retrieveHRF(self, bold_pre_ts, get_pos=False)` - retrieves the rsHRF corresponding to a preprocessed-BOLD time-series. +- `getHRFParameters(self, hrf)` - computes the corresponding rsHRF parameters with respct to an HRF time-series. +- `deconvolveHRF(self, hrf)` - uses the retrieved rsHRF to deconvolve the preprocessed BOLD time-series. + +--- + +## rsHRF_GUI.datatypes.misc.parameters.Parameters +This class corresponds to all the rsHRF-toolbox parameters. + +### Class Variables +All the information regarding the class-variables can be found along with the main documentation of the rsHRF-toolbox. +- `self.estimation` +- `self.passband` +- `self.passband_deconvolve` +- `self.TR` +- `self.localK` +- `self.T` +- `self.T0` +- `self.TD_DD` +- `self.AR_lag` +- `self.thr` +- `self.order` +- `self.volterra` +- `self.len` +- `self.temporal_mask` +- `self.min_onset_search` +- `self.max_onset_search` +- `self.dt` +- `self.lag` + +--- + +### Class Methods +**Getters** +- `get_estimation(self)` +- `get_passband(self)` +- `get_passband_deconvolve(self)` +- `get_TR(self)` +- `get_localK(self)` +- `get_T(self)` +- `get_T0(self)` +- `get_TD_DD(self)` +- `get_AR_lag(self)` +- `get_thr(self)` +- `get_order(self)` +- `get_volterra(self)` +- `get_len(self)` +- `get_temporal_mask(self)` +- `get_min_onset_search(self)` +- `get_max_onset_search(self)` +- `get_dt(self)` +- `get_lag(self)` + +--- + +**Setters** + +All the setters take the corresponding error-handling into account. If an illegal value is provided, a suitable error gets returned.
+Also, if setting there are variables that get affected by the one being set, the change gets propogated automatically. + +- `set_estimation(self, var)` +- `set_passband(self, var)` +- `set_passband_deconvolve(self, var)` +- `set_TR(self, var)` +- `set_localK(self, var)` +- `set_T(self, var)` +- `set_T0(self, var)` +- `set_TD_DD(self, var)` +- `set_AR_lag(self, var)` +- `set_thr(self, var)` +- `set_order(self, var)` +- `set_volterra(self, var)` +- `set_len(self, var)` +- `set_temporal_mask(self, var)` +- `set_min_onset_search(self, var)` +- `set_max_onset_search(self, var)` + +--- + +These parameters are dependent parameters, and hence, these are automatically updates as and when required. + +- `update_dt(self)` +- `update_lag(self)` + +--- + +- `get_parameters(self)` - returns all the parameters as a dictionary. +- `set_parameters(self, dic)` - takes a dictionary as input and sets the parameters. +- `compareParameters(self, p)` - takes another *parameters* object and compares whether it is similar as this parameters object or not. + +--- + +## rsHRF_GUI.datatypes.misc.store.Store +This corresponds to where all the *subject* objects are dealt with. + +### Class Variables + +- `self.subjects` - a dictionary which stores the subjects against their labels (the labels are the string value as in BIDS format). + +--- + +### Class Methods + +- `get_subjects(self)` - returns the labels for all the subjects. +- `get_subject_by_index(self, index)` - takes the subject index and returns the subject object. +- `get_plotables(self, index)` - takes the subject index and returns all the plotables artefats associated to that subject. +- `get_data_labels(self, index)` - returns labels for all the relavant artefacts corresponding to the subject given by the index. +- `get_time_series(self, s)` - returns the time-series object corresponding to the string *s*. +- `get_info(self, s)` - return the information regarding the time-series object corresponding to the string *s*. +- `is_present(self, subject_index)` - checks whether the subject corresponding to an index value is already present. +- `add_subject(self, sub)` - takes a *subject* object and adds it into the store. +- `remove_subject(self, sub)` - takes a *subject* object and removes it from the store. +- `number_of_subjects(self)` - returns the number of subjects corrently in the store. +- `save_info(self, s, out)` - saves the information regarding the subject as denoted by *s*, into the directory corresponding to *out*. + +--- + +## rsHRF_GUI.datatypes.misc.subject.Subject +This corresponds to every individual subject. + +### Class Variables +- `self.index` - index of the subject (as in BIDS format) +- `self.BOLD_raw` - list of all the RAW BOLD time-series data. +- `self.BOLD_pre` - list of the preprocessed BOLD time-series data. +- `self.BOLD_deconv` - list of all the deconvolved BOLD time-series data. +- `self.HRF` - list of all the HRF time-series data. + +--- + +### Class Methods +**Getters** +- `get_input_filename(self)` +- `get_subject_index(self)` +- `get_BOLD_raw(self)` +- `get_BOLD_pre(self)` +- `get_BOLD_deconv(self)` +- `get_HRF(self)` + +--- + +**Adding Data** + +Adds time-series data to the existing collection. + +- `add_BOLD_raw(self, ts)` +- `add_BOLD_deconv(self, ts)` +- `add_BOLD_pre(self, ts)` +- `add_HRF(self, ts)` + +--- + +- `is_present(self, label, misc, getts=False)` - checks whether a time-series object is already present or not. +- `get_time_series_pas(self, ts)` - gets the position of the time-series object in the list that it is stored. +- `get_time_series_by_index(self, ts_type, index)` - gets the time-series object as specified by the *index*. +- `get_plotables(self)` - returns all the plotable time-series artefacts. +- `get_data_labels(self)` - returns the lables for all the time-series artefacts. + +--- + +## rsHRF_GUI.datatypes.timeseries.TimeSeries +This deals with the time-series objects. +### Class Variables +- `self.label` - label of the time-series +- `self.subject_index` - subject-index of the subject that the time-series is associated to. +- `self.timeseries` - the time-series stored as a numpy array. +- `self.shape` - shape of the time-series +- `self.parameters` - rsHRF parameters required while obtaining the time-series. + +--- + +### Class Methods +** Setters ** +- `set_ts(self, ts)` +- `set_parameters(self, para)` +- `set_label(self, label)` +- `set_subject_index(self, subject_index)` + +--- + +** Getters *8 +- `get_ts(self)` +- `get_subject_index(self)` +- `get_label(self)` +- `get_parameters(self)` +- `get_shape(self)` +- `get_info(self)` + +--- + +- `compareTimeSeries(self, ts)` - compares the two-timeseries to figure out whether they are identicle. +- `save_info(self, name)` - saves the information of the time-series in a .mat file. + +--- + +**Note:** The *rsHRF_GUI.datatypes.timeseries* package contains other classes: +
+1. Bold_Deconv +2. Bold_Preprocessed +3. Bold_Raw +4. HRF + +All these classes inherit from the time-series classes, and suitable class variables, getters, setters, are added, and appropriate functions are overridden. However, the basic structure for all these classes remains the same. + +--- + +## rsHRF_GUI.misc.status.Status + +This class allows for making the GUI more interactive. It provides an inherent way of communication across the different modules. + +### Class Variables +- `self.state` - a boolean value +- `self.info` - information string regarding the message +- `self.error` - error string corresponding to the message +- `self.time` - stores the time of the message +- `self.dic` - a dictionary for storing misc. information about the message + +--- + +### Class Methods +** Setters ** +- `set_state(self, s)` +- `set_info(self, s)` +- `set_error(self, e)` +- `set_time(self, t)` +- `set_dic(self, d)` + +--- + +** Getters ** +- `get_state(self)` +- `get_info(self)` +- `get_error(self)` +- `get_time(self)` +- `get_dic(self)` + +--- + +## rsHRF_GUI.misc.gui_windows.inputWindow.InputWindow + +This class is concerned with accepting the input, determining whether its in a valid format, and subsequently passing a valid input forward. + +### Class Variables +- `self.input_file` - stores the path to input file +- `self.mask_file` - stores the path to mask file +- `self.file_type` - stores the type of the file +- `self.output_dir` - stores the path to the output directory + +--- + +### Class Methods + +- `getInput(self)` - retrieves the input from the GUI and passes it to `main.py` + +--- + +## rsHRF_GUI.misc.gui_windows.loggingWindow.LoggingWindow + +### Class Variables +- `self.lineNum` - the position of the current line in the logging window +- `self.text` - ScrolledText window + +--- + +### Class Methods +- `putLog(self, plotables=None, data_info=None, status=None)` - depending upon the input, appropriately formats it and displays it on the logging-screen. + +--- + +## rsHRF_GUI.misc.gui_windows.parameterWindow.ParameterWindow + +### Class Variables +- `self.window` - Toplevel instance +- `self.parameters` - dictionary containing all the rsHRF parameters +- `self.labels` - labels corresponding to each parameter +- `self.entries` - current value of each parameter + +--- + +### Class Methods +- `updateParameters(self)` - updates the parameter dictionary +- `getParameters(self)` - gets the parameter dictionary +- `setParameters(self)` - sets the parameter dictionary +- `display(self)` - puts the elements of the parameter dictionary into *self.labels* and *self.entries* in a way that they can be displayed by the logging-window. + +--- + +## rsHRF_GUI.misc.gui_windows.plotterOptionsWindow.PlotterOptionsWindow + +### Class Variables +- `self.plotterScreen` - PlotterWindow instance +- `self.numberOfPlots` - the number of plots on the plotter-screen +- `self.plot` - string corresponding to the time-series which is to be plotted +- `self.plotVal` - voxel value of the time-series that is to be plotted +- `self.plotValStore` - decides whether the current plot is to be displayed or not +- `self.plotables` - list of strings corresponding to all the time-series that can be plotted +- `self.options` - to display the various plots that can be plotted in the drop-down menu + +--- + +### Class Methods +- `updatePlots(self, plotables)` - takes an iterable (plotables) and reconfigures the various time-series that can be plotted +- `updateWidgets(self)` - updates the widgets on the *plotter-window* +- `get_plotables(self)` - returns the plotables + +--- + +## rsHRF_GUI.misc.gui_windows.plotterWindow.PlotterWindow + +### Class Variables +- `self.numberOfPlots` - the number of plots that can be displayed at a time (right now = 3) +- `self.ts` - list of time-series that are to be plotted +- `self.plot` - displaying the plots +- `self.canvas` - FigureCanvasTkAgg instance + +--- + +### Class Methods +- `getNumberOfPlots(self)` - gives the number of plots +- `makePlots(self, ts, val, num)` - displays the appropriate plots + +--- + +## Fin. \ No newline at end of file diff --git a/build/lib/rsHRF/rsHRF_GUI/documentation/rsHRF-GUI-User-Manual.pdf b/build/lib/rsHRF/rsHRF_GUI/documentation/rsHRF-GUI-User-Manual.pdf new file mode 100755 index 0000000000000000000000000000000000000000..a7cc1f87caf9a38c60ff3c39a841cb29be7f0292 GIT binary patch literal 403373 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∾YvxuMehFui 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

n(-3>D#bz86{#MZ?a`_1EiIX4fTckdll17uH{ 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
;%faoQzWofxHiq))-2#!dmaL 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 z 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∋^a@m79CtSf6w95R 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 qfe3}=1VaDV-2d#W(f> " + current_time + "\t SUCCESS " + message + "\n" + ) + self.text.tag_add("success", str(self.lineNum) + ".12", str(self.lineNum) + ".20") + self.text.tag_config("success", foreground="green") + self.text.tag_add("success message", str(self.lineNum) + ".20", str(self.lineNum) + "." + str(21 + len(message))) + self.text.tag_config("success message", foreground="LightBlue1") + else: + message = status.get_error() + self.text.insert(INSERT, \ + ">> " + current_time + "\t ERROR " + message + "\n" + ) + self.text.tag_add("error", str(self.lineNum) + ".12", str(self.lineNum) + ".18") + self.text.tag_config("error", foreground="red") + self.text.tag_add("error message", str(self.lineNum) + ".18", str(self.lineNum) + "." + str(19 + len(message))) + self.text.tag_config("error message", foreground="yellow") + self.text.tag_add("time", str(self.lineNum) + ".03", str(self.lineNum) + ".11") + self.text.tag_config("time", foreground="PeachPuff2") + self.lineNum += 1 + + dic = status.get_dic() + for each in dic.keys(): + self.text.insert(INSERT, \ + ">> " + current_time + "\t" + each + str(dic[each]) + "\n" + ) + self.text.tag_add("time", str(self.lineNum) + ".03", str(self.lineNum) + ".11") + self.text.tag_config("time", foreground="PeachPuff2") + self.text.tag_add("dic_label", str(self.lineNum) + ".12", str(self.lineNum) + "." + str(12+len(each))) + self.text.tag_config("dic_label", foreground="azure") + self.lineNum += 1 + self.text.insert(INSERT, "\n") + self.lineNum += 1 + return + + elif plotables is not None: + self.text.insert(INSERT, \ + ">> " + current_time + "\t Time Series' Information \n\n" + \ + "TYPE" + "\t\t\t\t\t\t LENGTH" + "\t\t NUMBER OF VOXELS \n\n" + ) + self.text.tag_add("labels", str(self.lineNum) + ".12", str(self.lineNum) + "." + str(37)) + self.text.tag_config("labels", foreground="PaleTurquoise1") + self.text.tag_add("titles", str(self.lineNum+2) + ".00", str(self.lineNum+2) + "." + str(37)) + self.text.tag_config("titles", foreground="azure") + self.text.tag_add("time", str(self.lineNum) + ".03", str(self.lineNum) + ".11") + self.text.tag_config("time", foreground="PeachPuff2") + for each in plotables: + self.text.insert(INSERT, \ + each[0] + "\t\t\t\t\t\t " + str(each[1].shape[0]) + "\t\t " + str(each[1].shape[1]) + "\n" + ) + self.lineNum += 1 + self.text.insert(INSERT, "\n") + self.lineNum += 5 + return + + elif data_info is not None: + self.text.insert(INSERT, \ + ">> " + current_time + "\t Information \n\n") + self.text.tag_add("labels", str(self.lineNum) + ".12", str(self.lineNum) + "." + str(37)) + self.text.tag_config("labels", foreground="PaleTurquoise1") + self.text.tag_add("time", str(self.lineNum) + ".03", str(self.lineNum) + ".11") + self.text.tag_config("time", foreground="PeachPuff2") + self.lineNum += 2 + if data_info["Type"] == "BOLD": + self.text.insert(INSERT, \ + " :- " + "Type of Data: BOLD Time Series\n" + + " :- " + "Subject: " + data_info["Subject"] + "\n" + " :- " + "Input File: " + data_info["Input File"] + "\n" + ) + self.lineNum += 1 + elif data_info["Type"] == "Preprocessed-BOLD": + self.text.insert(INSERT, \ + " :- " + "Type of Data: Preprocessed-BOLD Time Series\n" + + " :- " + "Subject: " + data_info["Subject"] + "\n" + + " :- " + "Mask File: " + data_info["Mask File"] + "\n" + + " :- " + "Associated Raw BOLD: " + data_info["Associated Raw BOLD"] + "\n" + ) + self.lineNum += 2 + elif data_info["Type"] == "HRF": + self.text.insert(INSERT, \ + " :- " + "Type of Data: Hemodynamic Response Function Time Series\n" + + " :- " + "Associated BOLD: " + data_info["Associated BOLD"] + "\n" + ) + elif data_info["Type"] == "Deconvolved-BOLD": + self.text.insert(INSERT, \ + " :- " + "Type of Data: Deconvolved BOLD Time Series\n" + + " :- " + "Associated HRF: " + data_info["Associated HRF"] + "\n" + ) + self.text.tag_config("type", foreground="azure") + self.text.tag_config("line2", foreground="azure") + self.lineNum += 2 + self.text.insert(INSERT, \ + " :- " + "\t\t\tAssociated Parameters\n" + ) + self.text.tag_add("ap", str(self.lineNum) + ".03", str(self.lineNum) + ".30") + self.text.tag_config("ap", foreground="Khaki1") + self.lineNum += 1 + for each in data_info["Parameters"].keys(): + self.text.insert(INSERT, \ + "\t\t" + each + "\t\t\t=\t\t" + str(data_info["Parameters"][each]) + "\n") + self.text.tag_add("pv", str(self.lineNum) + ".00", str(self.lineNum) + "." + str(6+len(each))) + self.text.tag_config("pv", foreground="LemonChiffon2") + self.lineNum +=1 + self.text.insert(INSERT, "\n") + self.lineNum += 1 + return \ No newline at end of file diff --git a/build/lib/rsHRF/rsHRF_GUI/gui_windows/main.py b/build/lib/rsHRF/rsHRF_GUI/gui_windows/main.py new file mode 100644 index 0000000..3cbe9bc --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/gui_windows/main.py @@ -0,0 +1,286 @@ +import os +import time +from scipy.io import savemat +from tkinter import Tk, Button, Label, OptionMenu, StringVar + +from .inputWindow import InputWindow +from .loggingWindow import LoggingWindow +from .plotterOptionsWindow import PlotterOptionsWindow +from .parameterWindow import ParameterWindow + +from ..misc.status import Status +from ..core.core import Core + +class Main(): + def __init__(self): + # main window + root = Tk() + root.title("rsHRF Toolbox") + # get screen width and height + screen_width = root.winfo_screenwidth() + screen_height = root.winfo_screenheight() + # placing the toplevel + root.geometry("500x300+%d+%d" % (((280/1900)*screen_width + 425), (((1040.0-220)/1000)*screen_height)-670)) + # defining the toplevels + input_window = InputWindow() + parameter_window = ParameterWindow() + core = Core() + logger = LoggingWindow() + plotter = PlotterOptionsWindow() + # defining variables used by tkinter widgets + current = StringVar() + current_subject = StringVar() + output_path = os.getcwd() + self.options = ["None"] + self.subjects = ["None"] + current.set ("None") + current_subject.set("None") + # other variables + input = () # receives the input from the input window + output = {} # receives the output from the core + # initializing parameter window + parameter_window.setParameters(core.get_parameters()) + parameter_window.display() + + ''' Gets the input from the input toplevel. + The input comprises of three elements: + 1. Input file (resting-state fMRI) + 2. Brain Mask + 3. Estimation Rule + ''' + def makeInput(): + start = time.process_time() + # interacting with the input window + input = input_window.getInput() + # interacting with the back-end + parameters = parameter_window.getParameters() + parameters['estimation'] = input[-2] + core.updateParameters(parameters) # only passing the estimation-rule + output = core.makeInput(input[:-2]) # receiving input from core + output_path = input[-1] # the path to output directory + # interacting with the parameter-window + parameter_window.setParameters(core.get_parameters()) + parameter_window.display() + # updating data + updateSubjects() + # logging + time_taken = time.process_time() - start + output.set_time(str(time_taken)[:5]) + logger.putLog(status=output) + + def changeEstimationRule(): + start = time.process_time() + # interacting with the input window + input = input_window.getInput() + # interacting with the core + output = core.updateParameters({"estimation":input[-2]}) + # interacting with the parameter-window + parameter_window.setParameters(core.get_parameters()) + parameter_window.display() + # logging + time_taken = time.process_time() - start + output.set_time(str(time_taken)[:5]) + logger.putLog(status=output) + + def updateParameters(): + start = time.process_time() + # interacting with the core + output = core.updateParameters(dic=parameter_window.updateParameters()) + # interacting with the parameter-window + parameter_window.setParameters(core.get_parameters()) + parameter_window.display() + time_taken = time.process_time() - start + # logging + output.set_time(str(time_taken)[:5]) + logger.putLog(status=output) + + def retrieveHRF(get_pos=False): + if "Preprocessed-BOLD" not in current.get(): + logger.putLog(status=Status(False, error="Select a Preprocessed-BOLD Timeseries to retrieve HRF")) + else: + start = time.process_time() + core.updateParameters(dic =parameter_window.updateParameters()) + bold_ts = core.get_time_series(current.get()) + output = core.retrieveHRF(bold_ts, get_pos) + # updating data + updateValues(log=False) + # logging + time_taken = time.process_time() - start + if get_pos: + output, pos = output + else: + pos = None + output.set_time(str(time_taken)[:5]) + logger.putLog(status=output) + return pos + + def retrieveHRFParameters(pos=None): + if pos != None: + current.set(current.get().split("_")[0] + "_HRF_" + str(pos)) + if "HRF" not in current.get(): + logger.putLog(status=Status(False, error="Select an HRF Timeseries to retrieve parameters")) + else: + start = time.process_time() + # interacting with the core + output = core.getHRFParameters(core.get_time_series(current.get())) + # updating data + updateValues(log=False) + # logging + time_taken = time.process_time() - start + output.set_time(str(time_taken)[:5]) + logger.putLog(status=output) + + def deconvolveHRF(pos=None): + if pos != None: + current.set(current.get().split("_")[0] + "_HRF_" + str(pos)) + if "HRF" not in current.get(): + logger.putLog(status=Status(False, error="Select an HRF Timeseries to deconvolve BOLD")) + else: + start = time.process_time() + # interacting with the core + output = core.deconvolveHRF(core.get_time_series(current.get())) + # updating data + updateValues(log=False) + # logging + time_taken = time.process_time() - start + output.set_time(str(time_taken)[:5]) + logger.putLog(status=output) + + def runCompletePipeline(): + if "Preprocessed-BOLD" in current.get(): + pos = retrieveHRF(get_pos=True) + retrieveHRFParameters(pos) + deconvolveHRF(pos) + elif "HRF" in current.get(): + retrieveHRFParameters() + deconvolveHRF() + else: + logger.putLog(status=Status(False, error="Select an HRF or Preprocessed-BOLD Timeseries to run pipeline")) + + def updatePlots(): + # interacting with the core + try: + plotables = core.get_plotables(current_subject.get()) + except: + logger.putLog(status=Status(False, error="Please select a subject")) + else: + # logging + if plotables == None: + logger.putLog(status=Status(False, error="Please select a subject")) + else: + logger.putLog(plotables=plotables) + # interacting with the plotter + plotter.updatePlots(plotables) + + def getInfo(): + try: + if len(current.get().split("_")) == 3: + logger.putLog(data_info=core.get_store_info(current.get())) + else: + logger.putLog(status = Status(False, error="Select a valid input to get information")) + except: + logger.putLog(status = Status(False, error="Select a valid input to get information")) + + def saveValue(): + try: + if len(current.get().split("_")) == 3: + if os.path.isdir(output_path): + out = output_path + else: + out = os.cwd() + if core.save_info(current.get(), out): + logger.putLog(status = Status(True, info="File saved successfully")) + else: + logger.putLog(status = Status(False, error="Unable to save file")) + else: + logger.putLog(status = Status(False, error="Select a valid input to save")) + except: + logger.putLog(status = Status(False, error="Select a valid input to save")) + + def saveForSubject(): + try: + temp = core.get_data_labels(current_subject.get()) + except: + logger.putLog(status=Status(False, error="Please select a subject")) + else: + for each in temp: + current.set(each) + saveValue() + + def add_new(l1, l2): + if l1 == None: + return l2 + if l2 == None: + return l1 + out = [] + for each in l1: + if each not in l2: + out.append(each) + for each in l2: + out.append(each) + return out + + def updateSubjects(): + temp = list(core.get_subjects()) + temp.append ("None") + self.subjects = add_new(self.subjects, temp) + self.subjects = sorted(self.subjects) + subjectOptions = OptionMenu(root, current_subject, *self.subjects) + subjectOptions.grid (row=0,column=1,padx=(30,30),pady=(5,5)) + + def updateValues(log=True): + try: + temp = core.get_data_labels(current_subject.get()) + except: + logger.putLog(status=Status(False, error="Please select a subject")) + else: + if log: + logger.putLog(status=Status(True, info="Updated values for subject: " + current_subject.get())) + temp.append ("None") + self.options = add_new(self.options, temp) + self.options = sorted(self.options) + valueOptions = OptionMenu(root, current, *self.options) + valueOptions.grid (row=1,column=1,padx=(30,30),pady=(5,5)) + + + + # defining the widgets + getInput = Button (root, text="Get Input", command=makeInput, height = 1, width = 20) + changeParameterButton = Button (root, text="Update Parameters", command=updateParameters, height = 1, width = 20) + retrieveHRFButton = Button (root, text="Retrieve HRF", command=retrieveHRF, height = 1, width = 20) + retrieveHRFParametersButton = Button (root, text="Retrieve HRF Parameters", command=retrieveHRFParameters, height = 1, width = 20) + deconvolveHRFButton = Button (root, text="Deconvolve BOLD", command=deconvolveHRF, height = 1, width = 20) + updatePlotsButton = Button (root, text="Update Plots", command=updatePlots, height = 1, width = 20) + changeEstimationRule = Button (root, text="Set Estimation Rule", command=changeEstimationRule, height = 1, width = 20) + getValueInfo = Button (root, text="Get Info", command=getInfo, height = 1, width = 20) + storeValue = Button (root, text="Save Value", command=saveValue, height = 1, width = 20) + updateStore = Button (root, text="Update Values", command=updateValues, height = 1, width = 20) + runCompletePipeline = Button (root, text="Run Pipeline", command=runCompletePipeline, height = 1, width = 20) + saveAllValues = Button (root, text="Save All", command=saveForSubject, height = 1, width = 20) + dataLabel = Label (root, text="Stored Values: ") + subjectLabel = Label (root, text="Subjects: ") + valueOptions = OptionMenu(root, current, *self.options) + subjectOptions = OptionMenu(root, current_subject, *self.subjects) + # placing the widgets + subjectLabel.grid (row=0,column=0,padx=(30,30),pady=(5,5)) + subjectOptions.grid (row=0,column=1,padx=(30,30),pady=(5,5)) + dataLabel.grid (row=1,column=0,padx=(30,30),pady=(5,5)) + valueOptions.grid (row=1,column=1,padx=(30,30),pady=(5,5)) + getInput.grid (row=2,column=0,padx=(30,30),pady=(5,5)) + updateStore.grid (row=2,column=1,padx=(30,30),pady=(5,5)) + changeEstimationRule.grid (row=3,column=0,padx=(30,30),pady=(5,5)) + changeParameterButton.grid (row=3,column=1,padx=(30,30),pady=(5,5)) + retrieveHRFButton.grid (row=4,column=0,padx=(30,30),pady=(5,5)) + retrieveHRFParametersButton.grid(row=4,column=1,padx=(30,30),pady=(5,5)) + deconvolveHRFButton.grid (row=5,column=0,padx=(30,30),pady=(5,5)) + updatePlotsButton.grid (row=5,column=1,padx=(30,30),pady=(5,5)) + getValueInfo.grid (row=6,column=0,padx=(30,30),pady=(5,5)) + storeValue.grid (row=6,column=1,padx=(30,30),pady=(5,5)) + runCompletePipeline.grid (row=7,column=0,padx=(30,30),pady=(5,5)) + saveAllValues.grid (row=7,column=1,padx=(30,30),pady=(5,5)) + + root.mainloop() + + +if __name__ == "__main__": + Main() \ No newline at end of file diff --git a/build/lib/rsHRF/rsHRF_GUI/gui_windows/parameterWindow.py b/build/lib/rsHRF/rsHRF_GUI/gui_windows/parameterWindow.py new file mode 100644 index 0000000..f1bd56b --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/gui_windows/parameterWindow.py @@ -0,0 +1,54 @@ +from copy import deepcopy +from tkinter import Toplevel, Button, Entry, Label, DISABLED + +class ParameterWindow(): + def __init__(self): + self.window = Toplevel() + self.window.title("Parameters") + self.parameters = {} + self.labels = [] + self.entries = [] + # get screen width and height + screen_width = self.window.winfo_screenwidth() + screen_height = self.window.winfo_screenheight() + self.window.geometry("350x420+%d+%d" % (screen_width*(280.0/1900), (((1040.0-220)/1000)*screen_height)-390)) + + def updateParameters(self): + for i in range(len(self.labels)): + self.parameters[self.labels[i].cget('text')] = self.entries[i].get() + parameters = dict(self.parameters) + return deepcopy(parameters) + + def getParameters(self): + return deepcopy(self.parameters) + + def setParameters(self, dic): + self.parameters = deepcopy(dic) + + def display(self): + # removing existing widgets + for each in self.labels: + each.destroy() + for each in self.entries: + each.destroy() + # making new widgets + self.labels = [] + self.entries = [] + for each in self.parameters.keys(): + self.labels.append(Label(self.window, text=each)) + self.entries.append(Entry(self.window, width=15)) + if each == "passband" or each == "passband_deconvolve": + self.entries[-1].insert(0, str(self.parameters[each][0]) + "," + str(self.parameters[each][1])) + else: + self.entries[-1].insert(0, str(self.parameters[each])) + if each == "lag" or each == "dt": + self.entries[-1].configure(state=DISABLED) + row_i = 0 + while row_i < len(self.labels): + key = self.labels[row_i].cget("text") + if key == "estimation" or key == "temporal_mask": + row_i += 1 + continue + self.labels[row_i].grid(row=row_i,column=0,padx=(5,5),pady=(5,5)) + self.entries[row_i].grid(row=row_i,column=1,padx=(5,5),pady=(5,5)) + row_i += 1 diff --git a/build/lib/rsHRF/rsHRF_GUI/gui_windows/plotterOptionsWindow.py b/build/lib/rsHRF/rsHRF_GUI/gui_windows/plotterOptionsWindow.py new file mode 100644 index 0000000..31a2c22 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/gui_windows/plotterOptionsWindow.py @@ -0,0 +1,76 @@ +from .plotterWindow import PlotterWindow +from tkinter import Toplevel, OptionMenu, StringVar, _setit, Entry, IntVar, Checkbutton + +class PlotterOptionsWindow(): + def __init__(self): + window = Toplevel() + window.title("Plotting Menu") + # get screen width and height + screen_width = window.winfo_screenwidth() + screen_height = window.winfo_screenheight() + window.geometry("650x200+%d+%d" % (screen_width/2.95, 100 + screen_height/2)) + self.plotterScreen = PlotterWindow() + + # can have 3 different plots at once + self.numberOfPlots = self.plotterScreen.get_numberOfPlots() + self.plot = [StringVar() for i in range(self.numberOfPlots)] + self.plotVal = [IntVar() for i in range(self.numberOfPlots)] + self.plotValStore = [0 for i in range(self.numberOfPlots)] + self.plotables = [] + self.options = ["None"] + for each in self.plot: + each.set("None") + + def plotTS(): + for i in range(0, self.numberOfPlots): + if self.plotVal[i].get() != self.plotValStore[i]: + self.plotValStore[i] = self.plotVal[i].get() + if self.plotValStore[i] == 0: + self.plotterScreen.makePlot(None, 0, i) + return + for each in self.plotables: + if each[0] == self.plot[i].get(): + self.plotterScreen.makePlot(each[1][:,int(self.selectVoxel[i].get())], 1, i) + return + self.plotterScreen.makePlot(None, 0, i) + return + + self.plotSelectDropDown = [OptionMenu(window, self.plot[i], *self.options) for i in range(self.numberOfPlots) for i in range(self.numberOfPlots)] + self.selectVoxel = [Entry(window, width=10) for i in range(self.numberOfPlots) for i in range(self.numberOfPlots)] + self.plotButton = [Checkbutton(window, text=" Plot TS " + str(i), variable=self.plotVal[i], command=plotTS) for i in range(self.numberOfPlots)] + + for each in self.selectVoxel: + each.insert(0, 0) + + for i in range(0, self.numberOfPlots): + self.plotSelectDropDown[i].grid(row=0,column=i,padx=(5,5),pady=(5,5)) + self.selectVoxel[i].grid (row=1,column=i,padx=(5,5),pady=(5,5)) + self.plotButton[i].grid (row=2,column=i,padx=(5,5),pady=(5,5)) + + def updatePlots(self, plotables): + temp_names = [] + for each in self.plotables: + temp_names.append(each[0]) + for each in plotables: + if each[0] not in temp_names: + self.plotables.append(each) + self.options = ["None"] + for each in self.plotables: + self.options.append(each[0]) + self.options[1:] = sorted(self.options[1:]) + self.updateWidgets() + + def updateWidgets(self): + + if len(self.options) == 0: + self.options.append("None") + + for each in self.plotSelectDropDown: + each['menu'].delete(0, 'end') + + for choice in self.options: + for i in range(0, self.numberOfPlots): + self.plotSelectDropDown[i]['menu'].add_command(label=choice, command=_setit(self.plot[i], choice)) + + def get_plotables(self): + return self.plotables diff --git a/build/lib/rsHRF/rsHRF_GUI/gui_windows/plotterWindow.py b/build/lib/rsHRF/rsHRF_GUI/gui_windows/plotterWindow.py new file mode 100644 index 0000000..793be61 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/gui_windows/plotterWindow.py @@ -0,0 +1,37 @@ +import mpld3 +import matplotlib +matplotlib.use("TkAgg") +import numpy as np +from matplotlib.figure import Figure +from tkinter import ttk, Toplevel, Canvas, TOP, BOTH, BOTTOM +from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk + +class PlotterWindow(): + def __init__(self): + window = Toplevel() + window.title("Screen") + # get screen width and height + screen_width = window.winfo_screenwidth() + screen_height = window.winfo_screenheight() + window.geometry("600x400+%d+%d" % (screen_width-600, screen_height/2)) + figure = Figure(figsize=(5,5), dpi=100) + self.numberOfPlots = 3 + self.ts = [[] for i in range(0, self.numberOfPlots)] + self.plot = [figure.add_subplot(111) for i in range(0, self.numberOfPlots)] + self.canvas = FigureCanvasTkAgg(figure, window) + + def get_numberOfPlots(self): + return self.numberOfPlots + + def makePlot(self, ts, val, num): + for each in self.plot: + each.clear() + if val == 0: + self.ts[num] = 0 + elif val == 1: + self.ts[num] = ts + for i in range(self.numberOfPlots): + self.plot[i].plot(self.ts[i]) + self.canvas.draw() + self.canvas.get_tk_widget().pack(side=BOTTOM, fill=BOTH, expand=True) + diff --git a/build/lib/rsHRF/rsHRF_GUI/misc/__init__.py b/build/lib/rsHRF/rsHRF_GUI/misc/__init__.py new file mode 100644 index 0000000..9ff8118 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/misc/__init__.py @@ -0,0 +1 @@ +from . import status \ No newline at end of file diff --git a/build/lib/rsHRF/rsHRF_GUI/misc/status.py b/build/lib/rsHRF/rsHRF_GUI/misc/status.py new file mode 100644 index 0000000..e5b9769 --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/misc/status.py @@ -0,0 +1,39 @@ +class Status(): + def __init__(self, state, error="", info="", time="", dic={}): + self.state = state + self.info = info + self.error = error + self.time = time + self.dic = dic + + # setters + def set_state(self, b): + self.state = b + + def set_info(self, s): + self.info = s + + def set_error(self, e): + self.error = e + + def set_time(self, t): + self.time = t + + def set_dic(self, d): + self.dic = d + + # getters + def get_state(self): + return self.state + + def get_info(self): + return self.info + + def get_error(self): + return self.error + + def get_time(self): + return self.time + + def get_dic(self): + return self.dic \ No newline at end of file diff --git a/build/lib/rsHRF/rsHRF_GUI/run.py b/build/lib/rsHRF/rsHRF_GUI/run.py new file mode 100644 index 0000000..06d3ebe --- /dev/null +++ b/build/lib/rsHRF/rsHRF_GUI/run.py @@ -0,0 +1,4 @@ +from .gui_windows.main import Main + +def run(): + Main() \ No newline at end of file diff --git a/build/lib/rsHRF/sFIR/__init__.py b/build/lib/rsHRF/sFIR/__init__.py new file mode 100644 index 0000000..3c91074 --- /dev/null +++ b/build/lib/rsHRF/sFIR/__init__.py @@ -0,0 +1 @@ +from . import smooth_fir diff --git a/build/lib/rsHRF/sFIR/smooth_fir.py b/build/lib/rsHRF/sFIR/smooth_fir.py new file mode 100644 index 0000000..88e1ced --- /dev/null +++ b/build/lib/rsHRF/sFIR/smooth_fir.py @@ -0,0 +1,161 @@ +import numpy as np +from scipy import linalg +from ..processing import knee + +import warnings +warnings.filterwarnings("ignore") + +def wgr_regress(y, X): + n, ncolX = X.shape + Q,R,perm = linalg.qr(X, mode='economic', pivoting=True) + if R.ndim == 0: + p = 0 + elif R.ndim == 1: + p = int(abs(R[0]) > 0) + else: + if np.amin(R.shape) == 1: + p = int(abs(R[0]) > 0) + else: + p = np.sum(np.abs(np.diagonal(R)) > abs(max(n, ncolX)*np.spacing(R[0][0]))) + if p < ncolX: + R = R[0:p,0:p] + Q = Q[:,0:p] + perm = perm[0:p] + b = np.zeros((ncolX)) + if(R.shape[0] == R.shape[1]): + try: + b[perm] = linalg.solve(R,np.matmul(Q.T,y)) + except: + b[perm] = linalg.lstsq(R,np.matmul(Q.T,y)) + else: + b[perm] = linalg.lstsq(R,np.matmul(Q.T,y)) + return b + +def wgr_glsco(X, Y, sMRI = [], AR_lag=0, max_iter=20): + """ + Linear regression when disturbance terms follow AR(p) + ----------------------------------- + Model: + Yt = Xt * Beta + ut , + ut = Phi1 * u(t-1) + ... + Phip * u(t-p) + et + where et ~ N(0,s^2) + ----------------------------------- + Algorithm: + Cochrane-Orcutt iterated regression (Feasible generalized least squares) + ----------------------------------- + Usage: + Y = dependent variable (n * 1 vector) + X = regressors (n * k matrix) + AR_lag = number of lags in AR process + ----------------------------------- + Returns: + Beta = estimator corresponding to the k regressors + """ + nobs, nvar = X.shape + if sMRI == []: + Beta = wgr_regress(Y,X) + else: + sMRI = np.array(sMRI) + try: + Beta = linalg.solve(np.matmul(X.T,X)+sMRI,np.matmul(X.T,Y)) + except: + Beta = linalg.lstsq(np.matmul(X.T,X)+sMRI,np.matmul(X.T,Y)) + resid = Y - np.matmul(X,Beta) + if AR_lag == 0: + res_sum = np.cov(resid) + return res_sum, Beta + max_tol = min(1e-6, max(np.absolute(Beta)) / 1000) + for r in range(max_iter): + Beta_temp = Beta + X_AR = np.zeros((nobs - (2 * AR_lag), AR_lag)) + for m in range(AR_lag): + X_AR[:, m] = resid[AR_lag - m - 1:nobs - AR_lag - m - 1] + Y_AR = resid[AR_lag:nobs - AR_lag] + AR_para = wgr_regress(Y_AR, X_AR) + X_main = X[AR_lag:nobs, :] + Y_main = Y[AR_lag:nobs] + for m in range(AR_lag): + X_main = \ + X_main - (AR_para[m] * (X[AR_lag - m - 1:nobs - m - 1, :])) + Y_main = Y_main - (AR_para[m] * (Y[AR_lag - m - 1:nobs - m - 1])) + if sMRI == []: + Beta = wgr_regress(Y_main, X_main) + else: + try: + Beta = linalg.solve(np.matmul(X_main.T,X_main)+sMRI,np.matmul(X_main.T,Y_main)) + except: + Beta = linalg.lstsq(np.matmul(X_main.T,X_main)+sMRI,np.matmul(X_main.T,Y_main)) + resid = Y[AR_lag:nobs] - X[AR_lag:nobs, :].dot(Beta) + if(max(np.absolute(Beta - Beta_temp)) < max_tol): + break + res_sum = np.cov(resid) + return res_sum, Beta + +def Fit_sFIR2(output, length, TR, input, T, flag_sfir, AR_lag): + NN = int(np.floor(length/TR)) + _input = np.expand_dims(input[0], axis=0) + X = linalg.toeplitz(input, np.concatenate((_input, np.zeros((1, NN-1))), axis = 1)) + X = np.concatenate((X, np.ones((input.shape))), axis = 1) + if flag_sfir: + fwhm = 7 #fwhm=7 seconds smoothing - ref. Goutte + nh = NN-1 + dt = TR + _ = np.expand_dims(np.arange(1, nh+1).T, axis=1) + C = np.matmul(_,np.ones((1, nh))) + h = np.sqrt(1./(fwhm/dt)) + v = 0.1 + R = v * np.exp(-h/2 * (C-C.T)**2) + RI = linalg.inv(R) + MRI = np.zeros((nh + 1, nh + 1)) + MRI[0:nh,0:nh] = RI; + sigma = 1 + sMRI0 = sigma**2*MRI + sMRI = np.zeros((NN+1, NN+1)) + sMRI[0:NN,0:NN] = sMRI0; + if AR_lag == 0: + try: + hrf = linalg.solve((np.matmul(X.T,X)+sMRI),np.matmul(X.T,output)) + except: + hrf = linalg.lstsq((np.matmul(X.T,X)+sMRI),np.matmul(X.T,output)) + resid = output - np.matmul(X, hrf) + res_sum = np.cov(resid) + else: + res_sum, hrf = wgr_glsco(X,output,AR_lag=AR_lag,sMRI=sMRI); + else: + if AR_lag == 0: + hrf = linalg.lstsq(X,output) + hrf = hrf[0] + resid = output - np.matmul(X, hrf) + res_sum = np.cov(resid) + else: + res_sum, hrf = wgr_glsco(X,output,AR_lag=AR_lag) + return hrf, res_sum + +def wgr_FIR_estimation_HRF(u, dat, para, N): + if para['estimation'] == 'sFIR': + firmode = 1 + else: + firmode = 0 + lag = para['lag'] + nlag = np.amax(lag.shape) + len_bin = int(np.floor(para['len'] / para['TR'])) + hrf = np.zeros((len_bin+1, nlag)) + Cov_E = np.zeros((1, nlag)) + kk = 0 + for i_lag in range(1, nlag + 1): + RR = u - i_lag + RR = RR[RR >= 0] + if RR.size != 0: + design = np.zeros((N, 1)) + design[RR] = 1 + hrf_kk, e3 = Fit_sFIR2(dat, para['len'], para['TR'], design, len_bin, firmode, para['AR_lag']) + hrf[:, kk] = np.ravel(hrf_kk) + Cov_E[:, kk] = (np.ravel(e3)) + else: + Cov_E[:, kk] = np.inf + kk += 1 + placeholder, ind = knee.knee_pt(np.ravel(Cov_E)) + if ind == np.amax(Cov_E.shape) - 1: + ind = ind - 1 + rsH = hrf[:,ind+1] + return rsH, u \ No newline at end of file diff --git a/build/lib/rsHRF/spm_dep/__init__.py b/build/lib/rsHRF/spm_dep/__init__.py new file mode 100644 index 0000000..6d21f0c --- /dev/null +++ b/build/lib/rsHRF/spm_dep/__init__.py @@ -0,0 +1,2 @@ +from . import spm + diff --git a/build/lib/rsHRF/spm_dep/spm.py b/build/lib/rsHRF/spm_dep/spm.py new file mode 100644 index 0000000..c693867 --- /dev/null +++ b/build/lib/rsHRF/spm_dep/spm.py @@ -0,0 +1,153 @@ +import math +import numpy as np +import nibabel as nib +from scipy.special import gammaln + +import warnings +warnings.filterwarnings("ignore") + +def spm_vol(input_file): + """ + Get header information for images + """ + v = nib.load(input_file) + return v + + +def spm_read_vols(mapped_image_volume): + """ + Read in entire image volumes + """ + data = mapped_image_volume.get_fdata() + data = data.flatten(order='F') + return data + + +def spm_orth(X, OPT='pad'): + """ + Recursive Gram-Schmidt orthogonalisation of basis functions + @X - matrix + @OPT - 'norm' - for Euclidean normalisation + 'pad' - for zero padding of null space (default) + """ + def gs_cofficient(v1, v2): + return np.dot(v2, v1) / np.dot(v1, v1) + + def multiply(cofficient, v): + return map((lambda x: x * cofficient), v) + + def proj(v1, v2): + return multiply(gs_cofficient(v1, v2), v1) + + def gs(X, row_vecs=True, norm=True): + if not row_vecs: + X = X.T + Y = X[0:1, :].copy() + for i in range(1, X.shape[0]): + proj = np.diag((X[i, :].dot(Y.T) / + np.linalg.norm(Y, axis=1) ** 2).flat).dot(Y) + Y = np.vstack((Y, X[i, :] - proj.sum(0))) + if norm: + Y = np.diag(1 / np.linalg.norm(Y, axis=1)).dot(Y) + if row_vecs: + return Y + else: + return Y.T + + if OPT == 'norm': + return gs(X, row_vecs=False, norm=True) + elif OPT == 'pad': + return gs(X, row_vecs=False, norm=False) + else: + return X + + +def spm_hrf(RT, P=None, fMRI_T=16): + """ + @RT - scan repeat time + @P - parameters of the response function (two gamma functions) + + defaults (seconds) + % P[0] - Delay of Response (relative to onset) 6 + % P[1] - Delay of Undershoot (relative to onset) 16 + % P[2] - Dispersion of Response 1 + % P[3] - Dispersion of Undershoot 1 + % P[4] - Ratio of Response to Undershoot 6 + % P[5] - Onset (seconds) 0 + % P[6] - Length of Kernel (seconds) 32 + + hrf - hemodynamic response function + P - parameters of the response function + """ + p = np.array([6, 16, 1, 1, 6, 0, 32], dtype=float) + if P is not None: + p[0:len(P)] = P + _spm_Gpdf = lambda x, h, l: \ + np.exp(h * np.log(l) + (h - 1) * np.log(x) - (l * x) - gammaln(h)) + # modelled hemodynamic response function - {mixture of Gammas} + dt = RT / float(fMRI_T) + u = np.arange(0, int(p[6] / dt + 1)) - p[5] / dt + with np.errstate(divide='ignore'): # Known division-by-zero + hrf = _spm_Gpdf( + u, p[0] / p[2], dt / p[2] + ) - _spm_Gpdf( + u, p[1] / p[3], dt / p[3] + ) / p[4] + idx = np.arange(0, int((p[6] / RT) + 1)) * fMRI_T + hrf = hrf[idx] + hrf = np.nan_to_num(hrf) + hrf = hrf / np.sum(hrf) + return hrf + + +def spm_detrend(x, p=0): + """ + Polynomial detrending over columns + + spm_detrend removes linear and nonlinear trends + from column-wise data matrices. + + @x - data matrix + @p - order of polynomial [default : 0] + + Returns: + y - detrended data matrix + """ + m, n = x.shape + if (not m) or (not n): + y = [] + return y + + if (not p): + y = x - np.ones((m, 1), dtype='int') * x.mean(axis=0) + return y + + G = np.zeros((m, p + 1)) + for i in range(0, p + 1): + d = np.arange(1, m + 1) ** i + G[:, i] = d.flatten(1) + y = x - G.dot(np.linalg.pinv(G).dot(x)) + return y + + +def spm_write_vol(image_volume_info, image_voxels, image_name, file_type): + """ + Writes an image volume to disk + + @image_volume_info - a structure containing image volume + information (see spm_vol) + @image_voxels - a one, two or three dimensional matrix + containing the image voxels + @image_name - name of the file to save the image in + """ + if file_type == ".nii" or file_type == ".nii.gz": + data = image_voxels + affine = image_volume_info.affine + image_volume_info = nib.Nifti1Image(data, affine) + nib.save(image_volume_info, image_name + file_type) + else: + file_type = '.gii' + data = image_voxels + gi = nib.GiftiImage() + gi.add_gifti_data_array(nib.gifti.GiftiDataArray(image_voxels)) + nib.gifti.giftiio.write(gi, image_name + file_type) diff --git a/build/lib/rsHRF/unit_tests/__init__.py b/build/lib/rsHRF/unit_tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/build/lib/rsHRF/unit_tests/test_basis_functions.py b/build/lib/rsHRF/unit_tests/test_basis_functions.py new file mode 100644 index 0000000..2b57315 --- /dev/null +++ b/build/lib/rsHRF/unit_tests/test_basis_functions.py @@ -0,0 +1,30 @@ +import pytest +import numpy as np +from ..basis_functions import basis_functions + +def test_fourier_bf(): + assert type(basis_functions.fourier_bf(np.random.random(5), {'estimation': 'fourier', 'order': 3})) == type(np.random.random(1)) + assert type(basis_functions.fourier_bf(np.random.random(5), {'estimation': 'fourier-hanning', 'order': 3})) == type(np.random.random(1)) + assert basis_functions.fourier_bf(np.random.random(5), {'estimation': 'fourier', 'order': 3}).shape == (5, 2*3 + 1) + assert basis_functions.fourier_bf(np.random.random(5), {'estimation': 'fourier-hanning', 'order': 3}).shape == (5, 2*3 + 1) + assert basis_functions.fourier_bf(np.random.random(15), {'estimation': 'fourier', 'order': 3}).shape == (15, 2*3 + 1) + assert basis_functions.fourier_bf(np.random.random(15), {'estimation': 'fourier', 'order': 3}).shape == (15, 2*3 + 1) + assert basis_functions.fourier_bf(np.random.random(7), {'estimation': 'fourier', 'order': 11}).shape == (7, 2*11 + 1) + assert basis_functions.fourier_bf(np.random.random(7), {'estimation': 'fourier-hanning', 'order': 11}).shape == (7, 2*11 + 1) + assert np.allclose(basis_functions.fourier_bf(np.zeros(5), {'estimation': 'fourier', 'order': 3}), np.asarray([[1, 0, 0, 0, 1, 1, 1] for i in range(5)])) + assert np.allclose(basis_functions.fourier_bf(np.zeros(5), {'estimation': 'fourier-hanning', 'order': 3}), np.zeros((5, 2*3+1))) + assert np.allclose(basis_functions.fourier_bf(np.ones(5), {'estimation': 'fourier', 'order': 3}), np.asarray([[1, 0, 0, 0, 1, 1, 1] for i in range(5)])) + assert np.allclose(basis_functions.fourier_bf(np.ones(5), {'estimation': 'fourier-hanning', 'order': 3}), np.zeros((5, 2*3+1))) + assert np.allclose(basis_functions.fourier_bf(np.full(5, np.pi/2), {'estimation': 'fourier', 'order': 3}), np.asarray([[ 1.,-0.43030122,0.77685322,-0.97220684,-0.90268536,0.62968173,-0.23412359] for i in range(5)])) + assert np.allclose(basis_functions.fourier_bf(np.full(5, np.pi/2), {'estimation': 'fourier-hanning', 'order': 3}), np.asarray([[0.9513426809665357,-0.40936391340403033,0.7390536246669112,-0.9249018639367675,-0.8587631122906557,0.599043100699187,-0.222731764045654] for i in range(5)])) + +def test_gamma_bf(): + assert type(basis_functions.gamma_bf(np.random.random(5), 7)) == type(np.random.random(1)) + assert basis_functions.gamma_bf(np.random.random(5), 7).shape == (5, 7) + assert basis_functions.gamma_bf(np.random.random(6), 3).shape == (6, 3) + assert basis_functions.gamma_bf(np.random.random(5), 17).shape == (5, 17) + assert basis_functions.gamma_bf(np.random.random(15), 7).shape == (15, 7) + assert basis_functions.gamma_bf(np.random.random(15), 11).shape == (15, 11) + assert basis_functions.gamma_bf(np.random.random(15), 27).shape == (15, 27) + assert np.allclose(basis_functions.gamma_bf(np.zeros(5), 7), np.zeros((5, 7))) + assert np.allclose(basis_functions.gamma_bf(np.ones(5), 3), np.asarray([[6.13132402e-02, 7.29919526e-05, 2.81323432e-13] for i in range(5)])) \ No newline at end of file diff --git a/build/lib/rsHRF/unit_tests/test_canon_hrf2dd.py b/build/lib/rsHRF/unit_tests/test_canon_hrf2dd.py new file mode 100644 index 0000000..7f8a1ae --- /dev/null +++ b/build/lib/rsHRF/unit_tests/test_canon_hrf2dd.py @@ -0,0 +1,32 @@ +import pytest +import numpy as np +from ..spm_dep import spm +from ..processing import knee +from ..canon import canon_hrf2dd + +def test_wgr_spm_get_canonhrf(): + xBF = {} + xBF['dt'] = 2./3 + xBF['T'] = 3 + xBF['len'] = 24 + col1 = np.asarray([0.0, 0.00044807354048549653, 0.007361556038668112, 0.028700948964288868, 0.06209550607132158, 0.09729254798416208, 0.12429404240995112, 0.13792056661956356, 0.13802824093013008, 0.12762119074617928, 0.11077174845169241, 0.09120490808593994, 0.07165360815082951, 0.05376914935191879, 0.03832112614220298, 0.025486073112810325, 0.015110211890879629, 0.006900111913950147, 0.0005371690913944248, -0.004268194929392522, -0.007761293488920797, -0.010148007538333283, -0.01160630142209315, -0.012296736371437677, -0.012368815040058252, -0.011962915647414259, -0.011209052391768252, -0.01022411801820082, -0.009109051781949583, -0.007946887485859182, -0.006802115673078029, -0.005721375663317213, -0.004735225783873632, -0.003860617757643374, -0.0031036899586120515, -0.0024625525460218694, -0.001929827998394537]) + col2 = np.asarray([0.0, 0.00044807354048549653, 0.007342074519043911, 0.026270427564126324, 0.04604777855227284, 0.05298027426688717, 0.04436283618465861, 0.02599351455862868, 0.005549510765577248, -0.011472257205405234, -0.022704308365117443, -0.02817568454942533, -0.029165400859453156, -0.02728041542804467, -0.023923908293136474, -0.020091968757198677, -0.016373874758523064, -0.013045686593496723, -0.010184308584631133, -0.007764223130961229, -0.005723757639472168, -0.004001906734121734, -0.002552994436344191, -0.001347742979076045, -0.0003679965853120599, 0.0003999224194857678, 0.0009704879108325976, 0.0013618737912804435, 0.0015965904821198564, 0.0017004983374237365, 0.0017009756059719753, 0.001624910779748503, 0.0014969777484681833, 0.0013384308028707623, 0.0011664765672502776, 0.000994160094124114, 0.0008306404084625725]) + col3 = np.asarray([0.0, -0.0033744701883765727, -0.02853758656830626, -0.059581285703262654, -0.06276731227887467, -0.03315584298773516, 0.010290875704026259, 0.046611800411483495, 0.06497283018250533, 0.06515064496825096, 0.05287141888607183, 0.035134036642002486, 0.017473063697658053, 0.0031007110271825955, -0.006822656698791951, -0.01249576703581251, -0.014792986331505636, -0.014769241817926427, -0.01337626141896856, -0.011343705230548555, -0.009163530885765957, -0.0071259520361853165, -0.005372467154512138, -0.003946877599547011, -0.0028361208240172686, -0.001999202787460186, -0.0013856669839915764, -0.0009461276756354484, -0.000637391149634764, -0.00042422350787132274, -0.00027925231676790424, -0.0001819802281565093, -0.00011749866181071447, -7.521986433059284e-05, -4.777425670014074e-05, -3.0120010414058304e-05, -1.8859316315220087e-05]) + xBF['TD_DD'] = 0 + out = canon_hrf2dd.wgr_spm_get_canonhrf(xBF) + assert type(out) == type(np.asarray([])) + assert out.shape == (37, 1) + assert np.allclose(out[:,0], col1) + xBF['TD_DD'] = 1 + out = canon_hrf2dd.wgr_spm_get_canonhrf(xBF) + assert type(out) == type(np.asarray([])) + assert out.shape == (37, 2) + assert np.allclose(out[:,0], col1) + assert np.allclose(out[:,1], col2) + xBF['TD_DD'] = 2 + out = canon_hrf2dd.wgr_spm_get_canonhrf(xBF) + assert type(out) == type(np.asarray([])) + assert out.shape == (37, 3) + assert np.allclose(out[:,0], col1) + assert np.allclose(out[:,1], col2) + assert np.allclose(out[:,2], col3) \ No newline at end of file diff --git a/build/lib/rsHRF/unit_tests/test_iterative_wiener_deconv.py b/build/lib/rsHRF/unit_tests/test_iterative_wiener_deconv.py new file mode 100644 index 0000000..6b9bc49 --- /dev/null +++ b/build/lib/rsHRF/unit_tests/test_iterative_wiener_deconv.py @@ -0,0 +1,15 @@ +import pytest +import numpy as np +from .. import iterative_wiener_deconv + +def test_rsHRF_iterative_wiener_deconv(): + var1 = np.random.randint(100, 150) + var2 = np.random.randint(4, 20) + out = iterative_wiener_deconv.rsHRF_iterative_wiener_deconv(np.random.random(var1), np.random.random(var2)) + assert type(out) == type(np.asarray([])) + assert out.size == var1 + y = np.asarray([0.6589422147608651, 0.7239697210706654, 0.5596745029686809, 0.1518281619871923, 0.9344253850406739, 0.06696275606106217, 0.8730982497140573, 0.22794714268930805, 0.6120490212897929]) + h = np.asarray([0.8401094233417159, 0.5039895222403991, 0.008901275117447982, 0.28477784598041767]) + out_expected = np.asarray([0.02218669, 0.02221875, 0.02217417, 0.02219945, 0.02219854, 0.02217766, 0.02221443, 0.02217762, 0.02221311]) + out = iterative_wiener_deconv.rsHRF_iterative_wiener_deconv(y, h) + assert np.allclose(out, out_expected) \ No newline at end of file diff --git a/build/lib/rsHRF/unit_tests/test_knee.py b/build/lib/rsHRF/unit_tests/test_knee.py new file mode 100644 index 0000000..df3d5be --- /dev/null +++ b/build/lib/rsHRF/unit_tests/test_knee.py @@ -0,0 +1,20 @@ +import pytest +import numpy as np +from ..processing import knee + +def test_knee_pt(): + size = np.random.randint(10, 99) + y = np.random.random(size) + np.random.random(size) * 1j + out1, out2 = knee.knee_pt(y) + # assert type(out1) == np.int_ + # assert type(out2) == np.int_ + assert isinstance(out1, (int, np.integer)) + assert isinstance(out2, (int, np.integer)) + y = np.zeros(size) + np.zeros(size) * 1j + out1, out2 = knee.knee_pt(y) + assert out1 == 2 + assert out2 == 1 + y = np.asarray([(0.13638490363348788+0.4483173781686369j), (0.21565052592551615+0.5219779191597427j), (0.9979379796276104+0.07548834892584189j), (0.29470166952920507+0.36391228981190515j), (0.3464996550382653+0.0014059490581040945j), (0.4641546533051284+0.06567864084007502j), (0.46315096641592435+0.3323511950388086j), (0.17130338335642903+0.9791635674939458j), (0.9625869976661646+0.5830153856154539j), (0.8588617152267485+0.6576125931014645j)]) + out1, out2 = knee.knee_pt(y) + assert out1 == 6 + assert out2 == 0 \ No newline at end of file diff --git a/build/lib/rsHRF/unit_tests/test_parameters.py b/build/lib/rsHRF/unit_tests/test_parameters.py new file mode 100644 index 0000000..6380311 --- /dev/null +++ b/build/lib/rsHRF/unit_tests/test_parameters.py @@ -0,0 +1,11 @@ +import pytest +import numpy as np +from .. import parameters + +def test_wgr_get_parameters(): + assert type(parameters.wgr_get_parameters(np.random.random(np.random.randint(1, 100)), np.random.uniform(0, 5))) == type(np.asarray([])) + assert parameters.wgr_get_parameters(np.random.random(np.random.randint(1, 100)), np.random.uniform(0, 5)).size == 3 + assert np.allclose(parameters.wgr_get_parameters(np.zeros(np.random.randint(1, 100)), np.random.uniform(0, 5)), np.zeros(3)) + dt = np.random.uniform(0, 5) + assert np.allclose(parameters.wgr_get_parameters(np.ones(np.random.randint(100)), dt), np.asarray([1., dt, dt])) + assert np.allclose(parameters.wgr_get_parameters(np.asarray([0.54353434, 0.39763409, 0.92579636, 0.74797229, 0.89733085]), 0.1), np.asarray([0.92579636, 0.3, 0.1])) \ No newline at end of file diff --git a/build/lib/rsHRF/unit_tests/test_rest_filter.py b/build/lib/rsHRF/unit_tests/test_rest_filter.py new file mode 100644 index 0000000..fa1ddd4 --- /dev/null +++ b/build/lib/rsHRF/unit_tests/test_rest_filter.py @@ -0,0 +1,27 @@ +import pytest +import numpy as np +from ..processing import rest_filter + +def test_conn_filter(): + TR = np.random.randint(1, 10) + filter = [0.01, 0.08] + x = np.zeros((152, 1)) + y = rest_filter.conn_filter(TR, filter, x) + assert type(y) == type(np.asarray([])) + assert y.shape == (152, 1) + assert np.allclose(y, np.zeros((152, 1))) + x = np.ones((152, 1)) + y = rest_filter.conn_filter(TR, filter, x) + assert np.allclose(y, np.zeros((152, 1))) + +def test_rest_IdealFilter(): + TR = 2.0 + filter = [0.01, 0.08] + x = np.zeros((152, 1)) + y = rest_filter.rest_IdealFilter(x, TR, filter) + assert type(y) == type(np.asarray([])) + assert y.shape == (152, 1) + assert np.allclose(y, np.zeros((152, 1))) + x = np.ones((152, 1)) + y = rest_filter.rest_IdealFilter(x, TR, filter) + assert np.allclose(y, np.ones((152, 1))) \ No newline at end of file diff --git a/build/lib/rsHRF/unit_tests/test_smooth_fir.py b/build/lib/rsHRF/unit_tests/test_smooth_fir.py new file mode 100644 index 0000000..2d1ead8 --- /dev/null +++ b/build/lib/rsHRF/unit_tests/test_smooth_fir.py @@ -0,0 +1,91 @@ +import pytest +import numpy as np +from ..sFIR import smooth_fir + +def test_wgr_regress(): + val1 = np.random.randint(1, 10) + val2 = np.random.randint(11, 200) + y = np.random.random((val2)) + X = np.random.random((val2, val1)) + out = smooth_fir.wgr_regress(y, X) + assert type(out) == type(np.asarray([])) + assert out.size == val1 + y = np.zeros((val2)) + out = smooth_fir.wgr_regress(y, X) + assert np.allclose(np.zeros((val1)), out) + X = np.asarray([[0.24355643043258524, 0.7455782849363849, 0.23335172385642733, 0.020660847834777285], [0.3072110437035208, 0.18602592674503415, 0.9244063171012394, 0.4804649391334549], [0.8016594604103529, 0.9591356084764378, 0.21194228781653557, 0.9827060442384642], [0.07815744716811968, 0.3166325884280309, 0.11251053277597933, 0.6210284344051261], [0.2646152373376658, 0.5240016539430198, 0.31930431720842334, 0.0251519420757097], [0.021911974219001706, 0.01690869083226454, 0.3297262058981726, 0.6618903359199471], [0.08355709035078951, 0.07514938226594636, 0.0031208479890078022, 0.03888221191825747], [0.9970940046680711, 0.5878412240919779, 0.6558184846102507, 0.7206928654146247], [0.727649859981568, 0.4065500141583437, 0.775884796806493, 0.7015181953666869], [0.10971518494894683, 0.9959080243481756, 0.5422490052771556, 0.8266212359977652], [0.26459232860949, 0.8356742095986958, 0.1095077682766954, 0.14378156713215096], [0.259763773901589, 0.3746508316758117, 0.9001388308688932, 0.9050451624557473], [0.9856637279719391, 0.6479702871193095, 0.09198170835828423, 0.8476385625410208], [0.3815258418918812, 0.6703358792038151, 0.4383431460974705, 0.4641501816990993], [0.8473061691948293, 0.5224300782979008, 0.4121441061796459, 0.7523270716310405]]) + y = np.asarray([0.028931607771739087, 0.06696412129540685, 0.22387070667513875, 0.1646337105002752, 0.8412800842253353, 0.9425084870509369, 0.17822863038093084, 0.8479179507498892, 0.5029580038596141, 0.6444064372391561, 0.4070548187562978, 0.505922721410633, 0.15972752609496743, 0.6658366133135427, 0.8404498444201265]) + out_exp = np.asarray([0.0411757, 0.24767687, 0.42055364, 0.19608055]) + out = smooth_fir.wgr_regress(y, X) + assert(np.allclose(out, out_exp)) + +def test_wgr_glsco(): + val1 = np.random.randint(1, 10) + val2 = np.random.randint(11, 200) + Y = np.random.random((val2)) + X = np.random.random((val2, val1)) + sMRI = [] + AR_lag = 1 + max_iter = 20 + out = smooth_fir.wgr_glsco(X, Y, sMRI = sMRI, AR_lag=AR_lag, max_iter=max_iter) + assert type(out) == type(()) + out1, out2 = out + assert type(out1) == type(np.asarray([])) + assert type(out2) == type(np.asarray([])) + assert out1.size == 1 + assert out2.size == val1 + X = np.asarray([[0.43544989084462715, 0.43777641933208156, 0.643080155843435, 0.813958593825052], [0.38928213850325455, 0.7593771015592158, 0.9254380082419151, 0.9447717588006423], [0.7259162100876503, 0.9598502412184825, 0.2899975081150954, 0.061478720535798836], [0.59879813056311, 0.48257959397766126, 0.5172554453824507, 0.16492819946945403], [0.11836248792536241, 0.5160265578209018, 0.8461462946573081, 0.912137637714782], [0.8737499577883742, 0.03795309267342717, 0.606763078803996, 0.5976806041129074], [0.4718986859311063, 0.2344092091943103, 0.473912352830851, 0.23718309987498087], [0.11576771623753401, 0.9128385253518523, 0.28409971172402615, 0.11940757702240845], [0.16412366113275922, 0.38190328702582255, 0.8469984086100405, 0.6973147802496206], [0.49506282363232845, 0.5190719545916632, 0.14244310294990092, 0.6104011894845355]]) + Y = np.asarray([0.23860649900343323, 0.5973580998661552, 0.3928186546630218, 0.05778943990961405, 0.7063978648709636, 0.07370285332712434, 0.009135396063910783, 0.09269627999757779, 0.5547467325191129, 0.9656335840727327]) + out = smooth_fir.wgr_glsco(X, Y, sMRI = sMRI, AR_lag=AR_lag, max_iter=max_iter) + out1, out2 = out + out1_exp = np.asarray([0.02611677]) + out2_exp = np.asarray([ 0.0367933 , 0.51386258, -0.97340772, 1.26010343]) + assert np.allclose(np.asarray(out1), out1_exp) + assert np.allclose(np.asarray(out2), out2_exp) + +def test_Fit_sFIR2(): + val = np.random.randint(11, 200) + output = np.random.random((val)) + length = 24 + TR = 2.0 + inp = np.random.random((val, 1)) + T = 12 + flag_sfir = 1 + AR_lag = 1 + out = smooth_fir.Fit_sFIR2(output, length, TR, inp, T, flag_sfir, AR_lag) + assert type(out) == type(()) + out1, out2 = out + assert type(out1) == type(np.asarray([])) + assert out1.size == 13 + assert type(out2) == type(np.asarray([])) + assert out2.size == 1 + output = np.zeros((val)) + out = smooth_fir.Fit_sFIR2(output, length, TR, inp, T, flag_sfir, AR_lag) + out1, out2 = out + assert np.allclose(np.zeros((13)), out1) + assert np.allclose(np.zeros((1)), out2) + inp = np.asarray([[0.11208123437880424], [0.47337000532832263], [0.5496760145257539], [0.1984332652066324], [0.29117413061557396], [0.707023774370774], [0.7601515226800849], [0.7330200743158585], [0.5033685350197652], [0.6139854490565899], [0.050357274201077495], [0.15618758068425953], [0.17767321816121273], [0.8491434293211506], [0.9017948328311318], [0.3170850576159929], [0.2645298774321433], [0.3485067071439355], [0.13392947284086754], [0.5564549094193428], [0.7549219830345042], [0.41491153064393316], [0.052470190827242136], [0.7863378666190465], [0.6221018221283174], [0.5318620796466], [0.9184682835509385], [0.09511349772823907], [0.2641100933731456], [0.5577093763583515]]) + output = np.asarray([0.03613177914943355, 0.19932562473088167, 0.3728048908567443, 0.07152471033316932, 0.13231120596801615, 0.8336233605946677, 0.19626102779888965, 0.11014151567005881, 0.2165833771773754, 0.09860670113620307, 0.13462733526174642, 0.4026949077980243, 0.7309591700260996, 0.5494233508094024, 0.36049825129091106, 0.07427512868812536, 0.9117468354810448, 0.1486779741324824, 0.23574106866255196, 0.20385094450271402, 0.17652149436966758, 0.8576716535577852, 0.7281154108083755, 0.5313725666429985, 0.6759241704468735, 0.19017576791553958, 0.6072763968829056, 0.35461323171658643, 0.07176955460623347, 0.3522955937509432]) + out2_exp = 0.062454251905728904 + out1_exp = np.asarray([-0.006013666009659839, -0.021447182383702836, -0.023945735843657407, -0.018371231986189136, -0.02233574736823547, -0.020078382177641022, 0.010920928033064338, 0.051249693019481325, 0.06888676660465594, 0.06398005690442186, 0.048868321199953546, 0.07298304109849973, 0.3096652201182815]) + out = smooth_fir.Fit_sFIR2(output, length, TR, inp, T, flag_sfir, AR_lag) + out1, out2 = out + assert np.allclose(out1_exp ,out1) + assert np.allclose(out2_exp ,out2) + +def test_wgr_FIR_estimation_HRF(): + u = np.random.random((7)) + dat = np.random.random((152)) + para = {'estimation': 'sFIR', 'passband': [0.01, 0.08], 'passband_deconvolve': [0.0, 1.7976931348623157e+308], 'TR': 2.0, 'T': 1, 'T0': 3, 'TD_DD': 2, 'AR_lag': 1, 'thr': np.asarray([ 1., np.inf]), 'temporal_mask': [], 'order': 3, 'len': 24, 'min_onset_search': 4, 'max_onset_search': 8, 'localK': 1, 'wiener': False, 'dt': 0.6666666666666666, 'lag': np.asarray([ 6, 7, 8, 9, 10, 11, 12])} + N = 152 + output = smooth_fir.wgr_FIR_estimation_HRF(u, dat, para, N) + assert type(output) == type(()) + u = np.asarray([0.8265743871886244, 0.4571816356384941, 0.9167817425355507, 0.6497771799779721, 0.6873170490384577, 0.45801903592817417, 0.7458612352409498]) + dat = np.asarray([0.07965334399271984, 0.5784720482033168, 0.7241693158799498, 0.8594543092961181, 0.3333887323361263, 0.8663470970895705, 0.1692672051067885, 0.8132782708370856, 0.3545430163067911, 0.1389518058293373, 0.04008377738610536, 0.5251678917354534, 0.03331965019371441, 0.5560024201801771, 0.6492800171038505]) + output = smooth_fir.wgr_FIR_estimation_HRF(u, dat, para, N) + out1, out2 = output + assert type(out1) == type(np.asarray([])) + assert type(out2) == type(np.asarray([])) + assert np.allclose(out1, np.zeros((13))) + out2_exp = np.array([0.82657439, 0.45718164, 0.91678174, 0.64977718, 0.68731705, 0.45801904, 0.74586124]) + assert np.allclose(out2_exp ,out2) \ No newline at end of file diff --git a/build/lib/rsHRF/unit_tests/test_spm.py b/build/lib/rsHRF/unit_tests/test_spm.py new file mode 100644 index 0000000..7308fc9 --- /dev/null +++ b/build/lib/rsHRF/unit_tests/test_spm.py @@ -0,0 +1,97 @@ +import pytest +from unittest import mock +import os +import math +import numpy as np +import nibabel as nib +from scipy.special import gammaln +from ..spm_dep import spm + +SHAPE = (10, 10, 10, 10) + +def get_data(image_type): + data = np.array(np.random.random(SHAPE), dtype=np.float32) + mask = np.random.random(SHAPE[:3]) > 0.1 + if len(SHAPE) > 3: + data[mask, :] = 0 + else: + data[mask] = 0 + if image_type == 'nifti': + data = nib.Nifti1Image(data, np.eye(4)) + else: + data = nib.gifti.GiftiDataArray(data) + return data + +def test_spm_vol(): + test_file_1 = 'test.gii' + test_file_2 = 'test.gii.gz' + test_file_3 = 'test.nii' + test_file_4 = 'test.nii.gz' + test_files = [test_file_1, test_file_2, test_file_3, test_file_4] + with mock.patch('nibabel.load') as load_mock: + for test_file in test_files: + if 'nii' in test_file: + load_mock.return_value = get_data('nifti') + elif 'gii' in test_file: + load_mock.return_value = get_data('gifti') + v = spm.spm_vol(test_file) + assert ('nii' in test_file or 'gii' in test_file) + if 'nii' in test_file: + assert type(v) == type(nib.Nifti1Image(np.asarray([]), np.eye(4))) + elif 'gii' in test_file: + assert type(v) == type(nib.gifti.GiftiDataArray(np.asarray([]))) + +def test_spm_read_vols(): + nifti = get_data('nifti') + data = spm.spm_read_vols(nifti) + assert type(data) == type(np.asarray([])) + assert data.shape[0] == pow(10, 4) + +def test_spm_orth(): + tests = [(3, 4), (7, 5), (4, 12), (13, 6), (11, 11)] + for test in tests: + X = np.random.random(test) + Y = spm.spm_orth(X) + assert type(Y) == type(X) + assert Y.shape == X.shape + +def test_spm_hrf(): + tests = [.5, 1, 2, 3, 4, 1.5, 2.5, 10] + for test in tests: + hrf = spm.spm_hrf(test) + assert type(hrf) == type(np.asarray([])) + assert len(hrf.shape) == 1 + assert hrf.size in [int(33/test) - 1, int(33/test), int(33/test) + 1] + +def test_spm_detrend(): + tests = [(3, 4), (7, 5), (4, 12), (13, 6), (11, 11)] + for test in tests: + X = np.random.random(test) + Y = spm.spm_detrend(X) + assert type(Y) == type(X) + assert Y.shape == X.shape + Y = Y.T + Y_sum = np.sum(Y, axis=1) + assert np.allclose(Y_sum, np.zeros(Y_sum.shape)) + +def test_spm_write_vol(): + test_file_1 = 'test.gii' + test_file_2 = 'test.gii.gz' + test_file_3 = 'test.nii' + test_file_4 = 'test.nii.gz' + test_files = [test_file_1, test_file_2, test_file_3, test_file_4] + with mock.patch('nibabel.load') as load_mock: + for test_file in test_files: + if 'nii' in test_file: + load_mock.return_value = get_data('nifti') + elif 'gii' in test_file: + load_mock.return_value = get_data('gifti') + v1 = spm.spm_vol(test_file) + mask_data = np.zeros(SHAPE[:-1]).flatten(order='F') + fname = test_file.split('.')[0] + file_type = '.' + test_file.split('.', 1)[1] + spm.spm_write_vol(v1, mask_data, fname, file_type) + if 'gii' in file_type: + file_type = '.gii' + assert os.path.isfile(fname + file_type) + os.remove(fname + file_type) \ No newline at end of file diff --git a/build/lib/rsHRF/utils/__init__.py b/build/lib/rsHRF/utils/__init__.py new file mode 100644 index 0000000..afcda41 --- /dev/null +++ b/build/lib/rsHRF/utils/__init__.py @@ -0,0 +1,2 @@ +from . import hrf_estimation +from . import bids \ No newline at end of file diff --git a/build/lib/rsHRF/utils/bids.py b/build/lib/rsHRF/utils/bids.py new file mode 100644 index 0000000..41ca950 --- /dev/null +++ b/build/lib/rsHRF/utils/bids.py @@ -0,0 +1,53 @@ +"""Utilities to handle BIDS inputs.""" +import os +import sys +import json +from pathlib import Path + +def write_derivative_description(bids_dir, deriv_dir): + from ..__about__ import __version__, DOWNLOAD_URL + + print(__version__) + bids_dir = Path(bids_dir) + deriv_dir = Path(deriv_dir) + desc = { + 'Name': 'rsHRF - retrieve the haemodynamic response function from resting state fMRI data', + 'BIDSVersion': '1.4.0', + 'DatasetType': 'derivative', + 'GeneratedBy': [{ + 'Name': 'rsHRF', + 'Version': __version__, + 'CodeURL': DOWNLOAD_URL, + }], + 'HowToAcknowledge': + 'Please cite our paper : https://doi.org/10.1016/j.neuroimage.2021.118591 ' + , + } + + # Keys that can only be set by environment + if 'RSHRF_DOCKER_TAG' in os.environ: + desc['GeneratedBy'][0]['Container'] = { + "Type": "docker", + "Tag": f"bids/rshrf:{os.environ['FMRIPREP_DOCKER_TAG']}" + } + if 'RSHRF_SINGULARITY_URL' in os.environ: + desc['GeneratedBy'][0]['Container'] = { + "Type": "singularity", + "URI": os.getenv('FMRIPREP_SINGULARITY_URL') + } + + # Keys deriving from source dataset + orig_desc = {} + fname = bids_dir / 'dataset_description.json' + if fname.exists(): + orig_desc = json.loads(fname.read_text()) + + if 'DatasetDOI' in orig_desc: + desc['SourceDatasets'] = [{ + 'URL': f'https://doi.org/{orig_desc["DatasetDOI"]}', + 'DOI': orig_desc['DatasetDOI'] + }] + if 'License' in orig_desc: + desc['License'] = orig_desc['License'] + + Path.write_text(deriv_dir / 'dataset_description.json', json.dumps(desc, indent=4)) diff --git a/build/lib/rsHRF/utils/hrf_estimation.py b/build/lib/rsHRF/utils/hrf_estimation.py new file mode 100644 index 0000000..6b05587 --- /dev/null +++ b/build/lib/rsHRF/utils/hrf_estimation.py @@ -0,0 +1,144 @@ +import os +import shutil +import tempfile +import numpy as np +from scipy import stats +from scipy.sparse import lil_matrix +from joblib import load, dump +from joblib import Parallel, delayed +from rsHRF import processing, sFIR +from ..processing import knee + +import warnings +warnings.filterwarnings("ignore") + +""" +HRF ESTIMATION +""" + +def compute_hrf(bold_sig, para, temporal_mask, p_jobs, bf = None): + para['temporal_mask'] = temporal_mask + N, nvar = bold_sig.shape + folder = tempfile.mkdtemp() + data_folder = os.path.join(folder, 'data') + dump(bold_sig, data_folder) + data = load(data_folder, mmap_mode='r') + results = Parallel(n_jobs=p_jobs)(delayed(estimate_hrf)(data, i, para, + N, bf) for i in range(nvar)) + beta_hrf, event_bold = zip(*results) + try: + shutil.rmtree(folder) + except: + print("Failed to delete: " + folder) + # return np.array(beta_hrf).T, np.array(event_bold) + return np.array(beta_hrf).T, event_bold + # events_bold can have shapes + # (6,), (12,), (2,), (5,), (11,), (8,), (14,), (4,), (7,), (10,), (13,), (3,), (9,) + + +def estimate_hrf(bold_sig, i, para, N, bf = None): + """ + Estimate HRF + """ + dat = bold_sig[:, i] + localK = para['localK'] + if para['estimation'] == 'sFIR' or para['estimation'] == 'FIR': + #Estimate HRF for the sFIR or FIR basis functions + if np.count_nonzero(para['thr']) == 1: + para['thr'] = np.array([para['thr'], np.inf]) + thr = para['thr'] #Thr is a vector for (s)FIR + u = wgr_BOLD_event_vector(N, dat, thr, localK, para['temporal_mask']) + u = u.toarray().flatten('C').ravel().nonzero()[0] + beta_hrf, event_bold = sFIR.smooth_fir.wgr_FIR_estimation_HRF(u, dat, para, N) + else: + thr = [para['thr']] #Thr is a scalar for the basis functions + u0 = wgr_BOLD_event_vector(N, dat, thr, localK, para['temporal_mask']) + u = np.append(u0.toarray(), np.zeros((para['T'] - 1, N)), axis=0) + u = np.reshape(u, (1, - 1), order='F') + beta_hrf = wgr_hrf_fit(dat, para, u, bf) + u = u0.toarray()[0].nonzero()[0] + return beta_hrf, u + +def wgr_onset_design(u, bf, T, T0, nscans): + """ + @u - BOLD event vector (microtime). + @bf - basis set matrix + @T - microtime resolution (number of time bins per scan) + @T0 - microtime onset (reference time bin, see slice timing) + """ + ind = np.arange(0, max(u.shape)) + X = np.empty((0, len(ind))) + for p in range(bf.shape[1]): + x = np.convolve(u, bf[:, p]) + x = x[ind] + X = np.append(X, [x], axis=0) + X = X.T + """ + Resample regressors at acquisition times + """ + X = X[(np.arange(0, nscans) * T) + (T0 - 1), :] + return X + + +def wgr_glm_estimation(dat, u, bf, T, T0, AR_lag): + """ + @u - BOLD event vector (microtime). + """ + nscans = dat.shape[0] + x = wgr_onset_design(u, bf, T, T0, nscans) + X = np.append(x, np.ones((nscans, 1)), axis=1) + res_sum, Beta = sFIR.smooth_fir.wgr_glsco(X, dat, AR_lag=AR_lag) + return np.real(res_sum), Beta + +def wgr_hrf_fit(dat, xBF, u, bf): + """ + @u - BOLD event vector (microtime). + @nlag - time lag from neural event to BOLD event + """ + lag = xBF['lag'] + AR_lag = xBF['AR_lag'] + nlag = len(lag) + erm = np.zeros((1, nlag)) + beta = np.zeros((bf.shape[1] + 1, nlag)) + for i in range(nlag): + u_lag = np.append(u[0, lag[i]:], np.zeros((1, lag[i]))).T + erm[0, i], beta[:, i] = \ + wgr_glm_estimation(dat, u_lag, bf, xBF['T'], xBF['T0'], AR_lag) + x, idx = knee.knee_pt(np.ravel(erm)) + if idx == nlag-1: + idx = idx - 1 + beta_hrf = beta[:, idx+1] + beta_hrf = np.append(beta_hrf, lag[idx+1]) + return beta_hrf + +def wgr_BOLD_event_vector(N, matrix, thr, k, temporal_mask): + """ + Detect BOLD event. + event > thr & event < 3.1 + """ + data = lil_matrix((1, N)) + matrix = matrix[:, np.newaxis] + matrix = np.nan_to_num(matrix) + if 0 in np.array(temporal_mask).shape: + matrix = stats.zscore(matrix, ddof=1) + for t in range(1 + k, N - k + 1): + if matrix[t - 1, 0] > thr[0] and \ + np.all(matrix[t - k - 1:t - 1, 0] < matrix[t - 1, 0]) and \ + np.all(matrix[t - 1, 0] > matrix[t:t + k, 0]): + data[0, t - 1] = 1 + else: + tmp = temporal_mask + for i in range(len(temporal_mask)): + if tmp[i] == 1: + temporal_mask[i] = i + datm = np.mean(matrix[temporal_mask]) + datstd = np.std(matrix[temporal_mask]) + if datstd == 0: datstd = 1 + matrix = (matrix - datm)/datstd + for t in range(1 + k, N - k + 1): + if tmp[t-1]: + if matrix[t - 1, 0] > thr[0] and \ + np.all(matrix[t - k - 1:t - 1, 0] < matrix[t - 1, 0]) and \ + np.all(matrix[t - 1, 0] > matrix[t:t + k, 0]): + data[0, t - 1] = 1. + return data diff --git a/consistency_test/VoxelTest/rsHRF_python.py b/consistency_test/VoxelTest/rsHRF_python.py index 6bc968e..21458a8 100644 --- a/consistency_test/VoxelTest/rsHRF_python.py +++ b/consistency_test/VoxelTest/rsHRF_python.py @@ -66,7 +66,7 @@ v1 = spm_dep.spm.spm_vol(input_file) brain = spm_dep.spm.spm_read_vols(v) voxel_ind = np.where(brain > 0)[0] - data = v1.get_data() + data = v1.get_fdata() nobs = data.shape[3] data1 = np.reshape(data, (-1, nobs), order='F').T data1 = data1[:, voxel_ind] diff --git a/requirements.txt b/requirements.txt index 1eae084..7ba566e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,4 +8,4 @@ pandas patsy mpld3 joblib -pyyawt \ No newline at end of file +PyWavelets \ No newline at end of file diff --git a/rsHRF/fourD_rsHRF.py b/rsHRF/fourD_rsHRF.py index 2491f08..d178f04 100755 --- a/rsHRF/fourD_rsHRF.py +++ b/rsHRF/fourD_rsHRF.py @@ -49,13 +49,13 @@ def demo_rsHRF(input_file, mask_file, output_dir, para, p_jobs, file_type=".nii" raise ValueError ('Inconsistency in input-mask dimensions' + '\n\tinput_file == ' + name + file_type + '\n\tmask_file == ' + mask_name + file_type) else: if file_type == ".nii" or file_type == ".nii.gz" : - data = v1.get_data() + data = v1.get_fdata() else: data = v1.agg_data() else: print('No atlas provided! Generating mask file...') if file_type == ".nii" or file_type == ".nii.gz" : - data = v1.get_data() + data = v1.get_fdata() brain = np.nanvar(data.reshape(-1, data.shape[3]), -1, ddof=0) else: data = v1.agg_data() diff --git a/rsHRF/iterative_wiener_deconv.py b/rsHRF/iterative_wiener_deconv.py index 577a689..774ed7a 100755 --- a/rsHRF/iterative_wiener_deconv.py +++ b/rsHRF/iterative_wiener_deconv.py @@ -1,36 +1,39 @@ -import pyyawt +# import pyyawt +import pywt import numpy as np -from rsHRF.processing import knee +from rsHRF.processing import knee def rsHRF_iterative_wiener_deconv(y, h, Iterations=1000): - N = y.shape[0] - nh = max(h.shape) - h = np.append(h, np.zeros((N - nh, 1))) - H = np.fft.fft(h, axis=0) - Y = np.fft.fft(y, axis=0) - [c ,l] = pyyawt.wavedec(abs(y), 1, 'db2') - sigma = pyyawt.wnoisest(c, l, 1) - Phh = np.square(abs(H)) - sqrdtempnorm = ((((np.linalg.norm(y-np.mean(y), 2)**2) - (N-1)*(sigma**2)))/(np.linalg.norm(h,1))**2) - Nf = (sigma**2)*N - tempreg = Nf/sqrdtempnorm - Pxx0 = np.square(abs(np.multiply(Y, (np.divide(np.conj(H), (Phh + N*tempreg)))))) - Pxx = Pxx0 - Sf = Pxx.reshape(-1, 1) + N = y.shape[0] + nh = max(h.shape) + h = np.append(h, np.zeros((N - nh, 1))) + H = np.fft.fft(h, axis=0) + Y = np.fft.fft(y, axis=0) + coeffs = pywt.wavedec(abs(y), 'db2', level=1) + sigma = np.median(np.abs(coeffs[-1])) / 0.6745 + Phh = np.square(abs(H)) + sqrdtempnorm = ((((np.linalg.norm(y-np.mean(y), 2)**2) - (N-1)*(sigma**2))) / (np.linalg.norm(h,1))**2) + Nf = (sigma**2)*N + tempreg = Nf/sqrdtempnorm + Pxx0 = np.square(abs(np.multiply(Y, (np.divide(np.conj(H), (Phh + N*tempreg)))))) + Pxx = Pxx0 + Sf = Pxx.reshape(-1, 1) for i in range(0, Iterations): - M = np.divide(np.multiply(np.multiply(np.conjugate(H), Pxx), Y), np.add(np.multiply(np.square(abs(H)), Pxx), Nf)) - PxxY = np.divide(np.multiply(Pxx, Nf), np.add(np.multiply(np.square(abs(H)), Pxx), Nf)) - Pxx = np.add(PxxY, np.square(abs(M))) - Sf = np.concatenate((Sf, Pxx.reshape(-1, 1)), axis = 1) - dSf = np.diff(Sf, 1, 1) - dSfmse = np.mean(np.square(dSf), axis=1) - _, idx = knee.knee_pt(dSfmse) - idm = np.argmin(dSfmse) - ratio = np.abs(dSfmse[idx] - dSfmse[idm])/(np.abs(np.max(dSfmse) - np.min(dSfmse))) - if ratio > 0.5: + M = np.divide(np.multiply(np.multiply(np.conjugate(H), Pxx), Y), np.add(np.multiply(np.square(abs(H)), Pxx), Nf)) + PxxY = np.divide(np.multiply(Pxx, Nf), np.add(np.multiply(np.square(abs(H)), Pxx), Nf)) + Pxx = np.add(PxxY, np.square(abs(M))) + Sf = np.concatenate((Sf, Pxx.reshape(-1, 1)), axis=1) + dSf = np.diff(Sf, 1, 1) + dSfmse = np.mean(np.square(dSf), axis=1) + _, idx = knee.knee_pt(dSfmse) + idm = np.argmin(dSfmse) + ratio = np.abs(dSfmse[idx] - dSfmse[idm])/(np.abs(np.max(dSfmse) - np.min(dSfmse))) + if ratio > 0.5: id0 = idm else: id0 = idx - Pxx = Sf[:,id0+1] + # Safe indexing to avoid IndexError + safe_index = min(id0 + 1, Sf.shape[1] - 1) + Pxx = Sf[:, safe_index] WienerFilterEst = np.divide(np.multiply(np.conj(H), Pxx), np.add(np.multiply(np.square(abs(H)), Pxx), Nf)) return np.real(np.fft.ifft(np.multiply(WienerFilterEst, Y))) \ No newline at end of file diff --git a/rsHRF/processing/knee.py b/rsHRF/processing/knee.py index eeac2cb..d1cf95d 100755 --- a/rsHRF/processing/knee.py +++ b/rsHRF/processing/knee.py @@ -19,7 +19,7 @@ def knee_pt_helper(y, x=None): res_x = np.nan idx_of_result = np.nan - if type(y) is not np.ndarray: + if not isinstance(y, np.ndarray): print('knee_pt: y must be a numpy 1D vector') return res_x, idx_of_result else: @@ -32,7 +32,7 @@ def knee_pt_helper(y, x=None): else: if x is None: x_was_none = True - x = np.arange(1, np.amax(y.shape) + 1, dtype=np.int) + x = np.arange(1, np.amax(y.shape) + 1, dtype=int) if x.shape != y.shape: print('knee_pt: y and x must have the same dimensions') return res_x, idx_of_result diff --git a/rsHRF/processing/rest_filter.py b/rsHRF/processing/rest_filter.py index 3d4f177..9cb1e1b 100755 --- a/rsHRF/processing/rest_filter.py +++ b/rsHRF/processing/rest_filter.py @@ -13,7 +13,7 @@ def rest_IdealFilter(x, TR, Bands, m=5000): else: ind_X = [j for j in range((i-1)*m, nvar)] x1 = x[:, ind_X] - x1 = conn_filter(TR,Bands,x1) + np.matlib.repmat(np.mean(x1), x1.shape[0], 1) + x1 = conn_filter(TR,Bands,x1) + np.mean(x1, keepdims=True).repeat(x1.shape[0], axis=0) x[:,ind_X] = x1 return x diff --git a/rsHRF/rsHRF_GUI/core/core.py b/rsHRF/rsHRF_GUI/core/core.py index 3912042..ad48722 100755 --- a/rsHRF/rsHRF_GUI/core/core.py +++ b/rsHRF/rsHRF_GUI/core/core.py @@ -197,7 +197,7 @@ def makeInputFile(self, input_file, mask_file, file_type, mode): # if the time-series is not present if not subject.is_present("BOLD", input_file): if file_type == ".nii" or file_type == ".nii.gz": - data = v1.get_data() + data = v1.get_fdata() nobs = data.shape[3] data1 = np.reshape(data, (-1, nobs), order='F').T elif file_type == ".gii" or file_type == ".gii.gz": diff --git a/rsHRF/spm_dep/spm.py b/rsHRF/spm_dep/spm.py index d2ee2b0..c693867 100755 --- a/rsHRF/spm_dep/spm.py +++ b/rsHRF/spm_dep/spm.py @@ -18,7 +18,7 @@ def spm_read_vols(mapped_image_volume): """ Read in entire image volumes """ - data = mapped_image_volume.get_data() + data = mapped_image_volume.get_fdata() data = data.flatten(order='F') return data diff --git a/rsHRF/unit_tests/test_knee.py b/rsHRF/unit_tests/test_knee.py index 60093af..df3d5be 100644 --- a/rsHRF/unit_tests/test_knee.py +++ b/rsHRF/unit_tests/test_knee.py @@ -6,8 +6,10 @@ def test_knee_pt(): size = np.random.randint(10, 99) y = np.random.random(size) + np.random.random(size) * 1j out1, out2 = knee.knee_pt(y) - assert type(out1) == np.int_ - assert type(out2) == np.int_ + # assert type(out1) == np.int_ + # assert type(out2) == np.int_ + assert isinstance(out1, (int, np.integer)) + assert isinstance(out2, (int, np.integer)) y = np.zeros(size) + np.zeros(size) * 1j out1, out2 = knee.knee_pt(y) assert out1 == 2 diff --git a/rsHRF/utils/hrf_estimation.py b/rsHRF/utils/hrf_estimation.py index e857bf0..6b05587 100755 --- a/rsHRF/utils/hrf_estimation.py +++ b/rsHRF/utils/hrf_estimation.py @@ -30,7 +30,11 @@ def compute_hrf(bold_sig, para, temporal_mask, p_jobs, bf = None): shutil.rmtree(folder) except: print("Failed to delete: " + folder) - return np.array(beta_hrf).T, np.array(event_bold) + # return np.array(beta_hrf).T, np.array(event_bold) + return np.array(beta_hrf).T, event_bold + # events_bold can have shapes + # (6,), (12,), (2,), (5,), (11,), (8,), (14,), (4,), (7,), (10,), (13,), (3,), (9,) + def estimate_hrf(bold_sig, i, para, N, bf = None): """ diff --git a/setup.py b/setup.py index 8673a3b..a742815 100644 --- a/setup.py +++ b/setup.py @@ -45,8 +45,9 @@ def run(self): include_package_data=True, zip_safe=False, python_requires=">=3.6", - install_requires=["numpy", "nibabel", "matplotlib", "scipy", "pybids==0.11.1", "pandas", "patsy", "mpld3", "duecredit", "joblib", "pyyawt"], + install_requires=["numpy", "nibabel", "matplotlib", "scipy", "pybids==0.11.1", "pandas", "patsy", "mpld3", "duecredit", "joblib", "PyWavelets"], cmdclass={ 'verify': VerifyVersionCommand, }, ) + From c521c2a58c819f648b70a13312487c3415f14eeb Mon Sep 17 00:00:00 2001 From: Alejandro Veloz Date: Tue, 29 Jul 2025 13:29:49 -0400 Subject: [PATCH 2/8] compatibility changes --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index d34f46b..94c18ad 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ **/*.pyc **/*.pyo *.egg-info/* +/build From bb5024e2d3d9a96d96876bd3b8abda1e41a2f29e Mon Sep 17 00:00:00 2001 From: aavelozb Date: Thu, 14 Aug 2025 14:16:36 -0400 Subject: [PATCH 3/8] minor changes --- rsHRF/fourD_rsHRF.py | 1 + 1 file changed, 1 insertion(+) diff --git a/rsHRF/fourD_rsHRF.py b/rsHRF/fourD_rsHRF.py index d178f04..3422d6e 100755 --- a/rsHRF/fourD_rsHRF.py +++ b/rsHRF/fourD_rsHRF.py @@ -96,6 +96,7 @@ def demo_rsHRF(input_file, mask_file, output_dir, para, p_jobs, file_type=".nii" para['T'] = 1 beta_hrf, event_bold = utils.hrf_estimation.compute_hrf(bold_sig, para, temporal_mask, p_jobs) hrfa = beta_hrf[:-1,:] + print(event_bold) nvar = hrfa.shape[1] PARA = np.zeros((3, nvar)) for voxel_id in range(nvar): From 2bbf948e0521617aed4a216ac87051c2246453d6 Mon Sep 17 00:00:00 2001 From: aavelozb Date: Thu, 14 Aug 2025 14:21:49 -0400 Subject: [PATCH 4/8] minor changes --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 94c18ad..e5f0993 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ **/*.pyc **/*.pyo *.egg-info/* -/build +build/ + From c69a9a23db941fc459585288e71c209b1b389e7d Mon Sep 17 00:00:00 2001 From: aavelozb Date: Thu, 14 Aug 2025 14:31:34 -0400 Subject: [PATCH 5/8] minor changes --- rsHRF/fourD_rsHRF.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rsHRF/fourD_rsHRF.py b/rsHRF/fourD_rsHRF.py index 3422d6e..1acc1ff 100755 --- a/rsHRF/fourD_rsHRF.py +++ b/rsHRF/fourD_rsHRF.py @@ -96,7 +96,6 @@ def demo_rsHRF(input_file, mask_file, output_dir, para, p_jobs, file_type=".nii" para['T'] = 1 beta_hrf, event_bold = utils.hrf_estimation.compute_hrf(bold_sig, para, temporal_mask, p_jobs) hrfa = beta_hrf[:-1,:] - print(event_bold) nvar = hrfa.shape[1] PARA = np.zeros((3, nvar)) for voxel_id in range(nvar): @@ -172,7 +171,7 @@ def demo_rsHRF(input_file, mask_file, output_dir, para, p_jobs, file_type=".nii" break pos += 1 event_plot = lil_matrix((1, nobs)) - if event_bold.size: + if len(event_bold)>0:#event_bold.size: event_plot[:, event_bold[pos]] = 1 else: print("No Events Detected!") From 45a5545d0581fbe016d5507747a689449a2fef2e Mon Sep 17 00:00:00 2001 From: aavelozb Date: Thu, 14 Aug 2025 14:37:46 -0400 Subject: [PATCH 6/8] minor changes --- rsHRF/fourD_rsHRF.py | 1 + 1 file changed, 1 insertion(+) diff --git a/rsHRF/fourD_rsHRF.py b/rsHRF/fourD_rsHRF.py index 1acc1ff..6550f78 100755 --- a/rsHRF/fourD_rsHRF.py +++ b/rsHRF/fourD_rsHRF.py @@ -171,6 +171,7 @@ def demo_rsHRF(input_file, mask_file, output_dir, para, p_jobs, file_type=".nii" break pos += 1 event_plot = lil_matrix((1, nobs)) + print('=========================================') if len(event_bold)>0:#event_bold.size: event_plot[:, event_bold[pos]] = 1 else: From 02bfea597942919f6852a5ab34c3e551ffe72b17 Mon Sep 17 00:00:00 2001 From: aavelozb Date: Thu, 14 Aug 2025 14:52:48 -0400 Subject: [PATCH 7/8] minor changes --- rsHRF/fourD_rsHRF.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rsHRF/fourD_rsHRF.py b/rsHRF/fourD_rsHRF.py index 6550f78..f78a0fc 100755 --- a/rsHRF/fourD_rsHRF.py +++ b/rsHRF/fourD_rsHRF.py @@ -85,7 +85,7 @@ def demo_rsHRF(input_file, mask_file, output_dir, para, p_jobs, file_type=".nii" rest_IdealFilter(bold_sig, para['TR'], para['passband']) data_deconv = np.zeros(bold_sig.shape) event_number = np.zeros((1, bold_sig.shape[1])) - print('Retrieving HRF ...') + print('Retrieving HRF (o:)...') #Estimate HRF for the fourier / hanning / gamma / cannon basis functions if not (para['estimation'] == 'sFIR' or para['estimation'] == 'FIR'): bf = basis_functions.basis_functions.get_basis_function(bold_sig.shape, para) From 69c433c29f2851ed52546b05004d93a5230afb55 Mon Sep 17 00:00:00 2001 From: aavelozb Date: Thu, 14 Aug 2025 14:58:52 -0400 Subject: [PATCH 8/8] minor changes --- rsHRF/fourD_rsHRF.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rsHRF/fourD_rsHRF.py b/rsHRF/fourD_rsHRF.py index f78a0fc..1acc1ff 100755 --- a/rsHRF/fourD_rsHRF.py +++ b/rsHRF/fourD_rsHRF.py @@ -85,7 +85,7 @@ def demo_rsHRF(input_file, mask_file, output_dir, para, p_jobs, file_type=".nii" rest_IdealFilter(bold_sig, para['TR'], para['passband']) data_deconv = np.zeros(bold_sig.shape) event_number = np.zeros((1, bold_sig.shape[1])) - print('Retrieving HRF (o:)...') + print('Retrieving HRF ...') #Estimate HRF for the fourier / hanning / gamma / cannon basis functions if not (para['estimation'] == 'sFIR' or para['estimation'] == 'FIR'): bf = basis_functions.basis_functions.get_basis_function(bold_sig.shape, para) @@ -171,7 +171,6 @@ def demo_rsHRF(input_file, mask_file, output_dir, para, p_jobs, file_type=".nii" break pos += 1 event_plot = lil_matrix((1, nobs)) - print('=========================================') if len(event_bold)>0:#event_bold.size: event_plot[:, event_bold[pos]] = 1 else: