proc get_EPSP_amp() { local baseline_t, baseline_pts, EPSP_graph, EPSP_trace, IPSP_graph, IPSP_trace

	baseline_t = 5	// milliseconds
	baseline_pts = baseline_t * steps_per_ms
	
	EPSP_graph = 0
	EPSP_trace = ExINPUT
	IPSP_graph = 1
	IPSP_trace = 0

	max_Ex_EPSP_amp = get_graph_max_amp(EPSP_graph, EPSP_trace, baseline_pts)
	max_Inh_EPSP_amp = get_graph_max_amp(IPSP_graph, IPSP_trace, baseline_pts)


	//return max_Ex_EPSP_amp max_Inh_EPSP_amp
	//return

} // End getEPSPamp



objref Xvec, Yvec
func get_graph_max_amp() { local graph_idx, graph_line_nr, baseline_pts, baseline_avg, max_val, graph_size, amplitude
	// Function that gets maximal AMPLITUDE from a plot. Returned value will thus be maximal
	// value subtracted from the first 'baseline_pts'

	graph_idx = $1		// Window/Graph index
	graph_line_nr = $2	// Line index within a graph
	baseline_pts = $3	// # of points in the beggining of the line to be considered as baseline

	// get 'line_nr' trace from Graph['graph_idx']
	Xvec = new Vector()
	Yvec = new Vector()
	Graph[graph_idx].getline(graph_line_nr, Xvec, Yvec)	// Gets 2nd line from plot

	// Get baseline of graph, FROM FIRST 'baseline_t' milliseconds, so that true EPSP amplitude is computed
	baseline_avg = 0	
	for (i = 0; i < baseline_pts; i = i +1) {
		baseline_avg = baseline_avg + Yvec.x(i)
	}
	baseline_avg = baseline_avg / baseline_pts

	max_val = Yvec.x(0)	// Just initializes max_val as first element of graph
	graph_size = Yvec.size()
	for (i=0; i < graph_size; i = i+1) {
		
		if (Yvec.x(i) > max_val) {
			max_val = Yvec.x(i)
		}
		//print Yvec.x(i)
	}

	amplitude = max_val - baseline_avg
	return amplitude

} // End get_graph_max_amp



objref slope_indep_vec, temp_data_vec, temp_res_data_vec
slope_indep_vec = new Vector(t_slope_window/dt)
slope_indep_vec.indgen()
temp_data_vec = new Vector(t_slope_window/dt)
temp_res_data_vec = new Vector(t_slope_window/dt)
slope_p1=1
slope_p2=0

func get_EPSP_slope() { local pstart, pend, pwindow, pstep, maxslope, xmaxslope, i


	// INPUTS (un time)
	//tstart = $1
	//tend = $2
	//twindow = $3
	//tstep = $4

	// Converts variable above to points
	pstart = int($1/dt)
	pend = int($2/dt)
	pwindow = int($3/dt)
	pstep = int($4/dt)

	// Computes max slope
	maxslope=0
	xmaxslope=0
	for (i = pstart; i <= pend; i = i + pstep) {
		
		slope = (v_trace.x(i+pwindow-1) - v_trace.x(i))/((pwindow-1)*dt)

		
//		temp_data_vec.copy(v_trace, i, i+pwindow-1)
//		temp_data_vec.fit(temp_res_data_vec, "line", slope_indep_vec, &slope_p1, &slope_p2)
//		slope = slope_p1

		
		if (slope > maxslope) {
			maxslope = slope
			xmaxslope = i
		}
		// If window is getting points above threshold, breaks the loop (because this should mean AP, thus EPSP has passed already)
		if (v_trace.x[i+pwindow-1] > Ex[ExINPUT].soma.Thr_ExIAF ) { break }	// This exits the loop
	
	}

	// Draws the slope line
	if (0) {

		Graph[0].beginline(1,2)
		Graph[0].line(xmaxslope*dt, v_trace.x[xmaxslope]+400)			// (x,y)
		Graph[0].line((xmaxslope+pwindow-1)*dt, v_trace.x[xmaxslope+pwindow-1]+400) 
		Graph[0].flush()
	}



	return maxslope
}