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
« prev ^ index » next coverage.py v7.5.1, created at 2024-05-20 07:31 +0000
1#!/usr/bin/env python
3"""
4Creates a template subject, i.e. the folder structure and the create_subject.py file.
6create_new_subject.py -f <path>
8-f ... path of new subject
9"""
11import os
12import argparse
13import subprocess
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()
19fn_subject = os.path.abspath(args.fn_subject)
20subject_id = os.path.split(fn_subject)[1]
22if os.path.exists(fn_subject):
23 print("Subject already exists... aborting")
24 exit()
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"))
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")
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")
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")
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")
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")
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()
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)