Source code for omfit_classes.omfit_spider
try:
# framework is running
from .startup_choice import *
except ImportError as _excp:
# class is imported by itself
if (
'attempted relative import with no known parent package' in str(_excp)
or 'No module named \'omfit_classes\'' in str(_excp)
or "No module named '__main__.startup_choice'" in str(_excp)
):
from startup_choice import *
else:
raise
from omfit_classes.omfit_ascii import OMFITascii
__all__ = ['OMFITspider_bonfit']
[docs]class OMFITspider_bonfit(SortedDict, OMFITascii):
r"""
OMFIT class used to interface with SPIDER equilibirum bonfit (boundary fit) input file
:param filename: filename passed to OMFITascii class
:param \**kw: keyword dictionary passed to OMFITascii class
"""
def __init__(self, filename, **kw):
SortedDict.__init__(self)
OMFITascii.__init__(self, filename, **kw)
self.dynaLoad = True
[docs] @dynaLoad
def load(self):
with open(self.filename, 'r') as f:
lines = f.read()
llines = lines.strip().split('\n')
llines = [l.split('!')[0] for l in llines]
ilines = iter(llines)
def readline(ilines):
while True:
tmp = ilines.next().strip()
if tmp:
return tmp
self['w1'] = np.array(list(map(float, readline(ilines).split())))
self['w2'] = np.array(list(map(float, readline(ilines).split())))
n = int(readline(ilines).split()[0])
self['R'] = []
self['Z'] = []
for k in range(n):
r, z = list(map(float, readline(ilines).split()))
self['R'].append(r)
self['Z'].append(z)
self['R'] = np.array(self['R'])
self['Z'] = np.array(self['Z'])
n = int(readline(ilines).split()[0])
self['control_points'] = {}
for k in range(n):
r, z = list(map(float, readline(ilines).split()))
self['control_points'][k] = np.array([r, z])
self['xpoint'] = np.array(list(map(float, readline(ilines).split())))
self['flux'] = float(readline(ilines).split()[0])
self['xpoint2'] = np.array(list(map(float, readline(ilines).split())))
[docs] @dynaSave
def save(self):
txt = []
for item in self:
if item == 'control_points':
txt.append('%d' % len(self[item]))
for k in self[item]:
txt.append(' '.join(list(map(str, self[item][k]))))
elif item == 'R':
txt.append('%d' % len(self['R']))
for r, z in zip(self['R'], self['Z']):
txt.append('%s %s' % (r, z))
elif item == 'Z':
continue
elif item == 'flux':
txt.append(str(self[item]))
else:
txt.append(' '.join(list(map(str, self[item]))))
with open(self.filename, 'w') as f:
f.write('\n'.join(txt))
[docs] def plot(self, ax=None):
if ax is None:
from matplotlib import pyplot
ax = pyplot.gca()
ax.plot(self['R'], self['Z'], 'r')
for cp in self['control_points'].values():
ax.plot(cp[0], cp[1], 'ro')
ax.plot(self['xpoint'][0], self['xpoint'][1], '+r', ms=10)
ax.plot(self['xpoint2'][0], self['xpoint2'][1], '+r', ms=10)
ax.set_aspect('equal')