code: 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