#!@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()