docs: def post_process(self, dir_name, d):
          """
          Simple post-processing for various files other than the vasprun.xml.
          Called by generate_task_doc. Modify this if your runs have other
          kinds of processing requirements.
  
          Args:
              dir_name:
                  The dir_name.
              d:
                  Current doc generated.
          """
          logger.info("Post-processing dir:{}".format(dir_name))
  
          fullpath = os.path.abspath(dir_name)
  
          # VASP input generated by pymatgen's alchemy has a
          # transformations.json file that keeps track of the origin of a
          # particular structure. This is extremely useful for tracing back a
          # result. If such a file is found, it is inserted into the task doc
          # as d["transformations"]
          transformations = {}
          filenames = glob.glob(os.path.join(fullpath, "transformations.json*"))
          if len(filenames) >= 1:
              with zopen(filenames[0], "rt") as f:
                  transformations = json.load(f)
                  try:
                      m = re.match("(\d+)-ICSD",
                                   transformations["history"][0]["source"])
                      if m:
                          d["icsd_id"] = int(m.group(1))
                  except Exception as ex:
                      logger.warning("Cannot parse ICSD from transformations "
                                     "file.")
                      pass
          else:
              logger.warning("Transformations file does not exist.")
  
          other_parameters = transformations.get("other_parameters")
          new_tags = None
          if other_parameters:
              # We don't want to leave tags or authors in the
              # transformations file because they'd be copied into
              # every structure generated after this one.
              new_tags = other_parameters.pop("tags", None)
              new_author = other_parameters.pop("author", None)
              if new_author:
                  d["author"] = new_author
              if not other_parameters:  # if dict is now empty remove it
                  transformations.pop("other_parameters")
  
          d["transformations"] = transformations
  
          # Calculations done using custodian has a custodian.json,
          # which tracks the jobs performed and any errors detected and fixed.
          # This is useful for tracking what has actually be done to get a
          # result. If such a file is found, it is inserted into the task doc
          # as d["custodian"]
          filenames = glob.glob(os.path.join(fullpath, "custodian.json*"))
          if len(filenames) >= 1:
              with zopen(filenames[0], "rt") as f:
                  d["custodian"] = json.load(f)
  
          # Parse OUTCAR for additional information and run stats that are
          # generally not in vasprun.xml.
          try:
              run_stats = {}
              for filename in glob.glob(os.path.join(fullpath, "OUTCAR*")):
                  outcar = Outcar(filename)
                  i = 1 if re.search("relax2", filename) else 0
                  taskname = "relax2" if re.search("relax2", filename) else \
                      "relax1"
                  d["calculations"][i]["output"]["outcar"] = outcar.as_dict()
                  run_stats[taskname] = outcar.run_stats
          except:
              logger.error("Bad OUTCAR for {}.".format(fullpath))
  
          try:
              overall_run_stats = {}
              for key in ["Total CPU time used (sec)", "User time (sec)",
                          "System time (sec)", "Elapsed time (sec)"]:
                  overall_run_stats[key] = sum([v[key]
                                                for v in run_stats.values()])
              run_stats["overall"] = overall_run_stats
          except:
              logger.error("Bad run stats for {}.".format(fullpath))
  
          d["run_stats"] = run_stats
  
          #Convert to full uri path.
          if self.use_full_uri:
              d["dir_name"] = get_uri(dir_name)
  
          if new_tags:
              d["tags"] = new_tags
  
          logger.info("Post-processed " + fullpath)