Scheduled service maintenance on November 22


On Friday, November 22, 2024, between 06:00 CET and 18:00 CET, GIN services will undergo planned maintenance. Extended service interruptions should be expected. We will try to keep downtimes to a minimum, but recommend that users avoid critical tasks, large data uploads, or DOI requests during this time.

We apologize for any inconvenience.

justDLInt1.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import os
  2. import sys
  3. import seaborn as sns
  4. from brian2 import defaultclock, units
  5. from matplotlib import pyplot as plt
  6. from brian2.core.network import Network
  7. from dirDefs import homeFolder
  8. from models.neuronModels import VSNeuron, JOSpikes265, getSineInput
  9. from models.neurons import AdExp
  10. from models.synapses import exp2Syn, exp2SynStateInits
  11. from mplPars import mplPars
  12. from paramLists import synapsePropsList, inputParsList, AdExpPars
  13. sns.set(style="whitegrid", rc=mplPars)
  14. simSettleTime = 600 * units.ms
  15. # simStepSize = 0.1 * units.ms
  16. # simDuration = 150 * units.ms
  17. # # inputParsName = 'onePulse'
  18. # # inputParsName = 'twoPulse'
  19. # # inputParsName = 'threePulse'
  20. # # inputParsName = "tenMSPulse"
  21. # # inputParsName = "twentyMSPulse"
  22. # # inputParsName = "thirtyMSPulse"
  23. # inputParsName = "fortyMSPulse"
  24. # # inputParsName = "fiftyMSPulse"
  25. # showBefore = 50 * units.ms
  26. # showAfter = 10 * units.ms
  27. simStepSize = 0.1 * units.ms
  28. simDuration = 1500 * units.ms
  29. # inputParsName = 'pulseTrainInt20Dur10'
  30. # inputParsName = 'pulseTrainInt20Dur16'
  31. # inputParsName = 'pulseTrainInt33Dur16'
  32. # inputParsName = 'pulseTrainInt33Dur10'
  33. # inputParsName = 'oneSecondPulse'
  34. # inputParsName = 'pulseTrainInt50Dur10'
  35. inputParsName = 'pulseTrainInt50Dur16'
  36. # inputParsName = 'pulseTrainInt50Dur20'
  37. showBefore = 500 * units.ms
  38. showAfter = 500 * units.ms
  39. DLInt1ModelProps = "DLInt1Aynur"
  40. dlint1 = VSNeuron(**AdExp, inits=getattr(AdExpPars, DLInt1ModelProps), name='dlint1')
  41. dlint1.recordMembraneV()
  42. dlint1.recordSpikes()
  43. DLInt1SynapsePropsE = 'DLInt1_syn_try2_e'
  44. # DLInt1SynapsePropsE = ""
  45. DLInt1SynapsePropsI = 'DLInt1_syn_try2_i'
  46. # DLInt1SynapsePropsI = ""
  47. DLInt1SynapseProps = "-".join((DLInt1SynapsePropsE, DLInt1SynapsePropsI))
  48. # opDir = os.path.join(homeFolder, DLInt1ModelProps, DLInt1SynapseProps, inputParsName)
  49. opDir = "/tmp/justDLInt1"
  50. opFile = os.path.join(opDir, 'Traces.png')
  51. if os.path.isfile(opFile):
  52. ch = input('Results already exist at {}. Delete?(y/n):'.format(opFile))
  53. if ch == 'y':
  54. os.remove(opFile)
  55. else:
  56. sys.exit('User Abort!')
  57. elif not os.path.isdir(opDir):
  58. os.makedirs(opDir)
  59. inputPars = getattr(inputParsList, inputParsName)
  60. JO = JOSpikes265(nOutputs=1, simSettleTime=simSettleTime, **inputPars)
  61. if DLInt1SynapsePropsE:
  62. dlint1.addSynapse(synName="ExiJO", sourceNG=JO.JOSGG, **exp2Syn,
  63. synParsInits=getattr(synapsePropsList, DLInt1SynapsePropsE),
  64. synStateInits=exp2SynStateInits,
  65. sourceInd=0, destInd=0
  66. )
  67. if DLInt1SynapsePropsI:
  68. dlint1.addSynapse(synName="InhJO", sourceNG=JO.JOSGG, **exp2Syn,
  69. synParsInits=getattr(synapsePropsList, DLInt1SynapsePropsI),
  70. synStateInits=exp2SynStateInits,
  71. sourceInd=0, destInd=0
  72. )
  73. net = Network()
  74. net.add(JO.JOSGG)
  75. dlint1.addToNetwork(net)
  76. defaultclock.dt = simStepSize
  77. totalSimDur = simDuration + simSettleTime
  78. net.run(totalSimDur, report='text')
  79. simT, memV = dlint1.getMemVTrace()
  80. spikeTimes = dlint1.getSpikes()
  81. fig, axs = plt.subplots(nrows=2, figsize=(10, 6.25), sharex='col')
  82. axs[0].plot(simT / units.ms, memV / units.mV)
  83. spikesY = memV.min() + 1.05 * (memV.max() - memV.min())
  84. axs[0].plot(spikeTimes / units.ms, [spikesY / units.mV] * spikeTimes.shape[0], 'k^')
  85. axs[0].set_ylabel('DLInt1 \nmemV (mV)')
  86. axs[0].set_xlim([(simSettleTime - showBefore) / units.ms,
  87. (totalSimDur + showAfter) / units.ms])
  88. sineInput = getSineInput(simDur=simDuration, simStepSize=simStepSize,
  89. sinPulseDurs=inputPars['sinPulseDurs'],
  90. sinPulseStarts=inputPars['sinPulseStarts'],
  91. freq=265 * units.Hz, simSettleTime=simSettleTime)
  92. axs[1].plot(simT / units.ms, sineInput, 'r-', label='Vibration Input')
  93. axs[1].plot(JO.spikeTimes / units.ms, [sineInput.max() * 1.05] * len(JO.spikeTimes), 'k^',
  94. label='JO Spikes')
  95. axs[1].legend(loc='upper right')
  96. axs[1].set_xlabel('time (ms)')
  97. axs[1].set_ylabel('Vibration \nInput/JO\n Spikes')
  98. fig.tight_layout()
  99. fig.canvas.draw()
  100. # plt.show()
  101. fig.savefig(opFile, dpi=150)