def find_data(self, subject_ids=None, visit_ids=None, **kwargs):
        """
        Find all data within a repository, registering filesets, fields and
        provenance with the found_fileset, found_field and found_provenance
        methods, respectively

        Parameters
        ----------
        subject_ids : list(str)
            List of subject IDs with which to filter the tree with. If
            None all are returned
        visit_ids : list(str)
            List of visit IDs with which to filter the tree with. If
            None all are returned

        Returns
        -------
        filesets : list[Fileset]
            All the filesets found in the repository
        fields : list[Field]
            All the fields found in the repository
        records : list[Record]
            The provenance records found in the repository
        """
        all_filesets = []
        all_fields = []
        all_records = []
        for session_path, dirs, files in os.walk(self.root_dir):
            relpath = op.relpath(session_path, self.root_dir)
            path_parts = relpath.split(op.sep) if relpath != '.' else []
            ids = self._extract_ids_from_path(path_parts, dirs, files)
            if ids is None:
                continue
            subj_id, visit_id, from_study = ids
            # Check for summaries and filtered IDs
            if subj_id == self.SUMMARY_NAME:
                subj_id = None
            elif subject_ids is not None and subj_id not in subject_ids:
                continue
            if visit_id == self.SUMMARY_NAME:
                visit_id = None
            elif visit_ids is not None and visit_id not in visit_ids:
                continue
            # Map IDs into ID space of study
            subj_id = self.map_subject_id(subj_id)
            visit_id = self.map_visit_id(visit_id)
            # Determine frequency of session|summary
            if (subj_id, visit_id) == (None, None):
                frequency = 'per_study'
            elif subj_id is None:
                frequency = 'per_visit'
            elif visit_id is None:
                frequency = 'per_subject'
            else:
                frequency = 'per_session'
            filtered_files = self._filter_files(files, session_path)
            for fname in filtered_files:
                basename = split_extension(fname)[0]
                all_filesets.append(
                    Fileset.from_path(
                        op.join(session_path, fname),
                        frequency=frequency,
                        subject_id=subj_id, visit_id=visit_id,
                        repository=self,
                        from_study=from_study,
                        potential_aux_files=[
                            f for f in filtered_files
                            if (split_extension(f)[0] == basename and
                                f != fname)],
                        **kwargs))
            for fname in self._filter_dirs(dirs, session_path):
                all_filesets.append(
                    Fileset.from_path(
                        op.join(session_path, fname),
                        frequency=frequency,
                        subject_id=subj_id, visit_id=visit_id,
                        repository=self,
                        from_study=from_study,
                        **kwargs))
            if self.FIELDS_FNAME in files:
                with open(op.join(session_path,
                                  self.FIELDS_FNAME), 'r') as f:
                    dct = json.load(f)
                all_fields.extend(
                    Field(name=k, value=v, frequency=frequency,
                          subject_id=subj_id, visit_id=visit_id,
                          repository=self, from_study=from_study,
                          **kwargs)
                    for k, v in list(dct.items()))
            if self.PROV_DIR in dirs:
                if from_study is None:
                    raise ArcanaRepositoryError(
                        "Found provenance directory in session directory (i.e."
                        " not in study-specific sub-directory)")
                base_prov_dir = op.join(session_path, self.PROV_DIR)
                for fname in os.listdir(base_prov_dir):
                    all_records.append(Record.load(
                        split_extension(fname)[0],
                        frequency, subj_id, visit_id, from_study,
                        op.join(base_prov_dir, fname)))
        return all_filesets, all_fields, all_records
def find_data ( self , subject_ids = None , visit_ids = None , ** kwargs ) : all_filesets = [ ] all_fields = [ ] all_records = [ ] for session_path , dirs , files in os . walk ( self . root_dir ) : relpath = op . relpath ( session_path , self . root_dir ) path_parts = relpath . split ( op . sep ) if relpath != '.' else [ ] ids = self . _extract_ids_from_path ( path_parts , dirs , files ) if ids is None : continue subj_id , visit_id , from_study = ids if subj_id == self . SUMMARY_NAME : subj_id = None elif subject_ids is not None and subj_id not in subject_ids : continue if visit_id == self . SUMMARY_NAME : visit_id = None elif visit_ids is not None and visit_id not in visit_ids : continue subj_id = self . map_subject_id ( subj_id ) visit_id = self . map_visit_id ( visit_id ) if ( subj_id , visit_id ) == ( None , None ) : frequency = 'per_study' elif subj_id is None : frequency = 'per_visit' elif visit_id is None : frequency = 'per_subject' else : frequency = 'per_session' filtered_files = self . _filter_files ( files , session_path ) for fname in filtered_files : basename = split_extension ( fname ) [ 0 ] all_filesets . append ( Fileset . from_path ( op . join ( session_path , fname ) , frequency = frequency , subject_id = subj_id , visit_id = visit_id , repository = self , from_study = from_study , potential_aux_files = [ f for f in filtered_files if ( split_extension ( f ) [ 0 ] == basename and f != fname ) ] , ** kwargs ) ) for fname in self . _filter_dirs ( dirs , session_path ) : all_filesets . append ( Fileset . from_path ( op . join ( session_path , fname ) , frequency = frequency , subject_id = subj_id , visit_id = visit_id , repository = self , from_study = from_study , ** kwargs ) ) if self . FIELDS_FNAME in files : with open ( op . join ( session_path , self . FIELDS_FNAME ) , 'r' ) as f : dct = json . load ( f ) all_fields . extend ( Field ( name = k , value = v , frequency = frequency , subject_id = subj_id , visit_id = visit_id , repository = self , from_study = from_study , ** kwargs ) for k , v in list ( dct . items ( ) ) ) if self . PROV_DIR in dirs : if from_study is None : raise ArcanaRepositoryError ( "Found provenance directory in session directory (i.e." " not in study-specific sub-directory)" ) base_prov_dir = op . join ( session_path , self . PROV_DIR ) for fname in os . listdir ( base_prov_dir ) : all_records . append ( Record . load ( split_extension ( fname ) [ 0 ] , frequency , subj_id , visit_id , from_study , op . join ( base_prov_dir , fname ) ) ) return all_filesets , all_fields , all_records
Find all data within a repository, registering filesets, fields and
        provenance with the found_fileset, found_field and found_provenance
        methods, respectively

        Parameters
        ----------
        subject_ids : list(str)
            List of subject IDs with which to filter the tree with. If
            None all are returned
        visit_ids : list(str)
            List of visit IDs with which to filter the tree with. If
            None all are returned

        Returns
        -------
        filesets : list[Fileset]
            All the filesets found in the repository
        fields : list[Field]
            All the fields found in the repository
        records : list[Record]
            The provenance records found in the repository