示例#1
0
文件: rotate.py 项目: slabanja/ase
 def __init__(self, gui):
     gtk.Window.__init__(self)
     angles = irotate(gui.axes)
     self.set_title('Rotate')
     vbox = gtk.VBox()
     pack(vbox, gtk.Label('Rotation angles:'))
     self.rotate = [
         gtk.Adjustment(value=a,
                        lower=-360,
                        upper=360,
                        step_incr=1,
                        page_incr=10) for a in angles
     ]
     pack(vbox,
          [gtk.SpinButton(a, climb_rate=0, digits=1) for a in self.rotate])
     for r in self.rotate:
         r.connect('value-changed', self.change)
     button = pack(vbox, gtk.Button('Update'))
     button.connect('clicked', self.update_angles)
     pack(
         vbox,
         gtk.Label('Note:\nYou can rotate freely\n'
                   'with the mouse, by holding\n'
                   'down mouse botton 2.'))
     self.add(vbox)
     vbox.show()
     self.show()
     self.gui = gui
示例#2
0
 def test(xyz):
     a = rotate(xyz)
     ixyz = '%sx,%sy,%sz' % irotate(a)
     a2 = rotate(ixyz)
     print(xyz)
     print(ixyz)
     assert abs(a - a2).max() < 1e-10
示例#3
0
def test(xyz):
    a = rotate(xyz)
    ixyz = '%sx,%sy,%sz' % irotate(a)
    a2 = rotate(ixyz)
    print(xyz)
    print(ixyz)
    assert abs(a - a2).max() < 1e-10
示例#4
0
文件: rotate.py 项目: lqcata/ase
def test(xyz):
    a = rotate(xyz)
    ixyz = '%sx,%sy,%sz' % irotate(a)
    a2 = rotate(ixyz)
    print xyz
    print ixyz
    #print np.around(a-a2, 5)
    assert abs(a - a2).max() < 1e-10
示例#5
0
def test(xyz):
    a = rotate(xyz)
    ixyz = '%sx,%sy,%sz' % irotate(a)
    a2 = rotate(ixyz)
    #print xyz
    #print ixyz
    #print np.around(a-a2, 5)
    assert abs(a-a2).max() < 1e-10
示例#6
0
 def __init__(self, gui):
     gtk.Window.__init__(self)
     angles = irotate(gui.axes)
     self.set_title(_('Rotate'))
     vbox = gtk.VBox()
     pack(vbox, gtk.Label(_('Rotation angles:')))
     self.rotate = [gtk.Adjustment(value=a, lower=-360, upper=360,
                                   step_incr=1, page_incr=10)
                    for a in angles]
     pack(vbox, [gtk.SpinButton(a, climb_rate=0, digits=1)
                 for a in self.rotate])
     for r in self.rotate:
         r.connect('value-changed', self.change)
     button = pack(vbox, gtk.Button(_('Update')))
     button.connect('clicked', self.update_angles)
     pack(vbox, gtk.Label(_('Note:\nYou can rotate freely\n'
                            'with the mouse, by holding\n'
                            'down mouse button 2.')))
     self.add(vbox)
     vbox.show()
     self.show()
     self.gui = gui
示例#7
0
文件: rotate.py 项目: slabanja/ase
 def update_angles(self, button):
     angles = irotate(self.gui.axes)
     self.update = False
     for r, a in zip(self.rotate, angles):
         r.value = a
     self.update = True
示例#8
0
def get_periodic_symmetry_operations(atoms, error_tolerance=0.01, debug=False):
    from ase.utils import irotate
    from ase.visualize import view
    from pyspglib import spglib
    #symmetry = spglib.get_symmetry(atoms, symprec=1e-5)
    symmetry = spglib.get_symmetry(atoms, symprec=1e-2)
    dataset = spglib.get_symmetry_dataset(atoms, symprec=1e-2)

    result = []
    if debug:
        cell, scaled_positions, numbers = spglib.find_primitive(atoms,
                                                                symprec=1e-5)
        a = Atoms(symbols='O4',
                  cell=cell,
                  scaled_positions=scaled_positions,
                  pbc=True)
        #symmetry = spglib.get_symmetry(a, symprec=1e-2)
        #dataset = spglib.get_symmetry_dataset(a, symprec=1e-2)
        print dataset['equivalent_atoms']
        print dataset['international']
        print dataset['hall']
        print dataset['wyckoffs']
        print dataset['transformation_matrix']
        print "Number of symmetry operations %i" % len(dataset['rotations'])
    for i in range(dataset['rotations'].shape[0]):

        new_atoms = atoms.copy()
        test = atoms.copy()
        rot = dataset['rotations'][i]
        trans = dataset['translations'][i]
        if debug:
            x, y, z = irotate(rot)
            #print x, y, z
            print "------------------- %i -----------------------" % i
            print "Rotation"
            print rot
            print "Translation"
            print trans
        new_pos = new_atoms.get_scaled_positions()

        for l, pos in enumerate(new_atoms.get_scaled_positions()):
            #print new_pos[l]
            new_pos[l] = (numpy.dot(rot, pos))
            new_pos[l] += trans
            #print new_pos[l]
        new_atoms.set_scaled_positions(new_pos)
        equals = get_equals_periodic(atoms,
                                     new_atoms,
                                     error_tolerance=error_tolerance,
                                     debug=debug)
        if equals != None:
            so = SymmetryOperation(str(i),
                                   equals,
                                   None,
                                   vector=None,
                                   magnitude=1,
                                   rotation_matrix=rot,
                                   translation_vector=trans)
            #if debug:
            #    print so
            result.append(so)
        else:
            print "Equivalent not found"
            #view(test)
            #view(new_atoms)
            #raw_input()

    return result
示例#9
0
 def update_angles(self):
     angles = irotate(self.gui.axes)
     for r, a in zip(self.rotate, angles):
         r.value = a
示例#10
0
 def update_angles(self, button):
     angles = irotate(self.gui.axes)
     self.update = False
     for r, a in zip(self.rotate, angles):
         r.value = a
     self.update = True
示例#11
0
 def update_angles(self):
     angles = irotate(self.gui.axes)
     for r, a in zip(self.rotate, angles):
         r.value = a