code: def process_vasprun(self, dir_name, taskname, filename):
          
          vasprun_file = os.path.join(dir_name, filename)
          if self.parse_projected_eigen and (self.parse_projected_eigen != 'final' or \
                               taskname == self.runs[-1]):
              parse_projected_eigen = True
          else:
              parse_projected_eigen = False
          r = Vasprun(vasprun_file,parse_projected_eigen=parse_projected_eigen)
          d = r.as_dict()
          d["dir_name"] = os.path.abspath(dir_name)
          d["completed_at"] = \
              str(datetime.datetime.fromtimestamp(os.path.getmtime(
                  vasprun_file)))
          d["cif"] = str(CifWriter(r.final_structure))
          d["density"] = r.final_structure.density
          if self.parse_dos and (self.parse_dos != 'final' \
                                 or taskname == self.runs[-1]):
              try:
                  d["dos"] = r.complete_dos.as_dict()
              except Exception:
                  logger.warning("No valid dos data exist in {}.\n Skipping dos"
                                 .format(dir_name))
          if taskname == "relax1" or taskname == "relax2":
              d["task"] = {"type": "aflow", "name": taskname}
          else:
              d["task"] = {"type": taskname, "name": taskname}
          d["oxide_type"] = oxide_type(r.final_structure)
          return d
docs: Process a vasprun.xml file.