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

1import pynibs 

2import copy 

3import numpy as np 

4 

5from inspect import getsourcefile 

6import os 

7 

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] 

10 

11# subject information 

12######################################################################################################################## 

13subject_id = 'subjectX' 

14fn_subject_obj = subject_folder + '/subjectX.hdf5' 

15 

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 

27 

28# mesh information 

29######################################################################################################################## 

30mesh = dict() 

31 

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 

55 

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 

79 

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 

103 

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 

127 

128mesh_id = '09_estimate_rmt_from_data' 

129mesh[mesh_id] = mesh_dict.copy() 

130 

131# roi information (first index: mesh, second index: roi) 

132######################################################################################################################## 

133roi = {} 

134 

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" 

153 

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'] = ' ' 

182 

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) 

196 

197print(f'Created subject .hdf5 file: {fn_subject_obj}')