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