def read(self, skip=[], goto_metal=None, goto_reaction=None):
        if len(skip) > 0:
            for skip_f in skip:
                self.omit_folders.append(skip_f)
        if os.path.isfile(self.data_base + '/publication.txt'):
            self.user_base_level -= 1
        self.stdout.write('---------------------- \n')
        self.stdout.write('Starting folderreader! \n')
        self.stdout.write('---------------------- \n')
        found_reaction = False
        for root, dirs, files in os.walk(self.user_base):
            for omit_folder in self.omit_folders:
                if omit_folder in dirs:
                    dirs.remove(omit_folder)
            level = len(root.split("/")) - self.user_base_level
            if level == self.pub_level:
                self.read_pub(root)
            if level == self.DFT_level:
                self.DFT_code = os.path.basename(root)
            if level == self.XC_level:
                self.DFT_functional = os.path.basename(root)
                self.gas_folder = root + '/gas/'
                self.read_gas()
            if level == self.reference_level:
                if 'gas' in os.path.basename(root):
                    continue
                if goto_metal is not None:
                    if os.path.basename(root) == goto_metal:
                        goto_metal = None
                    else:
                        dirs[:] = []
                        continue
                self.read_bulk(root)
            if level == self.slab_level:
                self.read_slab(root)
            if level == self.reaction_level:
                if goto_reaction is not None:
                    if os.path.basename(root) == goto_reaction:
                        goto_reaction = None
                    else:
                        dirs[:] = []
                        continue
                self.read_reaction(root)
            if level == self.final_level:
                self.root = root
                self.read_energies(root)
                if self.key_value_pairs_reaction is not None:
                    yield self.key_value_pairs_reaction