From 37792f67df9ed58d573925136df4babc5249f0e9 Mon Sep 17 00:00:00 2001 From: Philip Eisenlohr Date: Sat, 13 Jun 2015 11:55:20 +0000 Subject: [PATCH] automatically figure dimension of labels to tag. --- processing/post/tagLabel.py | 93 +++++++++++++------------------------ 1 file changed, 33 insertions(+), 60 deletions(-) diff --git a/processing/post/tagLabel.py b/processing/post/tagLabel.py index b08ae0d70..aa0699379 100755 --- a/processing/post/tagLabel.py +++ b/processing/post/tagLabel.py @@ -17,74 +17,48 @@ Tag scalar, vectorial, and/or tensorial data header labels by specified suffix. """, version = scriptID) -parser.add_option('-l','--tag', dest='tag', \ +parser.add_option('-t','--tag', dest='tag', metavar='string', help='tag to use as suffix for labels') -parser.add_option('-v','--vector', dest='vector', action='extend', \ - help='heading of columns containing 3x1 vector field values') -parser.add_option('-t','--tensor', dest='tensor', action='extend', \ - help='heading of columns containing 3x3 tensor field values') -parser.add_option('-s','--special', dest='special', action='extend', \ - help='heading of columns containing field values of special dimension') -parser.add_option('-d','--dimension', dest='N', type='int', \ - help='dimension of special field values [%default]') +parser.add_option('-l','--label', dest='label', action='extend', metavar='', + help='columns to tag') parser.set_defaults(tag = '') -parser.set_defaults(vector = []) -parser.set_defaults(tensor = []) -parser.set_defaults(special = []) -parser.set_defaults(N = 1) +parser.set_defaults(label = []) (options,filenames) = parser.parse_args() -datainfo = { # list of requested labels per datatype - 'vector': {'len':3, - 'label':[]}, - 'tensor': {'len':9, - 'label':[]}, - 'special': {'len':options.N, - 'label':[]}, - } - - -if options.vector != None: datainfo['vector']['label'] += options.vector -if options.tensor != None: datainfo['tensor']['label'] += options.tensor -if options.special != None: datainfo['special']['label'] += options.special - -# ------------------------------------------ setup file handles ------------------------------------ -files = [] +# --- loop over input files ------------------------------------------------------------------------- if filenames == []: - files.append({'name':'STDIN', 'input':sys.stdin, 'output':sys.stdout, 'croak':sys.stderr}) -else: - for name in filenames: - if os.path.exists(name): - files.append({'name':name, 'input':open(name), 'output':open(name+'_tmp','w'), 'croak':sys.stderr}) + filenames = ['STDIN'] -# ------------------------------------------ loop over input files --------------------------------------- +for name in filenames: + if name == 'STDIN': + file = {'name':'STDIN', 'input':sys.stdin, 'output':sys.stdout, 'croak':sys.stderr} + file['croak'].write('\033[1m'+scriptName+'\033[0m\n') + else: + if not os.path.exists(name): continue + file = {'name':name, 'input':open(name), 'output':open(name+'_tmp','w'), 'croak':sys.stderr} + file['croak'].write('\033[1m'+scriptName+'\033[0m: '+file['name']+'\n') -for file in files: - if file['name'] != 'STDIN': file['croak'].write('\033[1m'+scriptName+'\033[0m: '+file['name']+'\n') - else: file['croak'].write('\033[1m'+scriptName+'\033[0m\n') - - table = damask.ASCIItable(file['input'],file['output'],False) # make unbuffered ASCII_table - table.head_read() # read ASCII header info - table.info_append(string.replace('$Id$','\n','\\n') + \ - '\t' + ' '.join(sys.argv[1:])) + table = damask.ASCIItable(file['input'],file['output'],buffered=False) # make unbuffered ASCII_table + table.head_read() # read ASCII header info + table.info_append(scriptID + '\t' + ' '.join(sys.argv[1:])) # ------------------------------------------ process labels --------------------------------------- - if options.vector == [] and options.tensor == [] and options.special == []: # default to tagging all labels + if options.label == []: # default to tagging all labels for i,label in enumerate(table.labels): table.labels[i] += options.tag - else: # tag individual candidates - for datatype,info in datainfo.items(): - for label in info['label']: - key = '1_%s'%label if info['len']>1 else label - if key not in table.labels: - file['croak'].write('column %s not found...\n'%key) - else: - offset = table.labels.index(key) - for i in xrange(info['len']): - table.labels[offset+i] += options.tag + else: # tag individual candidates + indices = table.label_index (options.label) + dimensions = table.label_dimension(options.label) + print indices,dimensions + for i,index in enumerate(indices): + if index == -1: + file['croak'].write('label %s not present...\n'%options.label[i]) + else: + for j in xrange(dimensions[i]): + table.labels[index+j] += options.tag # ------------------------------------------ assemble header --------------------------------------- @@ -93,14 +67,13 @@ for file in files: # ------------------------------------------ process data --------------------------------------- outputAlive = True - while outputAlive and table.data_read(): # read next data line of ASCII table - outputAlive = table.data_write() # output processed line + while outputAlive and table.data_read(): # read next data line of ASCII table + outputAlive = table.data_write() # output processed line # ------------------------------------------ output result --------------------------------------- - outputAlive and table.output_flush() # just in case of buffered ASCII table + outputAlive and table.output_flush() # just in case of buffered ASCII table - table.input_close() # close input ASCII table + table.close() # close ASCII tables if file['name'] != 'STDIN': - file['output'].close # close output ASCII table - os.rename(file['name']+'_tmp',file['name']) # overwrite old one with tmp new + os.rename(file['name']+'_tmp',file['name']) # overwrite old one with tmp new