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
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
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
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
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
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
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
def update_angles(self): angles = irotate(self.gui.axes) for r, a in zip(self.rotate, angles): r.value = a