Пример #1
0
    def minimize(*xxx):
        global args, u

        ## test mimimization for correction
        if args.testmin:
            vo = Voron(*u.rep)  ## original Voronoi cell
            u = u.to_min()
            u_exp = u * 1

            u_exp.to_decart()

            drawgl.clear()
            drawgl(vo)

            ## draw all atoms which are in "vo"
            for n, ats in u_exp:
                r, col = UCell.data[n]
                col = [x / 255.0 for x in col]

                for v in vo.has(ats):
                    drawgl(v, r=r, color=col, invis=False)

            ## now draw all cloned Voronoi cells
            #import reper2dots
            #for v in vo.cut( u.rep.to_dots( 1, 1, 1 ) ):
            #    drawgl( Voron( *u.rep, pos = v ) )
            drawgl(Voron(*u.rep))

        ## usual minimization process
        else:
            u = u.to_min()
            print '------------'
            print 'sort of minimized cell: ', u.rep.to_zell().to_sort().name
            print 'zell of minimized cell: ', u.rep.to_zell().norm()
            draw_with(drawgl)
Пример #2
0
    def draw_with(eng):
        eng.clear()
        vo = Voron(*u.rep)
        eng(vo)
        u.to_decart()
        for n, vs in u * 1:  ## for each atoms in extended unitcell
            r, col = UCell.data[n]
            col = [x / 255.0 for x in col]

            for v in vo.touch(vs):
                eng(v, r=r, color=col, invis=False)
                eng(n, pos=v)

            for v in vo.has(vs):  ## only draw atoms which are in Voron cell
                if not vo.touch(v):
                    eng(v, r=r, color=col, invis=False)
                    eng(n, pos=v)
Пример #3
0
Файл: uctool.py Проект: ont/cbox
    def draw_with( eng ):
        eng.clear()
        vo = Voron( *u.rep )
        eng( vo )
        u.to_decart()
        for n, vs in u*1:                 ## for each atoms in extended unitcell
            r, col = UCell.data[ n ]
            col = [ x/255.0 for x in col ]

            for v in vo.touch( vs ):
                eng( v, r = r, color = col, invis = False )
                eng( n, pos = v )

            for v in vo.has( vs ):        ## only draw atoms which are in Voron cell
                if not vo.touch( v ):
                    eng( v, r = r, color = col, invis = False )
                    eng( n, pos = v )
Пример #4
0
    def draw_with(eng):
        eng.clear()
        vo = Voron(*u.rep)
        eng(vo)
        u.to_decart()

        if args.atoms:
            for n, vs in u * 1:  ## for each atoms in extended unitcell
                r, col = UCell.data[n]
                col = [x / 255.0 for x in col]

                for v in vo.touch(vs):
                    eng(v, r=r, color=col, invis=False)
                    eng(n, pos=v)

                for v in vo.has(
                        vs):  ## only draw atoms which are in Voron cell
                    if not vo.touch(v):
                        eng(v, r=r, color=col, invis=False)
                        eng(n, pos=v)

        if args.wycksub:
            u.to_fract()
            Z = u.to_min().rep.minimize().to_zell().norm()
            for wname, ws in zip('abcdefghijklmnopqrstuvwxyz',
                                 c.spgrp.wyckpos()):
                for n, vs in u_basis:
                    for v in vs:
                        if v in ws:
                            print '--(%s)-->' % wname, n, v, c.spgrp * v,
                            u4min = UCell(u_basis.rep)
                            u4min.add('A', ws)
                            u4min = u4min.to_min()

                            z = u4min.rep.minimize().to_zell().norm()
                            if Z != z:
                                print 'FOUND %s' % z.to_sort()
                                vo = Voron(*u4min.rep)
                                eng(vo)
                            else:
                                print 'not wyck sublattice'
Пример #5
0
    def draw_with( eng ):
        eng.clear()
        vo = Voron( *u.rep )
        eng( vo )
        u.to_decart()

        if args.atoms:
            for n, vs in u*1:                 ## for each atoms in extended unitcell
                r, col = UCell.data[ n ]
                col = [ x/255.0 for x in col ]

                for v in vo.touch( vs ):
                    eng( v, r = r, color = col, invis = False )
                    eng( n, pos = v )

                for v in vo.has( vs ):        ## only draw atoms which are in Voron cell
                    if not vo.touch( v ):
                        eng( v, r = r, color = col, invis = False )
                        eng( n, pos = v )

        if args.wycksub:
            u.to_fract()
            Z = u.to_min().rep.minimize().to_zell().norm()
            for wname, ws in zip( 'abcdefghijklmnopqrstuvwxyz', c.spgrp.wyckpos() ):
                for n, vs in u_basis:
                    for v in vs:
                        if v in ws:
                            print '--(%s)-->' % wname, n, v, c.spgrp * v,
                            u4min = UCell( u_basis.rep )
                            u4min.add( 'A', ws )
                            u4min = u4min.to_min()

                            z = u4min.rep.minimize().to_zell().norm()
                            if Z != z:
                                print 'FOUND %s' % z.to_sort()
                                vo = Voron( *u4min.rep )
                                eng( vo )
                            else:
                                print 'not wyck sublattice'
Пример #6
0
    def minimize( *xxx ):
        global args, u
        
        ## test mimimization for correction
        if args.testmin:
            vo = Voron( *u.rep )  ## original Voronoi cell
            u = u.to_min()
            u_exp = u * 1

            u_exp.to_decart()

            drawgl.clear()
            drawgl( vo )

            ## draw all atoms which are in "vo"
            for n, ats in u_exp:
                r, col = UCell.data[ n ]
                col = [ x/255.0 for x in col ]

                for v in vo.has( ats ):
                    drawgl( v, r = r, color = col, invis = False )

            ## now draw all cloned Voronoi cells
            #import reper2dots
            #for v in vo.cut( u.rep.to_dots( 1, 1, 1 ) ):
            #    drawgl( Voron( *u.rep, pos = v ) )
            drawgl( Voron( *u.rep ) )
                    

        ## usual minimization process
        else:
            u = u.to_min()
            print '------------'
            print 'sort of minimized cell: ', u.rep.to_zell().to_sort().name
            print 'zell of minimized cell: ', u.rep.to_zell().norm()
            draw_with( drawgl )