#!/usr/bin/env python2.7 # -*- coding: UTF-8 no BOM -*- import os,h5py import numpy as np from optparse import OptionParser import damask scriptName = os.path.splitext(os.path.basename(__file__))[0] scriptID = ' '.join([scriptName,damask.version]) #-------------------------------------------------------------------------------------------------- # MAIN #-------------------------------------------------------------------------------------------------- parser = OptionParser(option_class=damask.extendableOption, usage='%prog [dream3dfile[s]]', description = """ Convert DREAM3D file to ASCIItable. Works for 3D datasets, but, hey, its not called DREAM2D ;) """, version = scriptID) parser.add_option('-d','--data', dest = 'data', action = 'extend', metavar = '', help = 'data to extract from DREAM3D file') parser.add_option('-c','--container', dest = 'container', metavar = 'string', help = 'root container(group) in which data is stored [%default]') parser.set_defaults(container="ImageDataContainer", ) (options, filenames) = parser.parse_args() if options.data is None: parser.error('No data selected') rootDir ='DataContainers/'+options.container # --- loop over input files ------------------------------------------------------------------------- if filenames == []: parser.error('no input file specified.') for name in filenames: try: table = damask.ASCIItable(outname = os.path.splitext(name)[0]+'.txt', buffered = False ) except: continue damask.util.report(scriptName,name) inFile = h5py.File(name, 'r') try: grid = inFile[rootDir+'/_SIMPL_GEOMETRY/DIMENSIONS'][...] except: damask.util.croak('Group {} not found'.format(options.container)) table.close(dismiss = True) continue # --- read comments -------------------------------------------------------------------------------- coords = (np.mgrid[0:grid[2], 0:grid[1], 0: grid[0]]).reshape(3, -1).T table.data = (np.fliplr(coords)*inFile[rootDir+'/_SIMPL_GEOMETRY/SPACING'][...] \ + inFile[rootDir+'/_SIMPL_GEOMETRY/ORIGIN'][...] \ + inFile[rootDir+'/_SIMPL_GEOMETRY/SPACING'][...]*0.5) labels = ['1_pos','2_pos','3_pos'] for data in options.data: try: l = np.prod(inFile[rootDir+'/CellData/'+data].shape[3:]) labels+=['{}_{}'.format(i+1,data.replace(' ','')) for i in range(l)] if l >1 else [data.replace(' ','')] except KeyError: damask.util.croak('Data {} not found'.format(data)) pass table.data = np.hstack((table.data, inFile[rootDir+'/CellData/'+data][...].reshape(grid.prod(),l))) # ------------------------------------------ assemble header --------------------------------------- table.labels_clear() table.labels_append(labels,reset = True) table.head_write() # ------------------------------------------ finalize output --------------------------------------- table.data_writeArray() table.close()