: Documentation: https://github.com/fietkiewicz/PointerBuilder
: Description: Neuromechanical, closed-loop model of a half-center oscillator coupled to a rudimentary motor system.

NEURON {
   SUFFIX body
   POINTER V1Pointer, V2Pointer
}

PARAMETER {
   L1 L2
   :: Muscle model parameters
   tau=2.45
   beta=0.703
   a0=0.165
   g=2
   F0=150
   b=4000
}

ASSIGNED {
   V1Pointer V2Pointer
   u1 u2 U1 U2 LT1 LT2
   a1 F1 a2 F2
}

STATE { A1 A2 x }

BREAKPOINT {
   SOLVE states METHOD derivimplicit
}

INITIAL {
   A1 = 0.5881
   A2 = 0
   x = 2.93
}

DERIVATIVE states {
   L1 = 50+0.8*x
   L2 = 50-0.8*x

   u1 = (1/2)*V1Pointer
   u2 = (1/2)*V2Pointer
   U1 = (1.03-4.31*exp(-0.198*u1))*(u1>=8)
   U2 = (1.03-4.31*exp(-0.198*u2))*(u2>=8)
   LT1 = -5.27*10^(-4)*L1^2+0.1054*L1-4.27
   LT2 = -5.27*10^(-4)*L2^2+0.1054*L2-4.27

   a1 = g*(A1-a0)
   F1 = (F0*a1*LT1)*(u1>=8)*(a1>=0)
   a2 = g*(A2-a0)
   F2 = (F0*a2*LT2)*(u2>=8)*(a2>=0)

   A1' = (1/tau)*(U1-(beta+(1-beta)*U1)*A1)
   A2' = (1/tau)*(U2-(beta+(1-beta)*U2)*A2)
   x' = (1/b)*(F2-F1)
}