root / ase / gui / ag.py @ 18
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.""" |