#!@PYTHON@ # # Creates an Analysis matrix for a number of nanotubes (n,m) with stress files import sys, random, math wrout = sys.stdout.write wrerr = sys.stdout.write # check arguments if len(sys.argv) < 2: print "Usage: "+sys.argv[0]+" " sys.exit(1) if sys.argv[1] in sys.argv[2]: print "Please state two different files!" sys.exit(1) input = open(sys.argv[1], "r") output = open(sys.argv[2], "w") # parse lines into array chiralities=[ ] runs=[ ] defects=[ ] values=[ ] for line in input: if "#" in line: continue entries=line.split() if not entries[0] in chiralities: chiralities.append(entries[0]) if not entries[1] in runs: runs.append(entries[1]) if not entries[2] in defects: defects.append(entries[2]) values.append([entries[0], entries[1], entries[2], entries[3:]]) for n in range(len(values[-1])): wrout("%s\t" % (values[-1][n])) wrout("\n") input.close() # sum values avg_values=[ ] for i in range(len(values)): if (values[i][1] == runs[0]): tmp=[ ] for j in range(len(values[i][3])): # create array initialised to 0 tmp.append(0.) avg_values.append([values[i][0],values[i][2],tmp[:]]) # look for corresponding index to i in avg_value j=0 while (j < len(avg_values)): if ((avg_values[j][0] == values[i][0]) and (avg_values[j][1] == values[i][2])): break j+=1 if j < len(avg_values): for n in range(len(values[i][3])/2): avg_values[j][2][2*n]+=float(values[i][3][2*n]) # value avg_values[j][2][2*n+1]+=float(values[i][3][2*n+1])*float(values[i][3][2*n+1]) # value else: wrerr("Cannot sort in values for %s, %s, %s!\n" % (values[i][0], values[i][1], values[i][2])) # output values oldm=-1 output.write("#n\tm\tdefect\tPoss\tError\tYoungPot\tError\tYoungLag\tError\tPossLag\tError\tYoungLog\tError\tPossLog\tError\tEModulus\tError\n") for i in range(len(avg_values)): chiral=avg_values[i][0].split("-") if oldm != chiral[1]: if oldm != -1: output.write("\n\n") oldm=chiral[1] output.write("%s\t%s\t%s\t" % (chiral[0],chiral[1],avg_values[i][1])) for n in range(0,len(avg_values[i][2])/2): output.write("%s\t%s\t" % (avg_values[i][2][2*n]/len(runs),math.sqrt(avg_values[i][2][2*n+1]))) output.write("\n") output.close()