adopted recent changes to API in ASCIItable.

This commit is contained in:
Philip Eisenlohr 2015-08-12 18:56:40 +00:00
parent 31a6ac328d
commit 8217fdb115
3 changed files with 51 additions and 59 deletions

View File

@ -30,13 +30,14 @@ parser.set_defaults(data = True,
# --- loop over input files -------------------------------------------------------------------------
if filenames == []: filenames = ['STDIN']
if filenames == []: filenames = [None]
for name in filenames:
if not (name == 'STDIN' or os.path.exists(name)): continue
table = damask.ASCIItable(name = name, outname = None,
buffered = False, labeled = False, readonly = True)
table.croak('\033[1m'+scriptName+'\033[0m'+(': '+name if name != 'STDIN' else ''))
try:
table = damask.ASCIItable(name = name,
buffered = False, labeled = False, readonly = True)
except: continue
table.croak('\033[1m'+scriptName+'\033[0m'+(': '+name if name else ''))
# --- interpret header ----------------------------------------------------------------------------
@ -86,16 +87,7 @@ for name in filenames:
# --- write data -----------------------------------------------------------------------------------
if name == 'STDIN':
writer = vtk.vtkRectilinearGridWriter()
writer.WriteToOutputStringOn()
writer.SetFileTypeToASCII()
writer.SetHeader('# powered by '+scriptID)
if vtk.VTK_MAJOR_VERSION <= 5: writer.SetInput(grid)
else: writer.SetInputData(grid)
writer.Write()
sys.stdout.write(writer.GetOutputString()[0:writer.GetOutputStringLength()])
else:
if name:
(dir,filename) = os.path.split(name)
writer = vtk.vtkXMLRectilinearGridWriter()
writer.SetDataModeToBinary()
@ -105,5 +97,14 @@ for name in filenames:
if vtk.VTK_MAJOR_VERSION <= 5: writer.SetInput(grid)
else: writer.SetInputData(grid)
writer.Write()
else:
writer = vtk.vtkRectilinearGridWriter()
writer.WriteToOutputStringOn()
writer.SetFileTypeToASCII()
writer.SetHeader('# powered by '+scriptID)
if vtk.VTK_MAJOR_VERSION <= 5: writer.SetInput(grid)
else: writer.SetInputData(grid)
writer.Write()
sys.stdout.write(writer.GetOutputString()[0:writer.GetOutputStringLength()])
table.close()

View File

@ -32,13 +32,14 @@ parser.set_defaults(homogenization = 1,
# --- loop over input files -------------------------------------------------------------------------
if filenames == []: filenames = ['STDIN']
if filenames == []: filenames = [None]
for name in filenames:
if not (name == 'STDIN' or os.path.exists(name)): continue
table = damask.ASCIItable(name = name, outname = os.path.splitext(name)[0] +'.geom',
buffered = False, labeled = False)
table.croak('\033[1m'+scriptName+'\033[0m'+(': '+name if name != 'STDIN' else ''))
try:
table = damask.ASCIItable(name = name, outname = os.path.splitext(name)[0] +'.geom',
buffered = False, labeled = False)
except: continue
table.croak('\033[1m'+scriptName+'\033[0m'+(': '+name if name else ''))
# --- read image ------------------------------------------------------------------------------------
@ -48,7 +49,7 @@ for name in filenames:
while True:
try:
img.seek(slice) # advance to slice
layer = np.expand_dims(1+np.array(img,dtype='uint16'),axis = 0) # read image layer
layer = np.expand_dims(1+np.array(img,dtype = 'uint16'),axis = 0) # read image layer
microstructure = layer if slice == 0 else np.vstack((microstructure,layer)) # add to microstructure data
slice += 1 # advance to next slice
except EOFError:

View File

@ -14,21 +14,9 @@ scriptName = os.path.splitext(scriptID.split()[1])[0]
# --------------------------------------------------------------------
# MAIN
# --------------------------------------------------------------------
identifiers = {
'grid': ['a','b','c'],
'size': ['x','y','z'],
'origin': ['x','y','z'],
}
mappings = {
'grid': lambda x: int(x),
'size': lambda x: float(x),
'origin': lambda x: float(x),
'homogenization': lambda x: int(x),
'microstructures': lambda x: int(x),
}
parser = OptionParser(option_class=damask.extendableOption, usage='%prog options [file[s]]', description = """
Generate geometry description and material configuration from position, phase, and orientation data.
Generate geometry description and material configuration from position, phase, and orientation (or microstructure) data.
""", version = scriptID)
@ -40,6 +28,10 @@ parser.add_option('--phase',
dest = 'phase',
type = 'string', metavar = 'string',
help = 'phase label')
parser.add_option('--microstructure',
dest = 'microstructure',
type = 'string', metavar = 'string',
help = 'microstructure label')
parser.add_option('-t', '--tolerance',
dest = 'tolerance',
type = 'float', metavar = 'float',
@ -106,9 +98,10 @@ input = [options.eulers != None,
options.quaternion != None,
]
if np.sum(input) != 1: parser.error('needs exactly one orientation input format...')
if np.sum(input) != 1 and options.microstructure == None:
parser.error('need either microstructure label or exactly one orientation input format.')
if options.axes != None and not set(options.axes).issubset(set(['x','+x','-x','y','+y','-y','z','+z','-z'])):
parser.error('invalid axes {axes[0]} {axes[1]} {axes[2]}'.format(axes=options.axes))
parser.error('invalid axes {} {} {}.'.format(*options.axes))
(label,dim,inputtype) = [(options.eulers,3,'eulers'),
([options.a,options.b,options.c],[3,3,3],'frame'),
@ -120,13 +113,14 @@ options.tolerance *= toRadians
# --- loop over input files -------------------------------------------------------------------------
if filenames == []: filenames = ['STDIN']
if filenames == []: filenames = [None]
for name in filenames:
if not (name == 'STDIN' or os.path.exists(name)): continue
table = damask.ASCIItable(name = name, outname = os.path.splitext(name)[0] + '.geom',
buffered = False)
table.croak('\033[1m'+scriptName+'\033[0m'+(': '+name if name != 'STDIN' else ''))
try:
table = damask.ASCIItable(name = name, outname = os.path.splitext(name)[0] + '.geom',
buffered = False)
except: continue
table.croak('\033[1m'+scriptName+'\033[0m'+(': '+name if name else ''))
# ------------------------------------------ read head ---------------------------------------
@ -135,8 +129,8 @@ for name in filenames:
# ------------------------------------------ sanity checks ---------------------------------------
errors = []
if table.label_dimension(options.coordinates) != 2:
errors.append('coordinates {} need to have two dimensions.'.format(options.coordinates))
if not 3 >= table.label_dimension(options.coordinates) >= 2: # TODO need to deal with 3D case!!
errors.append('coordinates {} need to have two or three dimensions.'.format(options.coordinates))
if not np.all(table.label_dimension(label) == dim):
errors.append('orientation {} needs to have dimension {}.'.format(label,dim))
if options.phase != None and table.label_dimension(options.phase) != 1:
@ -174,7 +168,7 @@ for name in filenames:
KDTree = scipy.spatial.KDTree((table.data[:,:2]-np.array([coordsX[0],coordsY[0]])) \
/ np.array([dX,dY])) # build KDTree with dX = dY = 1
microstructure = np.zeros(nX*nY,dtype='uint32') # initialize empty microstructure
microstructure = np.zeros(nX*nY,dtype = 'uint32') # initialize empty microstructure
symQuats = [] # empty list of sym equiv orientations
phases = [] # empty list of phase info
nGrains = 0 # counter for detected grains
@ -185,24 +179,20 @@ for name in filenames:
myData = table.data[index[myRank]]
mySym = options.symmetry[min(int(myData[colPhase]),len(options.symmetry))-1] # select symmetry from option (take last specified option for all with higher index)
if inputtype == 'eulers':
o = damask.Orientation(Eulers=toRadians*\
np.array(map(float,myData[colOri:colOri+3])),
symmetry=mySym).reduced()
o = damask.Orientation(Eulers = np.array(map(float,myData[colOri:colOri+3]))*toRadians,
symmetry = mySym).reduced()
elif inputtype == 'matrix':
o = damask.Orientation(matrix=\
np.array([map(float,myData[colOri:colOri+9])]).reshape(3,3).transpose(),
symmetry=mySym).reduced()
o = damask.Orientation(matrix = np.array([map(float,myData[colOri:colOri+9])]).reshape(3,3).transpose(),
symmetry = mySym).reduced()
elif inputtype == 'frame':
o = damask.Orientation(matrix=\
np.array([map(float,myData[colOri[0]:colOri[0]+3] + \
myData[colOri[1]:colOri[1]+3] + \
myData[colOri[2]:colOri[2]+3]
)]).reshape(3,3),
symmetry=mySym).reduced()
o = damask.Orientation(matrix = np.array([map(float,myData[colOri[0]:colOri[0]+3] + \
myData[colOri[1]:colOri[1]+3] + \
myData[colOri[2]:colOri[2]+3]
)]).reshape(3,3),
symmetry = mySym).reduced()
elif inputtype == 'quaternion':
o = damask.Orientation(quaternion=\
np.array(map(float,myData[colOri:colOri+4])),
symmetry=mySym).reduced()
o = damask.Orientation(quaternion = np.array(map(float,myData[colOri:colOri+4])),
symmetry = mySym).reduced()
oInv = o.quaternion.conjugated()
neighbors = KDTree.query_ball_point([x,y], 3) # search points within radius