Coverage for data/subjectX/create_subject_subjectX.py: 100%
155 statements
« prev ^ index » next coverage.py v7.4.3, created at 2024-03-12 08:31 +0000
« prev ^ index » next coverage.py v7.4.3, created at 2024-03-12 08:31 +0000
1import pynibs
2import copy
3import numpy as np
5from inspect import getsourcefile
6import os
8# path of create_subject_XXXXX.py file (has to be in subjects root directoy
9subject_folder = os.path.split(os.path.abspath(getsourcefile(lambda: 0)))[0]
11# subject information
12########################################################################################################################
13subject_id = 'subjectX'
14fn_subject_obj = subject_folder + '/subjectX.hdf5'
16# mri information
17########################################################################################################################
18mri = [dict()]
19mri[0]['fn_mri_T1'] = subject_folder + '/mri/0/T1_deface.nii.gz'
20mri[0]['fn_mri_T2'] = None
21mri[0]['fn_mri_DTI'] = None
22mri[0]['fn_mri_DTI_rev'] = None
23mri[0]['fn_mri_DTI_bvec'] = None
24mri[0]['fn_mri_DTI_bval'] = None
25mri[0]['dti_readout_time'] = None
26mri[0]['dti_phase_direction'] = None
28# mesh information
29########################################################################################################################
30mesh = dict()
32mesh_id = '05_merge_exp_data'
33mesh_dict = dict()
34mesh_dict['info'] = 'charm --v 1.0 (simnibs 4.0 beta)'
35mesh_dict['approach'] = 'charm'
36mesh_dict['mesh_folder'] = os.path.join(subject_folder, 'mesh', mesh_id)
37mesh_dict['vertex_density'] = None
38mesh_dict['fn_mesh_msh'] = os.path.join(mesh_dict['mesh_folder'], f'm2m_{subject_id}', f'{subject_id}.msh')
39mesh_dict['fn_mesh_hdf5'] = os.path.join(mesh_dict['mesh_folder'], f'm2m_{subject_id}', f'{subject_id}.hdf5')
40mesh_dict['fn_tensor_vn'] = None
41mesh_dict['mri_idx'] = 0
42mesh_dict['fn_mri_conform'] = f"m2m_{subject_id}/T1.nii.gz"
43mesh_dict['fn_lh_wm'] = None
44mesh_dict['fn_rh_wm'] = None
45mesh_dict['fn_lh_gm'] = None
46mesh_dict['fn_rh_gm'] = None
47mesh_dict['fn_lh_gm_curv'] = None
48mesh_dict['fn_rh_gm_curv'] = None
49mesh_dict['fn_lh_midlayer'] = f'm2m_{subject_id}/surfaces/lh.central.gii'
50mesh_dict['fn_rh_midlayer'] = f'm2m_{subject_id}/surfaces/rh.central.gii'
51mesh_dict['smooth_skin'] = .8
52mesh_dict['refinement_roi'] = 'midlayer_m1s1pmd'
53mesh_dict['refinemement_element_size'] = 1
54mesh[mesh_id] = mesh_dict
56mesh_id = '06_calc_e'
57mesh_dict = dict()
58mesh_dict['info'] = 'charm --v 1.0 (simnibs 4.0 beta)'
59mesh_dict['approach'] = 'charm'
60mesh_dict['mesh_folder'] = os.path.join(subject_folder, 'mesh', mesh_id)
61mesh_dict['vertex_density'] = None
62mesh_dict['fn_mesh_msh'] = os.path.join(mesh_dict['mesh_folder'], f'm2m_{subject_id}', f'{subject_id}.msh')
63mesh_dict['fn_mesh_hdf5'] = os.path.join(mesh_dict['mesh_folder'], f'm2m_{subject_id}', f'{subject_id}.hdf5')
64mesh_dict['fn_tensor_vn'] = None
65mesh_dict['mri_idx'] = 0
66mesh_dict['fn_mri_conform'] = f"m2m_{subject_id}/T1.nii.gz"
67mesh_dict['fn_lh_wm'] = None
68mesh_dict['fn_rh_wm'] = None
69mesh_dict['fn_lh_gm'] = None
70mesh_dict['fn_rh_gm'] = None
71mesh_dict['fn_lh_gm_curv'] = None
72mesh_dict['fn_rh_gm_curv'] = None
73mesh_dict['fn_lh_midlayer'] = f'm2m_{subject_id}/surfaces/lh.central.gii'
74mesh_dict['fn_rh_midlayer'] = f'm2m_{subject_id}/surfaces/rh.central.gii'
75mesh_dict['smooth_skin'] = .8
76mesh_dict['refinement_roi'] = 'midlayer_m1s1pmd'
77mesh_dict['refinemement_element_size'] = 1
78mesh[mesh_id] = mesh_dict
80mesh_id = '07_calc_r'
81mesh_dict = dict()
82mesh_dict['info'] = 'charm --v 1.0 (simnibs 4.0 beta)'
83mesh_dict['approach'] = 'charm'
84mesh_dict['mesh_folder'] = os.path.join(subject_folder, 'mesh', mesh_id)
85mesh_dict['vertex_density'] = None
86mesh_dict['fn_mesh_msh'] = os.path.join(mesh_dict['mesh_folder'], f'm2m_{subject_id}', f'{subject_id}.msh')
87mesh_dict['fn_mesh_hdf5'] = os.path.join(mesh_dict['mesh_folder'], f'm2m_{subject_id}', f'{subject_id}.hdf5')
88mesh_dict['fn_tensor_vn'] = None
89mesh_dict['mri_idx'] = 0
90mesh_dict['fn_mri_conform'] = f"m2m_{subject_id}/T1.nii.gz"
91mesh_dict['fn_lh_wm'] = None
92mesh_dict['fn_rh_wm'] = None
93mesh_dict['fn_lh_gm'] = None
94mesh_dict['fn_rh_gm'] = None
95mesh_dict['fn_lh_gm_curv'] = None
96mesh_dict['fn_rh_gm_curv'] = None
97mesh_dict['fn_lh_midlayer'] = f'm2m_{subject_id}/surfaces/lh.central.gii'
98mesh_dict['fn_rh_midlayer'] = f'm2m_{subject_id}/surfaces/rh.central.gii'
99mesh_dict['smooth_skin'] = .8
100mesh_dict['refinement_roi'] = 'midlayer_m1s1pmd'
101mesh_dict['refinemement_element_size'] = 1
102mesh[mesh_id] = mesh_dict
104mesh_id = '08_calc_opt_coil_pos'
105mesh_dict = dict()
106mesh_dict['info'] = 'charm --v 1.0 (simnibs 4.0 beta)'
107mesh_dict['approach'] = 'charm'
108mesh_dict['mesh_folder'] = os.path.join(subject_folder, 'mesh', mesh_id)
109mesh_dict['vertex_density'] = None
110mesh_dict['fn_mesh_msh'] = os.path.join(mesh_dict['mesh_folder'], f'm2m_{subject_id}', f'{subject_id}.msh')
111mesh_dict['fn_mesh_hdf5'] = os.path.join(mesh_dict['mesh_folder'], f'm2m_{subject_id}', f'{subject_id}.hdf5')
112mesh_dict['fn_tensor_vn'] = None
113mesh_dict['mri_idx'] = 0
114mesh_dict['fn_mri_conform'] = f"m2m_{subject_id}/T1.nii.gz"
115mesh_dict['fn_lh_wm'] = None
116mesh_dict['fn_rh_wm'] = None
117mesh_dict['fn_lh_gm'] = None
118mesh_dict['fn_rh_gm'] = None
119mesh_dict['fn_lh_gm_curv'] = None
120mesh_dict['fn_rh_gm_curv'] = None
121mesh_dict['fn_lh_midlayer'] = f'm2m_{subject_id}/surfaces/lh.central.gii'
122mesh_dict['fn_rh_midlayer'] = f'm2m_{subject_id}/surfaces/rh.central.gii'
123mesh_dict['smooth_skin'] = .8
124mesh_dict['refinement_roi'] = 'midlayer_m1s1pmd'
125mesh_dict['refinemement_element_size'] = 1
126mesh[mesh_id] = mesh_dict
128mesh_id = '09_estimate_rmt_from_data'
129mesh[mesh_id] = mesh_dict.copy()
131# roi information (first index: mesh, second index: roi)
132########################################################################################################################
133roi = {}
135# create the same roi for each mesh
136for mesh_id in mesh.keys():
137 roi[mesh_id] = {}
138 roi[mesh_id]['midlayer_m1s1pmd'] = {}
139 roi[mesh_id]['midlayer_m1s1pmd']['type'] = 'surface'
140 roi[mesh_id]['midlayer_m1s1pmd']['info'] = 'freesurfer PMd, M1 and somatosensory cortex'
141 roi[mesh_id]['midlayer_m1s1pmd']['gm_surf_fname'] = mesh[mesh_id]['fn_lh_gm']
142 roi[mesh_id]['midlayer_m1s1pmd']['wm_surf_fname'] = mesh[mesh_id]['fn_lh_wm']
143 roi[mesh_id]['midlayer_m1s1pmd']['midlayer_surf_fname'] = mesh[mesh_id]['fn_lh_midlayer']
144 roi[mesh_id]['midlayer_m1s1pmd']['refine'] = False
145 roi[mesh_id]['midlayer_m1s1pmd']['delta'] = 0.5
146 roi[mesh_id]['midlayer_m1s1pmd']['X_ROI'] = None
147 roi[mesh_id]['midlayer_m1s1pmd']['Y_ROI'] = None
148 roi[mesh_id]['midlayer_m1s1pmd']['Z_ROI'] = None
149 roi[mesh_id]['midlayer_m1s1pmd']['layer'] = 3
150 roi[mesh_id]['midlayer_m1s1pmd']['fn_mask'] = f"roi/midlayer_m1s1pmd/mask_{subject_id}m1pmdss.mgh"
151 roi[mesh_id]['midlayer_m1s1pmd']['fn_mask_avg'] = '/data/pt_01756/masks/lefthandknob_M1S1PMd.overlay'
152 roi[mesh_id]['midlayer_m1s1pmd']['hemisphere'] = "lh"
154# experiment information
155########################################################################################################################
156exp = dict()
157exp["reg_isi_05"] = dict()
158exp["reg_isi_05"]['info'] = ['TMS-MEP M1 Regression study (random sampling), ISI=5']
159exp["reg_isi_05"]['date'] = ['09/04/2021']
160exp["reg_isi_05"]['nnav_system'] = 'Localite'
161exp["reg_isi_05"]['fn_tms_nav'] = [[
162 f'{subject_folder}/exp/reg_isi_05/tms_navigator/subjectX/Sessions'
163 f'/Session_20210409134021231/TMSTrigger/TriggerMarkers_Coil1_20210409170817799.xml',
164 '']]
165exp["reg_isi_05"]['fn_data'] = [[f'{subject_folder}/exp/reg_isi_05/mep/tms_mapping_210409_001.mat']]
166exp["reg_isi_05"]['fn_intensity'] = None
167exp["reg_isi_05"]['mep_onsets'] = [[0]]
168exp["reg_isi_05"]['fn_exp_csv'] = [f'{subject_folder}/exp/reg_isi_05/experiment.csv']
169exp["reg_isi_05"]['fn_exp_hdf5'] = [f'{subject_folder}/exp/reg_isi_05/experiment.hdf5']
170exp["reg_isi_05"]['fn_coil'] = [[f'{subject_folder}/../coils/Medtronic_MCF_B65_REF.nii.gz']]
171exp["reg_isi_05"]['fn_mri_nii'] = [[
172 f'{subject_folder}/exp/reg_isi_05/tms_navigator/subjectX/BinData/NIFTI/T1_deface.nii.gz']]
173exp["reg_isi_05"]['cond'] = [[""]]
174exp["reg_isi_05"]['channels'] = ["FDI", "ADM", "APB"]
175exp["reg_isi_05"]['tms_pulse_time'] = 0.3
176exp["reg_isi_05"]['experimenter'] = 'Konstantin Weise'
177exp["reg_isi_05"]['mep_fit_info'] = [""]
178exp["reg_isi_05"]['incidents'] = []
179exp["reg_isi_05"]['postproc'] = [dict()]
180exp["reg_isi_05"]['postproc'][0]['info'] = 'None'
181exp["reg_isi_05"]['postproc'][0]['cmd'] = ' '
183# # add plot settings for c=1/dE of |E| (MEP vs E shift) 21/06/2018
184# ######################################################################################################################
185ps = None
186# save subject information in hdf5 file
187pynibs.save_subject(fname=fn_subject_obj,
188 mri_dict=mri,
189 mesh_dict=mesh,
190 roi_dict=roi,
191 exp_dict=exp,
192 ps_dict=ps,
193 subject_id=subject_id,
194 subject_folder=subject_folder,
195 verbose=False)
197print(f'Created subject .hdf5 file: {fn_subject_obj}')