pi=3.1415926535897932384626433832795
spineArea=1.2

proc calc_spines() {local aveDiam,radius,spineLength,alpha,corrF,n_points,R,r,side,A_shaft,A_spines,n_n,neuronArea,count,n_spines
	n_spines = 0
	
	if (count_spines != 0) {
		aveDiam = 0.0
		count = 0
		for (n_n) {
			aveDiam += diam(n_n)
			count += 1
		}
		
		aveDiam /= count
		radius = aveDiam/2.0
		spineLength = 1.25
		alpha = my_asin_asin(radius/(radius+spineLength))
		corrF = pi/(pi-2.0*alpha)
		if (debug_mode) printf("\nCorrection factor for hidden spines in section %s: %f\n",secname(),corrF)
		count_spines *= corrF
		if (debug_mode) n_spines += count_spines
	}
	if (debug_mode) printf("Spine density in section %s=%f/um\n",secname(),count_spines/L)
	// get the total area of the spines:
	A_spines=count_spines*spineArea
		
	// get the area of the shaft:
	A_shaft=0.0
	for (n_points=0;n_points<n3d()-1;n_points+=1) {
	// get the surface area of a truncated cone
	// between neighbouring points:
		height=arc3d(n_points+1)-arc3d(n_points)
		R=diam3d(n_points+1)/2.0
		r=diam3d(n_points)/2.0
		side = sqrt((R-r)*(R-r)+height*height)
		A_shaft+=pi*side*(R+r)
	}
	scale_spines=(A_shaft+A_spines)/A_shaft
	if (debug_mode) {
		neuronArea=0.0
		for (n_n) {
			neuronArea+=area(n_n)
		}
	}
}

