Coverage for /builds/ase/ase/ase/gui/modify.py : 95.56%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from functools import partial
3from ase.gui.i18n import _
5import ase.gui.ui as ui
6from ase.gui.widgets import Element
7from ase.gui.utils import get_magmoms
10class ModifyAtoms:
11 """Presents a dialog box where the user is able to change the
12 atomic type, the magnetic moment and tags of the selected atoms.
13 """
15 def __init__(self, gui):
16 self.gui = gui
17 selected = self.selection()
18 if not selected.any():
19 ui.error(_('No atoms selected!'))
20 return
22 win = ui.Window(_('Modify'), wmtype='utility')
23 element = Element(callback=self.set_element)
24 win.add(element)
25 win.add(ui.Button(_('Change element'),
26 partial(self.set_element, element)))
27 self.tag = ui.SpinBox(0, -1000, 1000, 1, self.set_tag)
28 win.add([_('Tag'), self.tag])
29 self.magmom = ui.SpinBox(0.0, -10, 10, 0.1, self.set_magmom)
30 win.add([_('Moment'), self.magmom])
32 atoms = self.gui.atoms
33 sym = atoms.symbols[selected]
34 if len(sym.species()) == 1:
35 element.symbol = sym[0]
37 tags = atoms.get_tags()[selected]
38 if tags.ptp() == 0:
39 self.tag.value = tags[0]
41 magmoms = get_magmoms(atoms)[selected]
42 if magmoms.round(2).ptp() == 0.0:
43 self.magmom.value = round(magmoms[0], 2)
45 def selection(self):
46 return self.gui.images.selected[:len(self.gui.atoms)]
48 def set_element(self, element):
49 self.gui.atoms.numbers[self.selection()] = element.Z
50 self.gui.draw()
52 def set_tag(self):
53 tags = self.gui.atoms.get_tags()
54 tags[self.selection()] = self.tag.value
55 self.gui.atoms.set_tags(tags)
56 self.gui.draw()
58 def set_magmom(self):
59 magmoms = get_magmoms(self.gui.atoms)
60 magmoms[self.selection()] = self.magmom.value
61 self.gui.atoms.set_initial_magnetic_moments(magmoms)
62 self.gui.draw()