code: def _parse(self):
          
          workdir = os.path.dirname(self.filename)
          logfile = os.path.join(workdir, "logfile")
          if not os.path.isfile(logfile):
              raise IOError("The ADF logfile can not be accessed!")
  
          self.is_failed = False
          self.error = None
          self.final_energy = None
          self.final_structure = None
          self.energies = []
          self.structures = []
          self.frequencies = []
          self.normal_modes = None
          self.freq_type = None
          self.run_type = None
          self.is_internal_crash = False
  
          self._parse_logfile(logfile)
          if not self.is_failed and self.run_type != "SinglePoint":
              self._parse_adf_output()
docs: Parse the ADF outputs. There are two files: one is 'logfile', the other
          is the ADF output file. The final energy and structures are parsed from
          the 'logfile'. Frequencies and normal modes are parsed from the ADF
          output file.