Statistiques
| Révision :

root / ase / gui / ag.py @ 12

Historique | Voir | Annoter | Télécharger (4,7 ko)

1 1 tkerber
#!/usr/bin/env python
2 1 tkerber
3 1 tkerber
# Copyright 2008, 2009
4 1 tkerber
# CAMd (see accompanying license files for details).
5 1 tkerber
6 1 tkerber
from optparse import OptionParser, SUPPRESS_HELP
7 1 tkerber
import ase.gui.gtkexcepthook
8 1 tkerber
#ase.gui.gtkexcepthook.feedback = "schiotz@fysik.dtu.dk"
9 1 tkerber
#ase.gui.gtkexcepthook.smtphost = "mail.fysik.dtu.dk"
10 1 tkerber
11 1 tkerber
def build_parser():
12 1 tkerber
    parser = OptionParser(usage='%prog [options] [file[, file2, ...]]',
13 1 tkerber
                          version='%prog 0.1',
14 1 tkerber
                          description='See the online manual ' +
15 1 tkerber
                          '(https://wiki.fysik.dtu.dk/ase/ase/gui.html) ' +
16 1 tkerber
                          'for more information.')
17 1 tkerber
    parser.add_option('-n', '--image-number',
18 1 tkerber
                      default=':', metavar='NUMBER',
19 1 tkerber
                      help='Pick image(s) from trajectory.  NUMBER can be a '
20 1 tkerber
                      'single number (use a negative number to count from '
21 1 tkerber
                      'the back) or a range: start:stop:step, where the '
22 1 tkerber
                      '":step" part can be left out - default values are '
23 1 tkerber
                      '0:nimages:1.')
24 1 tkerber
    parser.add_option('-u', '--show-unit-cell', type='int',
25 1 tkerber
                      default=1, metavar='I',
26 1 tkerber
                      help="0: Don't show unit cell.  1: Show unit cell.  "
27 1 tkerber
                      '2: Show all of unit cell.')
28 1 tkerber
    parser.add_option('-r', '--repeat',
29 1 tkerber
                      default='1',
30 1 tkerber
                      help='Repeat unit cell.  Use "-r 2" or "-r 2,3,1".')
31 1 tkerber
    parser.add_option('-R', '--rotations', default='',
32 1 tkerber
                      help='Examples: "-R -90x", "-R 90z,-30x".')
33 1 tkerber
    parser.add_option('-o', '--output', metavar='FILE',
34 1 tkerber
                      help='Write configurations to FILE.')
35 1 tkerber
    parser.add_option('-g', '--graph',
36 1 tkerber
                      metavar='EXPR',
37 1 tkerber
                      help='Plot x,y1,y2,... graph from configurations or '
38 1 tkerber
                      'write data to sdtout in terminal mode.  Use the '
39 1 tkerber
                      'symbols: i, s, d, fmax, e, ekin, A, R, E and F.  See '
40 1 tkerber
                      'https://wiki.fysik.dtu.dk/ase/ase/gui.html#plotting-data '
41 1 tkerber
                      'for more details.')
42 1 tkerber
    parser.add_option('-t', '--terminal',
43 1 tkerber
                      action='store_true',
44 1 tkerber
                      default=False,
45 1 tkerber
                      help='Run in terminal window - no GUI.')
46 1 tkerber
    parser.add_option('--aneb',
47 1 tkerber
                      action='store_true',
48 1 tkerber
                      default=False,
49 1 tkerber
                      help='Read ANEB data.')
50 1 tkerber
    parser.add_option('--interpolate',
51 1 tkerber
                      type='int', metavar='N',
52 1 tkerber
                      help='Interpolate N images between 2 given images.')
53 1 tkerber
    parser.add_option('-b', '--bonds',
54 1 tkerber
                      action='store_true',
55 1 tkerber
                      default=False,
56 1 tkerber
                      help='Draw bonds between atoms.')
57 1 tkerber
    #parser.add_option('--read-pickled-data-from-file',
58 1 tkerber
    #                  type='string', help=SUPPRESS_HELP)
59 1 tkerber
    return parser
60 1 tkerber
61 1 tkerber
def main():
62 1 tkerber
    parser = build_parser()
63 1 tkerber
    opt, args = parser.parse_args()
64 1 tkerber
65 1 tkerber
    try:
66 1 tkerber
        import ase
67 1 tkerber
    except ImportError:
68 1 tkerber
        import sys
69 1 tkerber
        from os.path import dirname, join, pardir
70 1 tkerber
        sys.path.append(join(dirname(__file__), pardir))
71 1 tkerber
72 1 tkerber
    from ase.gui.images import Images
73 1 tkerber
    from ase.atoms import Atoms
74 1 tkerber
75 1 tkerber
    def run(opt, args):
76 1 tkerber
        images = Images()
77 1 tkerber
78 1 tkerber
        if opt.aneb:
79 1 tkerber
            opt.image_number = '-1'
80 1 tkerber
81 1 tkerber
        if len(args) > 0:
82 1 tkerber
            from ase.io import string2index
83 1 tkerber
            images.read(args, string2index(opt.image_number))
84 1 tkerber
        else:
85 1 tkerber
            images.initialize([Atoms()])
86 1 tkerber
87 1 tkerber
        if opt.interpolate:
88 1 tkerber
            images.interpolate(opt.interpolate)
89 1 tkerber
90 1 tkerber
        if opt.aneb:
91 1 tkerber
            images.aneb()
92 1 tkerber
93 1 tkerber
        if opt.repeat != '1':
94 1 tkerber
            r = opt.repeat.split(',')
95 1 tkerber
            if len(r) == 1:
96 1 tkerber
                r = 3 * r
97 1 tkerber
            images.repeat_images([int(c) for c in r])
98 1 tkerber
99 1 tkerber
        if opt.output is not None:
100 1 tkerber
            images.write(opt.output, rotations=opt.rotations,
101 1 tkerber
                        show_unit_cell=opt.show_unit_cell)
102 1 tkerber
            opt.terminal = True
103 1 tkerber
104 1 tkerber
        if opt.terminal:
105 1 tkerber
            if opt.graph is not None:
106 1 tkerber
                data = images.graph(opt.graph)
107 1 tkerber
                for line in data.T:
108 1 tkerber
                    for x in line:
109 1 tkerber
                        print x,
110 1 tkerber
                    print
111 1 tkerber
        else:
112 1 tkerber
            from ase.gui.gui import GUI
113 1 tkerber
            gui = GUI(images, opt.rotations, opt.show_unit_cell, opt.bonds)
114 1 tkerber
            gui.run(opt.graph)
115 1 tkerber
116 1 tkerber
    import traceback
117 1 tkerber
118 1 tkerber
    try:
119 1 tkerber
        run(opt, args)
120 1 tkerber
    except KeyboardInterrupt:
121 1 tkerber
        pass
122 1 tkerber
    except Exception:
123 1 tkerber
        traceback.print_exc()
124 1 tkerber
        print """
125 1 tkerber
An exception occurred!  Please report the issue to
126 1 tkerber
ase-developers@listserv.fysik.dtu.dk - thanks!  Please also report this if
127 1 tkerber
it was a user error, so that a better error message can be provided
128 1 tkerber
next time."""