VB is returning an issue with my "Next S". What I am trying to do have my function "Psi" return an expression of X dependent on which cellular compartment is the target (T) and which is the Source (S).
For example... if we are in T=1 and S=1, I want Psi(1,1,X,Rc,Rn)= f(x)
Can I have everything written in the same routine? Or should I have a sub routine and each expression as a function?
Thanks for the help!!
Function Psi(T, S, X, Rc, Rn)
Rc = CellRadius
Rn = NuclearRadius
For T = 1 To CellDim '(Target)
For S = 1 To CellDim '(Source)
'For Nucleus to Nucleus
If 0 <= X <= 2 * Rn Then
Psi(T, S, X, Rc, Rn) = 1 - (3 / 4) * (X / Rn) + (1 / 16) * (X / Rn) ^ 3 'T=1,S=1
nmin = 0
nmax = 2 * Rn
Else
Psi(T, S, X, Rc, Rn) = 0 'T=1,S=1
nmin = 0
nmax = 0
End If
Next S
'For Cytoplasm to Nucleus
If (Rc <= 3 * Rn) And (0 <= X < Rc - Rn) Then
Psi(T, S, X, Rc, Rn) = (3 / (4 * X * (Rc ^ 3 - Rn ^ 3))) * X ^ 2 * ((Rn ^ 2) - (1 / 12) * X ^ 2) 'T=1,S=2
nmin = 0
nmax = Rc - Rn
ElseIf (Rc <= 3 * Rn) And ((Rc - Rn) <= X < (2 * Rn)) Then
Psi(T, S, X, Rc, Rn) = (3 / (4 * X * (Rc ^ 3 - Rn ^ 3))) * ((1 / 2) * (Rc ^ 2 - Rn ^ 2) * (Rn ^ 2 - X ^ 2) + (2 * X / 3) * (Rc ^ 3 - Rn ^ 3) - (1 / 4) * (Rc ^ 4 - Rn ^ 4))
nmin = Rc - Rn
nmax = 2 * Rn
ElseIf (Rc >= 3 * Rn) Then
Psi(T, S, X, Rc, Rn) = (Rn ^ 3) / (Rc ^ 3 - Rn ^ 3)
nmin = 0
nmax = Rc
ElseIf (Rc <= 3 * Rn) And ((2 * Rn) <= X <= (Rc + Rn)) Then
Psi(T, S, X, Rc, Rn) = ((3 / (4 * X * (Rc ^ 3 - Rn ^ 3))) / 12) * (X ^ 4 - (3 * (Rc ^ 4 + Rn ^ 4)) + 6 * (Rc ^ 2 * Rn ^ 2 - (X ^ 2 * Rn ^ 2) - (X ^ 2 * Rc ^ 2)) + 8 * X * (Rc ^ 3 + Rn ^ 3))
nmin = 2 * Rn
nmax = Rc + Rn
Else
Psi(T, S, X, Rc, Rn) = 0
nmin = 0
nmax = 0
End If
Next S
'For CellSurface to Nucleus
If (Rc - Rn) <= X <= (Rc + Rn) Then
Psi(T, S, X, Rc, Rn) = ((2 * X * Rc) - (Rc ^ 2) - X ^ 2 + (Rn ^ 2)) / (4 * X * Rc) 'T=1,S=3
nmin = Rc - Rn
nmax = Rc + Rn
Else
Psi(T, S, X, Rc, Rn) = 0
nmin = 0
nmax = 0
End If
Next S
Psi(T, S, X, Rc, Rn) = 0 'Nothing for Cell to Nucleus T=1, S=4
nmin = 0
nmax = 0
End If
Next T 'Target=Cytoplasm
Psi(T, S, X, Rc, Rn) = 0 'Nothing for Cytoplasm or Cell Surface
nmin = 0
nmax = 0
Next T 'Target=Cell Surface
Psi(T, S, X, Rc, Rn) = 0 'Nothing for Cell Surface
nmin = 0
nmax = 0
Next T 'Now on Target=Cell
Psi(T, S, X, Rc, Rn) = 0 'Nothing for Nucleus to Cell
nmin = 0
nmax = 0
Next S
Psi(T, S, X, Rc, Rn) = 0 'Nothing for Cytoplasm to Cell
nmin = 0
nmax = 0
Next S
If 0 <= X <= (2 * Rc) Then
Psi(T, S, X, Rc, Rn) = (1 / 2) + Rc / (4 * X)
nmin = 0
nmax = 2 * Rc
End If
Else
Psi(T, S, X, Rc, Rn) = 0
nmin = 0
nmax = 0
End If
Next S
If 0 <= X <= 2 * Rc Then
Psi(T, S, X, Rc, Rn) = 1 - (3 / 4) * (X / Rc) + (1 / 16) * (X / Rc) ^ 3
nmin = 0
nmax = 2 * Rc
End If
Else
Psi(T, S, X, Rc, Rn) = 0
nmin = 0
nmax = 0
End If
End Function
For example... if we are in T=1 and S=1, I want Psi(1,1,X,Rc,Rn)= f(x)
Can I have everything written in the same routine? Or should I have a sub routine and each expression as a function?
Thanks for the help!!
Function Psi(T, S, X, Rc, Rn)
Rc = CellRadius
Rn = NuclearRadius
For T = 1 To CellDim '(Target)
For S = 1 To CellDim '(Source)
'For Nucleus to Nucleus
If 0 <= X <= 2 * Rn Then
Psi(T, S, X, Rc, Rn) = 1 - (3 / 4) * (X / Rn) + (1 / 16) * (X / Rn) ^ 3 'T=1,S=1
nmin = 0
nmax = 2 * Rn
Else
Psi(T, S, X, Rc, Rn) = 0 'T=1,S=1
nmin = 0
nmax = 0
End If
Next S
'For Cytoplasm to Nucleus
If (Rc <= 3 * Rn) And (0 <= X < Rc - Rn) Then
Psi(T, S, X, Rc, Rn) = (3 / (4 * X * (Rc ^ 3 - Rn ^ 3))) * X ^ 2 * ((Rn ^ 2) - (1 / 12) * X ^ 2) 'T=1,S=2
nmin = 0
nmax = Rc - Rn
ElseIf (Rc <= 3 * Rn) And ((Rc - Rn) <= X < (2 * Rn)) Then
Psi(T, S, X, Rc, Rn) = (3 / (4 * X * (Rc ^ 3 - Rn ^ 3))) * ((1 / 2) * (Rc ^ 2 - Rn ^ 2) * (Rn ^ 2 - X ^ 2) + (2 * X / 3) * (Rc ^ 3 - Rn ^ 3) - (1 / 4) * (Rc ^ 4 - Rn ^ 4))
nmin = Rc - Rn
nmax = 2 * Rn
ElseIf (Rc >= 3 * Rn) Then
Psi(T, S, X, Rc, Rn) = (Rn ^ 3) / (Rc ^ 3 - Rn ^ 3)
nmin = 0
nmax = Rc
ElseIf (Rc <= 3 * Rn) And ((2 * Rn) <= X <= (Rc + Rn)) Then
Psi(T, S, X, Rc, Rn) = ((3 / (4 * X * (Rc ^ 3 - Rn ^ 3))) / 12) * (X ^ 4 - (3 * (Rc ^ 4 + Rn ^ 4)) + 6 * (Rc ^ 2 * Rn ^ 2 - (X ^ 2 * Rn ^ 2) - (X ^ 2 * Rc ^ 2)) + 8 * X * (Rc ^ 3 + Rn ^ 3))
nmin = 2 * Rn
nmax = Rc + Rn
Else
Psi(T, S, X, Rc, Rn) = 0
nmin = 0
nmax = 0
End If
Next S
'For CellSurface to Nucleus
If (Rc - Rn) <= X <= (Rc + Rn) Then
Psi(T, S, X, Rc, Rn) = ((2 * X * Rc) - (Rc ^ 2) - X ^ 2 + (Rn ^ 2)) / (4 * X * Rc) 'T=1,S=3
nmin = Rc - Rn
nmax = Rc + Rn
Else
Psi(T, S, X, Rc, Rn) = 0
nmin = 0
nmax = 0
End If
Next S
Psi(T, S, X, Rc, Rn) = 0 'Nothing for Cell to Nucleus T=1, S=4
nmin = 0
nmax = 0
End If
Next T 'Target=Cytoplasm
Psi(T, S, X, Rc, Rn) = 0 'Nothing for Cytoplasm or Cell Surface
nmin = 0
nmax = 0
Next T 'Target=Cell Surface
Psi(T, S, X, Rc, Rn) = 0 'Nothing for Cell Surface
nmin = 0
nmax = 0
Next T 'Now on Target=Cell
Psi(T, S, X, Rc, Rn) = 0 'Nothing for Nucleus to Cell
nmin = 0
nmax = 0
Next S
Psi(T, S, X, Rc, Rn) = 0 'Nothing for Cytoplasm to Cell
nmin = 0
nmax = 0
Next S
If 0 <= X <= (2 * Rc) Then
Psi(T, S, X, Rc, Rn) = (1 / 2) + Rc / (4 * X)
nmin = 0
nmax = 2 * Rc
End If
Else
Psi(T, S, X, Rc, Rn) = 0
nmin = 0
nmax = 0
End If
Next S
If 0 <= X <= 2 * Rc Then
Psi(T, S, X, Rc, Rn) = 1 - (3 / 4) * (X / Rc) + (1 / 16) * (X / Rc) ^ 3
nmin = 0
nmax = 2 * Rc
End If
Else
Psi(T, S, X, Rc, Rn) = 0
nmin = 0
nmax = 0
End If
End Function