# grab all current files, voltage files
# from voltage file determine where cutoff steps are
# for each current file, find maximum activation, then for 2nd step fraction of that activation
# print voltage, delay time, fraction

from sys import argv
from glob import glob
import numpy as np
from scipy.optimize import curve_fit



prefix = 'RECOVERY'
OUTFILE=None
ACTTOG = 1
DIRECTION=1 # 1 = outward, 0 = inward
SKIP=int(0.005/0.0001) # for excluding capacitive current
#print SKIP
EREV=-90
if len(argv) > 1:
	for args in argv[1:]:
		temp = args.split('=')
		if len(temp) == 2:
			try: 
				exec(args)
			except:
				exec('%s =\'%s\'' % (temp[0],temp[1]))
		
files =  glob('*%s*.dat' %(prefix))
ACTTOG=int(ACTTOG)

def triexponential(t,tau1,tau2,tau3,amp1,amp2):
	out = amp1*(1.0-np.exp(-t/tau1))*np.exp(-t/tau2)+amp2*(1.0-np.exp(-t/tau1))*np.exp(-t/tau3)
	return out

def boltz(v,vhalf,vslope,A):
	out = A/(1.0+np.exp(-(v-vhalf)/vslope))
	return out

volts = []
times = []
peakcurrs = []
endcurrs = []
taus = []
for things in files:
	time, current, voltage = np.loadtxt(things,unpack=True,usecols=[0,1,2])
	dt = time[1]-time[0]
	size = len(voltage)
	edges = [i for i in range(size-1) if abs(voltage[i]-voltage[i+1]) > 0.0025] #checks when voltage steps at least 2.5 mV
	if len(edges) < 2:
		continue
	edges.append(size-1)
	print edges, current[edges[0]]
	quit()
	vval = voltage[int(edges[2+ACTTOG]/2+edges[3+ACTTOG]/2)]
	tval = 1e9
	for j in range(len(edges)-1):
		temp = edges[j+1] - edges[j]
		if  temp < tval:
			tval = temp
	volts.append(vval*1000.0)
	times.append(tval*dt*1000)
	delay = time[edges[2]]
	
	if DIRECTION:
		peak1 = np.max(current[edges[1]+SKIP:edges[2]])
		peak2 = np.max(current[edges[3]+SKIP:edges[4]])
	else:
		peak1 = np.min(current[edges[1]+SKIP:edges[2]])
		peak2 = np.min(current[edges[3]+SKIP:edges[4]])

	
	end1 = np.mean(current[edges[2]-11:edges[2]-1])
	end2 = np.mean(current[edges[4]-11:edges[4]-1])
	
	
	peakcurrs.append([peak1,peak2])
	endcurrs.append([end1,end2])
	
	print tval*dt*1000, peak1, peak2, end1, end2
	#print diffcur,difftime
		
		
	#print vval*1000, peak-end
	#for p in popt:
	#	print p,
	#print


nsteps = len(volts)

diffcur = []

for i in range(nsteps):
	
	maxcurr = peakcurrs[i][0]-endcurrs[i][1]
	postcurr = peakcurrs[i][1]-endcurrs[i][1]
	precurr = peakcurrs[i][1]-endcurrs[i][0]
	
	preact = precurr/maxcurr
	postact = postcurr/maxcurr
	
	maxrecov = 1.0-preact
	recovered = 1.0-postact
	
	frac_recovered = recovered/maxrecov
	diffcur.append(frac_recovered)
	
	
data = np.array([times, diffcur,volts])

data = np.transpose(data)

data = np.sort(data,axis=0)


print data

if OUTFILE != None:
	try:
		fp = open(OUTFILE,'w')
	except:
		print 'OUTFILE must be a string, ideally <something>.dat'
		quit()
	
	for j in range(nsteps):
		fp.write('%e  %e  %e\n' % (data[j][0],data[j][1],data[j][2]))
	fp.close()
	
else:
	for j in range(nsteps):
		print '%e  %e  %e' % (data[j][0],data[j][1],data[j][2])



