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