code: def create_job(self,
                     builder_job,    # type: Dict[Text, Any]
                     wf_job=None,    # type: Callable[[Dict[Text, Text], Callable[[Any, Any], Any], RuntimeContext], Generator[Any, None, None]]
                     is_output=False
                    ):  # type: (...) -> Dict
          #TODO customise the file
          
          copied = copy.deepcopy(builder_job)
          relativised_input_objecttemp = {}  # type: Dict[Text, Any]
          self._relativise_files(copied)
          def jdefault(o):
              return dict(o)
          if is_output:
              rel_path = posixpath.join(_posix_path(WORKFLOW), "primary-output.json")
          else:
              rel_path = posixpath.join(_posix_path(WORKFLOW), "primary-job.json")
          j = json_dumps(copied, indent=4, ensure_ascii=False, default=jdefault)
          with self.write_bag_file(rel_path) as file_path:
              file_path.write(j + u"\n")
          _logger.debug(u"[provenance] Generated customised job file: %s",
                        rel_path)
          # Generate dictionary with keys as workflow level input IDs and values
          # as
          # 1) for files the relativised location containing hash
          # 2) for other attributes, the actual value.
          relativised_input_objecttemp = {}
          for key, value in copied.items():
              if isinstance(value, MutableMapping):
                  if value.get("class") in ("File", "Directory"):
                      relativised_input_objecttemp[key] = value
              else:
                  relativised_input_objecttemp[key] = value
          self.relativised_input_object.update(
              {k: v for k, v in relativised_input_objecttemp.items() if v})
          return self.relativised_input_object
docs: Generate the new job object with RO specific relative paths.