// 
// Simulation of a pair of FS neurons connected through gap junctions.
// Input is read from the INDATA directory.
//
// Usage: Use matlab script to generate indata
//        Call genesis code from matlab script
//        Parse outdata files and move them to storage directory
//
// Johannes Hjorth, Mars 2007
// hjorth@nada.kth.se
//
// THIS VERSION OF THE CODE USES A CURRENT INJECTION INSTEAD OF SYNAPTIC INPUT
// DATA IS USED TO GENERATE IF CURVE
// ** UPDATE: Now using this code to do GJ scan with current injections also

echo "### Start of script ###################"
echo "Johannes Hjorth (hjorth@nada.kth.se)"
echo "Last updated: June 2007"
echo " "

// Read information about input data


// Read maxTime from parameter file!

str parFile = "INDATA/parameters.txt"
openfile {parFile} r

str outputName = {readfile {parFile}}
float maxTime  = {readfile {parFile}}
int numCells   = {readfile {parFile}}

echo "Simulating "{numCells}" FS neurons for "{maxTime}" seconds"
echo "Using randseed 4711 for genesis internally"
echo "This simulations should be deterministic, so should not matter"
echo "Writing output to "{outputName}


//simulation time and time steps
float spikeoutdt=1e-3
float vmOutDt=1e-4
float simDt=1e-5 //1e-6 needed for voltage clamp

// Number of synapse sites

int nAMPA = 127 // per cell
int nGABA = 93

//read in functions for creating and running simulations
include ../genesisScripts/protodefsInhomogene 
include ../genesisScripts/fsInputFromFile
include ../genesisScripts/fsSomaOutput
include ../genesisScripts/fsInputInject

//setclocks
setclock 1 {vmOutDt}
setclock 0 {simDt}

// Use the SPRNG random number generator
setrand -sprng
randseed 4711
//randseed {{randSeed} + 4711}

// Create neuron
// echo "Creating "{numCells}" FS neurons"
// copyFsNeuron "/fs" {numCells}

// ************  SYNAPTIC INPUT REMOVED only current injection


// Save data to file
makeOutput "/fs" {outputName} {vmOutDt}


// Read location of gap junctions from parameter file

int numGaps = {readfile {parFile}}
int gapCtr

// Create gap junctions required in file

str readGapLine
str gapSrc
str gapDest
float gapRes

for(gapCtr = 0; gapCtr < numGaps; gapCtr = gapCtr + 1)
    readGapLine = {readfile {parFile} -linemode}

    gapSrc  = {getarg {arglist {readGapLine}} -arg 1}
    gapDest = {getarg {arglist {readGapLine}} -arg 2}
    gapRes  = {getarg {arglist {readGapLine}} -arg 3}

    if({gapRes} > 0)
      connectGap {gapSrc} {gapDest} {gapRes}

      echo {gapSrc}"-->"{gapDest}" res: "{gapRes}

      // Add extra recordings to calculate GJ current
      addCompartmentOutput {gapSrc} {outputName}
      addCompartmentOutput {gapDest} {outputName}

    else
      echo "WARNING: gapRes: "{gapRes}" ohm, no gap junction created"
    end
end

// TODO: Add GABA connections between FS neurons
// code by Lennart is available in fsConnect.g
// function: reciprocalGABAinhib

closefile {parFile}


// Read current injection info

str currentInputInfoFile = "INDATA/currentInputInfo.txt"
openfile {currentInputInfoFile} r

int nCurs = {readfile {currentInputInfoFile}}
int iCur
float curStart
float curEnd
float curAmp
str curLoc


for(iCur = 0; iCur < nCurs; iCur = iCur + 1)
  curStart = {readfile {currentInputInfoFile}}
  curEnd = {readfile {currentInputInfoFile}}
  curAmp = {readfile {currentInputInfoFile}}
  curLoc = {readfile {currentInputInfoFile}}

  echo "curStart: "{curStart}" curEnd: "{curEnd}" curAmp "{curAmp}" curLoc "{curLoc}

  makeInjectInput currentInject{iCur} {curStart} {curEnd} {curAmp}
  connectInjectInput currentInject{iCur} {curLoc}
end



check

// // 6 tertdend at 1.5e9 ohm --> 14.1% coupling
// float tertGapRes = 1.5e9
// 
// // 1 soma-soma gapjunction at 2.6e9 ohm --> 14.1% coupling
// float somaGapRes = 2.6e9

  

reset       
reset

step {maxTime} -t

clearOutput {outputName}

// close files
quit