def spawn(self, info):
        r"""
        Really spawn the new wavepackets :math:`\tilde{\Psi}`. This method
        appends the new :py:class:`HagedornWavepacket` instances to the list
        :py:attr:`packets` of packets.
        """
        WP = info

        # Initialize an empty wavepacket for spawning
        SWP = HagedornWavepacket(self.parameters)
        SWP.set_quadrature(None)

        # Initialize a Spawner
        AS = AdiabaticSpawner(self.parameters)

        # Estimate the parameter set Pi
        Pi = AS.estimate_parameters(WP, component=0)

        # Spawn a new packet
        if Pi is not None:
            SWP.set_parameters(Pi)

            # Project the coefficients from mother to child
            AS.project_coefficients(WP, SWP)

            print("  Spawned a new wavepacket with ID "+str(SWP.get_id())+".")

            # Append the spawned packet to the world
            self.packets.append((SWP,0))
    def spawn(self, info):
        r"""
        Really spawn the new wavepackets :math:`\tilde{\Psi}`. This method
        appends the new :py:class:`HagedornWavepacket` instances to the list
        :py:attr:`packets` of packets.
        """
        # Transform the packet to the eigenbasis where spawning has to happen
        WP, component = info
        WP.project_to_eigen(self.potential)

        # Prepare the potential (this functions are idempotent)
        self.potential.calculate_local_quadratic(diagonal_component=component)
        self.potential.calculate_local_remainder(diagonal_component=component)

        # Initialize an empty wavepacket for spawning
        SWP = HagedornWavepacket(self.parameters)
        SWP.set_quadrature(None)

        # Initialize a Spawner
        NAS = NonAdiabaticSpawner(self.parameters)

        # Estimate the parameter set Pi
        Pi = NAS.estimate_parameters(WP, component=component)

        # Spawn a new packet
        if Pi is not None:
            SWP.set_parameters(Pi)

            # Project the coefficients from mother to child
            NAS.project_coefficients(WP, SWP, component=component)

            # Transform both packets back to the canonical basis where propagation happens
            WP.project_to_canonical(self.potential)
            SWP.project_to_canonical(self.potential)

            print("  Spawned a new wavepacket with ID "+str(SWP.get_id())+".")

            # Append the spawned packet to the world
            self.packets.append((SWP,component))