Files
dev/script/__Lib/diffcalc_old/startup/_demo.py
2019-03-20 13:52:00 +01:00

139 lines
4.1 KiB
Python

'''
Created on 19 Feb 2017
@author: zrb13439
'''
import diffcmd.ipython
try:
__IPYTHON__ # @UndefinedVariable
IPYTHON = True
except NameError:
IPYTHON = False
GEOMETRIES = ['sixc', 'fivec', 'fourc', 'i16']
def echo(cmd):
print "\n>>> " + str(cmd)
def print_heading(s):
print '\n' + '=' * len(s) + '\n' + s + '\n' + '=' * len(s)
class Demo(object):
def __init__(self, namespace, geometry):
self.namespace = namespace
assert geometry in GEOMETRIES
self.geometry = geometry
def all(self):
self.orient()
self.constrain()
self.scan()
def orient(self):
print_heading('Orientation demo')
self.remove_test_ubcalc()
pos_cmd_001 = {
'sixc': 'pos sixc [0 60 0 30 90 0]', # mu, delta, gam, eta, chi, phi
'i16': 'pos sixc [0 90 30 0 60 0]', # phi, chi, eta, mu, delta, gam
'fivec': 'pos fivec [60 0 30 90 0]',
'fourc': 'pos fourc [60 30 90 0]'
}[self.geometry]
pos_cmd_011 = {
'sixc': 'pos sixc [0 90 0 45 45 90]', # mu, delta, gam, eta, chi, phi
'i16': 'pos sixc [90 45 45 0 90 0]', # phi, chi, eta, mu, delta, gam
'fivec': 'pos fivec [90 0 45 45 90]',
'fourc': 'pos fourc [90 45 45 90]'
}[self.geometry]
self.echorun_magiccmd_list([
'help ub',
'pos wl 1',
"newub 'test'",
"setlat 'cubic' 1 1 1 90 90 90",
'ub',
'c2th [0 0 1]',
pos_cmd_001,
'addref [0 0 1]',
'c2th [0 1 1]',
pos_cmd_011,
'addref [0 1 1]',
'ub',
'checkub'])
def constrain(self):
print_heading('Constraint demo')
con_qaz_cmd = '' if self.geometry == 'fourc' else 'con qaz 90'
con_mu_cmd = 'con mu 0' if self.geometry in ('sixc', 'i16') else ''
self.echorun_magiccmd_list([
'help hkl',
con_qaz_cmd,
'con a_eq_b',
con_mu_cmd,
'con',
'setmin delta 0',
'setmin chi 0'])
def scan(self):
print_heading('Scanning demo')
diff_name = 'sixc' if self.geometry == 'i16' else self.geometry
self.echorun_magiccmd_list([
'pos hkl [1 0 0]',
'scan delta 40 90 10 hkl ct 1',
'pos hkl [0 1 0]',
'scan h 0 1 .2 k l %s ct 1' % diff_name,
'con psi',
'scan psi 0 90 10 hkl [1 0 1] eta chi phi ct .1'])
def echorun_magiccmd_list(self, magic_cmd_list):
for cmd in magic_cmd_list:
self.echorun_magiccmd(cmd)
def remove_test_ubcalc(self):
try:
eval("rmub('test')", self.namespace)
except (OSError, KeyError):
pass
def echorun_magiccmd(self, magic_cmd):
if IPYTHON:
from IPython import get_ipython
echo(magic_cmd)
get_ipython().magic(magic_cmd)
else: # Python
# python's help is interactive. Handle specially
if magic_cmd == 'help ub':
echo("help ub")
exec("print ub.__doc__", self.namespace)
return
if magic_cmd == 'help hkl':
echo("help(hkl)")
exec("print hkl.__doc__", self.namespace)
return
# Echo the Python version of the magic command
tokens = diffcmd.ipython.tokenify(magic_cmd)
if not tokens:
return
python_cmd = tokens.pop(0) + '(' + ', '.join(tokens) + ')'
python_cmd = python_cmd.replace('[, ', '[')
python_cmd = python_cmd.replace(',]', ']')
python_cmd = python_cmd.replace(', ]', ']')
echo(python_cmd)
# Run the Python version of the magic command
elements = diffcmd.ipython.parse(magic_cmd, self.namespace)
func = elements.pop(0)
result = func(*elements)
if result:
print result