Coverage for data/spheremodel/create_subject_spheremodel.py: 100%

105 statements  

« prev     ^ index     » next       coverage.py v7.5.1, created at 2024-05-17 07: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 = 'spheremodel' 

14fn_subject_obj = subject_folder + '/spheremodel.hdf5' 

15 

16# mri information 

17######################################################################################################################## 

18mri = [dict()] 

19mri[0]['fn_mri_T1'] = subject_folder + '/mri/0/T1_sphere.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 = '02_make_mesh_from_mri_simnibs4' 

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[mesh_id] = mesh_dict 

53 

54mesh_id = '03_refine_mesh' 

55mesh_dict = dict() 

56mesh_dict['info'] = 'charm --v 1.0 (simnibs 4.0 beta)' 

57mesh_dict['approach'] = 'charm' 

58mesh_dict['mesh_folder'] = os.path.join(subject_folder, 'mesh', mesh_id) 

59mesh_dict['vertex_density'] = None 

60mesh_dict['fn_mesh_msh'] = os.path.join(mesh_dict['mesh_folder'], f'm2m_{subject_id}', f'{subject_id}.msh') 

61mesh_dict['fn_mesh_hdf5'] = os.path.join(mesh_dict['mesh_folder'], f'm2m_{subject_id}', f'{subject_id}.hdf5') 

62mesh_dict['fn_tensor_vn'] = None 

63mesh_dict['mri_idx'] = 0 

64mesh_dict['fn_mri_conform'] = f"m2m_{subject_id}/T1.nii.gz" 

65mesh_dict['fn_lh_wm'] = None 

66mesh_dict['fn_rh_wm'] = None 

67mesh_dict['fn_lh_gm'] = None 

68mesh_dict['fn_rh_gm'] = None 

69mesh_dict['fn_lh_gm_curv'] = None 

70mesh_dict['fn_rh_gm_curv'] = None 

71mesh_dict['fn_lh_midlayer'] = f'm2m_{subject_id}/surfaces/lh.central.gii' 

72mesh_dict['fn_rh_midlayer'] = f'm2m_{subject_id}/surfaces/rh.central.gii' 

73mesh_dict['smooth_skin'] = .8 

74mesh_dict['refinement_roi'] = 'midlayer_m1s1pmd' 

75mesh_dict['refinemement_element_size'] = 1 

76mesh[mesh_id] = mesh_dict 

77 

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

79######################################################################################################################## 

80roi = {} 

81 

82# create the same roi for each mesh 

83for mesh_id in mesh.keys(): 

84 roi[mesh_id] = {} 

85 roi[mesh_id]['midlayer_m1s1pmd'] = {} 

86 roi[mesh_id]['midlayer_m1s1pmd']['type'] = 'surface' 

87 roi[mesh_id]['midlayer_m1s1pmd']['info'] = 'freesurfer PMd, M1 and somatosensory cortex' 

88 roi[mesh_id]['midlayer_m1s1pmd']['gm_surf_fname'] = mesh[mesh_id]['fn_lh_gm'] 

89 roi[mesh_id]['midlayer_m1s1pmd']['wm_surf_fname'] = mesh[mesh_id]['fn_lh_wm'] 

90 roi[mesh_id]['midlayer_m1s1pmd']['midlayer_surf_fname'] = mesh[mesh_id]['fn_lh_midlayer'] 

91 roi[mesh_id]['midlayer_m1s1pmd']['refine'] = False 

92 roi[mesh_id]['midlayer_m1s1pmd']['delta'] = 0.5 

93 roi[mesh_id]['midlayer_m1s1pmd']['X_ROI'] = None 

94 roi[mesh_id]['midlayer_m1s1pmd']['Y_ROI'] = None 

95 roi[mesh_id]['midlayer_m1s1pmd']['Z_ROI'] = None 

96 roi[mesh_id]['midlayer_m1s1pmd']['layer'] = 3 

97 roi[mesh_id]['midlayer_m1s1pmd']['fn_mask'] = f"roi/midlayer_m1s1pmd/mask_{subject_id}m1pmdss.mgh" 

98 roi[mesh_id]['midlayer_m1s1pmd']['fn_mask_avg'] = '/data/pt_01756/masks/lefthandknob_M1S1PMd.overlay' 

99 roi[mesh_id]['midlayer_m1s1pmd']['hemisphere'] = "lh" 

100 

101# experiment information 

102######################################################################################################################## 

103exp = dict() 

104exp["reg_isi_05"] = dict() 

105exp["reg_isi_05"]['info'] = ['TMS-MEP M1 Regression study (random sampling), ISI=5'] 

106exp["reg_isi_05"]['date'] = ['09/04/2021'] 

107exp["reg_isi_05"]['nnav_system'] = 'Localite' 

108exp["reg_isi_05"]['fn_tms_nav'] = [[ 

109 f'{subject_folder}/exp/reg_isi_05/tms_navigator/Claudia_20210401_15484.08_68a4e7d6/Sessions' 

110 f'/Session_20210409134021231/TMSTrigger/TriggerMarkers_Coil1_20210409170817799.xml', 

111 '']] 

112exp["reg_isi_05"]['fn_data'] = [[f'{subject_folder}/exp/reg_isi_05/mep/tms_mapping_210409_000.mat']] 

113exp["reg_isi_05"]['fn_intensity'] = None 

114exp["reg_isi_05"]['mep_onsets'] = [[0]] 

115exp["reg_isi_05"]['fn_exp_csv'] = [f'{subject_folder}/exp/reg_isi_05/experiment.csv'] 

116exp["reg_isi_05"]['fn_exp_hdf5'] = [f'{subject_folder}/exp/reg_isi_05/experiment.hdf5'] 

117exp["reg_isi_05"]['fn_coil'] = [['/data/pt_01756/coils/Magventure MCF-B65/Medtronic_MCF_B65_REF.nii.gz']] 

118exp["reg_isi_05"]['fn_mri_nii'] = [[ 

119 f'{subject_folder}/exp/reg_isi_05/tms_navigator/Claudia_20210401_15484.08_68a4e7d6/BinData/NIFTI' 

120 f'/15484.08_T1fs_conform.nii']] 

121exp["reg_isi_05"]['cond'] = [[""]] 

122exp["reg_isi_05"]['channels'] = ["FDI", "ADM", "APB"] 

123exp["reg_isi_05"]['tms_pulse_time'] = 0.3 

124exp["reg_isi_05"]['experimenter'] = 'Konstantin Weise' 

125exp["reg_isi_05"]['mep_fit_info'] = [""] 

126exp["reg_isi_05"]['incidents'] = [] 

127exp["reg_isi_05"]['postproc'] = [dict()] 

128exp["reg_isi_05"]['postproc'][0]['info'] = 'None' 

129exp["reg_isi_05"]['postproc'][0]['cmd'] = ' ' 

130 

131# # add plot settings for c=1/dE of |E| (MEP vs E shift) 21/06/2018 

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

133ps = None 

134# save subject information in hdf5 file 

135pynibs.save_subject(fname=fn_subject_obj, 

136 mri_dict=mri, 

137 mesh_dict=mesh, 

138 roi_dict=roi, 

139 exp_dict=exp, 

140 ps_dict=ps, 

141 subject_id=subject_id, 

142 subject_folder=subject_folder, 

143 verbose=False) 

144 

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