code: def read_electrostatic_potential(self):
          
          pattern = {"ngf": r"\s+dimension x,y,z NGXF=\s+([\.\-\d]+)\sNGYF=\s+([\.\-\d]+)\sNGZF=\s+([\.\-\d]+)"}
          self.read_pattern(pattern, postprocess=int)
          self.ngf = self.data.get("ngf", [[]])[0]
  
          pattern = {"radii": r"the test charge radii are((?:\s+[\.\-\d]+)+)"}
          self.read_pattern(pattern, reverse=True, terminate_on_match=True, postprocess=str)
          self.sampling_radii = [float(f) for f in self.data["radii"][0][0].split()]
  
          header_pattern = r"\(the norm of the test charge is\s+[\.\-\d]+\)"
          table_pattern = r"((?:\s+\d+\s*[\.\-\d]+)+)"
          footer_pattern = r"\s+E-fermi :"
  
          pots = self.read_table_pattern(header_pattern, table_pattern, footer_pattern)
          pots = "".join(itertools.chain.from_iterable(pots))
  
          pots = re.findall(r"\s+\d+\s?([\.\-\d]+)+", pots)
          pots = [float(f) for f in pots]
  
          self.electrostatic_potential = pots
docs: Parses the eletrostatic potential for the last ionic step