Statistiques
| Révision :

root / ase / gui / execute.py

Historique | Voir | Annoter | Télécharger (2,17 ko)

1
#!/usr/bin/env python
2
import __future__
3
import gtk
4

    
5
import numpy as np
6

    
7
from ase.gui.languages import translate as _
8
from ase.gui.widgets import pack
9

    
10

    
11
class Execute(gtk.Window):
12
    def __init__(self, gui):
13
        gtk.Window.__init__(self)
14
        #self.window.set_position(gtk.WIN_POS_CENTER)
15
        #self.window.connect("destroy", lambda w: gtk.main_quit())
16
        #self.window.connect('delete_event', self.exit)
17
        self.set_title('Execute')
18
        vbox = gtk.VBox()
19
        pack(vbox, gtk.Label('Global: Use n, N, R, A, S:'))
20
        self.cmd1 = pack(vbox, gtk.Entry(43))
21
        pack(vbox, gtk.Label('Atoms: Use a, x, y, z, s, Z'))
22
        self.cmd2 = pack(vbox, gtk.Entry(43))
23
        #self.cmd1, self.cmd2 = pack(vbox, [gtk.Entry(23),gtk.Entry(23)])
24
        self.cmd1.connect('activate', self.execute)
25
        self.cmd2.connect('activate', self.execute)
26
        self.selected = gtk.CheckButton('Only selected atoms')
27
        pack(vbox, self.selected)
28
        self.add(vbox)
29
        vbox.show()
30
        self.show()
31
        self.gui = gui
32

    
33
    def execute(self, widget=None):
34
        cmd1 = self.cmd1.get_text()
35
        cmd2 = self.cmd2.get_text()
36
        if cmd1:
37
            code1 = compile(cmd1 + '\n', 'execute.py', 'single',
38
                            __future__.CO_FUTURE_DIVISION)
39
        if cmd2:
40
            code2 = compile(cmd2 + '\n', 'execute.py', 'single',
41
                            __future__.CO_FUTURE_DIVISION)
42

    
43
        gui = self.gui
44
        images = gui.images
45

    
46
        N = images.nimages
47
        n = images.natoms
48
        S = images.selected
49
        if self.selected.get_active():
50
            indices = np.where(S)[0]
51
        else:
52
            indices = range(n)
53

    
54
        for i in range(N):
55
            R = images.P[i]
56
            A = images.A[i]
57
            #fmax = sqrt(max((F**2).sum(1))
58

    
59
            if cmd1:
60
                exec code1
61

    
62
            if not cmd2:
63
                continue
64
            
65
            for a in indices:
66
                x, y, z = R[a]
67
                s = S[a]
68
                Z = images.Z[a]
69
                #f =
70
                exec code2
71
                S[a] = s
72
                R[a] = x, y, z
73

    
74
        gui.set_frame(gui.frame)
75
        
76
    python = execute