Problem Mapping segments to 3D: Possible Range variable bug?
Posted: Tue Dec 01, 2009 4:52 pm
I was trying to use map_segments_to_3d() procedure originally writen by Terrence Brannon, to assign each nseg a unique 3D address. this is the code:
but when I test it with the following code
the result show that although the algorithm seems correct but the range variables x,y,z defined in d3 mechanism, behave buggy.
results of the test code:
Code: Select all
: 3-D mapping of model geometry
NEURON {
SUFFIX d3
RANGE x, y, z
}
ASSIGNED {x(micron) y(micron) z(micron)}
Code: Select all
load_file("morphology.nrn")
forall {insert d3}
proc endpt() {
P=(n3d()-1)*$1
x_d3($1)=x3d(P)
y_d3($1)=y3d(P)
z_d3($1)=z3d(P)
}
proc fracpt() { local posn, A, i
A=$1
posn=$2
i=$3
x_d3(posn)=x3d(i-1) + (x3d(i) - x3d(i-1))*A
y_d3(posn)=y3d(i-1) + (y3d(i) - y3d(i-1))*A
z_d3(posn)=z3d(i-1) + (z3d(i) - z3d(i-1))*A
}
// make 3-d mapping of cell sections
proc map_segments_to_3d() {local i,x,D,alpha
forall {
i=0
endpt(0)
for (x) if (x > 0 && x < 1) {
while (arc3d(i) / L < x) {
i += 1
}
D=arc3d(i) - arc3d(i-1)
if (D <= 0) {
printf("\t\t * %s had a D < 0\n", secname())
}
alpha = (x * L - arc3d(i-1))/D
fracpt(alpha,x,i)
}
endpt(1)
}
}
map_segments_to_3d()
Code: Select all
dendA5_011111111111 {
for (x) {print "x=",x," x_d3(x)=",x_d3(x)," y_d3(x)=",y_d3(x)," z_d3(x)=",z_d3(x)}
//this part show that the algorithm is correct and working
i=0
endpt(0)
print "x_d3(0)=",x_d3(0)," y_d3(0)=",y_d3(0)," z_d3(0)=",z_d3(0)
for (x) if (x > 0 && x < 1) {
while (arc3d(i) / L < x) {
i += 1
}
print "x_d3(x)=",x_d3(x)," y_d3(x)=",y_d3(x)," z_d3(x)=",z_d3(x)
}
endpt(1)
print "x_d3(1)=",x_d3(1)," y_d3(1)=",y_d3(1)," z_d3(1)=",z_d3(1)
}results of the test code:
Code: Select all
x=0 x_d3(x)=43.779999 y_d3(x)=219.50999 z_d3(x)=2.97
x=0.5 x_d3(x)=43.779999 y_d3(x)=219.50999 z_d3(x)=2.97
x=1 x_d3(x)=43.779999 y_d3(x)=219.50999 z_d3(x)=2.97
//notice: value of range variables does not change above
// but the algorithm seems correct
x_d3(0)=36.290001 y_d3(0)=206.33 z_d3(0)=1.3200001
x_d3(x)=36.290001 y_d3(x)=206.33 z_d3(x)=1.3200001
x_d3(1)=43.779999 y_d3(1)=219.50999 z_d3(1)=2.97