// genesis

// LFP Calculation from cellular network,taken at specified point.

echo LFP Calculation Setup !!!!!!!!!!!!!!!!!!!!!
echo

// Ion Channel Currents
echo Ion Channel Currents !!!!!!!!!!!!!!!!!!!!
echo

float xarrayres = 100e-6 //100 micron resolution

float narraycolumnsf

int narraycolumns

narraycolumnsf = ({P23RSa_SEPX}*{P23RSa_NX}*{sqrtNnodes})/(2*{xarrayres})
//                     25e-6   *   8       *   4           2 *100e-6 =  4
//narraycolumns = {trunc {narraycolumnsf}}
narraycolumns=15
//echo narraycolumns = {narraycolumns}
//echo P23RSa_SEPX = {P23RSa_SEPX}
//echo P23RSa_NX = {P23RSa_NX}
//echo sqrtNnodes = {sqrtNnodes}
//echo xarrayres = {xarrayres}

int j

float LFPx = P23RSa_SEPX*P23RSa_NX/2*sqrtNnodes
float LFPy = P23RSa_SEPY*P23RSa_NY/2*sqrtNnodes
//              25e-6   *   8     /2*4 = 25e-6

float LFPz = 3.395e-3 //330e-6
float ERSsep = 500e-6   // electrode rec. site separation

for (j=0;j<={narraycolumns};j=j+1)

     create efield LFP{j}
     //setfield LFP{j} scale 0.335 x {P23RSa_SEPX*P23RSa_NX*2} y {P23RSa_SEPY*P23RSa_NY*2} z {LFPz+(j*ERSsep)}
end


setfield LFP{0}  scale 0.335 x {P23RSa_SEPX*12} y {P23RSa_SEPY*12} z {LFPz}
setfield LFP{1}  scale 0.335 x {P23RSa_SEPX*36} y {P23RSa_SEPY*12} z {LFPz}
setfield LFP{2}  scale 0.335 x {P23RSa_SEPX*60} y {P23RSa_SEPY*12} z {LFPz}
setfield LFP{3}  scale 0.335 x {P23RSa_SEPX*84} y {P23RSa_SEPY*12} z {LFPz}
setfield LFP{4}  scale 0.335 x {P23RSa_SEPX*12} y {P23RSa_SEPY*36} z {LFPz}
setfield LFP{5}  scale 0.335 x {P23RSa_SEPX*36} y {P23RSa_SEPY*36} z {LFPz}
setfield LFP{6}  scale 0.335 x {P23RSa_SEPX*60} y {P23RSa_SEPY*36} z {LFPz}
setfield LFP{7}  scale 0.335 x {P23RSa_SEPX*84} y {P23RSa_SEPY*36} z {LFPz}
setfield LFP{8}  scale 0.335 x {P23RSa_SEPX*12} y {P23RSa_SEPY*60} z {LFPz}
setfield LFP{9}  scale 0.335 x {P23RSa_SEPX*36} y {P23RSa_SEPY*60} z {LFPz}
setfield LFP{10} scale 0.335 x {P23RSa_SEPX*60} y {P23RSa_SEPY*60} z {LFPz}
setfield LFP{11} scale 0.335 x {P23RSa_SEPX*84} y {P23RSa_SEPY*60} z {LFPz}
setfield LFP{12} scale 0.335 x {P23RSa_SEPX*12} y {P23RSa_SEPY*84} z {LFPz}
setfield LFP{13} scale 0.335 x {P23RSa_SEPX*36} y {P23RSa_SEPY*84} z {LFPz}
setfield LFP{14} scale 0.335 x {P23RSa_SEPX*60} y {P23RSa_SEPY*84} z {LFPz}
setfield LFP{15} scale 0.335 x {P23RSa_SEPX*84} y {P23RSa_SEPY*84} z {LFPz}



str s

int k, kmax

//Load compartment location array

echo P23RS LFP !!!!!!!!!!!!!!!!
echo

kmax = P23RSa_NX*P23RSa_NY-1

str locationsP23RS = "soma apdend1 apdend2 apdend3 apdend4aL apdend4bL apdend5aLLL apdend5bLLL apdend5cLLL apdend5aLL apdend5bLL apdend5cLL apdend5aLR apdend5bLR apdend5cLR apdend5aLRR apdend5bLRR apdend5cLRR apdend5aRRR apdend5bRRR apdend5cRRR apdend5aRR apdend5bRR apdend5cRR apdend5aRL apdend5bRL apdend5cRL apdend5aRLL apdend5bRLL apdend5cRLL apobproxLa apobproxLb apobproxLc apobdistLa apobdistLb apobdistLc apobproxRa apobproxRb apobproxRc apobdistRa apobdistRb apobdistRc basalLsupera basalLsuperb basalLsuperc basalLmidsupera basalLmidsuperb basalLmidsuperc basalLmiddeepa basalLmiddeepb basalLmiddeepc basalLdeepa basalLdeepb basalLdeepc basalRsupera basalRsuperb basalRsuperc basalRmidsupera basalRmidsuperb basalRmidsuperc basalRmiddeepa basalRmiddeepb basalRmiddeepc basalRdeepa basalRdeepb basalRdeepc axona axonb axonLa axonLb axonRa axonRb"

for (j=0;j<={narraycolumns};j=j+1)

     for (k=0;k<={kmax};k=k+1)

          foreach s ({arglist {locationsP23RS}})

               addmsg /P23RSanet/P23RSa[{k}]/{s} LFP{j} CURRENT Im 0.0
               addmsg /P23RSbnet/P23RSb[{k}]/{s} LFP{j} CURRENT Im 0.0
               addmsg /P23RScnet/P23RSc[{k}]/{s} LFP{j} CURRENT Im 0.0
               addmsg /P23RSdnet/P23RSd[{k}]/{s} LFP{j} CURRENT Im 0.0

          end

     end

end

//Load compartment location array

if ({columntype == 0})

     kmax = B23FS_NX*B23FS_NY-1

end

if ({columntype == 1})

     kmax = {B23FS_NX/2}*B23FS_NY-1

end

echo B23FS LFP !!!!!!!!!!!!!!!!
echo

str locationsB23FS = "soma proxdendN proxdendE proxdendS proxdendW distdendNlonga distdendNlongb distdendNlongc distdendNlongd distdendNlonge distdendNlongf distdendNlongg distdendNmida distdendNmidb distdendNmidc distdendNshorta distdendNshortb distdendElonga distdendElongb distdendElongc distdendElongd distdendElonge distdendElongf distdendElongg distdendEmida distdendEmidb distdendEmidc distdendEshorta distdendEshortb distdendSlonga distdendSlongb distdendSlongc distdendSlongd distdendSlonge distdendSlongf distdendSlongg distdendSmida distdendSmidb distdendSmidc distdendSshorta distdendSshortb distdendWlonga distdendWlongb distdendWlongc distdendWlongd distdendWlonge distdendWlongf distdendWlongg distdendWmida distdendWmidb distdendWmidc distdendWshorta distdendWshortb axona axonb axonLa axonLb axonRa axonRb"

for (j=0;j<={narraycolumns};j=j+1)

     for (k=0;k<={kmax};k=k+1)

          foreach s ({arglist {locationsB23FS}})

               addmsg /B23FSnet/B23FS[{k}]/{s} LFP{j} CURRENT Im 0.0

          end

     end

end

//Load compartment location array

kmax = P5IBa_NX*P5IBa_NY-1

echo P5IB LFP !!!!!!!!!!!!!!!!
echo

str locationsP5IB = "soma apdend1 apdend2 apdend3 apdend4 apdend5 apdend6 apdend7 apdend8 apdend9 apdend10 apdend11 apdend12 apdend13 apdend14aR apdend14bR apdend14cR apdend14dR apdend14aL apdend14bL apdend14cL apdend14dL apobproxLa apobproxLb apobproxLc apobmidLa apobmidLb apobmidLc apobdistLa apobdistLb apobdistLc apobproxRa apobproxRb apobproxRc apobmidRa apobmidRb apobmidRc apobdistRa apobdistRb apobdistRc basalLsupera basalLsuperb basalLsuperc basalLmida basalLmidb basalLmidc basaldeepa basaldeepb basaldeepc basalRsupera basalRsuperb basalRsuperc basalRmida basalRmidb basalRmidc axona axonb axonLa axonLb axonRa axonRb"

for (j=0;j<={narraycolumns};j=j+1)

     for (k=0;k<={kmax};k=k+1)

          foreach s ({arglist {locationsP5IB}})

               addmsg /P5IBanet/P5IBa[{k}]/{s} LFP{j} CURRENT Im 0.0
               addmsg /P5IBbnet/P5IBb[{k}]/{s} LFP{j} CURRENT Im 0.0
               addmsg /P5IBcnet/P5IBc[{k}]/{s} LFP{j} CURRENT Im 0.0
               addmsg /P5IBdnet/P5IBd[{k}]/{s} LFP{j} CURRENT Im 0.0

          end

     end

end

//Load compartment location array

if ({columntype == 0})

     kmax = B5FS_NX*B5FS_NY-1

end

if ({columntype == 1})

     kmax = {B5FS_NX/2}*B5FS_NY-1

end

echo B5FS LFP !!!!!!!!!!!!!!!!
echo

str locationsB5FS = "soma proxdendN proxdendE proxdendS proxdendW distdendNlonga distdendNlongb distdendNlongc distdendNlongd distdendNlonge distdendNlongf distdendNlongg distdendNmida distdendNmidb distdendNmidc distdendNshorta distdendNshortb distdendElonga distdendElongb distdendElongc distdendElongd distdendElonge distdendElongf distdendElongg distdendEmida distdendEmidb distdendEmidc distdendEshorta distdendEshortb distdendSlonga distdendSlongb distdendSlongc distdendSlongd distdendSlonge distdendSlongf distdendSlongg distdendSmida distdendSmidb distdendSmidc distdendSshorta distdendSshortb distdendWlonga distdendWlongb distdendWlongc distdendWlongd distdendWlonge distdendWlongf distdendWlongg distdendWmida distdendWmidb distdendWmidc distdendWshorta distdendWshortb axona axonb axonLa axonLb axonRa axonRb"

for (j=0;j<={narraycolumns};j=j+1)

     for (k=0;k<={kmax};k=k+1)

          foreach s ({arglist {locationsB5FS}})

               addmsg /B5FSnet/B5FS[{k}]/{s} LFP{j} CURRENT Im 0.0

          end

     end

end

//Load compartment location array

kmax = P6RSa_NX*P6RSa_NY-1

echo P6RS LFP !!!!!!!!!!!!!!!!
echo

str locationsP6RS = "soma apdend1 apdend2 apdend3 apdend4 apdend5 apdend6 apdend7 apdend8 apdend9 apdend10 apobproxLa apobproxLb apobproxLc apobmidLa apobmidLb apobmidLc apobdistLa apobdistLb apobdistLc apobproxRa apobproxRb apobproxRc apobmidRa apobmidRb apobmidRc apobdistRa apobdistRb apobdistRc basalLsupera basalLsuperb basalLsuperc basalLmida basalLmidb basalLmidc basaldeepa basaldeepb basaldeepc basalRsupera basalRsuperb basalRsuperc basalRmida basalRmidb basalRmidc axona axonb axonLa axonLb axonRa axonRb"

for (j=0;j<={narraycolumns};j=j+1)

     for (k=0;k<={kmax};k=k+1)

          foreach s ({arglist {locationsP6RS}})

               addmsg /P6RSanet/P6RSa[{k}]/{s} LFP{j} CURRENT Im 0.0
               addmsg /P6RSbnet/P6RSb[{k}]/{s} LFP{j} CURRENT Im 0.0

               if ({columntype == 0})

                    addmsg /P6RScnet/P6RSc[{k}]/{s} LFP{j} CURRENT Im 0.0
                    addmsg /P6RSdnet/P6RSd[{k}]/{s} LFP{j} CURRENT Im 0.0
          
               end

          end

     end

end

//Load compartment location array

if ({columntype == 0})

     kmax = C23FS_NX*C23FS_NY-1

end

if ({columntype == 1})

     kmax = {C23FS_NX/2}*C23FS_NY-1

end

echo C23FS LFP !!!!!!!!!!!!!!!!
echo

str locationsC23FS = "soma proxdendN proxdendE proxdendS proxdendW distdendNlonga distdendNlongb distdendNlongc distdendNlongd distdendNlonge distdendNlongf distdendNlongg distdendNmida distdendNmidb distdendNmidc distdendNshorta distdendNshortb distdendElonga distdendElongb distdendElongc distdendElongd distdendElonge distdendElongf distdendElongg distdendEmida distdendEmidb distdendEmidc distdendEshorta distdendEshortb distdendSlonga distdendSlongb distdendSlongc distdendSlongd distdendSlonge distdendSlongf distdendSlongg distdendSmida distdendSmidb distdendSmidc distdendSshorta distdendSshortb distdendWlonga distdendWlongb distdendWlongc distdendWlongd distdendWlonge distdendWlongf distdendWlongg distdendWmida distdendWmidb distdendWmidc distdendWshorta distdendWshortb axona axonb axonLa axonLb axonRa axonRb"

for (j=0;j<={narraycolumns};j=j+1)

     for (k=0;k<={kmax};k=k+1)

          foreach s ({arglist {locationsC23FS}})

               addmsg /C23FSnet/C23FS[{k}]/{s} LFP{j} CURRENT Im 0.0

          end

     end

end

//Load compartment location array

if ({columntype == 0})

     kmax = C5FS_NX*C5FS_NY-1

end

if ({columntype == 1})

     kmax = {C5FS_NX/2}*C5FS_NY-1

end

echo C5FS LFP !!!!!!!!!!!!!!!!
echo

str locationsC5FS = "soma proxdendN proxdendE proxdendS proxdendW distdendNlonga distdendNlongb distdendNlongc distdendNlongd distdendNlonge distdendNlongf distdendNlongg distdendNmida distdendNmidb distdendNmidc distdendNshorta distdendNshortb distdendElonga distdendElongb distdendElongc distdendElongd distdendElonge distdendElongf distdendElongg distdendEmida distdendEmidb distdendEmidc distdendEshorta distdendEshortb distdendSlonga distdendSlongb distdendSlongc distdendSlongd distdendSlonge distdendSlongf distdendSlongg distdendSmida distdendSmidb distdendSmidc distdendSshorta distdendSshortb distdendWlonga distdendWlongb distdendWlongc distdendWlongd distdendWlonge distdendWlongf distdendWlongg distdendWmida distdendWmidb distdendWmidc distdendWshorta distdendWshortb axona axonb axonLa axonLb axonRa axonRb"

for (j=0;j<={narraycolumns};j=j+1)

     for (k=0;k<={kmax};k=k+1)

          foreach s ({arglist {locationsC5FS}})

               addmsg /C5FSnet/C5FS[{k}]/{s} LFP{j} CURRENT Im 0.0

          end

     end

end

//Load compartment location array

kmax = ST4RS_NX*ST4RS_NY-1

echo ST4RS LFP !!!!!!!!!!!!!!!!
echo

str locationsST4RS = "soma proxdendN proxdendE proxdendS proxdendW distdendNlonga distdendNlongb distdendNlongc distdendNlongd distdendNlonge distdendNlongf distdendNlongg distdendNmida distdendNmidb distdendNmidc distdendNshorta distdendNshortb distdendElonga distdendElongb distdendElongc distdendElongd distdendElonge distdendElongf distdendElongg distdendEmida distdendEmidb distdendEmidc distdendEshorta distdendEshortb distdendSlonga distdendSlongb distdendSlongc distdendSlongd distdendSlonge distdendSlongf distdendSlongg distdendSmida distdendSmidb distdendSmidc distdendSshorta distdendSshortb distdendWlonga distdendWlongb distdendWlongc distdendWlongd distdendWlonge distdendWlongf distdendWlongg distdendWmida distdendWmidb distdendWmidc distdendWshorta distdendWshortb axona axonb axonLa axonLb axonRa axonRb"

for (j=0;j<={narraycolumns};j=j+1)

     for (k=0;k<={kmax};k=k+1)

          foreach s ({arglist {locationsST4RS}})

               addmsg /ST4RSnet/ST4RS[{k}]/{s} LFP{j} CURRENT Im 0.0

          end

     end

end

//Load compartment location array

if ({columntype == 0})

     kmax = I23LTS_NX*I23LTS_NY-1

end

if ({columntype == 1})

     kmax = {I23LTS_NX/2}*I23LTS_NY-1

end

echo I23LTS LFP !!!!!!!!!!!!!!!!
echo 

str locationsI23LTS = "soma proxdendN proxdendE proxdendS proxdendW distdendNlonga distdendNlongb distdendNlongc distdendNlongd distdendNlonge distdendNlongf distdendNlongg distdendNmida distdendNmidb distdendNmidc distdendNshorta distdendNshortb distdendElonga distdendElongb distdendElongc distdendElongd distdendElonge distdendElongf distdendElongg distdendEmida distdendEmidb distdendEmidc distdendEshorta distdendEshortb distdendSlonga distdendSlongb distdendSlongc distdendSlongd distdendSlonge distdendSlongf distdendSlongg distdendSmida distdendSmidb distdendSmidc distdendSshorta distdendSshortb distdendWlonga distdendWlongb distdendWlongc distdendWlongd distdendWlonge distdendWlongf distdendWlongg distdendWmida distdendWmidb distdendWmidc distdendWshorta distdendWshortb axona axonb axonLa axonLb axonRa axonRb"

for (j=0;j<={narraycolumns};j=j+1)

     for (k=0;k<={kmax};k=k+1)

          foreach s ({arglist {locationsI23LTS}})

               addmsg /I23LTSnet/I23LTS[{k}]/{s} LFP{j} CURRENT Im 0.0

          end

     end

end

//Load compartment location array

if ({columntype == 0})

     kmax = I5LTS_NX*I5LTS_NY-1

end

if ({columntype == 1})

     kmax = {I5LTS_NX/2}*I5LTS_NY-1

end

echo I5LTS LFP !!!!!!!!!!!!!!!!
echo

str locationsI5LTS = "soma proxdendN proxdendE proxdendS proxdendW distdendNlonga distdendNlongb distdendNlongc distdendNlongd distdendNlonge distdendNlongf distdendNlongg distdendNmida distdendNmidb distdendNmidc distdendNshorta distdendNshortb distdendElonga distdendElongb distdendElongc distdendElongd distdendElonge distdendElongf distdendElongg distdendEmida distdendEmidb distdendEmidc distdendEshorta distdendEshortb distdendSlonga distdendSlongb distdendSlongc distdendSlongd distdendSlonge distdendSlongf distdendSlongg distdendSmida distdendSmidb distdendSmidc distdendSshorta distdendSshortb distdendWlonga distdendWlongb distdendWlongc distdendWlongd distdendWlonge distdendWlongf distdendWlongg distdendWmida distdendWmidb distdendWmidc distdendWshorta distdendWshortb axona axonb axonLa axonLb axonRa axonRb"

for (j=0;j<={narraycolumns};j=j+1)

     for (k=0;k<={kmax};k=k+1)

          foreach s ({arglist {locationsI5LTS}})

               addmsg /I5LTSnet/I5LTS[{k}]/{s} LFP{j} CURRENT Im 0.0

          end

     end

end

//Load compartment location array

echo P23FRB LFP !!!!!!!!!!!!!!!!
echo

kmax = P23FRBa_NX*P23FRBa_NY-1

str locationsP23FRB = "soma apdend1 apdend2 apdend3 apdend4aL apdend4bL apdend5aLLL apdend5bLLL apdend5cLLL apdend5aLL apdend5bLL apdend5cLL apdend5aLR apdend5bLR apdend5cLR apdend5aLRR apdend5bLRR apdend5cLRR apdend5aRRR apdend5bRRR apdend5cRRR apdend5aRR apdend5bRR apdend5cRR apdend5aRL apdend5bRL apdend5cRL apdend5aRLL apdend5bRLL apdend5cRLL apobproxLa apobproxLb apobproxLc apobdistLa apobdistLb apobdistLc apobproxRa apobproxRb apobproxRc apobdistRa apobdistRb apobdistRc basalLsupera basalLsuperb basalLsuperc basalLmidsupera basalLmidsuperb basalLmidsuperc basalLmiddeepa basalLmiddeepb basalLmiddeepc basalLdeepa basalLdeepb basalLdeepc basalRsupera basalRsuperb basalRsuperc basalRmidsupera basalRmidsuperb basalRmidsuperc basalRmiddeepa basalRmiddeepb basalRmiddeepc basalRdeepa basalRdeepb basalRdeepc axona axonb axonLa axonLb axonRa axonRb"

for (j=0;j<={narraycolumns};j=j+1)

     for (k=0;k<={kmax};k=k+1)

          foreach s ({arglist {locationsP23FRB}})

               addmsg /P23FRBanet/P23FRBa[{k}]/{s} LFP{j} CURRENT Im 0.0

          end

     end

end

//Load compartment location array

kmax = P5RSa_NX*P5RSa_NY-1

echo P5RS LFP !!!!!!!!!!!!!!!!
echo

str locationsP5RS = "soma apdend1 apdend2 apdend3 apdend4 apdend5 apdend6 apdend7 apdend8 apdend9 apdend10 apdend11 apdend12 apdend13 apdend14aR apdend14bR apdend14cR apdend14dR apdend14aL apdend14bL apdend14cL apdend14dL apobproxLa apobproxLb apobproxLc apobmidLa apobmidLb apobmidLc apobdistLa apobdistLb apobdistLc apobproxRa apobproxRb apobproxRc apobmidRa apobmidRb apobmidRc apobdistRa apobdistRb apobdistRc basalLsupera basalLsuperb basalLsuperc basalLmida basalLmidb basalLmidc basaldeepa basaldeepb basaldeepc basalRsupera basalRsuperb basalRsuperc basalRmida basalRmidb basalRmidc axona axonb axonLa axonLb axonRa axonRb"

for (j=0;j<={narraycolumns};j=j+1)

     for (k=0;k<={kmax};k=k+1)

          foreach s ({arglist {locationsP5RS}})

               addmsg /P5RSanet/P5RSa[{k}]/{s} LFP{j} CURRENT Im 0.0

          end

     end

end

for (j=0;j<={narraycolumns};j=j+1)

     call LFP{j} RECALC

end