Key and Param Group Test
[1]:
from cubids import CuBIDS
bod = CuBIDS("/Users/mcieslak/projects/test_bids_data/HBN")
bod._cache_fieldmaps()
100%|██████████| 10/10 [00:00<00:00, 189.38it/s]
[1]:
[]
[2]:
key_groups = bod.get_key_groups()
print(key_groups)
['acquisition-64dir_datatype-dwi_suffix-dwi', 'acquisition-HCP_datatype-anat_suffix-T1w', 'acquisition-HCP_datatype-anat_suffix-T2w', 'acquisition-dwi_datatype-fmap_direction-AP_suffix-epi', 'acquisition-dwi_datatype-fmap_direction-PA_suffix-epi', 'acquisition-fMRI_datatype-fmap_direction-AP_suffix-epi', 'acquisition-fMRI_datatype-fmap_direction-PA_suffix-epi', 'datatype-func_run-1_suffix-bold_task-peer', 'datatype-func_run-1_suffix-bold_task-rest', 'datatype-func_run-2_suffix-bold_task-peer', 'datatype-func_run-2_suffix-bold_task-rest', 'datatype-func_run-3_suffix-bold_task-peer', 'datatype-func_suffix-bold_task-movieDM', 'datatype-func_suffix-bold_task-movieTP']
[4]:
bod.get_param_groups_from_key_group('acquisition-64dir_datatype-dwi_suffix-dwi')
[4]:
EffectiveEchoSpacing | FlipAngle | RepetitionTime | EchoTime | DwellTime | ParallelReductionFactorInPlane | PartialFourier | PhaseEncodingDirection | TotalReadoutTime | key_group | FieldmapKey00 | FieldmapKey01 | NSliceTimes | FilePath | ParamGroup | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0.000415 | 90 | 3.32 | 0.1002 | 0.000003 | 2 | 1 | j- | 0.042744 | acquisition-64dir_datatype-dwi_suffix-dwi | acquisition-dwi_datatype-fmap_direction-AP_fma... | acquisition-dwi_datatype-fmap_direction-PA_fma... | 0 | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 |
1 | 0.000415 | 90 | 3.32 | 0.1002 | 0.000003 | 2 | 1 | j- | 0.042744 | acquisition-64dir_datatype-dwi_suffix-dwi | acquisition-dwi_datatype-fmap_direction-AP_fma... | acquisition-dwi_datatype-fmap_direction-PA_fma... | 0 | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 |
2 | 0.000415 | 90 | 3.32 | 0.1002 | 0.000003 | 2 | 1 | j- | 0.042744 | acquisition-64dir_datatype-dwi_suffix-dwi | acquisition-dwi_datatype-fmap_direction-AP_fma... | acquisition-dwi_datatype-fmap_direction-PA_fma... | 0 | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 |
[5]:
files_df, summary_df = bod.get_param_groups_dataframes()
[6]:
files_df
[6]:
EffectiveEchoSpacing | FlipAngle | RepetitionTime | EchoTime | DwellTime | ParallelReductionFactorInPlane | PartialFourier | PhaseEncodingDirection | TotalReadoutTime | key_group | ... | FilePath | ParamGroup | IntendedForKey00 | IntendedForKey01 | IntendedForKey02 | IntendedForKey03 | IntendedForKey04 | IntendedForKey05 | IntendedForKey06 | MultibandAccelerationFactor | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0.000415 | 90 | 3.320 | 0.10020 | 0.000003 | 2.0 | 1 | j- | 0.042744 | acquisition-64dir_datatype-dwi_suffix-dwi | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
1 | 0.000415 | 90 | 3.320 | 0.10020 | 0.000003 | 2.0 | 1 | j- | 0.042744 | acquisition-64dir_datatype-dwi_suffix-dwi | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2 | 0.000415 | 90 | 3.320 | 0.10020 | 0.000003 | 2.0 | 1 | j- | 0.042744 | acquisition-64dir_datatype-dwi_suffix-dwi | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
3 | NaN | 8 | 2.500 | 0.00315 | 0.000012 | 2.0 | 1 | NaN | NaN | acquisition-HCP_datatype-anat_suffix-T1w | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
4 | NaN | 8 | 2.500 | 0.00315 | 0.000012 | 2.0 | 1 | NaN | NaN | acquisition-HCP_datatype-anat_suffix-T1w | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5 | NaN | 8 | 2.500 | 0.00315 | 0.000012 | 2.0 | 1 | NaN | NaN | acquisition-HCP_datatype-anat_suffix-T1w | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
6 | NaN | 120 | 3.200 | 0.56500 | 0.000002 | 2.0 | 1 | NaN | NaN | acquisition-HCP_datatype-anat_suffix-T2w | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
7 | 0.000415 | 90 | 3.320 | 0.10020 | 0.000003 | 2.0 | 1 | j- | 0.042744 | acquisition-dwi_datatype-fmap_direction-AP_suf... | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | acquisition-64dir_datatype-dwi_suffix-dwi | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
8 | 0.000415 | 90 | 3.320 | 0.10020 | 0.000003 | 2.0 | 1 | j- | 0.042744 | acquisition-dwi_datatype-fmap_direction-AP_suf... | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | acquisition-64dir_datatype-dwi_suffix-dwi | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
9 | 0.000415 | 90 | 3.320 | 0.10020 | 0.000003 | 2.0 | 1 | j- | 0.042744 | acquisition-dwi_datatype-fmap_direction-AP_suf... | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | acquisition-64dir_datatype-dwi_suffix-dwi | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
10 | 0.000415 | 90 | 3.320 | 0.10020 | 0.000003 | 2.0 | 1 | j | 0.042744 | acquisition-dwi_datatype-fmap_direction-PA_suf... | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | acquisition-64dir_datatype-dwi_suffix-dwi | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
11 | 0.000415 | 90 | 3.320 | 0.10020 | 0.000003 | 2.0 | 1 | j | 0.042744 | acquisition-dwi_datatype-fmap_direction-PA_suf... | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | acquisition-64dir_datatype-dwi_suffix-dwi | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
12 | 0.000415 | 90 | 3.320 | 0.10020 | 0.000003 | 2.0 | 1 | j | 0.042744 | acquisition-dwi_datatype-fmap_direction-PA_suf... | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | acquisition-64dir_datatype-dwi_suffix-dwi | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
13 | 0.000550 | 90 | 5.301 | 0.05120 | 0.000003 | NaN | 1 | j- | 0.045650 | acquisition-fMRI_datatype-fmap_direction-AP_su... | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 0 | datatype-func_run-1_suffix-bold_task-peer | datatype-func_run-1_suffix-bold_task-rest | datatype-func_run-2_suffix-bold_task-peer | datatype-func_run-3_suffix-bold_task-peer | datatype-func_suffix-bold_task-movieTP | NaN | NaN | NaN |
14 | 0.000550 | 90 | 5.301 | 0.05120 | 0.000003 | NaN | 1 | j- | 0.045650 | acquisition-fMRI_datatype-fmap_direction-AP_su... | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | datatype-func_run-1_suffix-bold_task-peer | datatype-func_run-1_suffix-bold_task-rest | datatype-func_run-2_suffix-bold_task-peer | datatype-func_run-2_suffix-bold_task-rest | datatype-func_run-3_suffix-bold_task-peer | datatype-func_suffix-bold_task-movieDM | datatype-func_suffix-bold_task-movieTP | NaN |
15 | 0.000550 | 90 | 5.301 | 0.05120 | 0.000003 | NaN | 1 | j | 0.045650 | acquisition-fMRI_datatype-fmap_direction-PA_su... | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 0 | datatype-func_run-1_suffix-bold_task-peer | datatype-func_run-1_suffix-bold_task-rest | datatype-func_run-2_suffix-bold_task-peer | datatype-func_run-3_suffix-bold_task-peer | datatype-func_suffix-bold_task-movieTP | NaN | NaN | NaN |
16 | 0.000550 | 90 | 5.301 | 0.05120 | 0.000003 | NaN | 1 | j | 0.045650 | acquisition-fMRI_datatype-fmap_direction-PA_su... | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | datatype-func_run-1_suffix-bold_task-peer | datatype-func_run-1_suffix-bold_task-rest | datatype-func_run-2_suffix-bold_task-peer | datatype-func_run-2_suffix-bold_task-rest | datatype-func_run-3_suffix-bold_task-peer | datatype-func_suffix-bold_task-movieDM | datatype-func_suffix-bold_task-movieTP | NaN |
17 | 0.000580 | 31 | 0.800 | 0.03000 | 0.000003 | NaN | 1 | j- | 0.048141 | datatype-func_run-1_suffix-bold_task-peer | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 6.0 |
18 | 0.000580 | 31 | 0.800 | 0.03000 | 0.000003 | NaN | 1 | j- | 0.048141 | datatype-func_run-1_suffix-bold_task-peer | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 6.0 |
19 | 0.000580 | 31 | 0.800 | 0.03000 | 0.000003 | NaN | 1 | j- | 0.048141 | datatype-func_run-1_suffix-bold_task-rest | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 6.0 |
20 | 0.000580 | 31 | 0.800 | 0.03000 | 0.000003 | NaN | 1 | j- | 0.048141 | datatype-func_run-1_suffix-bold_task-rest | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 6.0 |
21 | 0.000580 | 31 | 0.800 | 0.03000 | 0.000003 | NaN | 1 | j- | 0.048141 | datatype-func_run-2_suffix-bold_task-peer | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 6.0 |
22 | 0.000580 | 31 | 0.800 | 0.03000 | 0.000003 | NaN | 1 | j- | 0.048141 | datatype-func_run-2_suffix-bold_task-peer | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 6.0 |
23 | 0.000580 | 31 | 0.800 | 0.03000 | 0.000003 | NaN | 1 | j- | 0.048141 | datatype-func_run-2_suffix-bold_task-rest | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 6.0 |
24 | 0.000580 | 31 | 0.800 | 0.03000 | 0.000003 | NaN | 1 | j- | 0.048141 | datatype-func_run-3_suffix-bold_task-peer | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 6.0 |
25 | 0.000580 | 31 | 0.800 | 0.03000 | 0.000003 | NaN | 1 | j- | 0.048141 | datatype-func_run-3_suffix-bold_task-peer | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 6.0 |
26 | 0.000580 | 31 | 0.800 | 0.03000 | 0.000003 | NaN | 1 | j- | 0.048141 | datatype-func_suffix-bold_task-movieDM | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 6.0 |
27 | 0.000580 | 31 | 0.800 | 0.03000 | 0.000003 | NaN | 1 | j- | 0.048141 | datatype-func_suffix-bold_task-movieTP | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 6.0 |
28 | 0.000580 | 31 | 0.800 | 0.03000 | 0.000003 | NaN | 1 | j- | 0.048141 | datatype-func_suffix-bold_task-movieTP | ... | /Users/mcieslak/projects/test_bids_data/HBN/su... | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 6.0 |
29 rows × 23 columns
[7]:
summary_df[["key_group", "ParamGroup", "Count"]]
[7]:
key_group | ParamGroup | Count | |
---|---|---|---|
0 | acquisition-64dir_datatype-dwi_suffix-dwi | 1 | 3 |
1 | acquisition-HCP_datatype-anat_suffix-T1w | 1 | 3 |
2 | acquisition-HCP_datatype-anat_suffix-T2w | 1 | 1 |
3 | acquisition-dwi_datatype-fmap_direction-AP_suf... | 1 | 3 |
4 | acquisition-dwi_datatype-fmap_direction-PA_suf... | 1 | 3 |
5 | acquisition-fMRI_datatype-fmap_direction-AP_su... | 0 | 1 |
6 | acquisition-fMRI_datatype-fmap_direction-AP_su... | 1 | 1 |
7 | acquisition-fMRI_datatype-fmap_direction-PA_su... | 0 | 1 |
8 | acquisition-fMRI_datatype-fmap_direction-PA_su... | 1 | 1 |
9 | datatype-func_run-1_suffix-bold_task-peer | 1 | 2 |
10 | datatype-func_run-1_suffix-bold_task-rest | 1 | 2 |
11 | datatype-func_run-2_suffix-bold_task-peer | 1 | 2 |
12 | datatype-func_run-2_suffix-bold_task-rest | 1 | 1 |
13 | datatype-func_run-3_suffix-bold_task-peer | 1 | 2 |
14 | datatype-func_suffix-bold_task-movieDM | 1 | 1 |
15 | datatype-func_suffix-bold_task-movieTP | 1 | 2 |
[ ]:
import pandas as pd
param_group_cols = list(set(df.columns.to_list()) - set(["FilePath"]))
uniques = df.drop_duplicates(param_group_cols, ignore_index=True)
print(uniques.shape)
counts = df.groupby(["key_group", "ParamGroup"]).size().reset_index(name='Count')
print(counts.shape)
params_and_counts = pd.merge(uniques, counts)
print(params_and_counts.shape)
[ ]:
[ ]:
no_paths[["key_group", "ParamGroup"]].groupby(["key_group", "ParamGroup"]).count()
[ ]:
[ ]:
[ ]:
keyparam_df.groupby(["key_group", "ParamGroup"]).size().reset_index(name='Count')
[ ]:
fname = 'sub-NDARAT581NDH/ses-HBNsiteRU/dwi/sub-NDARAT581NDH_ses-HBNsiteRU_acq-64dir_dwi.nii.gz'
[ ]:
bod.get_key_groups()
[ ]:
self = bod
[ ]:
from cubids.cubids import *
suffix = '(phase1|phasediff|epi|fieldmap)'
fmap_files = self.layout.get(suffix=suffix, regex_search=True,
extension=['.nii.gz', '.nii'])
files_to_fmaps = defaultdict(list)
print("\n".join([f.path for f in fmap_files]))
[ ]:
"""
for fmap_file in tqdm(fmap_files):
intentions = listify(fmap_file.get_metadata().get("IntendedFor"))
subject_prefix = "sub-%s/" % fmap_file.entities['subject']
for intended_for in intentions:
subject_relative_path = subject_prefix + intended_for
files_to_fmaps[subject_relative_path].append(fmap_file)
"""
fmap_file = fmap_files[0]
intentions = listify(fmap_file.get_metadata().get("IntendedFor"))
print("intentions:", intentions)
subject_prefix = "sub-%s/" % fmap_file.entities['subject']
print(subject_prefix)
[ ]:
suffix = '(phase1|phasediff|epi|fieldmap)'
fmap_files = self.layout.get(suffix=suffix, regex_search=True,
extension=['.nii.gz', '.nii'])
files_to_fmaps = defaultdict(list)
for fmap_file in tqdm(fmap_files):
intentions = listify(fmap_file.get_metadata().get("IntendedFor"))
subject_prefix = "sub-%s" % fmap_file.entities['subject']
for intended_for in intentions:
full_path = Path(self.path) / subject_prefix / intended_for
files_to_fmaps[str(full_path)].append(fmap_file)
[ ]:
for data_file, fmap_files in bod.fieldmap_lookup.items():
print(data_file[44:])
for fmap_file in fmap_files:
print(" ", fmap_file.path[44:])
[ ]:
files_to_fmaps.keys()
[ ]:
from cubids.cubids import *
files = [
'/Users/mcieslak/projects/test_bids_data/HBN/sub-NDARAT581NDH/ses-HBNsiteRU/dwi/sub-NDARAT581NDH_ses-HBNsiteRU_acq-64dir_dwi.nii.gz',
'/Users/mcieslak/projects/test_bids_data/HBN/sub-NDARRP384BVX/ses-HBNsiteRU/dwi/sub-NDARRP384BVX_ses-HBNsiteRU_acq-64dir_dwi.nii.gz']
dfs = []
fieldmap_lookup = bod.fieldmap_lookup
key_group_name = "test"
# path needs to be relative to the root with no leading prefix
for path in files:
metadata = bod.layout.get_metadata(path)
wanted_keys = metadata.keys() & IMAGING_PARAMS
example_data = {key: metadata[key] for key in wanted_keys}
example_data["key_group"] = key_group_name
# Get the fieldmaps out and add their types
print(fieldmap_lookup[path])
fieldmap_types = sorted([fmap.entities['fmap'] for fmap in fieldmap_lookup[path]])
for fmap_num, fmap_type in enumerate(fieldmap_types):
example_data['fieldmap_type%02d' % fmap_num] = fmap_type
# Expand slice timing to multiple columns
SliceTime = example_data.get('SliceTiming')
if SliceTime:
# round each slice time to one place after the decimal
for i in range(len(SliceTime)):
SliceTime[i] = round(SliceTime[i], 1)
example_data.update(
{"SliceTime%03d" % SliceNum: time for
SliceNum, time in enumerate(SliceTime)})
del example_data['SliceTiming']
dfs.append(example_data)
[ ]:
example_data