<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def reference(self, taskfileinfo):
 """Reference the entity into the scene. Only possible if the current status is None. This will create a new refobject, then call :meth:`RefobjInterface.reference` and afterwards set the refobj on the :class:`Reftrack` instance. :param taskfileinfo: the taskfileinfo to reference :type taskfileinfo: :class:`jukeboxcore.filesys.TaskFileInfo` :returns: None :rtype: None :raises: :class:`ReftrackIntegrityError` """

        assert self.status() is None,\
            "Can only reference, if the entity is not already referenced/imported. Use replace instead."
        refobj = self.create_refobject()
        with self.set_parent_on_new(refobj):
            self.get_refobjinter().reference(taskfileinfo, refobj)
        self.set_refobj(refobj)
        self.fetch_new_children()
        self.update_restrictions()
        self.emit_data_changed()