def check_input(self, layout, gui=True): """Method that checks if inputs of the diffusion pipeline are available in the datasets. Parameters ----------- layout : bids.BIDSLayout BIDSLayout object used to query gui : bool If True, display message in GUI Returns ------- valid_inputs : bool True in all inputs of the anatomical pipeline are available """ print('**** Check Inputs ****') diffusion_available = False bvecs_available = False bvals_available = False valid_inputs = False if self.global_conf.subject_session == '': subject = self.subject else: subject = "_".join( (self.subject, self.global_conf.subject_session)) dwi_file = os.path.join(self.subject_directory, 'dwi', subject + '_dwi.nii.gz') bval_file = os.path.join(self.subject_directory, 'dwi', subject + '_dwi.bval') bvec_file = os.path.join(self.subject_directory, 'dwi', subject + '_dwi.bvec') subjid = self.subject.split("-")[1] try: layout = BIDSLayout(self.base_directory) print("Valid BIDS dataset with %s subjects" % len(layout.get_subjects())) for subj in layout.get_subjects(): self.global_conf.subjects.append('sub-' + str(subj)) # self.global_conf.subjects = ['sub-'+str(subj) for subj in layout.get_subjects()] # self.global_conf.modalities = [ # str(mod) for mod in layout.get_modalities()] # mods = layout.get_modalities() types = layout.get_modalities() # print "Available modalities :" # for mod in mods: # print "-%s" % mod if self.global_conf.subject_session == '': files = layout.get(subject=subjid, suffix='dwi', extensions='.nii.gz') if len(files) > 0: dwi_file = os.path.join(files[0].dirname, files[0].filename) print(dwi_file) else: error(message="Diffusion image not found for subject %s." % subjid, title="Error", buttons=['OK', 'Cancel'], parent=None) return files = layout.get(subject=subjid, suffix='dwi', extensions='.bval') if len(files) > 0: bval_file = os.path.join(files[0].dirname, files[0].filename) print(bval_file) else: error( message="Diffusion bval image not found for subject %s." % subjid, title="Error", buttons=['OK', 'Cancel'], parent=None) return files = layout.get(subject=subjid, suffix='dwi', extensions='.bvec') if len(files) > 0: bvec_file = os.path.join(files[0].dirname, files[0].filename) print(bvec_file) else: error( message="Diffusion bvec image not found for subject %s." % subjid, title="Error", buttons=['OK', 'Cancel'], parent=None) return else: sessid = self.global_conf.subject_session.split("-")[1] files = layout.get(subject=subjid, suffix='dwi', extensions='.nii.gz', session=sessid) if len(files) > 0: dwi_file = os.path.join(files[0].dirname, files[0].filename) print(dwi_file) else: error( message= "Diffusion image not found for subject %s, session %s." % (subjid, self.global_conf.subject_session), title="Error", buttons=['OK', 'Cancel'], parent=None) return files = layout.get(subject=subjid, suffix='dwi', extensions='.bval', session=sessid) if len(files) > 0: bval_file = os.path.join(files[0].dirname, files[0].filename) print(bval_file) else: error( message= "Diffusion bval image not found for subject %s, session %s." % (subjid, self.global_conf.subject_session), title="Error", buttons=['OK', 'Cancel'], parent=None) return files = layout.get(subject=subjid, suffix='dwi', extensions='.bvec', session=sessid) if len(files) > 0: bvec_file = os.path.join(files[0].dirname, files[0].filename) print(bvec_file) else: error( message= "Diffusion bvec image not found for subject %s, session %s." % (subjid, self.global_conf.subject_session), title="Error", buttons=['OK', 'Cancel'], parent=None) return print("Looking for....") print("dwi_file : %s" % dwi_file) print("bvecs_file : %s" % bvec_file) print("bvals_file : %s" % bval_file) if os.path.isfile(dwi_file): print("DWI available") diffusion_available = True except Exception: error( message= "Invalid BIDS dataset. Please see documentation for more details.", title="Error", buttons=['OK', 'Cancel'], parent=None) return if os.path.isfile(bval_file): bvals_available = True if os.path.isfile(bvec_file): bvecs_available = True if diffusion_available: if bvals_available and bvecs_available: self.stages[ 'Diffusion'].config.diffusion_imaging_model_choices = self.diffusion_imaging_model # Copy diffusion data to derivatives / cmp / subject / dwi if self.global_conf.subject_session == '': out_dwi_file = os.path.join(self.derivatives_directory, 'cmp', self.subject, 'dwi', subject + '_dwi.nii.gz') out_bval_file = os.path.join(self.derivatives_directory, 'cmp', self.subject, 'dwi', subject + '_dwi.bval') out_bvec_file = os.path.join(self.derivatives_directory, 'cmp', self.subject, 'dwi', subject + '_dwi.bvec') else: out_dwi_file = os.path.join( self.derivatives_directory, 'cmp', self.subject, self.global_conf.subject_session, 'dwi', subject + '_dwi.nii.gz') out_bval_file = os.path.join( self.derivatives_directory, 'cmp', self.subject, self.global_conf.subject_session, 'dwi', subject + '_dwi.bval') out_bvec_file = os.path.join( self.derivatives_directory, 'cmp', self.subject, self.global_conf.subject_session, 'dwi', subject + '_dwi.bvec') if not os.path.isfile(out_dwi_file): shutil.copy(src=dwi_file, dst=out_dwi_file) if not os.path.isfile(out_bvec_file): shutil.copy(src=bvec_file, dst=out_bvec_file) if not os.path.isfile(out_bval_file): shutil.copy(src=bval_file, dst=out_bval_file) valid_inputs = True input_message = 'Inputs check finished successfully.\nDiffusion and morphological data available.' else: input_message = 'Error during inputs check.\nDiffusion bvec or bval files not available.' else: if self.global_conf.subject_session == '': input_message = 'Error during inputs check. No diffusion data available in folder ' + os.path.join( self.base_directory, self.subject, 'dwi') + '!' else: input_message = 'Error during inputs check. No diffusion data available in folder ' + os.path.join( self.base_directory, self.subject, self.global_conf.subject_session, 'dwi') + '!' if gui: # input_notification = Check_Input_Notification(message=input_message, # diffusion_imaging_model_options=diffusion_imaging_model, # diffusion_imaging_model=diffusion_imaging_model) # input_notification.configure_traits() print(input_message) self.global_conf.diffusion_imaging_model = self.diffusion_imaging_model self.stages[ 'Registration'].config.diffusion_imaging_model = self.diffusion_imaging_model self.stages[ 'Diffusion'].config.diffusion_imaging_model = self.diffusion_imaging_model else: print(input_message) self.global_conf.diffusion_imaging_model = self.diffusion_imaging_model self.stages[ 'Registration'].config.diffusion_imaging_model = self.diffusion_imaging_model self.stages[ 'Diffusion'].config.diffusion_imaging_model = self.diffusion_imaging_model if diffusion_available: valid_inputs = True else: print("Missing required inputs.") error( message= "Missing diffusion inputs. Please see documentation for more details.", title="Error", buttons=['OK', 'Cancel'], parent=None) # for stage in self.stages.values(): # if stage.enabled: # print stage.name # print stage.stage_dir # self.fill_stages_outputs() return valid_inputs
from bids import BIDSLayout bids_dataset = '/home/emdupre/Desktop/ds000007' # Change to your dataset location ! # first, we want to make sure we have a valid BIDS dataset ! # let's navigate to : # https://bids-standard.github.io/bids-validator/ layout = BIDSLayout(bids_dataset) # Let's learn a little about the data we have layout.description layout.get_modalities() layout.get_tasks()