6 KFILE='./data/spring-constants'
7 AVGFILE='./data/averaged-data'
11 def read_raw(Kcuts=KCUTS, datafile=DATAFILE):
14 for i in range(len(Kcuts)+1):
16 for line in file(datafile, 'r'):
18 continue # ignore comments
19 fields = line.strip().split('\t')
20 force = float(fields[0])
21 rate = float(fields[1])
22 spring = float(fields[2])
25 while ispring < len(Kcuts) and spring > Kcuts[ispring]:
27 Ks[ispring].append(spring)
28 if rate not in FofV.keys():
30 for i in range(len(Ks)):
32 FofV[rate][ispring].append(force)
35 def write_k_file(Ks, kfile=KFILE):
40 for i in range(len(Ks)):
41 K = numpy.array(Ks[i])
47 continue # poor calibration bumps for the older cantilevers
48 print >> kf, "K(%d) = %g +/- %g, (# %d)" \
49 % (i, avgK[i], stdK[i], numK[i])
51 return (avgK, stdK, numK)
53 def write_average_file(FofV, avgK, avgfile=AVGFILE):
56 af = file(AVGFILE, 'w')
57 print >> af, '#'+'\t'.join(\
58 ['Pulling speed (nm/s)','Spring constant (pN/nm)',
59 'Mean force (pN)','Std. force (pN)','Events (#)'])
61 for i,k in enumerate(avgK):
63 continue # poor calibration bumps for the older cantilevers
64 F = numpy.array(FofV[V][i])
67 outs= [V, k, F.mean(), F.std(), len(F)]
68 souts = ["%.2f" % (x) for x in outs]
69 souts[-1] = "%d" % outs[-1] # special treatment for the integer
70 print >> af, '\t'.join(souts)
73 if __name__ == '__main__':
75 avgK,stdK,numK = write_k_file(Ks)
76 write_average_file(FofV, avgK)