def draw_consensus_rectified_sphere(hv_points, root):
    b = Bloch()
    b.point_color = ['m', 'k', 'g', 'b', 'w', 'c', 'y', 'r']
    b.zlabel = ['$z$', '']
    b.point_marker = ['o']
    b.point_size = [80]
    b.frame_width = 1.2
    fig = plt.figure(figsize=(20, 20))
    b.fig = fig

    x = (basis(2, 0) + (1 + 0j) * basis(2, 1)).unit()
    y = (basis(2, 0) + (0 + 1j) * basis(2, 1)).unit()
    z = (basis(2, 0) + (0 + 0j) * basis(2, 1)).unit()
    b.add_states([x, y, z])
    for i in range(len(hv_points)):
        # Transform xyz to zxy coordinates
        tmp2 = np.vstack(
            [hv_points[i][:, 2], hv_points[i][:, 0], hv_points[i][:, 1]]).T
        tmp = tmp2.T
        b.add_points(tmp)

    # b.add_points([ 0.99619469809174555, 0.087155742747658166, 0])
    # b.add_points([0.99619469809174555, -0.087155742747658166, 0])
    # b.add_points(tmp)
    name = os.path.join(root, 'consensus_zenith_on_rectified_sphere.jpg')
    b.save(name=name)
def draw_sphere_zenith(zenith_points, hv_points, root):
    b = Bloch()
    b.point_color = ['m', 'k', 'g', 'b', 'w', 'c', 'y', 'r']
    b.zlabel = ['$z$', '']
    b.point_marker = ['o']
    b.point_size = [30]
    b.frame_width = 1.2
    fig = plt.figure(figsize=(20, 20))
    b.fig = fig

    x = (basis(2, 0) + (1 + 0j) * basis(2, 1)).unit()
    y = (basis(2, 0) + (0 + 1j) * basis(2, 1)).unit()
    z = (basis(2, 0) + (0 + 0j) * basis(2, 1)).unit()
    b.add_states([x, y, z])

    for i in range(len(zenith_points)):
        # Transform xyz to zxy coordinates
        tmp1 = np.array(
            [zenith_points[i][2], zenith_points[i][0], zenith_points[i][1]])
        tmp2 = np.vstack(
            [hv_points[i][:, 2], hv_points[i][:, 0], hv_points[i][:, 1]]).T
        tmp = np.vstack([tmp1, -tmp1, tmp2]).T
        b.add_points(tmp)

    # tmp1 = np.array([zenith_points[-1][2], zenith_points[-1][0], zenith_points[-1][1]])
    # tmp = np.array([tmp1, -tmp1]).T
    # b.add_points(tmp)
    name = os.path.join(root, 'zenith_on_sphere.jpg')
    b.save(name=name)
示例#3
0
    def bloch_plot(self, points=None, F=None):
        """
        Plot the current state on the Bloch sphere using
        qutip. 
        """
        # create instance of 3d plot
        bloch = Bloch(figsize=[9, 9])
        bloch.add_vectors([0, 0, 1])
        bloch.xlabel = ['$<F_x>$', '']
        bloch.ylabel = ['$<F_y>$', '']
        bloch.zlabel = ['$<F_z>$', '']
        if self.spin == 'half':
            if points is None:
                # convert current state into density operator
                rho = np.outer(self.state.H, self.state)
                # get Bloch vector representation
                points = self.get_bloch_vec(rho)
                # Can only plot systems of dimension 2 at this time
                assert len(
                    points
                ) == 3, "System dimension must be spin 1/2 for Bloch sphere plot"
                # create instance of 3d plot
            bloch = Bloch(figsize=[9, 9])
        elif self.spin == 'one':
            #points is list of items in format [[x1,x2],[y1,y2],[z1,z2]]
            if points is None:
                points = [getStars(self.state)]
            bloch.point_color = ['g', 'r',
                                 'b']  #ensures point and line are same colour
            bloch.point_marker = ['o', 'd', 'o']
            #bloch.point_color  = ['g','r'] #ensures point and line are same colour
            #bloch.point_marker = ['o','d']
            for p in points:
                bloch.add_points([p[0][0], p[1][0], p[2][0]])
                bloch.add_points([p[0][1], p[1][1], p[2][1]])
                bloch.add_points(p, meth='l')
            '''

            bloch.point_color = ['b','b'] #ensures point and line are same colour
            bloch.point_marker = ['o','o']
            for p in points:
                bloch.add_points(p)
                bloch.add_points(p, meth='l')
            '''
        # add state
        #bloch.render(bloch.fig, bloch.axes)
        #bloch.fig.savefig("bloch.png",dpi=600, transparent=True)
        bloch.show()
def draw_center_hvps_rectified_sphere(hv_points, root):
    b = Bloch()
    b.point_color = ['m', 'k', 'g', 'b', 'w', 'c', 'y', 'r']
    b.zlabel = ['$z$', '']
    b.point_marker = ['o']
    b.point_size = [80]
    b.frame_width = 1.2
    fig = plt.figure(figsize=(20, 20))
    b.fig = fig

    x = (basis(2, 0) + (1 + 0j) * basis(2, 1)).unit()
    y = (basis(2, 0) + (0 + 1j) * basis(2, 1)).unit()
    z = (basis(2, 0) + (0 + 0j) * basis(2, 1)).unit()
    b.add_states([x, y, z])
    for i in range(len(hv_points)):
        # Transform xyz to zxy coordinates
        tmp1 = np.array([hv_points[i][2], hv_points[i][0], hv_points[i][1]])
        tmp2 = np.vstack([tmp1, -tmp1]).T
        tmp = tmp2
        b.add_points(tmp)

    name = os.path.join(root, 'consensus_hvps_center_on_rectified_sphere.jpg')
    b.save(name=name)
示例#5
0
 def maj_vid(self, points):
     #takes screenshots of majorana stars over time to produce vid
     if points is None:
         points = [getStars(self.state)]
     i = 0
     for p in points:
         bloch = Bloch(figsize=[9, 9])
         bloch.xlabel = ['$<F_x>$', '']
         bloch.ylabel = ['$<F_y>$', '']
         bloch.zlabel = ['$<F_z>$', '']
         bloch.point_color = ['g', 'r',
                              'b']  #ensures point and line are same colour
         bloch.point_marker = ['o', 'd', 'o']
         bloch.add_points([p[0][0], p[1][0], p[2][0]])
         bloch.add_points([p[0][1], p[1][1], p[2][1]])
         bloch.add_points(p, meth='l')
         bloch.render(bloch.fig, bloch.axes)
         bloch.fig.savefig(
             "bloch" + str(i).zfill(int(np.ceil(np.log10(len(points))))) +
             ".png",
             dpi=600,
             transparent=False)
         i += 1
示例#6
0
# hinzufuegen eines Vektor
#  x,y,z
v = [1, 0, 0]  # dazu geben wir einen Vektor in die x-Richtung an
b.add_vectors(
    v)  # mit b.add_vectors wird der Vektor v der Blochkugel hinzugefuegt
b.show()
print('-2-')
input('Press ENTER to continue.')

# %% -3-
# Achsen koennen auch umbenannt werden
# dazu kann Latex-Code verwendet werden jedoch muss beachtet werden,
# dass fuer Latex-Code \ --> \\ verwendet werden sollte
b.xlabel = ["$\\left|45^\\circ \\right>$", "$\\left|-45^\\circ \\right>$"]
b.ylabel = ["$\\left|\\sigma^+\\right>$", "$\\left|\\sigma^- \\right>$"]
b.zlabel = ["$\\left|H\\right>$", "$\\left|V\\right>$"]
b.show()
print('-3-')
input('Press ENTER to continue.')

# %% -4-
b.clear()  # Loescht alle Zustaende auf der Blochkugel
# behaltet jedoch Einstellungen wie z.B. Achsenbeschriftung

# Normierung eines Vektors
v = [1 / math.sqrt(3), 1 / math.sqrt(3), -1 / math.sqrt(3)]
w = [1, -1, 1] / np.sqrt(3)

# automatische Normierung eines Vektors
# mittel der numpy Library
# [email protected] ist dabei eine Vektor-Vektor Multiplikation
    # point2 = np.array([0., 0., 1.])
    #
    #
    # # pitch = np.arctan(point1[2] / point1[1])
    # # roll = - np.arctan(point1[0] / np.sign(point1[1]) * np.hypot(point1[1], point1[2]))
    #
    #
    # ## print(R_pitch(pitch).dot(R_roll(roll).dot(np.array([0, 1, 0]))))
    #
    #
    # hl = np.array([[0., 774.0801861], [1600., 825.23757385], [np.nan, np.nan]])
    # hl_homo = np.array([np.hstack([hl[0] - 800, 800]), np.hstack([hl[1] - 800, 800])])
    #
    #
    # hvps = np.array([[830.73055179,800.6414392],[1158.09074533, 811.10824692]])
    # img = Image.open('/home/zhup/Desktop/Pano/Pano_hl_z_vp/3_im_hl.jpg')
    # draw = ImageDraw.Draw(img)
    # draw.line([tuple(hvps[0]), tuple(hvps[1])], width=6, fill='yellow')
    # img.save(os.path.join(root, 'render_part3.jpg'))

    b = Bloch()
    b.point_color = ['m', 'k', 'g', 'b', 'w', 'c', 'y', 'r']
    b.zlabel = ['$z$', '']
    b.point_marker = ['o']
    b.point_size = [3]
    b.frame_width = 0.5
    fig = plt.figure(figsize=(20, 20))
    b.fig = fig
    name = os.path.join('zenith_on_sphere.jpg')
    b.save(name=name)
示例#8
0
    def bloch_plot2(self,
                    filename,
                    save=False,
                    vecList=[],
                    vecColour=[],
                    view=[190, 10],
                    points=None,
                    folder=False,
                    fig=False,
                    ax=False):
        """
        Plot the current state on the Bloch sphere using
        qutip. 
        """
        if points is None:
            # convert current state into density operator
            rho = np.outer(self.state.H, self.state)
            # get Bloch vector representation
            points = self.get_bloch_vec(rho)
            # Can only plot systems of dimension 2 at this time
            assert len(
                points
            ) == 3, "System dimension must be spin 1/2 for Bloch sphere plot"

        # create instance of 3d plot
        if not fig or not ax:
            bloch = Bloch(figsize=[9, 9], view=view)
        else:
            bloch = Bloch(fig=fig, axes=ax, view=view)
        # add state
        bloch.add_points(points)
        # bloch.zlabel = [r'$\left|+z\right>$',r'$\left|-z\right>$']
        bloch.zlabel = [r'$\ket{+_z}$', r'$\ket{-_z}$']
        # bloch.ylabel = [r'$\ket{+_y}$',r'$\ket{-_y}$']
        # bloch.ylabel = [r'$\ket{+_y}$',r'$\ket{-_y}$']
        # print(vecList.shape)

        # add vectors
        if vecList.shape[1] == 3:
            if len(vecColour) >= vecList.shape[0] and len(vecColour) > 0:
                bloch.vector_color = vecColour
            else:
                bloch.vector_color = ['#CC6600', 'royalblue', 'r', 'm', 'g']
            bloch.add_vectors(vecList)
        # add field vector
        # bloch.add_vectors([1,0,0.15])
        # bloch.add_vectors([0,0,1])
        # bloch.add_vectors([1,0,0])

        # render bloch sphere
        if not fig or not ax:
            bloch.render()
        else:
            # bloch.render(fig = fig, axes = ax)
            bloch.render(fig=fig)

        # save output
        if save is True:
            if not folder:
                folder = 'C:/Users/Boundsy/Desktop/Uni Work/PHS2360/Sim Results/'
            print('Bloch plot saved to ' + str(folder))
            path1 = folder + str(filename) + '.png'
            path2 = folder + str(filename) + '.pdf'
            bloch.fig.savefig(path1, dpi=800, transparent=True)
            bloch.fig.savefig(path2, dpi=800, transparent=True)

        # return axes for annotations
        return bloch.fig, bloch.axes