Coverage for /builds/tms-localization/papers/tmsloc_proto/scripts/01_create_subject_structure.py: 99%

273 statements  

« prev     ^ index     » next       coverage.py v7.5.1, created at 2024-05-20 07:31 +0000

1#!/usr/bin/env python 

2 

3""" 

4Creates a template subject, i.e. the folder structure and the create_subject.py file. 

5 

6create_new_subject.py -f <path> 

7 

8-f ... path of new subject 

9""" 

10 

11import os 

12import argparse 

13import subprocess 

14 

15parser = argparse.ArgumentParser(description='Creates a new subject in path') 

16parser.add_argument('-f', '--fn_subject', help='path of new subject', required=True) 

17args = parser.parse_args() 

18 

19fn_subject = os.path.abspath(args.fn_subject) 

20subject_id = os.path.split(fn_subject)[1] 

21 

22if os.path.exists(fn_subject): 

23 print("Subject already exists... aborting") 

24 exit() 

25 

26os.makedirs(fn_subject) 

27os.makedirs(os.path.join(fn_subject, "exp")) 

28os.makedirs(os.path.join(fn_subject, "mesh")) 

29os.makedirs(os.path.join(fn_subject, "opt")) 

30os.makedirs(os.path.join(fn_subject, "mri", "0", "original", "dicom")) 

31os.makedirs(os.path.join(fn_subject, "mri", "0", "original", "nifti", "t1")) 

32os.makedirs(os.path.join(fn_subject, "mri", "0", "original", "nifti", "t2")) 

33os.makedirs(os.path.join(fn_subject, "mri", "0", "original", "nifti", "dti")) 

34os.makedirs(os.path.join(fn_subject, "results")) 

35 

36f = open(os.path.join(fn_subject, f"create_{subject_id}.py"), "w") 

37f.write("#!/usr/bin/env python\n") 

38f.write("import os\n") 

39f.write("import pynibs\n") 

40f.write("import numpy as np\n") 

41f.write("from inspect import getsourcefile\n") 

42f.write("\n") 

43f.write("subject_folder = os.path.split(os.path.abspath(getsourcefile(lambda: 0)))[0]\n") 

44f.write("\n") 

45f.write("# subject information\n") 

46f.write("###############################################################" 

47 "#########################################################\n") 

48f.write("subject_id = '{}'\n".format(subject_id)) 

49f.write("fn_subject_obj = subject_folder + f'{os.sep}{subject_id}.hdf5'\n") 

50f.write("\n") 

51f.write("# MRI information\n") 

52f.write("###############################################################" 

53 "#########################################################\n") 

54f.write("mri = [dict()]\n") 

55f.write("mri[0]['fn_mri_T1'] = subject_folder + f'{os.sep}mri{os.sep}0{os.sep}original{os.sep}nifti{os.sep}t1{os.sep}T1.nii'\n") 

56f.write("mri[0]['fn_mri_T2'] = subject_folder + f'{os.sep}mri{os.sep}0{os.sep}original{os.sep}nifti{os.sep}t2{os.sep}T2.nii'\n") 

57f.write("mri[0]['fn_mri_DTI'] = subject_folder + f'{os.sep}mri{os.sep}0{os.sep}original{os.sep}nifti{os.sep}dti{os.sep}DTI.nii'\n") 

58f.write("mri[0]['fn_mri_DTI_rev'] = subject_folder + f'{os.sep}mri{os.sep}0{os.sep}original{os.sep}nifti{os.sep}dti{os.sep}DTI_rev.nii'\n") 

59f.write("mri[0]['fn_mri_DTI_bvec'] = subject_folder + f'{os.sep}mri{os.sep}0{os.sep}original{os.sep}nifti{os.sep}dti{os.sep}DTI.bvec'\n") 

60f.write("mri[0]['fn_mri_DTI_bval'] = subject_folder + f'{os.sep}mri{os.sep}0{os.sep}original{os.sep}nifti{os.sep}dti{os.sep}DTI.bval'\n") 

61f.write("mri[0]['dti_readout_time'] = '0.0476258'\n") 

62f.write("mri[0]['dti_phase_direction'] = '-y'\n") 

63f.write("\n") 

64f.write("# Mesh information\n") 

65f.write("################################################################" 

66 "########################################################\n") 

67f.write("mesh = dict()\n") 

68f.write("# Add one dict() for each mesh. See templates below.\n") 

69f.write("# mesh['headreco_template'] = dict()\n") 

70f.write("# mesh['headreco_template']['info'] = 'headreco --v 1.0 (simnibs 3.1)'\n") 

71f.write("# mesh['headreco_template']['approach'] = 'headreco'\n") 

72f.write("# mesh['headreco_template']['mesh_folder'] = os.path.join(subject_folder, 'mesh', 'headreco_template')\n") 

73f.write("# mesh['headreco_template']['vertex_density'] = 1.0\n") 

74f.write("# mesh['headreco_template']['fn_mesh_msh'] = os.path.join(mesh['headreco_template']['mesh_folder'], " 

75 "f'{subject_id}_fixed.msh')\n") 

76f.write("# mesh['headreco_template']['fn_mesh_hdf5'] = os.path.join(mesh['headreco_template']['mesh_folder'], " 

77 "f'{subject_id}_fixed.hdf5')\n") 

78f.write("# mesh['headreco_template']['fn_tensor_vn'] = f'd2c_{subject_id}_PA{os.sep}CTI_vn_tensor.nii'\n") 

79f.write("# mesh['headreco_template']['mri_idx'] = 0\n") 

80f.write("# mesh['headreco_template']['fn_mri_conform'] = f'{subject_id}_T1fs_conform.nii.gz'\n") 

81f.write("# mesh['headreco_template']['fn_lh_wm'] = None\n") 

82f.write("# mesh['headreco_template']['fn_rh_wm'] = None\n") 

83f.write("# mesh['headreco_template']['fn_lh_gm'] = None\n") 

84f.write("# mesh['headreco_template']['fn_rh_gm'] = None\n") 

85f.write("# mesh['headreco_template']['fn_lh_gm_curv'] = None\n") 

86f.write("# mesh['headreco_template']['fn_rh_gm_curv'] = None\n") 

87f.write("# mesh['headreco_template']['fn_lh_midlayer'] = f'fs_{subject_id}{os.sep}surf{os.sep}lh.central'\n") 

88f.write("# mesh['headreco_template']['fn_rh_midlayer'] = f'fs_{subject_id}{os.sep}surf{os.sep}rh.central'\n") 

89f.write("\n") 

90f.write("# mesh['mri2mesh_template'] = dict()\n") 

91f.write("# mesh['mri2mesh_template']['info'] = 'mri2msh --numvertices 100.000 (simnibs 3.1)'\n") 

92f.write("# mesh['mri2mesh_template']['approach'] = 'mri2mesh'\n") 

93f.write("# mesh['mri2mesh_template']['mesh_folder'] = os.path.join(subject_folder, 'mesh', 'mri2mesh_template')\n") 

94f.write("# mesh['mri2mesh_template']['numvertices'] = 100000\n") 

95f.write("# mesh['mri2mesh_template']['fn_mesh_msh'] = os.path.join(mesh['mri2mesh_template']['mesh_folder'], " 

96 "f'{subject_id}_fixed.msh')\n") 

97f.write("# mesh['mri2mesh_template']['fn_mesh_hdf5'] = os.path.join(mesh['mri2mesh_template']['mesh_folder'] , " 

98 "f'{subject_id}_fixed.hdf5')\n") 

99f.write("# mesh['mri2mesh_template']['fn_tensor_vn'] = f'd2c_{subject_id}_PA{os.sep}CTI_vn_tensor.nii'\n") 

100f.write("# mesh['mri2mesh_template']['fn_mri_conform'] = f'{subject_id}_T1fs_conform.nii.gz'\n") 

101f.write("# mesh['mri2mesh_template']['mri_idx'] = 0\n") 

102f.write("# mesh['mri2mesh_template']['fn_lh_wm'] = f'fs_{subject_id}{os.sep}surf{os.sep}lh.white'\n") 

103f.write("# mesh['mri2mesh_template']['fn_rh_wm'] = f'fs_{subject_id}{os.sep}surf{os.sep}rh.white'\n") 

104f.write("# mesh['mri2mesh_template']['fn_lh_gm'] = f'fs_{subject_id}{os.sep}surf{os.sep}lh.pial'\n") 

105f.write("# mesh['mri2mesh_template']['fn_rh_gm'] = f'fs_{subject_id}{os.sep}surf{os.sep}rh.pial'\n") 

106f.write("# mesh['mri2mesh_template']['fn_lh_gm_curv'] = f'fs_{subject_id}{os.sep}surf{os.sep}lh.curv.pial'\n") 

107f.write("# mesh['mri2mesh_template']['fn_rh_gm_curv'] = f'fs_{subject_id}{os.sep}surf{os.sep}rh.curv.pial'\n") 

108f.write("# mesh['mri2mesh_template']['fn_lh_midlayer'] = None\n") 

109f.write("# mesh['mri2mesh_template']['fn_rh_midlayer'] = None\n") 

110f.write("\n") 

111 

112f.write("# mesh['headreco_refined_template'] = dict()\n") 

113f.write("# mesh['headreco_refined_template']['info'] = 'headreco --v 1.1 (simnibs 3.1)'\n") 

114f.write("# mesh['headreco_refined_template']['approach'] = 'headreco'\n") 

115f.write("# mesh['headreco_refined_template']['center'] = [-38.71, -36.91, 74.03]\n") 

116f.write("# mesh['headreco_refined_template']['radius'] = 35\n") 

117f.write("# mesh['headreco_refined_template']['element_size'] = 0.4\n") 

118f.write("# mesh['headreco_refined_template']['refine_domains'] = ['wm', 'gm', 'csf']\n") 

119f.write("# mesh['headreco_refined_template']['mesh_folder'] = os.path.join(subject_folder, 'mesh', 'hm_refined_m1')\n") 

120f.write("# mesh['headreco_refined_template']['vertex_density'] = 1.1\n") 

121f.write("# mesh['headreco_refined_template']['fn_mesh_msh'] = os.path.join(mesh['hm_refined_m1']['mesh_folder'], " 

122 "f'{subject_id}.msh')\n") 

123f.write("# mesh['headreco_refined_template']['fn_mesh_hdf5'] = os.path.join(mesh['hm_refined_m1']['mesh_folder'], " 

124 "f'{subject_id}.hdf5')\n") 

125f.write("# mesh['headreco_refined_template']['fn_tensor_vn'] = " 

126 "f'd2c_{subject_id}{os.sep}dti_results_T1space{os.sep}DTI_conf_tensor.nii.gz'\n") 

127f.write("# mesh['headreco_refined_template']['mri_idx'] = 0\n") 

128f.write("# mesh['headreco_refined_template']['fn_mri_conform'] = f'{subject_id}_T1fs_conform.nii.gz'\n") 

129f.write("# mesh['headreco_refined_template']['fn_lh_wm'] = None\n") 

130f.write("# mesh['headreco_refined_template']['fn_rh_wm'] = None\n") 

131f.write("# mesh['headreco_refined_template']['fn_lh_gm'] = None\n") 

132f.write("# mesh['headreco_refined_template']['fn_rh_gm'] = None\n") 

133f.write("# mesh['headreco_refined_template']['fn_lh_gm_curv'] = None\n") 

134f.write("# mesh['headreco_refined_template']['fn_rh_gm_curv'] = None\n") 

135f.write("# mesh['headreco_refined_template']['fn_lh_midlayer'] = f'fs_{subject_id}{os.sep}surf{os.sep}lh.central'\n") 

136f.write("# mesh['headreco_refined_template']['fn_rh_midlayer'] = f'fs_{subject_id}{os.sep}surf{os.sep}rh.central'\n") 

137f.write("\n") 

138 

139f.write("# ROI information (first index: mesh, second index: roi)\n") 

140f.write("################################################################" 

141 "########################################################\n") 

142f.write("roi = dict()\n") 

143f.write("# Add one dict() for each roi per mesh. See templates below.\n") 

144f.write("\n") 

145f.write("# roi['headreco_template'] = {'midlayer_m1s1pmd': dict()}\n") 

146f.write("# roi['headreco_template']['midlayer_m1s1pmd']['type'] = 'surface'\n") 

147f.write("# roi['headreco_template']['midlayer_m1s1pmd']['info'] = 'freesurfer PMd, M1 and somatosensory cortex'\n") 

148f.write("# roi['headreco_template']['midlayer_m1s1pmd']['gm_surf_fname'] = mesh['hm']['fn_lh_gm']\n") 

149f.write("# roi['headreco_template']['midlayer_m1s1pmd']['wm_surf_fname'] = mesh['hm']['fn_lh_wm']\n") 

150f.write("# roi['headreco_template']['midlayer_m1s1pmd']['midlayer_surf_fname'] = mesh['hm']['fn_lh_midlayer']\n") 

151f.write("# roi['headreco_template']['midlayer_m1s1pmd']['delta'] = 0.5\n") 

152f.write("# roi['headreco_template']['midlayer_m1s1pmd']['refine'] = False\n") 

153f.write("# roi['headreco_template']['midlayer_m1s1pmd']['X_ROI'] = None\n") 

154f.write("# roi['headreco_template']['midlayer_m1s1pmd']['Y_ROI'] = None\n") 

155f.write("# roi['headreco_template']['midlayer_m1s1pmd']['Z_ROI'] = None\n") 

156f.write("# roi['headreco_template']['midlayer_m1s1pmd']['layer'] = 3\n") 

157f.write("# roi['headreco_template']['midlayer_m1s1pmd']['fn_mask'] = " 

158 "f'roi{os.sep}midlayer_m1s1pmd{os.sep}mask_{subject_id}m1pmdss.mgh'\n") 

159f.write("# roi['headreco_template']['midlayer_m1s1pmd']['fn_mask_avg'] = os.path.join(os.path.split(subject_folder)[0],\n") 

160f.write("# 'roi', 'lefthandknob_M1S1PMd.overlay')\n") 

161f.write("# roi['headreco_template']['midlayer_m1s1pmd']['hemisphere'] = 'lh'\n") 

162f.write("\n") 

163 

164f.write("# roi['headreco_refined_template'] = {'midlayer_m1s1pmd': dict()}\n") 

165f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['type'] = 'surface'\n") 

166f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['info'] = " 

167 "'freesurfer PMd, M1 and somatosensory cortex'\n") 

168f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['gm_surf_fname'] = mesh['hm_refined_m1']['fn_lh_gm']\n") 

169f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['wm_surf_fname'] = mesh['hm_refined_m1']['fn_lh_wm']\n") 

170f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['midlayer_surf_fname'] = " 

171 "mesh['hm_refined_m1']['fn_lh_midlayer']\n") 

172f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['delta'] = 0.5\n") 

173f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['refine'] = False\n") 

174f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['X_ROI'] = None\n") 

175f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['Y_ROI'] = None\n") 

176f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['Z_ROI'] = None\n") 

177f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['layer'] = 3\n") 

178f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['fn_mask'] = " 

179 "f'roi{os.sep}midlayer_m1s1pmd{os.sep}{subject_id}_lefthandknob_M1S1PMd.mgh'\n") 

180f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['fn_mask_avg'] = " 

181 "os.path.join(os.path.split(subject_folder)[0], 'roi', 'lefthandknob_M1S1PMd.overlay')\n") 

182f.write("# roi['headreco_refined_template']['midlayer_m1s1pmd']['hemisphere'] = 'lh'\n") 

183f.write("\n") 

184 

185f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['type'] = 'surface'\n") 

186f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['info'] = 'freesurfer PMd, M1 and somatosensory cortex'\n") 

187f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['gm_surf_fname'] = mesh['mri2mesh_template']['fn_lh_gm']\n") 

188f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['wm_surf_fname'] = mesh['mri2mesh_template']['fn_lh_wm']\n") 

189f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['midlayer_surf_fname'] = " 

190 "mesh['mri2mesh_template']['fn_lh_midlayer']\n") 

191f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['refine'] = False\n") 

192f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['delta'] = 0.5\n") 

193f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['X_ROI'] = None\n") 

194f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['Y_ROI'] = None\n") 

195f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['Z_ROI'] = None\n") 

196f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['layer'] = 3\n") 

197f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['fn_mask'] = " 

198 "f'roi{os.sep}mri2mesh_template{os.sep}mask_{subject_id}m1pmdss.mgh'\n") 

199f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['fn_mask_avg'] = " 

200 "'{os.sep}data{os.sep}pt_01756{os.sep}masks{os.sep}lefthandknob_M1S1PMd.overlay'\n") 

201f.write("# roi['mri2mesh_template']['midlayer_m1s1pmd']['hemisphere'] = 'lh'\n") 

202f.write("\n") 

203 

204f.write("# Experiment information\n") 

205f.write("###############################################################" 

206 "#########################################################\n") 

207f.write("exp = dict()\n") 

208f.write("# Add one dict() for each experiment. See templates below.\n") 

209f.write("\n") 

210f.write("# exp['TMS_Localite_template'] = dict()\n") 

211f.write("# exp['TMS_Localite_template']['info'] = ['TMS-MEP template Localite (MPI)']\n") 

212f.write("# exp['TMS_Localite_template']['date'] = ['XX{os.sep}XX{os.sep}20XX']\n") 

213f.write("# exp['TMS_Localite_template']['nnav_system'] = 'Localite'\n") 

214f.write("# exp['TMS_Localite_template']['fn_tms_nav'] = [[subject_folder + '...xml', subject_folder + '...xml']]\n") 

215f.write("# exp['TMS_Localite_template']['fn_data'] = [[subject_folder + '{os.sep}exp{os.sep}0{os.sep}mep{os.sep}...cfs']]\n") 

216f.write("# exp['TMS_Localite_template']['fn_intensity'] = None\n") 

217f.write("# exp['TMS_Localite_template']['mep_onsets'] = [[0]]\n") 

218f.write("# exp['TMS_Localite_template']['fn_exp_csv'] = [subject_folder + '{os.sep}exp{os.sep}0{os.sep}experiment.csv']\n") 

219f.write("# exp['TMS_Localite_template']['fn_exp_hdf5'] = [subject_folder + '{os.sep}exp{os.sep}0{os.sep}experiment.hdf5']\n") 

220f.write("# exp['TMS_Localite_template']['fn_coil'] = [['...{os.sep}MagStim_Alpha_Coil_70mm_Fig8.nii.gz']]\n") 

221f.write("# exp['TMS_Localite_template']['fn_mri_nii'] = [[subject_folder + '{os.sep}exp{os.sep}0{os.sep}..._conform.nii']]\n") 

222f.write("# exp['TMS_Localite_template']['cond'] = [['']]\n") 

223f.write("# exp['TMS_Localite_template']['channels'] = [['FDI', 'ADM', 'APB']]") 

224f.write("# exp['TMS_Localite_template']['tms_pulse_time'] = None\n") 

225f.write("# exp['TMS_Localite_template']['experimenter'] = ''\n") 

226f.write("# exp['TMS_Localite_template']['mep_fit_info'] = ['']\n") 

227f.write("# exp['TMS_Localite_template']['incidents'] = ['']\n") 

228f.write("# exp['TMS_Localite_template']['postproc'] = [dict()]\n") 

229f.write("# exp['TMS_Localite_template']['postproc'][0]['info'] = ' '\n") 

230f.write("# exp['TMS_Localite_template']['postproc'][0]['cmd'] = ' '\n") 

231f.write("\n") 

232f.write("# exp['TMS_ANT_template'] = dict()\n") 

233f.write("# exp['TMS_ANT_template']['info'] = ['TMS-MEP-EEG template (ANT)']\n") 

234f.write("# exp['TMS_ANT_template']['date'] = ['XX{os.sep}XX{os.sep}20XX']\n") 

235f.write("# exp['TMS_ANT_template']['nnav_system'] = 'Visor'\n") 

236f.write("# exp['TMS_ANT_template']['fn_data'] = [[subject_folder + '{os.sep}exp{os.sep}2{os.sep}...cnt']]\n") 

237f.write("# exp['TMS_ANT_template']['fn_exp_hdf5'] = [subject_folder + '{os.sep}exp{os.sep}2{os.sep}experiment.hdf5']\n") 

238f.write("# exp['TMS_ANT_template']['fn_coil'] = [['...{os.sep}MagStim_Alpha_Coil_70mm_Fig8.nii.gz']]\n") 

239f.write("# exp['TMS_ANT_template']['fn_mri_nii'] = [[subject_folder + '{os.sep}exp{os.sep}2{os.sep}..._conform.nii']]\n") 

240f.write("# exp['TMS_ANT_template']['fn_visor_cnt'] = [subject_folder + '{os.sep}exp{os.sep}2{os.sep}...pos.cnt']\n") 

241f.write("# exp['TMS_ANT_template']['fn_visor_calibration'] = [subject_folder + '{os.sep}exp{os.sep}2{os.sep}...calibration.xml']\n") 

242f.write("# exp['TMS_ANT_template']['fn_eeg_cnt'] = [subject_folder + '{os.sep}exp{os.sep}2{os.sep}eeg{os.sep}...cnt']\n") 

243f.write("# exp['TMS_ANT_template']['eeg_channels'] = ['all']\n") 

244f.write("# exp['TMS_ANT_template']['fn_emg_cnt'] = [subject_folder + '{os.sep}exp{os.sep}2{os.sep}emg{os.sep}...cnt']\n") 

245f.write("# exp['TMS_ANT_template']['emg_channels'] = [0]\n") 

246f.write("# exp['TMS_ANT_template']['emg_max_duration'] = [10]\n") 

247f.write("# exp['TMS_ANT_template']['eeg_max_duration'] = [10]\n") 

248f.write("# exp['TMS_ANT_template']['emg_trigger_value'] = ['4']\n") 

249f.write("# exp['TMS_ANT_template']['eeg_trigger_value'] = ['1']\n") 

250f.write("# exp['TMS_ANT_template']['cond'] = [['M1_random']]\n") 

251f.write("# exp['TMS_ANT_template']['tms_pulse_time'] = None\n") 

252f.write("# exp['TMS_ANT_template']['experimenter'] = ' '\n") 

253f.write("# exp['TMS_ANT_template']['mep_fit_info'] = [' ']\n") 

254f.write("# exp['TMS_ANT_template']['incidents'] = [' ']\n") 

255f.write("# exp['TMS_ANT_template']['fiducal_corr'] = [[0,0,0]] # x,y,z in mm\n") 

256f.write("\n") 

257f.write("# add plot settings\n") 

258f.write("################################################################" 

259 "########################################################\n") 

260f.write("ps = []\n") 

261f.write("\n") 

262f.write("ps.append(pynibs.create_plot_settings_dict(plotfunction_type='surface_vector_plot'))\n") 

263f.write("ps[0]['info'] = ' '\n") 

264f.write("ps[0]['plot_function'] = 'surface_vector_plot'\n") 

265f.write("ps[0]['fname_in'] = '..._data.xdmf'\n") 

266f.write("ps[0]['fname_png'] = '...png'\n") 

267f.write("ps[0]['png_resolution'] = 1.0\n") 

268f.write("ps[0]['quantity'] = [' ']\n") 

269f.write("ps[0]['vlabels'] = None\n") 

270f.write("ps[0]['vscales'] = None\n") 

271f.write("ps[0]['datarange'] = [None, None]\n") 

272f.write("ps[0]['domain_label'] = 'tissue_type'\n") 

273f.write("ps[0]['domain_IDs'] = 0\n") 

274f.write("ps[0]['colorbar_label'] = ' '\n") 

275f.write("ps[0]['colorbar_position'] = [0.45, -0.05]\n") 

276f.write("ps[0]['colorbar_orientation'] = 'Horizontal'\n") 

277f.write("ps[0]['colorbar_aspectratio'] = 20\n") 

278f.write("ps[0]['colorbar_titlefontsize'] = 12\n") 

279f.write("ps[0]['colorbar_labelfontsize'] = 12\n") 

280f.write("ps[0]['colorbar_labelformat'] = '%-#6.1f'\n") 

281f.write("ps[0]['colorbar_numberoflabels'] = 5\n") 

282f.write("ps[0]['colorbar_labelcolor'] = [0, 0, 0]\n") 

283f.write("ps[0]['view'] = [[-332.040630013204, -16.8948837495393, 256.721941018442],\n") 

284f.write(" [-35.3111635316966, -13.6999528376981, 36.4196465112876],\n") 

285f.write(" [0.588834647614276, -0.167617710066906, 0.790682022712606],\n") 

286f.write(" [30, 0, 0]]\n") 

287f.write("ps[0]['interpolate'] = True\n") 

288f.write("ps[0]['edges'] = False\n") 

289f.write("ps[0]['axes'] = False\n") 

290f.write("ps[0]['colormap'] = 'Rainbow Blended White'\n") 

291f.write("ps[0]['opacitymap'] = None\n") 

292f.write("ps[0]['vscale_mode'] = ['off']\n") 

293f.write("ps[0]['vector_mode'] = {'Every Nth Point': 10}\n") 

294f.write("ps[0]['vcolor'] = None\n") 

295f.write("ps[0]['background_color'] = np.array([1, 1, 1])\n") 

296f.write("ps[0]['viewsize'] = np.array([1000, 1000])\n") 

297f.write("\n") 

298f.write("# save subject information in .hdf5 file\n") 

299f.write("###############################################################" 

300 "#########################################################\n") 

301f.write("pynibs.save_subject_hdf5(fname=fn_subject_obj,\n") 

302f.write(" mri_dict=mri,\n") 

303f.write(" mesh_dict=mesh,\n") 

304f.write(" roi_dict=roi,\n") 

305f.write(" exp_dict=exp,\n") 

306f.write(" ps_dict=ps,\n") 

307f.write(" subject_id=subject_id,\n") 

308f.write(" subject_folder=subject_folder)\n") 

309f.write("\n") 

310f.write("print(f'Created subject .hdf5 file: {fn_subject_obj}')\n") 

311f.close() 

312 

313fn = os.path.join(fn_subject, f'create_{subject_id}.py') 

314print(f"Created subject info file: {fn}\n. Edit this file to your needs and rerun 'python {fn}") 

315subprocess.Popen(f"python {fn}", shell=True) 

316