From a9b15b1e06670c52fc5b0a26e9f411c554df1447 Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Thu, 6 Jul 2017 19:44:28 -0400 Subject: [PATCH 01/50] first --- netpyne/tests/tests.py | 21 +++++++++++++++++++++ netpyne/tests/validate_tests.py | 24 +++++++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index f97472af1..a9b849965 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -1096,6 +1096,7 @@ def loadTests(self): self.loadConnTests() # load conn tests self.loadStimSourceTests() # load stimSource tests self.loadStimTargetTests() # load stimTarget tests + self.loadSimConfigTests() # load simConfig tests if self.verboseFlag: print (" *** Finish loading tests *** ") @@ -1109,10 +1110,30 @@ def runTests(self): self.runConnTests() # run conn tests self.runStimSourceTests() # load stimSource tests self.runStimTargetTests() # load stimTarget tests + self.runSimConfigTests() # load simConfig tests if self.verboseFlag: print (" *** Finished running tests *** ") + def loadSimConfigTests(self): + + # if self.verboseFlag: + # print (" *** Loading pop tests *** ") + + # initialiase list of test objs + self.testParamsMap["simConfig"] = {} + + ##cellModel test + testObj = TestObj() + testObj.testName = "stimSourceTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_STIM_SOURCE_TEST] + testObj.messageText = ["Invalid stim source specified."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["stimSource"]["stimSourceTest"] = testObj + def loadStimSourceTests(self): # if self.verboseFlag: diff --git a/netpyne/tests/validate_tests.py b/netpyne/tests/validate_tests.py index 5a0582c4c..b5e56387c 100644 --- a/netpyne/tests/validate_tests.py +++ b/netpyne/tests/validate_tests.py @@ -26,8 +26,19 @@ def __init__ (self): self.paramsMap = {} self.netPyneTestObj = SimTestObj(verboseFlag = True) self.loadTestsWithParams() + self.loadSimConfigTests() self.runTestsWithParams() + def loadSimConfigTests(self): + + # print ( " loading tests ") + self.paramsMap["simConfig"] = {} + self.paramsMap["simConfig"]["duration"] = [] + + simConfigParams = ParamsObj() + simConfigParams.simConfig.popParams['validDurationParams'] = {'cellType': 'PYR', 'cellModel': 'HH', 'numCells': 50} # add dict with params for this pop + self.paramsMap["pop"]["cellModelTest"].append(cellModelParams) + def loadTestsWithParams(self): # print ( " loading tests ") @@ -1944,12 +1955,13 @@ def loadTestsWithParams(self): def runTestsWithParams(self): - self.runPopTestsWithParams() + #self.runPopTestsWithParams() #self.runNetTestsWithParams() #self.runCellTestsWithParams() #self.runConnTestsWithParams() #self.runStimSourceTests() #self.runStimTargetTests() + self.runSimConfigTests() def runPopTestsWithParams(self): popParamsMap = self.paramsMap["pop"] @@ -2009,5 +2021,15 @@ def runStimTargetTests(self): self.netPyneTestObj.netParams = paramsObj.netParams self.netPyneTestObj.runTests() + def runSimConfigTests(self): + #print ( " running conn tests " ) + simConfigParamsMap = self.paramsMap["simConfig"] + # run the different tests for conn + for testName, paramObjList in simConfigParamsMap.items(): + for paramsObj in paramObjList: + #print ( " calling tests") + self.netPyneTestObj.netParams = paramsObj.netParams + self.netPyneTestObj.runTests() + runNetPyneTests = RunNetPyneTests() #runNetPyneTests.runTestsWithParams() From d7e1ad6af46eaafa6be8a74be80ada2b55676414 Mon Sep 17 00:00:00 2001 From: salvdord Date: Mon, 10 Jul 2017 10:54:10 -0400 Subject: [PATCH 02/50] Fixed bug in modifyStims for NetStim 'interval' and 'rate' --- CHANGES.md | 6 ++++++ netpyne/analysis.py | 15 +++++++++------ netpyne/cell.py | 8 ++++++++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c74fb669b..ad06be0b6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +# Version 0.7.2 + +- Added popColors option to plotSpikeHist and plotRatePSD + +- Fixed bug in modifyStims for NetStim 'interval' and 'rate' + # Version 0.7.1 - Updates and bug fixes of NeuroML importer/exporter diff --git a/netpyne/analysis.py b/netpyne/analysis.py index 8c8cedce9..cb803a98f 100644 --- a/netpyne/analysis.py +++ b/netpyne/analysis.py @@ -477,7 +477,7 @@ def plotSpikeHist (include = ['allCells', 'eachPop'], timeRange = None, binSize - overlay (True|False): Whether to overlay the data lines or plot in separate subplots (default: True) - graphType ('line'|'bar'): Type of graph to use (line graph or bar plot) (default: 'line') - yaxis ('rate'|'count'): Units of y axis (firing rate in Hz, or spike count) (default: 'rate') - - popColors (dict): TO DO! + - popColors (dict): Dictionary with color (value) used for each population (key) (default: None) - figSize ((width, height)): Size of figure (default: (10,8)) - saveData (None|True|'fileName'): File name where to save the final data used to generate the figure; if set to True uses filename from simConfig (default: None) @@ -555,7 +555,7 @@ def plotSpikeHist (include = ['allCells', 'eachPop'], timeRange = None, binSize if yaxis=='rate': histoCount = histoCount * (1000.0 / binSize) / (len(cellGids)+numNetStims) # convert to firing rate - color = colorList[iplot%len(colorList)] + color = popColors[subset] if subset in popColors else colorList[i%len(colorList)] if not overlay: plt.subplot(len(include),1,iplot+1) # if subplot, create new subplot @@ -581,7 +581,8 @@ def plotSpikeHist (include = ['allCells', 'eachPop'], timeRange = None, binSize # Add legend if overlay: for i,subset in enumerate(include): - plt.plot(0,0,color=colorList[i%len(colorList)],label=str(subset)) + color = popColors[subset] if subset in popColors else colorList[i%len(colorList)] + plt.plot(0,0,color=color,label=str(subset)) plt.legend(fontsize=fontsiz, bbox_to_anchor=(1.04, 1), loc=2, borderaxespad=0.) maxLabelLen = min(10,max([len(str(l)) for l in include])) plt.subplots_adjust(right=(0.9-0.012*maxLabelLen)) @@ -613,7 +614,7 @@ def plotSpikeHist (include = ['allCells', 'eachPop'], timeRange = None, binSize ## Plot spike histogram ###################################################################################################################################################### def plotRatePSD (include = ['allCells', 'eachPop'], timeRange = None, binSize = 5, Fs = 200, smooth = 0, overlay=True, - figSize = (10,8), saveData = None, saveFig = None, showFig = True): + popColors = None, figSize = (10,8), saveData = None, saveFig = None, showFig = True): ''' Plot firing rate power spectral density (PSD) - include (['all',|'allCells','allNetStims',|,120,|,'E1'|,('L2', 56)|,('L5',[4,5,6])]): List of data series to include. @@ -625,6 +626,7 @@ def plotRatePSD (include = ['allCells', 'eachPop'], timeRange = None, binSize = - overlay (True|False): Whether to overlay the data lines or plot in separate subplots (default: True) - graphType ('line'|'bar'): Type of graph to use (line graph or bar plot) (default: 'line') - yaxis ('rate'|'count'): Units of y axis (firing rate in Hz, or spike count) (default: 'rate') + - popColors (dict): Dictionary with color (value) used for each population (key) (default: None) - figSize ((width, height)): Size of figure (default: (10,8)) - saveData (None|True|'fileName'): File name where to save the final data used to generate the figure; if set to True uses filename from simConfig (default: None) @@ -695,7 +697,7 @@ def plotRatePSD (include = ['allCells', 'eachPop'], timeRange = None, binSize = histData.append(histoCount) - color = colorList[iplot%len(colorList)] + color = popColors[subset] if subset in popColors else colorList[i%len(colorList)] if not overlay: plt.subplot(len(include),1,iplot+1) # if subplot, create new subplot @@ -727,7 +729,8 @@ def plotRatePSD (include = ['allCells', 'eachPop'], timeRange = None, binSize = # Add legend if overlay: for i,subset in enumerate(include): - plt.plot(0,0,color=colorList[i%len(colorList)],label=str(subset)) + color = popColors[subset] if subset in popColors else colorList[i%len(colorList)] + plt.plot(0,0,color=color,label=str(subset)) plt.legend(fontsize=fontsiz, bbox_to_anchor=(1.04, 1), loc=2, borderaxespad=0.) maxLabelLen = min(10,max([len(str(l)) for l in include])) plt.subplots_adjust(right=(0.9-0.012*maxLabelLen)) diff --git a/netpyne/cell.py b/netpyne/cell.py index 3ae49f150..504549110 100644 --- a/netpyne/cell.py +++ b/netpyne/cell.py @@ -925,6 +925,14 @@ def modifyStims (self, params): conn['hNetcon'].weight[0] = paramValue elif paramName in ['delay', 'threshold']: setattr(conn['hNetcon'], paramName, paramValue) + elif paramName in ['rate']: + stim['interval'] = 1.0/paramValue + setattr(stim['hNetStim'], 'interval', stim['interval']) + elif paramName in ['interval']: + stim['rate'] = 1.0/paramValue + setattr(stim['hNetStim'], 'interval', stim['interval']) + else: + setattr(stim['h'+stim['type']], paramName, paramValue) else: setattr(stim['h'+stim['type']], paramName, paramValue) except: From 23170c64d572d0f7c4aa92be05ea85612612237b Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Mon, 10 Jul 2017 20:08:07 -0400 Subject: [PATCH 03/50] first --- netpyne/tests/tests.py | 386 +++++++++++++++++++++++++++++++- netpyne/tests/validate_tests.py | 14 ++ 2 files changed, 395 insertions(+), 5 deletions(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index a9b849965..7f3345d4d 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -1123,16 +1123,392 @@ def loadSimConfigTests(self): # initialiase list of test objs self.testParamsMap["simConfig"] = {} - ##cellModel test + ## duration test + ## duration - Duration of the simulation, in ms (default: 1000) + testObj = TestObj() - testObj.testName = "stimSourceTest" + testObj.testName = "durationTest" testObj.testParameterType = "string" testObj.testParameterValue = "type" - testObj.testTypes = [TEST_TYPE_STIM_SOURCE_TEST] - testObj.messageText = ["Invalid stim source specified."] + testObj.testTypes = [TEST_TYPE_IS_INT] + testObj.messageText = ["SimConfig->'duration':Duration is not an integer."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] - self.testParamsMap["stimSource"]["stimSourceTest"] = testObj + self.testParamsMap["simConfig"]["durationTest"] = testObj + + ## dt test + ## dt - Internal integration timestep to use (default: 0.025) + + testObj = TestObj() + testObj.testName = "dtTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_FLOAT] + testObj.messageText = ["SimConfig->'dt':dt is not a float."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["dtTest"] = testObj + + ## hParams test + ## hParams - Dictionary with parameters of h module (default: {‘celsius’: 6.3, ‘clamp_resist’: 0.001}) + + testObj = TestObj() + testObj.testName = "hParamsTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_DICT] + testObj.messageText = ["SimConfig->'hParams':hParams is not a dict."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["hParamsTest"] = testObj + + ## cache_efficient test + ## cache_efficient - Use CVode cache_efficient option to optimize load when running on many cores (default: False) + + testObj = TestObj() + testObj.testName = "cacheEfficientTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'cacheEfficient':cacheEfficient is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["cacheEfficientTest"] = testObj + + ## cvode_active test + ## cvode_active - Use CVode variable time step (default: False) + + testObj = TestObj() + testObj.testName = "cvodeActiveTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'cvodeActive':cvodeActive is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["cvodeActiveTest"] = testObj + + ## seeds test + ## seeds - Dictionary with random seeds for connectivity, input stimulation, and cell locations (default: {‘conn’: 1, ‘stim’: 1, ‘loc’: 1}) + + testObj = TestObj() + testObj.testName = "seedsTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_DICT] + testObj.messageText = ["SimConfig->'seedsActive':seeds is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["seedsTest"] = testObj + + ## createNEURONObj test + ## createNEURONObj - Create HOC objects when instantiating network (default: True) + + testObj = TestObj() + testObj.testName = "createNEURONObjTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'createNEURONObj':createNEURONObj is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["createNEURONObjTest"] = testObj + + ## createPyStruct test + ## createPyStruct - Create Python structure (simulator-independent) when instantiating network (default: True) + + testObj = TestObj() + testObj.testName = "createPyStruct" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'createPyStruct':createPyStruct is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["createPyStructTest"] = testObj + + ## gatherOnlySimData test + ## gatherOnlySimData - Omits gathering of net and cell data thus reducing gatherData time (default: False) + + testObj = TestObj() + testObj.testName = "gatherOnlySimData" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'gatherOnlySimData':gatherOnlySimData is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["cgatherOnlySimDataTest"] = testObj + + ## gatherOnlySimData test + ## gatherOnlySimData - Omits gathering of net and cell data thus reducing gatherData time (default: False) + + testObj = TestObj() + testObj.testName = "gatherOnlySimData" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'gatherOnlySimData':gatherOnlySimData is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["gatherOnlySimDataTest"] = testObj + + ## printRunTime test + ## printRunTime - Print run time at interval (in sec) specified here (eg. 0.1) (default: False) + + testObj = TestObj() + testObj.testName = "printRunTimeTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'printRunTime':printRunTime is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["printRunTimeTest"] = testObj + + ## printPopAvgRates test + ## printPopAvgRates - Print population avg firing rates after run (default: False) + + testObj = TestObj() + testObj.testName = "printPopAvgRatesTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'printPopAvgRates':printPopAvgRates is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["printPopAvgRatesTest"] = testObj + + ## includeParamsLabel test + ## includeParamsLabel - Include label of param rule that created that cell, conn or stim (default: True) + + testObj = TestObj() + testObj.testName = "includeParamsLabelTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'includeParamsLabel':includeParamsLabel is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["includeParamsLabelTest"] = testObj + + ## timing test + ## timing - Show and record timing of each process (default: True) + + testObj = TestObj() + testObj.testName = "timingTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'timing':timing is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["timingTest"] = testObj + + ## saveTiming test + ## saveTiming - Save timing data to pickle file (default: False) + + testObj = TestObj() + testObj.testName = "saveTimingTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'saveTiming':saveTiming is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["saveTimingTest"] = testObj + + ## verbose test + ## verbose - Show detailed messages (default: False) + + testObj = TestObj() + testObj.testName = "verboseTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'verbose':verbose is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["verboseTest"] = testObj + + ## recordCells test + ## recordCells - List of cells from which to record traces. Can include cell gids (e.g. 5), population labels (e.g. ‘S’ to record from one cell of the ‘S’ population), or ‘all’, to record from all cells. NOTE: All cells selected in the include argument of simConfig.analysis['plotTraces'] will be automatically included in recordCells. (default: []) + + testObj = TestObj() + testObj.testName = "recordCellsTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_LIST] + testObj.messageText = ["SimConfig->'recordCells':recordCells is not a list."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["recordCellsTest"] = testObj + + ## recordTraces test + ## recordTraces - Dict of traces to record (default: {} ; example: {‘V_soma’:{‘sec’:’soma’,’loc’:0.5,’var’:’v’}}) + + testObj = TestObj() + testObj.testName = "recordTracesTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_DICT] + testObj.messageText = ["SimConfig->'recordTraces':recordTraces is not a dict."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["recordTracesTest"] = testObj + + ## recordStim test + ## recordStim - Record spikes of cell stims (default: False) + + testObj = TestObj() + testObj.testName = "recordStimTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'recordStim':recordStim is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["recordStimTest"] = testObj + + ## recordStep test + ## recordStep - Record spikes of cell stims (default: False) + + testObj = TestObj() + testObj.testName = "recordStepTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_FLOAT] + testObj.messageText = ["SimConfig->'recordStep':recordStep is not a float."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["recordStimTest"] = testObj + + ## saveDataInclude test + ## saveDataInclude - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) + + testObj = TestObj() + testObj.testName = "saveDataIncludeTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_LIST] + testObj.messageText = ["SimConfig->'saveDataInclude':saveDataInclude is not a float."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["saveDataIncludeTest"] = testObj + + ## timestampFilename test + ## timestampFilename - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) + + testObj = TestObj() + testObj.testName = "timestampFilenameTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'timestampFilename':timestampFilename is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["timestampFilenameTest"] = testObj + + ## savePickle test + ## savePickle - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) + + testObj = TestObj() + testObj.testName = "savePickleTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'savePickle':savePickle is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["savePickleTest"] = testObj + + ## saveJson test + ## saveJson - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) + + testObj = TestObj() + testObj.testName = "saveJsonTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'saveJson':saveJson is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["saveJsonTest"] = testObj + + ## saveMat test + ## saveMat - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) + + testObj = TestObj() + testObj.testName = "saveMatTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'saveMat':saveMat is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["saveMatTest"] = testObj + + + ## saveTxt test + ## saveTxt - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) + + testObj = TestObj() + testObj.testName = "saveTxtTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'saveTxt':saveTxt is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["saveTxtTest"] = testObj + + ## saveDpk test + ## saveDpk - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) + + testObj = TestObj() + testObj.testName = "saveDpkTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'saveDpk':saveDpk is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["saveDpkTest"] = testObj + + ## saveHDF5 test + ## saveHDF5 - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) + + testObj = TestObj() + testObj.testName = "saveHDF5Test" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'saveHDF5':saveHDF5 is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["saveHDF5Test"] = testObj + + + ## backupCfgFile test + ## backupCfgFile - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) + + testObj = TestObj() + testObj.testName = "backupCfgFileTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_BOOL] + testObj.messageText = ["SimConfig->'backupCfgFile':backupCfgFile is not a boolean."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["backupCfgFileTest"] = testObj + +# savePickle - Save data to pickle file (default: False) +# saveJson - Save dat to json file (default: False) +# saveMat - Save data to mat file (default: False) +# saveTxt - Save data to txt file (default: False) +# saveDpk - Save data to .dpk pickled file (default: False) +# saveHDF5 - Save data to save to HDF5 file (default: False) +# backupCfgFile - Copy cfg file to folder, eg. [‘cfg.py’, ‘backupcfg/’] (default: []) def loadStimSourceTests(self): diff --git a/netpyne/tests/validate_tests.py b/netpyne/tests/validate_tests.py index b5e56387c..b1bc1c3e0 100644 --- a/netpyne/tests/validate_tests.py +++ b/netpyne/tests/validate_tests.py @@ -36,6 +36,20 @@ def loadSimConfigTests(self): self.paramsMap["simConfig"]["duration"] = [] simConfigParams = ParamsObj() + + # Simulation options + simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + simConfigParams.simConfig.verbose = False # Show detailed messages + simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + simConfigParams.simConfig.filename = 'model_output' # Set file output name + simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + + simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + simConfigParams.simConfig.popParams['validDurationParams'] = {'cellType': 'PYR', 'cellModel': 'HH', 'numCells': 50} # add dict with params for this pop self.paramsMap["pop"]["cellModelTest"].append(cellModelParams) From 122036ca5711cebaaadaedd34c604c99cb661e8b Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Tue, 11 Jul 2017 20:07:54 -0400 Subject: [PATCH 04/50] simConfig --- netpyne/tests/tests.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index 7f3345d4d..26ef22494 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -1502,14 +1502,6 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["backupCfgFileTest"] = testObj -# savePickle - Save data to pickle file (default: False) -# saveJson - Save dat to json file (default: False) -# saveMat - Save data to mat file (default: False) -# saveTxt - Save data to txt file (default: False) -# saveDpk - Save data to .dpk pickled file (default: False) -# saveHDF5 - Save data to save to HDF5 file (default: False) -# backupCfgFile - Copy cfg file to folder, eg. [‘cfg.py’, ‘backupcfg/’] (default: []) - def loadStimSourceTests(self): # if self.verboseFlag: From cebf2e31ac9e49eaa588ca24883cafbc791fd0d2 Mon Sep 17 00:00:00 2001 From: salvdord Date: Sun, 16 Jul 2017 16:59:25 +0200 Subject: [PATCH 05/50] converted v0.7.1 via 2to3 tool --- netpyne/analysis.py | 2 +- sdnotes.org | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/netpyne/analysis.py b/netpyne/analysis.py index cb803a98f..81fe838ab 100644 --- a/netpyne/analysis.py +++ b/netpyne/analysis.py @@ -697,7 +697,7 @@ def plotRatePSD (include = ['allCells', 'eachPop'], timeRange = None, binSize = histData.append(histoCount) - color = popColors[subset] if subset in popColors else colorList[i%len(colorList)] + color = popColors[subset] if subset in popColors else colorList[iplot%len(colorList)] if not overlay: plt.subplot(len(include),1,iplot+1) # if subplot, create new subplot diff --git a/sdnotes.org b/sdnotes.org index 22574ab4c..3a17a11cd 100644 --- a/sdnotes.org +++ b/sdnotes.org @@ -125,7 +125,6 @@ We can use the google chat or this google doc to bounce ideas back and forth (li - synapses as list of objects inside each cell (postsynaptic) - netcon in pre is stub; netcon in post is real synapse - netcon (neuron object) as part of synapse object - * 15dec28 Convert into python package - PyNet ? NeuPyNE, NeuPyNet, netpyne !! PYthon-based NETwork development framework for the NEuron simulator - make shared -> framework From 2b1804a0f150f8af3505db7c136a31e5cce87523 Mon Sep 17 00:00:00 2001 From: salvdord Date: Wed, 19 Jul 2017 18:07:42 +0200 Subject: [PATCH 06/50] fixed README createAndSimulate -> createSimulate --- README.md | 2 +- doc/source/code/tut2.py | 2 +- examples/sandbox/sandbox.py | 95 +++++++++++++++++-------------------- netpyne/simFuncs.py | 2 +- 4 files changed, 46 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index de31f924a..465397d71 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Requires NEURON with Python and MPI support. ``` import HHTut from netpyne import sim - sim.createAndSimulate( + sim.createSimulateAnalyze( simConfig = HHTut.simConfig, netParams = HHTut.netParams) ``` diff --git a/doc/source/code/tut2.py b/doc/source/code/tut2.py index 9dfbe239b..48f7720e4 100644 --- a/doc/source/code/tut2.py +++ b/doc/source/code/tut2.py @@ -18,7 +18,7 @@ netParams.synMechParams['exc'] = {'mod': 'Exp2Syn', 'tau1': 0.1, 'tau2': 5.0, 'e': 0} # excitatory synaptic mechanism # Stimulation parameters -netParams.stimSourceParams['bkg'] = {'type': 'NetStim', 'rate': 10, 'noise': 0.5,} +netParams.stimSourceParams['bkg'] = {'type': 'NetStim', 'rate': 10, 'noise': 0.5} netParams.stimTargetParams['bkg->PYR'] = {'source': 'bkg', 'conds': {'cellType': 'PYR'}, 'weight': 0.01, 'delay': 5, 'synMech': 'exc'} ## Cell connectivity rules diff --git a/examples/sandbox/sandbox.py b/examples/sandbox/sandbox.py index 8be743268..b6f3fa557 100644 --- a/examples/sandbox/sandbox.py +++ b/examples/sandbox/sandbox.py @@ -1,53 +1,44 @@ -from neuron import h, gui - -pc = h.ParallelContext() -pc.set_maxstep(10) -idhost = int(pc.id()) -nhost = int(pc.nhost()) - -# Create presyn cell 1 -pre1_gid = 0 -pre1_host = 0 -if idhost == pre1_host: - pre1 = h.Section(name='pre1') - pc.set_gid2node(pre1_gid, pre1_host) - nc = h.NetCon(pre1(0.5)._ref_v, None, sec = pre1) - nc.threshold = 20.0 - pc.cell(pre1_gid, nc) - -# Create presyn cell 2 -pre2_gid = 1 -pre2_host = 1 if nhost>1 else 0 -if idhost == pre2_host: - pre2 = h.Section(name='pre2') - pc.set_gid2node(pre2_gid, pre2_host) - nc = h.NetCon(pre2(0.5)._ref_v, None, sec = pre2) - nc.threshold = 20.0 - pc.cell(pre2_gid, nc) - -# Create postsyn cell -post_gid = 2 -post_host = 0 -if idhost == post_host: - post = h.Section(name='post') - postsyn = h.Exp2Syn(post(0.5)) - pc.set_gid2node(post_gid, post_host) - nc = h.NetCon(post(0.5)._ref_v, None, sec = post) - pc.cell(post_gid, nc) # Associate the cell with this host and gid - - -# Connect pre to post cells -if pc.gid_exists(post_gid): - nc1 = pc.gid_connect(pre1_gid, postsyn) - nc1.threshold = 5.0 - nc2 = pc.gid_connect(pre2_gid, postsyn) - nc2.threshold = 5.0 - - -# run sim -h.stdinit() - -for i in range(3): - if pc.gid_exists(i): - print '\ngid: %d, pc.threshold: %.1f' % (i, pc.threshold(i)) +from netpyne import specs,sim + +netParams = specs.NetParams() # object of class NetParams to store the network parameters +simConfig = specs.SimConfig() # object of class SimConfig to store the simulation configuration + +SysIVibrationFreq = 180 +SysITimeofVibration = 1e9 +STARTTIME = 1 +INTERVAL = 1 + +R_SysISyn_Erev = 0 #...FR... +R_SysISyn_tau1 = 0.2 +R_SysISyn_tau2 = 0.2 # deactivation + +# populations +netParams.popParams['FR'] = {'cellType': 'FR', 'numCells': 2, 'cellModel': 'HH3D'} + +# cell rules +#cellRule0 = netParams.importCellParams(label = 'FR',conds={'cellType': 'FR', 'cellModel': 'HH3D'}, fileName= 'FRcellTemplate.hoc', cellName='FR_Cell',importSynMechs=False) +cellRule = {'conds': {'cellModel': 'HH3D', 'cellType': 'FR'}, 'secs': {}} # cell rule dict +nsec = 10 +nseg = 5 +for isec in range(nsec): + cellRule['secs']['sec_'+str(isec)] = {'geom': {'nseg': nseg}, 'mechs':{}} +netParams.cellParams['FRrule'] = cellRule + +# synapses +netParams.synMechParams['FR_syn'] = {'mod': 'Exp2Syn', 'tau1': R_SysISyn_tau1, 'tau2': R_SysISyn_tau2, 'e': R_SysISyn_Erev} + +# stimulation +netParams.stimSourceParams['stim1'] = {'type': 'NetStim', 'interval': 1000/SysIVibrationFreq , 'number': SysITimeofVibration*SysIVibrationFreq/1000, 'start': STARTTIME, 'noise': 0} + +# OPTION 1: syns distributed uniformly across sec length +netParams.stimTargetParams['stim1->FR'] = {'source': 'stim1', 'conds': {'cellType': 'FR'} ,'weight': 1, 'sec':'all', 'synsPerConn': nsec*nseg , 'delay': 1, 'synMech': 'FR_syn'} + +# OPTION 2: 1 syn per segment +for secName,sec in netParams.cellParams['FRrule']['secs'].iteritems(): + for iseg in range(sec['geom']['nseg']): + netParams.stimTargetParams['stim1->FR_'+secName+'_'+str(iseg)] = \ + {'source': 'stim1', 'conds': {'cellType': 'FR'} ,'weight': 1, 'sec': secName, 'loc': (iseg+1)*(1.0/nseg)-(0.5/nseg), 'synPerConn':1 , 'delay': 1, 'synMech': 'FR_syn'} + + +sim.create() diff --git a/netpyne/simFuncs.py b/netpyne/simFuncs.py index 93b2d2be8..619db2219 100644 --- a/netpyne/simFuncs.py +++ b/netpyne/simFuncs.py @@ -367,7 +367,7 @@ def clearAll (): ############################################################################### def id32 (obj): #return hash(obj) & 0xffffffff # hash func - return int(hashlib.md5(obj).hexdigest()[0:8],16) # convert 8 first chars of md5 hash in base 16 to int + return int(hashlib.md5(obj.encode('utf-8')).hexdigest()[0:8],16) # convert 8 first chars of md5 hash in base 16 to int ############################################################################### From d1ed14390be91612405ba24ca31228bd532d50bb Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Thu, 20 Jul 2017 00:12:48 -0400 Subject: [PATCH 07/50] d --- netpyne/tests/tests.py | 117 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 112 insertions(+), 5 deletions(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index 26ef22494..6eae1fac5 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -1033,6 +1033,69 @@ def testValidStimTarget(self,paramValues, netParams): # TEST_TYPE_STIM_TARGET_TE raise return errorMessages + def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS + + errorMessages = [] + + if simConfig.analysis: + + analysis = simConfig.analysis + + if not isinstance ( simConfig.analysis, dict): + errorMessages.append("SimConfig->'analysis': Must be a dict. Value provided is " + str(simConfig.analysis) + "."") + return errorMessages + + if any (analysis.keys() not in ['plotRaster','plotSpikeHist', 'plotSpikePSD', 'plotTraces', 'plotShape', 'plotConn', 'plot2DNet', 'nTE', 'granger']): + errorMessages.append("SimConfig->'analysis': Valid analysis functions are 'plotRaster','plotSpikeHist', 'plotSpikePSD', 'plotTraces', 'plotShape', 'plotConn', 'plot2DNet', 'nTE', 'granger'.") + + if 'plotRaster' in analysis: + + plotRaster = analysis['plotRaster'] + + if not isinstance ( plotRaster, dict): + errorMessages.append("SimConfig->'analysis'->'plotRaster': Must be a dict. Value provided is " + str(plotRaster) + "."") + + if 'include' in plotRaster and not isinstance( plotRaster['include'], dict): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'include': Must be a list. Value provided is " + str(plotRaster['include']) + ".") + + if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + + if 'maxSpikes' in plotRaster and not isinstance( plotRaster['maxSpikes'], int): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'maxSpikes': Must be an integer. Value provided is " + str(plotRaster['maxSpikes']) + ".") + + if 'orderBy' in plotRaster: + + if not isinstance( plotRaster['orderBy'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderBy': Must be a list. Value provided is " + str(plotRaster['orderBy']) + ".") + else: + if any ( [x not in 'gid', 'ynorm', 'y' for x in plotRaster['orderBy'] ] ) + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderBy': Must be a list. Value provided is " + str(plotRaster['orderBy']) + ".") + + if 'orderInverse' in plotRaster: + + if not isinstance( plotRaster['orderInverse'], bool): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderInverse': Must be boolean. Value provided is " + str(plotRaster['orderInverse']) + ".") + + if 'labels' in plotRaster: + + if not isinstance( plotRaster['labels'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'labels': Must be a list. Value provided is " + str(plotRaster['labels']) + ".") + + # orderInverse boolean + # labels: string (in valid list)? (‘legend’|’overlay’)) + # popRates: string (in valid list)? (‘legend’|’overlay’) + # + # spikeHist: string (in valid list)? (None|’overlay’|’subplot’) + # + # spikeHistBin: (int) + # + except Exception as e: + traceback.print_exc(file=sys.stdout) + e.args += ( ) + raise + return errorMessages + # Tests that are defined for each set of parameters class TestObj(object): @@ -1195,8 +1258,9 @@ def loadSimConfigTests(self): testObj.testName = "seedsTest" testObj.testParameterType = "string" testObj.testParameterValue = "type" - testObj.testTypes = [TEST_TYPE_IS_DICT] - testObj.messageText = ["SimConfig->'seedsActive':seeds is not a boolean."] + testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_VALUE_LIST ] # ‘conn’, ‘stim’, ‘loc’ + testObj.testValueList = ['conn', 'stim', 'loc'] + testObj.messageText = ["SimConfig->'seedsActive':seeds is not a boolean.","SimConfig->'recordTracesTest':is not a valid value. Valid values are 'conn', 'stim', 'loc'."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["seedsTest"] = testObj @@ -1351,12 +1415,23 @@ def loadSimConfigTests(self): testObj.testName = "recordTracesTest" testObj.testParameterType = "string" testObj.testParameterValue = "type" - testObj.testTypes = [TEST_TYPE_IS_DICT] - testObj.messageText = ["SimConfig->'recordTraces':recordTraces is not a dict."] + testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_VALUE_LIST ] + testObj.testValueList = ['sec','loc','var'] + testObj.messageText = ["SimConfig->'recordTraces':recordTraces is not a dict.","SimConfig->'recordTracesTest':is not a valid value. Valid values are 'netParams', 'netCells', 'netPops', 'simConfig', 'simData'."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["recordTracesTest"] = testObj + testObj = TestObj() + testObj.testName = "saveDataInclude" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_VALUE_LIST ] + testObj.testValueList = ['netParams', 'netCells', 'netPops', 'simConfig', 'simData'] + testObj.messageText = ["SimConfig->'saveDataInclude':recordTraces is not a dict.","SimConfig->'saveDataInclude':is not a valid value. Valid values are 'netParams', 'netCells', 'netPops', 'simConfig', 'simData'." ] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["recordTracesTest"] = testObj ## recordStim test ## recordStim - Record spikes of cell stims (default: False) @@ -1488,7 +1563,6 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["saveHDF5Test"] = testObj - ## backupCfgFile test ## backupCfgFile - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) @@ -1502,6 +1576,19 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["backupCfgFileTest"] = testObj + ## backupCfgFile test + ## backupCfgFile - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) + + testObj = TestObj() + testObj.testName = "analysisTest" + testObj.testParameterType = "string" + testObj.testParameterValue = "type" + testObj.testTypes = [TEST_TYPE_VALID_ANALYSIS] + #testObj.messageText = ["SimConfig->'backupCfgFile':backupCfgFile is not a boolean."] + #testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + + self.testParamsMap["simConfig"]["backupCfgFileTest"] = testObj + def loadStimSourceTests(self): # if self.verboseFlag: @@ -2328,6 +2415,26 @@ def execRunTests(self, testObj, params): print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + elif testType == TEST_TYPE_VALUE_LIST: + + if isinstance(params, dict): + + for paramLabel, paramValues in params.items(): + + try: + if testObj.testParameterValue in paramValues: + self.testTypeObj.testIsValueList(paramValues[testObj.testParameterValue], testObj.testValueList) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) + print ( "PASSED" ) + + except Exception as e: + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + +testIsValueList + elif testType == TEST_TYPE_EXISTS_IN_ALL_DICTS: if isinstance(params, dict): From 7c605287b0557e793506d3b89d3b54592e6bdb8e Mon Sep 17 00:00:00 2001 From: salvdord Date: Mon, 24 Jul 2017 12:47:51 -0400 Subject: [PATCH 08/50] Fixed bug importing cell -- use h.pop_section() to avoid stack overflow --- CHANGES.md | 2 ++ netpyne/utils.py | 1 + 2 files changed, 3 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index ad06be0b6..69626aa29 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,8 @@ - Fixed bug in modifyStims for NetStim 'interval' and 'rate' +- Fixed bug importing cell -- use h.pop_section() to avoid stack overflow + # Version 0.7.1 - Updates and bug fixes of NeuroML importer/exporter diff --git a/netpyne/utils.py b/netpyne/utils.py index dfcfc88ee..f5a375e53 100644 --- a/netpyne/utils.py +++ b/netpyne/utils.py @@ -187,6 +187,7 @@ def importCell (fileName, cellName, cellArgs = None, cellInstance = False): for sec in h.allsec(): try: h.delete_section(sec=sec) + h.pop_section() except: pass h.initnrn() From 0bf9f2221b8ad5eedc98b96d257c86767ad8e7ed Mon Sep 17 00:00:00 2001 From: salvdord Date: Mon, 24 Jul 2017 18:01:11 -0400 Subject: [PATCH 09/50] Added support to load params, cfg, net and simData from .mat files --- CHANGES.md | 2 + examples/sandbox/sandbox.py | 107 ++++++++++++++++++++++++++---------- netpyne/analysis.py | 20 +------ netpyne/cell.py | 2 +- netpyne/simFuncs.py | 59 +++++++++++++++++++- 5 files changed, 138 insertions(+), 52 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 69626aa29..af250e22e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,8 @@ - Added popColors option to plotSpikeHist and plotRatePSD +- Added support to load params, cfg, net and simData from .mat files + - Fixed bug in modifyStims for NetStim 'interval' and 'rate' - Fixed bug importing cell -- use h.pop_section() to avoid stack overflow diff --git a/examples/sandbox/sandbox.py b/examples/sandbox/sandbox.py index b6f3fa557..2df85e67f 100644 --- a/examples/sandbox/sandbox.py +++ b/examples/sandbox/sandbox.py @@ -1,44 +1,91 @@ -from netpyne import specs,sim +""" +params.py + +netParams is a dict containing a set of network parameters using a standardized structure + +simConfig is a dict containing a set of simulation configurations using a standardized structure + +Contributors: salvadordura@gmail.com +""" + +from netpyne import specs, sim netParams = specs.NetParams() # object of class NetParams to store the network parameters simConfig = specs.SimConfig() # object of class SimConfig to store the simulation configuration -SysIVibrationFreq = 180 -SysITimeofVibration = 1e9 -STARTTIME = 1 -INTERVAL = 1 -R_SysISyn_Erev = 0 #...FR... -R_SysISyn_tau1 = 0.2 -R_SysISyn_tau2 = 0.2 # deactivation +############################################################################### +# +# MPI HH TUTORIAL PARAMS +# +############################################################################### + +############################################################################### +# NETWORK PARAMETERS +############################################################################### + +# Population parameters +netParams.popParams['PYR'] = {'cellModel': 'HH', 'cellType': 'PYR', 'numCells': 200} # add dict with params for this pop + + +# Cell parameters +## PYR cell properties +cellRule = {'conds': {'cellModel': 'HH', 'cellType': 'PYR'}, 'secs': {}} # cell rule dict +cellRule['secs']['soma'] = {'geom': {}, 'mechs': {}} # soma params dict +cellRule['secs']['soma']['geom'] = {'diam': 18.8, 'L': 18.8, 'Ra': 123.0} # soma geometry +cellRule['secs']['soma']['mechs']['hh'] = {'gnabar': 0.12, 'gkbar': 0.036, 'gl': 0.003, 'el': -70} # soma hh mechanism +cellRule['secs']['soma']['vinit'] = -71 +netParams.cellParams['PYR'] = cellRule # add dict to list of cell params + +# Synaptic mechanism parameters +netParams.synMechParams['AMPA'] = {'mod': 'Exp2Syn', 'tau1': 0.1, 'tau2': 1.0, 'e': 0} + + +# Stimulation parameters +netParams.stimSourceParams['bkg'] = {'type': 'NetStim', 'rate': 10, 'noise': 0.5, 'start': 1} +netParams.stimSourceParams['bkg2'] = {'type': 'NetStim', 'rate': 10, 'noise': 0.5, 'start': 1} + +netParams.stimTargetParams['bkg->PYR1'] = {'source': 'bkg', 'conds': {'pop': 'PYR'}, 'weight': 0.1, 'delay': 'uniform(1,5)'} + + +# Connectivity parameters +netParams.connParams['PYR->PYR'] = { + 'preConds': {'pop': 'PYR'}, 'postConds': {'pop': 'PYR'}, + 'weight': 0.002, # weight of each connection + 'delay': '0.2+normal(13.0,1.4)', # delay min=0.2, mean=13.0, var = 1.4 + 'threshold': 10, # threshold + 'convergence': 'uniform(1,15)'} # convergence (num presyn targeting postsyn) is uniformly distributed between 1 and 15 + -# populations -netParams.popParams['FR'] = {'cellType': 'FR', 'numCells': 2, 'cellModel': 'HH3D'} +############################################################################### +# SIMULATION PARAMETERS +############################################################################### -# cell rules -#cellRule0 = netParams.importCellParams(label = 'FR',conds={'cellType': 'FR', 'cellModel': 'HH3D'}, fileName= 'FRcellTemplate.hoc', cellName='FR_Cell',importSynMechs=False) -cellRule = {'conds': {'cellModel': 'HH3D', 'cellType': 'FR'}, 'secs': {}} # cell rule dict -nsec = 10 -nseg = 5 -for isec in range(nsec): - cellRule['secs']['sec_'+str(isec)] = {'geom': {'nseg': nseg}, 'mechs':{}} -netParams.cellParams['FRrule'] = cellRule +# Simulation parameters +simConfig.duration = 1*1e3 # Duration of the simulation, in ms +simConfig.dt = 0.025 # Internal integration timestep to use +simConfig.seeds = {'conn': 1, 'stim': 1, 'loc': 1} # Seeds for randomizers (connectivity, input stimulation and cell locations) +simConfig.createNEURONObj = 1 # create HOC objects when instantiating network +simConfig.createPyStruct = 1 # create Python structure (simulator-independent) when instantiating network +simConfig.verbose = False # show detailed messages -# synapses -netParams.synMechParams['FR_syn'] = {'mod': 'Exp2Syn', 'tau1': R_SysISyn_tau1, 'tau2': R_SysISyn_tau2, 'e': R_SysISyn_Erev} +# Recording +simConfig.recordCells = [] # which cells to record from +simConfig.recordTraces = {'Vsoma':{'sec':'soma','loc':0.5,'var':'v'}} +simConfig.recordStim = True # record spikes of cell stims +simConfig.recordStep = 0.1 # Step size in ms to save data (eg. V traces, LFP, etc) -# stimulation -netParams.stimSourceParams['stim1'] = {'type': 'NetStim', 'interval': 1000/SysIVibrationFreq , 'number': SysITimeofVibration*SysIVibrationFreq/1000, 'start': STARTTIME, 'noise': 0} +# Saving +simConfig.filename = 'HHTut' # Set file output name +simConfig.saveFileStep = 1000 # step size in ms to save data to disk +simConfig.savePickle = False # Whether or not to write spikes etc. to a .mat file +simConfig.saveMat = True -# OPTION 1: syns distributed uniformly across sec length -netParams.stimTargetParams['stim1->FR'] = {'source': 'stim1', 'conds': {'cellType': 'FR'} ,'weight': 1, 'sec':'all', 'synsPerConn': nsec*nseg , 'delay': 1, 'synMech': 'FR_syn'} +# Analysis and plotting +simConfig.analysis['plotRaster'] =True -# OPTION 2: 1 syn per segment -for secName,sec in netParams.cellParams['FRrule']['secs'].iteritems(): - for iseg in range(sec['geom']['nseg']): - netParams.stimTargetParams['stim1->FR_'+secName+'_'+str(iseg)] = \ - {'source': 'stim1', 'conds': {'cellType': 'FR'} ,'weight': 1, 'sec': secName, 'loc': (iseg+1)*(1.0/nseg)-(0.5/nseg), 'synPerConn':1 , 'delay': 1, 'synMech': 'FR_syn'} +sim.createSimulateAnalyze() +data=sim.loadSimData('HHTut.mat') -sim.create() diff --git a/netpyne/analysis.py b/netpyne/analysis.py index 81fe838ab..f1d8e226f 100644 --- a/netpyne/analysis.py +++ b/netpyne/analysis.py @@ -249,11 +249,6 @@ def plotRaster (include = ['allCells'], timeRange = None, maxSpikes = 1e8, order print('Plotting raster...') - # colorList = [[0.42,0.67,0.84], [0.90,0.76,0.00], [0.42,0.83,0.59], [0.90,0.32,0.00], - # [0.34,0.67,0.67], [0.90,0.59,0.00], [0.42,0.82,0.83], [1.00,0.85,0.00], - # [0.33,0.67,0.47], [1.00,0.38,0.60], [0.57,0.67,0.33], [0.5,0.2,0.0], - # [0.71,0.82,0.41], [0.0,0.2,0.5]] - # Select cells to include cells, cellGids, netStimLabels = getCellsInclude(include) selectedPops = [cell['tags']['pop'] for cell in cells] @@ -490,12 +485,6 @@ def plotSpikeHist (include = ['allCells', 'eachPop'], timeRange = None, binSize print('Plotting spike histogram...') - # colorList = [[0.42,0.67,0.84], [0.90,0.76,0.00], [0.42,0.83,0.59], [0.90,0.32,0.00], - # [0.34,0.67,0.67], [0.90,0.59,0.00], [0.42,0.82,0.83], [1.00,0.85,0.00], - # [0.33,0.67,0.47], [1.00,0.38,0.60], [0.57,0.67,0.33], [0.5,0.2,0.0], - # [0.71,0.82,0.41], [0.0,0.2,0.5]] - - # Replace 'eachPop' with list of pops if 'eachPop' in include: include.remove('eachPop') @@ -638,12 +627,6 @@ def plotRatePSD (include = ['allCells', 'eachPop'], timeRange = None, binSize = ''' print('Plotting firing rate power spectral density (PSD) ...') - - # colorList = [[0.42,0.67,0.84], [0.90,0.76,0.00], [0.42,0.83,0.59], [0.90,0.32,0.00], - # [0.34,0.67,0.67], [0.90,0.59,0.00], [0.42,0.82,0.83], [1.00,0.85,0.00], - # [0.33,0.67,0.47], [1.00,0.38,0.60], [0.57,0.67,0.33], [0.5,0.2,0.0], - # [0.71,0.82,0.41], [0.0,0.2,0.5]] - # Replace 'eachPop' with list of pops if 'eachPop' in include: @@ -787,10 +770,9 @@ def plotTraces (include = None, timeRange = None, overlay = False, oneFigPer = ' print('Plotting recorded cell traces ...') if include is None: include = [] # If not defined, initialize as empty list + global colorList if isinstance(colors, list): colorList = colors - else: - global colorList # rerun simulation so new include cells get recorded from if rerun: diff --git a/netpyne/cell.py b/netpyne/cell.py index 504549110..38f7db725 100644 --- a/netpyne/cell.py +++ b/netpyne/cell.py @@ -375,7 +375,7 @@ def createNEURONObj (self, prop): # create section if sectName not in self.secs: self.secs[sectName] = Dict() # create sect dict if doesn't exist - if 'hSec' not in self.secs[sectName] or self.secs[sectName]['hSec'] == None: + if 'hSec' not in self.secs[sectName] or self.secs[sectName]['hSec'] in [None, {}, []]: self.secs[sectName]['hSec'] = h.Section(name=sectName, cell=self) # create h Section object sec = self.secs[sectName] # pointer to section diff --git a/netpyne/simFuncs.py b/netpyne/simFuncs.py index 619db2219..bd31c28e1 100644 --- a/netpyne/simFuncs.py +++ b/netpyne/simFuncs.py @@ -240,10 +240,63 @@ def loadAll (filename, data=None): if not data: data = _loadFile(filename) loadSimCfg(filename, data=data) loadNetParams(filename, data=data) - loadNet(filename, data=data) + data=loadNet(filename, data=data) loadSimData(filename, data=data) +############################################################################### +# Support funcs to load from mat +############################################################################### + +def _mat2dict(obj): + ''' + A recursive function which constructs from matobjects nested dictionaries + Enforce lists for conns, synMechs and stims even if 1 element (matlab converts to dict otherwise) + ''' + import scipy.io as spio + import numpy as np + + if isinstance(obj, dict): + out = {} + for key in obj: + if isinstance(obj[key], spio.matlab.mio5_params.mat_struct): + if key in ['conns', 'stims', 'synMechs']: + out[key] = [_mat2dict(obj[key])] # convert to 1-element list + else: + out[key] = _mat2dict(obj[key]) + elif isinstance(obj[key], np.ndarray): + out[key] = _mat2dict(obj[key]) + else: + out[key] = obj[key] + + elif isinstance(obj, spio.matlab.mio5_params.mat_struct): + out = {} + for key in obj._fieldnames: + val = obj.__dict__[key] + if isinstance(val, spio.matlab.mio5_params.mat_struct): + if key in ['conns', 'stims', 'synMechs']: + out[key] = [_mat2dict(val)] # convert to 1-element list + else: + out[key] = _mat2dict(val) + elif isinstance(val, np.ndarray): + out[key] = _mat2dict(val) + else: + out[key] = val + + elif isinstance(obj, np.ndarray): + out = [] + for item in obj: + if isinstance(item, spio.matlab.mio5_params.mat_struct) or isinstance(item, np.ndarray): + out.append(_mat2dict(item)) + else: + out.append(item) + + else: + out = obj + + return out + + ############################################################################### # Load data from file ############################################################################### @@ -277,8 +330,10 @@ def _loadFile (filename): # load mat file elif ext == 'mat': - from scipy.io import savemat + from scipy.io import loadmat print('Loading file %s ... ' % (filename)) + dataraw = loadmat(filename, struct_as_record=False, squeeze_me=True) + data = _mat2dict(dataraw) #savemat(sim.cfg.filename+'.mat', replaceNoneObj(dataSave)) # replace None and {} with [] so can save in .mat format print('Finished saving!') From 2bc1176de618bd1a7156bfc0ac780fab698cfd52 Mon Sep 17 00:00:00 2001 From: salvdord Date: Tue, 25 Jul 2017 10:29:26 -0400 Subject: [PATCH 10/50] Made root section (with no parents) the source of spikes by default (issue #246) --- CHANGES.md | 2 ++ netpyne/cell.py | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index af250e22e..d3bbfef89 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,8 @@ - Added support to load params, cfg, net and simData from .mat files +- Made root section (with no parents) the source of spikes by default (issue #246) + - Fixed bug in modifyStims for NetStim 'interval' and 'rate' - Fixed bug importing cell -- use h.pop_section() to avoid stack overflow diff --git a/netpyne/cell.py b/netpyne/cell.py index 38f7db725..5e34dd54b 100644 --- a/netpyne/cell.py +++ b/netpyne/cell.py @@ -540,7 +540,8 @@ def associateGid (self, threshold = None): if sec: loc = sec['spikeGenLoc'] # get location of spike generator within section else: - sec = self.secs['soma'] if 'soma' in self.secs else self.secs[self.secs.keys()[0]] # use soma if exists, otherwise 1st section + #sec = self.secs['soma'] if 'soma' in self.secs else self.secs[self.secs.keys()[0]] # use soma if exists, otherwise 1st section + sec = next((sec for secName, sec in self.secs.iteritems() if len(sec['topol']) == 0), self.secs[self.secs.keys()[0]]) # root sec (no parents) loc = 0.5 nc = None if 'pointps' in sec: # if no syns, check if point processes with 'vref' (artificial cell) From 52f1f57a6cbcfccdfda0b58bca026d2cc4b25d0e Mon Sep 17 00:00:00 2001 From: salvdord Date: Wed, 26 Jul 2017 11:52:44 -0400 Subject: [PATCH 11/50] Fixed bug in sim.loadAll --- netpyne/simFuncs.py | 2 +- sdnotes.org | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/netpyne/simFuncs.py b/netpyne/simFuncs.py index bd31c28e1..77d4dd3aa 100644 --- a/netpyne/simFuncs.py +++ b/netpyne/simFuncs.py @@ -240,7 +240,7 @@ def loadAll (filename, data=None): if not data: data = _loadFile(filename) loadSimCfg(filename, data=data) loadNetParams(filename, data=data) - data=loadNet(filename, data=data) + loadNet(filename, data=data) loadSimData(filename, data=data) diff --git a/sdnotes.org b/sdnotes.org index 3a17a11cd..70a579c85 100644 --- a/sdnotes.org +++ b/sdnotes.org @@ -6998,6 +6998,8 @@ Ohio Wesleyan University ** Thalamocortical stimulation (Brenyn Jungmann, Missouri) ** Fear circuits (Aliyah Taylor, Princeton/Missouri) +** Macaque M1 TMS (Aman Aberra, Duke) +** CA1/CA3 (Mariane Bezaire, Boston University) ** EMAIL LIST salvadordura@gmail.com billl@neurosim.downstate.edu @@ -7028,6 +7030,8 @@ birgit.kriener@medisin.uio.no LatimerB@missouri.edu bwjmbb@mail.missouri.edu ali.taylor331@gmail.com +aman.aberra@duke.edu +marianne.bezaire@gmail.com * Related tools ** NEURON From 6a1fc7f9f23f2b2ab4f8714e0f11fdf3eb375d75 Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Wed, 26 Jul 2017 19:35:46 -0400 Subject: [PATCH 12/50] d --- netpyne/tests/tests.py | 214 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 202 insertions(+), 12 deletions(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index 6eae1fac5..d25cfdf8e 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -1058,8 +1058,8 @@ def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS if 'include' in plotRaster and not isinstance( plotRaster['include'], dict): errorMessages.append("SimConfig->'analysis'->'plotRaster'->'include': Must be a list. Value provided is " + str(plotRaster['include']) + ".") - if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") if 'maxSpikes' in plotRaster and not isinstance( plotRaster['maxSpikes'], int): errorMessages.append("SimConfig->'analysis'->'plotRaster'->'maxSpikes': Must be an integer. Value provided is " + str(plotRaster['maxSpikes']) + ".") @@ -1069,8 +1069,8 @@ def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS if not isinstance( plotRaster['orderBy'], list): errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderBy': Must be a list. Value provided is " + str(plotRaster['orderBy']) + ".") else: - if any ( [x not in 'gid', 'ynorm', 'y' for x in plotRaster['orderBy'] ] ) - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderBy': Must be a list. Value provided is " + str(plotRaster['orderBy']) + ".") + if any ( [x not in ['gid', 'ynorm', 'y'] for x in plotRaster['orderBy'] ] ) + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderBy': Valid values are " + str(['gid', 'ynorm', 'y'])+ ". Value provided is " + str(plotRaster['orderBy']) + ".") if 'orderInverse' in plotRaster: @@ -1081,15 +1081,205 @@ def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS if not isinstance( plotRaster['labels'], list): errorMessages.append("SimConfig->'analysis'->'plotRaster'->'labels': Must be a list. Value provided is " + str(plotRaster['labels']) + ".") + else: + if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['labels'] ] ) + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'labels': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") + + if 'popRates' in plotRaster: + + if not isinstance( plotRaster['popRates'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Must be a list. Value provided is " + str(plotRaster['popRates']) + ".") + else: + if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['popRates'] ] ) + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") + + if 'popRates' in plotRaster: + + if not isinstance( plotRaster['popRates'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Must be a list. Value provided is " + str(plotRaster['popRates']) + ".") + else: + if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['popRates'] ] ) + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") + + if 'spikeHist' in plotRaster: + + if not isinstance( plotRaster['spikeHist'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'spikeHist': Must be a list. Value provided is " + str(plotRaster['spikeHist']) + ".") + else: + if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['spikeHist'] ] ) + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'spikeHist': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") + + if 'plotSpikeHist' in analysis: + + plotSpikeHist = analysis['plotSpikeHist'] + + if not isinstance ( plotSpikeHist, dict): + errorMessages.append("SimConfig->'analysis'->'plotSpikeHist': Must be a dict. Value provided is " + str(plotSpikeHist) + "."") + + if 'include' in plotSpikeHist and not isinstance( plotSpikeHist['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotSpikeHist'->'include': Must be a list. Value provided is " + str(plotSpikeHist['include']) + ".") + + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + + if 'orderInverse' in plotRaster: + + if not isinstance( plotRaster['orderInverse'], bool): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderInverse': Must be boolean. Value provided is " + str(plotRaster['orderInverse']) + ".") + + if 'overlay' in plotRaster: + + if not isinstance( plotRaster['overlay'], bool): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'overlay': Must be boolean. Value provided is " + str(plotRaster['overlay']) + ".") + + if 'graphType' in plotRaster and plotRaster['graphType'] not in ['line','bar']: + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'graphType': GraphType must be in " + str(['line','bar']) + ". Value provided is " + str(plotRaster['graphType']) + ".") + + if 'yaxis' in plotRaster and plotRaster['yaxis'] not in ['rate','count']: + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'yaxis': yaxis must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['yaxis']) + ".") + + if 'figSize' in plotRaster and not isinstance (plotRaster['figSize'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'figSize': figSize must be tuple if specified". Value provided is " + str(plotRaster['figSize']) + ".") + + if 'binSize' in plotRaster and not isinstance( plotRaster['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'binSize': Must be an integer. Value provided is " + str(plotRaster['binSize']) + ".") + + if 'showFig' in plotRaster: + + if not isinstance( plotRaster['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'showFig': Must be boolean. Value provided is " + str(plotRaster['showFig']) + ".") + + if 'plotSpikePSD' in analysis: + + plotSpikePSD = analysis['plotSpikePSD'] + if not isinstance ( plotSpikePSD, dict): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD': Must be a dict. Value provided is " + str(plotSpikePSD) + "."") + + if 'include' in plotSpikePSD and not isinstance( plotSpikePSD['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'include': Must be a list. Value provided is " + str(plotSpikePSD['include']) + ".") + + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + + if 'overlay' in plotSpikePSD: + + if not isinstance( plotSpikePSD['overlay'], bool): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'overlay': Must be boolean. Value provided is " + str(plotSpikePSD['overlay']) + ".") + + if 'Fs' in plotSpikePSD and not isinstance ( plotSpikePSD['Fs'] , numbers.Real ) : + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'Fs': Fs must be float. Value provided is " + str(plotSpikePSD['Fs']) + ".") + + if 'figSize' in plotSpikePSD and not isinstance (plotSpikePSD['figSize'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'figSize': figSize must be tuple if specified". Value provided is " + str(plotSpikePSD['figSize']) + ".") + + if 'binSize' in plotSpikePSD and not isinstance( plotSpikePSD['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'binSize': Must be an integer. Value provided is " + str(plotSpikePSD['binSize']) + ".") + + if 'showFig' in plotSpikePSD: + + if not isinstance( plotSpikePSD['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'showFig': Must be boolean. Value provided is " + str(plotSpikePSD['showFig']) + ".") + + if 'plotTraces' in analysis: + + plotTraces = analysis['plotTraces'] + if not isinstance ( plotTraces, dict): + errorMessages.append("SimConfig->'analysis'->'plotTraces': Must be a dict. Value provided is " + str(plotTraces) + "."") + + if 'include' in plotTraces and not isinstance( plotTraces['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'include': Must be a list. Value provided is " + str(plotTraces['include']) + ".") + + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + + if 'overlay' in plotTraces and not isinstance( plotTraces['overlay'], bool): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'overlay': Must be boolean. Value provided is " + str(plotTraces['overlay']) + ".") + + if 'binSize' in plotTraces and not isinstance( plotTraces['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'binSize': Must be an integer. Value provided is " + str(plotTraces['binSize']) + ".") + + if 'oneFigPer' in plotRaster and plotRaster['oneFigPer'] not in ['cell','trace']: + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'oneFigPer': oneFigPer must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['oneFigPer']) + ".") + + if 'rerun' in plotTraces and not isinstance( plotTraces['rerun'], bool): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'rerun': Must be boolean. Value provided is " + str(plotTraces['rerun']) + ".") + + if 'figSize' in plotTraces and not isinstance (plotTraces['figSize'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotTraces['figSize']) + ".") + + if 'saveFig' in plotTraces and not isinstance (plotTraces['saveFig'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'saveFig': saveFig must be tuple if specified. Value provided is " + str(plotTraces['saveFig']) + ".") + + if 'plotShape' in analysis: + + plotShapes = analysis['plotShapes'] + if not isinstance ( plotShapes, dict): + errorMessages.append("SimConfig->'analysis'->'plotShapes': Must be a dict. Value provided is " + str(plotShapes) + "."") + + if 'showSyns' in plotShapes and not isinstance( plotShapes['showSyns'], bool): + errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showSyns': Must be boolean. Value provided is " + str(plotShapes['showSyns']) + ".") + + if 'showFig' in plotShapes and not isinstance( plotShapes['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showFig': Must be boolean. Value provided is " + str(plotShapes['showFig']) + ".") + + if 'plotConn' in analysis: + + plotConn = analysis['plotConn'] + + if not isinstance ( plotConn, dict): + errorMessages.append("SimConfig->'analysis'->'plotConn': Must be a dict. Value provided is " + str(plotConn) + "."") + + if 'include' in plotConn and not isinstance( plotConn['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotConn'->'include': Must be a list. Value provided is " + str(plotConn['include']) + ".") + + if 'feature' in plotConn: + if plotConn['spikeHist'] not in ['weight', 'delay', 'numConns']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'feature': Valid values are " + str(['weight', 'delay', 'numConns'])+ ". Value provided is " + str(plotConn['feature']) + ".") + + if 'groupBy' in plotConn: + if plotConn['spikeHist'] not in ['pop', 'cell']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'groupBy': Valid values are " + str(['pop', 'cell'])+ ". Value provided is " + str(plotConn['groupBy']) + ".") + + if 'orderBy' in plotConn: + if plotConn['spikeHist'] not in ['gid', 'ynorm', 'y']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plotConn['orderBy']) + ".") + + if 'showFig' in plotConn and not isinstance( plotConn['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotConn'->'showFig': Must be boolean. Value provided is " + str(plotConn['showFig']) + ".") + + if 'plotConn' in analysis: + + plotConn = analysis['plotConn'] + + if not isinstance ( plotConn, dict): + errorMessages.append("SimConfig->'analysis'->'plotConn': Must be a dict. Value provided is " + str(plotConn) + "."") + + if 'include' in plotConn and not isinstance( plotConn['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotConn'->'include': Must be a list. Value provided is " + str(plotConn['include']) + ".") + + if 'feature' in plotConn: + if plotConn['spikeHist'] not in ['weight', 'delay', 'numConns']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'feature': Valid values are " + str(['weight', 'delay', 'numConns'])+ ". Value provided is " + str(plotConn['feature']) + ".") + + if 'groupBy' in plotConn: + if plotConn['spikeHist'] not in ['pop', 'cell']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'groupBy': Valid values are " + str(['pop', 'cell'])+ ". Value provided is " + str(plotConn['groupBy']) + ".") + + if 'orderBy' in plotConn: + if plotConn['spikeHist'] not in ['gid', 'ynorm', 'y']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plotConn['orderBy']) + ".") + + if 'showFig' in plotConn and not isinstance( plotConn['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotConn'->'showFig': Must be boolean. Value provided is " + str(plotConn['showFig']) + ".") + +# include: List of cells to show ([‘all’|,’allCells’|,’allNetStims’|,120|,’L4’|,(‘L2’, 56)|,(‘L5’,[4,5,6])]) +# showConns: Whether to show connections or not (True|False) +# view: Perspective view, either front (‘xy’) or top-down (‘xz’) +# figSize: Size of figure ((width, height)) +# saveData: File name where to save the final data used to generate the figure (None|’fileName’) +# saveFig: File name where to save the figure (None|’fileName’) +# showFig: Whether to show the figure or not (True|False) - # orderInverse boolean - # labels: string (in valid list)? (‘legend’|’overlay’)) - # popRates: string (in valid list)? (‘legend’|’overlay’) - # - # spikeHist: string (in valid list)? (None|’overlay’|’subplot’) - # - # spikeHistBin: (int) - # except Exception as e: traceback.print_exc(file=sys.stdout) e.args += ( ) From 589517d4db7d52d69b726bdbe88a4546da33fe49 Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 27 Jul 2017 18:36:56 +0100 Subject: [PATCH 13/50] Updates to support weight parameter when applying stimulations in NeuroML2 e.g. https://github.com/NeuroML/NeuroML2/blob/beadc6579d8d2a1edac2ae562a899f8b0a094891/LEMSexamples/LEMS_NML2_Ex26_Weights.xml#L105 --- netpyne/cell.py | 22 ++++++++++++---------- netpyne/network.py | 5 +++++ netpyne/neuromlFuncs.py | 10 +++++----- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/netpyne/cell.py b/netpyne/cell.py index 5e34dd54b..151e09b27 100644 --- a/netpyne/cell.py +++ b/netpyne/cell.py @@ -700,7 +700,7 @@ def addConn (self, params, netStimParams = None): # Create connections for i in range(params['synsPerConn']): - + if netStimParams: netstim = self.addNetStim(netStimParams) @@ -1015,17 +1015,19 @@ def addStim (self, params): print "Can't set point process paramaters of type vector eg. VClamp.amp[3]" pass #setattr(stim, stimParamName._ref_[0], stimParamValue[0]) - elif 'originalFormat' in params: + elif 'originalFormat' in params and stimParamName=='originalFormat' and params['originalFormat']=='NeuroML2_stochastic_input': if sim.cfg.verbose: print(' originalFormat: %s'%(params['originalFormat'])) - if stimParamName=='originalFormat' and params['originalFormat']=='NeuroML2_stochastic_input': - rand = h.Random() - sim._init_stim_randomizer(rand, params['type'], params['stim_count'], sim.cfg.seeds['stim']) - rand.negexp(1) - stim.noiseFromRandom(rand) - params['h%s'%params['originalFormat']] = rand + + rand = h.Random() + sim._init_stim_randomizer(rand, params['type'], params['stim_count'], sim.cfg.seeds['stim']) + rand.negexp(1) + stim.noiseFromRandom(rand) + params['h%s'%params['originalFormat']] = rand else: - setattr(stim, stimParamName, stimParamValue) - stringParams = stringParams + ', ' + stimParamName +'='+ str(stimParamValue) + if stimParamName in ['weight']: + setattr(stim, stimParamName, stimParamValue) + stringParams = stringParams + ', ' + stimParamName +'='+ str(stimParamValue) + self.stims.append(params) # add to python structure self.stims[-1]['h'+params['type']] = stim # add stim object to dict in stims list if sim.cfg.verbose: print(' Added %s %s to cell gid=%d, sec=%s, loc=%.4g%s'% diff --git a/netpyne/network.py b/netpyne/network.py index fe4494b64..165112d91 100644 --- a/netpyne/network.py +++ b/netpyne/network.py @@ -144,7 +144,12 @@ def addStims (self): params['delay'] = strParams['delayList'][postCellGid] if 'delayList' in strParams else target.get('delay', 1.0) params['synsPerConn'] = strParams['synsPerConnList'][postCellGid] if 'synsPerConnList' in strParams else target.get('synsPerConn', 1) params['synMech'] = target.get('synMech', None) + + if 'originalFormat' in source and source['originalFormat'] == 'NeuroML2': + if 'weight' in target: + params['weight'] = target['weight'] + for sourceParam in source: # copy source params params[sourceParam] = strParams[sourceParam+'List'][postCellGid] if sourceParam+'List' in strParams else source.get(sourceParam) diff --git a/netpyne/neuromlFuncs.py b/netpyne/neuromlFuncs.py index afb02f9f9..d404ebb44 100644 --- a/netpyne/neuromlFuncs.py +++ b/netpyne/neuromlFuncs.py @@ -510,7 +510,7 @@ def exportNeuroML2 (reference, connections=True, stimulations=True): preFractionAlong="0.5" postSegment="0" postFractionAlong="0.5" synapse="gj1"/>''' weight = conn['weight'] if weight!=1: - raise Exception('Cannot yet support inputs where weight !=1!') + raise Exception('Cannot yet support electrical connections where weight !=1!') connection = neuroml.ElectricalConnectionInstance(id=index, \ pre_cell="../%s/%i/%s"%(popPre, conn['indexPre'], populations_vs_components[popPre]), \ @@ -1199,8 +1199,6 @@ def handleSingleInput(self, inputListId, id, cellId, segId = 0, fract = 0.5, wei pop_id = self.popStimLists[inputListId]['conds']['pop'] nrn_sec, nrn_fract = self._convert_to_nrn_section_location(pop_id,segId,fract) - if weight!=1: - raise Exception('Cannot yet support inputs where weight !=1!') #seg_name = self.pop_ids_vs_seg_ids_vs_segs[pop_id][segId].name if self.pop_ids_vs_seg_ids_vs_segs.has_key(pop_id) else 'soma' @@ -1218,8 +1216,10 @@ def handleSingleInput(self, inputListId, id, cellId, segId = 0, fract = 0.5, wei 'loc': nrn_fract, 'conds': {'pop':pop_id, 'cellList': [cellId]}} - - if self.verbose: print("Input: %s[%s] on %s, cellId: %i, seg: %i (nrn: %s), fract: %f (nrn: %f); ref: %s" % (inputListId,id,pop_id,cellId,segId,nrn_sec,fract,nrn_fract,stimId)) + if weight!=1: + self.stimLists[stimId]['weight'] = weight + + if self.verbose: print("Input: %s[%s] on %s, cellId: %i, seg: %i (nrn: %s), fract: %f (nrn: %f); ref: %s; weight: %s" % (inputListId,id,pop_id,cellId,segId,nrn_sec,fract,nrn_fract,stimId, weight)) # TODO: build just one stimLists/stimSources entry for the inputList # Issue: how to specify the sec/loc per individual stim?? From 7c4cb7a2237781821684c4d4b495dd0663a2fddf Mon Sep 17 00:00:00 2001 From: salvdord Date: Mon, 31 Jul 2017 12:36:39 -0400 Subject: [PATCH 14/50] ensure interval calculated correctly from rate in pulses --- netpyne/cell.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netpyne/cell.py b/netpyne/cell.py index 5e34dd54b..9e6f2c5b6 100644 --- a/netpyne/cell.py +++ b/netpyne/cell.py @@ -1332,7 +1332,7 @@ def createNEURONObj (self): if 'interval' in pulse: interval = pulse['interval'] elif 'rate' in pulse: - interval = 1000/pulse['rate'] + interval = 1000.0/pulse['rate'] else: print 'Error: Vecstim pulse missing "rate" or "interval" parameter' return From 601629f70d52872ac341ac347daaf5a8bf12721f Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Mon, 31 Jul 2017 20:04:15 -0400 Subject: [PATCH 15/50] simconfig --- netpyne/tests/tests.py | 897 ++++++++++++++++++-------------- netpyne/tests/validate_tests.py | 8 +- 2 files changed, 505 insertions(+), 400 deletions(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index d25cfdf8e..3b9dcd90f 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -48,6 +48,8 @@ TEST_TYPE_LTE_ZERO = "Lesser than or equal to zero" # ex. lesser than or equal to TEST_TYPE_IS_DICT = "Is dictionary" # must be a dictionary +TEST_TYPE_IS_LIST = "Is list" # must be a list +TEST_TYPE_IS_BOOL = "Is boolean" # must be a boolean TEST_TYPE_IS_NUMERIC = "Is Numeric" # must be numeric TEST_TYPE_IS_FLOAT = "Is Float" # must be float @@ -79,6 +81,7 @@ TEST_TYPE_STIM_TARGET_TEST = "Stim source test" TEST_TYPE_IS_VALID_SPIKE_GENLOC = "Spike gen loc" TEST_TYPE_VALID_STIM = "Valid stim" +TEST_TYPE_VALID_ANALYSIS = " Valid analysis" class TestTypeObj(object): @@ -108,7 +111,7 @@ def testExistsInList(self, val,params): def testExistsInDict(self, val,paramDict, dictKey): try: #print ( " VAL = " + str(val) + " paramDict " + str(paramDict) + " dictKey " + str(dictKey)) - if val == '' : + if val == '': return existsInDict = False for key, valueDict in paramDict.items(): @@ -237,6 +240,20 @@ def testIsDict(self,val): # TEST_TYPE_IS_DICT e.args += (val,) raise + def testIsList(self,val): # TEST_TYPE_IS_LIST + try: + assert (isinstance (val,list)) + except AssertionError as e: + e.args += (val,) + raise + + def testIsBoolean(self,val): # TEST_TYPE_IS_BOOLEAN + try: + assert (isinstance (val,bool)) + except AssertionError as e: + e.args += (val,) + raise + def testIsNumeric(self,val): # TEST_TYPE_IS_NUMERIC try: assert (isinstance (val,numbers.Number)) @@ -296,51 +313,51 @@ def testValidStim(self,paramValues): # TEST_TYPE_VALID_STIM if not stimParamsAllowed: if any([x in POP_STIM_KEYS for x in paramValues]): stimValid = False - errorMessages.append("PopParams: Any or all of the params '" + str(POP_STIM_KEYS)+ "' are allowed only if cellModel in '" + str(['IntFire1', 'IntFire2', 'NetStim', 'VecStim']) + "'.") + errorMessages.append("popParams: Any or all of the params '" + str(POP_STIM_KEYS)+ "' are allowed only if cellModel in '" + str(['IntFire1', 'IntFire2', 'NetStim', 'VecStim']) + "'.") else: # if stimParamsAllowed: - #print ( " IN ELSE !!!!" + str(paramValues.keys()) + " :: " + str('pulses' in paramValues)) + #print ( " IN ELSE !!!!" + str(paramValues.keys()) + ":: " + str('pulses' in paramValues)) if 'interval' in paramValues: if not isinstance(paramValues['interval'], numbers.Real): stimValid = False - errorMessages.append("PopParams->'interval': Must be a float if specified. Value provided is :" + str(paramValues['interval'])) + errorMessages.append("popParams->'interval': Must be a float if specified. Value provided is:" + str(paramValues['interval'])) if 'rate' in paramValues: if not isinstance(paramValues['rate'], numbers.Real): stimValid = False - errorMessages.append("PopParams->'rate': Must be a float if specified. Value provided is :" + str(paramValues['rate'])) + errorMessages.append("popParams->'rate': Must be a float if specified. Value provided is:" + str(paramValues['rate'])) if 'noise' in paramValues: if not isinstance(paramValues['noise'], numbers.Real): stimValid = False - errorMessages.append("PopParams->'noise': Must be a float between 0 and 1 if specified. Value provided is :" + str(paramValues['noise'])) + errorMessages.append("popParams->'noise': Must be a float between 0 and 1 if specified. Value provided is:" + str(paramValues['noise'])) elif float(paramValues['noise']) < 0 or float(paramValues['noise']) > 1: stimValid = False - errorMessages.append("PopParams->'noise': Must be a float between 0 and 1 if specified. Value provided is :" + str(paramValues['noise'])) + errorMessages.append("popParams->'noise': Must be a float between 0 and 1 if specified. Value provided is:" + str(paramValues['noise'])) if 'start' in paramValues: if not isinstance(paramValues['start'], numbers.Real): stimValid = False - errorMessages.append("PopParams->'start': Must be a float if specified. Value provided is :" + str(paramValues['start'])) + errorMessages.append("popParams->'start': Must be a float if specified. Value provided is:" + str(paramValues['start'])) if 'number' in paramValues: if not isinstance(paramValues['number'], numbers.Real): stimValid = False - errorMessages.append("PopParams->'number': Must be a float if specified. Value provided is :" + str(paramValues['number'])) + errorMessages.append("popParams->'number': Must be a float if specified. Value provided is:" + str(paramValues['number'])) if paramValues['cellModel'] != 'VecStim' and any([x in paramValues for x in ['spkTimes', 'pulses']]): stimValid = False - errorMessages.append("PopParams: 'spkTimes' or 'pulses' can be provided if 'cellModel' is 'VecStim' ") + errorMessages.append("popParams: 'spkTimes' or 'pulses' can be provided if 'cellModel' is 'VecStim' ") if 'spkTimes' in paramValues: if not isinstance(paramValues['spkTimes'], list): stimValid = False - errorMessages.append("PopParams->'spkTimes': Must be a list if specified. Value provided is :" + str(paramValues['spkTimes'])) + errorMessages.append("popParams->'spkTimes': Must be a list if specified. Value provided is:" + str(paramValues['spkTimes'])) if 'pulses' in paramValues: #print (" *** IN PULSES ") if not isinstance(paramValues['pulses'], list): stimValid = False - errorMessages.append("PopParams->'pulses': Must be a list of dicts if specified. They keys for each dict are '" + str(PULSE_KEYS) + "' Value provided is :" + str(paramValues['pulses'])) + errorMessages.append("popParams->'pulses': Must be a list of dicts if specified. They keys for each dict are '" + str(PULSE_KEYS) + "' Value provided is:" + str(paramValues['pulses'])) if not all( [isinstance(x, dict) for x in paramValues['pulses']]): stimValid = False - errorMessages.append("PopParams->'pulses': Must be a list of dicts if specified. Value provided is :" + str(paramValues['pulses'])) + errorMessages.append("popParams->'pulses': Must be a list of dicts if specified. Value provided is:" + str(paramValues['pulses'])) for pulseValue in paramValues['pulses']: if not all([x in PULSE_KEYS for x in pulseValue.keys()]): stimValid = False - errorMessages.append("PopParams->'pulses': Must be a list of dicts if specified. Value provided is :'" + str(paramValues['pulses']) + "'. Keys of each dict must be in '" + str(PULSE_KEYS) + "'.") + errorMessages.append("popParams->'pulses': Must be a list of dicts if specified. Value provided is:'" + str(paramValues['pulses']) + "'. Keys of each dict must be in '" + str(PULSE_KEYS) + "'.") except Exception as e: e.args += () @@ -356,14 +373,14 @@ def testValidGeometries(self,paramValues): # TEST_TYPE_VALUE_LIST for key, values in paramValues['secs'].items(): if 'geom' in values: if len(values['geom']) == 0: - errorMessage = "CellParams -> secs ('" + str(key) + "'): Geom parameters must be specified." + errorMessage = "cellParams -> secs ('" + str(key) + "'): Geom parameters must be specified." geomValid = False if not isinstance(values['geom'], dict): - errorMessage = "CellParams -> secs ('" + str(key) + "'): Geom parameters must be specified as a dict." + errorMessage = "cellParams -> secs ('" + str(key) + "'): Geom parameters must be specified as a dict." geomValid = False # if any ([x in values['geom'].keys() for x in VALID_GEOMETRIES_SUBSET]) and not all([x in values['geom'].keys() for x in VALID_GEOMETRIES_SUBSET]): # #print (" ----++ 999") - # errorMessage = "CellParams -> secs ('" + str(key) + "'): If one of '" + str(VALID_GEOMETRIES_SUBSET) + "' are specified, then at least all of the parameters in that list needs to be specified. Values specified are: '" + str(values['geom']) + "'." + # errorMessage = "cellParams -> secs ('" + str(key) + "'): If one of '" + str(VALID_GEOMETRIES_SUBSET) + "' are specified, then at least all of the parameters in that list needs to be specified. Values specified are: '" + str(values['geom']) + "'." # geomValid = False if not geomValid: break @@ -372,7 +389,7 @@ def testValidGeometries(self,paramValues): # TEST_TYPE_VALUE_LIST for key1, values1 in values['geom'].items(): if key1 not in VALID_GEOMETRIES: - errorMessage = "CellParams -> secs ('" + str(key) + "') -> 'geom': Invalid geom parameter '"+ str(key1) + "' specified. Valid values are '" + str(VALID_GEOMETRIES) + "'." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> 'geom': Invalid geom parameter '"+ str(key1) + "' specified. Valid values are '" + str(VALID_GEOMETRIES) + "'." geomValid = False if not geomValid: break @@ -380,10 +397,10 @@ def testValidGeometries(self,paramValues): # TEST_TYPE_VALUE_LIST if PT_3D in values['geom']: if not isinstance ( values['geom'][PT_3D] , list ): - errorMessage = "CellParams -> secs ('" + str(key) + "') -> 'geom': pt3D must be an array with each array element being a 4 length 4 array of floats." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> 'geom': pt3D must be an array with each array element being a 4-element list or array of floats." geomValid = False - elif len(values['geom'][PT_3D]) == 0 : - errorMessage = "CellParams -> secs ('" + str(key) + "') -> 'geom': At least one element must be provided for pt3D." + elif len(values['geom'][PT_3D]) == 0: + errorMessage = "cellParams -> secs ('" + str(key) + "') -> 'geom': At least one element must be provided for pt3D." geomValid = False if not geomValid: @@ -392,16 +409,16 @@ def testValidGeometries(self,paramValues): # TEST_TYPE_VALUE_LIST for elem in values['geom'][PT_3D]: if not isinstance ( elem , list ): - errorMessage = "CellParams -> secs ('" + str(key) + "') -> 'geom' -> 'pt3D':Type error. pt3D must be an array with each array element being a 4length 4 array of floats." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> 'geom' -> 'pt3D':Type error. pt3D must be an array with each array element being a 4-element list or array of floats.Value specified is: '" + str(elem) + "'." geomValid = False elif len(elem) != 4: - errorMessage = "CellParams -> secs ('" + str(key) + "') -> 'geom' -> 'pt3D':Length error. pt3D must be an array with each array element being a 4 length 4 array of floats." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> 'geom' -> 'pt3D':Length error. pt3D must be an array with each array element being a 4-element list or array of floats.Value specified is: '" + str(elem) + "'." geomValid = False if not geomValid: break for elem2 in elem: if not isinstance ( elem2, numbers.Real ): - errorMessage = "CellParams -> secs ('" + str(key) + "') -> 'geom' -> 'pt3D':Float error. pt3D must be an array with each array element being a 4 length 4 array of floats. Value specified is: '" + str(elem2) + "'." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> 'geom' -> 'pt3D':Float error. pt3D must be an array with each array element being a 4-element list or array of floats. Value specified is: '" + str(elem2) + "'." geomValid = False if not geomValid: break @@ -422,41 +439,41 @@ def testValidTopologies(self,paramValues): # TEST_TYPE_VALUE_LIST errorMessage = '' if 'secs' in paramValues: - if len(paramValues['secs']) > 0 : + if len(paramValues['secs']) > 0: if len(paramValues['secs']) > 1: topolNeeded = True for key, value in paramValues['secs'].items(): if 'topol' not in value: if topolNeeded: topolValid = False - errorMessage = "CellParams -> secs ('" + str(paramValues['secs'].keys()) + "'): Topology needs to be specified if more than one section." + errorMessage = "cellParams -> secs ('" + str(paramValues['secs'].keys()) + "'): Topology needs to be specified if more than one section." else: topolValid = True - if not isinstance (value['topol'], dict ) : + if not isinstance (value['topol'], dict ): topolValid = False - errorMessage = "CellParams -> secs ('" + str(key) + "') -> topol: Topology, if specified, must be a dict. Value specified is '" + str(value['topol']) + "'." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol: Topology, if specified, must be a dict. Value specified is '" + str(value['topol']) + "'." elif len(value['topol'].keys()) < 3: topolValid = False - errorMessage = "CellParams -> secs ('" + str(key) + "') -> topol: At least 3 parameters (parentSec, parentX and childX) must be specified for topology. Values specified are: '" + str(value['topol'].keys()) + "'." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol: At least 3 parameters (parentSec, parentX and childX) must be specified for topology. Values specified are: '" + str(value['topol'].keys()) + "'." elif not any([x in value['topol'].keys() for x in VALID_TOPOLOGY_PARAMS ]): topolValid = False - errorMessage = "CellParams -> secs ('" + str(key) + "') -> topol: Invalid value specified :''" + str(value['topol']) + "'. Valid values are: '" + str(VALID_TOPOLOGY_PARAMS) + "'." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol: Invalid value specified:''" + str(value['topol']) + "'. Valid values are: '" + str(VALID_TOPOLOGY_PARAMS) + "'." elif value['topol']['parentSec'] not in paramValues['secs']: topolValid = False - errorMessage = "CellParams -> secs ('" + str(key) + "') -> topol -> parentSec: parentSec '" + str(value['topol']['parentSec']) +"' does not point to a valid section. Valid sections are ('" + str(paramValues['secs'].keys()) + "')." - elif not isinstance ( value['topol']['parentX'] , numbers.Real ) : + errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol -> parentSec: parentSec '" + str(value['topol']['parentSec']) +"' does not point to a valid section. Valid sections are ('" + str(paramValues['secs'].keys()) + "')." + elif not isinstance ( value['topol']['parentX'] , numbers.Real ): topolValid = False - errorMessage = "CellParams -> secs ('" + str(key) + "') -> topol -> parentX: parentX is not a float." - elif not isinstance ( value['topol']['childX'] , numbers.Real ) : + errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol -> parentX: parentX is not a float." + elif not isinstance ( value['topol']['childX'] , numbers.Real ): topolValid = False - errorMessage = "CellParams -> secs ('" + str(key) + "') -> topol -> childX: childX is not a float." - elif value['topol']['parentX'] < 0 or value['topol']['parentX'] >1 : + errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol -> childX: childX is not a float." + elif value['topol']['parentX'] < 0 or value['topol']['parentX'] >1: topolValid = False - errorMessage = "CellParams -> secs ('" + str(key) + "') -> topol -> parentX: parentX must be between 0 and 1. Value specified is '" + str(value['topol']['parentX'] ) + "'." - elif value['topol']['childX'] < 0 or value['topol']['childX'] >1 : + errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol -> parentX: parentX must be between 0 and 1. Value specified is '" + str(value['topol']['parentX'] ) + "'." + elif value['topol']['childX'] < 0 or value['topol']['childX'] >1: topolValid = False - errorMessage = "CellParams -> secs ('" + str(key) + "') -> topol -> parentX: childX must be between 0 and 1. Value specified is '" + str(value['topol']['childX'] ) + "'." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol -> parentX: childX must be between 0 and 1. Value specified is '" + str(value['topol']['childX'] ) + "'." if topolNeeded: # print ("11 = " + str(topolValid)) @@ -491,19 +508,19 @@ def testValidMechs(self,paramValues): # TEST_TYPE_VALID_MECHS keys_suffixed = [x for x in values2.keys()] if not any([x in mechs[key2] for x in values2.keys() ]): mechsValidFlag = False - errorMessage = "CellParams -> secs ('" + str(key) + "') -> mechs ('" + str(key2) + "') -> ions ('" + str(ionName) + "') : Invalid ions (" + str(values2.keys()) + ") specified. Valid value are: " + str(mechs[key2]) + ". Values specified are " + str(values2.keys()) + "." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> mechs ('" + str(key2) + "') -> ions ('" + str(ionName) + "'): Invalid ions (" + str(values2.keys()) + ") specified. Valid value are: " + str(mechs[key2]) + ". Values specified are " + str(values2.keys()) + "." elif not all([x in values2.keys() for x in mechs[key2] ]): mechsWarningFlag = True - errorMessage = "CellParams -> secs ('" + str(key) + "') -> mechs ('" + str(key2) + "') -> ions ('" + str(ionName) + "') : Ion specifications incomplete (" + str(values2.keys()) + "). Complete list is: " + str(mechs[key2]) + ". Values specified are " + str(values2.keys()) + "." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> mechs ('" + str(key2) + "') -> ions ('" + str(ionName) + "'): Ion specifications incomplete (" + str(values2.keys()) + "). Complete list is: " + str(mechs[key2]) + ". Values specified are " + str(values2.keys()) + "." else: keys_suffixed = [x + "_" + key2 for x in values2.keys()] mechs_unsuffixed = [x.replace("_" + key2, "") for x in mechs[key2]] if not all([x in mechs[key2] for x in keys_suffixed]): mechsValidFlag = False - errorMessage = "CellParams -> secs ('" + str(key) + "') -> mechs ('" + str(key2) + "'): Invalid mechs (" + str(values2.keys()) + ") specified . Valid value are: " + str(mechs_unsuffixed) + ". Values specified are " + str(values2.keys()) + "." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> mechs ('" + str(key2) + "'): Invalid mechs (" + str(values2.keys()) + ") specified . Valid value are: " + str(mechs_unsuffixed) + ". Values specified are " + str(values2.keys()) + "." elif not all([x in keys_suffixed for x in mechs[key2] ]): mechsWarningFlag = True - errorMessage = "CellParams -> secs ('" + str(key) + "') -> mechs ('" + str(key2) + "'): Incomplete list provided. Complete list is: " + str(mechs_unsuffixed) + ". Values specified are " + str(values2.keys()) + "." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> mechs ('" + str(key2) + "'): Incomplete list provided. Complete list is: " + str(mechs_unsuffixed) + ". Values specified are " + str(values2.keys()) + "." mechsValidFlagList.append(mechsValidFlag) mechsWarningFlagList.append(mechsWarningFlagList) @@ -528,19 +545,19 @@ def testValidPointps(self,paramValues): # TEST_TYPE_VALID_POINTPS for key1, values1 in paramValues['secs'][key].items(): if key1 == "pointps": for key2, values2 in paramValues['secs'][key][key1].items(): - #print (" ** keys2, values2 = " + str(key2) + " :: " + str(values2)) + #print (" ** keys2, values2 = " + str(key2) + ":: " + str(values2)) if 'mod' not in values2.keys(): - errorMessages.append("CellParams -> secs ('" + str(key) + "') -> pointps ('" + str(key2) + "'): mod must be specified") + errorMessages.append("cellParams -> secs ('" + str(key) + "') -> pointps ('" + str(key2) + "'): mod must be specified") pointpsValid = False elif 'loc' in values2.keys(): loc = values2['loc'] if not isinstance(loc, numbers.Real ): - errorMessages.append("CellParams -> secs ('" + str(key) + "') -> pointps ('" + str(key2) + "'): Loc must be a float. Value provided is " + str(loc)) + errorMessages.append("cellParams -> secs ('" + str(key) + "') -> pointps ('" + str(key2) + "'): Loc must be a float. Value provided is " + str(loc)) elif loc < 0 or loc >1: - errorMessages.append("CellParams -> secs ('" + str(key) + "') -> pointps ('" + str(key2) + "'): Loc must be a between 0 and 1. Value provided is " + str(loc)) + errorMessages.append("cellParams -> secs ('" + str(key) + "') -> pointps ('" + str(key2) + "'): Loc must be a between 0 and 1. Value provided is " + str(loc)) elif 'synList' in values2.keys(): if not isinstance ('synList', list): - errorMessages.append("CellParams -> secs ('" + str(key) + "') -> pointps ('" + str(key2) + "'): SynList must be a list. Value provided is " + str(values2['synList'])) + errorMessages.append("cellParams -> secs ('" + str(key) + "') -> pointps ('" + str(key2) + "'): SynList must be a list. Value provided is " + str(values2['synList'])) except AssertionError as e: e.args += () @@ -773,14 +790,14 @@ def testValidSecLists(self,paramValues): # TEST_TYPE_VALID_SEC_LIST secList = cellParams['secList'] #print ( " seclist = " + str(secList)) if not isinstance (secList, dict): - errorMessage = "CellParams -> seclist must be a dict." + errorMessage = "cellParams -> seclist must be a dict." else: for key, value in secList.items(): #print ( " ^^^^^^^^ value = " + str(value)) if not isinstance (value, list): - errorMessage = "CellParams -> secList ('" + str(key) + "'):Each element of seclist must be a list. Value specified is: " + str(value) + "." + errorMessage = "cellParams -> secList ('" + str(key) + "'):Each element of seclist must be a list. Value specified is: " + str(value) + "." elif any ([x not in validSections for x in value]): - errorMessage = "CellParams -> secList ('" + str(key) + "'): " + str(value) + " - Sections specified in secList keys must be specified in cells. Valid list is " + str(validSections) + "." + errorMessage = "cellParams -> secList ('" + str(key) + "'): " + str(value) + " - Sections specified in secList keys must be specified in cells. Valid list is " + str(validSections) + "." except Exception as e: traceback.print_exc(file=sys.stdout) @@ -794,7 +811,7 @@ def testTypeHierarchy(self,paramValues): # TEST_TYPE_CONN_PARM_HIERARCHY errorMessage = '' - #print ( " ::: in hierarchy ") + #print ( "::: in hierarchy ") try: @@ -883,7 +900,7 @@ def testValidConnShape(self,paramValues): # TEST_TYPE_CONN_SHAPE errorMessages.append(errorMessage) if pulseType != '': - if pulseType not in ['square', 'gaussian'] : + if pulseType not in ['square', 'gaussian']: errorMessage = "connList -> shape: Pulse type, if specified, can only be square or gaussian. Value specified is " + str(pulseType) + "." errorMessages.append(errorMessage) @@ -924,7 +941,7 @@ def testValidConnPlasticity(self,paramValues): # TEST_TYPE_CONN_PLASTICITY return errorMessages if 'mech' not in plasticity: - errorMessage = "connParams -> 'plasticity' :'mech' must be specified in plasticity in connParams with label." + errorMessage = "connParams -> 'plasticity':'mech' must be specified in plasticity in connParams with label." errorMessages.append(errorMessage) if 'params' not in plasticity: errorMessage = "connParams -> 'plasticity': 'params' must be specified in plasticity." @@ -1037,248 +1054,294 @@ def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS errorMessages = [] - if simConfig.analysis: - - analysis = simConfig.analysis - - if not isinstance ( simConfig.analysis, dict): - errorMessages.append("SimConfig->'analysis': Must be a dict. Value provided is " + str(simConfig.analysis) + "."") - return errorMessages - - if any (analysis.keys() not in ['plotRaster','plotSpikeHist', 'plotSpikePSD', 'plotTraces', 'plotShape', 'plotConn', 'plot2DNet', 'nTE', 'granger']): - errorMessages.append("SimConfig->'analysis': Valid analysis functions are 'plotRaster','plotSpikeHist', 'plotSpikePSD', 'plotTraces', 'plotShape', 'plotConn', 'plot2DNet', 'nTE', 'granger'.") - - if 'plotRaster' in analysis: - - plotRaster = analysis['plotRaster'] - - if not isinstance ( plotRaster, dict): - errorMessages.append("SimConfig->'analysis'->'plotRaster': Must be a dict. Value provided is " + str(plotRaster) + "."") - - if 'include' in plotRaster and not isinstance( plotRaster['include'], dict): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'include': Must be a list. Value provided is " + str(plotRaster['include']) + ".") - - # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") - - if 'maxSpikes' in plotRaster and not isinstance( plotRaster['maxSpikes'], int): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'maxSpikes': Must be an integer. Value provided is " + str(plotRaster['maxSpikes']) + ".") - - if 'orderBy' in plotRaster: - - if not isinstance( plotRaster['orderBy'], list): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderBy': Must be a list. Value provided is " + str(plotRaster['orderBy']) + ".") - else: - if any ( [x not in ['gid', 'ynorm', 'y'] for x in plotRaster['orderBy'] ] ) - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderBy': Valid values are " + str(['gid', 'ynorm', 'y'])+ ". Value provided is " + str(plotRaster['orderBy']) + ".") - - if 'orderInverse' in plotRaster: - - if not isinstance( plotRaster['orderInverse'], bool): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderInverse': Must be boolean. Value provided is " + str(plotRaster['orderInverse']) + ".") - - if 'labels' in plotRaster: - - if not isinstance( plotRaster['labels'], list): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'labels': Must be a list. Value provided is " + str(plotRaster['labels']) + ".") - else: - if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['labels'] ] ) - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'labels': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") - - if 'popRates' in plotRaster: - - if not isinstance( plotRaster['popRates'], list): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Must be a list. Value provided is " + str(plotRaster['popRates']) + ".") - else: - if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['popRates'] ] ) - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") - - if 'popRates' in plotRaster: - - if not isinstance( plotRaster['popRates'], list): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Must be a list. Value provided is " + str(plotRaster['popRates']) + ".") - else: - if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['popRates'] ] ) - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") - - if 'spikeHist' in plotRaster: - - if not isinstance( plotRaster['spikeHist'], list): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'spikeHist': Must be a list. Value provided is " + str(plotRaster['spikeHist']) + ".") - else: - if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['spikeHist'] ] ) - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'spikeHist': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") - - if 'plotSpikeHist' in analysis: - - plotSpikeHist = analysis['plotSpikeHist'] - - if not isinstance ( plotSpikeHist, dict): - errorMessages.append("SimConfig->'analysis'->'plotSpikeHist': Must be a dict. Value provided is " + str(plotSpikeHist) + "."") - - if 'include' in plotSpikeHist and not isinstance( plotSpikeHist['include'], list): - errorMessages.append("SimConfig->'analysis'->'plotSpikeHist'->'include': Must be a list. Value provided is " + str(plotSpikeHist['include']) + ".") - - # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") - - if 'orderInverse' in plotRaster: - - if not isinstance( plotRaster['orderInverse'], bool): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderInverse': Must be boolean. Value provided is " + str(plotRaster['orderInverse']) + ".") - - if 'overlay' in plotRaster: - - if not isinstance( plotRaster['overlay'], bool): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'overlay': Must be boolean. Value provided is " + str(plotRaster['overlay']) + ".") - - if 'graphType' in plotRaster and plotRaster['graphType'] not in ['line','bar']: - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'graphType': GraphType must be in " + str(['line','bar']) + ". Value provided is " + str(plotRaster['graphType']) + ".") - - if 'yaxis' in plotRaster and plotRaster['yaxis'] not in ['rate','count']: - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'yaxis': yaxis must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['yaxis']) + ".") - - if 'figSize' in plotRaster and not isinstance (plotRaster['figSize'], tuple): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'figSize': figSize must be tuple if specified". Value provided is " + str(plotRaster['figSize']) + ".") - - if 'binSize' in plotRaster and not isinstance( plotRaster['binSize'], int): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'binSize': Must be an integer. Value provided is " + str(plotRaster['binSize']) + ".") - - if 'showFig' in plotRaster: - - if not isinstance( plotRaster['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'showFig': Must be boolean. Value provided is " + str(plotRaster['showFig']) + ".") - - if 'plotSpikePSD' in analysis: - - plotSpikePSD = analysis['plotSpikePSD'] - if not isinstance ( plotSpikePSD, dict): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD': Must be a dict. Value provided is " + str(plotSpikePSD) + "."") - - if 'include' in plotSpikePSD and not isinstance( plotSpikePSD['include'], list): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'include': Must be a list. Value provided is " + str(plotSpikePSD['include']) + ".") - - # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") - - if 'overlay' in plotSpikePSD: - - if not isinstance( plotSpikePSD['overlay'], bool): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'overlay': Must be boolean. Value provided is " + str(plotSpikePSD['overlay']) + ".") - - if 'Fs' in plotSpikePSD and not isinstance ( plotSpikePSD['Fs'] , numbers.Real ) : - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'Fs': Fs must be float. Value provided is " + str(plotSpikePSD['Fs']) + ".") - - if 'figSize' in plotSpikePSD and not isinstance (plotSpikePSD['figSize'], tuple): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'figSize': figSize must be tuple if specified". Value provided is " + str(plotSpikePSD['figSize']) + ".") - - if 'binSize' in plotSpikePSD and not isinstance( plotSpikePSD['binSize'], int): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'binSize': Must be an integer. Value provided is " + str(plotSpikePSD['binSize']) + ".") - - if 'showFig' in plotSpikePSD: - - if not isinstance( plotSpikePSD['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'showFig': Must be boolean. Value provided is " + str(plotSpikePSD['showFig']) + ".") - - if 'plotTraces' in analysis: - - plotTraces = analysis['plotTraces'] - if not isinstance ( plotTraces, dict): - errorMessages.append("SimConfig->'analysis'->'plotTraces': Must be a dict. Value provided is " + str(plotTraces) + "."") - - if 'include' in plotTraces and not isinstance( plotTraces['include'], list): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'include': Must be a list. Value provided is " + str(plotTraces['include']) + ".") - - # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") - - if 'overlay' in plotTraces and not isinstance( plotTraces['overlay'], bool): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'overlay': Must be boolean. Value provided is " + str(plotTraces['overlay']) + ".") - - if 'binSize' in plotTraces and not isinstance( plotTraces['binSize'], int): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'binSize': Must be an integer. Value provided is " + str(plotTraces['binSize']) + ".") - - if 'oneFigPer' in plotRaster and plotRaster['oneFigPer'] not in ['cell','trace']: - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'oneFigPer': oneFigPer must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['oneFigPer']) + ".") - - if 'rerun' in plotTraces and not isinstance( plotTraces['rerun'], bool): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'rerun': Must be boolean. Value provided is " + str(plotTraces['rerun']) + ".") - - if 'figSize' in plotTraces and not isinstance (plotTraces['figSize'], tuple): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotTraces['figSize']) + ".") + try: - if 'saveFig' in plotTraces and not isinstance (plotTraces['saveFig'], tuple): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'saveFig': saveFig must be tuple if specified. Value provided is " + str(plotTraces['saveFig']) + ".") + if simConfig.analysis: - if 'plotShape' in analysis: + analysis = simConfig.analysis - plotShapes = analysis['plotShapes'] - if not isinstance ( plotShapes, dict): - errorMessages.append("SimConfig->'analysis'->'plotShapes': Must be a dict. Value provided is " + str(plotShapes) + "."") + if not isinstance ( simConfig.analysis, dict): + errorMessages.append("SimConfig->'analysis': Must be a dict. Value provided is " + str(simConfig.analysis) + ".") + return errorMessages - if 'showSyns' in plotShapes and not isinstance( plotShapes['showSyns'], bool): - errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showSyns': Must be boolean. Value provided is " + str(plotShapes['showSyns']) + ".") + if any (analysis.keys() not in ['plotRaster','plotSpikeHist', 'plotSpikePSD', 'plotTraces', 'plotShape', 'plotConn', 'plot2DNet', 'nTE', 'granger']): + errorMessages.append("SimConfig->'analysis': Valid analysis functions are 'plotRaster','plotSpikeHist', 'plotSpikePSD', 'plotTraces', 'plotShape', 'plotConn', 'plot2DNet', 'nTE', 'granger'.") - if 'showFig' in plotShapes and not isinstance( plotShapes['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showFig': Must be boolean. Value provided is " + str(plotShapes['showFig']) + ".") + if 'plotRaster' in analysis: - if 'plotConn' in analysis: + plotRaster = analysis['plotRaster'] - plotConn = analysis['plotConn'] + if not isinstance ( plotRaster, dict): + errorMessages.append("SimConfig->'analysis'->'plotRaster': Must be a dict. Value provided is " + str(plotRaster) + ".") - if not isinstance ( plotConn, dict): - errorMessages.append("SimConfig->'analysis'->'plotConn': Must be a dict. Value provided is " + str(plotConn) + "."") + if 'include' in plotRaster and not isinstance( plotRaster['include'], dict): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'include': Must be a list. Value provided is " + str(plotRaster['include']) + ".") - if 'include' in plotConn and not isinstance( plotConn['include'], list): - errorMessages.append("SimConfig->'analysis'->'plotConn'->'include': Must be a list. Value provided is " + str(plotConn['include']) + ".") + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") - if 'feature' in plotConn: - if plotConn['spikeHist'] not in ['weight', 'delay', 'numConns']: - errorMessages.append("SimConfig->'analysis'->'plotConn'->'feature': Valid values are " + str(['weight', 'delay', 'numConns'])+ ". Value provided is " + str(plotConn['feature']) + ".") + if 'maxSpikes' in plotRaster and not isinstance( plotRaster['maxSpikes'], int): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'maxSpikes': Must be an integer. Value provided is " + str(plotRaster['maxSpikes']) + ".") - if 'groupBy' in plotConn: - if plotConn['spikeHist'] not in ['pop', 'cell']: - errorMessages.append("SimConfig->'analysis'->'plotConn'->'groupBy': Valid values are " + str(['pop', 'cell'])+ ". Value provided is " + str(plotConn['groupBy']) + ".") + if 'orderBy' in plotRaster: - if 'orderBy' in plotConn: - if plotConn['spikeHist'] not in ['gid', 'ynorm', 'y']: - errorMessages.append("SimConfig->'analysis'->'plotConn'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plotConn['orderBy']) + ".") + if not isinstance( plotRaster['orderBy'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderBy': Must be a list. Value provided is " + str(plotRaster['orderBy']) + ".") + else: + if any ( [x not in ['gid', 'ynorm', 'y'] for x in plotRaster['orderBy'] ] ): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderBy': Valid values are " + str(['gid', 'ynorm', 'y'])+ ". Value provided is " + str(plotRaster['orderBy']) + ".") - if 'showFig' in plotConn and not isinstance( plotConn['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plotConn'->'showFig': Must be boolean. Value provided is " + str(plotConn['showFig']) + ".") + if 'orderInverse' in plotRaster: - if 'plotConn' in analysis: + if not isinstance( plotRaster['orderInverse'], bool): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderInverse': Must be boolean. Value provided is " + str(plotRaster['orderInverse']) + ".") - plotConn = analysis['plotConn'] + if 'labels' in plotRaster: - if not isinstance ( plotConn, dict): - errorMessages.append("SimConfig->'analysis'->'plotConn': Must be a dict. Value provided is " + str(plotConn) + "."") + if not isinstance( plotRaster['labels'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'labels': Must be a list. Value provided is " + str(plotRaster['labels']) + ".") + else: + if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['labels'] ] ): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'labels': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") - if 'include' in plotConn and not isinstance( plotConn['include'], list): - errorMessages.append("SimConfig->'analysis'->'plotConn'->'include': Must be a list. Value provided is " + str(plotConn['include']) + ".") + if 'popRates' in plotRaster: - if 'feature' in plotConn: - if plotConn['spikeHist'] not in ['weight', 'delay', 'numConns']: - errorMessages.append("SimConfig->'analysis'->'plotConn'->'feature': Valid values are " + str(['weight', 'delay', 'numConns'])+ ". Value provided is " + str(plotConn['feature']) + ".") + if not isinstance( plotRaster['popRates'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Must be a list. Value provided is " + str(plotRaster['popRates']) + ".") + else: + if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['popRates'] ] ): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") - if 'groupBy' in plotConn: - if plotConn['spikeHist'] not in ['pop', 'cell']: - errorMessages.append("SimConfig->'analysis'->'plotConn'->'groupBy': Valid values are " + str(['pop', 'cell'])+ ". Value provided is " + str(plotConn['groupBy']) + ".") + if 'popRates' in plotRaster: - if 'orderBy' in plotConn: - if plotConn['spikeHist'] not in ['gid', 'ynorm', 'y']: - errorMessages.append("SimConfig->'analysis'->'plotConn'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plotConn['orderBy']) + ".") + if not isinstance( plotRaster['popRates'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Must be a list. Value provided is " + str(plotRaster['popRates']) + ".") + else: + if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['popRates'] ] ): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") - if 'showFig' in plotConn and not isinstance( plotConn['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plotConn'->'showFig': Must be boolean. Value provided is " + str(plotConn['showFig']) + ".") + if 'spikeHist' in plotRaster: -# include: List of cells to show ([‘all’|,’allCells’|,’allNetStims’|,120|,’L4’|,(‘L2’, 56)|,(‘L5’,[4,5,6])]) -# showConns: Whether to show connections or not (True|False) -# view: Perspective view, either front (‘xy’) or top-down (‘xz’) -# figSize: Size of figure ((width, height)) -# saveData: File name where to save the final data used to generate the figure (None|’fileName’) -# saveFig: File name where to save the figure (None|’fileName’) -# showFig: Whether to show the figure or not (True|False) + if not isinstance( plotRaster['spikeHist'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'spikeHist': Must be a list. Value provided is " + str(plotRaster['spikeHist']) + ".") + else: + if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['spikeHist'] ] ): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'spikeHist': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") + # + # if 'plotSpikeHist' in analysis: + # + # plotSpikeHist = analysis['plotSpikeHist'] + # + # if not isinstance ( plotSpikeHist, dict): + # errorMessages.append("SimConfig->'analysis'->'plotSpikeHist': Must be a dict. Value provided is " + str(plotSpikeHist) + "."") + # + # if 'include' in plotSpikeHist and not isinstance( plotSpikeHist['include'], list): + # errorMessages.append("SimConfig->'analysis'->'plotSpikeHist'->'include': Must be a list. Value provided is " + str(plotSpikeHist['include']) + ".") + # + # # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + # + # if 'orderInverse' in plotRaster: + # + # if not isinstance( plotRaster['orderInverse'], bool): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderInverse': Must be boolean. Value provided is " + str(plotRaster['orderInverse']) + ".") + # + # if 'overlay' in plotRaster: + # + # if not isinstance( plotRaster['overlay'], bool): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'overlay': Must be boolean. Value provided is " + str(plotRaster['overlay']) + ".") + # + # if 'graphType' in plotRaster and plotRaster['graphType'] not in ['line','bar']: + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'graphType': GraphType must be in " + str(['line','bar']) + ". Value provided is " + str(plotRaster['graphType']) + ".") + # + # if 'yaxis' in plotRaster and plotRaster['yaxis'] not in ['rate','count']: + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'yaxis': yaxis must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['yaxis']) + ".") + # + # if 'figSize' in plotRaster and not isinstance (plotRaster['figSize'], tuple): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'figSize': figSize must be tuple if specified". Value provided is " + str(plotRaster['figSize']) + ".") + # + # if 'binSize' in plotRaster and not isinstance( plotRaster['binSize'], int): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'binSize': Must be an integer. Value provided is " + str(plotRaster['binSize']) + ".") + # + # if 'showFig' in plotRaster: + # + # if not isinstance( plotRaster['showFig'], bool): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'showFig': Must be boolean. Value provided is " + str(plotRaster['showFig']) + ".") + # + # if 'plotSpikePSD' in analysis: + # + # plotSpikePSD = analysis['plotSpikePSD'] + # if not isinstance ( plotSpikePSD, dict): + # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD': Must be a dict. Value provided is " + str(plotSpikePSD) + "."") + # + # if 'include' in plotSpikePSD and not isinstance( plotSpikePSD['include'], list): + # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'include': Must be a list. Value provided is " + str(plotSpikePSD['include']) + ".") + # + # # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + # + # if 'overlay' in plotSpikePSD: + # + # if not isinstance( plotSpikePSD['overlay'], bool): + # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'overlay': Must be boolean. Value provided is " + str(plotSpikePSD['overlay']) + ".") + # + # if 'Fs' in plotSpikePSD and not isinstance ( plotSpikePSD['Fs'] , numbers.Real ): + # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'Fs': Fs must be float. Value provided is " + str(plotSpikePSD['Fs']) + ".") + # + # if 'figSize' in plotSpikePSD and not isinstance (plotSpikePSD['figSize'], tuple): + # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'figSize': figSize must be tuple if specified". Value provided is " + str(plotSpikePSD['figSize']) + ".") + # + # if 'binSize' in plotSpikePSD and not isinstance( plotSpikePSD['binSize'], int): + # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'binSize': Must be an integer. Value provided is " + str(plotSpikePSD['binSize']) + ".") + # + # if 'showFig' in plotSpikePSD: + # + # if not isinstance( plotSpikePSD['showFig'], bool): + # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'showFig': Must be boolean. Value provided is " + str(plotSpikePSD['showFig']) + ".") + # + # if 'plotTraces' in analysis: + # + # plotTraces = analysis['plotTraces'] + # if not isinstance ( plotTraces, dict): + # errorMessages.append("SimConfig->'analysis'->'plotTraces': Must be a dict. Value provided is " + str(plotTraces) + "."") + # + # if 'include' in plotTraces and not isinstance( plotTraces['include'], list): + # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'include': Must be a list. Value provided is " + str(plotTraces['include']) + ".") + # + # # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + # + # if 'overlay' in plotTraces and not isinstance( plotTraces['overlay'], bool): + # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'overlay': Must be boolean. Value provided is " + str(plotTraces['overlay']) + ".") + # + # if 'binSize' in plotTraces and not isinstance( plotTraces['binSize'], int): + # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'binSize': Must be an integer. Value provided is " + str(plotTraces['binSize']) + ".") + # + # if 'oneFigPer' in plotRaster and plotRaster['oneFigPer'] not in ['cell','trace']: + # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'oneFigPer': oneFigPer must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['oneFigPer']) + ".") + # + # if 'rerun' in plotTraces and not isinstance( plotTraces['rerun'], bool): + # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'rerun': Must be boolean. Value provided is " + str(plotTraces['rerun']) + ".") + # + # if 'figSize' in plotTraces and not isinstance (plotTraces['figSize'], tuple): + # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotTraces['figSize']) + ".") + # + # if 'saveFig' in plotTraces and not isinstance (plotTraces['saveFig'], tuple): + # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'saveFig': saveFig must be tuple if specified. Value provided is " + str(plotTraces['saveFig']) + ".") + # + # if 'plotShape' in analysis: + # + # plotShapes = analysis['plotShapes'] + # if not isinstance ( plotShapes, dict): + # errorMessages.append("SimConfig->'analysis'->'plotShapes': Must be a dict. Value provided is " + str(plotShapes) + "."") + # + # if 'showSyns' in plotShapes and not isinstance( plotShapes['showSyns'], bool): + # errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showSyns': Must be boolean. Value provided is " + str(plotShapes['showSyns']) + ".") + # + # if 'showFig' in plotShapes and not isinstance( plotShapes['showFig'], bool): + # errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showFig': Must be boolean. Value provided is " + str(plotShapes['showFig']) + ".") + # + # if 'plotConn' in analysis: + # + # plotConn = analysis['plotConn'] + # + # if not isinstance ( plotConn, dict): + # errorMessages.append("SimConfig->'analysis'->'plotConn': Must be a dict. Value provided is " + str(plotConn) + "."") + # + # if 'include' in plotConn and not isinstance( plotConn['include'], list): + # errorMessages.append("SimConfig->'analysis'->'plotConn'->'include': Must be a list. Value provided is " + str(plotConn['include']) + ".") + # + # if 'feature' in plotConn: + # if plotConn['spikeHist'] not in ['weight', 'delay', 'numConns']: + # errorMessages.append("SimConfig->'analysis'->'plotConn'->'feature': Valid values are " + str(['weight', 'delay', 'numConns'])+ ". Value provided is " + str(plotConn['feature']) + ".") + # + # if 'groupBy' in plotConn: + # if plotConn['spikeHist'] not in ['pop', 'cell']: + # errorMessages.append("SimConfig->'analysis'->'plotConn'->'groupBy': Valid values are " + str(['pop', 'cell'])+ ". Value provided is " + str(plotConn['groupBy']) + ".") + # + # if 'orderBy' in plotConn: + # if plotConn['spikeHist'] not in ['gid', 'ynorm', 'y']: + # errorMessages.append("SimConfig->'analysis'->'plotConn'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plotConn['orderBy']) + ".") + # + # if 'showFig' in plotConn and not isinstance( plotConn['showFig'], bool): + # errorMessages.append("SimConfig->'analysis'->'plotConn'->'showFig': Must be boolean. Value provided is " + str(plotConn['showFig']) + ".") + # + # if 'plot2DNet' in analysis: + # + # plot2DNet = analysis['plot2DNet'] + # + # if not isinstance ( plot2DNet, dict): + # errorMessages.append("SimConfig->'analysis'->'plot2DNet': Must be a dict. Value provided is " + str(plot2DNet) + "."") + # + # if 'include' in plot2DNet and not isinstance( plot2DNet['include'], list): + # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'include': Must be a list. Value provided is " + str(plot2DNet['include']) + ".") + # + # if 'orderBy' in plot2DNet: + # if plot2DNet['spikeHist'] not in ['gid', 'ynorm', 'y']: + # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plot2DNet['orderBy']) + ".") + # + # if 'view' in plot2DNet: + # if plot2DNet['spikeHist'] not in ['xy', 'xz']: + # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'view': Valid values are " + str(['xy', 'xz'])+ ". Value provided is " + str(plot2DNet['view']) + ".") + # + # if 'showConns' in plot2DNet and not isinstance( plot2DNet['showConns'], bool): + # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showConns': Must be boolean. Value provided is " + str(plot2DNet['showConns']) + ".") + # + # if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): + # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") + # + # if 'nTE' in analysis: + # + # nTE = analysis['nTE'] + # + # if not isinstance ( nTE, dict): + # errorMessages.append("SimConfig->'analysis'->'nTE': Must be a dict. Value provided is " + str(nTE) + "."") + # + # if 'cells1' in nTE and not isinstance( nTE['cells1'], list): + # errorMessages.append("SimConfig->'analysis'->'nTE'->'cells1': Must be a list. Value provided is " + str(nTE['cells1']) + ".") + # + # if 'cells2' in nTE and not isinstance( nTE['cells2'], list): + # errorMessages.append("SimConfig->'analysis'->'nTE'->'cells2': Must be a list. Value provided is " + str(nTE['cells2']) + ".") + # + # if 'spks1' in nTE and not isinstance( nTE['spks1'], list): + # errorMessages.append("SimConfig->'analysis'->'nTE'->'spks1': Must be a list. Value provided is " + str(nTE['spks1']) + ".") + # + # if 'spks2' in nTE and not isinstance( nTE['spks2'], list): + # errorMessages.append("SimConfig->'analysis'->'nTE'->'spks2': Must be a list. Value provided is " + str(nTE['spks2']) + ".") + # + # if 'binSize' in nTE and not isinstance( nTE['binSize'], int): + # errorMessages.append("SimConfig->'analysis'->'nTE'->'binSize': Must be an int. Value provided is " + str(nTE['binSize']) + ".") + # + # if 'numShuffle' in nTE and not isinstance( nTE['numShuffle'], int): + # errorMessages.append("SimConfig->'analysis'->'nTE'->'numShuffle': Must be an int. Value provided is " + str(nTE['numShuffle']) + ".") + # + # if 'granger' in analysis: + # + # granger = analysis['granger'] + # + # if not isinstance ( granger, dict): + # errorMessages.append("SimConfig->'analysis'->'granger': Must be a dict. Value provided is " + str(granger) + "."") + # + # if 'cells1' in granger and not isinstance( granger['cells1'], list): + # errorMessages.append("SimConfig->'analysis'->'granger'->'cells1': Must be a list. Value provided is " + str(granger['cells1']) + ".") + # + # if 'cells2' in granger and not isinstance( granger['cells2'], list): + # errorMessages.append("SimConfig->'analysis'->'granger'->'cells2': Must be a list. Value provided is " + str(granger['cells2']) + ".") + # + # if 'spks1' in granger and not isinstance( granger['spks1'], list): + # errorMessages.append("SimConfig->'analysis'->'granger'->'spks1': Must be a list. Value provided is " + str(granger['spks1']) + ".") + # + # if 'spks2' in granger and not isinstance( granger['spks2'], list): + # errorMessages.append("SimConfig->'analysis'->'granger'->'spks2': Must be a list. Value provided is " + str(granger['spks2']) + ".") + # + # if 'binSize' in granger and not isinstance( granger['binSize'], int): + # errorMessages.append("SimConfig->'analysis'->'granger'->'binSize': Must be an int. Value provided is " + str(granger['binSize']) + ".") + # + # if 'plotFig' in plot2DNet and not isinstance( plot2DNet['plotFig'], bool): + # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'plotFig': Must be boolean. Value provided is " + str(plot2DNet['plotFig']) + ".") + # + # if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): + # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") except Exception as e: traceback.print_exc(file=sys.stdout) @@ -1397,20 +1460,19 @@ def loadSimConfigTests(self): testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_FLOAT] - testObj.messageText = ["SimConfig->'dt':dt is not a float."] + testObj.messageText = ["simConfig->'dt':dt is not a float."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["dtTest"] = testObj ## hParams test - ## hParams - Dictionary with parameters of h module (default: {‘celsius’: 6.3, ‘clamp_resist’: 0.001}) testObj = TestObj() testObj.testName = "hParamsTest" testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_DICT] - testObj.messageText = ["SimConfig->'hParams':hParams is not a dict."] + testObj.messageText = ["simConfig->'hParams':hParams is not a dict."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["hParamsTest"] = testObj @@ -1423,7 +1485,7 @@ def loadSimConfigTests(self): testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'cacheEfficient':cacheEfficient is not a boolean."] + testObj.messageText = ["simConfig->'cacheEfficient':cacheEfficient is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["cacheEfficientTest"] = testObj @@ -1436,60 +1498,56 @@ def loadSimConfigTests(self): testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'cvodeActive':cvodeActive is not a boolean."] + testObj.messageText = ["simConfig->'cvodeActive':cvodeActive is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["cvodeActiveTest"] = testObj ## seeds test - ## seeds - Dictionary with random seeds for connectivity, input stimulation, and cell locations (default: {‘conn’: 1, ‘stim’: 1, ‘loc’: 1}) testObj = TestObj() testObj.testName = "seedsTest" testObj.testParameterType = "string" testObj.testParameterValue = "type" - testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_VALUE_LIST ] # ‘conn’, ‘stim’, ‘loc’ + testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_VALUE_LIST ] testObj.testValueList = ['conn', 'stim', 'loc'] - testObj.messageText = ["SimConfig->'seedsActive':seeds is not a boolean.","SimConfig->'recordTracesTest':is not a valid value. Valid values are 'conn', 'stim', 'loc'."] + testObj.messageText = ["simConfig->'seedsActive':seeds is not a boolean.","SimConfig->'recordTracesTest':is not a valid value. Valid values are 'conn', 'stim', 'loc'."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["seedsTest"] = testObj ## createNEURONObj test - ## createNEURONObj - Create HOC objects when instantiating network (default: True) testObj = TestObj() testObj.testName = "createNEURONObjTest" testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'createNEURONObj':createNEURONObj is not a boolean."] + testObj.messageText = ["simConfig->'createNEURONObj':createNEURONObj is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["createNEURONObjTest"] = testObj ## createPyStruct test - ## createPyStruct - Create Python structure (simulator-independent) when instantiating network (default: True) testObj = TestObj() testObj.testName = "createPyStruct" testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'createPyStruct':createPyStruct is not a boolean."] + testObj.messageText = ["simConfig->'createPyStruct':createPyStruct is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["createPyStructTest"] = testObj ## gatherOnlySimData test - ## gatherOnlySimData - Omits gathering of net and cell data thus reducing gatherData time (default: False) testObj = TestObj() testObj.testName = "gatherOnlySimData" testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'gatherOnlySimData':gatherOnlySimData is not a boolean."] + testObj.messageText = ["simConfig->'gatherOnlySimData':gatherOnlySimData is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["cgatherOnlySimDataTest"] = testObj @@ -1502,7 +1560,7 @@ def loadSimConfigTests(self): testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'gatherOnlySimData':gatherOnlySimData is not a boolean."] + testObj.messageText = ["simConfig->'gatherOnlySimData':gatherOnlySimData is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["gatherOnlySimDataTest"] = testObj @@ -1515,91 +1573,84 @@ def loadSimConfigTests(self): testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'printRunTime':printRunTime is not a boolean."] + testObj.messageText = ["simConfig->'printRunTime':printRunTime is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["printRunTimeTest"] = testObj ## printPopAvgRates test - ## printPopAvgRates - Print population avg firing rates after run (default: False) testObj = TestObj() testObj.testName = "printPopAvgRatesTest" testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'printPopAvgRates':printPopAvgRates is not a boolean."] + testObj.messageText = ["simConfig->'printPopAvgRates':printPopAvgRates is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["printPopAvgRatesTest"] = testObj ## includeParamsLabel test - ## includeParamsLabel - Include label of param rule that created that cell, conn or stim (default: True) testObj = TestObj() testObj.testName = "includeParamsLabelTest" testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'includeParamsLabel':includeParamsLabel is not a boolean."] + testObj.messageText = ["simConfig->'includeParamsLabel':includeParamsLabel is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["includeParamsLabelTest"] = testObj ## timing test - ## timing - Show and record timing of each process (default: True) testObj = TestObj() testObj.testName = "timingTest" testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'timing':timing is not a boolean."] + testObj.messageText = ["simConfig->'timing':timing is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["timingTest"] = testObj ## saveTiming test - ## saveTiming - Save timing data to pickle file (default: False) testObj = TestObj() testObj.testName = "saveTimingTest" testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'saveTiming':saveTiming is not a boolean."] + testObj.messageText = ["simConfig->'saveTiming':saveTiming is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["saveTimingTest"] = testObj ## verbose test - ## verbose - Show detailed messages (default: False) testObj = TestObj() testObj.testName = "verboseTest" testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'verbose':verbose is not a boolean."] + testObj.messageText = ["simConfig->'verbose':verbose is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["verboseTest"] = testObj ## recordCells test - ## recordCells - List of cells from which to record traces. Can include cell gids (e.g. 5), population labels (e.g. ‘S’ to record from one cell of the ‘S’ population), or ‘all’, to record from all cells. NOTE: All cells selected in the include argument of simConfig.analysis['plotTraces'] will be automatically included in recordCells. (default: []) testObj = TestObj() testObj.testName = "recordCellsTest" testObj.testParameterType = "string" testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_LIST] - testObj.messageText = ["SimConfig->'recordCells':recordCells is not a list."] + testObj.messageText = ["simConfig->'recordCells':recordCells is not a list."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["recordCellsTest"] = testObj ## recordTraces test - ## recordTraces - Dict of traces to record (default: {} ; example: {‘V_soma’:{‘sec’:’soma’,’loc’:0.5,’var’:’v’}}) testObj = TestObj() testObj.testName = "recordTracesTest" @@ -1607,7 +1658,7 @@ def loadSimConfigTests(self): testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_VALUE_LIST ] testObj.testValueList = ['sec','loc','var'] - testObj.messageText = ["SimConfig->'recordTraces':recordTraces is not a dict.","SimConfig->'recordTracesTest':is not a valid value. Valid values are 'netParams', 'netCells', 'netPops', 'simConfig', 'simData'."] + testObj.messageText = ["simConfig->'recordTraces':recordTraces is not a dict.","SimConfig->'recordTracesTest':is not a valid value. Valid values are 'netParams', 'netCells', 'netPops', 'simConfig', 'simData'."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["recordTracesTest"] = testObj @@ -1618,12 +1669,11 @@ def loadSimConfigTests(self): testObj.testParameterValue = "type" testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_VALUE_LIST ] testObj.testValueList = ['netParams', 'netCells', 'netPops', 'simConfig', 'simData'] - testObj.messageText = ["SimConfig->'saveDataInclude':recordTraces is not a dict.","SimConfig->'saveDataInclude':is not a valid value. Valid values are 'netParams', 'netCells', 'netPops', 'simConfig', 'simData'." ] + testObj.messageText = ["simConfig->'saveDataInclude':recordTraces is not a dict.","SimConfig->'saveDataInclude':is not a valid value. Valid values are 'netParams', 'netCells', 'netPops', 'simConfig', 'simData'." ] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["recordTracesTest"] = testObj ## recordStim test - ## recordStim - Record spikes of cell stims (default: False) testObj = TestObj() testObj.testName = "recordStimTest" @@ -1636,7 +1686,6 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["recordStimTest"] = testObj ## recordStep test - ## recordStep - Record spikes of cell stims (default: False) testObj = TestObj() testObj.testName = "recordStepTest" @@ -1649,7 +1698,6 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["recordStimTest"] = testObj ## saveDataInclude test - ## saveDataInclude - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) testObj = TestObj() testObj.testName = "saveDataIncludeTest" @@ -1662,7 +1710,6 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["saveDataIncludeTest"] = testObj ## timestampFilename test - ## timestampFilename - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) testObj = TestObj() testObj.testName = "timestampFilenameTest" @@ -1675,7 +1722,6 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["timestampFilenameTest"] = testObj ## savePickle test - ## savePickle - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) testObj = TestObj() testObj.testName = "savePickleTest" @@ -1688,7 +1734,6 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["savePickleTest"] = testObj ## saveJson test - ## saveJson - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) testObj = TestObj() testObj.testName = "saveJsonTest" @@ -1701,7 +1746,6 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["saveJsonTest"] = testObj ## saveMat test - ## saveMat - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) testObj = TestObj() testObj.testName = "saveMatTest" @@ -1713,10 +1757,7 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["saveMatTest"] = testObj - ## saveTxt test - ## saveTxt - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) - testObj = TestObj() testObj.testName = "saveTxtTest" testObj.testParameterType = "string" @@ -1728,7 +1769,6 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["saveTxtTest"] = testObj ## saveDpk test - ## saveDpk - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) testObj = TestObj() testObj.testName = "saveDpkTest" @@ -1741,7 +1781,6 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["saveDpkTest"] = testObj ## saveHDF5 test - ## saveHDF5 - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) testObj = TestObj() testObj.testName = "saveHDF5Test" @@ -1754,7 +1793,6 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["saveHDF5Test"] = testObj ## backupCfgFile test - ## backupCfgFile - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) testObj = TestObj() testObj.testName = "backupCfgFileTest" @@ -1767,7 +1805,6 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["backupCfgFileTest"] = testObj ## backupCfgFile test - ## backupCfgFile - Data structures to save to file (default: [‘netParams’, ‘netCells’, ‘netPops’, ‘simConfig’, ‘simData’]) testObj = TestObj() testObj.testName = "analysisTest" @@ -1831,7 +1868,7 @@ def loadPopTests(self): testObj.testParameterType = "string" testObj.testParameterValue = "cellModel" testObj.testTypes = [TEST_TYPE_EXISTS] - testObj.messageText = ["PopParams->'cellModel': No cellModel specified in population paramters."] + testObj.messageText = ["popParams->'cellModel': No cellModel specified in population paramters."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["pop"]["cellModelTest"] = testObj @@ -1842,7 +1879,7 @@ def loadPopTests(self): testObj.testParameterType = "list" testObj.testParameterValueList = ['density','numCells','gridSpacing'] testObj.testTypes = [TEST_TYPE_EXISTS_IN_LIST] - testObj.messageText = ["PopParams->'volumeParams': One of the following must be specified in parameters: " + str(testObj.testParameterValueList)] + testObj.messageText = ["popParams->'volumeParams': One of the following must be specified in parameters: " + str(testObj.testParameterValueList)] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["pop"]["volumeParamsTest"] = testObj @@ -1854,7 +1891,7 @@ def loadPopTests(self): testObj.testParameterValue = "xnormRange" testObj.testTypes = [TEST_TYPE_IS_VALID_RANGE, TEST_TYPE_IN_RANGE] testObj.testValueRange = "[0,1]" - testObj.messageText = ["PopParams->'xnormRange': XNormRange invalid range.","PopParams->'xnormRange': XNormRange not in range."] + testObj.messageText = ["popParams->'xnormRange': XNormRange invalid range.","popParams->'xnormRange': XNormRange not in range."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] self.testParamsMap["pop"]["xNormRangeTest"] = testObj @@ -1866,7 +1903,7 @@ def loadPopTests(self): testObj.testParameterValue = "ynormRange" testObj.testTypes = [TEST_TYPE_IS_VALID_RANGE, TEST_TYPE_IN_RANGE] testObj.testValueRange = "[0,1]" - testObj.messageText = ["PopParams->'ynormRange': YNormRange invalid.","PopParams->'ynormRange': YNormRange not in range."] + testObj.messageText = ["popParams->'ynormRange': YNormRange invalid.","popParams->'ynormRange': YNormRange not in range."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] self.testParamsMap["pop"]["yNormRangeTest"] = testObj @@ -1878,7 +1915,7 @@ def loadPopTests(self): testObj.testParameterValue = "znormRange" testObj.testTypes = [TEST_TYPE_IS_VALID_RANGE, TEST_TYPE_IN_RANGE] testObj.testValueRange = "[0,1]" - testObj.messageText = ["PopParams->'znormRange': ZNormRange invalid.","PopParams->'znormRange': ZNormRange not in range."] + testObj.messageText = ["popParams->'znormRange': ZNormRange invalid.","popParams->'znormRange': ZNormRange not in range."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] self.testParamsMap["pop"]["zNormRangeTest"] = testObj @@ -1890,7 +1927,7 @@ def loadPopTests(self): testObj.testParameterValue = "xRange" testObj.testTypes = [TEST_TYPE_IS_VALID_RANGE, TEST_TYPE_IN_RANGE] testObj.testValueRange = "[0,self.netParams.sizeX]" - testObj.messageText = ["PopParams->'xRange': xRange invalid.","PopParams->'xRange': xRange not in range."] + testObj.messageText = ["popParams->'xRange': xRange invalid.","popParams->'xRange': xRange not in range."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, TEST_TYPE_IN_RANGE] self.testParamsMap["pop"]["xRangeTest"] = testObj @@ -1902,7 +1939,7 @@ def loadPopTests(self): testObj.testParameterValue = "yRange" testObj.testTypes = [TEST_TYPE_IS_VALID_RANGE, TEST_TYPE_IN_RANGE] testObj.testValueRange = "[0,self.netParams.sizeY]" - testObj.messageText = ["PopParams->'yRange': yRange invalid.","PopParams->'yRange': yRange not in range."] + testObj.messageText = ["popParams->'yRange': yRange invalid.","popParams->'yRange': yRange not in range."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] self.testParamsMap["pop"]["yRangeTest"] = testObj @@ -1914,7 +1951,7 @@ def loadPopTests(self): testObj.testParameterValue = "zRange" testObj.testTypes = [TEST_TYPE_IS_VALID_RANGE, TEST_TYPE_IN_RANGE] testObj.testValueRange = "[0,self.netParams.sizeX]" - testObj.messageText = ["PopParams->'zRange': zRange invalid.","PopParams->'zRange': zRange not in range."] + testObj.messageText = ["popParams->'zRange': zRange invalid.","popParams->'zRange': zRange not in range."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] self.testParamsMap["pop"]["zRangeTest"] = testObj @@ -1999,7 +2036,7 @@ def loadCellTests(self): testObj.testParameterValue = "conds" testObj.testTypes = [TEST_TYPE_EXISTS, TEST_TYPE_IS_DICT] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] - testObj.messageText = ["CellParams->'conds': Conds does not exist.", "CellParams->'conds': Conds is not a dict."] + testObj.messageText = ["cellParams->'conds': Conds does not exist.", "cellParams->'conds': Conds is not a dict."] self.testParamsMap["cell"]["condsTest"] = testObj # secs test @@ -2009,7 +2046,7 @@ def loadCellTests(self): testObj.testParameterValue = "secs" testObj.testTypes = [TEST_TYPE_IS_DICT] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] - testObj.messageText = ["CellParams->'secs': Secs is not a dict."] + testObj.messageText = ["cellParams->'secs': Secs is not a dict."] self.testParamsMap["cell"]["secsTest"] = testObj # cellTypes test @@ -2020,7 +2057,7 @@ def loadCellTests(self): testObj.testParameterValue1 = "cellType" testObj.testTypes = [TEST_TYPE_EXISTS_IN_DICT] testObj.compareDict = "self.netParams.popParams" - testObj.messageText = ["CellParams->'cellType': cellType does not match the cellType specified in pop parameters."] + testObj.messageText = ["cellParams->'cellType': cellType does not match the cellType specified in pop parameters."] testObj.errorMessageLevel = [MESSAGE_TYPE_WARNING] self.testParamsMap["cell"]["cellTypeTest"] = testObj @@ -2033,7 +2070,7 @@ def loadCellTests(self): testObj.testParameterValue1 = "cellModel" testObj.testTypes = [TEST_TYPE_EXISTS_IN_DICT] testObj.compareDict = "self.netParams.popParams" - testObj.messageText = ["CellParams->'cellModel': cellModel does not match the cellModel specified in pop parameters."] + testObj.messageText = ["cellParams->'cellModel': cellModel does not match the cellModel specified in pop parameters."] testObj.errorMessageLevel = [MESSAGE_TYPE_WARNING] self.testParamsMap["cell"]["cellModelTest"] = testObj @@ -2045,7 +2082,7 @@ def loadCellTests(self): testObj.testParameterValue = "secs" testObj.testParameterDictString = "geom" testObj.testTypes = [TEST_TYPE_EXISTS_IN_ALL_DICTS] - testObj.messageText = ["CellParams->'secs'->'geom': Geom is not specified in section "] + testObj.messageText = ["cellParams->'secs'->'geom': Geom is not specified in section "] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["cell"]["geomExistTest"] = testObj @@ -2056,7 +2093,7 @@ def loadCellTests(self): testObj.testParameterValue = "geom" testObj.testTypes = [TEST_TYPE_VALID_GEOMETRIES] #testObj.testValueList = VALID_GEOMETRIES, - testObj.messageText = ["CellParams->'secs'->'geom': Geom is not valid."] + testObj.messageText = ["cellParams->'secs'->'geom': Geom is not valid."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["cell"]["geomValidTest"] = testObj @@ -2067,7 +2104,7 @@ def loadCellTests(self): testObj.testParameterType = "string" testObj.testParameterValue = "topol" testObj.testTypes = [TEST_TYPE_VALID_TOPOLOGIES] - testObj.messageText = ["CellParams->'secs'->'topol':Topology is not valid."] + testObj.messageText = ["cellParams->'secs'->'topol':Topology is not valid."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["cell"]["toplogyValidTest"] = testObj @@ -2284,7 +2321,7 @@ def loadConnTests(self): def runPopTests(self): # if self.verboseFlag: - # print ( " ::: flag is " + str(self.verboseFlag)) + # print ( "::: flag is " + str(self.verboseFlag)) # print (" *** Running pop tests *** ") @@ -2352,9 +2389,18 @@ def runStimTargetTests(self): for testName, stimTargetTestObj in self.testParamsMap["stimTarget"].items(): self.execRunTests(stimTargetTestObj, stimTargetParams) + def runSimConfigTests(self): + + # if self.verboseFlag: + # print (" *** Running stim target tests *** ") + + simConfigParams = self.simConfig + for testName, simConfigTestObj in self.testParamsMap["simConfig"].items(): + self.execRunTests(simConfigTestObj, simConfigParams) + def execRunTests(self, testObj, params): - #print ( " !!!!!!!! for test " + str(testObj.testTypes)) + print ( " !!!!!!!! for test " + str(testObj.testTypes)) for testIndex, testType in enumerate(testObj.testTypes): @@ -2369,25 +2415,25 @@ def execRunTests(self, testObj, params): try: self.testTypeObj.testExists (testObj.testParameterValue, paramValues) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) else: try: self.testTypeObj.testExists (testObj.testParameterValue, paramValues) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(testObj.testParameterValue)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(testObj.testParameterValue)) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) elif testType == TEST_TYPE_EXISTS_IN_LIST: @@ -2397,26 +2443,26 @@ def execRunTests(self, testObj, params): try: self.testTypeObj.testExistsInList (testObj.testParameterValueList, paramValues) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) else: try: self.testTypeObj.testExistsInList (testObj.testParameterValueList, paramValues) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(testObj.testParameterValue)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(testObj.testParameterValue)) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) elif testType == TEST_TYPE_EXISTS_IN_DICT: @@ -2428,14 +2474,14 @@ def execRunTests(self, testObj, params): if testObj.testParameterValue in paramValues and testObj.testParameterValue1 in paramValues[testObj.testParameterValue] and paramValues[testObj.testParameterValue][testObj.testParameterValue1]: self.testTypeObj.testExistsInDict ( paramValues[testObj.testParameterValue][testObj.testParameterValue1], eval(testObj.compareDict), testObj.testParameterValue1) if self.verboseFlag: - print ( "Test: " + str(paramValues[testObj.testParameterValue][testObj.testParameterValue1]) + " for : " + str(testType)+ " value : " + str(eval(testObj.compareDict)) ) + print ( "Test: " + str(paramValues[testObj.testParameterValue][testObj.testParameterValue1]) + " for: " + str(testType)+ " value: " + str(eval(testObj.compareDict)) ) print ( "PASSED" ) except Exception as e: #traceback.print_exc(file=sys.stdout) - if self.verboseFlag : - print ( "Test " + testObj.testParameterValue + " for : " + str(testType)+ " value : " + str(eval(testObj.compareDict))) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + if self.verboseFlag: + print ( "Test " + testObj.testParameterValue + " for: " + str(testType)+ " value: " + str(eval(testObj.compareDict))) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex] + ". Value provided is " + paramValues[testObj.testParameterValue][testObj.testParameterValue1] + ".") elif testType == TEST_TYPE_IN_RANGE: @@ -2446,25 +2492,25 @@ def execRunTests(self, testObj, params): try: self.testTypeObj.testInRange(testObj.testParameterValue, eval(testObj.testValueRange), paramValues) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType) + " value : " + str(paramValues)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType) + " value: " + str(paramValues)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType) + " value : " + str(paramValues)) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType) + " value: " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) else: try: self.testTypeObj.testInRange(testObj.testParameterValue, eval(testObj.testValueRange), paramValues) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(testObj.testParameterValue)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(testObj.testParameterValue)) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) elif testType == TEST_TYPE_ARRAY_IN_RANGE: @@ -2475,18 +2521,18 @@ def execRunTests(self, testObj, params): try: testParamValue = self.testTypeObj.testArrayInRange(testObj.testParameterValue, eval(testObj.testValueRange), paramValues) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(testObj.testParameterValue)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) print ( "PASSED" ) except Exception as e: #traceback.print_exc(file=sys.stdout) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(testObj.testParameterValue)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) paramValue = '' if testObj.testParameterValue in paramValues: paramValue = paramValues[testObj.testParameterValue] - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex] + " Value = " + str(paramValue)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex] + " Value = " + str(paramValue)) elif testType == TEST_TYPE_IS_VALID_RANGE: @@ -2497,26 +2543,26 @@ def execRunTests(self, testObj, params): try: self.testTypeObj.testIsValidRange(testObj.testParameterValue, paramValues) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) else: try: self.testTypeObj.testIsValidRange(testObj.testParameterValue, paramValues) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) elif testType == TEST_TYPE_IS_INT: @@ -2527,13 +2573,13 @@ def execRunTests(self, testObj, params): try: self.testTypeObj.testIsInt(testObj.testParameterValue, paramValues) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) else: @@ -2542,14 +2588,14 @@ def execRunTests(self, testObj, params): self.testTypeObj.testIsInt(paramName) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramName)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramName)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) try: - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + ". Value specified is " + str(paramName) + " ." + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + ". Value specified is " + str(paramName) + " ." except: pass @@ -2562,14 +2608,14 @@ def execRunTests(self, testObj, params): try: self.testTypeObj.testGteZero(testObj.testParameterValue, paramValues) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) try: - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) except: pass @@ -2579,13 +2625,13 @@ def execRunTests(self, testObj, params): self.testTypeObj.testGteZero(paramName) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramName)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramName)) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + ". Value specified is " + str(paramName) + " ." + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + ". Value specified is " + str(paramName) + " ." elif testType == TEST_TYPE_IS_DICT: @@ -2597,13 +2643,49 @@ def execRunTests(self, testObj, params): if testObj.testParameterValue in paramValues: self.testTypeObj.testIsDict(paramValues[testObj.testParameterValue]) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print ( "PASSED" ) + + except Exception as e: + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + + elif testType == TEST_TYPE_IS_LIST: + + if isinstance(params, dict): + + for paramLabel, paramValues in params.items(): + + try: + if testObj.testParameterValue in paramValues: + self.testTypeObj.testIsList(paramValues[testObj.testParameterValue]) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print ( "PASSED" ) + + except Exception as e: + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + + elif testType == TEST_TYPE_IS_BOOL: + + if isinstance(params, dict): + + for paramLabel, paramValues in params.items(): + + try: + if testObj.testParameterValue in paramValues: + self.testTypeObj.testIsBoolean(paramValues[testObj.testParameterValue]) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) elif testType == TEST_TYPE_VALUE_LIST: @@ -2615,15 +2697,13 @@ def execRunTests(self, testObj, params): if testObj.testParameterValue in paramValues: self.testTypeObj.testIsValueList(paramValues[testObj.testParameterValue], testObj.testValueList) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) - -testIsValueList + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) elif testType == TEST_TYPE_EXISTS_IN_ALL_DICTS: @@ -2639,13 +2719,13 @@ def execRunTests(self, testObj, params): ) if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print ( "PASSED" ) except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for : " + str(testType)+ " value : " + str(paramValues)) - print str(testObj.errorMessageLevel[testIndex]) + " : " + str(testObj.messageText[testIndex]) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) elif testType == TEST_TYPE_VALID_GEOMETRIES: @@ -2661,8 +2741,8 @@ def execRunTests(self, testObj, params): #traceback.print_exc(file=sys.stdout) if self.verboseFlag: print ( "Test: for valid geometry in cell") - #print (str(MESSAGE_TYPE_ERROR) + " : Geometry is invalid. ") - print (str(MESSAGE_TYPE_ERROR) + " :" + str(e)) + #print (str(MESSAGE_TYPE_ERROR) + ": Geometry is invalid. ") + print (str(MESSAGE_TYPE_ERROR) + ":" + str(e)) elif testType == TEST_TYPE_VALID_TOPOLOGIES: @@ -2703,7 +2783,7 @@ def execRunTests(self, testObj, params): # if self.verboseFlag: # print ( "Test: for valid conn list in cell") # #print ( "paramvalues = " + str(paramValues)) - # print (str(MESSAGE_TYPE_ERROR) + " : Topology is invalid. Must be specified if more than one section specified. For each topology, parentSec and parentX and childX must be defined. ParentSec needs to be a valid section, and both parentX and childX needs to be in range [0,1].") + # print (str(MESSAGE_TYPE_ERROR) + ": Topology is invalid. Must be specified if more than one section specified. For each topology, parentSec and parentX and childX must be defined. ParentSec needs to be a valid section, and both parentX and childX needs to be in range [0,1].") elif testType == TEST_TYPE_VALID_MECHS: @@ -2740,14 +2820,14 @@ def execRunTests(self, testObj, params): if self.verboseFlag: print ( "Test: for valid mechanisms in cell") - print (str(MESSAGE_TYPE_ERROR) + " : " + errorMessage) + print (str(MESSAGE_TYPE_ERROR) + ": " + errorMessage) except Exception as e: traceback.print_exc(file=sys.stdout) if self.verboseFlag: print ( "Test: for valid mechanisms in cell") - print (str(MESSAGE_TYPE_ERROR) + " : Mechanism specified is invalid.") + print (str(MESSAGE_TYPE_ERROR) + ": Mechanism specified is invalid.") elif testType == TEST_TYPE_VALID_POINTPS: @@ -2771,7 +2851,7 @@ def execRunTests(self, testObj, params): if self.verboseFlag: print ( "Test: for valid pointps in cell params.") #print ( "paramvalues = " + str(paramValues)) - print (str(MESSAGE_TYPE_ERROR) + " : Pointps in cell params specified is invalid. Please check against utils.mechVarlist.") + print (str(MESSAGE_TYPE_ERROR) + ": Pointps in cell params specified is invalid. Please check against utils.mechVarlist.") elif testType == TEST_TYPE_VALID_SYN_MECHS: @@ -3014,3 +3094,28 @@ def execRunTests(self, testObj, params): print ( "Test: for valid stim target.") #print ( "paramvalues = " + str(paramValues)) print (str(MESSAGE_TYPE_ERROR) + ": " + str(e) + ".") + + elif testType == TEST_TYPE_VALID_ANALYSIS: + + if isinstance(params, dict): + for paramLabel, paramValues in params.items(): + try: + + stimValid, errorMessages = self.testTypeObj.testValidAnalysis(paramValues) + + if len(errorMessages) == 0: + if self.verboseFlag: + print ( "Test: for valid stim target.") + print ( "PASSED" ) + else: + if self.verboseFlag: + print ( "Test: for valid stim target.") + for errorMessage in errorMessages: + print ( MESSAGE_TYPE_ERROR + ": " + errorMessage) + + except Exception as e: + traceback.print_exc(file=sys.stdout) + if self.verboseFlag: + print ( "Test: for valid stim target.") + #print ( "paramvalues = " + str(paramValues)) + print (str(MESSAGE_TYPE_ERROR) + ": " + str(e) + ".") diff --git a/netpyne/tests/validate_tests.py b/netpyne/tests/validate_tests.py index b1bc1c3e0..766aad878 100644 --- a/netpyne/tests/validate_tests.py +++ b/netpyne/tests/validate_tests.py @@ -25,7 +25,7 @@ class RunNetPyneTests(): def __init__ (self): self.paramsMap = {} self.netPyneTestObj = SimTestObj(verboseFlag = True) - self.loadTestsWithParams() + #self.loadTestsWithParams() self.loadSimConfigTests() self.runTestsWithParams() @@ -33,7 +33,7 @@ def loadSimConfigTests(self): # print ( " loading tests ") self.paramsMap["simConfig"] = {} - self.paramsMap["simConfig"]["duration"] = [] + self.paramsMap["simConfig"]["durationTest"] = [] simConfigParams = ParamsObj() @@ -50,8 +50,7 @@ def loadSimConfigTests(self): simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - simConfigParams.simConfig.popParams['validDurationParams'] = {'cellType': 'PYR', 'cellModel': 'HH', 'numCells': 50} # add dict with params for this pop - self.paramsMap["pop"]["cellModelTest"].append(cellModelParams) + self.paramsMap["simConfig"]["durationTest"].append(simConfigParams) def loadTestsWithParams(self): @@ -2043,6 +2042,7 @@ def runSimConfigTests(self): for paramsObj in paramObjList: #print ( " calling tests") self.netPyneTestObj.netParams = paramsObj.netParams + self.netPyneTestObj.simConfig = paramsObj.simConfig self.netPyneTestObj.runTests() runNetPyneTests = RunNetPyneTests() From bd1eed1e0a2bbc9293d76194e1e1a010b1879e34 Mon Sep 17 00:00:00 2001 From: salvdord Date: Mon, 31 Jul 2017 23:31:09 -0400 Subject: [PATCH 16/50] Added option to set initial cfg in batch sims --- CHANGES.md | 2 ++ examples/batchCell/batch.py | 1 + netpyne/batch.py | 32 +++++++++++++++++++++----------- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index d3bbfef89..5dae41936 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,8 @@ - Made root section (with no parents) the source of spikes by default (issue #246) +- Added option to set initial cfg in batch sims + - Fixed bug in modifyStims for NetStim 'interval' and 'rate' - Fixed bug importing cell -- use h.pop_section() to avoid stack overflow diff --git a/examples/batchCell/batch.py b/examples/batchCell/batch.py index 3d6e74bbe..c54097a5e 100644 --- a/examples/batchCell/batch.py +++ b/examples/batchCell/batch.py @@ -32,6 +32,7 @@ def runBatch(b, label): def batchNa(): b = createBatch({'dendNa': [0.025, 0.03, 0.035, 0.4], ('IClamp1', 'amp'): list(np.arange(-2.0, 8.0, 0.5)/10.0)}) + b.initCfg = {'duration': 1.1, 'tau1NMDA': 15} runBatch(b, 'batchNa') diff --git a/netpyne/batch.py b/netpyne/batch.py index 54f487737..1562d703f 100644 --- a/netpyne/batch.py +++ b/netpyne/batch.py @@ -31,9 +31,10 @@ def runJob(script, cfgSavePath, netParamsSavePath): class Batch(object): - def __init__(self, cfgFile='cfg.py', netParamsFile='netParams.py', params=None): + def __init__(self, cfgFile='cfg.py', netParamsFile='netParams.py', params=None, initCfg={}): self.batchLabel = 'batch_'+str(datetime.date.today()) self.cfgFile = cfgFile + self.initCfg = initCfg self.netParamsFile = netParamsFile self.saveFolder = '/'+self.batchLabel self.method = 'grid' @@ -66,6 +67,18 @@ def save(self, filename): json.dump(dataSave, fileObj, indent=4, sort_keys=True) + def setCfgNestedParam(self, paramLabel, paramVal): + if isinstance(paramLabel, tuple): + container = self.cfg + for ip in range(len(paramLabel)-1): + if isinstance(container, specs.SimConfig): + container = getattr(container, paramLabel[ip]) + else: + container = container[paramLabel[ip]] + container[paramLabel[-1]] = paramVal + else: + setattr(self.cfg, paramLabel, paramVal) # set simConfig params + def run(self): if self.method in ['grid','list']: # create saveFolder @@ -93,6 +106,11 @@ def run(self): cfgModule = imp.load_source(cfgModuleName, self.cfgFile) self.cfg = cfgModule.cfg + # set initial cfg initCfg + if len(self.initCfg) > 0: + for paramLabel, paramVal in self.initCfg.iteritems(): + self.setCfgNestedParam(paramLabel, paramVal) + # iterate over all param combinations if self.method == 'grid': groupedParams = False @@ -145,16 +163,8 @@ def run(self): for i, paramVal in enumerate(pComb): paramLabel = labelList[i] - if isinstance(paramLabel, tuple): - container = self.cfg - for ip in range(len(paramLabel)-1): - if isinstance(container, specs.SimConfig): - container = getattr(container, paramLabel[ip]) - else: - container = container[paramLabel[ip]] - container[paramLabel[-1]] = paramVal - else: - setattr(self.cfg, paramLabel, paramVal) # set simConfig params + self.setCfgNestedParam(paramLabel, paramVal) + print str(paramLabel)+' = '+str(paramVal) # set simLabel and jobName From 36f084855018ed8e4eda33bce0874bfa84a7f5c0 Mon Sep 17 00:00:00 2001 From: salvdord Date: Mon, 31 Jul 2017 23:50:32 -0400 Subject: [PATCH 17/50] Added option to set initial cfg in batch sims - debugged --- netpyne/batch.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/netpyne/batch.py b/netpyne/batch.py index 1562d703f..75bd43345 100644 --- a/netpyne/batch.py +++ b/netpyne/batch.py @@ -28,6 +28,22 @@ def runJob(script, cfgSavePath, netParamsSavePath): proc = Popen(command.split(' '), stdout=PIPE, stderr=PIPE) print proc.stdout.read() +def tupleToStr (obj): + if type(obj) == list: + for item in obj: + if type(item) in [list, dict]: + tupleToStr(item) + elif type(item) == tuple: + obj[obj.index(item)] = str(item) + + elif type(obj) == dict: + for key,val in obj.iteritems(): + if type(val) in [list, dict]: + tupleToStr(val) + elif type(val) == tuple: + obj[key] = str(val) # also replace empty dicts with empty list + return obj + class Batch(object): @@ -64,7 +80,7 @@ def save(self, filename): #encoder.FLOAT_REPR = lambda o: format(o, '.12g') print('Saving batch to %s ... ' % (filename)) with open(filename, 'w') as fileObj: - json.dump(dataSave, fileObj, indent=4, sort_keys=True) + json.dump(tupleToStr(dataSave), fileObj, indent=4, sort_keys=True) def setCfgNestedParam(self, paramLabel, paramVal): From bf70b957c2f1619bcc3dd31e918eb0a4e919cc9d Mon Sep 17 00:00:00 2001 From: salvdord Date: Mon, 31 Jul 2017 23:56:28 -0400 Subject: [PATCH 18/50] Added option to set initial cfg in batch sims - debugged --- netpyne/batch.py | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/netpyne/batch.py b/netpyne/batch.py index 75bd43345..c2f6bd1cd 100644 --- a/netpyne/batch.py +++ b/netpyne/batch.py @@ -28,23 +28,6 @@ def runJob(script, cfgSavePath, netParamsSavePath): proc = Popen(command.split(' '), stdout=PIPE, stderr=PIPE) print proc.stdout.read() -def tupleToStr (obj): - if type(obj) == list: - for item in obj: - if type(item) in [list, dict]: - tupleToStr(item) - elif type(item) == tuple: - obj[obj.index(item)] = str(item) - - elif type(obj) == dict: - for key,val in obj.iteritems(): - if type(val) in [list, dict]: - tupleToStr(val) - elif type(val) == tuple: - obj[key] = str(val) # also replace empty dicts with empty list - return obj - - class Batch(object): def __init__(self, cfgFile='cfg.py', netParamsFile='netParams.py', params=None, initCfg={}): @@ -126,6 +109,7 @@ def run(self): if len(self.initCfg) > 0: for paramLabel, paramVal in self.initCfg.iteritems(): self.setCfgNestedParam(paramLabel, paramVal) + self.initCfg[str(paramLabel)] = self.initCfg.pop(paramLabel) # convert tuple to str # iterate over all param combinations if self.method == 'grid': From 8c23b2f4533ff91b30fbdbb4a2188852980747f0 Mon Sep 17 00:00:00 2001 From: salvdord Date: Mon, 31 Jul 2017 23:56:51 -0400 Subject: [PATCH 19/50] Added option to set initial cfg in batch sims - debugged --- netpyne/batch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netpyne/batch.py b/netpyne/batch.py index c2f6bd1cd..aedd7ae90 100644 --- a/netpyne/batch.py +++ b/netpyne/batch.py @@ -63,7 +63,7 @@ def save(self, filename): #encoder.FLOAT_REPR = lambda o: format(o, '.12g') print('Saving batch to %s ... ' % (filename)) with open(filename, 'w') as fileObj: - json.dump(tupleToStr(dataSave), fileObj, indent=4, sort_keys=True) + json.dump(dataSave, fileObj, indent=4, sort_keys=True) def setCfgNestedParam(self, paramLabel, paramVal): From 5c8076a9897132d54fde762341ec9cd639959a7b Mon Sep 17 00:00:00 2001 From: salvdord Date: Mon, 31 Jul 2017 23:58:20 -0400 Subject: [PATCH 20/50] Added option to set initial cfg in batch sims - debugged --- netpyne/batch.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/netpyne/batch.py b/netpyne/batch.py index aedd7ae90..b282e84a2 100644 --- a/netpyne/batch.py +++ b/netpyne/batch.py @@ -88,6 +88,17 @@ def run(self): if not os.path.exists(self.saveFolder): print ' Could not create', self.saveFolder + # import cfg + cfgModuleName = os.path.basename(self.cfgFile).split('.')[0] + cfgModule = imp.load_source(cfgModuleName, self.cfgFile) + self.cfg = cfgModule.cfg + + # set initial cfg initCfg + if len(self.initCfg) > 0: + for paramLabel, paramVal in self.initCfg.iteritems(): + self.setCfgNestedParam(paramLabel, paramVal) + self.initCfg[str(paramLabel)] = self.initCfg.pop(paramLabel) # convert tuple to str + # save Batch dict as json targetFile = self.saveFolder+'/'+self.batchLabel+'_batch.json' self.save(targetFile) @@ -100,16 +111,6 @@ def run(self): netParamsSavePath = self.saveFolder+'/'+self.batchLabel+'_netParams.py' os.system('cp ' + self.netParamsFile + ' ' + netParamsSavePath) - # import cfg - cfgModuleName = os.path.basename(self.cfgFile).split('.')[0] - cfgModule = imp.load_source(cfgModuleName, self.cfgFile) - self.cfg = cfgModule.cfg - - # set initial cfg initCfg - if len(self.initCfg) > 0: - for paramLabel, paramVal in self.initCfg.iteritems(): - self.setCfgNestedParam(paramLabel, paramVal) - self.initCfg[str(paramLabel)] = self.initCfg.pop(paramLabel) # convert tuple to str # iterate over all param combinations if self.method == 'grid': From c23e8af05f8219c6d70d37c46fa0247585f6969b Mon Sep 17 00:00:00 2001 From: salvdord Date: Tue, 1 Aug 2017 09:48:14 -0400 Subject: [PATCH 21/50] Added option to set initial cfg in batch sims - debugged --- netpyne/batch.py | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/netpyne/batch.py b/netpyne/batch.py index b282e84a2..6908ddfbf 100644 --- a/netpyne/batch.py +++ b/netpyne/batch.py @@ -28,6 +28,20 @@ def runJob(script, cfgSavePath, netParamsSavePath): proc = Popen(command.split(' '), stdout=PIPE, stderr=PIPE) print proc.stdout.read() +def tupleToStr (obj): + if type(obj) == list: + for item in obj: + if type(item) in [list, dict]: + tupleToStr(item) + elif type(obj) == dict: + for key,val in obj.iteritems(): + if type(val) in [list, dict]: + tupleToStr(val) + elif type(key) == tuple: + obj[str(key)] = obj.pop(key) + return obj + + class Batch(object): def __init__(self, cfgFile='cfg.py', netParamsFile='netParams.py', params=None, initCfg={}): @@ -56,7 +70,7 @@ def save(self, filename): if not os.path.exists(folder): print ' Could not create', folder - dataSave = {'batch': self.__dict__} + dataSave = {'batch': tupleToStr(self.__dict__)} if ext == 'json': import json #from json import encoder @@ -88,16 +102,6 @@ def run(self): if not os.path.exists(self.saveFolder): print ' Could not create', self.saveFolder - # import cfg - cfgModuleName = os.path.basename(self.cfgFile).split('.')[0] - cfgModule = imp.load_source(cfgModuleName, self.cfgFile) - self.cfg = cfgModule.cfg - - # set initial cfg initCfg - if len(self.initCfg) > 0: - for paramLabel, paramVal in self.initCfg.iteritems(): - self.setCfgNestedParam(paramLabel, paramVal) - self.initCfg[str(paramLabel)] = self.initCfg.pop(paramLabel) # convert tuple to str # save Batch dict as json targetFile = self.saveFolder+'/'+self.batchLabel+'_batch.json' @@ -110,6 +114,17 @@ def run(self): # copy netParams source to folder netParamsSavePath = self.saveFolder+'/'+self.batchLabel+'_netParams.py' os.system('cp ' + self.netParamsFile + ' ' + netParamsSavePath) + + # import cfg + cfgModuleName = os.path.basename(self.cfgFile).split('.')[0] + cfgModule = imp.load_source(cfgModuleName, self.cfgFile) + self.cfg = cfgModule.cfg + + # set initial cfg initCfg + if len(self.initCfg) > 0: + for paramLabel, paramVal in self.initCfg.iteritems(): + self.setCfgNestedParam(paramLabel, paramVal) + self.initCfg[str(paramLabel)] = self.initCfg.pop(paramLabel) # convert tuple to str # iterate over all param combinations From 12e5f0ef427b8582553f4c05c75dfda92b261eec Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Thu, 3 Aug 2017 00:14:39 -0400 Subject: [PATCH 22/50] simconfifg validate --- netpyne/tests/tests.py | 75 +++++++++++++++++++++++++-------- netpyne/tests/validate_tests.py | 52 ++++++++++++++++++++++- 2 files changed, 109 insertions(+), 18 deletions(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index 3b9dcd90f..198ffca92 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -263,8 +263,10 @@ def testIsNumeric(self,val): # TEST_TYPE_IS_NUMERIC def testIsFloat(self,val): # TEST_TYPE_IS_FLOAT try: + #print (" in float *** = " + str(val)) assert (isinstance (val,numbers.Real)) except AssertionError as e: + #print ( " !!!!! in float error ") e.args += (val,) raise @@ -1445,9 +1447,9 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "durationTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" - testObj.testTypes = [TEST_TYPE_IS_INT] - testObj.messageText = ["SimConfig->'duration':Duration is not an integer."] + testObj.testParameterValue = "self.simConfig.duration" + testObj.testTypes = [TEST_TYPE_IS_FLOAT] + testObj.messageText = ["SimConfig->'duration':Duration is not an float."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["durationTest"] = testObj @@ -1458,7 +1460,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "dtTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.dt" testObj.testTypes = [TEST_TYPE_IS_FLOAT] testObj.messageText = ["simConfig->'dt':dt is not a float."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1583,7 +1585,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "printPopAvgRatesTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.printPopAvgRates" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["simConfig->'printPopAvgRates':printPopAvgRates is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1595,7 +1597,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "includeParamsLabelTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.includeParamsLabel" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["simConfig->'includeParamsLabel':includeParamsLabel is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1607,7 +1609,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "timingTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.timing" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["simConfig->'timing':timing is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1619,7 +1621,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "saveTimingTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.saveTiming" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["simConfig->'saveTiming':saveTiming is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1631,7 +1633,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "verboseTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.verbose" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["simConfig->'verbose':verbose is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1643,7 +1645,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "recordCellsTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.recordCells" testObj.testTypes = [TEST_TYPE_IS_LIST] testObj.messageText = ["simConfig->'recordCells':recordCells is not a list."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1655,7 +1657,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "recordTracesTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "recordTraces" testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_VALUE_LIST ] testObj.testValueList = ['sec','loc','var'] testObj.messageText = ["simConfig->'recordTraces':recordTraces is not a dict.","SimConfig->'recordTracesTest':is not a valid value. Valid values are 'netParams', 'netCells', 'netPops', 'simConfig', 'simData'."] @@ -1666,7 +1668,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "saveDataInclude" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.saveData" testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_VALUE_LIST ] testObj.testValueList = ['netParams', 'netCells', 'netPops', 'simConfig', 'simData'] testObj.messageText = ["simConfig->'saveDataInclude':recordTraces is not a dict.","SimConfig->'saveDataInclude':is not a valid value. Valid values are 'netParams', 'netCells', 'netPops', 'simConfig', 'simData'." ] @@ -1678,7 +1680,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "recordStimTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.recordStim" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["SimConfig->'recordStim':recordStim is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1690,7 +1692,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "recordStepTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.recordStep" testObj.testTypes = [TEST_TYPE_IS_FLOAT] testObj.messageText = ["SimConfig->'recordStep':recordStep is not a float."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -2400,7 +2402,7 @@ def runSimConfigTests(self): def execRunTests(self, testObj, params): - print ( " !!!!!!!! for test " + str(testObj.testTypes)) + # print ( " !!!!!!!! for test " + str(testObj.testTypes)) for testIndex, testType in enumerate(testObj.testTypes): @@ -2571,7 +2573,8 @@ def execRunTests(self, testObj, params): for paramLabel, paramValues in params.items(): try: - self.testTypeObj.testIsInt(testObj.testParameterValue, paramValues) + #print (" in int = " + str(paramValues)) + self.testTypeObj.testIsInt(testObj.testParameterValue) if self.verboseFlag: print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print ( "PASSED" ) @@ -2585,6 +2588,7 @@ def execRunTests(self, testObj, params): try: paramName = eval(testObj.testParameterValue) + #print (" in int 2 = " + str(paramName)) self.testTypeObj.testIsInt(paramName) if self.verboseFlag: @@ -2595,7 +2599,44 @@ def execRunTests(self, testObj, params): if self.verboseFlag: print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) try: - print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + ". Value specified is " + str(paramName) + " ." + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + " Value specified is " + str(paramName) + "." + except: + pass + + elif testType == TEST_TYPE_IS_FLOAT: + + if isinstance(params, dict): + + for paramLabel, paramValues in params.items(): + + try: + #print (" in float = " + str(paramValues)) + self.testTypeObj.testIsFloat(testObj.testParameterValue) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print ( "PASSED" ) + + except Exception as e: + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + + else: + + try: + paramName = eval(testObj.testParameterValue) + #print (" in float 2 = " + str(paramName)) + + self.testTypeObj.testIsFloat(paramName) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) + print ( "PASSED" ) + + except Exception as e: + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) + try: + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + " Value specified is " + str(paramName) + "." except: pass diff --git a/netpyne/tests/validate_tests.py b/netpyne/tests/validate_tests.py index 766aad878..20d6507f8 100644 --- a/netpyne/tests/validate_tests.py +++ b/netpyne/tests/validate_tests.py @@ -33,11 +33,44 @@ def loadSimConfigTests(self): # print ( " loading tests ") self.paramsMap["simConfig"] = {} + + # duration self.paramsMap["simConfig"]["durationTest"] = [] + simConfigParams = ParamsObj() + simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + simConfigParams.simConfig.verbose = False # Show detailed messages + simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + simConfigParams.simConfig.filename = 'model_output' # Set file output name + simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + + simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + + self.paramsMap["simConfig"]["durationTest"].append(simConfigParams) + # invalid duration + self.paramsMap["simConfig"]["invalidDurationTest"] = [] simConfigParams = ParamsObj() + simConfigParams.simConfig.duration = "s" # Duration of the simulation, in ms + simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + simConfigParams.simConfig.verbose = False # Show detailed messages + simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + simConfigParams.simConfig.filename = 'model_output' # Set file output name + simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + + simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - # Simulation options + self.paramsMap["simConfig"]["invalidDurationTest"].append(simConfigParams) + + # duration + self.paramsMap["simConfig"]["dtTest"] = [] + simConfigParams = ParamsObj() simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use simConfigParams.simConfig.verbose = False # Show detailed messages @@ -52,6 +85,23 @@ def loadSimConfigTests(self): self.paramsMap["simConfig"]["durationTest"].append(simConfigParams) + # invalid duration + self.paramsMap["simConfig"]["invalidDtTest"] = [] + simConfigParams = ParamsObj() + simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + simConfigParams.simConfig.dt = "s" # Internal integration timestep to use + simConfigParams.simConfig.verbose = False # Show detailed messages + simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + simConfigParams.simConfig.filename = 'model_output' # Set file output name + simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + + simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + + self.paramsMap["simConfig"]["invalidDurationTest"].append(simConfigParams) + def loadTestsWithParams(self): # print ( " loading tests ") From 1b51fe990fa015df87d32d9653ddd3579be28245 Mon Sep 17 00:00:00 2001 From: salvdord Date: Thu, 3 Aug 2017 13:44:50 -0400 Subject: [PATCH 23/50] Added option to set grouped params in Batch constructor --- CHANGES.md | 2 ++ examples/sandbox/sandbox.py | 16 +++++++++++++--- netpyne/batch.py | 5 ++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 5dae41936..be5ecdb31 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,8 @@ - Added option to set initial cfg in batch sims +- Added option to set grouped params in Batch constructor + - Fixed bug in modifyStims for NetStim 'interval' and 'rate' - Fixed bug importing cell -- use h.pop_section() to avoid stack overflow diff --git a/examples/sandbox/sandbox.py b/examples/sandbox/sandbox.py index 2df85e67f..449c5bd01 100644 --- a/examples/sandbox/sandbox.py +++ b/examples/sandbox/sandbox.py @@ -25,7 +25,8 @@ ############################################################################### # Population parameters -netParams.popParams['PYR'] = {'cellModel': 'HH', 'cellType': 'PYR', 'numCells': 200} # add dict with params for this pop +netParams.popParams['PYR'] = {'cellModel': 'HH', 'cellType': 'PYR', 'numCells': 5} # add dict with params for this pop +netParams.popParams['PYR2'] = {'cellModel': 'HH', 'cellType': 'PYR2', 'numCells': 5} # add dict with params for this pop # Cell parameters @@ -37,6 +38,14 @@ cellRule['secs']['soma']['vinit'] = -71 netParams.cellParams['PYR'] = cellRule # add dict to list of cell params + +cellRule = {'conds': {'cellModel': 'HH', 'cellType': 'PYR2'}, 'secs': {}} # cell rule dict +cellRule['secs']['soma'] = {'geom': {}, 'mechs': {}} # soma params dict +cellRule['secs']['soma']['geom'] = {'diam': 18.8, 'L': 18.8, 'Ra': 123.0} # soma geometry +cellRule['secs']['soma']['mechs']['hh'] = {'gnabar': 0.12, 'gkbar': 0.036, 'gl': 0.003, 'el': -70} # soma hh mechanism +cellRule['secs']['soma']['vinit'] = -71 +netParams.cellParams['PYR2'] = cellRule # add dict to list of cell params + # Synaptic mechanism parameters netParams.synMechParams['AMPA'] = {'mod': 'Exp2Syn', 'tau1': 0.1, 'tau2': 1.0, 'e': 0} @@ -50,7 +59,7 @@ # Connectivity parameters netParams.connParams['PYR->PYR'] = { - 'preConds': {'pop': 'PYR'}, 'postConds': {'pop': 'PYR'}, + 'preConds': {'pop': 'PYR'}, 'postConds': {'pop': ['PYR','PYR2']}, 'weight': 0.002, # weight of each connection 'delay': '0.2+normal(13.0,1.4)', # delay min=0.2, mean=13.0, var = 1.4 'threshold': 10, # threshold @@ -71,7 +80,7 @@ # Recording simConfig.recordCells = [] # which cells to record from -simConfig.recordTraces = {'Vsoma':{'sec':'soma','loc':0.5,'var':'v'}} +simConfig.recordTraces = {'Vsoma':{'sec':'soma','loc':0.5,'var':'v','conds': {'cellType': 'PYR2'}}} simConfig.recordStim = True # record spikes of cell stims simConfig.recordStep = 0.1 # Step size in ms to save data (eg. V traces, LFP, etc) @@ -83,6 +92,7 @@ # Analysis and plotting simConfig.analysis['plotRaster'] =True +simConfig.analysis['plotTraces'] = {'include': ['all'], 'oneFigPer':'trace'} sim.createSimulateAnalyze() diff --git a/netpyne/batch.py b/netpyne/batch.py index 6908ddfbf..45b67f457 100644 --- a/netpyne/batch.py +++ b/netpyne/batch.py @@ -44,7 +44,7 @@ def tupleToStr (obj): class Batch(object): - def __init__(self, cfgFile='cfg.py', netParamsFile='netParams.py', params=None, initCfg={}): + def __init__(self, cfgFile='cfg.py', netParamsFile='netParams.py', params=None, grouped=None, initCfg={}): self.batchLabel = 'batch_'+str(datetime.date.today()) self.cfgFile = cfgFile self.initCfg = initCfg @@ -56,6 +56,9 @@ def __init__(self, cfgFile='cfg.py', netParamsFile='netParams.py', params=None, if params: for k,v in params.iteritems(): self.params.append({'label': k, 'values': v}) + if grouped: + for p in self.params: + if p['label'] in grouped: p['group'] = True def save(self, filename): import os From 2f0f7a70b6b18614d03e63d001a3f1eb2ab79436 Mon Sep 17 00:00:00 2001 From: salvdord Date: Thu, 3 Aug 2017 13:46:10 -0400 Subject: [PATCH 24/50] Added option to set grouped params in Batch constructor --- netpyne/batch.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/netpyne/batch.py b/netpyne/batch.py index 45b67f457..f9e2803dd 100644 --- a/netpyne/batch.py +++ b/netpyne/batch.py @@ -44,7 +44,7 @@ def tupleToStr (obj): class Batch(object): - def __init__(self, cfgFile='cfg.py', netParamsFile='netParams.py', params=None, grouped=None, initCfg={}): + def __init__(self, cfgFile='cfg.py', netParamsFile='netParams.py', params=None, groupedParams=None, initCfg={}): self.batchLabel = 'batch_'+str(datetime.date.today()) self.cfgFile = cfgFile self.initCfg = initCfg @@ -56,9 +56,9 @@ def __init__(self, cfgFile='cfg.py', netParamsFile='netParams.py', params=None, if params: for k,v in params.iteritems(): self.params.append({'label': k, 'values': v}) - if grouped: + if groupedParams: for p in self.params: - if p['label'] in grouped: p['group'] = True + if p['label'] in groupedParams: p['group'] = True def save(self, filename): import os From 772b33427d4440f4189fa0a59b2456311546d20a Mon Sep 17 00:00:00 2001 From: salvdord Date: Thu, 3 Aug 2017 16:23:09 -0400 Subject: [PATCH 25/50] fixed bug in batch.py tupleToStr() --- netpyne/batch.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/netpyne/batch.py b/netpyne/batch.py index f9e2803dd..0f68d9153 100644 --- a/netpyne/batch.py +++ b/netpyne/batch.py @@ -29,6 +29,7 @@ def runJob(script, cfgSavePath, netParamsSavePath): print proc.stdout.read() def tupleToStr (obj): + #print '\nbefore:', obj if type(obj) == list: for item in obj: if type(item) in [list, dict]: @@ -37,8 +38,9 @@ def tupleToStr (obj): for key,val in obj.iteritems(): if type(val) in [list, dict]: tupleToStr(val) - elif type(key) == tuple: + if type(key) == tuple: obj[str(key)] = obj.pop(key) + #print 'after:', obj return obj @@ -73,7 +75,7 @@ def save(self, filename): if not os.path.exists(folder): print ' Could not create', folder - dataSave = {'batch': tupleToStr(self.__dict__)} + dataSave = {'batch': tupleToStr(self.__dict__)} if ext == 'json': import json #from json import encoder From 038d813e40cc4ad269f55cb754f208dd7a6f1559 Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Thu, 3 Aug 2017 23:41:22 -0400 Subject: [PATCH 26/50] simconfig --- netpyne/tests/tests.py | 33 ++++++++++++++++++++++---- netpyne/tests/validate_tests.py | 41 +++++++++++++++++++++++++++++++-- 2 files changed, 68 insertions(+), 6 deletions(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index 198ffca92..60e05d393 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -82,7 +82,7 @@ TEST_TYPE_IS_VALID_SPIKE_GENLOC = "Spike gen loc" TEST_TYPE_VALID_STIM = "Valid stim" TEST_TYPE_VALID_ANALYSIS = " Valid analysis" - +TEST_TYPE_VALID_HPARAMS = "hParams test" class TestTypeObj(object): def __init__(self): @@ -1473,8 +1473,8 @@ def loadSimConfigTests(self): testObj.testName = "hParamsTest" testObj.testParameterType = "string" testObj.testParameterValue = "type" - testObj.testTypes = [TEST_TYPE_IS_DICT] - testObj.messageText = ["simConfig->'hParams':hParams is not a dict."] + testObj.testTypes = [TEST_TYPE_IS_DICT, TEST_TYPE_VALID_HPARAMS ] + testObj.messageText = ["simConfig->'hParams':hParams is not a dict." ] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["hParamsTest"] = testObj @@ -1660,7 +1660,7 @@ def loadSimConfigTests(self): testObj.testParameterValue = "recordTraces" testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_VALUE_LIST ] testObj.testValueList = ['sec','loc','var'] - testObj.messageText = ["simConfig->'recordTraces':recordTraces is not a dict.","SimConfig->'recordTracesTest':is not a valid value. Valid values are 'netParams', 'netCells', 'netPops', 'simConfig', 'simData'."] + testObj.messageText = ["simConfig->'recordTraces':recordTraces is not a dict.","simConfig->'recordTracesTest':is not a valid value. Valid values are 'netParams', 'netCells', 'netPops', 'simConfig', 'simData'."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["recordTracesTest"] = testObj @@ -3160,3 +3160,28 @@ def execRunTests(self, testObj, params): print ( "Test: for valid stim target.") #print ( "paramvalues = " + str(paramValues)) print (str(MESSAGE_TYPE_ERROR) + ": " + str(e) + ".") + + elif testType == TEST_TYPE_VALID_HPARAMS: + + if isinstance(params, dict): + for paramLabel, paramValues in params.items(): + try: + + stimValid, errorMessages = self.testTypeObj.testValidHParams(paramValues) + + if len(errorMessages) == 0: + if self.verboseFlag: + print ( "Test: for valid hParams.") + print ( "PASSED" ) + else: + if self.verboseFlag: + print ( "Test: for valid hParams.") + for errorMessage in errorMessages: + print ( MESSAGE_TYPE_ERROR + ": " + errorMessage) + + except Exception as e: + traceback.print_exc(file=sys.stdout) + if self.verboseFlag: + print ( "Test: for valid hParams.") + #print ( "paramvalues = " + str(paramValues)) + print (str(MESSAGE_TYPE_ERROR) + ": simConfig->hParams: Invalid value. Valid values are " + str(h.__dict__.keys()) + ". Value supplied is " + str(simConfig.hParams)) diff --git a/netpyne/tests/validate_tests.py b/netpyne/tests/validate_tests.py index 20d6507f8..09804db0c 100644 --- a/netpyne/tests/validate_tests.py +++ b/netpyne/tests/validate_tests.py @@ -1,4 +1,5 @@ """ + test_validate.py Testing code for Validation class @@ -83,7 +84,7 @@ def loadSimConfigTests(self): simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - self.paramsMap["simConfig"]["durationTest"].append(simConfigParams) + self.paramsMap["simConfig"]["dtTest"].append(simConfigParams) # invalid duration self.paramsMap["simConfig"]["invalidDtTest"] = [] @@ -100,7 +101,43 @@ def loadSimConfigTests(self): simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - self.paramsMap["simConfig"]["invalidDurationTest"].append(simConfigParams) + self.paramsMap["simConfig"]["invalidDtTest"].append(simConfigParams) + + # duration + self.paramsMap["simConfig"]["hParamsTest"] = [] + simConfigParams = ParamsObj() + simConfigParams.simConfig.hParams = {'celsius': 6.3, 'clamp_resist': 0.001} + simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + simConfigParams.simConfig.verbose = False # Show detailed messages + simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + simConfigParams.simConfig.filename = 'model_output' # Set file output name + simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + + simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + + self.paramsMap["simConfig"]["hParamsTest"].append(simConfigParams) + + # invalid duration + self.paramsMap["simConfig"]["invalidHParamsTest"] = [] + simConfigParams = ParamsObj() + simConfigParams.simConfig.hParams = {'celsius11': 6.3, 'clamp_resist': 0.001} + simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + simConfigParams.simConfig.dt = "s" # Internal integration timestep to use + simConfigParams.simConfig.verbose = False # Show detailed messages + simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + simConfigParams.simConfig.filename = 'model_output' # Set file output name + simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + + simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + + self.paramsMap["simConfig"]["invalidHParamsTest"].append(simConfigParams) def loadTestsWithParams(self): From c77003aa68a7da868db1376abca9ed79040cb5bf Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Thu, 3 Aug 2017 23:49:12 -0400 Subject: [PATCH 27/50] simconfig 2 --- netpyne/tests/tests.py | 432 ++++++++++++++++---------------- netpyne/tests/validate_tests.py | 14 +- 2 files changed, 223 insertions(+), 223 deletions(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index 60e05d393..323c317c1 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -1129,221 +1129,221 @@ def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS else: if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['spikeHist'] ] ): errorMessages.append("SimConfig->'analysis'->'plotRaster'->'spikeHist': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") - # - # if 'plotSpikeHist' in analysis: - # - # plotSpikeHist = analysis['plotSpikeHist'] - # - # if not isinstance ( plotSpikeHist, dict): - # errorMessages.append("SimConfig->'analysis'->'plotSpikeHist': Must be a dict. Value provided is " + str(plotSpikeHist) + "."") - # - # if 'include' in plotSpikeHist and not isinstance( plotSpikeHist['include'], list): - # errorMessages.append("SimConfig->'analysis'->'plotSpikeHist'->'include': Must be a list. Value provided is " + str(plotSpikeHist['include']) + ".") - # - # # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - # # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") - # - # if 'orderInverse' in plotRaster: - # - # if not isinstance( plotRaster['orderInverse'], bool): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderInverse': Must be boolean. Value provided is " + str(plotRaster['orderInverse']) + ".") - # - # if 'overlay' in plotRaster: - # - # if not isinstance( plotRaster['overlay'], bool): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'overlay': Must be boolean. Value provided is " + str(plotRaster['overlay']) + ".") - # - # if 'graphType' in plotRaster and plotRaster['graphType'] not in ['line','bar']: - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'graphType': GraphType must be in " + str(['line','bar']) + ". Value provided is " + str(plotRaster['graphType']) + ".") - # - # if 'yaxis' in plotRaster and plotRaster['yaxis'] not in ['rate','count']: - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'yaxis': yaxis must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['yaxis']) + ".") - # - # if 'figSize' in plotRaster and not isinstance (plotRaster['figSize'], tuple): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'figSize': figSize must be tuple if specified". Value provided is " + str(plotRaster['figSize']) + ".") - # - # if 'binSize' in plotRaster and not isinstance( plotRaster['binSize'], int): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'binSize': Must be an integer. Value provided is " + str(plotRaster['binSize']) + ".") - # - # if 'showFig' in plotRaster: - # - # if not isinstance( plotRaster['showFig'], bool): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'showFig': Must be boolean. Value provided is " + str(plotRaster['showFig']) + ".") - # - # if 'plotSpikePSD' in analysis: - # - # plotSpikePSD = analysis['plotSpikePSD'] - # if not isinstance ( plotSpikePSD, dict): - # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD': Must be a dict. Value provided is " + str(plotSpikePSD) + "."") - # - # if 'include' in plotSpikePSD and not isinstance( plotSpikePSD['include'], list): - # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'include': Must be a list. Value provided is " + str(plotSpikePSD['include']) + ".") - # - # # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - # # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") - # - # if 'overlay' in plotSpikePSD: - # - # if not isinstance( plotSpikePSD['overlay'], bool): - # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'overlay': Must be boolean. Value provided is " + str(plotSpikePSD['overlay']) + ".") - # - # if 'Fs' in plotSpikePSD and not isinstance ( plotSpikePSD['Fs'] , numbers.Real ): - # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'Fs': Fs must be float. Value provided is " + str(plotSpikePSD['Fs']) + ".") - # - # if 'figSize' in plotSpikePSD and not isinstance (plotSpikePSD['figSize'], tuple): - # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'figSize': figSize must be tuple if specified". Value provided is " + str(plotSpikePSD['figSize']) + ".") - # - # if 'binSize' in plotSpikePSD and not isinstance( plotSpikePSD['binSize'], int): - # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'binSize': Must be an integer. Value provided is " + str(plotSpikePSD['binSize']) + ".") - # - # if 'showFig' in plotSpikePSD: - # - # if not isinstance( plotSpikePSD['showFig'], bool): - # errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'showFig': Must be boolean. Value provided is " + str(plotSpikePSD['showFig']) + ".") - # - # if 'plotTraces' in analysis: - # - # plotTraces = analysis['plotTraces'] - # if not isinstance ( plotTraces, dict): - # errorMessages.append("SimConfig->'analysis'->'plotTraces': Must be a dict. Value provided is " + str(plotTraces) + "."") - # - # if 'include' in plotTraces and not isinstance( plotTraces['include'], list): - # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'include': Must be a list. Value provided is " + str(plotTraces['include']) + ".") - # - # # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - # # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") - # - # if 'overlay' in plotTraces and not isinstance( plotTraces['overlay'], bool): - # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'overlay': Must be boolean. Value provided is " + str(plotTraces['overlay']) + ".") - # - # if 'binSize' in plotTraces and not isinstance( plotTraces['binSize'], int): - # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'binSize': Must be an integer. Value provided is " + str(plotTraces['binSize']) + ".") - # - # if 'oneFigPer' in plotRaster and plotRaster['oneFigPer'] not in ['cell','trace']: - # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'oneFigPer': oneFigPer must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['oneFigPer']) + ".") - # - # if 'rerun' in plotTraces and not isinstance( plotTraces['rerun'], bool): - # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'rerun': Must be boolean. Value provided is " + str(plotTraces['rerun']) + ".") - # - # if 'figSize' in plotTraces and not isinstance (plotTraces['figSize'], tuple): - # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotTraces['figSize']) + ".") - # - # if 'saveFig' in plotTraces and not isinstance (plotTraces['saveFig'], tuple): - # errorMessages.append("SimConfig->'analysis'->'plotTraces'->'saveFig': saveFig must be tuple if specified. Value provided is " + str(plotTraces['saveFig']) + ".") - # - # if 'plotShape' in analysis: - # - # plotShapes = analysis['plotShapes'] - # if not isinstance ( plotShapes, dict): - # errorMessages.append("SimConfig->'analysis'->'plotShapes': Must be a dict. Value provided is " + str(plotShapes) + "."") - # - # if 'showSyns' in plotShapes and not isinstance( plotShapes['showSyns'], bool): - # errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showSyns': Must be boolean. Value provided is " + str(plotShapes['showSyns']) + ".") - # - # if 'showFig' in plotShapes and not isinstance( plotShapes['showFig'], bool): - # errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showFig': Must be boolean. Value provided is " + str(plotShapes['showFig']) + ".") - # - # if 'plotConn' in analysis: - # - # plotConn = analysis['plotConn'] - # - # if not isinstance ( plotConn, dict): - # errorMessages.append("SimConfig->'analysis'->'plotConn': Must be a dict. Value provided is " + str(plotConn) + "."") - # - # if 'include' in plotConn and not isinstance( plotConn['include'], list): - # errorMessages.append("SimConfig->'analysis'->'plotConn'->'include': Must be a list. Value provided is " + str(plotConn['include']) + ".") - # - # if 'feature' in plotConn: - # if plotConn['spikeHist'] not in ['weight', 'delay', 'numConns']: - # errorMessages.append("SimConfig->'analysis'->'plotConn'->'feature': Valid values are " + str(['weight', 'delay', 'numConns'])+ ". Value provided is " + str(plotConn['feature']) + ".") - # - # if 'groupBy' in plotConn: - # if plotConn['spikeHist'] not in ['pop', 'cell']: - # errorMessages.append("SimConfig->'analysis'->'plotConn'->'groupBy': Valid values are " + str(['pop', 'cell'])+ ". Value provided is " + str(plotConn['groupBy']) + ".") - # - # if 'orderBy' in plotConn: - # if plotConn['spikeHist'] not in ['gid', 'ynorm', 'y']: - # errorMessages.append("SimConfig->'analysis'->'plotConn'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plotConn['orderBy']) + ".") - # - # if 'showFig' in plotConn and not isinstance( plotConn['showFig'], bool): - # errorMessages.append("SimConfig->'analysis'->'plotConn'->'showFig': Must be boolean. Value provided is " + str(plotConn['showFig']) + ".") - # - # if 'plot2DNet' in analysis: - # - # plot2DNet = analysis['plot2DNet'] - # - # if not isinstance ( plot2DNet, dict): - # errorMessages.append("SimConfig->'analysis'->'plot2DNet': Must be a dict. Value provided is " + str(plot2DNet) + "."") - # - # if 'include' in plot2DNet and not isinstance( plot2DNet['include'], list): - # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'include': Must be a list. Value provided is " + str(plot2DNet['include']) + ".") - # - # if 'orderBy' in plot2DNet: - # if plot2DNet['spikeHist'] not in ['gid', 'ynorm', 'y']: - # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plot2DNet['orderBy']) + ".") - # - # if 'view' in plot2DNet: - # if plot2DNet['spikeHist'] not in ['xy', 'xz']: - # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'view': Valid values are " + str(['xy', 'xz'])+ ". Value provided is " + str(plot2DNet['view']) + ".") - # - # if 'showConns' in plot2DNet and not isinstance( plot2DNet['showConns'], bool): - # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showConns': Must be boolean. Value provided is " + str(plot2DNet['showConns']) + ".") - # - # if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): - # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") - # - # if 'nTE' in analysis: - # - # nTE = analysis['nTE'] - # - # if not isinstance ( nTE, dict): - # errorMessages.append("SimConfig->'analysis'->'nTE': Must be a dict. Value provided is " + str(nTE) + "."") - # - # if 'cells1' in nTE and not isinstance( nTE['cells1'], list): - # errorMessages.append("SimConfig->'analysis'->'nTE'->'cells1': Must be a list. Value provided is " + str(nTE['cells1']) + ".") - # - # if 'cells2' in nTE and not isinstance( nTE['cells2'], list): - # errorMessages.append("SimConfig->'analysis'->'nTE'->'cells2': Must be a list. Value provided is " + str(nTE['cells2']) + ".") - # - # if 'spks1' in nTE and not isinstance( nTE['spks1'], list): - # errorMessages.append("SimConfig->'analysis'->'nTE'->'spks1': Must be a list. Value provided is " + str(nTE['spks1']) + ".") - # - # if 'spks2' in nTE and not isinstance( nTE['spks2'], list): - # errorMessages.append("SimConfig->'analysis'->'nTE'->'spks2': Must be a list. Value provided is " + str(nTE['spks2']) + ".") - # - # if 'binSize' in nTE and not isinstance( nTE['binSize'], int): - # errorMessages.append("SimConfig->'analysis'->'nTE'->'binSize': Must be an int. Value provided is " + str(nTE['binSize']) + ".") - # - # if 'numShuffle' in nTE and not isinstance( nTE['numShuffle'], int): - # errorMessages.append("SimConfig->'analysis'->'nTE'->'numShuffle': Must be an int. Value provided is " + str(nTE['numShuffle']) + ".") - # - # if 'granger' in analysis: - # - # granger = analysis['granger'] - # - # if not isinstance ( granger, dict): - # errorMessages.append("SimConfig->'analysis'->'granger': Must be a dict. Value provided is " + str(granger) + "."") - # - # if 'cells1' in granger and not isinstance( granger['cells1'], list): - # errorMessages.append("SimConfig->'analysis'->'granger'->'cells1': Must be a list. Value provided is " + str(granger['cells1']) + ".") - # - # if 'cells2' in granger and not isinstance( granger['cells2'], list): - # errorMessages.append("SimConfig->'analysis'->'granger'->'cells2': Must be a list. Value provided is " + str(granger['cells2']) + ".") - # - # if 'spks1' in granger and not isinstance( granger['spks1'], list): - # errorMessages.append("SimConfig->'analysis'->'granger'->'spks1': Must be a list. Value provided is " + str(granger['spks1']) + ".") - # - # if 'spks2' in granger and not isinstance( granger['spks2'], list): - # errorMessages.append("SimConfig->'analysis'->'granger'->'spks2': Must be a list. Value provided is " + str(granger['spks2']) + ".") - # - # if 'binSize' in granger and not isinstance( granger['binSize'], int): - # errorMessages.append("SimConfig->'analysis'->'granger'->'binSize': Must be an int. Value provided is " + str(granger['binSize']) + ".") - # - # if 'plotFig' in plot2DNet and not isinstance( plot2DNet['plotFig'], bool): - # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'plotFig': Must be boolean. Value provided is " + str(plot2DNet['plotFig']) + ".") - # - # if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): - # errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") + + if 'plotSpikeHist' in analysis: + + plotSpikeHist = analysis['plotSpikeHist'] + + if not isinstance ( plotSpikeHist, dict): + errorMessages.append("SimConfig->'analysis'->'plotSpikeHist': Must be a dict. Value provided is " + str(plotSpikeHist) + ".") + + if 'include' in plotSpikeHist and not isinstance( plotSpikeHist['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotSpikeHist'->'include': Must be a list. Value provided is " + str(plotSpikeHist['include']) + ".") + + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + + if 'orderInverse' in plotRaster: + + if not isinstance( plotRaster['orderInverse'], bool): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderInverse': Must be boolean. Value provided is " + str(plotRaster['orderInverse']) + ".") + + if 'overlay' in plotRaster: + + if not isinstance( plotRaster['overlay'], bool): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'overlay': Must be boolean. Value provided is " + str(plotRaster['overlay']) + ".") + + if 'graphType' in plotRaster and plotRaster['graphType'] not in ['line','bar']: + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'graphType': GraphType must be in " + str(['line','bar']) + ". Value provided is " + str(plotRaster['graphType']) + ".") + + if 'yaxis' in plotRaster and plotRaster['yaxis'] not in ['rate','count']: + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'yaxis': yaxis must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['yaxis']) + ".") + + if 'figSize' in plotRaster and not isinstance (plotRaster['figSize'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotRaster['figSize']) + ".") + + if 'binSize' in plotRaster and not isinstance( plotRaster['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'binSize': Must be an integer. Value provided is " + str(plotRaster['binSize']) + ".") + + if 'showFig' in plotRaster: + + if not isinstance( plotRaster['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'showFig': Must be boolean. Value provided is " + str(plotRaster['showFig']) + ".") + + if 'plotSpikePSD' in analysis: + + plotSpikePSD = analysis['plotSpikePSD'] + if not isinstance ( plotSpikePSD, dict): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD': Must be a dict. Value provided is " + str(plotSpikePSD) + ".") + + if 'include' in plotSpikePSD and not isinstance( plotSpikePSD['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'include': Must be a list. Value provided is " + str(plotSpikePSD['include']) + ".") + + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + + if 'overlay' in plotSpikePSD: + + if not isinstance( plotSpikePSD['overlay'], bool): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'overlay': Must be boolean. Value provided is " + str(plotSpikePSD['overlay']) + ".") + + if 'Fs' in plotSpikePSD and not isinstance ( plotSpikePSD['Fs'] , numbers.Real ): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'Fs': Fs must be float. Value provided is " + str(plotSpikePSD['Fs']) + ".") + + if 'figSize' in plotSpikePSD and not isinstance (plotSpikePSD['figSize'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotSpikePSD['figSize']) + ".") + + if 'binSize' in plotSpikePSD and not isinstance( plotSpikePSD['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'binSize': Must be an integer. Value provided is " + str(plotSpikePSD['binSize']) + ".") + + if 'showFig' in plotSpikePSD: + + if not isinstance( plotSpikePSD['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'showFig': Must be boolean. Value provided is " + str(plotSpikePSD['showFig']) + ".") + + if 'plotTraces' in analysis: + + plotTraces = analysis['plotTraces'] + if not isinstance ( plotTraces, dict): + errorMessages.append("SimConfig->'analysis'->'plotTraces': Must be a dict. Value provided is " + str(plotTraces) + ".") + + if 'include' in plotTraces and not isinstance( plotTraces['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'include': Must be a list. Value provided is " + str(plotTraces['include']) + ".") + + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + + if 'overlay' in plotTraces and not isinstance( plotTraces['overlay'], bool): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'overlay': Must be boolean. Value provided is " + str(plotTraces['overlay']) + ".") + + if 'binSize' in plotTraces and not isinstance( plotTraces['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'binSize': Must be an integer. Value provided is " + str(plotTraces['binSize']) + ".") + + if 'oneFigPer' in plotRaster and plotRaster['oneFigPer'] not in ['cell','trace']: + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'oneFigPer': oneFigPer must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['oneFigPer']) + ".") + + if 'rerun' in plotTraces and not isinstance( plotTraces['rerun'], bool): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'rerun': Must be boolean. Value provided is " + str(plotTraces['rerun']) + ".") + + if 'figSize' in plotTraces and not isinstance (plotTraces['figSize'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotTraces['figSize']) + ".") + + if 'saveFig' in plotTraces and not isinstance (plotTraces['saveFig'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'saveFig': saveFig must be tuple if specified. Value provided is " + str(plotTraces['saveFig']) + ".") + + if 'plotShape' in analysis: + + plotShapes = analysis['plotShapes'] + if not isinstance ( plotShapes, dict): + errorMessages.append("SimConfig->'analysis'->'plotShapes': Must be a dict. Value provided is " + str(plotShapes) + ".") + + if 'showSyns' in plotShapes and not isinstance( plotShapes['showSyns'], bool): + errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showSyns': Must be boolean. Value provided is " + str(plotShapes['showSyns']) + ".") + + if 'showFig' in plotShapes and not isinstance( plotShapes['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showFig': Must be boolean. Value provided is " + str(plotShapes['showFig']) + ".") + + if 'plotConn' in analysis: + + plotConn = analysis['plotConn'] + + if not isinstance ( plotConn, dict): + errorMessages.append("SimConfig->'analysis'->'plotConn': Must be a dict. Value provided is " + str(plotConn) + ".") + + if 'include' in plotConn and not isinstance( plotConn['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotConn'->'include': Must be a list. Value provided is " + str(plotConn['include']) + ".") + + if 'feature' in plotConn: + if plotConn['spikeHist'] not in ['weight', 'delay', 'numConns']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'feature': Valid values are " + str(['weight', 'delay', 'numConns'])+ ". Value provided is " + str(plotConn['feature']) + ".") + + if 'groupBy' in plotConn: + if plotConn['spikeHist'] not in ['pop', 'cell']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'groupBy': Valid values are " + str(['pop', 'cell'])+ ". Value provided is " + str(plotConn['groupBy']) + ".") + + if 'orderBy' in plotConn: + if plotConn['spikeHist'] not in ['gid', 'ynorm', 'y']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plotConn['orderBy']) + ".") + + if 'showFig' in plotConn and not isinstance( plotConn['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotConn'->'showFig': Must be boolean. Value provided is " + str(plotConn['showFig']) + ".") + + if 'plot2DNet' in analysis: + + plot2DNet = analysis['plot2DNet'] + + if not isinstance ( plot2DNet, dict): + errorMessages.append("SimConfig->'analysis'->'plot2DNet': Must be a dict. Value provided is " + str(plot2DNet) + ".") + + if 'include' in plot2DNet and not isinstance( plot2DNet['include'], list): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'include': Must be a list. Value provided is " + str(plot2DNet['include']) + ".") + + if 'orderBy' in plot2DNet: + if plot2DNet['spikeHist'] not in ['gid', 'ynorm', 'y']: + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plot2DNet['orderBy']) + ".") + + if 'view' in plot2DNet: + if plot2DNet['spikeHist'] not in ['xy', 'xz']: + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'view': Valid values are " + str(['xy', 'xz'])+ ". Value provided is " + str(plot2DNet['view']) + ".") + + if 'showConns' in plot2DNet and not isinstance( plot2DNet['showConns'], bool): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showConns': Must be boolean. Value provided is " + str(plot2DNet['showConns']) + ".") + + if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") + + if 'nTE' in analysis: + + nTE = analysis['nTE'] + + if not isinstance ( nTE, dict): + errorMessages.append("SimConfig->'analysis'->'nTE': Must be a dict. Value provided is " + str(nTE) + ".") + + if 'cells1' in nTE and not isinstance( nTE['cells1'], list): + errorMessages.append("SimConfig->'analysis'->'nTE'->'cells1': Must be a list. Value provided is " + str(nTE['cells1']) + ".") + + if 'cells2' in nTE and not isinstance( nTE['cells2'], list): + errorMessages.append("SimConfig->'analysis'->'nTE'->'cells2': Must be a list. Value provided is " + str(nTE['cells2']) + ".") + + if 'spks1' in nTE and not isinstance( nTE['spks1'], list): + errorMessages.append("SimConfig->'analysis'->'nTE'->'spks1': Must be a list. Value provided is " + str(nTE['spks1']) + ".") + + if 'spks2' in nTE and not isinstance( nTE['spks2'], list): + errorMessages.append("SimConfig->'analysis'->'nTE'->'spks2': Must be a list. Value provided is " + str(nTE['spks2']) + ".") + + if 'binSize' in nTE and not isinstance( nTE['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'nTE'->'binSize': Must be an int. Value provided is " + str(nTE['binSize']) + ".") + + if 'numShuffle' in nTE and not isinstance( nTE['numShuffle'], int): + errorMessages.append("SimConfig->'analysis'->'nTE'->'numShuffle': Must be an int. Value provided is " + str(nTE['numShuffle']) + ".") + + if 'granger' in analysis: + + granger = analysis['granger'] + + if not isinstance ( granger, dict): + errorMessages.append("SimConfig->'analysis'->'granger': Must be a dict. Value provided is " + str(granger) + ".") + + if 'cells1' in granger and not isinstance( granger['cells1'], list): + errorMessages.append("SimConfig->'analysis'->'granger'->'cells1': Must be a list. Value provided is " + str(granger['cells1']) + ".") + + if 'cells2' in granger and not isinstance( granger['cells2'], list): + errorMessages.append("SimConfig->'analysis'->'granger'->'cells2': Must be a list. Value provided is " + str(granger['cells2']) + ".") + + if 'spks1' in granger and not isinstance( granger['spks1'], list): + errorMessages.append("SimConfig->'analysis'->'granger'->'spks1': Must be a list. Value provided is " + str(granger['spks1']) + ".") + + if 'spks2' in granger and not isinstance( granger['spks2'], list): + errorMessages.append("SimConfig->'analysis'->'granger'->'spks2': Must be a list. Value provided is " + str(granger['spks2']) + ".") + + if 'binSize' in granger and not isinstance( granger['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'granger'->'binSize': Must be an int. Value provided is " + str(granger['binSize']) + ".") + + if 'plotFig' in plot2DNet and not isinstance( plot2DNet['plotFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'plotFig': Must be boolean. Value provided is " + str(plot2DNet['plotFig']) + ".") + + if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") except Exception as e: traceback.print_exc(file=sys.stdout) @@ -2634,7 +2634,7 @@ def execRunTests(self, testObj, params): except Exception as e: if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue) + ".") try: print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + " Value specified is " + str(paramName) + "." except: diff --git a/netpyne/tests/validate_tests.py b/netpyne/tests/validate_tests.py index 09804db0c..d403d48d4 100644 --- a/netpyne/tests/validate_tests.py +++ b/netpyne/tests/validate_tests.py @@ -26,7 +26,7 @@ class RunNetPyneTests(): def __init__ (self): self.paramsMap = {} self.netPyneTestObj = SimTestObj(verboseFlag = True) - #self.loadTestsWithParams() + self.loadTestsWithParams() self.loadSimConfigTests() self.runTestsWithParams() @@ -2055,12 +2055,12 @@ def loadTestsWithParams(self): def runTestsWithParams(self): - #self.runPopTestsWithParams() - #self.runNetTestsWithParams() - #self.runCellTestsWithParams() - #self.runConnTestsWithParams() - #self.runStimSourceTests() - #self.runStimTargetTests() + self.runPopTestsWithParams() + self.runNetTestsWithParams() + self.runCellTestsWithParams() + self.runConnTestsWithParams() + self.runStimSourceTests() + self.runStimTargetTests() self.runSimConfigTests() def runPopTestsWithParams(self): From 283064e5ab3a903929193a52d7ce83e7acc8d57d Mon Sep 17 00:00:00 2001 From: salvdord Date: Fri, 4 Aug 2017 10:29:49 -0400 Subject: [PATCH 28/50] Added to CHANGES.md: Improved NeuroML and error checking for simConfig --- CHANGES.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index be5ecdb31..aba214dfc 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,9 @@ # Version 0.7.2 +- Improved NeuroML importing/exporting + +- Added error checking for simConfig + - Added popColors option to plotSpikeHist and plotRatePSD - Added support to load params, cfg, net and simData from .mat files From 9f01fb05f97b68a57a6412c2ae988f43081f9da6 Mon Sep 17 00:00:00 2001 From: salvdord Date: Fri, 4 Aug 2017 10:34:17 -0400 Subject: [PATCH 29/50] added pip install scipy to travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 65739cf6a..c2b07563a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,6 +20,7 @@ virtualenv: system_site_packages: true install: + - pip install scipy # Install OMV to facilitate installation of packages below - pip install git+https://github.com/OpenSourceBrain/osb-model-validation # Need to pre install NEURON so nrnivmodl can be run targeting mod files in a different directory From 229eb56c95993ef2a9b0534e4b67bf161b7871c0 Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Sun, 6 Aug 2017 22:39:45 -0400 Subject: [PATCH 30/50] working version --- netpyne/tests/tests.py | 825 ++++++++++++++++++-------------- netpyne/tests/validate_tests.py | 102 +++- 2 files changed, 562 insertions(+), 365 deletions(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index 323c317c1..3daa6e7d2 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -12,7 +12,7 @@ import os import traceback import numpy - +from neuron import h from netpyne import utils VALID_SHAPES = ['cuboid', 'ellipsoid', ' cylinder'] @@ -56,11 +56,12 @@ TEST_TYPE_IS_INT = "Is Integer" # must be integer TEST_TYPE_IS_CHARACTER = "Is Character" # must be char [a-z][A-Z] TEST_TYPE_VALUE_LIST = "Value List" # must be in valid values list +TEST_TYPE_ALL_VALUE_LIST = " All value list" # every key in list must belong to list TEST_TYPE_EXISTS_IN_DICT = "Exists in Dict" # input param must exist in dict TEST_TYPE_EXISTS_IN_NESTED_DICT = "Exists in nested dict" # input param must exist in nested dict TEST_TYPE_SPECIAL = "Special" # special method, method name provided TEST_TYPE_EXISTS_IN_ALL_DICTS = "Exists in all dicts" - +TEST_TYPE_DICT_KEY_VALID_VALUE = "Dict key is valid value" TEST_TYPE_VALID_GEOMETRIES = "Valid geometries" TEST_TYPE_VALID_TOPOLOGIES = "Valid topologies" TEST_TYPE_VALID_MECHS = "Valid mechs" @@ -235,30 +236,34 @@ def testLtZero(self,val): # TEST_TYPE_LTE def testIsDict(self,val): # TEST_TYPE_IS_DICT try: - assert (isinstance (val,dict)) + # print (" **** val in dict = " + str(val)) + if val and val != '': + assert (isinstance (val,dict)), "Value specified is " + val + "." except AssertionError as e: - e.args += (val,) + # print ( " ***** " + str(e)) + #e.args += (,) raise def testIsList(self,val): # TEST_TYPE_IS_LIST try: - assert (isinstance (val,list)) + if val and val != '': + assert (isinstance (val,list)), "Value specified is " + str(val) + "." except AssertionError as e: - e.args += (val,) + #e.args += (,) raise def testIsBoolean(self,val): # TEST_TYPE_IS_BOOLEAN try: - assert (isinstance (val,bool)) + assert (isinstance (val,bool)), "Value specified is " + str(val) + "." except AssertionError as e: - e.args += (val,) + #e.args += (,) raise def testIsNumeric(self,val): # TEST_TYPE_IS_NUMERIC try: assert (isinstance (val,numbers.Number)) except AssertionError as e: - e.args += (val,) + #e.args += (val,) raise def testIsFloat(self,val): # TEST_TYPE_IS_FLOAT @@ -267,14 +272,14 @@ def testIsFloat(self,val): # TEST_TYPE_IS_FLOAT assert (isinstance (val,numbers.Real)) except AssertionError as e: #print ( " !!!!! in float error ") - e.args += (val,) + #e.args += (val,) raise def testIsInt(self,val): # TEST_TYPE_IS_INT try: assert (isinstance (val,int)) except AssertionError as e: - e.args += (val,) + #e.args += (val,) raise def testIsCharacter(self,val): # TEST_TYPE_IS_CHARACTER @@ -282,14 +287,42 @@ def testIsCharacter(self,val): # TEST_TYPE_IS_CHARACTER isascii = lambda s: len(s) == len(s.encode()) assert (isascii (val)) except AssertionError as e: - e.args += (val,) + #e.args += (,) raise def testIsValueList(self,val, valList): # TEST_TYPE_VALUE_LIST try: - assert (val in valList), val + " must be in list " + (",").join() + # print ( " in val list test" + str(val) + " :: " + str(valList)) + assert (val in valList), str(val) + " must be in list " + str(valList) except AssertionError as e: - e.args += (val,) + print (e) + #e.args += (,) + raise + + def testIsAllValueList(self,val, valList): # TEST_TYPE_ALL_VALUE_LIST + try: + #print ( " 1") + # print ( " in val list test" + str(val) + " :: " + str(valList)) + if isinstance(val, list) and isinstance(valList, list): + assert (all([x in valList for x in val])), str(val) + " must be in list " + str(valList) + except AssertionError as e: + #print (" 1" + str(e)) + #e.args += (,) + raise + + def testDictKeyValidValue(self,paramDict, valList): # TEST_TYPE_VALUE_LIST + try: + #print ( "2") + #print ( " in val list test" + str(paramDict) + " :: " + str(valList)) + if isinstance(paramDict, dict) and isinstance(valList, list): + if isinstance(valList, str): + valList = eval(valList) + assert (all([x in valList for x in paramDict.keys()])), str(paramDict) + " must have keys in list " + str(valList) + ". Keys provided are " + str(paramDict.keys()) + "." + #assert (all([x in valList for x in paramDict.keys()])), str(paramDict) + " must have keys in list " + str("") + ". Keys provided are " + str(paramDict.keys()) + "." + + except AssertionError as e: + #print (" **** " + str(e)) + #e.args += (,) raise def testValidStim(self,paramValues): # TEST_TYPE_VALID_STIM @@ -1055,295 +1088,307 @@ def testValidStimTarget(self,paramValues, netParams): # TEST_TYPE_STIM_TARGET_TE def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS errorMessages = [] - +# print ( " *** in analysis test" ) try: - if simConfig.analysis: + if simConfig and simConfig.analysis: analysis = simConfig.analysis if not isinstance ( simConfig.analysis, dict): errorMessages.append("SimConfig->'analysis': Must be a dict. Value provided is " + str(simConfig.analysis) + ".") return errorMessages - - if any (analysis.keys() not in ['plotRaster','plotSpikeHist', 'plotSpikePSD', 'plotTraces', 'plotShape', 'plotConn', 'plot2DNet', 'nTE', 'granger']): - errorMessages.append("SimConfig->'analysis': Valid analysis functions are 'plotRaster','plotSpikeHist', 'plotSpikePSD', 'plotTraces', 'plotShape', 'plotConn', 'plot2DNet', 'nTE', 'granger'.") + #print (" before ") + validList = ['plotRaster','plotSpikeHist', 'plotSpikePSD', 'plotTraces', 'plotShape', 'plotConn', 'plot2Dnet', 'nTE', 'granger'] + # print ( [x in validList for x in analysis.keys()] ) + if not all ([x in validList for x in analysis.keys()]): + errorMessages.append("SimConfig->'analysis': Valid analysis functions are 'plotRaster','plotSpikeHist', 'plotSpikePSD', 'plotTraces', 'plotShape', 'plotConn', 'plot2DNet', 'nTE', 'granger'. Keys specified are " + str(analysis.keys()) + ".") + #print (" after ") if 'plotRaster' in analysis: + #print ( " in plot raster ") plotRaster = analysis['plotRaster'] if not isinstance ( plotRaster, dict): errorMessages.append("SimConfig->'analysis'->'plotRaster': Must be a dict. Value provided is " + str(plotRaster) + ".") - if 'include' in plotRaster and not isinstance( plotRaster['include'], dict): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'include': Must be a list. Value provided is " + str(plotRaster['include']) + ".") + else: - # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + #print ( " in plot raster 2 " + str(plotRaster.keys())) + validList = ['include', 'timeRange', 'maxSpikes', 'orderBy', 'orderInverse', 'labels', 'popRates', 'spikeHist', 'spikeHistBin', 'syncLines', 'figSize', 'saveData', 'saveFig', 'showFig'] - if 'maxSpikes' in plotRaster and not isinstance( plotRaster['maxSpikes'], int): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'maxSpikes': Must be an integer. Value provided is " + str(plotRaster['maxSpikes']) + ".") + if not all(x in validList for x in plotRaster.keys()): + errorMessages.append("SimConfig->'analysis'->'plotRaster': plotRaster must be a dict with keys in list " + str(validList) + ". Keys supplied are " + str(plotRaster.keys()) + ".") - if 'orderBy' in plotRaster: + if 'include' in plotRaster and not isinstance( plotRaster['include'], dict): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'include': Must be a list. Value provided is " + str(plotRaster['include']) + ".") - if not isinstance( plotRaster['orderBy'], list): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderBy': Must be a list. Value provided is " + str(plotRaster['orderBy']) + ".") - else: - if any ( [x not in ['gid', 'ynorm', 'y'] for x in plotRaster['orderBy'] ] ): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderBy': Valid values are " + str(['gid', 'ynorm', 'y'])+ ". Value provided is " + str(plotRaster['orderBy']) + ".") + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") - if 'orderInverse' in plotRaster: + if 'maxSpikes' in plotRaster and not isinstance( plotRaster['maxSpikes'], int): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'maxSpikes': Must be an integer. Value provided is " + str(plotRaster['maxSpikes']) + ".") - if not isinstance( plotRaster['orderInverse'], bool): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderInverse': Must be boolean. Value provided is " + str(plotRaster['orderInverse']) + ".") + if 'orderBy' in plotRaster: - if 'labels' in plotRaster: + if not isinstance( plotRaster['orderBy'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderBy': Must be a list. Value provided is " + str(plotRaster['orderBy']) + ".") + else: + if any ( [x not in ['gid', 'ynorm', 'y'] for x in plotRaster['orderBy'] ] ): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderBy': Valid values are " + str(['gid', 'ynorm', 'y'])+ ". Value provided is " + str(plotRaster['orderBy']) + ".") - if not isinstance( plotRaster['labels'], list): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'labels': Must be a list. Value provided is " + str(plotRaster['labels']) + ".") - else: - if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['labels'] ] ): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'labels': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") + if 'orderInverse' in plotRaster: - if 'popRates' in plotRaster: + if not isinstance( plotRaster['orderInverse'], bool): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderInverse': Must be boolean. Value provided is " + str(plotRaster['orderInverse']) + ".") - if not isinstance( plotRaster['popRates'], list): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Must be a list. Value provided is " + str(plotRaster['popRates']) + ".") - else: - if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['popRates'] ] ): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") + if 'labels' in plotRaster: - if 'popRates' in plotRaster: + if not isinstance( plotRaster['labels'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'labels': Must be a list. Value provided is " + str(plotRaster['labels']) + ".") + else: + if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['labels'] ] ): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'labels': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") - if not isinstance( plotRaster['popRates'], list): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Must be a list. Value provided is " + str(plotRaster['popRates']) + ".") - else: - if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['popRates'] ] ): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") + if 'popRates' in plotRaster: - if 'spikeHist' in plotRaster: + if not isinstance( plotRaster['popRates'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Must be a list. Value provided is " + str(plotRaster['popRates']) + ".") + else: + if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['popRates'] ] ): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") - if not isinstance( plotRaster['spikeHist'], list): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'spikeHist': Must be a list. Value provided is " + str(plotRaster['spikeHist']) + ".") - else: - if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['spikeHist'] ] ): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'spikeHist': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") + if 'popRates' in plotRaster: - if 'plotSpikeHist' in analysis: + if not isinstance( plotRaster['popRates'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Must be a list. Value provided is " + str(plotRaster['popRates']) + ".") + else: + if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['popRates'] ] ): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'popRates': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") - plotSpikeHist = analysis['plotSpikeHist'] + if 'spikeHist' in plotRaster: - if not isinstance ( plotSpikeHist, dict): - errorMessages.append("SimConfig->'analysis'->'plotSpikeHist': Must be a dict. Value provided is " + str(plotSpikeHist) + ".") + if not isinstance( plotRaster['spikeHist'], list): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'spikeHist': Must be a list. Value provided is " + str(plotRaster['spikeHist']) + ".") + else: + if any ( [x not in ['legend', 'overlay', 'y'] for x in plotRaster['spikeHist'] ] ): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'spikeHist': Valid values are " + str(['legend', 'overlay'])+ ". Value provided is " + str(plotRaster['labels']) + ".") - if 'include' in plotSpikeHist and not isinstance( plotSpikeHist['include'], list): - errorMessages.append("SimConfig->'analysis'->'plotSpikeHist'->'include': Must be a list. Value provided is " + str(plotSpikeHist['include']) + ".") + if 'plotSpikeHist' in analysis: - # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + plotSpikeHist = analysis['plotSpikeHist'] - if 'orderInverse' in plotRaster: + if not isinstance ( plotSpikeHist, dict): + errorMessages.append("SimConfig->'analysis'->'plotSpikeHist': Must be a dict. Value provided is " + str(plotSpikeHist) + ".") - if not isinstance( plotRaster['orderInverse'], bool): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderInverse': Must be boolean. Value provided is " + str(plotRaster['orderInverse']) + ".") + if 'include' in plotSpikeHist and not isinstance( plotSpikeHist['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotSpikeHist'->'include': Must be a list. Value provided is " + str(plotSpikeHist['include']) + ".") - if 'overlay' in plotRaster: + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") - if not isinstance( plotRaster['overlay'], bool): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'overlay': Must be boolean. Value provided is " + str(plotRaster['overlay']) + ".") + if 'orderInverse' in plotRaster: - if 'graphType' in plotRaster and plotRaster['graphType'] not in ['line','bar']: - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'graphType': GraphType must be in " + str(['line','bar']) + ". Value provided is " + str(plotRaster['graphType']) + ".") + if not isinstance( plotRaster['orderInverse'], bool): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'orderInverse': Must be boolean. Value provided is " + str(plotRaster['orderInverse']) + ".") - if 'yaxis' in plotRaster and plotRaster['yaxis'] not in ['rate','count']: - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'yaxis': yaxis must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['yaxis']) + ".") + if 'overlay' in plotRaster: - if 'figSize' in plotRaster and not isinstance (plotRaster['figSize'], tuple): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotRaster['figSize']) + ".") + if not isinstance( plotRaster['overlay'], bool): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'overlay': Must be boolean. Value provided is " + str(plotRaster['overlay']) + ".") - if 'binSize' in plotRaster and not isinstance( plotRaster['binSize'], int): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'binSize': Must be an integer. Value provided is " + str(plotRaster['binSize']) + ".") + if 'graphType' in plotRaster and plotRaster['graphType'] not in ['line','bar']: + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'graphType': GraphType must be in " + str(['line','bar']) + ". Value provided is " + str(plotRaster['graphType']) + ".") - if 'showFig' in plotRaster: + if 'yaxis' in plotRaster and plotRaster['yaxis'] not in ['rate','count']: + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'yaxis': yaxis must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['yaxis']) + ".") - if not isinstance( plotRaster['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plotRaster'->'showFig': Must be boolean. Value provided is " + str(plotRaster['showFig']) + ".") + if 'figSize' in plotRaster and not isinstance (plotRaster['figSize'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotRaster['figSize']) + ".") - if 'plotSpikePSD' in analysis: + if 'binSize' in plotRaster and not isinstance( plotRaster['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'binSize': Must be an integer. Value provided is " + str(plotRaster['binSize']) + ".") - plotSpikePSD = analysis['plotSpikePSD'] - if not isinstance ( plotSpikePSD, dict): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD': Must be a dict. Value provided is " + str(plotSpikePSD) + ".") + if 'showFig' in plotRaster: - if 'include' in plotSpikePSD and not isinstance( plotSpikePSD['include'], list): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'include': Must be a list. Value provided is " + str(plotSpikePSD['include']) + ".") + if not isinstance( plotRaster['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotRaster'->'showFig': Must be boolean. Value provided is " + str(plotRaster['showFig']) + ".") - # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + if 'plotSpikePSD' in analysis: - if 'overlay' in plotSpikePSD: + plotSpikePSD = analysis['plotSpikePSD'] + if not isinstance ( plotSpikePSD, dict): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD': Must be a dict. Value provided is " + str(plotSpikePSD) + ".") - if not isinstance( plotSpikePSD['overlay'], bool): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'overlay': Must be boolean. Value provided is " + str(plotSpikePSD['overlay']) + ".") + if 'include' in plotSpikePSD and not isinstance( plotSpikePSD['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'include': Must be a list. Value provided is " + str(plotSpikePSD['include']) + ".") - if 'Fs' in plotSpikePSD and not isinstance ( plotSpikePSD['Fs'] , numbers.Real ): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'Fs': Fs must be float. Value provided is " + str(plotSpikePSD['Fs']) + ".") + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") - if 'figSize' in plotSpikePSD and not isinstance (plotSpikePSD['figSize'], tuple): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotSpikePSD['figSize']) + ".") + if 'overlay' in plotSpikePSD: - if 'binSize' in plotSpikePSD and not isinstance( plotSpikePSD['binSize'], int): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'binSize': Must be an integer. Value provided is " + str(plotSpikePSD['binSize']) + ".") + if not isinstance( plotSpikePSD['overlay'], bool): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'overlay': Must be boolean. Value provided is " + str(plotSpikePSD['overlay']) + ".") - if 'showFig' in plotSpikePSD: + if 'Fs' in plotSpikePSD and not isinstance ( plotSpikePSD['Fs'] , numbers.Real ): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'Fs': Fs must be float. Value provided is " + str(plotSpikePSD['Fs']) + ".") - if not isinstance( plotSpikePSD['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'showFig': Must be boolean. Value provided is " + str(plotSpikePSD['showFig']) + ".") + if 'figSize' in plotSpikePSD and not isinstance (plotSpikePSD['figSize'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotSpikePSD['figSize']) + ".") - if 'plotTraces' in analysis: + if 'binSize' in plotSpikePSD and not isinstance( plotSpikePSD['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'binSize': Must be an integer. Value provided is " + str(plotSpikePSD['binSize']) + ".") - plotTraces = analysis['plotTraces'] - if not isinstance ( plotTraces, dict): - errorMessages.append("SimConfig->'analysis'->'plotTraces': Must be a dict. Value provided is " + str(plotTraces) + ".") + if 'showFig' in plotSpikePSD: - if 'include' in plotTraces and not isinstance( plotTraces['include'], list): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'include': Must be a list. Value provided is " + str(plotTraces['include']) + ".") + if not isinstance( plotSpikePSD['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'showFig': Must be boolean. Value provided is " + str(plotSpikePSD['showFig']) + ".") - # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + if 'plotTraces' in analysis: - if 'overlay' in plotTraces and not isinstance( plotTraces['overlay'], bool): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'overlay': Must be boolean. Value provided is " + str(plotTraces['overlay']) + ".") + plotTraces = analysis['plotTraces'] + if not isinstance ( plotTraces, dict): + errorMessages.append("SimConfig->'analysis'->'plotTraces': Must be a dict. Value provided is " + str(plotTraces) + ".") - if 'binSize' in plotTraces and not isinstance( plotTraces['binSize'], int): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'binSize': Must be an integer. Value provided is " + str(plotTraces['binSize']) + ".") + if 'include' in plotTraces and not isinstance( plotTraces['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'include': Must be a list. Value provided is " + str(plotTraces['include']) + ".") - if 'oneFigPer' in plotRaster and plotRaster['oneFigPer'] not in ['cell','trace']: - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'oneFigPer': oneFigPer must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['oneFigPer']) + ".") + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + + if 'overlay' in plotTraces and not isinstance( plotTraces['overlay'], bool): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'overlay': Must be boolean. Value provided is " + str(plotTraces['overlay']) + ".") + + if 'binSize' in plotTraces and not isinstance( plotTraces['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'binSize': Must be an integer. Value provided is " + str(plotTraces['binSize']) + ".") - if 'rerun' in plotTraces and not isinstance( plotTraces['rerun'], bool): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'rerun': Must be boolean. Value provided is " + str(plotTraces['rerun']) + ".") + if 'oneFigPer' in plotRaster and plotRaster['oneFigPer'] not in ['cell','trace']: + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'oneFigPer': oneFigPer must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['oneFigPer']) + ".") - if 'figSize' in plotTraces and not isinstance (plotTraces['figSize'], tuple): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotTraces['figSize']) + ".") + if 'rerun' in plotTraces and not isinstance( plotTraces['rerun'], bool): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'rerun': Must be boolean. Value provided is " + str(plotTraces['rerun']) + ".") - if 'saveFig' in plotTraces and not isinstance (plotTraces['saveFig'], tuple): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'saveFig': saveFig must be tuple if specified. Value provided is " + str(plotTraces['saveFig']) + ".") + if 'figSize' in plotTraces and not isinstance (plotTraces['figSize'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotTraces['figSize']) + ".") - if 'plotShape' in analysis: + if 'saveFig' in plotTraces and not isinstance (plotTraces['saveFig'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'saveFig': saveFig must be tuple if specified. Value provided is " + str(plotTraces['saveFig']) + ".") - plotShapes = analysis['plotShapes'] - if not isinstance ( plotShapes, dict): - errorMessages.append("SimConfig->'analysis'->'plotShapes': Must be a dict. Value provided is " + str(plotShapes) + ".") + if 'plotShape' in analysis: - if 'showSyns' in plotShapes and not isinstance( plotShapes['showSyns'], bool): - errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showSyns': Must be boolean. Value provided is " + str(plotShapes['showSyns']) + ".") + plotShapes = analysis['plotShapes'] + if not isinstance ( plotShapes, dict): + errorMessages.append("SimConfig->'analysis'->'plotShapes': Must be a dict. Value provided is " + str(plotShapes) + ".") - if 'showFig' in plotShapes and not isinstance( plotShapes['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showFig': Must be boolean. Value provided is " + str(plotShapes['showFig']) + ".") + if 'showSyns' in plotShapes and not isinstance( plotShapes['showSyns'], bool): + errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showSyns': Must be boolean. Value provided is " + str(plotShapes['showSyns']) + ".") - if 'plotConn' in analysis: + if 'showFig' in plotShapes and not isinstance( plotShapes['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showFig': Must be boolean. Value provided is " + str(plotShapes['showFig']) + ".") - plotConn = analysis['plotConn'] + if 'plotConn' in analysis: - if not isinstance ( plotConn, dict): - errorMessages.append("SimConfig->'analysis'->'plotConn': Must be a dict. Value provided is " + str(plotConn) + ".") + plotConn = analysis['plotConn'] - if 'include' in plotConn and not isinstance( plotConn['include'], list): - errorMessages.append("SimConfig->'analysis'->'plotConn'->'include': Must be a list. Value provided is " + str(plotConn['include']) + ".") + if not isinstance ( plotConn, dict): + errorMessages.append("SimConfig->'analysis'->'plotConn': Must be a dict. Value provided is " + str(plotConn) + ".") - if 'feature' in plotConn: - if plotConn['spikeHist'] not in ['weight', 'delay', 'numConns']: - errorMessages.append("SimConfig->'analysis'->'plotConn'->'feature': Valid values are " + str(['weight', 'delay', 'numConns'])+ ". Value provided is " + str(plotConn['feature']) + ".") + if 'include' in plotConn and not isinstance( plotConn['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotConn'->'include': Must be a list. Value provided is " + str(plotConn['include']) + ".") - if 'groupBy' in plotConn: - if plotConn['spikeHist'] not in ['pop', 'cell']: - errorMessages.append("SimConfig->'analysis'->'plotConn'->'groupBy': Valid values are " + str(['pop', 'cell'])+ ". Value provided is " + str(plotConn['groupBy']) + ".") + if 'feature' in plotConn: + if plotConn['spikeHist'] not in ['weight', 'delay', 'numConns']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'feature': Valid values are " + str(['weight', 'delay', 'numConns'])+ ". Value provided is " + str(plotConn['feature']) + ".") - if 'orderBy' in plotConn: - if plotConn['spikeHist'] not in ['gid', 'ynorm', 'y']: - errorMessages.append("SimConfig->'analysis'->'plotConn'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plotConn['orderBy']) + ".") + if 'groupBy' in plotConn: + if plotConn['spikeHist'] not in ['pop', 'cell']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'groupBy': Valid values are " + str(['pop', 'cell'])+ ". Value provided is " + str(plotConn['groupBy']) + ".") - if 'showFig' in plotConn and not isinstance( plotConn['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plotConn'->'showFig': Must be boolean. Value provided is " + str(plotConn['showFig']) + ".") + if 'orderBy' in plotConn: + if plotConn['spikeHist'] not in ['gid', 'ynorm', 'y']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plotConn['orderBy']) + ".") - if 'plot2DNet' in analysis: + if 'showFig' in plotConn and not isinstance( plotConn['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotConn'->'showFig': Must be boolean. Value provided is " + str(plotConn['showFig']) + ".") - plot2DNet = analysis['plot2DNet'] + if 'plot2DNet' in analysis: - if not isinstance ( plot2DNet, dict): - errorMessages.append("SimConfig->'analysis'->'plot2DNet': Must be a dict. Value provided is " + str(plot2DNet) + ".") + plot2DNet = analysis['plot2DNet'] - if 'include' in plot2DNet and not isinstance( plot2DNet['include'], list): - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'include': Must be a list. Value provided is " + str(plot2DNet['include']) + ".") + if not isinstance ( plot2DNet, dict): + errorMessages.append("SimConfig->'analysis'->'plot2DNet': Must be a dict. Value provided is " + str(plot2DNet) + ".") - if 'orderBy' in plot2DNet: - if plot2DNet['spikeHist'] not in ['gid', 'ynorm', 'y']: - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plot2DNet['orderBy']) + ".") + if 'include' in plot2DNet and not isinstance( plot2DNet['include'], list): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'include': Must be a list. Value provided is " + str(plot2DNet['include']) + ".") - if 'view' in plot2DNet: - if plot2DNet['spikeHist'] not in ['xy', 'xz']: - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'view': Valid values are " + str(['xy', 'xz'])+ ". Value provided is " + str(plot2DNet['view']) + ".") + if 'orderBy' in plot2DNet: + if plot2DNet['spikeHist'] not in ['gid', 'ynorm', 'y']: + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plot2DNet['orderBy']) + ".") - if 'showConns' in plot2DNet and not isinstance( plot2DNet['showConns'], bool): - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showConns': Must be boolean. Value provided is " + str(plot2DNet['showConns']) + ".") + if 'view' in plot2DNet: + if plot2DNet['spikeHist'] not in ['xy', 'xz']: + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'view': Valid values are " + str(['xy', 'xz'])+ ". Value provided is " + str(plot2DNet['view']) + ".") - if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") + if 'showConns' in plot2DNet and not isinstance( plot2DNet['showConns'], bool): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showConns': Must be boolean. Value provided is " + str(plot2DNet['showConns']) + ".") - if 'nTE' in analysis: + if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") - nTE = analysis['nTE'] + if 'nTE' in analysis: - if not isinstance ( nTE, dict): - errorMessages.append("SimConfig->'analysis'->'nTE': Must be a dict. Value provided is " + str(nTE) + ".") + nTE = analysis['nTE'] - if 'cells1' in nTE and not isinstance( nTE['cells1'], list): - errorMessages.append("SimConfig->'analysis'->'nTE'->'cells1': Must be a list. Value provided is " + str(nTE['cells1']) + ".") + if not isinstance ( nTE, dict): + errorMessages.append("SimConfig->'analysis'->'nTE': Must be a dict. Value provided is " + str(nTE) + ".") - if 'cells2' in nTE and not isinstance( nTE['cells2'], list): - errorMessages.append("SimConfig->'analysis'->'nTE'->'cells2': Must be a list. Value provided is " + str(nTE['cells2']) + ".") + if 'cells1' in nTE and not isinstance( nTE['cells1'], list): + errorMessages.append("SimConfig->'analysis'->'nTE'->'cells1': Must be a list. Value provided is " + str(nTE['cells1']) + ".") - if 'spks1' in nTE and not isinstance( nTE['spks1'], list): - errorMessages.append("SimConfig->'analysis'->'nTE'->'spks1': Must be a list. Value provided is " + str(nTE['spks1']) + ".") + if 'cells2' in nTE and not isinstance( nTE['cells2'], list): + errorMessages.append("SimConfig->'analysis'->'nTE'->'cells2': Must be a list. Value provided is " + str(nTE['cells2']) + ".") - if 'spks2' in nTE and not isinstance( nTE['spks2'], list): - errorMessages.append("SimConfig->'analysis'->'nTE'->'spks2': Must be a list. Value provided is " + str(nTE['spks2']) + ".") + if 'spks1' in nTE and not isinstance( nTE['spks1'], list): + errorMessages.append("SimConfig->'analysis'->'nTE'->'spks1': Must be a list. Value provided is " + str(nTE['spks1']) + ".") - if 'binSize' in nTE and not isinstance( nTE['binSize'], int): - errorMessages.append("SimConfig->'analysis'->'nTE'->'binSize': Must be an int. Value provided is " + str(nTE['binSize']) + ".") + if 'spks2' in nTE and not isinstance( nTE['spks2'], list): + errorMessages.append("SimConfig->'analysis'->'nTE'->'spks2': Must be a list. Value provided is " + str(nTE['spks2']) + ".") - if 'numShuffle' in nTE and not isinstance( nTE['numShuffle'], int): - errorMessages.append("SimConfig->'analysis'->'nTE'->'numShuffle': Must be an int. Value provided is " + str(nTE['numShuffle']) + ".") + if 'binSize' in nTE and not isinstance( nTE['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'nTE'->'binSize': Must be an int. Value provided is " + str(nTE['binSize']) + ".") - if 'granger' in analysis: + if 'numShuffle' in nTE and not isinstance( nTE['numShuffle'], int): + errorMessages.append("SimConfig->'analysis'->'nTE'->'numShuffle': Must be an int. Value provided is " + str(nTE['numShuffle']) + ".") - granger = analysis['granger'] + if 'granger' in analysis: - if not isinstance ( granger, dict): - errorMessages.append("SimConfig->'analysis'->'granger': Must be a dict. Value provided is " + str(granger) + ".") + granger = analysis['granger'] - if 'cells1' in granger and not isinstance( granger['cells1'], list): - errorMessages.append("SimConfig->'analysis'->'granger'->'cells1': Must be a list. Value provided is " + str(granger['cells1']) + ".") + if not isinstance ( granger, dict): + errorMessages.append("SimConfig->'analysis'->'granger': Must be a dict. Value provided is " + str(granger) + ".") - if 'cells2' in granger and not isinstance( granger['cells2'], list): - errorMessages.append("SimConfig->'analysis'->'granger'->'cells2': Must be a list. Value provided is " + str(granger['cells2']) + ".") + if 'cells1' in granger and not isinstance( granger['cells1'], list): + errorMessages.append("SimConfig->'analysis'->'granger'->'cells1': Must be a list. Value provided is " + str(granger['cells1']) + ".") - if 'spks1' in granger and not isinstance( granger['spks1'], list): - errorMessages.append("SimConfig->'analysis'->'granger'->'spks1': Must be a list. Value provided is " + str(granger['spks1']) + ".") + if 'cells2' in granger and not isinstance( granger['cells2'], list): + errorMessages.append("SimConfig->'analysis'->'granger'->'cells2': Must be a list. Value provided is " + str(granger['cells2']) + ".") - if 'spks2' in granger and not isinstance( granger['spks2'], list): - errorMessages.append("SimConfig->'analysis'->'granger'->'spks2': Must be a list. Value provided is " + str(granger['spks2']) + ".") + if 'spks1' in granger and not isinstance( granger['spks1'], list): + errorMessages.append("SimConfig->'analysis'->'granger'->'spks1': Must be a list. Value provided is " + str(granger['spks1']) + ".") - if 'binSize' in granger and not isinstance( granger['binSize'], int): - errorMessages.append("SimConfig->'analysis'->'granger'->'binSize': Must be an int. Value provided is " + str(granger['binSize']) + ".") + if 'spks2' in granger and not isinstance( granger['spks2'], list): + errorMessages.append("SimConfig->'analysis'->'granger'->'spks2': Must be a list. Value provided is " + str(granger['spks2']) + ".") - if 'plotFig' in plot2DNet and not isinstance( plot2DNet['plotFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'plotFig': Must be boolean. Value provided is " + str(plot2DNet['plotFig']) + ".") + if 'binSize' in granger and not isinstance( granger['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'granger'->'binSize': Must be an int. Value provided is " + str(granger['binSize']) + ".") - if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") + if 'plotFig' in plot2DNet and not isinstance( plot2DNet['plotFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'plotFig': Must be boolean. Value provided is " + str(plot2DNet['plotFig']) + ".") + + if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") except Exception as e: traceback.print_exc(file=sys.stdout) @@ -1467,15 +1512,16 @@ def loadSimConfigTests(self): self.testParamsMap["simConfig"]["dtTest"] = testObj - ## hParams test + # hParams test testObj = TestObj() testObj.testName = "hParamsTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" - testObj.testTypes = [TEST_TYPE_IS_DICT, TEST_TYPE_VALID_HPARAMS ] - testObj.messageText = ["simConfig->'hParams':hParams is not a dict." ] - testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + testObj.testParameterValue = "self.simConfig.hParams" + testObj.testTypes = [TEST_TYPE_IS_DICT, TEST_TYPE_DICT_KEY_VALID_VALUE ] + testObj.testValueList = "h.__dict__.keys()" + testObj.messageText = ["simConfig->'hParams':hParams is not a dict.", "simConfig->'hParams':is not a valid value. Valid key values are in h.__dict__.keys()." ] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["hParamsTest"] = testObj @@ -1485,7 +1531,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "cacheEfficientTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.cache_efficient" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["simConfig->'cacheEfficient':cacheEfficient is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1498,23 +1544,23 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "cvodeActiveTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.cvode_active" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["simConfig->'cvodeActive':cvodeActive is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["cvodeActiveTest"] = testObj - + # ## seeds test testObj = TestObj() testObj.testName = "seedsTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" - testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_VALUE_LIST ] + testObj.testParameterValue = "self.simConfig.seeds" + testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_DICT_KEY_VALID_VALUE ] testObj.testValueList = ['conn', 'stim', 'loc'] - testObj.messageText = ["simConfig->'seedsActive':seeds is not a boolean.","SimConfig->'recordTracesTest':is not a valid value. Valid values are 'conn', 'stim', 'loc'."] - testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + testObj.messageText = ["simConfig->'seeds':seeds is not a dict.","SimConfig->'seeds':is not a valid value. Valid values are 'conn', 'stim', 'loc'."] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["seedsTest"] = testObj @@ -1523,7 +1569,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "createNEURONObjTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.createNEURONObj" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["simConfig->'createNEURONObj':createNEURONObj is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1533,9 +1579,9 @@ def loadSimConfigTests(self): ## createPyStruct test testObj = TestObj() - testObj.testName = "createPyStruct" + testObj.testName = "createPyStructTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.createPyStruct" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["simConfig->'createPyStruct':createPyStruct is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1545,22 +1591,9 @@ def loadSimConfigTests(self): ## gatherOnlySimData test testObj = TestObj() - testObj.testName = "gatherOnlySimData" + testObj.testName = "gatherOnlySimDataTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" - testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["simConfig->'gatherOnlySimData':gatherOnlySimData is not a boolean."] - testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] - - self.testParamsMap["simConfig"]["cgatherOnlySimDataTest"] = testObj - - ## gatherOnlySimData test - ## gatherOnlySimData - Omits gathering of net and cell data thus reducing gatherData time (default: False) - - testObj = TestObj() - testObj.testName = "gatherOnlySimData" - testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.gatherOnlySimData" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["simConfig->'gatherOnlySimData':gatherOnlySimData is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1573,7 +1606,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "printRunTimeTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.printRunTime" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["simConfig->'printRunTime':printRunTime is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1664,15 +1697,15 @@ def loadSimConfigTests(self): testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["recordTracesTest"] = testObj - + # testObj = TestObj() testObj.testName = "saveDataInclude" testObj.testParameterType = "string" - testObj.testParameterValue = "self.simConfig.saveData" - testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_VALUE_LIST ] + testObj.testParameterValue = "self.simConfig.saveDataInclude" + testObj.testTypes = [TEST_TYPE_IS_LIST, TEST_TYPE_ALL_VALUE_LIST] testObj.testValueList = ['netParams', 'netCells', 'netPops', 'simConfig', 'simData'] - testObj.messageText = ["simConfig->'saveDataInclude':recordTraces is not a dict.","SimConfig->'saveDataInclude':is not a valid value. Valid values are 'netParams', 'netCells', 'netPops', 'simConfig', 'simData'." ] - testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + testObj.messageText = ["simConfig->'saveDataInclude':saveDataInclude is not a dict.","SimConfig->'saveDataInclude':is not a valid value. Valid values are 'netParams', 'netCells', 'netPops', 'simConfig', 'simData'." ] + testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["recordTracesTest"] = testObj ## recordStim test @@ -1697,38 +1730,27 @@ def loadSimConfigTests(self): testObj.messageText = ["SimConfig->'recordStep':recordStep is not a float."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] - self.testParamsMap["simConfig"]["recordStimTest"] = testObj + self.testParamsMap["simConfig"]["recordStepTest"] = testObj ## saveDataInclude test testObj = TestObj() testObj.testName = "saveDataIncludeTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.saveDataInclude" testObj.testTypes = [TEST_TYPE_IS_LIST] testObj.messageText = ["SimConfig->'saveDataInclude':saveDataInclude is not a float."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["saveDataIncludeTest"] = testObj - ## timestampFilename test - - testObj = TestObj() - testObj.testName = "timestampFilenameTest" - testObj.testParameterType = "string" - testObj.testParameterValue = "type" - testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'timestampFilename':timestampFilename is not a boolean."] - testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] - - self.testParamsMap["simConfig"]["timestampFilenameTest"] = testObj ## savePickle test testObj = TestObj() testObj.testName = "savePickleTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.savePickle" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["SimConfig->'savePickle':savePickle is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1740,7 +1762,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "saveJsonTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.saveJson" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["SimConfig->'saveJson':saveJson is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1752,30 +1774,30 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "saveMatTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.saveMat" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["SimConfig->'saveMat':saveMat is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["saveMatTest"] = testObj - ## saveTxt test - testObj = TestObj() - testObj.testName = "saveTxtTest" - testObj.testParameterType = "string" - testObj.testParameterValue = "type" - testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'saveTxt':saveTxt is not a boolean."] - testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] - - self.testParamsMap["simConfig"]["saveTxtTest"] = testObj + # ## saveTxt test + # testObj = TestObj() + # testObj.testName = "saveTxtTest" + # testObj.testParameterType = "string" + # testObj.testParameterValue = "self.simConfig.saveTxt" + # testObj.testTypes = [TEST_TYPE_IS_BOOL] + # testObj.messageText = ["SimConfig->'saveTxt':saveTxt is not a boolean."] + # testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] + # + # self.testParamsMap["simConfig"]["saveTxtTest"] = testObj ## saveDpk test testObj = TestObj() testObj.testName = "saveDpkTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.saveDpk" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["SimConfig->'saveDpk':saveDpk is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1787,7 +1809,7 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "saveHDF5Test" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "self.simConfig.saveHDF5" testObj.testTypes = [TEST_TYPE_IS_BOOL] testObj.messageText = ["SimConfig->'saveHDF5':saveHDF5 is not a boolean."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] @@ -1799,24 +1821,22 @@ def loadSimConfigTests(self): testObj = TestObj() testObj.testName = "backupCfgFileTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" - testObj.testTypes = [TEST_TYPE_IS_BOOL] - testObj.messageText = ["SimConfig->'backupCfgFile':backupCfgFile is not a boolean."] + testObj.testParameterValue = "self.simConfig.backupCfgFile" + testObj.testTypes = [TEST_TYPE_IS_LIST] + testObj.messageText = ["SimConfig->'backupCfgFile':backupCfgFile is not a list."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["backupCfgFileTest"] = testObj - ## backupCfgFile test + ## analysisTest test testObj = TestObj() testObj.testName = "analysisTest" testObj.testParameterType = "string" - testObj.testParameterValue = "type" + testObj.testParameterValue = "analysis" testObj.testTypes = [TEST_TYPE_VALID_ANALYSIS] - #testObj.messageText = ["SimConfig->'backupCfgFile':backupCfgFile is not a boolean."] - #testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] - self.testParamsMap["simConfig"]["backupCfgFileTest"] = testObj + self.testParamsMap["simConfig"]["analysisTest"] = testObj def loadStimSourceTests(self): @@ -2624,13 +2644,18 @@ def execRunTests(self, testObj, params): else: try: - paramName = eval(testObj.testParameterValue) + paramName = '' + try: + paramName = eval(testObj.testParameterValue) + except: + pass + if paramName != '': #print (" in float 2 = " + str(paramName)) - self.testTypeObj.testIsFloat(paramName) - if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) - print ( "PASSED" ) + self.testTypeObj.testIsFloat(paramName) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) + print ( "PASSED" ) except Exception as e: if self.verboseFlag: @@ -2662,12 +2687,16 @@ def execRunTests(self, testObj, params): else: try: - paramName = eval(testObj.testParameterValue) - - self.testTypeObj.testGteZero(paramName) - if self.verboseFlag: - print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) - print ( "PASSED" ) + paramName = '' + try: + paramName = eval(testObj.testParameterValue) + except: + pass + if paramName != '': + self.testTypeObj.testGteZero(paramName) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) + print ( "PASSED" ) except Exception as e: if self.verboseFlag: @@ -2675,9 +2704,10 @@ def execRunTests(self, testObj, params): print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + ". Value specified is " + str(paramName) + " ." elif testType == TEST_TYPE_IS_DICT: + #print (" in dict test type ") if isinstance(params, dict): - + #print (" in dict test type 2 ") for paramLabel, paramValues in params.items(): try: @@ -2691,6 +2721,22 @@ def execRunTests(self, testObj, params): if self.verboseFlag: print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + else: + try: + paramName = '' + try: + paramName = eval(testObj.testParameterValue) + except: + pass + self.testTypeObj.testIsDict(paramName) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) + print ( "PASSED" ) + + except Exception as e: + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + str(e[0]) elif testType == TEST_TYPE_IS_LIST: @@ -2710,6 +2756,26 @@ def execRunTests(self, testObj, params): print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + else: + try: + paramName = '' + try: + paramName = eval(testObj.testParameterValue) + except: + # print ( " 333 " ) + pass + if paramName != '': + # print (" ee ") + self.testTypeObj.testIsList(paramName) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) + print ( "PASSED" ) + + except Exception as e: + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + str(" -- " + e[0]) + elif testType == TEST_TYPE_IS_BOOL: if isinstance(params, dict): @@ -2727,6 +2793,55 @@ def execRunTests(self, testObj, params): if self.verboseFlag: print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + else: + try: + # print (" --- " + str(testObj.testParameterValue)) + paramName = '' + try: + paramName = eval(testObj.testParameterValue) + except: + pass + if paramName != '': + self.testTypeObj.testIsBoolean(paramName) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) + print ( "PASSED" ) + + except Exception as e: + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + str(e[0]) + + # elif testType == TEST_TYPE_IS_BOOL: + # + # if isinstance(params, dict): + # + # for paramLabel, paramValues in params.items(): + # + # try: + # if testObj.testParameterValue in paramValues: + # self.testTypeObj.testIsBoolean(paramValues[testObj.testParameterValue]) + # if self.verboseFlag: + # print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + # print ( "PASSED" ) + # + # except Exception as e: + # if self.verboseFlag: + # print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + # print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + # else: + # try: + # paramName = eval(testObj.testParameterValue) + # + # self.testTypeObj.testIsBoolean(paramName) + # if self.verboseFlag: + # print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) + # print ( "PASSED" ) + # + # except Exception as e: + # if self.verboseFlag: + # print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) + # print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + str(e[0]) elif testType == TEST_TYPE_VALUE_LIST: @@ -2745,6 +2860,52 @@ def execRunTests(self, testObj, params): if self.verboseFlag: print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + else: + try: + paramName = eval(testObj.testParameterValue) + self.testTypeObj.testIsValueList(paramName, testObj.testValueList) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) + print ( "PASSED" ) + + except Exception as e: + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + str(e) + elif testType == TEST_TYPE_ALL_VALUE_LIST: + + if isinstance(params, dict): + + for paramLabel, paramValues in params.items(): + + try: + if testObj.testParameterValue in paramValues: + self.testTypeObj.testIsAllValueList(paramValues[testObj.testParameterValue], testObj.testValueList) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print ( "PASSED" ) + + except Exception as e: + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + else: + try: + paramName = '' + try: + paramName = eval(testObj.testParameterValue) + except: + pass + if paramName != '': + self.testTypeObj.testIsAllValueList(paramName, testObj.testValueList) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramName)) + print ( "PASSED" ) + + except Exception as e: + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValue)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + str(e) elif testType == TEST_TYPE_EXISTS_IN_ALL_DICTS: @@ -2768,6 +2929,25 @@ def execRunTests(self, testObj, params): print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramValues)) print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + elif testType == TEST_TYPE_DICT_KEY_VALID_VALUE: + + try: + paramDict = '' + try: + paramDict = eval(testObj.testParameterValue) + except: + pass + if paramDict != '': + self.testTypeObj.testDictKeyValidValue(paramDict, testObj.testValueList) + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(paramDict)) + print ( "PASSED" ) + + except Exception as e: + if self.verboseFlag: + print ( "Test: " + str(testObj.testParameterValue) + " for: " + str(testType)+ " value: " + str(testObj.testParameterValueList)) + print str(testObj.errorMessageLevel[testIndex]) + ": " + str(testObj.messageText[testIndex]) + str(e) + elif testType == TEST_TYPE_VALID_GEOMETRIES: if isinstance(params, dict): @@ -2802,30 +2982,6 @@ def execRunTests(self, testObj, params): #print ( "paramvalues = " + str(paramValues)) print (str(MESSAGE_TYPE_ERROR) + ": " + str(e)) - # elif testType == TEST_TYPE_VALID_CONN_LIST: - # - # if isinstance(params, dict): - # for paramLabel, paramValues in params.items(): - # try: - # - # errorMessage = self.testTypeObj.testValidConnList(paramValues) - # - # if errorMessage == '': - # if self.verboseFlag: - # print ( "Test: for valid connList in cell") - # print ( "PASSED" ) - # else: - # if self.verboseFlag: - # print ( "Test: for valid connList in cell") - # print ( MESSAGE_TYPE_ERROR + ": " + errorMessage) - # - # except Exception as e: - # #traceback.print_exc(file=sys.stdout) - # if self.verboseFlag: - # print ( "Test: for valid conn list in cell") - # #print ( "paramvalues = " + str(paramValues)) - # print (str(MESSAGE_TYPE_ERROR) + ": Topology is invalid. Must be specified if more than one section specified. For each topology, parentSec and parentX and childX must be defined. ParentSec needs to be a valid section, and both parentX and childX needs to be in range [0,1].") - elif testType == TEST_TYPE_VALID_MECHS: errorMessage = '' @@ -3138,50 +3294,23 @@ def execRunTests(self, testObj, params): elif testType == TEST_TYPE_VALID_ANALYSIS: - if isinstance(params, dict): - for paramLabel, paramValues in params.items(): - try: + try: - stimValid, errorMessages = self.testTypeObj.testValidAnalysis(paramValues) + errorMessages = self.testTypeObj.testValidAnalysis(params) - if len(errorMessages) == 0: - if self.verboseFlag: - print ( "Test: for valid stim target.") - print ( "PASSED" ) - else: - if self.verboseFlag: - print ( "Test: for valid stim target.") - for errorMessage in errorMessages: - print ( MESSAGE_TYPE_ERROR + ": " + errorMessage) - - except Exception as e: - traceback.print_exc(file=sys.stdout) + if len(errorMessages) == 0: if self.verboseFlag: print ( "Test: for valid stim target.") - #print ( "paramvalues = " + str(paramValues)) - print (str(MESSAGE_TYPE_ERROR) + ": " + str(e) + ".") - - elif testType == TEST_TYPE_VALID_HPARAMS: - - if isinstance(params, dict): - for paramLabel, paramValues in params.items(): - try: - - stimValid, errorMessages = self.testTypeObj.testValidHParams(paramValues) - - if len(errorMessages) == 0: - if self.verboseFlag: - print ( "Test: for valid hParams.") - print ( "PASSED" ) - else: - if self.verboseFlag: - print ( "Test: for valid hParams.") - for errorMessage in errorMessages: - print ( MESSAGE_TYPE_ERROR + ": " + errorMessage) - - except Exception as e: - traceback.print_exc(file=sys.stdout) + print ( "PASSED" ) + else: if self.verboseFlag: - print ( "Test: for valid hParams.") - #print ( "paramvalues = " + str(paramValues)) - print (str(MESSAGE_TYPE_ERROR) + ": simConfig->hParams: Invalid value. Valid values are " + str(h.__dict__.keys()) + ". Value supplied is " + str(simConfig.hParams)) + print ( "Test: for valid stim target.") + for errorMessage in errorMessages: + print ( MESSAGE_TYPE_ERROR + ": " + errorMessage) + + except Exception as e: + traceback.print_exc(file=sys.stdout) + if self.verboseFlag: + print ( "Test: for valid stim target.") + #print ( "paramvalues = " + str(paramValues)) + print (str(MESSAGE_TYPE_ERROR) + ": " + str(e) + ".") diff --git a/netpyne/tests/validate_tests.py b/netpyne/tests/validate_tests.py index d403d48d4..86220abb6 100644 --- a/netpyne/tests/validate_tests.py +++ b/netpyne/tests/validate_tests.py @@ -25,7 +25,7 @@ class RunNetPyneTests(): def __init__ (self): self.paramsMap = {} - self.netPyneTestObj = SimTestObj(verboseFlag = True) + self.netPyneTestObj = SimTestObj(verboseFlag = False) self.loadTestsWithParams() self.loadSimConfigTests() self.runTestsWithParams() @@ -50,10 +50,7 @@ def loadSimConfigTests(self): simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - self.paramsMap["simConfig"]["durationTest"].append(simConfigParams) - # invalid duration - self.paramsMap["simConfig"]["invalidDurationTest"] = [] simConfigParams = ParamsObj() simConfigParams.simConfig.duration = "s" # Duration of the simulation, in ms simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use @@ -67,7 +64,7 @@ def loadSimConfigTests(self): simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - self.paramsMap["simConfig"]["invalidDurationTest"].append(simConfigParams) + self.paramsMap["simConfig"]["durationTest"].append(simConfigParams) # duration self.paramsMap["simConfig"]["dtTest"] = [] @@ -86,8 +83,7 @@ def loadSimConfigTests(self): self.paramsMap["simConfig"]["dtTest"].append(simConfigParams) - # invalid duration - self.paramsMap["simConfig"]["invalidDtTest"] = [] + # invalid dt simConfigParams = ParamsObj() simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms simConfigParams.simConfig.dt = "s" # Internal integration timestep to use @@ -101,14 +97,50 @@ def loadSimConfigTests(self): simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - self.paramsMap["simConfig"]["invalidDtTest"].append(simConfigParams) + self.paramsMap["simConfig"]["dtTest"].append(simConfigParams) - # duration - self.paramsMap["simConfig"]["hParamsTest"] = [] + # # hParams + # self.paramsMap["simConfig"]["hParamsTest"] = [] + # simConfigParams = ParamsObj() + # simConfigParams.simConfig.hParams = {'celsius': 6.3, 'clamp_resist': 0.001} + # simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + # simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + # simConfigParams.simConfig.verbose = False # Show detailed messages + # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + # simConfigParams.simConfig.filename = 'model_output' # Set file output name + # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + # + # simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + # + # self.paramsMap["simConfig"]["hParamsTest"].append(simConfigParams) + # + # # invalid hParams + # simConfigParams = ParamsObj() + # simConfigParams.simConfig.hParams = {'celsius11': 6.3, 'clamp_resist': 0.001} + # simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + # simConfigParams.simConfig.dt = 1 # Internal integration timestep to use + # simConfigParams.simConfig.verbose = False # Show detailed messages + # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + # simConfigParams.simConfig.filename = 'model_output' # Set file output name + # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + # + # simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + # + # self.paramsMap["simConfig"]["hParamsTest"].append(simConfigParams) + + # seeds + self.paramsMap["simConfig"]["seedsTest"] = [] simConfigParams = ParamsObj() simConfigParams.simConfig.hParams = {'celsius': 6.3, 'clamp_resist': 0.001} simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + simConfigParams.simConfig.seeds ={'conn': 1, 'stim': 1, 'loc': 1} simConfigParams.simConfig.verbose = False # Show detailed messages simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) @@ -119,14 +151,35 @@ def loadSimConfigTests(self): simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - self.paramsMap["simConfig"]["hParamsTest"].append(simConfigParams) + self.paramsMap["simConfig"]["seedsTest"].append(simConfigParams) - # invalid duration - self.paramsMap["simConfig"]["invalidHParamsTest"] = [] + # invalid seeds simConfigParams = ParamsObj() simConfigParams.simConfig.hParams = {'celsius11': 6.3, 'clamp_resist': 0.001} simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms - simConfigParams.simConfig.dt = "s" # Internal integration timestep to use + simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + # simConfigParams.simConfig.seeds ={'con': 1, 'stim': 1, 'loc': 1} + simConfigParams.simConfig.seeds ="s" + + simConfigParams.simConfig.verbose = False # Show detailed messages + simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + simConfigParams.simConfig.filename = 'model_output' # Set file output name + simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + + simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + + self.paramsMap["simConfig"]["seedsTest"].append(simConfigParams) + # invalid seeds + simConfigParams = ParamsObj() + simConfigParams.simConfig.hParams = {'celsius11': 6.3, 'clamp_resist': 0.001} + simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + simConfigParams.simConfig.seeds ={'con': 1, 'stim': 1, 'loc': 1} + #simConfigParams.simConfig.seeds ="s" + simConfigParams.simConfig.verbose = False # Show detailed messages simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) @@ -137,7 +190,21 @@ def loadSimConfigTests(self): simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - self.paramsMap["simConfig"]["invalidHParamsTest"].append(simConfigParams) + self.paramsMap["simConfig"]["seedsTest"].append(simConfigParams) + self.paramsMap["simConfig"]["plotRasterTest"] = [] + # invalid seeds + simConfigParams = ParamsObj() + simConfigParams.simConfig.verbose = False # Show detailed messages + simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + simConfigParams.simConfig.filename = 'model_output' # Set file output name + simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + + simConfigParams.simConfig.analysis['plotRaster'] = {'bla':1,'syncLines': True} # Plot a raster + simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + + self.paramsMap["simConfig"]["plotRasterTest"].append(simConfigParams) def loadTestsWithParams(self): @@ -2093,7 +2160,7 @@ def runCellTestsWithParams(self): def runConnTestsWithParams(self): #print ( " #### running conn tests " ) connParamsMap = self.paramsMap["conn"] - print (" connParamsMap = " + str(connParamsMap)) + #print (" connParamsMap = " + str(connParamsMap)) # run the different tests for conn for testName, paramObjList in connParamsMap.items(): for paramsObj in paramObjList: @@ -2126,8 +2193,9 @@ def runSimConfigTests(self): simConfigParamsMap = self.paramsMap["simConfig"] # run the different tests for conn for testName, paramObjList in simConfigParamsMap.items(): + #print ( " calling tests 00 " + testName) for paramsObj in paramObjList: - #print ( " calling tests") + #print ( " calling tests " + testName) self.netPyneTestObj.netParams = paramsObj.netParams self.netPyneTestObj.simConfig = paramsObj.simConfig self.netPyneTestObj.runTests() From 93556ddca7cdf521f2779f3fe07e110e5057f378 Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Sun, 6 Aug 2017 22:40:02 -0400 Subject: [PATCH 31/50] working version --- netpyne/specs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netpyne/specs.py b/netpyne/specs.py index 5c37f1142..2605094b9 100644 --- a/netpyne/specs.py +++ b/netpyne/specs.py @@ -499,7 +499,7 @@ def __init__(self, simConfigDict = None): self.saveCellConns = True # save all the conns info for each cell (False reduces time+space; prevents re-simulation) # error checking - self.checkErrors = False # whether to validate the input parameters + self.checkErrors = True # whether to validate the input parameters self.checkErrorsVerbose = False # whether to print detailed errors during input parameter validation # self.exitOnError = False # whether to hard exit on error From 2d185f6b5c08908c257741489d53a2dc82f60fcf Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Sun, 6 Aug 2017 22:40:48 -0400 Subject: [PATCH 32/50] working version final --- netpyne/specs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netpyne/specs.py b/netpyne/specs.py index 2605094b9..5c37f1142 100644 --- a/netpyne/specs.py +++ b/netpyne/specs.py @@ -499,7 +499,7 @@ def __init__(self, simConfigDict = None): self.saveCellConns = True # save all the conns info for each cell (False reduces time+space; prevents re-simulation) # error checking - self.checkErrors = True # whether to validate the input parameters + self.checkErrors = False # whether to validate the input parameters self.checkErrorsVerbose = False # whether to print detailed errors during input parameter validation # self.exitOnError = False # whether to hard exit on error From c1f17953712f28ceb7ecf3fbb83a975862395928 Mon Sep 17 00:00:00 2001 From: salvdord Date: Mon, 7 Aug 2017 15:10:54 -0400 Subject: [PATCH 33/50] fixed bug in batch initCfg saving to json --- examples/sandbox/sandbox.py | 14 ++++++++------ netpyne/batch.py | 10 +++++----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/examples/sandbox/sandbox.py b/examples/sandbox/sandbox.py index 449c5bd01..23c66a6f2 100644 --- a/examples/sandbox/sandbox.py +++ b/examples/sandbox/sandbox.py @@ -72,15 +72,17 @@ # Simulation parameters simConfig.duration = 1*1e3 # Duration of the simulation, in ms -simConfig.dt = 0.025 # Internal integration timestep to use -simConfig.seeds = {'conn': 1, 'stim': 1, 'loc': 1} # Seeds for randomizers (connectivity, input stimulation and cell locations) +simConfig.dt = 'a' # Internal integration timestep to use +simConfig.seeds = {'con': 1, 'stim': 1, 'loc': 1} # Seeds for randomizers (connectivity, input stimulation and cell locations) simConfig.createNEURONObj = 1 # create HOC objects when instantiating network simConfig.createPyStruct = 1 # create Python structure (simulator-independent) when instantiating network simConfig.verbose = False # show detailed messages +simConfig.checkErrors = 1 + # Recording simConfig.recordCells = [] # which cells to record from -simConfig.recordTraces = {'Vsoma':{'sec':'soma','loc':0.5,'var':'v','conds': {'cellType': 'PYR2'}}} +simConfig.recordTraces = {'Vsoma':{'se':'soma','loc':0.5,'var':'v','conds': {'cellType': 'PYR2'}}} simConfig.recordStim = True # record spikes of cell stims simConfig.recordStep = 0.1 # Step size in ms to save data (eg. V traces, LFP, etc) @@ -91,11 +93,11 @@ simConfig.saveMat = True # Analysis and plotting -simConfig.analysis['plotRaster'] =True -simConfig.analysis['plotTraces'] = {'include': ['all'], 'oneFigPer':'trace'} +simConfig.analysis['plotRaster'] = {'bla':1} +#simConfig.analysis['plotTraces'] = {'include': ['all'], 'oneFigPer':'trace'} sim.createSimulateAnalyze() -data=sim.loadSimData('HHTut.mat') +#data=sim.loadSimData('HHTut.mat') diff --git a/netpyne/batch.py b/netpyne/batch.py index 0f68d9153..d036e7fd5 100644 --- a/netpyne/batch.py +++ b/netpyne/batch.py @@ -64,6 +64,7 @@ def __init__(self, cfgFile='cfg.py', netParamsFile='netParams.py', params=None, def save(self, filename): import os + from copy import deepcopy basename = os.path.basename(filename) folder = filename.split(basename)[0] ext = basename.split('.')[1] @@ -75,7 +76,8 @@ def save(self, filename): if not os.path.exists(folder): print ' Could not create', folder - dataSave = {'batch': tupleToStr(self.__dict__)} + odict = deepcopy(self.__dict__) + dataSave = {'batch': tupleToStr(odict)} if ext == 'json': import json #from json import encoder @@ -106,8 +108,7 @@ def run(self): except OSError: if not os.path.exists(self.saveFolder): print ' Could not create', self.saveFolder - - + # save Batch dict as json targetFile = self.saveFolder+'/'+self.batchLabel+'_batch.json' self.save(targetFile) @@ -129,8 +130,7 @@ def run(self): if len(self.initCfg) > 0: for paramLabel, paramVal in self.initCfg.iteritems(): self.setCfgNestedParam(paramLabel, paramVal) - self.initCfg[str(paramLabel)] = self.initCfg.pop(paramLabel) # convert tuple to str - + # iterate over all param combinations if self.method == 'grid': From 27a360e7d6000559643c41a9fbe1ed63ecf01256 Mon Sep 17 00:00:00 2001 From: salvdord Date: Mon, 7 Aug 2017 23:10:33 -0400 Subject: [PATCH 34/50] Fixed bug when adding stim NetStim where sec is a list --- CHANGES.md | 2 ++ netpyne/cell.py | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index aba214dfc..f2703cdd3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -18,6 +18,8 @@ - Fixed bug importing cell -- use h.pop_section() to avoid stack overflow +- Fixed bug when adding stim NetStim where sec is a list + # Version 0.7.1 - Updates and bug fixes of NeuroML importer/exporter diff --git a/netpyne/cell.py b/netpyne/cell.py index 2cde299d4..552d6e40b 100644 --- a/netpyne/cell.py +++ b/netpyne/cell.py @@ -951,8 +951,6 @@ def addStim (self, params): else: if sim.cfg.verbose: print ' Error: no Section available on cell gid=%d to add stim'%(self.gid) return - - sec = self.secs[params['sec']] if not 'loc' in params: params['loc'] = 0.5 # default stim location @@ -984,6 +982,7 @@ def addStim (self, params): elif params['type'] in ['IClamp', 'VClamp', 'SEClamp', 'AlphaSynapse']: + sec = self.secs[params['sec']] stim = getattr(h, params['type'])(sec['hSec'](params['loc'])) stimParams = {k:v for k,v in params.iteritems() if k not in ['type', 'source', 'loc', 'sec', 'label']} stringParams = '' @@ -1006,7 +1005,8 @@ def addStim (self, params): (params['source'], params['type'], self.gid, params['sec'], params['loc'], stringParams)) else: - if sim.cfg.verbose: print('Adding exotic stim (NeuroML 2 based?): %s'% params) + if sim.cfg.verbose: print('Adding exotic stim (NeuroML 2 based?): %s'% params) + sec = self.secs[params['sec']] stim = getattr(h, params['type'])(sec['hSec'](params['loc'])) stimParams = {k:v for k,v in params.iteritems() if k not in ['type', 'source', 'loc', 'sec', 'label']} stringParams = '' From a5fe78629d76e87ffcccfd12f2beb2ec0c0e3953 Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Mon, 7 Aug 2017 23:49:14 -0400 Subject: [PATCH 35/50] fixes --- netpyne/tests/tests.py | 242 +++++++++++++++++++------------- netpyne/tests/validate_tests.py | 68 ++++----- 2 files changed, 177 insertions(+), 133 deletions(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index 3daa6e7d2..0c5b7cceb 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -304,7 +304,7 @@ def testIsAllValueList(self,val, valList): # TEST_TYPE_ALL_VALUE_LIST #print ( " 1") # print ( " in val list test" + str(val) + " :: " + str(valList)) if isinstance(val, list) and isinstance(valList, list): - assert (all([x in valList for x in val])), str(val) + " must be in list " + str(valList) + assert (all([x in valList for x in val])), str(val[[x in valList for x in val].index(False)]) + " must be in list " + str(valList) except AssertionError as e: #print (" 1" + str(e)) #e.args += (,) @@ -317,7 +317,7 @@ def testDictKeyValidValue(self,paramDict, valList): # TEST_TYPE_VALUE_LIST if isinstance(paramDict, dict) and isinstance(valList, list): if isinstance(valList, str): valList = eval(valList) - assert (all([x in valList for x in paramDict.keys()])), str(paramDict) + " must have keys in list " + str(valList) + ". Keys provided are " + str(paramDict.keys()) + "." + assert (all([x in valList for x in paramDict.keys()])), " '" + str(paramDict.keys()[[x in valList for x in paramDict.keys()].index(False)]) + "' must be a key in list " + str(valList) + ". Keys provided are " + str(paramDict.keys()) + "." #assert (all([x in valList for x in paramDict.keys()])), str(paramDict) + " must have keys in list " + str("") + ". Keys provided are " + str(paramDict.keys()) + "." except AssertionError as e: @@ -499,10 +499,10 @@ def testValidTopologies(self,paramValues): # TEST_TYPE_VALUE_LIST errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol -> parentSec: parentSec '" + str(value['topol']['parentSec']) +"' does not point to a valid section. Valid sections are ('" + str(paramValues['secs'].keys()) + "')." elif not isinstance ( value['topol']['parentX'] , numbers.Real ): topolValid = False - errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol -> parentX: parentX is not a float." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol -> parentX: Value should be a float." elif not isinstance ( value['topol']['childX'] , numbers.Real ): topolValid = False - errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol -> childX: childX is not a float." + errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol -> childX: Value should be a float." elif value['topol']['parentX'] < 0 or value['topol']['parentX'] >1: topolValid = False errorMessage = "cellParams -> secs ('" + str(key) + "') -> topol -> parentX: parentX must be between 0 and 1. Value specified is '" + str(value['topol']['parentX'] ) + "'." @@ -1099,7 +1099,7 @@ def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS errorMessages.append("SimConfig->'analysis': Must be a dict. Value provided is " + str(simConfig.analysis) + ".") return errorMessages #print (" before ") - validList = ['plotRaster','plotSpikeHist', 'plotSpikePSD', 'plotTraces', 'plotShape', 'plotConn', 'plot2Dnet', 'nTE', 'granger'] + validList = ['plotRaster','plotSpikeHist', 'plotSpikePSD', 'plotTraces', 'plotConn', 'plotConn', 'plot2Dnet', 'nTE', 'granger'] # print ( [x in validList for x in analysis.keys()] ) if not all ([x in validList for x in analysis.keys()]): errorMessages.append("SimConfig->'analysis': Valid analysis functions are 'plotRaster','plotSpikeHist', 'plotSpikePSD', 'plotTraces', 'plotShape', 'plotConn', 'plot2DNet', 'nTE', 'granger'. Keys specified are " + str(analysis.keys()) + ".") @@ -1221,30 +1221,37 @@ def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS if not isinstance ( plotSpikePSD, dict): errorMessages.append("SimConfig->'analysis'->'plotSpikePSD': Must be a dict. Value provided is " + str(plotSpikePSD) + ".") - if 'include' in plotSpikePSD and not isinstance( plotSpikePSD['include'], list): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'include': Must be a list. Value provided is " + str(plotSpikePSD['include']) + ".") + else: - # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + validList = ['include', 'timeRange', 'binSize', 'Fs', 'spikeHist', 'overlay', 'yaxis', 'figSize', 'saveData', 'saveFig' , 'showFig'] + + if not all(x in validList for x in plotSpikePSD.keys()): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD': plotSpikePSD must be a dict with keys in list " + str(validList) + ". Keys supplied are " + str(plotSpikePSD.keys()) + ".") + + if 'include' in plotSpikePSD and not isinstance( plotSpikePSD['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'include': Must be a list. Value provided is " + str(plotSpikePSD['include']) + ".") + + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") - if 'overlay' in plotSpikePSD: + if 'overlay' in plotSpikePSD: - if not isinstance( plotSpikePSD['overlay'], bool): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'overlay': Must be boolean. Value provided is " + str(plotSpikePSD['overlay']) + ".") + if not isinstance( plotSpikePSD['overlay'], bool): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'overlay': Must be boolean. Value provided is " + str(plotSpikePSD['overlay']) + ".") - if 'Fs' in plotSpikePSD and not isinstance ( plotSpikePSD['Fs'] , numbers.Real ): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'Fs': Fs must be float. Value provided is " + str(plotSpikePSD['Fs']) + ".") + if 'Fs' in plotSpikePSD and not isinstance ( plotSpikePSD['Fs'] , numbers.Real ): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'Fs': Fs must be float. Value provided is " + str(plotSpikePSD['Fs']) + ".") - if 'figSize' in plotSpikePSD and not isinstance (plotSpikePSD['figSize'], tuple): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotSpikePSD['figSize']) + ".") + if 'figSize' in plotSpikePSD and not isinstance (plotSpikePSD['figSize'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotSpikePSD['figSize']) + ".") - if 'binSize' in plotSpikePSD and not isinstance( plotSpikePSD['binSize'], int): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'binSize': Must be an integer. Value provided is " + str(plotSpikePSD['binSize']) + ".") + if 'binSize' in plotSpikePSD and not isinstance( plotSpikePSD['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'binSize': Must be an integer. Value provided is " + str(plotSpikePSD['binSize']) + ".") - if 'showFig' in plotSpikePSD: + if 'showFig' in plotSpikePSD: - if not isinstance( plotSpikePSD['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'showFig': Must be boolean. Value provided is " + str(plotSpikePSD['showFig']) + ".") + if not isinstance( plotSpikePSD['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotSpikePSD'->'showFig': Must be boolean. Value provided is " + str(plotSpikePSD['showFig']) + ".") if 'plotTraces' in analysis: @@ -1252,41 +1259,54 @@ def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS if not isinstance ( plotTraces, dict): errorMessages.append("SimConfig->'analysis'->'plotTraces': Must be a dict. Value provided is " + str(plotTraces) + ".") - if 'include' in plotTraces and not isinstance( plotTraces['include'], list): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'include': Must be a list. Value provided is " + str(plotTraces['include']) + ".") + else: - # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): - # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") + validList = ['include', 'timeRange','overlay', 'oneFigPer', 'rerun', 'figSize', 'saveData' , 'showFig'] + + if not all(x in validList for x in plotTraces.keys()): + errorMessages.append("SimConfig->'analysis'->'plotTraces': plotTraces must be a dict with keys in list " + str(validList) + ". Keys supplied are " + str(plotTraces.keys()) + ".") + + if 'include' in plotTraces and not isinstance( plotTraces['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'include': Must be a list. Value provided is " + str(plotTraces['include']) + ".") + + # if 'timeRange' in plotRaster and not isinstance( plotRaster['timeRange'], dict): + # errorMessages.append("SimConfig->'analysis'->'plotRaster'->'timeRange': Must be a list. Value provided is " + str(plotRaster['timeRange']) + ".") - if 'overlay' in plotTraces and not isinstance( plotTraces['overlay'], bool): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'overlay': Must be boolean. Value provided is " + str(plotTraces['overlay']) + ".") + if 'overlay' in plotTraces and not isinstance( plotTraces['overlay'], bool): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'overlay': Must be boolean. Value provided is " + str(plotTraces['overlay']) + ".") - if 'binSize' in plotTraces and not isinstance( plotTraces['binSize'], int): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'binSize': Must be an integer. Value provided is " + str(plotTraces['binSize']) + ".") + if 'binSize' in plotTraces and not isinstance( plotTraces['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'binSize': Must be an integer. Value provided is " + str(plotTraces['binSize']) + ".") - if 'oneFigPer' in plotRaster and plotRaster['oneFigPer'] not in ['cell','trace']: - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'oneFigPer': oneFigPer must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['oneFigPer']) + ".") + if 'oneFigPer' in plotRaster and plotRaster['oneFigPer'] not in ['cell','trace']: + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'oneFigPer': oneFigPer must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['oneFigPer']) + ".") - if 'rerun' in plotTraces and not isinstance( plotTraces['rerun'], bool): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'rerun': Must be boolean. Value provided is " + str(plotTraces['rerun']) + ".") + if 'rerun' in plotTraces and not isinstance( plotTraces['rerun'], bool): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'rerun': Must be boolean. Value provided is " + str(plotTraces['rerun']) + ".") - if 'figSize' in plotTraces and not isinstance (plotTraces['figSize'], tuple): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotTraces['figSize']) + ".") + if 'figSize' in plotTraces and not isinstance (plotTraces['figSize'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'figSize': figSize must be tuple if specified. Value provided is " + str(plotTraces['figSize']) + ".") - if 'saveFig' in plotTraces and not isinstance (plotTraces['saveFig'], tuple): - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'saveFig': saveFig must be tuple if specified. Value provided is " + str(plotTraces['saveFig']) + ".") + if 'saveFig' in plotTraces and not isinstance (plotTraces['saveFig'], tuple): + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'saveFig': saveFig must be tuple if specified. Value provided is " + str(plotTraces['saveFig']) + ".") if 'plotShape' in analysis: plotShapes = analysis['plotShapes'] if not isinstance ( plotShapes, dict): errorMessages.append("SimConfig->'analysis'->'plotShapes': Must be a dict. Value provided is " + str(plotShapes) + ".") + else: + + validList = ['showSyns', 'include', 'style', 'siz', 'figSize', 'saveData', 'saveFig', 'showFig'] - if 'showSyns' in plotShapes and not isinstance( plotShapes['showSyns'], bool): - errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showSyns': Must be boolean. Value provided is " + str(plotShapes['showSyns']) + ".") + if not all(x in validList for x in plotShape.keys()): + errorMessages.append("SimConfig->'analysis'->'plotShape': plotShape must be a dict with keys in list " + str(validList) + ". Keys supplied are " + str(plotShape.keys()) + ".") - if 'showFig' in plotShapes and not isinstance( plotShapes['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showFig': Must be boolean. Value provided is " + str(plotShapes['showFig']) + ".") + if 'showSyns' in plotShapes and not isinstance( plotShapes['showSyns'], bool): + errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showSyns': Must be boolean. Value provided is " + str(plotShapes['showSyns']) + ".") + + if 'showFig' in plotShapes and not isinstance( plotShapes['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotShapes'->'showFig': Must be boolean. Value provided is " + str(plotShapes['showFig']) + ".") if 'plotConn' in analysis: @@ -1295,23 +1315,30 @@ def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS if not isinstance ( plotConn, dict): errorMessages.append("SimConfig->'analysis'->'plotConn': Must be a dict. Value provided is " + str(plotConn) + ".") - if 'include' in plotConn and not isinstance( plotConn['include'], list): - errorMessages.append("SimConfig->'analysis'->'plotConn'->'include': Must be a list. Value provided is " + str(plotConn['include']) + ".") + else: + + validList = ['include', 'feature', 'orderBy', 'figSize', 'groupBy', 'saveData', 'saveFig', 'showFig'] + + if not all(x in validList for x in plotConn.keys()): + errorMessages.append("SimConfig->'analysis'->'plotConn': plotConn must be a dict with keys in list " + str(validList) + ". Keys supplied are " + str(plotConn.keys()) + ".") - if 'feature' in plotConn: - if plotConn['spikeHist'] not in ['weight', 'delay', 'numConns']: - errorMessages.append("SimConfig->'analysis'->'plotConn'->'feature': Valid values are " + str(['weight', 'delay', 'numConns'])+ ". Value provided is " + str(plotConn['feature']) + ".") + if 'include' in plotConn and not isinstance( plotConn['include'], list): + errorMessages.append("SimConfig->'analysis'->'plotConn'->'include': Must be a list. Value provided is " + str(plotConn['include']) + ".") - if 'groupBy' in plotConn: - if plotConn['spikeHist'] not in ['pop', 'cell']: - errorMessages.append("SimConfig->'analysis'->'plotConn'->'groupBy': Valid values are " + str(['pop', 'cell'])+ ". Value provided is " + str(plotConn['groupBy']) + ".") + if 'feature' in plotConn: + if plotConn['spikeHist'] not in ['weight', 'delay', 'numConns']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'feature': Valid values are " + str(['weight', 'delay', 'numConns'])+ ". Value provided is " + str(plotConn['feature']) + ".") - if 'orderBy' in plotConn: - if plotConn['spikeHist'] not in ['gid', 'ynorm', 'y']: - errorMessages.append("SimConfig->'analysis'->'plotConn'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plotConn['orderBy']) + ".") + if 'groupBy' in plotConn: + if plotConn['spikeHist'] not in ['pop', 'cell']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'groupBy': Valid values are " + str(['pop', 'cell'])+ ". Value provided is " + str(plotConn['groupBy']) + ".") - if 'showFig' in plotConn and not isinstance( plotConn['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plotConn'->'showFig': Must be boolean. Value provided is " + str(plotConn['showFig']) + ".") + if 'orderBy' in plotConn: + if plotConn['spikeHist'] not in ['gid', 'ynorm', 'y']: + errorMessages.append("SimConfig->'analysis'->'plotConn'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plotConn['orderBy']) + ".") + + if 'showFig' in plotConn and not isinstance( plotConn['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plotConn'->'showFig': Must be boolean. Value provided is " + str(plotConn['showFig']) + ".") if 'plot2DNet' in analysis: @@ -1319,23 +1346,29 @@ def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS if not isinstance ( plot2DNet, dict): errorMessages.append("SimConfig->'analysis'->'plot2DNet': Must be a dict. Value provided is " + str(plot2DNet) + ".") + else: - if 'include' in plot2DNet and not isinstance( plot2DNet['include'], list): - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'include': Must be a list. Value provided is " + str(plot2DNet['include']) + ".") + validList = ['include', 'feature', 'orderBy', 'figSize', 'groupBy', 'saveData', 'saveFig', 'showFig'] - if 'orderBy' in plot2DNet: - if plot2DNet['spikeHist'] not in ['gid', 'ynorm', 'y']: - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plot2DNet['orderBy']) + ".") + if not all(x in validList for x in plot2DNet.keys()): + errorMessages.append("SimConfig->'analysis'->'plot2DNet': plot2DNet must be a dict with keys in list " + str(validList) + ". Keys supplied are " + str(plot2DNet.keys()) + ".") - if 'view' in plot2DNet: - if plot2DNet['spikeHist'] not in ['xy', 'xz']: - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'view': Valid values are " + str(['xy', 'xz'])+ ". Value provided is " + str(plot2DNet['view']) + ".") + if 'include' in plot2DNet and not isinstance( plot2DNet['include'], list): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'include': Must be a list. Value provided is " + str(plot2DNet['include']) + ".") - if 'showConns' in plot2DNet and not isinstance( plot2DNet['showConns'], bool): - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showConns': Must be boolean. Value provided is " + str(plot2DNet['showConns']) + ".") + if 'orderBy' in plot2DNet: + if plot2DNet['spikeHist'] not in ['gid', 'ynorm', 'y']: + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'orderBy': Valid values are " + str(['gid', 'ynorm','y'])+ ". Value provided is " + str(plot2DNet['orderBy']) + ".") - if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") + if 'view' in plot2DNet: + if plot2DNet['spikeHist'] not in ['xy', 'xz']: + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'view': Valid values are " + str(['xy', 'xz'])+ ". Value provided is " + str(plot2DNet['view']) + ".") + + if 'showConns' in plot2DNet and not isinstance( plot2DNet['showConns'], bool): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showConns': Must be boolean. Value provided is " + str(plot2DNet['showConns']) + ".") + + if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") if 'nTE' in analysis: @@ -1343,24 +1376,29 @@ def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS if not isinstance ( nTE, dict): errorMessages.append("SimConfig->'analysis'->'nTE': Must be a dict. Value provided is " + str(nTE) + ".") + else: + validList = ['cells1', 'cells2', 'spks1', 'spks2', 'timeRange', 'binSize', 'numShuffle'] + + if not all(x in validList for x in nTE.keys()): + errorMessages.append("SimConfig->'analysis'->'nTE': nTE must be a dict with keys in list " + str(validList) + ". Keys supplied are " + str(nTE.keys()) + ".") - if 'cells1' in nTE and not isinstance( nTE['cells1'], list): - errorMessages.append("SimConfig->'analysis'->'nTE'->'cells1': Must be a list. Value provided is " + str(nTE['cells1']) + ".") + if 'cells1' in nTE and not isinstance( nTE['cells1'], list): + errorMessages.append("SimConfig->'analysis'->'nTE'->'cells1': Must be a list. Value provided is " + str(nTE['cells1']) + ".") - if 'cells2' in nTE and not isinstance( nTE['cells2'], list): - errorMessages.append("SimConfig->'analysis'->'nTE'->'cells2': Must be a list. Value provided is " + str(nTE['cells2']) + ".") + if 'cells2' in nTE and not isinstance( nTE['cells2'], list): + errorMessages.append("SimConfig->'analysis'->'nTE'->'cells2': Must be a list. Value provided is " + str(nTE['cells2']) + ".") - if 'spks1' in nTE and not isinstance( nTE['spks1'], list): - errorMessages.append("SimConfig->'analysis'->'nTE'->'spks1': Must be a list. Value provided is " + str(nTE['spks1']) + ".") + if 'spks1' in nTE and not isinstance( nTE['spks1'], list): + errorMessages.append("SimConfig->'analysis'->'nTE'->'spks1': Must be a list. Value provided is " + str(nTE['spks1']) + ".") - if 'spks2' in nTE and not isinstance( nTE['spks2'], list): - errorMessages.append("SimConfig->'analysis'->'nTE'->'spks2': Must be a list. Value provided is " + str(nTE['spks2']) + ".") + if 'spks2' in nTE and not isinstance( nTE['spks2'], list): + errorMessages.append("SimConfig->'analysis'->'nTE'->'spks2': Must be a list. Value provided is " + str(nTE['spks2']) + ".") - if 'binSize' in nTE and not isinstance( nTE['binSize'], int): - errorMessages.append("SimConfig->'analysis'->'nTE'->'binSize': Must be an int. Value provided is " + str(nTE['binSize']) + ".") + if 'binSize' in nTE and not isinstance( nTE['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'nTE'->'binSize': Must be an int. Value provided is " + str(nTE['binSize']) + ".") - if 'numShuffle' in nTE and not isinstance( nTE['numShuffle'], int): - errorMessages.append("SimConfig->'analysis'->'nTE'->'numShuffle': Must be an int. Value provided is " + str(nTE['numShuffle']) + ".") + if 'numShuffle' in nTE and not isinstance( nTE['numShuffle'], int): + errorMessages.append("SimConfig->'analysis'->'nTE'->'numShuffle': Must be an int. Value provided is " + str(nTE['numShuffle']) + ".") if 'granger' in analysis: @@ -1368,27 +1406,33 @@ def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS if not isinstance ( granger, dict): errorMessages.append("SimConfig->'analysis'->'granger': Must be a dict. Value provided is " + str(granger) + ".") + else: + + validList = ['cells1', 'cells2', 'spks1', 'spks2','label1', 'label2', 'timeRange', 'binSize', 'plotFig', 'saveData', 'saveFig', 'showFig'] + + if not all(x in validList for x in granger.keys()): + errorMessages.append("SimConfig->'analysis'->'granger': granger must be a dict with keys in list " + str(validList) + ". Keys supplied are " + str(granger.keys()) + ".") - if 'cells1' in granger and not isinstance( granger['cells1'], list): - errorMessages.append("SimConfig->'analysis'->'granger'->'cells1': Must be a list. Value provided is " + str(granger['cells1']) + ".") + if 'cells1' in granger and not isinstance( granger['cells1'], list): + errorMessages.append("SimConfig->'analysis'->'granger'->'cells1': Must be a list. Value provided is " + str(granger['cells1']) + ".") - if 'cells2' in granger and not isinstance( granger['cells2'], list): - errorMessages.append("SimConfig->'analysis'->'granger'->'cells2': Must be a list. Value provided is " + str(granger['cells2']) + ".") + if 'cells2' in granger and not isinstance( granger['cells2'], list): + errorMessages.append("SimConfig->'analysis'->'granger'->'cells2': Must be a list. Value provided is " + str(granger['cells2']) + ".") - if 'spks1' in granger and not isinstance( granger['spks1'], list): - errorMessages.append("SimConfig->'analysis'->'granger'->'spks1': Must be a list. Value provided is " + str(granger['spks1']) + ".") + if 'spks1' in granger and not isinstance( granger['spks1'], list): + errorMessages.append("SimConfig->'analysis'->'granger'->'spks1': Must be a list. Value provided is " + str(granger['spks1']) + ".") - if 'spks2' in granger and not isinstance( granger['spks2'], list): - errorMessages.append("SimConfig->'analysis'->'granger'->'spks2': Must be a list. Value provided is " + str(granger['spks2']) + ".") + if 'spks2' in granger and not isinstance( granger['spks2'], list): + errorMessages.append("SimConfig->'analysis'->'granger'->'spks2': Must be a list. Value provided is " + str(granger['spks2']) + ".") - if 'binSize' in granger and not isinstance( granger['binSize'], int): - errorMessages.append("SimConfig->'analysis'->'granger'->'binSize': Must be an int. Value provided is " + str(granger['binSize']) + ".") + if 'binSize' in granger and not isinstance( granger['binSize'], int): + errorMessages.append("SimConfig->'analysis'->'granger'->'binSize': Must be an int. Value provided is " + str(granger['binSize']) + ".") - if 'plotFig' in plot2DNet and not isinstance( plot2DNet['plotFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'plotFig': Must be boolean. Value provided is " + str(plot2DNet['plotFig']) + ".") + if 'plotFig' in plot2DNet and not isinstance( plot2DNet['plotFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'plotFig': Must be boolean. Value provided is " + str(plot2DNet['plotFig']) + ".") - if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): - errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") + if 'showFig' in plot2DNet and not isinstance( plot2DNet['showFig'], bool): + errorMessages.append("SimConfig->'analysis'->'plot2DNet'->'showFig': Must be boolean. Value provided is " + str(plot2DNet['showFig']) + ".") except Exception as e: traceback.print_exc(file=sys.stdout) @@ -1494,7 +1538,7 @@ def loadSimConfigTests(self): testObj.testParameterType = "string" testObj.testParameterValue = "self.simConfig.duration" testObj.testTypes = [TEST_TYPE_IS_FLOAT] - testObj.messageText = ["SimConfig->'duration':Duration is not an float."] + testObj.messageText = ["SimConfig->'duration': Value should be a float."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["durationTest"] = testObj @@ -1507,7 +1551,7 @@ def loadSimConfigTests(self): testObj.testParameterType = "string" testObj.testParameterValue = "self.simConfig.dt" testObj.testTypes = [TEST_TYPE_IS_FLOAT] - testObj.messageText = ["simConfig->'dt':dt is not a float."] + testObj.messageText = ["simConfig->'dt': Value should be a float."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["dtTest"] = testObj @@ -1727,7 +1771,7 @@ def loadSimConfigTests(self): testObj.testParameterType = "string" testObj.testParameterValue = "self.simConfig.recordStep" testObj.testTypes = [TEST_TYPE_IS_FLOAT] - testObj.messageText = ["SimConfig->'recordStep':recordStep is not a float."] + testObj.messageText = ["SimConfig->'recordStep': Value should be a float."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["recordStepTest"] = testObj @@ -1739,7 +1783,7 @@ def loadSimConfigTests(self): testObj.testParameterType = "string" testObj.testParameterValue = "self.simConfig.saveDataInclude" testObj.testTypes = [TEST_TYPE_IS_LIST] - testObj.messageText = ["SimConfig->'saveDataInclude':saveDataInclude is not a float."] + testObj.messageText = ["SimConfig->'saveDataInclude': Value should be a float."] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["saveDataIncludeTest"] = testObj @@ -2003,7 +2047,7 @@ def loadNetTests(self): testObj.testParameterValue = "self.netParams.sizeX" testObj.testTypes = [TEST_TYPE_IS_INT, TEST_TYPE_GT_ZERO] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] - testObj.messageText = ["NetParams->'sizeX': sizeX is not an int.","NetParams->'sizeX': sizeX is not greater than 0."] + testObj.messageText = ["NetParams->'sizeX': Value should be an int.","NetParams->'sizeX': sizeX is not greater than 0."] self.testParamsMap["net"]["sizeXTest"] = testObj @@ -2014,7 +2058,7 @@ def loadNetTests(self): testObj.testParameterValue = "self.netParams.sizeY" testObj.testTypes = [TEST_TYPE_IS_INT, TEST_TYPE_GT_ZERO] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] - testObj.messageText = ["NetParams->'sizeY': sizeY is not an int.","NetParams->'sizeY': sizeY is not greater than 0."] + testObj.messageText = ["NetParams->'sizeY': Value should be an int.","NetParams->'sizeY': sizeY is not greater than 0."] self.testParamsMap["net"]["sizeYTest"] = testObj @@ -2025,7 +2069,7 @@ def loadNetTests(self): testObj.testParameterValue = "self.netParams.sizeZ" testObj.testTypes = [TEST_TYPE_IS_INT, TEST_TYPE_GT_ZERO] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] - testObj.messageText = ["NetParams->'sizeZ': sizeZ is not an int.","NetParams->'sizeZ': sizeZ is not greater than 0."] + testObj.messageText = ["NetParams->'sizeZ': Value should be an int.","NetParams->'sizeZ': sizeZ is not greater than 0."] self.testParamsMap["net"]["sizeZTest"] = testObj diff --git a/netpyne/tests/validate_tests.py b/netpyne/tests/validate_tests.py index 86220abb6..cd35c118f 100644 --- a/netpyne/tests/validate_tests.py +++ b/netpyne/tests/validate_tests.py @@ -99,40 +99,40 @@ def loadSimConfigTests(self): self.paramsMap["simConfig"]["dtTest"].append(simConfigParams) - # # hParams - # self.paramsMap["simConfig"]["hParamsTest"] = [] - # simConfigParams = ParamsObj() - # simConfigParams.simConfig.hParams = {'celsius': 6.3, 'clamp_resist': 0.001} - # simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms - # simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use - # simConfigParams.simConfig.verbose = False # Show detailed messages - # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record - # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) - # simConfigParams.simConfig.filename = 'model_output' # Set file output name - # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file - # - # simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster - # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells - # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - # - # self.paramsMap["simConfig"]["hParamsTest"].append(simConfigParams) - # - # # invalid hParams - # simConfigParams = ParamsObj() - # simConfigParams.simConfig.hParams = {'celsius11': 6.3, 'clamp_resist': 0.001} - # simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms - # simConfigParams.simConfig.dt = 1 # Internal integration timestep to use - # simConfigParams.simConfig.verbose = False # Show detailed messages - # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record - # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) - # simConfigParams.simConfig.filename = 'model_output' # Set file output name - # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file - # - # simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster - # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells - # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - # - # self.paramsMap["simConfig"]["hParamsTest"].append(simConfigParams) + # hParams + self.paramsMap["simConfig"]["hParamsTest"] = [] + simConfigParams = ParamsObj() + simConfigParams.simConfig.hParams = {'celsius': 6.3, 'clamp_resist': 0.001} + simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + simConfigParams.simConfig.verbose = False # Show detailed messages + simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + simConfigParams.simConfig.filename = 'model_output' # Set file output name + simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + + simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + + self.paramsMap["simConfig"]["hParamsTest"].append(simConfigParams) + + # invalid hParams + simConfigParams = ParamsObj() + simConfigParams.simConfig.hParams = {'celsius11': 6.3, 'clamp_resist': 0.001} + simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + simConfigParams.simConfig.dt = 1 # Internal integration timestep to use + simConfigParams.simConfig.verbose = False # Show detailed messages + simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + simConfigParams.simConfig.filename = 'model_output' # Set file output name + simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + + simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + + self.paramsMap["simConfig"]["hParamsTest"].append(simConfigParams) # seeds self.paramsMap["simConfig"]["seedsTest"] = [] From 0ef45b38f6dc61d1984b55bef97298304c27d97b Mon Sep 17 00:00:00 2001 From: salvdord Date: Tue, 8 Aug 2017 14:29:07 -0400 Subject: [PATCH 36/50] Fixed bug when adding stim NetStim with multiple synMechs and synsPerConn>1 --- CHANGES.md | 3 +++ examples/sandbox/sandbox.py | 37 ++++++++++++++++++++++++----------- netpyne/network.py | 39 ++++++++++++++++++++++++++++++++++++- 3 files changed, 67 insertions(+), 12 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index f2703cdd3..8baea3c19 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -20,6 +20,9 @@ - Fixed bug when adding stim NetStim where sec is a list +- Fixed bug when adding stim NetStim with multiple synMechs and synsPerConn>1 + + # Version 0.7.1 - Updates and bug fixes of NeuroML importer/exporter diff --git a/examples/sandbox/sandbox.py b/examples/sandbox/sandbox.py index 23c66a6f2..80c2d8842 100644 --- a/examples/sandbox/sandbox.py +++ b/examples/sandbox/sandbox.py @@ -48,22 +48,37 @@ # Synaptic mechanism parameters netParams.synMechParams['AMPA'] = {'mod': 'Exp2Syn', 'tau1': 0.1, 'tau2': 1.0, 'e': 0} +netParams.synMechParams['AMPA2'] = {'mod': 'Exp2Syn', 'tau1': 0.1, 'tau2': 1.0, 'e': 0} # Stimulation parameters netParams.stimSourceParams['bkg'] = {'type': 'NetStim', 'rate': 10, 'noise': 0.5, 'start': 1} netParams.stimSourceParams['bkg2'] = {'type': 'NetStim', 'rate': 10, 'noise': 0.5, 'start': 1} -netParams.stimTargetParams['bkg->PYR1'] = {'source': 'bkg', 'conds': {'pop': 'PYR'}, 'weight': 0.1, 'delay': 'uniform(1,5)'} +netParams.stimTargetParams['bkg->PYR1'] = {'source': 'bkg', 'conds': {'pop': 'PYR'}, 'weight': 0.1, 'synsPerConn':5, 'loc':0.5, 'synMech': 'AMPA', 'delay': 'uniform(1,5)'} + + + # # connect stim source to target + # for i in range(len(ns['synMech'])): + # if ns['synMech'][i] == 'AMPA': + # #ns['weight'][i] = ns['weight'][0] * cfg.ratioAMPANMDA + # cur_weight = list(np.array(cur_weight) * cfg.ratioAMPANMDA) + # for curpop in ic['pop']: + # netParams.stimTargetParams[nslabel+'_'+curpop+'_'+ns['synMech'][i]] = \ + # {'source': nslabel, 'conds': {'popLabel': ns['pop']}, 'sec': ns['sec'], 'synsPerConn': numActiveSpines, 'loc': cur_loc, 'synMech': ns['synMech'][i], 'weight': cur_weight, 'delay': cur_delay} + # Connectivity parameters -netParams.connParams['PYR->PYR'] = { - 'preConds': {'pop': 'PYR'}, 'postConds': {'pop': ['PYR','PYR2']}, - 'weight': 0.002, # weight of each connection - 'delay': '0.2+normal(13.0,1.4)', # delay min=0.2, mean=13.0, var = 1.4 - 'threshold': 10, # threshold - 'convergence': 'uniform(1,15)'} # convergence (num presyn targeting postsyn) is uniformly distributed between 1 and 15 +# netParams.connParams['PYR->PYR'] = { +# 'preConds': {'pop': 'PYR'}, 'postConds': {'pop': ['PYR','PYR2']}, +# 'weight': 0.002, # weight of each connection +# 'delay': '0.2+normal(13.0,1.4)', # delay min=0.2, mean=13.0, var = 1.4 +# 'threshold': 10, # threshold +# 'synsPerCon': 5, +# 'synMech': ['AMPA', 'AMPA2'], +# 'sec': 'soma', +# 'convergence': 'uniform(1,15)'} # convergence (num presyn targeting postsyn) is uniformly distributed between 1 and 15 ############################################################################### @@ -72,8 +87,8 @@ # Simulation parameters simConfig.duration = 1*1e3 # Duration of the simulation, in ms -simConfig.dt = 'a' # Internal integration timestep to use -simConfig.seeds = {'con': 1, 'stim': 1, 'loc': 1} # Seeds for randomizers (connectivity, input stimulation and cell locations) +simConfig.dt = 0.05 # Internal integration timestep to use +simConfig.seeds = {'conn': 1, 'stim': 1, 'loc': 1} # Seeds for randomizers (connectivity, input stimulation and cell locations) simConfig.createNEURONObj = 1 # create HOC objects when instantiating network simConfig.createPyStruct = 1 # create Python structure (simulator-independent) when instantiating network simConfig.verbose = False # show detailed messages @@ -82,7 +97,7 @@ # Recording simConfig.recordCells = [] # which cells to record from -simConfig.recordTraces = {'Vsoma':{'se':'soma','loc':0.5,'var':'v','conds': {'cellType': 'PYR2'}}} +simConfig.recordTraces = {'Vsoma':{'sec':'soma','loc':0.5,'var':'v','conds': {'cellType': 'PYR2'}}} simConfig.recordStim = True # record spikes of cell stims simConfig.recordStep = 0.1 # Step size in ms to save data (eg. V traces, LFP, etc) @@ -93,7 +108,7 @@ simConfig.saveMat = True # Analysis and plotting -simConfig.analysis['plotRaster'] = {'bla':1} +simConfig.analysis['plotRaster'] = True # {'saveFig':1} #simConfig.analysis['plotTraces'] = {'include': ['all'], 'oneFigPer':'trace'} sim.createSimulateAnalyze() diff --git a/netpyne/network.py b/netpyne/network.py index 165112d91..8c2e1abc0 100644 --- a/netpyne/network.py +++ b/netpyne/network.py @@ -153,7 +153,10 @@ def addStims (self): for sourceParam in source: # copy source params params[sourceParam] = strParams[sourceParam+'List'][postCellGid] if sourceParam+'List' in strParams else source.get(sourceParam) - postCell.addStim(params) # call cell method to add connections + if source['type'] == 'NetStim': + self._addCellStim(params, postCell) # call method to add connections (sort out synMechs first) + else: + postCell.addStim(params) # call cell method to add connection print(' Number of stims on node %i: %i ' % (sim.rank, sum([len(cell.stims) for cell in self.cells]))) sim.pc.barrier() @@ -164,6 +167,40 @@ def addStims (self): + ############################################################################### + ### Set parameters and add stim + ############################################################################### + def _addCellStim (self, stimParam, postCell): + + # convert synMech param to list (if not already) + if not isinstance(stimParam.get('synMech'), list): + stimParam['synMech'] = [stimParam.get('synMech')] + + + # generate dict with final params for each synMech + paramPerSynMech = ['weight', 'delay', 'loc'] + finalParam = {} + for i, synMech in enumerate(stimParam.get('synMech')): + + for param in paramPerSynMech: + finalParam[param+'SynMech'] = finalParam.get(param) + if len(stimParam['synMech']) > 1: + if isinstance (stimParam.get(param), list): # get weight from list for each synMech + finalParam[param+'SynMech'] = finalParam[param][i] + elif 'synMech'+param+'Factor' in stimParam: # adapt weight for each synMech + finalParam[param+'SynMech'] = finalParam[param] * stimParam['synMech'+param+'Factor'][i] + + params = {k: stimParam.get(k) for k,v in stimParam.iteritems()} + + params['synMech'] = synMech + params['loc'] = finalParam['locSynMech'] + params['weight'] = finalParam['weightSynMech'] + params['delay'] = finalParam['delaySynMech'] + + postCell.addStim(params=params) + + + ############################################################################### # Convert stim param string to function ############################################################################### From 50309a6f1dffbf9805b490335da43f8935ac6f3b Mon Sep 17 00:00:00 2001 From: salvdord Date: Tue, 8 Aug 2017 15:02:46 -0400 Subject: [PATCH 37/50] Fixed bug when adding stim NetStim with multiple synMechs and synsPerConn>1 --- netpyne/network.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/netpyne/network.py b/netpyne/network.py index 8c2e1abc0..1f9d2e71b 100644 --- a/netpyne/network.py +++ b/netpyne/network.py @@ -166,7 +166,6 @@ def addStims (self): return [cell.stims for cell in self.cells] - ############################################################################### ### Set parameters and add stim ############################################################################### @@ -187,8 +186,8 @@ def _addCellStim (self, stimParam, postCell): if len(stimParam['synMech']) > 1: if isinstance (stimParam.get(param), list): # get weight from list for each synMech finalParam[param+'SynMech'] = finalParam[param][i] - elif 'synMech'+param+'Factor' in stimParam: # adapt weight for each synMech - finalParam[param+'SynMech'] = finalParam[param] * stimParam['synMech'+param+'Factor'][i] + elif 'synMech'+param.title()+'Factor' in stimParam: # adapt weight for each synMech + finalParam[param+'SynMech'] = finalParam[param] * stimParam['synMech'+param.title()+'Factor'][i] params = {k: stimParam.get(k) for k,v in stimParam.iteritems()} @@ -858,8 +857,9 @@ def _addCellConn (self, connParam, preCellGid, postCellGid): if len(connParam['synMech']) > 1: if isinstance (finalParam.get(param), list): # get weight from list for each synMech finalParam[param+'SynMech'] = finalParam[param][i] - elif 'synMech'+param+'Factor' in connParam: # adapt weight for each synMech - finalParam[param+'SynMech'] = finalParam[param] * connParam['synMech'+param+'Factor'][i] + elif 'synMech'+param.title()+'Factor' in connParam: # adapt weight for each synMech + finalParam[param+'SynMech'] = finalParam[param] * connParam['synMech'+param.title()+'Factor'][i] + print finalParam[param+'SynMech'] params = {'preGid': preCellGid, 'sec': connParam.get('sec'), From c220b5e9d8cd827a06be0ba3e8a002c2b59d7833 Mon Sep 17 00:00:00 2001 From: salvdord Date: Tue, 8 Aug 2017 15:04:10 -0400 Subject: [PATCH 38/50] Fixed bug: synMechFraction had no effect; replaced with synMechWeightFactor --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 8baea3c19..ba901a585 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,6 +14,8 @@ - Added option to set grouped params in Batch constructor +- Fixed bug: synMechFraction had no effect; replaced with synMechWeightFactor + - Fixed bug in modifyStims for NetStim 'interval' and 'rate' - Fixed bug importing cell -- use h.pop_section() to avoid stack overflow From 1acfc0b6af6b29a63602bbccc0bb310478a0c8dc Mon Sep 17 00:00:00 2001 From: salvdord Date: Tue, 8 Aug 2017 15:58:04 -0400 Subject: [PATCH 39/50] remove debugging prints --- netpyne/network.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/netpyne/network.py b/netpyne/network.py index 1f9d2e71b..c3fcd9a1c 100644 --- a/netpyne/network.py +++ b/netpyne/network.py @@ -144,6 +144,9 @@ def addStims (self): params['delay'] = strParams['delayList'][postCellGid] if 'delayList' in strParams else target.get('delay', 1.0) params['synsPerConn'] = strParams['synsPerConnList'][postCellGid] if 'synsPerConnList' in strParams else target.get('synsPerConn', 1) params['synMech'] = target.get('synMech', None) + for p in ['Weight', 'Delay', 'loc']: + if 'synMech'+p+'Factor' in target: + params['synMech'+p+'Factor'] = target.get('synMech'+p+'Factor') if 'originalFormat' in source and source['originalFormat'] == 'NeuroML2': @@ -185,9 +188,9 @@ def _addCellStim (self, stimParam, postCell): finalParam[param+'SynMech'] = finalParam.get(param) if len(stimParam['synMech']) > 1: if isinstance (stimParam.get(param), list): # get weight from list for each synMech - finalParam[param+'SynMech'] = finalParam[param][i] + finalParam[param+'SynMech'] = stimParam[param][i] elif 'synMech'+param.title()+'Factor' in stimParam: # adapt weight for each synMech - finalParam[param+'SynMech'] = finalParam[param] * stimParam['synMech'+param.title()+'Factor'][i] + finalParam[param+'SynMech'] = stimParam[param] * stimParam['synMech'+param.title()+'Factor'][i] params = {k: stimParam.get(k) for k,v in stimParam.iteritems()} @@ -859,7 +862,6 @@ def _addCellConn (self, connParam, preCellGid, postCellGid): finalParam[param+'SynMech'] = finalParam[param][i] elif 'synMech'+param.title()+'Factor' in connParam: # adapt weight for each synMech finalParam[param+'SynMech'] = finalParam[param] * connParam['synMech'+param.title()+'Factor'][i] - print finalParam[param+'SynMech'] params = {'preGid': preCellGid, 'sec': connParam.get('sec'), From 9f82ce6f415da8050287e798a50a492bb774587e Mon Sep 17 00:00:00 2001 From: salvdord Date: Tue, 8 Aug 2017 16:31:44 -0400 Subject: [PATCH 40/50] record t using cfg.recordStep; add option to not record t --- CHANGES.md | 2 ++ netpyne/simFuncs.py | 4 ++-- netpyne/specs.py | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index ba901a585..62fab0ad8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,6 +14,8 @@ - Added option to set grouped params in Batch constructor +- Added option to not record time (to reduce output file size) + - Fixed bug: synMechFraction had no effect; replaced with synMechWeightFactor - Fixed bug in modifyStims for NetStim 'interval' and 'rate' diff --git a/netpyne/simFuncs.py b/netpyne/simFuncs.py index 77d4dd3aa..1bb463256 100644 --- a/netpyne/simFuncs.py +++ b/netpyne/simFuncs.py @@ -746,10 +746,10 @@ def setupRecording (): for cell in cellsRecord: cell.recordTraces() # call recordTraces function for each cell # record h.t - if len(sim.simData) > 0: + if sim.cfg.recordTime and len(sim.simData) > 0: try: sim.simData['t'] = h.Vector() #sim.cfg.duration/sim.cfg.recordStep+1).resize(0) - sim.simData['t'].record(h._ref_t) + sim.simData['t'].record(h._ref_t, sim.cfg.recordStep) except: if sim.cfg.verbose: 'Error recording h.t (could be due to no sections existing)' diff --git a/netpyne/specs.py b/netpyne/specs.py index f3d692c3a..c9adb6838 100644 --- a/netpyne/specs.py +++ b/netpyne/specs.py @@ -479,6 +479,7 @@ def __init__(self, simConfigDict = None): self.recordTraces = {} # Dict of traces to record self.recordStim = False # record spikes of cell stims self.recordStep = 0.1 # Step size in ms to save data (eg. V traces, LFP, etc) + self.recordTime = True # record time step of recording # Saving self.simLabel = '' # name of simulation (used as filename if none provided) From b70151c1d62622630d68770c2c2b2ed6448d7977 Mon Sep 17 00:00:00 2001 From: salvdord Date: Tue, 8 Aug 2017 18:12:02 -0400 Subject: [PATCH 41/50] fixed netstim stim weights not being set --- netpyne/network.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/netpyne/network.py b/netpyne/network.py index c3fcd9a1c..b9289f4e5 100644 --- a/netpyne/network.py +++ b/netpyne/network.py @@ -185,7 +185,7 @@ def _addCellStim (self, stimParam, postCell): for i, synMech in enumerate(stimParam.get('synMech')): for param in paramPerSynMech: - finalParam[param+'SynMech'] = finalParam.get(param) + finalParam[param+'SynMech'] = stimParam.get(param) if len(stimParam['synMech']) > 1: if isinstance (stimParam.get(param), list): # get weight from list for each synMech finalParam[param+'SynMech'] = stimParam[param][i] @@ -199,6 +199,7 @@ def _addCellStim (self, stimParam, postCell): params['weight'] = finalParam['weightSynMech'] params['delay'] = finalParam['delaySynMech'] + print params postCell.addStim(params=params) From b0cd8e702393341e9234bab0c7871b91bb8bcad0 Mon Sep 17 00:00:00 2001 From: salvdord Date: Tue, 8 Aug 2017 18:35:07 -0400 Subject: [PATCH 42/50] use sandbox to test error checking --- examples/sandbox/sandbox.py | 37 +++++++++++-------------------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/examples/sandbox/sandbox.py b/examples/sandbox/sandbox.py index 80c2d8842..23c66a6f2 100644 --- a/examples/sandbox/sandbox.py +++ b/examples/sandbox/sandbox.py @@ -48,37 +48,22 @@ # Synaptic mechanism parameters netParams.synMechParams['AMPA'] = {'mod': 'Exp2Syn', 'tau1': 0.1, 'tau2': 1.0, 'e': 0} -netParams.synMechParams['AMPA2'] = {'mod': 'Exp2Syn', 'tau1': 0.1, 'tau2': 1.0, 'e': 0} # Stimulation parameters netParams.stimSourceParams['bkg'] = {'type': 'NetStim', 'rate': 10, 'noise': 0.5, 'start': 1} netParams.stimSourceParams['bkg2'] = {'type': 'NetStim', 'rate': 10, 'noise': 0.5, 'start': 1} -netParams.stimTargetParams['bkg->PYR1'] = {'source': 'bkg', 'conds': {'pop': 'PYR'}, 'weight': 0.1, 'synsPerConn':5, 'loc':0.5, 'synMech': 'AMPA', 'delay': 'uniform(1,5)'} - - - # # connect stim source to target - # for i in range(len(ns['synMech'])): - # if ns['synMech'][i] == 'AMPA': - # #ns['weight'][i] = ns['weight'][0] * cfg.ratioAMPANMDA - # cur_weight = list(np.array(cur_weight) * cfg.ratioAMPANMDA) - # for curpop in ic['pop']: - # netParams.stimTargetParams[nslabel+'_'+curpop+'_'+ns['synMech'][i]] = \ - # {'source': nslabel, 'conds': {'popLabel': ns['pop']}, 'sec': ns['sec'], 'synsPerConn': numActiveSpines, 'loc': cur_loc, 'synMech': ns['synMech'][i], 'weight': cur_weight, 'delay': cur_delay} - +netParams.stimTargetParams['bkg->PYR1'] = {'source': 'bkg', 'conds': {'pop': 'PYR'}, 'weight': 0.1, 'delay': 'uniform(1,5)'} # Connectivity parameters -# netParams.connParams['PYR->PYR'] = { -# 'preConds': {'pop': 'PYR'}, 'postConds': {'pop': ['PYR','PYR2']}, -# 'weight': 0.002, # weight of each connection -# 'delay': '0.2+normal(13.0,1.4)', # delay min=0.2, mean=13.0, var = 1.4 -# 'threshold': 10, # threshold -# 'synsPerCon': 5, -# 'synMech': ['AMPA', 'AMPA2'], -# 'sec': 'soma', -# 'convergence': 'uniform(1,15)'} # convergence (num presyn targeting postsyn) is uniformly distributed between 1 and 15 +netParams.connParams['PYR->PYR'] = { + 'preConds': {'pop': 'PYR'}, 'postConds': {'pop': ['PYR','PYR2']}, + 'weight': 0.002, # weight of each connection + 'delay': '0.2+normal(13.0,1.4)', # delay min=0.2, mean=13.0, var = 1.4 + 'threshold': 10, # threshold + 'convergence': 'uniform(1,15)'} # convergence (num presyn targeting postsyn) is uniformly distributed between 1 and 15 ############################################################################### @@ -87,8 +72,8 @@ # Simulation parameters simConfig.duration = 1*1e3 # Duration of the simulation, in ms -simConfig.dt = 0.05 # Internal integration timestep to use -simConfig.seeds = {'conn': 1, 'stim': 1, 'loc': 1} # Seeds for randomizers (connectivity, input stimulation and cell locations) +simConfig.dt = 'a' # Internal integration timestep to use +simConfig.seeds = {'con': 1, 'stim': 1, 'loc': 1} # Seeds for randomizers (connectivity, input stimulation and cell locations) simConfig.createNEURONObj = 1 # create HOC objects when instantiating network simConfig.createPyStruct = 1 # create Python structure (simulator-independent) when instantiating network simConfig.verbose = False # show detailed messages @@ -97,7 +82,7 @@ # Recording simConfig.recordCells = [] # which cells to record from -simConfig.recordTraces = {'Vsoma':{'sec':'soma','loc':0.5,'var':'v','conds': {'cellType': 'PYR2'}}} +simConfig.recordTraces = {'Vsoma':{'se':'soma','loc':0.5,'var':'v','conds': {'cellType': 'PYR2'}}} simConfig.recordStim = True # record spikes of cell stims simConfig.recordStep = 0.1 # Step size in ms to save data (eg. V traces, LFP, etc) @@ -108,7 +93,7 @@ simConfig.saveMat = True # Analysis and plotting -simConfig.analysis['plotRaster'] = True # {'saveFig':1} +simConfig.analysis['plotRaster'] = {'bla':1} #simConfig.analysis['plotTraces'] = {'include': ['all'], 'oneFigPer':'trace'} sim.createSimulateAnalyze() From 1625e7e217a664daf29322b88cfa416ab0412b3b Mon Sep 17 00:00:00 2001 From: salvdord Date: Tue, 8 Aug 2017 22:21:22 -0400 Subject: [PATCH 43/50] remove debugging print --- netpyne/network.py | 1 - 1 file changed, 1 deletion(-) diff --git a/netpyne/network.py b/netpyne/network.py index b9289f4e5..02767c3cb 100644 --- a/netpyne/network.py +++ b/netpyne/network.py @@ -199,7 +199,6 @@ def _addCellStim (self, stimParam, postCell): params['weight'] = finalParam['weightSynMech'] params['delay'] = finalParam['delaySynMech'] - print params postCell.addStim(params=params) From 3dcdb7f2a80460f7774f5b0f8e93aa031e73400c Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Wed, 9 Aug 2017 22:17:29 -0400 Subject: [PATCH 44/50] sandbox tests --- netpyne/tests/tests.py | 6 +- netpyne/tests/validate_tests.py | 347 +++++++++++++++++--------------- 2 files changed, 193 insertions(+), 160 deletions(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index 0c5b7cceb..a37f679b1 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -254,7 +254,7 @@ def testIsList(self,val): # TEST_TYPE_IS_LIST def testIsBoolean(self,val): # TEST_TYPE_IS_BOOLEAN try: - assert (isinstance (val,bool)), "Value specified is " + str(val) + "." + assert (isinstance (val,bool) or val in [0,1]), "Value specified is " + str(val) + "." except AssertionError as e: #e.args += (,) raise @@ -1278,8 +1278,8 @@ def testValidAnalysis(self, simConfig): # TEST_TYPE_VALID_ANALYSIS if 'binSize' in plotTraces and not isinstance( plotTraces['binSize'], int): errorMessages.append("SimConfig->'analysis'->'plotTraces'->'binSize': Must be an integer. Value provided is " + str(plotTraces['binSize']) + ".") - if 'oneFigPer' in plotRaster and plotRaster['oneFigPer'] not in ['cell','trace']: - errorMessages.append("SimConfig->'analysis'->'plotTraces'->'oneFigPer': oneFigPer must be in " + str(['rate','count']) + ". Value provided is " + str(plotRaster['oneFigPer']) + ".") + if 'oneFigPer' in plotTraces and plotTraces['oneFigPer'] not in ['cell','trace']: + errorMessages.append("SimConfig->'analysis'->'plotTraces'->'oneFigPer': oneFigPer must be in " + str(['rate','count']) + ". Value provided is " + str(plotTraces['oneFigPer']) + ".") if 'rerun' in plotTraces and not isinstance( plotTraces['rerun'], bool): errorMessages.append("SimConfig->'analysis'->'plotTraces'->'rerun': Must be boolean. Value provided is " + str(plotTraces['rerun']) + ".") diff --git a/netpyne/tests/validate_tests.py b/netpyne/tests/validate_tests.py index cd35c118f..37233086e 100644 --- a/netpyne/tests/validate_tests.py +++ b/netpyne/tests/validate_tests.py @@ -38,173 +38,206 @@ def loadSimConfigTests(self): # duration self.paramsMap["simConfig"]["durationTest"] = [] simConfigParams = ParamsObj() - simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms - simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use - simConfigParams.simConfig.verbose = False # Show detailed messages - simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record - simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) - simConfigParams.simConfig.filename = 'model_output' # Set file output name - simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file - - simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster - simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells - simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - - # invalid duration - simConfigParams = ParamsObj() - simConfigParams.simConfig.duration = "s" # Duration of the simulation, in ms - simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use - simConfigParams.simConfig.verbose = False # Show detailed messages - simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record - simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) - simConfigParams.simConfig.filename = 'model_output' # Set file output name - simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file - - simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster - simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells - simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - self.paramsMap["simConfig"]["durationTest"].append(simConfigParams) + # Simulation parameters + simConfigParams.simConfig.duration = simConfigParams.simConfig.tstop = 100.0 # Duration of the simulation, in ms + simConfigParams.simConfig.dt = 0.1 # Internal integration timestep to use - # duration - self.paramsMap["simConfig"]["dtTest"] = [] - simConfigParams = ParamsObj() - simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms - simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use - simConfigParams.simConfig.verbose = False # Show detailed messages - simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record - simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) - simConfigParams.simConfig.filename = 'model_output' # Set file output name - simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + simConfigParams.simConfig.seeds = {'conn': 0, 'stim': 0, 'loc': 0} - simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster - simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells - simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + simConfigParams.simConfig.createNEURONObj = 1 # create HOC objects when instantiating network + simConfigParams.simConfig.createPyStruct = 1 # create Python structure (simulator-independent) when instantiating network + simConfigParams.simConfig.verbose = 0 # show detailed messages - self.paramsMap["simConfig"]["dtTest"].append(simConfigParams) + # Recording + simConfigParams.simConfig.recordCells = ['all'] - # invalid dt - simConfigParams = ParamsObj() - simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms - simConfigParams.simConfig.dt = "s" # Internal integration timestep to use - simConfigParams.simConfig.verbose = False # Show detailed messages - simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record - simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) - simConfigParams.simConfig.filename = 'model_output' # Set file output name - simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file - - simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster - simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells - simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - - self.paramsMap["simConfig"]["dtTest"].append(simConfigParams) - - # hParams - self.paramsMap["simConfig"]["hParamsTest"] = [] - simConfigParams = ParamsObj() - simConfigParams.simConfig.hParams = {'celsius': 6.3, 'clamp_resist': 0.001} - simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms - simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use - simConfigParams.simConfig.verbose = False # Show detailed messages - simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record - simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) - simConfigParams.simConfig.filename = 'model_output' # Set file output name - simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file - - simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster - simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells - simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - - self.paramsMap["simConfig"]["hParamsTest"].append(simConfigParams) - - # invalid hParams - simConfigParams = ParamsObj() - simConfigParams.simConfig.hParams = {'celsius11': 6.3, 'clamp_resist': 0.001} - simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms - simConfigParams.simConfig.dt = 1 # Internal integration timestep to use - simConfigParams.simConfig.verbose = False # Show detailed messages - simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record - simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) - simConfigParams.simConfig.filename = 'model_output' # Set file output name - simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file - - simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster - simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells - simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - - self.paramsMap["simConfig"]["hParamsTest"].append(simConfigParams) - - # seeds - self.paramsMap["simConfig"]["seedsTest"] = [] - simConfigParams = ParamsObj() - simConfigParams.simConfig.hParams = {'celsius': 6.3, 'clamp_resist': 0.001} - simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms - simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use - simConfigParams.simConfig.seeds ={'conn': 1, 'stim': 1, 'loc': 1} - simConfigParams.simConfig.verbose = False # Show detailed messages - simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record - simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) - simConfigParams.simConfig.filename = 'model_output' # Set file output name - simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file - - simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster - simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells - simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - - self.paramsMap["simConfig"]["seedsTest"].append(simConfigParams) - - # invalid seeds - simConfigParams = ParamsObj() - simConfigParams.simConfig.hParams = {'celsius11': 6.3, 'clamp_resist': 0.001} - simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms - simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use - # simConfigParams.simConfig.seeds ={'con': 1, 'stim': 1, 'loc': 1} - simConfigParams.simConfig.seeds ="s" + # Column: v_pop_pre_0_RS_v: Pop: pop_pre; cell: 0; segment id: $oc.segment_id; segment name: soma; Neuron loc: soma(0.5); value: v (v) + simConfigParams.simConfig.recordTraces['Volts_file__pop_pre_pop_pre_0_soma_v'] = {'sec':'soma','loc':0.5,'var':'v','conds':{'pop':'pop_pre'}}#,'cellLabel':0}} + # Column: v_pop_pre_1_RS_v: Pop: pop_pre; cell: 1; segment id: $oc.segment_id; segment name: soma; Neuron loc: soma(0.5); value: v (v) + simConfigParams.simConfig.recordTraces['Volts_file__pop_pre_pop_pre_1_soma_v'] = {'sec':'soma','loc':0.5,'var':'v','conds':{'pop':'pop_pre'}}#, 'cellLabel':1}} + # Column: v_pop_post_0_RS_v: Pop: pop_post; cell: 0; segment id: $oc.segment_id; segment name: soma; Neuron loc: soma(0.5); value: v (v) + simConfigParams.simConfig.recordTraces['Volts_file__pop_post_pop_post_0_soma_v'] = {'sec':'soma','loc':0.5,'var':'v','conds':{'pop':'pop_post'}}#, 'cellLabel':0}} - simConfigParams.simConfig.verbose = False # Show detailed messages - simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record - simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) - simConfigParams.simConfig.filename = 'model_output' # Set file output name - simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + simConfigParams.simConfig.recordStim = True # record spikes of cell stims + simConfigParams.simConfig.recordStep = simConfigParams.simConfig.dt # Step size in ms to save data (eg. V traces, LFP, etc) - simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster - simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells - simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + # Analysis and plottingsimConfig.plotRaster = True # Whether or not to plot a raster + simConfigParams.simConfig.analysis.plotTraces = {'include': ['all']} - self.paramsMap["simConfig"]["seedsTest"].append(simConfigParams) - # invalid seeds - simConfigParams = ParamsObj() - simConfigParams.simConfig.hParams = {'celsius11': 6.3, 'clamp_resist': 0.001} - simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms - simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use - simConfigParams.simConfig.seeds ={'con': 1, 'stim': 1, 'loc': 1} - #simConfigParams.simConfig.seeds ="s" - - simConfigParams.simConfig.verbose = False # Show detailed messages - simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record - simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) - simConfigParams.simConfig.filename = 'model_output' # Set file output name - simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file - - simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster - simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells - simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections - - self.paramsMap["simConfig"]["seedsTest"].append(simConfigParams) - self.paramsMap["simConfig"]["plotRasterTest"] = [] - # invalid seeds - simConfigParams = ParamsObj() - simConfigParams.simConfig.verbose = False # Show detailed messages - simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record - simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) - simConfigParams.simConfig.filename = 'model_output' # Set file output name - simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + # Saving + simConfigParams.simConfig.saveJson=1 + simConfigParams.simConfig.saveFileStep = simConfigParams.simConfig.dt # step size in ms to save data to disk - simConfigParams.simConfig.analysis['plotRaster'] = {'bla':1,'syncLines': True} # Plot a raster - simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells - simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + self.paramsMap["simConfig"]["durationTest"].append(simConfigParams) - self.paramsMap["simConfig"]["plotRasterTest"].append(simConfigParams) + # simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + # simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + # simConfigParams.simConfig.verbose = False # Show detailed messages + # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + # simConfigParams.simConfig.filename = 'model_output' # Set file output name + # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + # + # simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + # + # # invalid duration + # simConfigParams = ParamsObj() + # simConfigParams.simConfig.duration = "s" # Duration of the simulation, in ms + # simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + # simConfigParams.simConfig.verbose = False # Show detailed messages + # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + # simConfigParams.simConfig.filename = 'model_output' # Set file output name + # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + # + # simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + # + # self.paramsMap["simConfig"]["durationTest"].append(simConfigParams) + # + # # duration + # self.paramsMap["simConfig"]["dtTest"] = [] + # simConfigParams = ParamsObj() + # simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + # simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + # simConfigParams.simConfig.verbose = False # Show detailed messages + # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + # simConfigParams.simConfig.filename = 'model_output' # Set file output name + # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + # + # simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + # + # self.paramsMap["simConfig"]["dtTest"].append(simConfigParams) + # + # # invalid dt + # simConfigParams = ParamsObj() + # simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + # simConfigParams.simConfig.dt = "s" # Internal integration timestep to use + # simConfigParams.simConfig.verbose = False # Show detailed messages + # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + # simConfigParams.simConfig.filename = 'model_output' # Set file output name + # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + # + # simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + # + # self.paramsMap["simConfig"]["dtTest"].append(simConfigParams) + # + # # hParams + # self.paramsMap["simConfig"]["hParamsTest"] = [] + # simConfigParams = ParamsObj() + # simConfigParams.simConfig.hParams = {'celsius': 6.3, 'clamp_resist': 0.001} + # simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + # simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + # simConfigParams.simConfig.verbose = False # Show detailed messages + # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + # simConfigParams.simConfig.filename = 'model_output' # Set file output name + # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + # + # simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + # + # self.paramsMap["simConfig"]["hParamsTest"].append(simConfigParams) + # + # # invalid hParams + # simConfigParams = ParamsObj() + # simConfigParams.simConfig.hParams = {'celsius11': 6.3, 'clamp_resist': 0.001} + # simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + # simConfigParams.simConfig.dt = 1 # Internal integration timestep to use + # simConfigParams.simConfig.verbose = False # Show detailed messages + # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + # simConfigParams.simConfig.filename = 'model_output' # Set file output name + # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + # + # simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + # + # self.paramsMap["simConfig"]["hParamsTest"].append(simConfigParams) + # + # # seeds + # self.paramsMap["simConfig"]["seedsTest"] = [] + # simConfigParams = ParamsObj() + # simConfigParams.simConfig.hParams = {'celsius': 6.3, 'clamp_resist': 0.001} + # simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + # simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + # simConfigParams.simConfig.seeds ={'conn': 1, 'stim': 1, 'loc': 1} + # simConfigParams.simConfig.verbose = False # Show detailed messages + # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + # simConfigParams.simConfig.filename = 'model_output' # Set file output name + # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + # + # simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + # + # self.paramsMap["simConfig"]["seedsTest"].append(simConfigParams) + # + # # invalid seeds + # simConfigParams = ParamsObj() + # simConfigParams.simConfig.hParams = {'celsius11': 6.3, 'clamp_resist': 0.001} + # simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + # simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + # # simConfigParams.simConfig.seeds ={'con': 1, 'stim': 1, 'loc': 1} + # simConfigParams.simConfig.seeds ="s" + # + # simConfigParams.simConfig.verbose = False # Show detailed messages + # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + # simConfigParams.simConfig.filename = 'model_output' # Set file output name + # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + # + # simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + # + # self.paramsMap["simConfig"]["seedsTest"].append(simConfigParams) + # # invalid seeds + # simConfigParams = ParamsObj() + # simConfigParams.simConfig.hParams = {'celsius11': 6.3, 'clamp_resist': 0.001} + # simConfigParams.simConfig.duration = 0.5*1e3 # Duration of the simulation, in ms + # simConfigParams.simConfig.dt = 0.025 # Internal integration timestep to use + # simConfigParams.simConfig.seeds ={'con': 1, 'stim': 1, 'loc': 1} + # #simConfigParams.simConfig.seeds ="s" + # + # simConfigParams.simConfig.verbose = False # Show detailed messages + # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + # simConfigParams.simConfig.filename = 'model_output' # Set file output name + # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + # + # simConfigParams.simConfig.analysis['plotRaster'] = {'syncLines': True} # Plot a raster + # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + # + # self.paramsMap["simConfig"]["seedsTest"].append(simConfigParams) + # self.paramsMap["simConfig"]["plotRasterTest"] = [] + # # invalid seeds + # simConfigParams = ParamsObj() + # simConfigParams.simConfig.verbose = False # Show detailed messages + # simConfigParams.simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}} # Dict with traces to record + # simConfigParams.simConfig.recordStep = 1 # Step size in ms to save data (eg. V traces, LFP, etc) + # simConfigParams.simConfig.filename = 'model_output' # Set file output name + # simConfigParams.simConfig.savePickle = False # Save params, network and sim output to pickle file + # + # simConfigParams.simConfig.analysis['plotRaster'] = {'bla':1,'syncLines': True} # Plot a raster + # simConfigParams.simConfig.analysis['plotTraces'] = {'include': [1]} # Plot recorded traces for this list of cells + # simConfigParams.simConfig.analysis['plot2Dnet'] = True # plot 2D visualization of cell positions and connections + # + # self.paramsMap["simConfig"]["plotRasterTest"].append(simConfigParams) def loadTestsWithParams(self): From b218d0bc1536b9325b8c78f523a95376ef5cd71f Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Wed, 9 Aug 2017 22:18:10 -0400 Subject: [PATCH 45/50] specs --- examples/sandbox/SpikingNet_netpyne_1.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 examples/sandbox/SpikingNet_netpyne_1.json diff --git a/examples/sandbox/SpikingNet_netpyne_1.json b/examples/sandbox/SpikingNet_netpyne_1.json new file mode 100644 index 000000000..14c728dc4 --- /dev/null +++ b/examples/sandbox/SpikingNet_netpyne_1.json @@ -0,0 +1 @@ +{"netpyne_version": "0.7.0", "net": {"pops": {"pop_pre": {"cellModelClass": "", "tags": {"cellModel": "RS1", "cellType": "RS", "pop": "pop_pre", "numCells": 2}, "cellGids": [0, 1]}, "pop_post": {"cellModelClass": "", "tags": {"cellModel": "RS1", "cellType": "RS", "pop": "pop_post", "numCells": 1}, "cellGids": [2]}}, "cells": [{"secs": {"soma": {"synMechs": [{"loc": 0.5, "hSyn": null, "e": 0, "label": "expsyn", "tau2": 5.0, "tau1": 0.1, "mod": "Exp2Syn"}], "hSec": null, "mechs": {"hh": {"gnabar": 0.12, "gl": 0.003, "gkbar": 0.036, "el": -70}}, "geom": {"diam": 18.8, "L": 18.8, "Ra": 123.0}}}, "stims": [{"hRandom": null, "noise": 0.0, "start": 0, "hNetStim": null, "number": 1000000000.0, "source": "Stim0_0_pop_pre_0_soma_0_5", "rate": 100, "seed": 0, "type": "NetStim"}], "tags": {"xnorm": 0.71292730264530346, "pop": "pop_pre", "label": ["RS"], "cellType": "RS", "znorm": 0.46576499578874442, "y": 14.894537787210538, "x": 71.292730264530348, "cellModel": "RS1", "z": 46.57649957887444, "ynorm": 0.14894537787210538}, "conns": [{"loc": 0.5, "hNetcon": null, "weight": 0.05, "preGid": "NetStim", "delay": 1.0, "preLabel": "Stim0_0_pop_pre_0_soma_0_5", "sec": "soma", "synMech": "expsyn"}], "gid": 0, "secLists": {}}, {"secs": {"soma": {"synMechs": [{"loc": 0.5, "hSyn": null, "e": 0, "label": "expsyn", "tau2": 5.0, "tau1": 0.1, "mod": "Exp2Syn"}], "hSec": null, "mechs": {"hh": {"gnabar": 0.12, "gl": 0.003, "gkbar": 0.036, "el": -70}}, "geom": {"diam": 18.8, "L": 18.8, "Ra": 123.0}}}, "stims": [{"hRandom": null, "noise": 0.0, "start": 0, "hNetStim": null, "number": 1000000000.0, "source": "Stim0_0_pop_pre_0_soma_0_5", "rate": 100, "seed": 0, "type": "NetStim"}], "tags": {"xnorm": 0.46904081095265204, "pop": "pop_pre", "label": ["RS"], "cellType": "RS", "znorm": 0.84546351832210465, "y": 13.515684401263556, "x": 46.904081095265205, "cellModel": "RS1", "z": 84.546351832210462, "ynorm": 0.13515684401263556}, "conns": [{"loc": 0.5, "hNetcon": null, "weight": 0.05, "preGid": "NetStim", "delay": 1.0, "preLabel": "Stim0_0_pop_pre_0_soma_0_5", "sec": "soma", "synMech": "expsyn"}], "gid": 1, "secLists": {}}, {"secs": {"soma": {"synMechs": [{"loc": 0.5, "hSyn": null, "e": 0, "label": "expsyn", "tau2": 5.0, "tau1": 0.1, "mod": "Exp2Syn"}], "hSec": null, "mechs": {"hh": {"gnabar": 0.12, "gl": 0.003, "gkbar": 0.036, "el": -70}}, "geom": {"diam": 18.8, "L": 18.8, "Ra": 123.0}}}, "stims": [], "tags": {"xnorm": 0.50705587782267114, "pop": "pop_post", "label": ["RS"], "cellType": "RS", "znorm": 0.33150863872573044, "y": 44.623076299991673, "x": 50.705587782267116, "cellModel": "RS1", "z": 33.150863872573041, "ynorm": 0.44623076299991676}, "conns": [{"loc": 0.5, "hNetcon": null, "weight": 0.1, "preGid": 0, "label": "pre->post", "delay": 5, "sec": "soma", "synMech": "expsyn", "threshold": 0}, {"loc": 0.5, "hNetcon": null, "weight": 0.1, "preGid": 1, "label": "pre->post", "delay": 5, "sec": "soma", "synMech": "expsyn", "threshold": 0}], "gid": 2, "secLists": {}}], "params": {"popTagsCopiedToCells": ["cellModel", "cellType"], "scale": 1, "connParams": {"pre->post": {"preConds": {"pop": "pop_pre"}, "weight": 0.1, "delay": 5, "synMech": "expsyn", "threshold": 0, "postConds": {"pop": "pop_post"}}}, "defaultWeight": 1, "synMechParams": {"expsyn": {"tau2": 5.0, "tau1": 0.1, "e": 0, "mod": "Exp2Syn"}}, "scaleConnWeightNetStims": 1, "sizeX": 100, "sizeY": 100, "sizeZ": 100, "scaleConnWeight": 1, "defaultThreshold": 10, "shape": "cuboid", "cellParams": {"RS": {"secs": {"soma": {"mechs": {"hh": {"gnabar": 0.12, "gl": 0.003, "gkbar": 0.036, "el": -70}}, "geom": {"diam": 18.8, "L": 18.8, "Ra": 123.0}}}, "conds": {"cellModel": "RS1", "cellType": "RS"}}}, "popParams": {"pop_pre": {"cellModel": "RS1", "cellType": "RS", "pop": "pop_pre", "numCells": 2}, "pop_post": {"cellModel": "RS1", "cellType": "RS", "pop": "pop_post", "numCells": 1}}, "_labelid": 0, "stimTargetParams": {"Stim0_0_pop_pre_0_soma_0_5": {"loc": 0.5, "conds": {"pop": "pop_pre"}, "weight": 0.05, "source": "Stim0_0_pop_pre_0_soma_0_5", "sec": "soma", "synMech": "expsyn"}}, "scaleConnWeightModels": {"__dict__": {}, "__methods__": {}, "__members__": {}}, "defaultDelay": 1, "stimSourceParams": {"Stim0_0_pop_pre_0_soma_0_5": {"rate": 100, "noise": 0.0, "type": "NetStim"}}, "propVelocity": 500.0, "subConnParams": {}}}, "simData": {"spkt": [1.900000000100001, 1.900000000100001, 7.500000000099981, 12.30000000010004, 12.30000000010004], "stims": {"cell_2": {}, "cell_1": {"Stim0_0_pop_pre_0_soma_0_5": [0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0]}, "cell_0": {"Stim0_0_pop_pre_0_soma_0_5": [0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0]}}, "avgRate": 16.666666666666668, "spkid": [0.0, 1.0, 2.0, 0.0, 1.0], "t": [0.0, 0.1, 0.2, 0.3, 0.39999999999999997, 0.49999999999999994, 0.6, 0.7000000000000001, 0.8000000000000002, 0.9000000000000002, 1.0000000000000002, 1.1000000000000003, 1.2000000000000004, 1.3000000000000005, 1.4000000000000006, 1.5000000000000007, 1.6000000000000008, 1.7000000000000008, 1.800000000000001, 1.900000000000001, 2.000000000000001, 2.1000000000000005, 2.2, 2.3, 2.3999999999999995, 2.499999999999999, 2.5999999999999988, 2.6999999999999984, 2.799999999999998, 2.8999999999999977, 2.9999999999999973, 3.099999999999997, 3.1999999999999966, 3.2999999999999963, 3.399999999999996, 3.4999999999999956, 3.599999999999995, 3.699999999999995, 3.7999999999999945, 3.899999999999994, 3.999999999999994, 4.099999999999993, 4.199999999999993, 4.299999999999993, 4.399999999999992, 4.499999999999992, 4.599999999999992, 4.699999999999991, 4.799999999999991, 4.899999999999991, 4.99999999999999, 5.09999999999999, 5.1999999999999895, 5.299999999999989, 5.399999999999989, 5.4999999999999885, 5.599999999999988, 5.699999999999988, 5.799999999999987, 5.899999999999987, 5.999999999999987, 6.099999999999986, 6.199999999999986, 6.299999999999986, 6.399999999999985, 6.499999999999985, 6.5999999999999845, 6.699999999999984, 6.799999999999984, 6.8999999999999835, 6.999999999999983, 7.099999999999983, 7.199999999999982, 7.299999999999982, 7.399999999999982, 7.499999999999981, 7.599999999999981, 7.699999999999981, 7.79999999999998, 7.89999999999998, 7.99999999999998, 8.09999999999998, 8.199999999999982, 8.299999999999983, 8.399999999999984, 8.499999999999986, 8.599999999999987, 8.699999999999989, 8.79999999999999, 8.899999999999991, 8.999999999999993, 9.099999999999994, 9.199999999999996, 9.299999999999997, 9.399999999999999, 9.5, 9.600000000000001, 9.700000000000003, 9.800000000000004, 9.900000000000006, 10.000000000000007, 10.100000000000009, 10.20000000000001, 10.300000000000011, 10.400000000000013, 10.500000000000014, 10.600000000000016, 10.700000000000017, 10.800000000000018, 10.90000000000002, 11.000000000000021, 11.100000000000023, 11.200000000000024, 11.300000000000026, 11.400000000000027, 11.500000000000028, 11.60000000000003, 11.700000000000031, 11.800000000000033, 11.900000000000034, 12.000000000000036, 12.100000000000037, 12.200000000000038, 12.30000000000004, 12.400000000000041, 12.500000000000043, 12.600000000000044, 12.700000000000045, 12.800000000000047, 12.900000000000048, 13.00000000000005, 13.100000000000051, 13.200000000000053, 13.300000000000054, 13.400000000000055, 13.500000000000057, 13.600000000000058, 13.70000000000006, 13.800000000000061, 13.900000000000063, 14.000000000000064, 14.100000000000065, 14.200000000000067, 14.300000000000068, 14.40000000000007, 14.500000000000071, 14.600000000000072, 14.700000000000074, 14.800000000000075, 14.900000000000077, 15.000000000000078, 15.10000000000008, 15.200000000000081, 15.300000000000082, 15.400000000000084, 15.500000000000085, 15.600000000000087, 15.700000000000088, 15.80000000000009, 15.900000000000091, 16.000000000000092, 16.100000000000094, 16.200000000000095, 16.300000000000097, 16.400000000000098, 16.5000000000001, 16.6000000000001, 16.700000000000102, 16.800000000000104, 16.900000000000105, 17.000000000000107, 17.100000000000108, 17.20000000000011, 17.30000000000011, 17.400000000000112, 17.500000000000114, 17.600000000000115, 17.700000000000117, 17.800000000000118, 17.90000000000012, 18.00000000000012, 18.100000000000122, 18.200000000000124, 18.300000000000125, 18.400000000000126, 18.500000000000128, 18.60000000000013, 18.70000000000013, 18.800000000000132, 18.900000000000134, 19.000000000000135, 19.100000000000136, 19.200000000000138, 19.30000000000014, 19.40000000000014, 19.500000000000142, 19.600000000000144, 19.700000000000145, 19.800000000000146, 19.900000000000148, 20.00000000000015, 20.10000000000015, 20.200000000000152, 20.300000000000153, 20.400000000000155, 20.500000000000156, 20.600000000000158, 20.70000000000016, 20.80000000000016, 20.900000000000162, 21.000000000000163, 21.100000000000165, 21.200000000000166, 21.300000000000168, 21.40000000000017, 21.50000000000017, 21.600000000000172, 21.700000000000173, 21.800000000000175, 21.900000000000176, 22.000000000000178, 22.10000000000018, 22.20000000000018, 22.300000000000182, 22.400000000000183, 22.500000000000185, 22.600000000000186, 22.700000000000188, 22.80000000000019, 22.90000000000019, 23.000000000000192, 23.100000000000193, 23.200000000000195, 23.300000000000196, 23.400000000000198, 23.5000000000002, 23.6000000000002, 23.700000000000202, 23.800000000000203, 23.900000000000205, 24.000000000000206, 24.100000000000207, 24.20000000000021, 24.30000000000021, 24.40000000000021, 24.500000000000213, 24.600000000000215, 24.700000000000216, 24.800000000000217, 24.90000000000022, 25.00000000000022, 25.10000000000022, 25.200000000000223, 25.300000000000225, 25.400000000000226, 25.500000000000227, 25.60000000000023, 25.70000000000023, 25.80000000000023, 25.900000000000233, 26.000000000000234, 26.100000000000236, 26.200000000000237, 26.30000000000024, 26.40000000000024, 26.50000000000024, 26.600000000000243, 26.700000000000244, 26.800000000000246, 26.900000000000247, 27.00000000000025, 27.10000000000025, 27.20000000000025, 27.300000000000253, 27.400000000000254, 27.500000000000256, 27.600000000000257, 27.70000000000026, 27.80000000000026, 27.90000000000026, 28.000000000000263, 28.100000000000264, 28.200000000000266, 28.300000000000267, 28.40000000000027, 28.50000000000027, 28.60000000000027, 28.700000000000273, 28.800000000000274, 28.900000000000276, 29.000000000000277, 29.10000000000028, 29.20000000000028, 29.30000000000028, 29.400000000000283, 29.500000000000284, 29.600000000000286, 29.700000000000287, 29.80000000000029, 29.90000000000029, 30.00000000000029, 30.100000000000293, 30.200000000000294, 30.300000000000296, 30.400000000000297, 30.5000000000003, 30.6000000000003, 30.7000000000003, 30.800000000000303, 30.900000000000304, 31.000000000000306, 31.100000000000307, 31.20000000000031, 31.30000000000031, 31.40000000000031, 31.500000000000313, 31.600000000000314, 31.700000000000315, 31.800000000000317, 31.90000000000032, 32.00000000000032, 32.100000000000314, 32.20000000000031, 32.3000000000003, 32.4000000000003, 32.50000000000029, 32.600000000000286, 32.70000000000028, 32.800000000000274, 32.90000000000027, 33.00000000000026, 33.10000000000026, 33.20000000000025, 33.300000000000246, 33.40000000000024, 33.500000000000234, 33.60000000000023, 33.70000000000022, 33.80000000000022, 33.90000000000021, 34.000000000000206, 34.1000000000002, 34.200000000000195, 34.30000000000019, 34.40000000000018, 34.50000000000018, 34.60000000000017, 34.700000000000166, 34.80000000000016, 34.900000000000155, 35.00000000000015, 35.10000000000014, 35.20000000000014, 35.30000000000013, 35.40000000000013, 35.50000000000012, 35.600000000000115, 35.70000000000011, 35.800000000000104, 35.9000000000001, 36.00000000000009, 36.10000000000009, 36.20000000000008, 36.300000000000075, 36.40000000000007, 36.500000000000064, 36.60000000000006, 36.70000000000005, 36.80000000000005, 36.90000000000004, 37.000000000000036, 37.10000000000003, 37.200000000000024, 37.30000000000002, 37.40000000000001, 37.50000000000001, 37.6, 37.699999999999996, 37.79999999999999, 37.899999999999984, 37.99999999999998, 38.09999999999997, 38.19999999999997, 38.29999999999996, 38.399999999999956, 38.49999999999995, 38.599999999999945, 38.69999999999994, 38.79999999999993, 38.89999999999993, 38.99999999999992, 39.099999999999916, 39.19999999999991, 39.299999999999905, 39.3999999999999, 39.49999999999989, 39.59999999999989, 39.69999999999988, 39.799999999999876, 39.89999999999987, 39.999999999999865, 40.09999999999986, 40.199999999999854, 40.29999999999985, 40.39999999999984, 40.49999999999984, 40.59999999999983, 40.699999999999825, 40.79999999999982, 40.899999999999814, 40.99999999999981, 41.0999999999998, 41.1999999999998, 41.29999999999979, 41.399999999999785, 41.49999999999978, 41.599999999999774, 41.69999999999977, 41.79999999999976, 41.89999999999976, 41.99999999999975, 42.099999999999746, 42.19999999999974, 42.299999999999734, 42.39999999999973, 42.49999999999972, 42.59999999999972, 42.69999999999971, 42.799999999999706, 42.8999999999997, 42.999999999999694, 43.09999999999969, 43.19999999999968, 43.29999999999968, 43.39999999999967, 43.499999999999666, 43.59999999999966, 43.699999999999655, 43.79999999999965, 43.89999999999964, 43.99999999999964, 44.09999999999963, 44.199999999999626, 44.29999999999962, 44.399999999999615, 44.49999999999961, 44.5999999999996, 44.6999999999996, 44.79999999999959, 44.89999999999959, 44.99999999999958, 45.099999999999575, 45.19999999999957, 45.299999999999564, 45.39999999999956, 45.49999999999955, 45.59999999999955, 45.69999999999954, 45.799999999999535, 45.89999999999953, 45.999999999999524, 46.09999999999952, 46.19999999999951, 46.29999999999951, 46.3999999999995, 46.499999999999496, 46.59999999999949, 46.699999999999484, 46.79999999999948, 46.89999999999947, 46.99999999999947, 47.09999999999946, 47.199999999999456, 47.29999999999945, 47.399999999999444, 47.49999999999944, 47.59999999999943, 47.69999999999943, 47.79999999999942, 47.899999999999416, 47.99999999999941, 48.099999999999405, 48.1999999999994, 48.29999999999939, 48.39999999999939, 48.49999999999938, 48.599999999999376, 48.69999999999937, 48.799999999999365, 48.89999999999936, 48.99999999999935, 49.09999999999935, 49.19999999999934, 49.299999999999336, 49.39999999999933, 49.499999999999325, 49.59999999999932, 49.699999999999314, 49.79999999999931, 49.8999999999993, 49.9999999999993, 50.09999999999929, 50.199999999999285, 50.29999999999928, 50.399999999999274, 50.49999999999927, 50.59999999999926, 50.69999999999926, 50.79999999999925, 50.899999999999245, 50.99999999999924, 51.099999999999234, 51.19999999999923, 51.29999999999922, 51.39999999999922, 51.49999999999921, 51.599999999999206, 51.6999999999992, 51.799999999999194, 51.89999999999919, 51.99999999999918, 52.09999999999918, 52.19999999999917, 52.299999999999166, 52.39999999999916, 52.499999999999154, 52.59999999999915, 52.69999999999914, 52.79999999999914, 52.89999999999913, 52.999999999999126, 53.09999999999912, 53.199999999999115, 53.29999999999911, 53.3999999999991, 53.4999999999991, 53.59999999999909, 53.699999999999086, 53.79999999999908, 53.899999999999075, 53.99999999999907, 54.09999999999906, 54.19999999999906, 54.29999999999905, 54.39999999999905, 54.49999999999904, 54.599999999999035, 54.69999999999903, 54.799999999999024, 54.89999999999902, 54.99999999999901, 55.09999999999901, 55.199999999999, 55.299999999998995, 55.39999999999899, 55.499999999998984, 55.59999999999898, 55.69999999999897, 55.79999999999897, 55.89999999999896, 55.999999999998956, 56.09999999999895, 56.199999999998944, 56.29999999999894, 56.39999999999893, 56.49999999999893, 56.59999999999892, 56.699999999998916, 56.79999999999891, 56.899999999998904, 56.9999999999989, 57.09999999999889, 57.19999999999889, 57.29999999999888, 57.399999999998876, 57.49999999999887, 57.599999999998865, 57.69999999999886, 57.79999999999885, 57.89999999999885, 57.99999999999884, 58.099999999998836, 58.19999999999883, 58.299999999998825, 58.39999999999882, 58.49999999999881, 58.59999999999881, 58.6999999999988, 58.799999999998796, 58.89999999999879, 58.999999999998785, 59.09999999999878, 59.199999999998774, 59.29999999999877, 59.39999999999876, 59.49999999999876, 59.59999999999875, 59.699999999998745, 59.79999999999874, 59.899999999998734, 59.99999999999873, 60.09999999999872, 60.19999999999872, 60.29999999999871, 60.399999999998705, 60.4999999999987, 60.599999999998694, 60.69999999999869, 60.79999999999868, 60.89999999999868, 60.99999999999867, 61.099999999998666, 61.19999999999866, 61.299999999998654, 61.39999999999865, 61.49999999999864, 61.59999999999864, 61.69999999999863, 61.799999999998626, 61.89999999999862, 61.999999999998614, 62.09999999999861, 62.1999999999986, 62.2999999999986, 62.39999999999859, 62.499999999998586, 62.59999999999858, 62.699999999998575, 62.79999999999857, 62.89999999999856, 62.99999999999856, 63.09999999999855, 63.199999999998546, 63.29999999999854, 63.399999999998535, 63.49999999999853, 63.59999999999852, 63.69999999999852, 63.79999999999851, 63.899999999998506, 63.9999999999985, 64.0999999999985, 64.1999999999985, 64.29999999999849, 64.39999999999849, 64.49999999999848, 64.59999999999847, 64.69999999999847, 64.79999999999846, 64.89999999999846, 64.99999999999845, 65.09999999999845, 65.19999999999844, 65.29999999999843, 65.39999999999843, 65.49999999999842, 65.59999999999842, 65.69999999999841, 65.7999999999984, 65.8999999999984, 65.9999999999984, 66.09999999999839, 66.19999999999838, 66.29999999999838, 66.39999999999837, 66.49999999999837, 66.59999999999836, 66.69999999999835, 66.79999999999835, 66.89999999999834, 66.99999999999834, 67.09999999999833, 67.19999999999833, 67.29999999999832, 67.39999999999831, 67.49999999999831, 67.5999999999983, 67.6999999999983, 67.79999999999829, 67.89999999999829, 67.99999999999828, 68.09999999999827, 68.19999999999827, 68.29999999999826, 68.39999999999826, 68.49999999999825, 68.59999999999825, 68.69999999999824, 68.79999999999824, 68.89999999999823, 68.99999999999822, 69.09999999999822, 69.19999999999821, 69.2999999999982, 69.3999999999982, 69.4999999999982, 69.59999999999819, 69.69999999999818, 69.79999999999818, 69.89999999999817, 69.99999999999817, 70.09999999999816, 70.19999999999816, 70.29999999999815, 70.39999999999814, 70.49999999999814, 70.59999999999813, 70.69999999999813, 70.79999999999812, 70.89999999999812, 70.99999999999811, 71.0999999999981, 71.1999999999981, 71.2999999999981, 71.39999999999809, 71.49999999999808, 71.59999999999808, 71.69999999999807, 71.79999999999806, 71.89999999999806, 71.99999999999805, 72.09999999999805, 72.19999999999804, 72.29999999999804, 72.39999999999803, 72.49999999999802, 72.59999999999802, 72.69999999999801, 72.79999999999801, 72.899999999998, 72.999999999998, 73.09999999999799, 73.19999999999798, 73.29999999999798, 73.39999999999797, 73.49999999999797, 73.59999999999796, 73.69999999999796, 73.79999999999795, 73.89999999999795, 73.99999999999794, 74.09999999999793, 74.19999999999793, 74.29999999999792, 74.39999999999792, 74.49999999999791, 74.5999999999979, 74.6999999999979, 74.7999999999979, 74.89999999999789, 74.99999999999788, 75.09999999999788, 75.19999999999787, 75.29999999999787, 75.39999999999786, 75.49999999999785, 75.59999999999785, 75.69999999999784, 75.79999999999784, 75.89999999999783, 75.99999999999783, 76.09999999999782, 76.19999999999781, 76.29999999999781, 76.3999999999978, 76.4999999999978, 76.59999999999779, 76.69999999999779, 76.79999999999778, 76.89999999999777, 76.99999999999777, 77.09999999999776, 77.19999999999776, 77.29999999999775, 77.39999999999775, 77.49999999999774, 77.59999999999773, 77.69999999999773, 77.79999999999772, 77.89999999999772, 77.99999999999771, 78.0999999999977, 78.1999999999977, 78.2999999999977, 78.39999999999769, 78.49999999999768, 78.59999999999768, 78.69999999999767, 78.79999999999767, 78.89999999999766, 78.99999999999766, 79.09999999999765, 79.19999999999764, 79.29999999999764, 79.39999999999763, 79.49999999999763, 79.59999999999762, 79.69999999999762, 79.79999999999761, 79.8999999999976, 79.9999999999976, 80.09999999999759, 80.19999999999759, 80.29999999999758, 80.39999999999758, 80.49999999999757, 80.59999999999756, 80.69999999999756, 80.79999999999755, 80.89999999999755, 80.99999999999754, 81.09999999999754, 81.19999999999753, 81.29999999999752, 81.39999999999752, 81.49999999999751, 81.59999999999751, 81.6999999999975, 81.7999999999975, 81.89999999999749, 81.99999999999748, 82.09999999999748, 82.19999999999747, 82.29999999999747, 82.39999999999746, 82.49999999999746, 82.59999999999745, 82.69999999999744, 82.79999999999744, 82.89999999999743, 82.99999999999743, 83.09999999999742, 83.19999999999742, 83.29999999999741, 83.3999999999974, 83.4999999999974, 83.5999999999974, 83.69999999999739, 83.79999999999738, 83.89999999999738, 83.99999999999737, 84.09999999999737, 84.19999999999736, 84.29999999999735, 84.39999999999735, 84.49999999999734, 84.59999999999734, 84.69999999999733, 84.79999999999733, 84.89999999999732, 84.99999999999731, 85.09999999999731, 85.1999999999973, 85.2999999999973, 85.39999999999729, 85.49999999999729, 85.59999999999728, 85.69999999999727, 85.79999999999727, 85.89999999999726, 85.99999999999726, 86.09999999999725, 86.19999999999725, 86.29999999999724, 86.39999999999723, 86.49999999999723, 86.59999999999722, 86.69999999999722, 86.79999999999721, 86.8999999999972, 86.9999999999972, 87.0999999999972, 87.19999999999719, 87.29999999999718, 87.39999999999718, 87.49999999999717, 87.59999999999717, 87.69999999999716, 87.79999999999715, 87.89999999999715, 87.99999999999714, 88.09999999999714, 88.19999999999713, 88.29999999999713, 88.39999999999712, 88.49999999999712, 88.59999999999711, 88.6999999999971, 88.7999999999971, 88.89999999999709, 88.99999999999709, 89.09999999999708, 89.19999999999708, 89.29999999999707, 89.39999999999706, 89.49999999999706, 89.59999999999705, 89.69999999999705, 89.79999999999704, 89.89999999999704, 89.99999999999703, 90.09999999999702, 90.19999999999702, 90.29999999999701, 90.39999999999701, 90.499999999997, 90.599999999997, 90.69999999999699, 90.79999999999698, 90.89999999999698, 90.99999999999697, 91.09999999999697, 91.19999999999696, 91.29999999999696, 91.39999999999695, 91.49999999999694, 91.59999999999694, 91.69999999999693, 91.79999999999693, 91.89999999999692, 91.99999999999692, 92.09999999999691, 92.1999999999969, 92.2999999999969, 92.3999999999969, 92.49999999999689, 92.59999999999688, 92.69999999999688, 92.79999999999687, 92.89999999999687, 92.99999999999686, 93.09999999999685, 93.19999999999685, 93.29999999999684, 93.39999999999684, 93.49999999999683, 93.59999999999683, 93.69999999999682, 93.79999999999681, 93.89999999999681, 93.9999999999968, 94.0999999999968, 94.19999999999679, 94.29999999999679, 94.39999999999678, 94.49999999999677, 94.59999999999677, 94.69999999999676, 94.79999999999676, 94.89999999999675, 94.99999999999675, 95.09999999999674, 95.19999999999673, 95.29999999999673, 95.39999999999672, 95.49999999999672, 95.59999999999671, 95.6999999999967, 95.7999999999967, 95.8999999999967, 95.99999999999669, 96.09999999999668, 96.19999999999668, 96.29999999999667, 96.39999999999667, 96.49999999999666, 96.59999999999665, 96.69999999999665, 96.79999999999664, 96.89999999999664, 96.99999999999663, 97.09999999999663, 97.19999999999662, 97.29999999999661, 97.39999999999661, 97.4999999999966, 97.5999999999966, 97.69999999999659, 97.79999999999659, 97.89999999999658, 97.99999999999658, 98.09999999999657, 98.19999999999656, 98.29999999999656, 98.39999999999655, 98.49999999999655, 98.59999999999654, 98.69999999999654, 98.79999999999653, 98.89999999999652, 98.99999999999652, 99.09999999999651, 99.1999999999965, 99.2999999999965, 99.3999999999965, 99.49999999999649, 99.59999999999648, 99.69999999999648, 99.79999999999647, 99.89999999999647, 99.99999999999646], "Volts_file__pop_pre_pop_pre_0_soma_v": {"cell_1": [-65.0, -66.35899914650287, -67.38782267224542, -68.17213966712598, -68.77104277386958, -69.22755992707039, -69.57438163390907, -69.83676347597856, -70.03435773758643, -70.1823775611781, -70.2925285620816, -70.37383619745265, -57.32012301999715, -46.30984584445645, -38.93277617175556, -33.248265435351016, -26.59557092163199, -16.627623051713137, -2.4725522566656366, 12.702278469930459, 23.165900850740236, 27.533101441131954, 27.907900772095488, 26.129446669859966, 23.162334487378637, 19.496440444582035, 15.413744920141355, 11.098006300210104, 6.676985114039261, 2.2405972893218635, -2.1487267505565324, -6.44936702323486, -10.635344241116226, -14.69161892737841, -18.61184314300663, -22.397028121067443, -26.055245225369934, -29.601947070718893, -33.06266155193012, -36.467713519173714, -39.851209750151725, -43.237940765142596, -46.628743370777485, -49.97793181591061, -53.17548354704002, -56.050599798839855, -58.42578616938828, -60.19594450190088, -61.37926239059858, -62.088699386858345, -62.467146191674814, -62.63716044882118, -62.68536436717227, -62.66607082735419, -62.61111607620463, -62.53849294995378, -62.45820555032917, -62.37580157890827, -62.29437815941235, -62.215685774158274, -62.14072755704787, -62.07008396047092, -62.00408980867925, -61.942932204467034, -61.886677578753144, -61.83535179087117, -61.788949688090234, -61.74744066502853, -61.71077379369631, -61.67888206805663, -61.65168578370656, -61.6290952005178, -61.61101264459664, -61.597334180808744, -61.58795095765328, -61.5827503010766, -61.58161661433045, -61.58443212647897, -61.591077521505134, -61.601432472147735, -61.61537609683535, -61.632787353804595, -61.653545383293135, -61.67752980629233, -61.7046209865247, -61.73470026092832, -61.76765014287211, -61.80335450151552, -61.84169872010059, -61.88256983548005, -61.92585666080852, -61.971449893029025, -62.01924220655342, -62.06911048560941, -62.12091718461531, -62.17455014275442, -62.22991055703344, -62.28690677172502, -62.34545116537911, -62.405458668495946, -62.466846123097596, -62.52953206290219, -62.59343669165896, -62.658481944420664, -62.72459157394967, -62.791691234851385, -62.85970855382236, -62.928573182350505, -62.99821683200033, -63.06857329403942, -63.139516904474114, -63.21096351335683, -52.823312529061695, -44.57265602319288, -39.420322678097875, -35.957914282305595, -32.821084819559516, -29.152581091923054, -24.535795211489884, -18.9222130589384, -12.70221178375467, -6.747745484428386, -2.1020938453441236, 0.5679599640401687, 1.2165190102484438, 0.21478319366042142, -1.9546846342191915, -4.868242647973357, -8.209085183541792, -11.758097099455181, -15.370845369435106, -18.955933883667093, -22.457877898528828, -25.84811001801287, -29.114979284734492, -32.261175364528846, -35.298540528435176, -38.24211457991159, -41.10407722188688, -43.886039877249694, -46.57090448867202, -49.116626541031806, -51.45852887406296, -53.51998227406344, -55.2371216248925, -56.58139006093879, -57.568848894427624, -58.251835760522674, -58.69890703683701, -58.97660369430231, -59.13982586409274, -59.22884926292891, -59.27153126962762, -59.28625024974979, -59.284792698561645, -59.27461077838343, -59.26039441462845, -59.2451003224655, -59.23060253960562, -59.218096141105725, -59.20834589494298, -59.20183949694418, -59.19888267075886, -59.19965893658194, -59.20426783372661, -59.212749891702074, -59.22510334385631, -59.24129560555677, -59.261271362249076, -59.28495840906413, -59.31227196039322, -59.34311789091966, -59.37739521162715, -59.41499798556337, -59.45581682517025, -59.4997400718896, -59.54665473123276, -59.59644721758789, -59.649003949693785, -59.704211828072516, -59.76195861860543, -59.82213326109988, -59.88462611763259, -59.949329172328085, -60.01613619180307, -60.08492371318521, -60.15552028551227, -60.227802645002996, -60.301671520523826, -60.37703939893764, -60.45382448133043, -60.53194782010197, -60.611332067696, -60.69190102172489, -60.77357954611096, -60.856293654458355, -60.93997064957182, -61.02453926876949, -61.10990148523143, -61.19590982975232, -61.28247426175452, -61.369533186301574, -61.45703833126709, -61.54494707606401, -61.63321874613176, -61.721812982308975, -61.81068916519534, -61.89980634984887, -61.989123424749586, -62.078599348870654, -62.168111102528144, -62.25758022558814, -52.13203659241283, -44.11797684262783, -39.13221063058348, -35.81389998432463, -32.88044622750153, -29.555514105307854, -25.487667230918795, -20.646651685995813, -15.33159393414912, -10.181336240218055, -5.993178955258487, -3.3658191915617874, -2.4661644703826036, -3.089284767378177, -4.86608425246542, -7.425092261783796, -10.462683809108409, -13.755515329666025, -17.149686366950796, -20.544314627655794, -23.877232511665827, -27.112924034636148, -30.236693788329724, -33.24803419279171, -36.15475984790251, -38.967578151372095, -41.69363793539875, -44.329273310418564, -46.85345788105954, -49.22526218836835, -51.386455712857114, -53.27465511518788, -54.84244559276196, -56.07360702626229, -56.98800723218059, -57.63293825160197, -58.067252078269554, -58.34849905327057, -58.523943114788175, -58.62935218026324, -58.689905591785504, -58.7225739912564, -58.73850504935587, -58.74492323467567, -58.74648791194747, -58.74620752447606, -58.746033752723584, -58.74724017870379, -58.75066144477484, -58.75684413187646, -58.766142440725346, -58.77877951298883, -58.794887330771665, -58.81453317309137, -58.837737542569386, -58.86448659723144, -58.89474097553484, -58.9284422023599, -58.965517434296906, -59.005883037372016, -59.049440775345424, -59.09604821719115, -59.14558560299323, -59.19794283072989, -59.253013563112404, -59.310692749208236, -59.37087575380299, -59.43345821600318, -59.49833621379829, -59.56540653444654, -59.63456695954311, -59.70571652635799, -59.77875575205537, -59.853586818839815, -59.93011372290118, -60.008242391718404, -60.08787064484591, -60.16881714147047, -60.250963458254105, -60.33422234732833, -60.41852150838772, -60.50379547715728, -60.589981729406894, -60.677018945477876, -60.764846356417564, -60.85340360937729, -60.94263086298624, -61.03246896725782, -61.12282184986925, -61.21355265663823, -61.304582874232196, -61.39586255946248, -61.487354791539424, -61.57902779542433, -61.6708511580957, -61.76279418948001, -61.85482537371135, -61.94691234612443, -62.03902209887123, -62.13108033193822, -52.04005096293385, -44.05739454507042, -39.09513206548677, -35.80010288082723, -32.90156945541686, -29.63443314922769, -25.65583708571325, -20.937260976845344, -15.763586443826672, -10.741875491287859, -6.632751211737637, -4.020561330811871, -3.0844925803200063, -3.645657035982283, -5.355170935727002, -7.85135213974309, -10.833807418128458, -14.079690068958238, -17.433919377223983, -20.794541821308766, -24.097171394636, -27.305745625652566, -30.405006924429532, -33.393316091235455, -36.277810784186144, -39.06846519675131, -41.771547616382776, -44.38276640040218, -46.88072642800937, -49.22495268249907, -51.35848456619093, -53.221131937722234, -54.767799354704856, -55.98356976383285, -56.88877173813187, -57.529421414630285, -57.963124931077964, -58.246015959684684, -58.424256887860864, -58.532898203394915, -58.59675324087095, -58.632624733254, -58.65159734218338, -58.6608835704669, -58.665152769240194, -58.66743073695513, -58.66968720857483, -58.673211882641034, -58.67885284955915, -58.68716755394026, -58.698518847671494, -58.71313673574343, -58.7311586607364, -58.75265627753629, -58.77765363168295, -58.8061397859344, -58.8380777946614, -58.873411224166134, -58.912068985648695, -58.95396898043021, -58.999020889889984, -59.04712833649628, -59.09813612660732, -59.151917868745684, -59.20836145513936, -59.26736097102852, -59.32881307959503, -59.39261555912262, -59.458666850021814, -59.526866053070584, -59.59711310902968, -59.669309032463694, -59.743356142669874, -59.81915826860583, -59.89662092077836, -59.97565143030482, -60.056159058305866, -60.13798563893766, -60.220989931677494, -60.30507483442506, -60.3901647485948, -60.476194111105805, -60.563101758312904, -60.65082830494366, -60.739315053909095, -60.828503659181315, -60.91833613816913, -61.00875502785647, -61.09969337606202, -61.19099635454095, -61.28257747749798, -61.37438402057188, -61.46637887737146, -61.558531298425386, -61.65081238349897, -61.74319307636197, -61.835643441549436, -61.92813256764018, -62.02062875053504, -62.113078127638104, -52.0267234339068, -44.04826740947523, -39.08918276776125, -35.79745572425915, -32.904048225752554, -29.645467454348466, -25.680095191362827, -20.979670928220376, -15.827015263381753, -10.824559805373571, -6.7275441219919765, -4.11812414468382, -3.1775382272812847, -3.7300918510421415, -5.429676732420051, -7.916488985137728, -10.890612074127214, -14.12936338000246, -17.47764309614243, -20.833066344927467, -24.131032213934922, -27.33551358574407, -30.430999170326118, -33.41574499577425, -36.296801137448696, -39.0840320506643, -41.783574723677376, -44.39103261939377, -46.8849597568195, -49.22495394568982, -51.35425070779588, -53.21299489769644, -54.75644220303516, -55.96987045277503, -56.8736400936242, -57.513639352803125, -57.947261167477464, -58.23039916945321, -58.409077679917424, -58.51822651875292, -58.5825994511279, -58.61897254691345, -58.638420726539, -58.64815481499748, -58.65284588630351, -58.65552256677702, -58.65815749069972, -58.662042926930845, -58.66802910223462, -58.676675183011014, -58.68834539046784, -58.70327081528777, -58.721589763803195, -58.74337458338014, -58.76864988067114, -58.79740517897356, -58.82960391619031, -58.865189983155695, -58.90409257039338, -58.94622982394485, -58.99151164349609, -59.03984184975634, -59.091073814831766, -59.14507528963417, -59.201731650494004, -59.260936080712426, -59.32258509954919, -59.386576678377615, -59.45280958370147, -59.52118327932831, -59.591598063192414, -59.663955284262585, -59.73815756876077, -59.81410902580009, -59.891715422107325, -59.970884324478874, -60.05152521243515, -60.133485832513585, -60.216621082050764, -60.30083215777023, -60.386042857673786, -60.47218755507432, -60.55920527248615, -60.64703691232056, -60.73562409313655, -60.824908777930325, -60.91483327192739, -61.005340374121864, -61.09636734861179, -61.18775678781228, -61.27942106971625, -61.37130708218161, -61.46337770468136, -61.555602347430586, -61.64795233926737, -61.74039886965289, -61.83291224033378, -61.92546175806727, -62.01801591475459, -62.11052376307984, -52.02480416426632, -44.04691158405878, -39.08825535735996, -35.79698903099717, -32.90431596207602, -29.646971991139615, -25.68351786586472, -20.98573385140818, -15.836146644119523, -10.836518351943653, -6.741303853990498, -4.132331718297793, -3.1911292586872193, -3.742461685857007, -5.440623851761641, -7.92608689102517, -10.899005443529905, -14.136722496702268, -17.48413696247517, -20.838801571923558, -24.136084648396945, -27.33996527665981, -30.43489518045326, -33.419115369764945, -36.29966333403487, -39.086387513806116, -41.785405516941026, -44.3923052321797, -46.8856330244281, -49.2249974724694, -51.35366296527387, -53.21182428201078, -54.754789512589184, -55.96786596874324, -56.8714192262818, -57.51131879962552, -57.94492609411266, -58.228099108930124, -58.40684152002068, -58.51606510337518, -58.58051464705876, -58.61696215548278, -58.636481025610145, -58.646281780549465, -58.65103571508643, -58.65377185247914, -58.656463242530805, -58.66040252593506, -58.66644024017862, -58.675135802972285, -58.68685363589664, -58.70182498881796, -58.720188294922146, -58.74201600342931, -58.76733280364531, -58.79612828680906, -58.82836594749509, -58.86398972457314, -58.90292884998521, -58.94510150612732, -58.99041762517627, -59.038781057398715, -59.090046423712195, -59.14408062128829, -59.20076866025176, -59.26000359316109, -59.3216819191132, -59.3857016384717, -59.45196156611784, -59.52036121960734, -59.59080094974986, -59.663182155051224, -59.737407507244086, -59.813381157032076, -59.891008909225214, -59.97019836569216, -60.05085903849084, -60.13283952560909, -60.215994169302896, -60.30022392244841, -60.38545249728358, -60.47161425906632, -60.558648258184284, -60.6464954394966, -60.735097467991174, -60.82439635209372, -60.91433443936315, -61.00485456737093, -61.0958946014007, -61.187296767605304, -61.278973283262296, -61.370870982089265, -61.462952742596045, -61.555187998741395, -61.647548112935866, -61.74000431052597, -61.832526927884736, -61.925085303636976, -62.01764795834849, -62.110164356300935, -52.02453102334566, -44.04671414123907, -39.08811569393105, -35.7969132688589, -32.90434422923819, -29.647176704153683, -25.683997016846575, -20.986591640202416, -15.837445740296163, -10.838225731454116, -6.743273638369966, -4.134370171935599, -3.193083234923644, -3.744243586047416, -5.442203876311775, -7.927474857284356, -10.900221528751736, -14.13779070040949, -17.485081233610373, -20.83963693186386, -24.13682175107233, -27.340615772147526, -30.435465404019123, -33.419609527804724, -36.300083846846334, -39.0867345026126, -41.785676297093616, -44.392494854961974, -46.885735415997864, -49.225008119637266, -51.35358152871427, -53.21165770717114, -54.75455240190906, -55.967577274671775, -56.87109868963604, -57.51098346442136, -57.94458842473954, -58.2277663830157, -58.40651799513067, -58.51575239927409, -58.580213065005296, -58.61667139549949, -58.63620055912122, -58.64601103034161, -58.65077413294042, -58.65351894587236, -58.656218578042925, -58.66016572334609, -58.66621096387106, -58.674913753478116, -58.6866385426121, -58.70161660409547, -58.719986389424626, -58.74182036253366, -58.76714322467865, -58.795944576929934, -58.82818792207038, -58.86381720593441, -58.9027616664759, -58.944939491373844, -58.990260617532385, -59.03862889952379, -59.08989913748108, -59.14393810607201, -59.20063076292432, -59.259870141909126, -59.32155273931345, -59.38557655974658, -59.45184042511775, -59.5202438607797, -59.5906872252121, -59.663071924109516, -59.737300635814414, -59.81327751707528, -59.89090837824241, -59.970100826291045, -60.05076437802081, -60.13274775253274, -60.215905213239246, -60.30013767844956, -60.38536884832222, -60.47153308708669, -60.55856944920876, -60.64641888569416, -60.73502306823855, -60.82432401182879, -60.91426407013982, -61.00478608632064, -61.09582801053394, -61.1872320173832, -61.27891030159423, -61.37080968936536, -61.46289305918425, -61.5551298484676, -61.64749142446475, -61.739949017681454, -61.832472969466814, -61.9250326230273, -62.01759650305374, -62.11011413149809, -52.02449251046272, -44.04668580911001, -39.088095157107915, -35.79690155556951, -32.904347123470245, -29.647204514674804, -25.68406367057892, -20.986711985030876, -15.837628802814148, -10.838467001550908, -6.743552564249088, -4.134659315596677, -3.1933608238464615, -3.7444971033129564, -5.442429000422056, -7.927672903542756, -10.900395297369665, -14.137943549460202, -17.485216527996556, -20.839756772476044, -24.13692762414738, -27.34070931672065, -30.435547504317903, -33.41968076893339, -36.30014456269459, -39.086784700897894, -41.785715584820295, -44.39252251478038, -46.88575056798068, -49.22501010687352, -51.35357028979861, -53.211634227313375, -54.75451876765123, -55.967536202770106, -56.87105301444858, -57.51093563643268, -57.94454023868654, -58.22771888974558, -58.40647181075637, -58.51570776042221, -58.58017001797616, -58.61662989937881, -58.63616053949686, -58.64597240533587, -58.65073682450544, -58.65348288372979, -58.656183700245215, -58.66013197547772, -58.666178297846585, -58.67488212635032, -58.68660791554084, -58.70158694150954, -58.71995765836195, -58.741792532130106, -58.76711626577484, -58.79591846176989, -58.828162624070735, -58.86379269950736, -58.90273792689366, -58.944916494665165, -58.99023834040352, -59.03860731929846, -59.089878256908314, -59.14391791052264, -59.20061123032743, -59.259851247550905, -59.32153445809014, -59.385558867166075, -59.451823297694034, -59.520227276141966, -59.59067116208653, -59.66305636225064, -59.737285555922824, -59.81326290071745, -59.89089420777898, -59.97008708481483, -60.05075104930516, -60.13273483741768, -60.2158927014665, -60.30012555490309, -60.385357096196735, -60.47152168944478, -60.558558389699925, -60.64640814884614, -60.7350126395356, -60.82431387769027, -60.91425421785728, -61.004776503981525, -61.09581869811705, -61.18722296766327, -61.27890150420147, -61.370801132890314, -61.46288473222694, -61.55512174012417, -61.64748352452015, -61.73994131665364, -61.832465458580295, -61.9250252941576, -62.017589348662995, -62.11010715207939, -52.02448712038264, -44.04668178948146, -39.088092189646936, -35.79689980231291, -32.90434740775301, -29.647208290000417, -25.684072898190923, -20.98672876007678, -15.837654409621436, -10.8385008250908, -6.743591730175617, -4.134699970554394, -3.193399901020832, -3.7445328327288054, -5.442460764099469, -7.927700877980444, -10.900419869554813, -14.137965186490025, -17.48523569950955, -20.839773770560107, -24.136942655033828, -27.340722609375945, -30.435559181502484, -33.41969091162237, -36.30015321681794, -39.086791866489364, -41.78572120527734, -44.392526487561305, -46.8857527673531, -49.225010438604045, -51.35356874379926, -53.21163094211515, -54.75451403830344, -55.96753041439106, -56.871046569323575, -57.510928882725736, -57.94453343167999, -58.22771217922765, -58.40646528469371, -58.51570145283815, -58.580163935771395, -58.616624036979246, -58.636154886500975, -58.64596695023062, -58.650731556285386, -58.653477792467655, -58.65617877717941, -58.660127212904165, -58.66617368895166, -58.674877665044, -58.68660359631203, -58.70158275930815, -58.719953608506096, -58.74178861023402, -58.76711246769351, -58.79591478355661, -58.82815906194458, -58.86378924982819, -58.902734586143055, -58.944913259431914, -58.99023520737244, -59.038604285241824, -59.08987532217395, -59.14391507301472, -59.20060848690414, -59.25984859469971, -59.32153189224468, -59.38555638484706, -59.451820895564566, -59.52022495102307, -59.590668910954236, -59.66305418222678, -59.73728344426302, -59.81326085480012, -59.890892225094866, -59.97008516295888, -60.050749185968584, -60.132733032679006, -60.2158909538533, -60.300123862264776, -60.385355456147785, -60.47152009958263, -60.5585568477056, -60.64640665252468, -60.73501118682716, -60.82431246666696, -60.914252846714305, -61.004775171026616, -61.09581740331358, -61.18722170997353, -61.278900282151724, -61.37079994486345, -61.46288357660847, -61.55512061537016, -61.64748242918367, -61.739940249390855, -61.832464418147126, -61.92502427940152, -62.017588358513954, -62.11010618658029, -52.02448637045113, -44.0466812241938, -39.0880917664241, -35.796899545720244, -32.90434743387667, -29.647208802255378, -25.684074170766987, -20.986731086398393, -15.83765797069199, -10.838505537138829, -6.743597193506525, -4.134705647603113, -3.1934053629346186, -3.7445378312335125, -5.442465211759844, -7.927704798512524, -10.900423316250333, -14.137968223989294, -17.48523839302711, -20.839776160516113, -24.136944769929684, -27.340724481015084, -30.435560826854733, -33.419692341865726, -36.3001544382334, -39.086792878984255, -41.78572200078558, -44.39252705157803, -46.88575308208999, -49.22501049070946, -51.353568531708774, -53.21163048516183, -54.75451337787452, -55.96752960461062, -56.871045666784454, -57.5109279364442, -57.94453247762932, -58.22771123854997, -58.40646436981947, -58.51570056860207, -58.580163083179905, -58.61662321527379, -58.63615409423581, -58.645966185798, -58.650730818145, -58.65347707922822, -58.65617808761175, -58.66012654592664, -58.666173043606975, -58.6748770404761, -58.686602991745815, -58.70158217403304, -58.71995304186306, -58.74178806160554, -58.7671119364958, -58.7959142692337, -58.828158563963676, -58.8637887676764, -58.90273411932448, -58.94491280746566, -58.99023476979102, -59.03860386159029, -59.08987491249659, -59.14391467701454, -59.2006081041382, -59.2598482246733, -59.32153153445576, -59.38555603880593, -59.45182056080144, -59.52022462709024, -59.59066859742582, -59.66305387869744, -59.7372831503461, -59.81326057012618, -59.89089194931039, -59.97008489572484, -60.050748926959706, -60.13273278190181, -60.21589071109879, -60.3001236272299, -60.38535522849701, -60.47151987897816, -60.55855663382132, -60.6464064450519, -60.73501098547608, -60.824312271166384, -60.914252656810305, -61.0047749864809], "cell_0": [-65.0, -66.35899914650287, -67.38782267224542, -68.17213966712598, -68.77104277386958, -69.22755992707039, -69.57438163390907, -69.83676347597856, -70.03435773758643, -70.1823775611781, -70.2925285620816, -70.37383619745265, -57.32012301999715, -46.30984584445645, -38.93277617175556, -33.248265435351016, -26.59557092163199, -16.627623051713137, -2.4725522566656366, 12.702278469930459, 23.165900850740236, 27.533101441131954, 27.907900772095488, 26.129446669859966, 23.162334487378637, 19.496440444582035, 15.413744920141355, 11.098006300210104, 6.676985114039261, 2.2405972893218635, -2.1487267505565324, -6.44936702323486, -10.635344241116226, -14.69161892737841, -18.61184314300663, -22.397028121067443, -26.055245225369934, -29.601947070718893, -33.06266155193012, -36.467713519173714, -39.851209750151725, -43.237940765142596, -46.628743370777485, -49.97793181591061, -53.17548354704002, -56.050599798839855, -58.42578616938828, -60.19594450190088, -61.37926239059858, -62.088699386858345, -62.467146191674814, -62.63716044882118, -62.68536436717227, -62.66607082735419, -62.61111607620463, -62.53849294995378, -62.45820555032917, -62.37580157890827, -62.29437815941235, -62.215685774158274, -62.14072755704787, -62.07008396047092, -62.00408980867925, -61.942932204467034, -61.886677578753144, -61.83535179087117, -61.788949688090234, -61.74744066502853, -61.71077379369631, -61.67888206805663, -61.65168578370656, -61.6290952005178, -61.61101264459664, -61.597334180808744, -61.58795095765328, -61.5827503010766, -61.58161661433045, -61.58443212647897, -61.591077521505134, -61.601432472147735, -61.61537609683535, -61.632787353804595, -61.653545383293135, -61.67752980629233, -61.7046209865247, -61.73470026092832, -61.76765014287211, -61.80335450151552, -61.84169872010059, -61.88256983548005, -61.92585666080852, -61.971449893029025, -62.01924220655342, -62.06911048560941, -62.12091718461531, -62.17455014275442, -62.22991055703344, -62.28690677172502, -62.34545116537911, -62.405458668495946, -62.466846123097596, -62.52953206290219, -62.59343669165896, -62.658481944420664, -62.72459157394967, -62.791691234851385, -62.85970855382236, -62.928573182350505, -62.99821683200033, -63.06857329403942, -63.139516904474114, -63.21096351335683, -52.823312529061695, -44.57265602319288, -39.420322678097875, -35.957914282305595, -32.821084819559516, -29.152581091923054, -24.535795211489884, -18.9222130589384, -12.70221178375467, -6.747745484428386, -2.1020938453441236, 0.5679599640401687, 1.2165190102484438, 0.21478319366042142, -1.9546846342191915, -4.868242647973357, -8.209085183541792, -11.758097099455181, -15.370845369435106, -18.955933883667093, -22.457877898528828, -25.84811001801287, -29.114979284734492, -32.261175364528846, -35.298540528435176, -38.24211457991159, -41.10407722188688, -43.886039877249694, -46.57090448867202, -49.116626541031806, -51.45852887406296, -53.51998227406344, -55.2371216248925, -56.58139006093879, -57.568848894427624, -58.251835760522674, -58.69890703683701, -58.97660369430231, -59.13982586409274, -59.22884926292891, -59.27153126962762, -59.28625024974979, -59.284792698561645, -59.27461077838343, -59.26039441462845, -59.2451003224655, -59.23060253960562, -59.218096141105725, -59.20834589494298, -59.20183949694418, -59.19888267075886, -59.19965893658194, -59.20426783372661, -59.212749891702074, -59.22510334385631, -59.24129560555677, -59.261271362249076, -59.28495840906413, -59.31227196039322, -59.34311789091966, -59.37739521162715, -59.41499798556337, -59.45581682517025, -59.4997400718896, -59.54665473123276, -59.59644721758789, -59.649003949693785, -59.704211828072516, -59.76195861860543, -59.82213326109988, -59.88462611763259, -59.949329172328085, -60.01613619180307, -60.08492371318521, -60.15552028551227, -60.227802645002996, -60.301671520523826, -60.37703939893764, -60.45382448133043, -60.53194782010197, -60.611332067696, -60.69190102172489, -60.77357954611096, -60.856293654458355, -60.93997064957182, -61.02453926876949, -61.10990148523143, -61.19590982975232, -61.28247426175452, -61.369533186301574, -61.45703833126709, -61.54494707606401, -61.63321874613176, -61.721812982308975, -61.81068916519534, -61.89980634984887, -61.989123424749586, -62.078599348870654, -62.168111102528144, -62.25758022558814, -52.13203659241283, -44.11797684262783, -39.13221063058348, -35.81389998432463, -32.88044622750153, -29.555514105307854, -25.487667230918795, -20.646651685995813, -15.33159393414912, -10.181336240218055, -5.993178955258487, -3.3658191915617874, -2.4661644703826036, -3.089284767378177, -4.86608425246542, -7.425092261783796, -10.462683809108409, -13.755515329666025, -17.149686366950796, -20.544314627655794, -23.877232511665827, -27.112924034636148, -30.236693788329724, -33.24803419279171, -36.15475984790251, -38.967578151372095, -41.69363793539875, -44.329273310418564, -46.85345788105954, -49.22526218836835, -51.386455712857114, -53.27465511518788, -54.84244559276196, -56.07360702626229, -56.98800723218059, -57.63293825160197, -58.067252078269554, -58.34849905327057, -58.523943114788175, -58.62935218026324, -58.689905591785504, -58.7225739912564, -58.73850504935587, -58.74492323467567, -58.74648791194747, -58.74620752447606, -58.746033752723584, -58.74724017870379, -58.75066144477484, -58.75684413187646, -58.766142440725346, -58.77877951298883, -58.794887330771665, -58.81453317309137, -58.837737542569386, -58.86448659723144, -58.89474097553484, -58.9284422023599, -58.965517434296906, -59.005883037372016, -59.049440775345424, -59.09604821719115, -59.14558560299323, -59.19794283072989, -59.253013563112404, -59.310692749208236, -59.37087575380299, -59.43345821600318, -59.49833621379829, -59.56540653444654, -59.63456695954311, -59.70571652635799, -59.77875575205537, -59.853586818839815, -59.93011372290118, -60.008242391718404, -60.08787064484591, -60.16881714147047, -60.250963458254105, -60.33422234732833, -60.41852150838772, -60.50379547715728, -60.589981729406894, -60.677018945477876, -60.764846356417564, -60.85340360937729, -60.94263086298624, -61.03246896725782, -61.12282184986925, -61.21355265663823, -61.304582874232196, -61.39586255946248, -61.487354791539424, -61.57902779542433, -61.6708511580957, -61.76279418948001, -61.85482537371135, -61.94691234612443, -62.03902209887123, -62.13108033193822, -52.04005096293385, -44.05739454507042, -39.09513206548677, -35.80010288082723, -32.90156945541686, -29.63443314922769, -25.65583708571325, -20.937260976845344, -15.763586443826672, -10.741875491287859, -6.632751211737637, -4.020561330811871, -3.0844925803200063, -3.645657035982283, -5.355170935727002, -7.85135213974309, -10.833807418128458, -14.079690068958238, -17.433919377223983, -20.794541821308766, -24.097171394636, -27.305745625652566, -30.405006924429532, -33.393316091235455, -36.277810784186144, -39.06846519675131, -41.771547616382776, -44.38276640040218, -46.88072642800937, -49.22495268249907, -51.35848456619093, -53.221131937722234, -54.767799354704856, -55.98356976383285, -56.88877173813187, -57.529421414630285, -57.963124931077964, -58.246015959684684, -58.424256887860864, -58.532898203394915, -58.59675324087095, -58.632624733254, -58.65159734218338, -58.6608835704669, -58.665152769240194, -58.66743073695513, -58.66968720857483, -58.673211882641034, -58.67885284955915, -58.68716755394026, -58.698518847671494, -58.71313673574343, -58.7311586607364, -58.75265627753629, -58.77765363168295, -58.8061397859344, -58.8380777946614, -58.873411224166134, -58.912068985648695, -58.95396898043021, -58.999020889889984, -59.04712833649628, -59.09813612660732, -59.151917868745684, -59.20836145513936, -59.26736097102852, -59.32881307959503, -59.39261555912262, -59.458666850021814, -59.526866053070584, -59.59711310902968, -59.669309032463694, -59.743356142669874, -59.81915826860583, -59.89662092077836, -59.97565143030482, -60.056159058305866, -60.13798563893766, -60.220989931677494, -60.30507483442506, -60.3901647485948, -60.476194111105805, -60.563101758312904, -60.65082830494366, -60.739315053909095, -60.828503659181315, -60.91833613816913, -61.00875502785647, -61.09969337606202, -61.19099635454095, -61.28257747749798, -61.37438402057188, -61.46637887737146, -61.558531298425386, -61.65081238349897, -61.74319307636197, -61.835643441549436, -61.92813256764018, -62.02062875053504, -62.113078127638104, -52.0267234339068, -44.04826740947523, -39.08918276776125, -35.79745572425915, -32.904048225752554, -29.645467454348466, -25.680095191362827, -20.979670928220376, -15.827015263381753, -10.824559805373571, -6.7275441219919765, -4.11812414468382, -3.1775382272812847, -3.7300918510421415, -5.429676732420051, -7.916488985137728, -10.890612074127214, -14.12936338000246, -17.47764309614243, -20.833066344927467, -24.131032213934922, -27.33551358574407, -30.430999170326118, -33.41574499577425, -36.296801137448696, -39.0840320506643, -41.783574723677376, -44.39103261939377, -46.8849597568195, -49.22495394568982, -51.35425070779588, -53.21299489769644, -54.75644220303516, -55.96987045277503, -56.8736400936242, -57.513639352803125, -57.947261167477464, -58.23039916945321, -58.409077679917424, -58.51822651875292, -58.5825994511279, -58.61897254691345, -58.638420726539, -58.64815481499748, -58.65284588630351, -58.65552256677702, -58.65815749069972, -58.662042926930845, -58.66802910223462, -58.676675183011014, -58.68834539046784, -58.70327081528777, -58.721589763803195, -58.74337458338014, -58.76864988067114, -58.79740517897356, -58.82960391619031, -58.865189983155695, -58.90409257039338, -58.94622982394485, -58.99151164349609, -59.03984184975634, -59.091073814831766, -59.14507528963417, -59.201731650494004, -59.260936080712426, -59.32258509954919, -59.386576678377615, -59.45280958370147, -59.52118327932831, -59.591598063192414, -59.663955284262585, -59.73815756876077, -59.81410902580009, -59.891715422107325, -59.970884324478874, -60.05152521243515, -60.133485832513585, -60.216621082050764, -60.30083215777023, -60.386042857673786, -60.47218755507432, -60.55920527248615, -60.64703691232056, -60.73562409313655, -60.824908777930325, -60.91483327192739, -61.005340374121864, -61.09636734861179, -61.18775678781228, -61.27942106971625, -61.37130708218161, -61.46337770468136, -61.555602347430586, -61.64795233926737, -61.74039886965289, -61.83291224033378, -61.92546175806727, -62.01801591475459, -62.11052376307984, -52.02480416426632, -44.04691158405878, -39.08825535735996, -35.79698903099717, -32.90431596207602, -29.646971991139615, -25.68351786586472, -20.98573385140818, -15.836146644119523, -10.836518351943653, -6.741303853990498, -4.132331718297793, -3.1911292586872193, -3.742461685857007, -5.440623851761641, -7.92608689102517, -10.899005443529905, -14.136722496702268, -17.48413696247517, -20.838801571923558, -24.136084648396945, -27.33996527665981, -30.43489518045326, -33.419115369764945, -36.29966333403487, -39.086387513806116, -41.785405516941026, -44.3923052321797, -46.8856330244281, -49.2249974724694, -51.35366296527387, -53.21182428201078, -54.754789512589184, -55.96786596874324, -56.8714192262818, -57.51131879962552, -57.94492609411266, -58.228099108930124, -58.40684152002068, -58.51606510337518, -58.58051464705876, -58.61696215548278, -58.636481025610145, -58.646281780549465, -58.65103571508643, -58.65377185247914, -58.656463242530805, -58.66040252593506, -58.66644024017862, -58.675135802972285, -58.68685363589664, -58.70182498881796, -58.720188294922146, -58.74201600342931, -58.76733280364531, -58.79612828680906, -58.82836594749509, -58.86398972457314, -58.90292884998521, -58.94510150612732, -58.99041762517627, -59.038781057398715, -59.090046423712195, -59.14408062128829, -59.20076866025176, -59.26000359316109, -59.3216819191132, -59.3857016384717, -59.45196156611784, -59.52036121960734, -59.59080094974986, -59.663182155051224, -59.737407507244086, -59.813381157032076, -59.891008909225214, -59.97019836569216, -60.05085903849084, -60.13283952560909, -60.215994169302896, -60.30022392244841, -60.38545249728358, -60.47161425906632, -60.558648258184284, -60.6464954394966, -60.735097467991174, -60.82439635209372, -60.91433443936315, -61.00485456737093, -61.0958946014007, -61.187296767605304, -61.278973283262296, -61.370870982089265, -61.462952742596045, -61.555187998741395, -61.647548112935866, -61.74000431052597, -61.832526927884736, -61.925085303636976, -62.01764795834849, -62.110164356300935, -52.02453102334566, -44.04671414123907, -39.08811569393105, -35.7969132688589, -32.90434422923819, -29.647176704153683, -25.683997016846575, -20.986591640202416, -15.837445740296163, -10.838225731454116, -6.743273638369966, -4.134370171935599, -3.193083234923644, -3.744243586047416, -5.442203876311775, -7.927474857284356, -10.900221528751736, -14.13779070040949, -17.485081233610373, -20.83963693186386, -24.13682175107233, -27.340615772147526, -30.435465404019123, -33.419609527804724, -36.300083846846334, -39.0867345026126, -41.785676297093616, -44.392494854961974, -46.885735415997864, -49.225008119637266, -51.35358152871427, -53.21165770717114, -54.75455240190906, -55.967577274671775, -56.87109868963604, -57.51098346442136, -57.94458842473954, -58.2277663830157, -58.40651799513067, -58.51575239927409, -58.580213065005296, -58.61667139549949, -58.63620055912122, -58.64601103034161, -58.65077413294042, -58.65351894587236, -58.656218578042925, -58.66016572334609, -58.66621096387106, -58.674913753478116, -58.6866385426121, -58.70161660409547, -58.719986389424626, -58.74182036253366, -58.76714322467865, -58.795944576929934, -58.82818792207038, -58.86381720593441, -58.9027616664759, -58.944939491373844, -58.990260617532385, -59.03862889952379, -59.08989913748108, -59.14393810607201, -59.20063076292432, -59.259870141909126, -59.32155273931345, -59.38557655974658, -59.45184042511775, -59.5202438607797, -59.5906872252121, -59.663071924109516, -59.737300635814414, -59.81327751707528, -59.89090837824241, -59.970100826291045, -60.05076437802081, -60.13274775253274, -60.215905213239246, -60.30013767844956, -60.38536884832222, -60.47153308708669, -60.55856944920876, -60.64641888569416, -60.73502306823855, -60.82432401182879, -60.91426407013982, -61.00478608632064, -61.09582801053394, -61.1872320173832, -61.27891030159423, -61.37080968936536, -61.46289305918425, -61.5551298484676, -61.64749142446475, -61.739949017681454, -61.832472969466814, -61.9250326230273, -62.01759650305374, -62.11011413149809, -52.02449251046272, -44.04668580911001, -39.088095157107915, -35.79690155556951, -32.904347123470245, -29.647204514674804, -25.68406367057892, -20.986711985030876, -15.837628802814148, -10.838467001550908, -6.743552564249088, -4.134659315596677, -3.1933608238464615, -3.7444971033129564, -5.442429000422056, -7.927672903542756, -10.900395297369665, -14.137943549460202, -17.485216527996556, -20.839756772476044, -24.13692762414738, -27.34070931672065, -30.435547504317903, -33.41968076893339, -36.30014456269459, -39.086784700897894, -41.785715584820295, -44.39252251478038, -46.88575056798068, -49.22501010687352, -51.35357028979861, -53.211634227313375, -54.75451876765123, -55.967536202770106, -56.87105301444858, -57.51093563643268, -57.94454023868654, -58.22771888974558, -58.40647181075637, -58.51570776042221, -58.58017001797616, -58.61662989937881, -58.63616053949686, -58.64597240533587, -58.65073682450544, -58.65348288372979, -58.656183700245215, -58.66013197547772, -58.666178297846585, -58.67488212635032, -58.68660791554084, -58.70158694150954, -58.71995765836195, -58.741792532130106, -58.76711626577484, -58.79591846176989, -58.828162624070735, -58.86379269950736, -58.90273792689366, -58.944916494665165, -58.99023834040352, -59.03860731929846, -59.089878256908314, -59.14391791052264, -59.20061123032743, -59.259851247550905, -59.32153445809014, -59.385558867166075, -59.451823297694034, -59.520227276141966, -59.59067116208653, -59.66305636225064, -59.737285555922824, -59.81326290071745, -59.89089420777898, -59.97008708481483, -60.05075104930516, -60.13273483741768, -60.2158927014665, -60.30012555490309, -60.385357096196735, -60.47152168944478, -60.558558389699925, -60.64640814884614, -60.7350126395356, -60.82431387769027, -60.91425421785728, -61.004776503981525, -61.09581869811705, -61.18722296766327, -61.27890150420147, -61.370801132890314, -61.46288473222694, -61.55512174012417, -61.64748352452015, -61.73994131665364, -61.832465458580295, -61.9250252941576, -62.017589348662995, -62.11010715207939, -52.02448712038264, -44.04668178948146, -39.088092189646936, -35.79689980231291, -32.90434740775301, -29.647208290000417, -25.684072898190923, -20.98672876007678, -15.837654409621436, -10.8385008250908, -6.743591730175617, -4.134699970554394, -3.193399901020832, -3.7445328327288054, -5.442460764099469, -7.927700877980444, -10.900419869554813, -14.137965186490025, -17.48523569950955, -20.839773770560107, -24.136942655033828, -27.340722609375945, -30.435559181502484, -33.41969091162237, -36.30015321681794, -39.086791866489364, -41.78572120527734, -44.392526487561305, -46.8857527673531, -49.225010438604045, -51.35356874379926, -53.21163094211515, -54.75451403830344, -55.96753041439106, -56.871046569323575, -57.510928882725736, -57.94453343167999, -58.22771217922765, -58.40646528469371, -58.51570145283815, -58.580163935771395, -58.616624036979246, -58.636154886500975, -58.64596695023062, -58.650731556285386, -58.653477792467655, -58.65617877717941, -58.660127212904165, -58.66617368895166, -58.674877665044, -58.68660359631203, -58.70158275930815, -58.719953608506096, -58.74178861023402, -58.76711246769351, -58.79591478355661, -58.82815906194458, -58.86378924982819, -58.902734586143055, -58.944913259431914, -58.99023520737244, -59.038604285241824, -59.08987532217395, -59.14391507301472, -59.20060848690414, -59.25984859469971, -59.32153189224468, -59.38555638484706, -59.451820895564566, -59.52022495102307, -59.590668910954236, -59.66305418222678, -59.73728344426302, -59.81326085480012, -59.890892225094866, -59.97008516295888, -60.050749185968584, -60.132733032679006, -60.2158909538533, -60.300123862264776, -60.385355456147785, -60.47152009958263, -60.5585568477056, -60.64640665252468, -60.73501118682716, -60.82431246666696, -60.914252846714305, -61.004775171026616, -61.09581740331358, -61.18722170997353, -61.278900282151724, -61.37079994486345, -61.46288357660847, -61.55512061537016, -61.64748242918367, -61.739940249390855, -61.832464418147126, -61.92502427940152, -62.017588358513954, -62.11010618658029, -52.02448637045113, -44.0466812241938, -39.0880917664241, -35.796899545720244, -32.90434743387667, -29.647208802255378, -25.684074170766987, -20.986731086398393, -15.83765797069199, -10.838505537138829, -6.743597193506525, -4.134705647603113, -3.1934053629346186, -3.7445378312335125, -5.442465211759844, -7.927704798512524, -10.900423316250333, -14.137968223989294, -17.48523839302711, -20.839776160516113, -24.136944769929684, -27.340724481015084, -30.435560826854733, -33.419692341865726, -36.3001544382334, -39.086792878984255, -41.78572200078558, -44.39252705157803, -46.88575308208999, -49.22501049070946, -51.353568531708774, -53.21163048516183, -54.75451337787452, -55.96752960461062, -56.871045666784454, -57.5109279364442, -57.94453247762932, -58.22771123854997, -58.40646436981947, -58.51570056860207, -58.580163083179905, -58.61662321527379, -58.63615409423581, -58.645966185798, -58.650730818145, -58.65347707922822, -58.65617808761175, -58.66012654592664, -58.666173043606975, -58.6748770404761, -58.686602991745815, -58.70158217403304, -58.71995304186306, -58.74178806160554, -58.7671119364958, -58.7959142692337, -58.828158563963676, -58.8637887676764, -58.90273411932448, -58.94491280746566, -58.99023476979102, -59.03860386159029, -59.08987491249659, -59.14391467701454, -59.2006081041382, -59.2598482246733, -59.32153153445576, -59.38555603880593, -59.45182056080144, -59.52022462709024, -59.59066859742582, -59.66305387869744, -59.7372831503461, -59.81326057012618, -59.89089194931039, -59.97008489572484, -60.050748926959706, -60.13273278190181, -60.21589071109879, -60.3001236272299, -60.38535522849701, -60.47151987897816, -60.55855663382132, -60.6464064450519, -60.73501098547608, -60.824312271166384, -60.914252656810305, -61.0047749864809]}, "Volts_file__pop_pre_pop_pre_1_soma_v": {"cell_1": [-65.0, -66.35899914650287, -67.38782267224542, -68.17213966712598, -68.77104277386958, -69.22755992707039, -69.57438163390907, -69.83676347597856, -70.03435773758643, -70.1823775611781, -70.2925285620816, -70.37383619745265, -57.32012301999715, -46.30984584445645, -38.93277617175556, -33.248265435351016, -26.59557092163199, -16.627623051713137, -2.4725522566656366, 12.702278469930459, 23.165900850740236, 27.533101441131954, 27.907900772095488, 26.129446669859966, 23.162334487378637, 19.496440444582035, 15.413744920141355, 11.098006300210104, 6.676985114039261, 2.2405972893218635, -2.1487267505565324, -6.44936702323486, -10.635344241116226, -14.69161892737841, -18.61184314300663, -22.397028121067443, -26.055245225369934, -29.601947070718893, -33.06266155193012, -36.467713519173714, -39.851209750151725, -43.237940765142596, -46.628743370777485, -49.97793181591061, -53.17548354704002, -56.050599798839855, -58.42578616938828, -60.19594450190088, -61.37926239059858, -62.088699386858345, -62.467146191674814, -62.63716044882118, -62.68536436717227, -62.66607082735419, -62.61111607620463, -62.53849294995378, -62.45820555032917, -62.37580157890827, -62.29437815941235, -62.215685774158274, -62.14072755704787, -62.07008396047092, -62.00408980867925, -61.942932204467034, -61.886677578753144, -61.83535179087117, -61.788949688090234, -61.74744066502853, -61.71077379369631, -61.67888206805663, -61.65168578370656, -61.6290952005178, -61.61101264459664, -61.597334180808744, -61.58795095765328, -61.5827503010766, -61.58161661433045, -61.58443212647897, -61.591077521505134, -61.601432472147735, -61.61537609683535, -61.632787353804595, -61.653545383293135, -61.67752980629233, -61.7046209865247, -61.73470026092832, -61.76765014287211, -61.80335450151552, -61.84169872010059, -61.88256983548005, -61.92585666080852, -61.971449893029025, -62.01924220655342, -62.06911048560941, -62.12091718461531, -62.17455014275442, -62.22991055703344, -62.28690677172502, -62.34545116537911, -62.405458668495946, -62.466846123097596, -62.52953206290219, -62.59343669165896, -62.658481944420664, -62.72459157394967, -62.791691234851385, -62.85970855382236, -62.928573182350505, -62.99821683200033, -63.06857329403942, -63.139516904474114, -63.21096351335683, -52.823312529061695, -44.57265602319288, -39.420322678097875, -35.957914282305595, -32.821084819559516, -29.152581091923054, -24.535795211489884, -18.9222130589384, -12.70221178375467, -6.747745484428386, -2.1020938453441236, 0.5679599640401687, 1.2165190102484438, 0.21478319366042142, -1.9546846342191915, -4.868242647973357, -8.209085183541792, -11.758097099455181, -15.370845369435106, -18.955933883667093, -22.457877898528828, -25.84811001801287, -29.114979284734492, -32.261175364528846, -35.298540528435176, -38.24211457991159, -41.10407722188688, -43.886039877249694, -46.57090448867202, -49.116626541031806, -51.45852887406296, -53.51998227406344, -55.2371216248925, -56.58139006093879, -57.568848894427624, -58.251835760522674, -58.69890703683701, -58.97660369430231, -59.13982586409274, -59.22884926292891, -59.27153126962762, -59.28625024974979, -59.284792698561645, -59.27461077838343, -59.26039441462845, -59.2451003224655, -59.23060253960562, -59.218096141105725, -59.20834589494298, -59.20183949694418, -59.19888267075886, -59.19965893658194, -59.20426783372661, -59.212749891702074, -59.22510334385631, -59.24129560555677, -59.261271362249076, -59.28495840906413, -59.31227196039322, -59.34311789091966, -59.37739521162715, -59.41499798556337, -59.45581682517025, -59.4997400718896, -59.54665473123276, -59.59644721758789, -59.649003949693785, -59.704211828072516, -59.76195861860543, -59.82213326109988, -59.88462611763259, -59.949329172328085, -60.01613619180307, -60.08492371318521, -60.15552028551227, -60.227802645002996, -60.301671520523826, -60.37703939893764, -60.45382448133043, -60.53194782010197, -60.611332067696, -60.69190102172489, -60.77357954611096, -60.856293654458355, -60.93997064957182, -61.02453926876949, -61.10990148523143, -61.19590982975232, -61.28247426175452, -61.369533186301574, -61.45703833126709, -61.54494707606401, -61.63321874613176, -61.721812982308975, -61.81068916519534, -61.89980634984887, -61.989123424749586, -62.078599348870654, -62.168111102528144, -62.25758022558814, -52.13203659241283, -44.11797684262783, -39.13221063058348, -35.81389998432463, -32.88044622750153, -29.555514105307854, -25.487667230918795, -20.646651685995813, -15.33159393414912, -10.181336240218055, -5.993178955258487, -3.3658191915617874, -2.4661644703826036, -3.089284767378177, -4.86608425246542, -7.425092261783796, -10.462683809108409, -13.755515329666025, -17.149686366950796, -20.544314627655794, -23.877232511665827, -27.112924034636148, -30.236693788329724, -33.24803419279171, -36.15475984790251, -38.967578151372095, -41.69363793539875, -44.329273310418564, -46.85345788105954, -49.22526218836835, -51.386455712857114, -53.27465511518788, -54.84244559276196, -56.07360702626229, -56.98800723218059, -57.63293825160197, -58.067252078269554, -58.34849905327057, -58.523943114788175, -58.62935218026324, -58.689905591785504, -58.7225739912564, -58.73850504935587, -58.74492323467567, -58.74648791194747, -58.74620752447606, -58.746033752723584, -58.74724017870379, -58.75066144477484, -58.75684413187646, -58.766142440725346, -58.77877951298883, -58.794887330771665, -58.81453317309137, -58.837737542569386, -58.86448659723144, -58.89474097553484, -58.9284422023599, -58.965517434296906, -59.005883037372016, -59.049440775345424, -59.09604821719115, -59.14558560299323, -59.19794283072989, -59.253013563112404, -59.310692749208236, -59.37087575380299, -59.43345821600318, -59.49833621379829, -59.56540653444654, -59.63456695954311, -59.70571652635799, -59.77875575205537, -59.853586818839815, -59.93011372290118, -60.008242391718404, -60.08787064484591, -60.16881714147047, -60.250963458254105, -60.33422234732833, -60.41852150838772, -60.50379547715728, -60.589981729406894, -60.677018945477876, -60.764846356417564, -60.85340360937729, -60.94263086298624, -61.03246896725782, -61.12282184986925, -61.21355265663823, -61.304582874232196, -61.39586255946248, -61.487354791539424, -61.57902779542433, -61.6708511580957, -61.76279418948001, -61.85482537371135, -61.94691234612443, -62.03902209887123, -62.13108033193822, -52.04005096293385, -44.05739454507042, -39.09513206548677, -35.80010288082723, -32.90156945541686, -29.63443314922769, -25.65583708571325, -20.937260976845344, -15.763586443826672, -10.741875491287859, -6.632751211737637, -4.020561330811871, -3.0844925803200063, -3.645657035982283, -5.355170935727002, -7.85135213974309, -10.833807418128458, -14.079690068958238, -17.433919377223983, -20.794541821308766, -24.097171394636, -27.305745625652566, -30.405006924429532, -33.393316091235455, -36.277810784186144, -39.06846519675131, -41.771547616382776, -44.38276640040218, -46.88072642800937, -49.22495268249907, -51.35848456619093, -53.221131937722234, -54.767799354704856, -55.98356976383285, -56.88877173813187, -57.529421414630285, -57.963124931077964, -58.246015959684684, -58.424256887860864, -58.532898203394915, -58.59675324087095, -58.632624733254, -58.65159734218338, -58.6608835704669, -58.665152769240194, -58.66743073695513, -58.66968720857483, -58.673211882641034, -58.67885284955915, -58.68716755394026, -58.698518847671494, -58.71313673574343, -58.7311586607364, -58.75265627753629, -58.77765363168295, -58.8061397859344, -58.8380777946614, -58.873411224166134, -58.912068985648695, -58.95396898043021, -58.999020889889984, -59.04712833649628, -59.09813612660732, -59.151917868745684, -59.20836145513936, -59.26736097102852, -59.32881307959503, -59.39261555912262, -59.458666850021814, -59.526866053070584, -59.59711310902968, -59.669309032463694, -59.743356142669874, -59.81915826860583, -59.89662092077836, -59.97565143030482, -60.056159058305866, -60.13798563893766, -60.220989931677494, -60.30507483442506, -60.3901647485948, -60.476194111105805, -60.563101758312904, -60.65082830494366, -60.739315053909095, -60.828503659181315, -60.91833613816913, -61.00875502785647, -61.09969337606202, -61.19099635454095, -61.28257747749798, -61.37438402057188, -61.46637887737146, -61.558531298425386, -61.65081238349897, -61.74319307636197, -61.835643441549436, -61.92813256764018, -62.02062875053504, -62.113078127638104, -52.0267234339068, -44.04826740947523, -39.08918276776125, -35.79745572425915, -32.904048225752554, -29.645467454348466, -25.680095191362827, -20.979670928220376, -15.827015263381753, -10.824559805373571, -6.7275441219919765, -4.11812414468382, -3.1775382272812847, -3.7300918510421415, -5.429676732420051, -7.916488985137728, -10.890612074127214, -14.12936338000246, -17.47764309614243, -20.833066344927467, -24.131032213934922, -27.33551358574407, -30.430999170326118, -33.41574499577425, -36.296801137448696, -39.0840320506643, -41.783574723677376, -44.39103261939377, -46.8849597568195, -49.22495394568982, -51.35425070779588, -53.21299489769644, -54.75644220303516, -55.96987045277503, -56.8736400936242, -57.513639352803125, -57.947261167477464, -58.23039916945321, -58.409077679917424, -58.51822651875292, -58.5825994511279, -58.61897254691345, -58.638420726539, -58.64815481499748, -58.65284588630351, -58.65552256677702, -58.65815749069972, -58.662042926930845, -58.66802910223462, -58.676675183011014, -58.68834539046784, -58.70327081528777, -58.721589763803195, -58.74337458338014, -58.76864988067114, -58.79740517897356, -58.82960391619031, -58.865189983155695, -58.90409257039338, -58.94622982394485, -58.99151164349609, -59.03984184975634, -59.091073814831766, -59.14507528963417, -59.201731650494004, -59.260936080712426, -59.32258509954919, -59.386576678377615, -59.45280958370147, -59.52118327932831, -59.591598063192414, -59.663955284262585, -59.73815756876077, -59.81410902580009, -59.891715422107325, -59.970884324478874, -60.05152521243515, -60.133485832513585, -60.216621082050764, -60.30083215777023, -60.386042857673786, -60.47218755507432, -60.55920527248615, -60.64703691232056, -60.73562409313655, -60.824908777930325, -60.91483327192739, -61.005340374121864, -61.09636734861179, -61.18775678781228, -61.27942106971625, -61.37130708218161, -61.46337770468136, -61.555602347430586, -61.64795233926737, -61.74039886965289, -61.83291224033378, -61.92546175806727, -62.01801591475459, -62.11052376307984, -52.02480416426632, -44.04691158405878, -39.08825535735996, -35.79698903099717, -32.90431596207602, -29.646971991139615, -25.68351786586472, -20.98573385140818, -15.836146644119523, -10.836518351943653, -6.741303853990498, -4.132331718297793, -3.1911292586872193, -3.742461685857007, -5.440623851761641, -7.92608689102517, -10.899005443529905, -14.136722496702268, -17.48413696247517, -20.838801571923558, -24.136084648396945, -27.33996527665981, -30.43489518045326, -33.419115369764945, -36.29966333403487, -39.086387513806116, -41.785405516941026, -44.3923052321797, -46.8856330244281, -49.2249974724694, -51.35366296527387, -53.21182428201078, -54.754789512589184, -55.96786596874324, -56.8714192262818, -57.51131879962552, -57.94492609411266, -58.228099108930124, -58.40684152002068, -58.51606510337518, -58.58051464705876, -58.61696215548278, -58.636481025610145, -58.646281780549465, -58.65103571508643, -58.65377185247914, -58.656463242530805, -58.66040252593506, -58.66644024017862, -58.675135802972285, -58.68685363589664, -58.70182498881796, -58.720188294922146, -58.74201600342931, -58.76733280364531, -58.79612828680906, -58.82836594749509, -58.86398972457314, -58.90292884998521, -58.94510150612732, -58.99041762517627, -59.038781057398715, -59.090046423712195, -59.14408062128829, -59.20076866025176, -59.26000359316109, -59.3216819191132, -59.3857016384717, -59.45196156611784, -59.52036121960734, -59.59080094974986, -59.663182155051224, -59.737407507244086, -59.813381157032076, -59.891008909225214, -59.97019836569216, -60.05085903849084, -60.13283952560909, -60.215994169302896, -60.30022392244841, -60.38545249728358, -60.47161425906632, -60.558648258184284, -60.6464954394966, -60.735097467991174, -60.82439635209372, -60.91433443936315, -61.00485456737093, -61.0958946014007, -61.187296767605304, -61.278973283262296, -61.370870982089265, -61.462952742596045, -61.555187998741395, -61.647548112935866, -61.74000431052597, -61.832526927884736, -61.925085303636976, -62.01764795834849, -62.110164356300935, -52.02453102334566, -44.04671414123907, -39.08811569393105, -35.7969132688589, -32.90434422923819, -29.647176704153683, -25.683997016846575, -20.986591640202416, -15.837445740296163, -10.838225731454116, -6.743273638369966, -4.134370171935599, -3.193083234923644, -3.744243586047416, -5.442203876311775, -7.927474857284356, -10.900221528751736, -14.13779070040949, -17.485081233610373, -20.83963693186386, -24.13682175107233, -27.340615772147526, -30.435465404019123, -33.419609527804724, -36.300083846846334, -39.0867345026126, -41.785676297093616, -44.392494854961974, -46.885735415997864, -49.225008119637266, -51.35358152871427, -53.21165770717114, -54.75455240190906, -55.967577274671775, -56.87109868963604, -57.51098346442136, -57.94458842473954, -58.2277663830157, -58.40651799513067, -58.51575239927409, -58.580213065005296, -58.61667139549949, -58.63620055912122, -58.64601103034161, -58.65077413294042, -58.65351894587236, -58.656218578042925, -58.66016572334609, -58.66621096387106, -58.674913753478116, -58.6866385426121, -58.70161660409547, -58.719986389424626, -58.74182036253366, -58.76714322467865, -58.795944576929934, -58.82818792207038, -58.86381720593441, -58.9027616664759, -58.944939491373844, -58.990260617532385, -59.03862889952379, -59.08989913748108, -59.14393810607201, -59.20063076292432, -59.259870141909126, -59.32155273931345, -59.38557655974658, -59.45184042511775, -59.5202438607797, -59.5906872252121, -59.663071924109516, -59.737300635814414, -59.81327751707528, -59.89090837824241, -59.970100826291045, -60.05076437802081, -60.13274775253274, -60.215905213239246, -60.30013767844956, -60.38536884832222, -60.47153308708669, -60.55856944920876, -60.64641888569416, -60.73502306823855, -60.82432401182879, -60.91426407013982, -61.00478608632064, -61.09582801053394, -61.1872320173832, -61.27891030159423, -61.37080968936536, -61.46289305918425, -61.5551298484676, -61.64749142446475, -61.739949017681454, -61.832472969466814, -61.9250326230273, -62.01759650305374, -62.11011413149809, -52.02449251046272, -44.04668580911001, -39.088095157107915, -35.79690155556951, -32.904347123470245, -29.647204514674804, -25.68406367057892, -20.986711985030876, -15.837628802814148, -10.838467001550908, -6.743552564249088, -4.134659315596677, -3.1933608238464615, -3.7444971033129564, -5.442429000422056, -7.927672903542756, -10.900395297369665, -14.137943549460202, -17.485216527996556, -20.839756772476044, -24.13692762414738, -27.34070931672065, -30.435547504317903, -33.41968076893339, -36.30014456269459, -39.086784700897894, -41.785715584820295, -44.39252251478038, -46.88575056798068, -49.22501010687352, -51.35357028979861, -53.211634227313375, -54.75451876765123, -55.967536202770106, -56.87105301444858, -57.51093563643268, -57.94454023868654, -58.22771888974558, -58.40647181075637, -58.51570776042221, -58.58017001797616, -58.61662989937881, -58.63616053949686, -58.64597240533587, -58.65073682450544, -58.65348288372979, -58.656183700245215, -58.66013197547772, -58.666178297846585, -58.67488212635032, -58.68660791554084, -58.70158694150954, -58.71995765836195, -58.741792532130106, -58.76711626577484, -58.79591846176989, -58.828162624070735, -58.86379269950736, -58.90273792689366, -58.944916494665165, -58.99023834040352, -59.03860731929846, -59.089878256908314, -59.14391791052264, -59.20061123032743, -59.259851247550905, -59.32153445809014, -59.385558867166075, -59.451823297694034, -59.520227276141966, -59.59067116208653, -59.66305636225064, -59.737285555922824, -59.81326290071745, -59.89089420777898, -59.97008708481483, -60.05075104930516, -60.13273483741768, -60.2158927014665, -60.30012555490309, -60.385357096196735, -60.47152168944478, -60.558558389699925, -60.64640814884614, -60.7350126395356, -60.82431387769027, -60.91425421785728, -61.004776503981525, -61.09581869811705, -61.18722296766327, -61.27890150420147, -61.370801132890314, -61.46288473222694, -61.55512174012417, -61.64748352452015, -61.73994131665364, -61.832465458580295, -61.9250252941576, -62.017589348662995, -62.11010715207939, -52.02448712038264, -44.04668178948146, -39.088092189646936, -35.79689980231291, -32.90434740775301, -29.647208290000417, -25.684072898190923, -20.98672876007678, -15.837654409621436, -10.8385008250908, -6.743591730175617, -4.134699970554394, -3.193399901020832, -3.7445328327288054, -5.442460764099469, -7.927700877980444, -10.900419869554813, -14.137965186490025, -17.48523569950955, -20.839773770560107, -24.136942655033828, -27.340722609375945, -30.435559181502484, -33.41969091162237, -36.30015321681794, -39.086791866489364, -41.78572120527734, -44.392526487561305, -46.8857527673531, -49.225010438604045, -51.35356874379926, -53.21163094211515, -54.75451403830344, -55.96753041439106, -56.871046569323575, -57.510928882725736, -57.94453343167999, -58.22771217922765, -58.40646528469371, -58.51570145283815, -58.580163935771395, -58.616624036979246, -58.636154886500975, -58.64596695023062, -58.650731556285386, -58.653477792467655, -58.65617877717941, -58.660127212904165, -58.66617368895166, -58.674877665044, -58.68660359631203, -58.70158275930815, -58.719953608506096, -58.74178861023402, -58.76711246769351, -58.79591478355661, -58.82815906194458, -58.86378924982819, -58.902734586143055, -58.944913259431914, -58.99023520737244, -59.038604285241824, -59.08987532217395, -59.14391507301472, -59.20060848690414, -59.25984859469971, -59.32153189224468, -59.38555638484706, -59.451820895564566, -59.52022495102307, -59.590668910954236, -59.66305418222678, -59.73728344426302, -59.81326085480012, -59.890892225094866, -59.97008516295888, -60.050749185968584, -60.132733032679006, -60.2158909538533, -60.300123862264776, -60.385355456147785, -60.47152009958263, -60.5585568477056, -60.64640665252468, -60.73501118682716, -60.82431246666696, -60.914252846714305, -61.004775171026616, -61.09581740331358, -61.18722170997353, -61.278900282151724, -61.37079994486345, -61.46288357660847, -61.55512061537016, -61.64748242918367, -61.739940249390855, -61.832464418147126, -61.92502427940152, -62.017588358513954, -62.11010618658029, -52.02448637045113, -44.0466812241938, -39.0880917664241, -35.796899545720244, -32.90434743387667, -29.647208802255378, -25.684074170766987, -20.986731086398393, -15.83765797069199, -10.838505537138829, -6.743597193506525, -4.134705647603113, -3.1934053629346186, -3.7445378312335125, -5.442465211759844, -7.927704798512524, -10.900423316250333, -14.137968223989294, -17.48523839302711, -20.839776160516113, -24.136944769929684, -27.340724481015084, -30.435560826854733, -33.419692341865726, -36.3001544382334, -39.086792878984255, -41.78572200078558, -44.39252705157803, -46.88575308208999, -49.22501049070946, -51.353568531708774, -53.21163048516183, -54.75451337787452, -55.96752960461062, -56.871045666784454, -57.5109279364442, -57.94453247762932, -58.22771123854997, -58.40646436981947, -58.51570056860207, -58.580163083179905, -58.61662321527379, -58.63615409423581, -58.645966185798, -58.650730818145, -58.65347707922822, -58.65617808761175, -58.66012654592664, -58.666173043606975, -58.6748770404761, -58.686602991745815, -58.70158217403304, -58.71995304186306, -58.74178806160554, -58.7671119364958, -58.7959142692337, -58.828158563963676, -58.8637887676764, -58.90273411932448, -58.94491280746566, -58.99023476979102, -59.03860386159029, -59.08987491249659, -59.14391467701454, -59.2006081041382, -59.2598482246733, -59.32153153445576, -59.38555603880593, -59.45182056080144, -59.52022462709024, -59.59066859742582, -59.66305387869744, -59.7372831503461, -59.81326057012618, -59.89089194931039, -59.97008489572484, -60.050748926959706, -60.13273278190181, -60.21589071109879, -60.3001236272299, -60.38535522849701, -60.47151987897816, -60.55855663382132, -60.6464064450519, -60.73501098547608, -60.824312271166384, -60.914252656810305, -61.0047749864809], "cell_0": [-65.0, -66.35899914650287, -67.38782267224542, -68.17213966712598, -68.77104277386958, -69.22755992707039, -69.57438163390907, -69.83676347597856, -70.03435773758643, -70.1823775611781, -70.2925285620816, -70.37383619745265, -57.32012301999715, -46.30984584445645, -38.93277617175556, -33.248265435351016, -26.59557092163199, -16.627623051713137, -2.4725522566656366, 12.702278469930459, 23.165900850740236, 27.533101441131954, 27.907900772095488, 26.129446669859966, 23.162334487378637, 19.496440444582035, 15.413744920141355, 11.098006300210104, 6.676985114039261, 2.2405972893218635, -2.1487267505565324, -6.44936702323486, -10.635344241116226, -14.69161892737841, -18.61184314300663, -22.397028121067443, -26.055245225369934, -29.601947070718893, -33.06266155193012, -36.467713519173714, -39.851209750151725, -43.237940765142596, -46.628743370777485, -49.97793181591061, -53.17548354704002, -56.050599798839855, -58.42578616938828, -60.19594450190088, -61.37926239059858, -62.088699386858345, -62.467146191674814, -62.63716044882118, -62.68536436717227, -62.66607082735419, -62.61111607620463, -62.53849294995378, -62.45820555032917, -62.37580157890827, -62.29437815941235, -62.215685774158274, -62.14072755704787, -62.07008396047092, -62.00408980867925, -61.942932204467034, -61.886677578753144, -61.83535179087117, -61.788949688090234, -61.74744066502853, -61.71077379369631, -61.67888206805663, -61.65168578370656, -61.6290952005178, -61.61101264459664, -61.597334180808744, -61.58795095765328, -61.5827503010766, -61.58161661433045, -61.58443212647897, -61.591077521505134, -61.601432472147735, -61.61537609683535, -61.632787353804595, -61.653545383293135, -61.67752980629233, -61.7046209865247, -61.73470026092832, -61.76765014287211, -61.80335450151552, -61.84169872010059, -61.88256983548005, -61.92585666080852, -61.971449893029025, -62.01924220655342, -62.06911048560941, -62.12091718461531, -62.17455014275442, -62.22991055703344, -62.28690677172502, -62.34545116537911, -62.405458668495946, -62.466846123097596, -62.52953206290219, -62.59343669165896, -62.658481944420664, -62.72459157394967, -62.791691234851385, -62.85970855382236, -62.928573182350505, -62.99821683200033, -63.06857329403942, -63.139516904474114, -63.21096351335683, -52.823312529061695, -44.57265602319288, -39.420322678097875, -35.957914282305595, -32.821084819559516, -29.152581091923054, -24.535795211489884, -18.9222130589384, -12.70221178375467, -6.747745484428386, -2.1020938453441236, 0.5679599640401687, 1.2165190102484438, 0.21478319366042142, -1.9546846342191915, -4.868242647973357, -8.209085183541792, -11.758097099455181, -15.370845369435106, -18.955933883667093, -22.457877898528828, -25.84811001801287, -29.114979284734492, -32.261175364528846, -35.298540528435176, -38.24211457991159, -41.10407722188688, -43.886039877249694, -46.57090448867202, -49.116626541031806, -51.45852887406296, -53.51998227406344, -55.2371216248925, -56.58139006093879, -57.568848894427624, -58.251835760522674, -58.69890703683701, -58.97660369430231, -59.13982586409274, -59.22884926292891, -59.27153126962762, -59.28625024974979, -59.284792698561645, -59.27461077838343, -59.26039441462845, -59.2451003224655, -59.23060253960562, -59.218096141105725, -59.20834589494298, -59.20183949694418, -59.19888267075886, -59.19965893658194, -59.20426783372661, -59.212749891702074, -59.22510334385631, -59.24129560555677, -59.261271362249076, -59.28495840906413, -59.31227196039322, -59.34311789091966, -59.37739521162715, -59.41499798556337, -59.45581682517025, -59.4997400718896, -59.54665473123276, -59.59644721758789, -59.649003949693785, -59.704211828072516, -59.76195861860543, -59.82213326109988, -59.88462611763259, -59.949329172328085, -60.01613619180307, -60.08492371318521, -60.15552028551227, -60.227802645002996, -60.301671520523826, -60.37703939893764, -60.45382448133043, -60.53194782010197, -60.611332067696, -60.69190102172489, -60.77357954611096, -60.856293654458355, -60.93997064957182, -61.02453926876949, -61.10990148523143, -61.19590982975232, -61.28247426175452, -61.369533186301574, -61.45703833126709, -61.54494707606401, -61.63321874613176, -61.721812982308975, -61.81068916519534, -61.89980634984887, -61.989123424749586, -62.078599348870654, -62.168111102528144, -62.25758022558814, -52.13203659241283, -44.11797684262783, -39.13221063058348, -35.81389998432463, -32.88044622750153, -29.555514105307854, -25.487667230918795, -20.646651685995813, -15.33159393414912, -10.181336240218055, -5.993178955258487, -3.3658191915617874, -2.4661644703826036, -3.089284767378177, -4.86608425246542, -7.425092261783796, -10.462683809108409, -13.755515329666025, -17.149686366950796, -20.544314627655794, -23.877232511665827, -27.112924034636148, -30.236693788329724, -33.24803419279171, -36.15475984790251, -38.967578151372095, -41.69363793539875, -44.329273310418564, -46.85345788105954, -49.22526218836835, -51.386455712857114, -53.27465511518788, -54.84244559276196, -56.07360702626229, -56.98800723218059, -57.63293825160197, -58.067252078269554, -58.34849905327057, -58.523943114788175, -58.62935218026324, -58.689905591785504, -58.7225739912564, -58.73850504935587, -58.74492323467567, -58.74648791194747, -58.74620752447606, -58.746033752723584, -58.74724017870379, -58.75066144477484, -58.75684413187646, -58.766142440725346, -58.77877951298883, -58.794887330771665, -58.81453317309137, -58.837737542569386, -58.86448659723144, -58.89474097553484, -58.9284422023599, -58.965517434296906, -59.005883037372016, -59.049440775345424, -59.09604821719115, -59.14558560299323, -59.19794283072989, -59.253013563112404, -59.310692749208236, -59.37087575380299, -59.43345821600318, -59.49833621379829, -59.56540653444654, -59.63456695954311, -59.70571652635799, -59.77875575205537, -59.853586818839815, -59.93011372290118, -60.008242391718404, -60.08787064484591, -60.16881714147047, -60.250963458254105, -60.33422234732833, -60.41852150838772, -60.50379547715728, -60.589981729406894, -60.677018945477876, -60.764846356417564, -60.85340360937729, -60.94263086298624, -61.03246896725782, -61.12282184986925, -61.21355265663823, -61.304582874232196, -61.39586255946248, -61.487354791539424, -61.57902779542433, -61.6708511580957, -61.76279418948001, -61.85482537371135, -61.94691234612443, -62.03902209887123, -62.13108033193822, -52.04005096293385, -44.05739454507042, -39.09513206548677, -35.80010288082723, -32.90156945541686, -29.63443314922769, -25.65583708571325, -20.937260976845344, -15.763586443826672, -10.741875491287859, -6.632751211737637, -4.020561330811871, -3.0844925803200063, -3.645657035982283, -5.355170935727002, -7.85135213974309, -10.833807418128458, -14.079690068958238, -17.433919377223983, -20.794541821308766, -24.097171394636, -27.305745625652566, -30.405006924429532, -33.393316091235455, -36.277810784186144, -39.06846519675131, -41.771547616382776, -44.38276640040218, -46.88072642800937, -49.22495268249907, -51.35848456619093, -53.221131937722234, -54.767799354704856, -55.98356976383285, -56.88877173813187, -57.529421414630285, -57.963124931077964, -58.246015959684684, -58.424256887860864, -58.532898203394915, -58.59675324087095, -58.632624733254, -58.65159734218338, -58.6608835704669, -58.665152769240194, -58.66743073695513, -58.66968720857483, -58.673211882641034, -58.67885284955915, -58.68716755394026, -58.698518847671494, -58.71313673574343, -58.7311586607364, -58.75265627753629, -58.77765363168295, -58.8061397859344, -58.8380777946614, -58.873411224166134, -58.912068985648695, -58.95396898043021, -58.999020889889984, -59.04712833649628, -59.09813612660732, -59.151917868745684, -59.20836145513936, -59.26736097102852, -59.32881307959503, -59.39261555912262, -59.458666850021814, -59.526866053070584, -59.59711310902968, -59.669309032463694, -59.743356142669874, -59.81915826860583, -59.89662092077836, -59.97565143030482, -60.056159058305866, -60.13798563893766, -60.220989931677494, -60.30507483442506, -60.3901647485948, -60.476194111105805, -60.563101758312904, -60.65082830494366, -60.739315053909095, -60.828503659181315, -60.91833613816913, -61.00875502785647, -61.09969337606202, -61.19099635454095, -61.28257747749798, -61.37438402057188, -61.46637887737146, -61.558531298425386, -61.65081238349897, -61.74319307636197, -61.835643441549436, -61.92813256764018, -62.02062875053504, -62.113078127638104, -52.0267234339068, -44.04826740947523, -39.08918276776125, -35.79745572425915, -32.904048225752554, -29.645467454348466, -25.680095191362827, -20.979670928220376, -15.827015263381753, -10.824559805373571, -6.7275441219919765, -4.11812414468382, -3.1775382272812847, -3.7300918510421415, -5.429676732420051, -7.916488985137728, -10.890612074127214, -14.12936338000246, -17.47764309614243, -20.833066344927467, -24.131032213934922, -27.33551358574407, -30.430999170326118, -33.41574499577425, -36.296801137448696, -39.0840320506643, -41.783574723677376, -44.39103261939377, -46.8849597568195, -49.22495394568982, -51.35425070779588, -53.21299489769644, -54.75644220303516, -55.96987045277503, -56.8736400936242, -57.513639352803125, -57.947261167477464, -58.23039916945321, -58.409077679917424, -58.51822651875292, -58.5825994511279, -58.61897254691345, -58.638420726539, -58.64815481499748, -58.65284588630351, -58.65552256677702, -58.65815749069972, -58.662042926930845, -58.66802910223462, -58.676675183011014, -58.68834539046784, -58.70327081528777, -58.721589763803195, -58.74337458338014, -58.76864988067114, -58.79740517897356, -58.82960391619031, -58.865189983155695, -58.90409257039338, -58.94622982394485, -58.99151164349609, -59.03984184975634, -59.091073814831766, -59.14507528963417, -59.201731650494004, -59.260936080712426, -59.32258509954919, -59.386576678377615, -59.45280958370147, -59.52118327932831, -59.591598063192414, -59.663955284262585, -59.73815756876077, -59.81410902580009, -59.891715422107325, -59.970884324478874, -60.05152521243515, -60.133485832513585, -60.216621082050764, -60.30083215777023, -60.386042857673786, -60.47218755507432, -60.55920527248615, -60.64703691232056, -60.73562409313655, -60.824908777930325, -60.91483327192739, -61.005340374121864, -61.09636734861179, -61.18775678781228, -61.27942106971625, -61.37130708218161, -61.46337770468136, -61.555602347430586, -61.64795233926737, -61.74039886965289, -61.83291224033378, -61.92546175806727, -62.01801591475459, -62.11052376307984, -52.02480416426632, -44.04691158405878, -39.08825535735996, -35.79698903099717, -32.90431596207602, -29.646971991139615, -25.68351786586472, -20.98573385140818, -15.836146644119523, -10.836518351943653, -6.741303853990498, -4.132331718297793, -3.1911292586872193, -3.742461685857007, -5.440623851761641, -7.92608689102517, -10.899005443529905, -14.136722496702268, -17.48413696247517, -20.838801571923558, -24.136084648396945, -27.33996527665981, -30.43489518045326, -33.419115369764945, -36.29966333403487, -39.086387513806116, -41.785405516941026, -44.3923052321797, -46.8856330244281, -49.2249974724694, -51.35366296527387, -53.21182428201078, -54.754789512589184, -55.96786596874324, -56.8714192262818, -57.51131879962552, -57.94492609411266, -58.228099108930124, -58.40684152002068, -58.51606510337518, -58.58051464705876, -58.61696215548278, -58.636481025610145, -58.646281780549465, -58.65103571508643, -58.65377185247914, -58.656463242530805, -58.66040252593506, -58.66644024017862, -58.675135802972285, -58.68685363589664, -58.70182498881796, -58.720188294922146, -58.74201600342931, -58.76733280364531, -58.79612828680906, -58.82836594749509, -58.86398972457314, -58.90292884998521, -58.94510150612732, -58.99041762517627, -59.038781057398715, -59.090046423712195, -59.14408062128829, -59.20076866025176, -59.26000359316109, -59.3216819191132, -59.3857016384717, -59.45196156611784, -59.52036121960734, -59.59080094974986, -59.663182155051224, -59.737407507244086, -59.813381157032076, -59.891008909225214, -59.97019836569216, -60.05085903849084, -60.13283952560909, -60.215994169302896, -60.30022392244841, -60.38545249728358, -60.47161425906632, -60.558648258184284, -60.6464954394966, -60.735097467991174, -60.82439635209372, -60.91433443936315, -61.00485456737093, -61.0958946014007, -61.187296767605304, -61.278973283262296, -61.370870982089265, -61.462952742596045, -61.555187998741395, -61.647548112935866, -61.74000431052597, -61.832526927884736, -61.925085303636976, -62.01764795834849, -62.110164356300935, -52.02453102334566, -44.04671414123907, -39.08811569393105, -35.7969132688589, -32.90434422923819, -29.647176704153683, -25.683997016846575, -20.986591640202416, -15.837445740296163, -10.838225731454116, -6.743273638369966, -4.134370171935599, -3.193083234923644, -3.744243586047416, -5.442203876311775, -7.927474857284356, -10.900221528751736, -14.13779070040949, -17.485081233610373, -20.83963693186386, -24.13682175107233, -27.340615772147526, -30.435465404019123, -33.419609527804724, -36.300083846846334, -39.0867345026126, -41.785676297093616, -44.392494854961974, -46.885735415997864, -49.225008119637266, -51.35358152871427, -53.21165770717114, -54.75455240190906, -55.967577274671775, -56.87109868963604, -57.51098346442136, -57.94458842473954, -58.2277663830157, -58.40651799513067, -58.51575239927409, -58.580213065005296, -58.61667139549949, -58.63620055912122, -58.64601103034161, -58.65077413294042, -58.65351894587236, -58.656218578042925, -58.66016572334609, -58.66621096387106, -58.674913753478116, -58.6866385426121, -58.70161660409547, -58.719986389424626, -58.74182036253366, -58.76714322467865, -58.795944576929934, -58.82818792207038, -58.86381720593441, -58.9027616664759, -58.944939491373844, -58.990260617532385, -59.03862889952379, -59.08989913748108, -59.14393810607201, -59.20063076292432, -59.259870141909126, -59.32155273931345, -59.38557655974658, -59.45184042511775, -59.5202438607797, -59.5906872252121, -59.663071924109516, -59.737300635814414, -59.81327751707528, -59.89090837824241, -59.970100826291045, -60.05076437802081, -60.13274775253274, -60.215905213239246, -60.30013767844956, -60.38536884832222, -60.47153308708669, -60.55856944920876, -60.64641888569416, -60.73502306823855, -60.82432401182879, -60.91426407013982, -61.00478608632064, -61.09582801053394, -61.1872320173832, -61.27891030159423, -61.37080968936536, -61.46289305918425, -61.5551298484676, -61.64749142446475, -61.739949017681454, -61.832472969466814, -61.9250326230273, -62.01759650305374, -62.11011413149809, -52.02449251046272, -44.04668580911001, -39.088095157107915, -35.79690155556951, -32.904347123470245, -29.647204514674804, -25.68406367057892, -20.986711985030876, -15.837628802814148, -10.838467001550908, -6.743552564249088, -4.134659315596677, -3.1933608238464615, -3.7444971033129564, -5.442429000422056, -7.927672903542756, -10.900395297369665, -14.137943549460202, -17.485216527996556, -20.839756772476044, -24.13692762414738, -27.34070931672065, -30.435547504317903, -33.41968076893339, -36.30014456269459, -39.086784700897894, -41.785715584820295, -44.39252251478038, -46.88575056798068, -49.22501010687352, -51.35357028979861, -53.211634227313375, -54.75451876765123, -55.967536202770106, -56.87105301444858, -57.51093563643268, -57.94454023868654, -58.22771888974558, -58.40647181075637, -58.51570776042221, -58.58017001797616, -58.61662989937881, -58.63616053949686, -58.64597240533587, -58.65073682450544, -58.65348288372979, -58.656183700245215, -58.66013197547772, -58.666178297846585, -58.67488212635032, -58.68660791554084, -58.70158694150954, -58.71995765836195, -58.741792532130106, -58.76711626577484, -58.79591846176989, -58.828162624070735, -58.86379269950736, -58.90273792689366, -58.944916494665165, -58.99023834040352, -59.03860731929846, -59.089878256908314, -59.14391791052264, -59.20061123032743, -59.259851247550905, -59.32153445809014, -59.385558867166075, -59.451823297694034, -59.520227276141966, -59.59067116208653, -59.66305636225064, -59.737285555922824, -59.81326290071745, -59.89089420777898, -59.97008708481483, -60.05075104930516, -60.13273483741768, -60.2158927014665, -60.30012555490309, -60.385357096196735, -60.47152168944478, -60.558558389699925, -60.64640814884614, -60.7350126395356, -60.82431387769027, -60.91425421785728, -61.004776503981525, -61.09581869811705, -61.18722296766327, -61.27890150420147, -61.370801132890314, -61.46288473222694, -61.55512174012417, -61.64748352452015, -61.73994131665364, -61.832465458580295, -61.9250252941576, -62.017589348662995, -62.11010715207939, -52.02448712038264, -44.04668178948146, -39.088092189646936, -35.79689980231291, -32.90434740775301, -29.647208290000417, -25.684072898190923, -20.98672876007678, -15.837654409621436, -10.8385008250908, -6.743591730175617, -4.134699970554394, -3.193399901020832, -3.7445328327288054, -5.442460764099469, -7.927700877980444, -10.900419869554813, -14.137965186490025, -17.48523569950955, -20.839773770560107, -24.136942655033828, -27.340722609375945, -30.435559181502484, -33.41969091162237, -36.30015321681794, -39.086791866489364, -41.78572120527734, -44.392526487561305, -46.8857527673531, -49.225010438604045, -51.35356874379926, -53.21163094211515, -54.75451403830344, -55.96753041439106, -56.871046569323575, -57.510928882725736, -57.94453343167999, -58.22771217922765, -58.40646528469371, -58.51570145283815, -58.580163935771395, -58.616624036979246, -58.636154886500975, -58.64596695023062, -58.650731556285386, -58.653477792467655, -58.65617877717941, -58.660127212904165, -58.66617368895166, -58.674877665044, -58.68660359631203, -58.70158275930815, -58.719953608506096, -58.74178861023402, -58.76711246769351, -58.79591478355661, -58.82815906194458, -58.86378924982819, -58.902734586143055, -58.944913259431914, -58.99023520737244, -59.038604285241824, -59.08987532217395, -59.14391507301472, -59.20060848690414, -59.25984859469971, -59.32153189224468, -59.38555638484706, -59.451820895564566, -59.52022495102307, -59.590668910954236, -59.66305418222678, -59.73728344426302, -59.81326085480012, -59.890892225094866, -59.97008516295888, -60.050749185968584, -60.132733032679006, -60.2158909538533, -60.300123862264776, -60.385355456147785, -60.47152009958263, -60.5585568477056, -60.64640665252468, -60.73501118682716, -60.82431246666696, -60.914252846714305, -61.004775171026616, -61.09581740331358, -61.18722170997353, -61.278900282151724, -61.37079994486345, -61.46288357660847, -61.55512061537016, -61.64748242918367, -61.739940249390855, -61.832464418147126, -61.92502427940152, -62.017588358513954, -62.11010618658029, -52.02448637045113, -44.0466812241938, -39.0880917664241, -35.796899545720244, -32.90434743387667, -29.647208802255378, -25.684074170766987, -20.986731086398393, -15.83765797069199, -10.838505537138829, -6.743597193506525, -4.134705647603113, -3.1934053629346186, -3.7445378312335125, -5.442465211759844, -7.927704798512524, -10.900423316250333, -14.137968223989294, -17.48523839302711, -20.839776160516113, -24.136944769929684, -27.340724481015084, -30.435560826854733, -33.419692341865726, -36.3001544382334, -39.086792878984255, -41.78572200078558, -44.39252705157803, -46.88575308208999, -49.22501049070946, -51.353568531708774, -53.21163048516183, -54.75451337787452, -55.96752960461062, -56.871045666784454, -57.5109279364442, -57.94453247762932, -58.22771123854997, -58.40646436981947, -58.51570056860207, -58.580163083179905, -58.61662321527379, -58.63615409423581, -58.645966185798, -58.650730818145, -58.65347707922822, -58.65617808761175, -58.66012654592664, -58.666173043606975, -58.6748770404761, -58.686602991745815, -58.70158217403304, -58.71995304186306, -58.74178806160554, -58.7671119364958, -58.7959142692337, -58.828158563963676, -58.8637887676764, -58.90273411932448, -58.94491280746566, -58.99023476979102, -59.03860386159029, -59.08987491249659, -59.14391467701454, -59.2006081041382, -59.2598482246733, -59.32153153445576, -59.38555603880593, -59.45182056080144, -59.52022462709024, -59.59066859742582, -59.66305387869744, -59.7372831503461, -59.81326057012618, -59.89089194931039, -59.97008489572484, -60.050748926959706, -60.13273278190181, -60.21589071109879, -60.3001236272299, -60.38535522849701, -60.47151987897816, -60.55855663382132, -60.6464064450519, -60.73501098547608, -60.824312271166384, -60.914252656810305, -61.0047749864809]}, "Volts_file__pop_post_pop_post_0_soma_v": {"cell_2": [-65.0, -66.35899914650287, -67.38782267224542, -68.17213966712598, -68.77104277386958, -69.22755992707039, -69.57438163390907, -69.83676347597856, -70.03435773758643, -70.1823775611781, -70.2925285620816, -70.37383619745265, -70.43322477709754, -70.47598844558675, -70.5061653660598, -70.52683057432372, -70.54032293099162, -70.54841983896253, -70.5524711408284, -70.55350141427368, -70.55228795706947, -70.54942015254318, -70.54534461737093, -70.54039951561317, -70.53484062931248, -70.52886116260032, -70.52260678501449, -70.51618705919063, -70.50968412305888, -70.50315928730325, -70.49665804967573, -70.4902139068746, -70.48385125294391, -70.47758758353254, -70.4714351725359, -70.46540234757437, -70.45949446036235, -70.45371462495194, -70.44806427932406, -70.44254361250468, -70.43715188928616, -70.43188769696148, -70.42674913264901, -70.42173394535182, -70.41683964352428, -70.41206357635328, -70.40740299500871, -70.40285509863176, -70.39841706869643, -70.39408609451785, -70.3898593920227, -70.38573421739628, -70.38170787683778, -70.37777773336434, -70.37394121138112, -70.37019579956534, -70.366539052482, -70.3629685912503, -70.35948210350371, -70.35607734282914, -70.3527521278262, -70.34950434089397, -70.34633192682685, -70.34323289128103, -70.34020529915864, -70.33724727294447, -70.33435699102174, -70.33153268598672, -70.32877264297642, -70.32607519802028, -70.32343873642327, -36.5251842187195, -19.54568964538738, -9.777536166054533, 1.1746434947679347, 12.584670672952523, 20.59689596697556, 24.309409893254315, 25.04723930487051, 24.07024825135243, 22.104976763929393, 19.541502349313898, 16.604359062885887, 13.436976832239461, 10.13926883256153, 6.784813068967856, 3.429106770272134, 0.11440567445192462, -3.1271259067674526, -6.271551244287883, -9.301079214467446, -12.202542605821115, -14.966526557015758, -17.58662302788515, -20.05969869028117, -22.38362538828809, -24.559585153010183, -26.589583556979964, -28.477278858803004, -30.22749372848052, -31.845632168464462, -33.337701912172484, -34.70994208590216, -35.96833289141373, -37.118817132387086, -38.167564152950334, -39.12057917946345, -39.9839392321458, -40.76388106872511, -41.46660976842591, -42.09845771175016, -42.66597199121354, -43.1753146770941, -43.63273039110171, -44.044005970788604, -44.41490333739107, -44.75022772744283, -45.0548612871339, -45.33316051133128, -45.58861569528847, -45.82467279472752, -46.04442714383863, -46.250478564263005, -46.4447829023645, -46.62929542352618, -46.80576956135362, -46.97572594000491, -47.14046813986, -47.30078500644717, -47.457506062388525, -47.61143883547579, -47.76330244030483, -47.9137181697594, -48.06321635991908, -48.212092656205876, -48.36048095827023, -48.50864927472153, -48.656875685617344, -48.80541106667314, -48.95447035627146, -49.104232925775975, -49.2545786042645, -49.405437802629706, -49.55686892809872, -49.70896033928987, -49.86179710274477, -50.015450631522974, -50.1699352759476, -50.32491203197022, -50.480305583043034, -50.63612905001163, -50.79241941473121, -50.9492141686914, -51.10654334481615, -51.264141025445575, -51.42180246971796, -51.5794906197482, -51.73722592490652, -51.89504382683831, -52.052978712722904, -52.21091656444127, -52.368557983690955, -52.52583622908637, -52.682770666726576, -52.8394076293213, -52.99579692416583, -53.15198290874035, -53.30760694743934, -53.46257347901571, -53.6169008120941, -53.77064616344817, -53.92387464043173, -54.07664689310084, -54.22882342003015, -54.380203015742936, -33.79553741616436, -24.00378399363985, -19.986004289715048, -17.844097348603025, -16.32983941735992, -15.240019536322926, -14.610179589392526, -14.461804215254856, -14.758607238448743, -15.424343611100609, -16.368712460261293, -17.504901028287705, -18.7589303276275, -20.072124004585802, -21.400485193353607, -22.712736279666686, -23.9870440972867, -25.209266109690763, -26.37138292066607, -27.469176482863112, -28.5014099962919, -29.468973045534057, -30.374172331919294, -31.22020165364929, -32.01076648123426, -32.749831167572566, -33.44149518026137, -34.089623153171544, -34.69795622838574, -35.27007433637933, -35.8092477994167, -36.31854743571687, -36.80072658043954, -37.258358941058056, -37.69371047189978, -38.108876437125915, -38.50576510068154, -38.885990424195874, -39.25117597306725, -39.60259798905704, -39.94149529319475, -40.26909866220273, -40.5862500392476, -40.89387250349948, -41.19290091173783, -41.483954467254456, -41.76765166546554, -42.04469445119189, -42.3156894626316, -42.58091250842941, -42.840863547936486, -43.096068383594286, -43.346861864111226, -43.59341032311565, -43.83607769655241, -44.07525832309141, -44.311187960575666, -44.54388726657867, -44.77360861033902, -45.00065386025694, -45.22531779537129, -45.44742311200587, -45.66711617137977, -45.884628781096914, -46.10020264989339, -46.313845872683984, -46.52546737333057, -46.735198561783946, -46.94322959398774, -47.14975557186779, -47.354610146340875, -47.55774393176351, -47.759276509737255, -47.95937212498577, -48.15819741914978, -48.355520414531824, -48.55128554727494, -48.7455951218871, -48.938595074236474, -49.13043472640352, -49.32092250859539, -49.50994437646598, -49.697572912715984, -49.88393732250545, -50.069175863532166, -50.253239857403024, -50.43590280170921, -50.617190227834925, -50.79721179546294, -50.97609744509262, -51.15397360213609, -51.330556542432205, -51.50577797031362, -51.67971140344434, -51.85247441054874, -52.02419046042136, -52.19491243171629, -52.36435067328733, -52.53248990219777, -52.69941511198079, -52.865240507430315, -53.03008108146917, -53.1939666151592, -53.35663457867843, -53.51806940282384, -53.67834836769674, -53.83757653944909, -53.99585993829054, -54.15329511605862, -54.309599672350544, -54.46472860355459, -54.61874078542632, -54.77172933839354, -54.92379184177657, -55.075018260251525, -55.22531659212238, -55.37453154248496, -55.52266792392265, -55.66979237505231, -55.815989295978625, -55.96134176667941, -56.10592392702179, -56.24957467138333, -56.39219751755133, -56.53381130985308, -56.67447888074931, -56.81427431590291, -56.953268589429534, -57.091523874097625, -57.228913564004124, -57.36533481603777, -57.500794119754175, -57.635341545634724, -57.76903964875876, -57.90194939212674, -58.03412435504981, -58.165548255498365, -58.296065417028935, -58.425649973278226, -58.55433208370454, -58.68216175242107, -58.80919169864547, -58.93546980279541, -59.061036288346386, -59.185825883328924, -59.30973091726804, -59.432738204542844, -59.55487532380503, -59.67618378339812, -59.79670616272447, -59.916480439611064, -60.03553793861581, -60.153852678410665, -60.2713099106261, -60.38788566441911, -60.503596829262854, -60.618475569861914, -60.73255671096859, -60.845871957386784, -60.95844764492785, -61.070304252704574, -61.18136949418662, -61.29157488981355, -61.40091150006634, -61.50939667180425, -61.617056854364556, -61.723919132564035, -61.830007417346835, -61.93534106323898, -62.039934696825114, -62.143755472040375, -62.2467273372369, -62.34883242657524, -62.4500798238644, -62.5504890488388, -62.650081687608704, -62.74887746300227, -62.84689266904275, -62.9441398162997, -63.04062785617722, -63.13632489560581, -63.23117103991896, -63.32515184162731, -63.41827413654971, -63.510553133019656, -63.60200580674457, -63.69264777328142, -63.78249203117765, -63.87154867158881, -63.959825053290466, -64.04732617183325, -64.13401757997406, -64.21985749729949, -64.30483700101988, -64.38896255664764, -64.47224664145111, -64.55470293833297, -64.63634406606116, -64.71718067957678, -64.79722127912507, -64.87647235956366, -64.95493869951451, -65.03262368578105, -65.10950768618171, -65.18555541420916, -65.2607587853897, -65.33512274720707, -65.40865760325647, -65.48137503072394, -65.55328616257987, -65.62440079438029, -65.6947271790924, -65.76427210875417, -65.83304111805789, -65.90103872296942, -65.96826865144719, -66.03473404750285, -66.10041793979475, -66.16529886425381, -66.22937399714876, -66.29264941640425, -66.35513483329362, -66.41684086657848, -66.47777773679945, -66.53795473256766, -66.5973800790219, -66.65606100111415, -66.71400386847823, -66.77121436247097, -66.82769763625146, -66.8834584553707, -66.93850131511395, -66.99283053518522, -67.04645033423827, -67.09934270556016, -67.15150149809794, -67.2029304300822, -67.25363773111123, -67.30363328931219, -67.35292721091919, -67.40152915970535, -67.44944811352609, -67.4966923328545, -67.54326942766662, -67.58918646160868, -67.6344500621782, -67.67906652221103, -67.72304188690276, -67.76638202520115, -67.80909268660118, -67.85117954526325, -67.89264823358577, -67.93350436724674, -67.9737535634775, -68.01340145404315, -68.05244826923185, -68.0908875636017, -68.12872193964402, -68.16595836647309, -68.2026056499237, -68.23867311807578, -68.27416998222384, -68.30910506406174, -68.34348671396826, -68.37732282283034, -68.41062087433562, -68.44338800990826, -68.47563109255631, -68.50735676358794, -68.53857149020354, -68.56928160398579, -68.59949333121013, -68.62921281621101, -68.65844613905575, -68.68719932866148, -68.71547837232494, -68.74328922246507, -68.77063780122184, -68.79753000342147, -68.82397169830715, -68.8499687303453, -68.87552691934658, -68.90065206008505, -68.92534992155566, -68.94962624597736, -68.97348674762235, -68.9969371115335, -69.01998299217583, -69.04262307633513, -69.0648597537728, -69.08669843123431, -69.10814584287532, -69.12920916265804, -69.14989556153577, -69.17021200642988, -69.190165186682, -69.20976150445809, -69.22900709449034, -69.24790785484583, -69.26646947948394, -69.28469748831928, -69.30259725313674, -69.32017401903909, -69.33743292173233, -69.35437900120188, -69.37101721238736, -69.3873524334282, -69.40338947197924, -69.41913307001329, -69.4345879074504, -69.44975860488425, -69.46464972561945, -69.47926577718644, -69.49361121246332, -69.50769043050427, -69.52150777715131, -69.53506754548796, -69.5483739761794, -69.56143125773326, -69.57424352670665, -69.58681486787881, -69.59914931440395, -69.61125084795506, -69.6231233988668, -69.63477084628309, -69.64619701831384, -69.65740569220358, -69.66840059451404, -69.67918540132206, -69.68976373843333, -69.70013918161254, -69.71031525682984, -69.72029544052337, -69.73008315987758, -69.73968179311686, -69.74909466981384, -69.75832507121179, -69.76737623056042, -69.77625133346446, -69.78495351824424, -69.7934858763076, -69.80185145253255, -69.81005324565973, -69.81809420869435, -69.82597724931661, -69.83370523030021, -69.84128096993828, -69.848707242476, -69.85598677854945, -69.86312226563021, -69.87011634847495, -69.87697162957964, -69.88369066963791, -69.89027598800298, -69.89673006315273, -69.90305533315752, -69.90925419615031, -69.91532901079863, -69.92128209677811, -69.92711573524711, -69.9328321693221, -69.93843360455358, -69.94392220940205, -69.94930011571381, -69.95456941919635, -69.95973217989287, -69.96479042265592, -69.96974613761975, -69.97460128067107, -69.97935777391818, -69.9840175061582, -69.988582333342, -69.99305407903702, -69.99743453488745, -70.00172546107169, -70.00592804149419, -70.01004301087875, -70.0140718034288, -70.01801616720051, -70.02187796058543, -70.02565904912882, -70.02936125677071, -70.03298634591661, -70.03653601221876, -70.04001188639623, -70.04341553901864, -70.04674848616507, -70.05001219495094, -70.05320808849109, -70.0563375501639, -70.05940192718487, -70.06240253356087, -70.06534065251698, -70.06821753848743, -70.07103441875385, -70.07379249480132, -70.07649294345082, -70.0791369178152, -70.08172554811678, -70.08425994239586, -70.08674118713407, -70.08917034781047, -70.09154846940486, -70.09387657685913, -70.09615567550539, -70.09838675146734, -70.10057077204029, -70.10270868605328, -70.10480142421702, -70.10684989945939, -70.10885500725077, -70.11081762592042, -70.11273861696503, -70.11461882535035, -70.1164590798065, -70.11826019311755, -70.12002296240563, -70.12174816941011, -70.12343658076198, -70.12508894825348, -70.12670600910356, -70.12828848621885, -70.1298370884505, -70.13135251084701, -70.13283543490296, -70.13428652880383, -70.135706447667, -70.13709583377894, -70.13845531682851, -70.1397855141367, -70.14108703088267, -70.1423604603261, -70.14360638402609, -70.14482537205637, -70.14601798321722, -70.14718476524374, -70.14832625501087, -70.14944297873497, -70.15053545217208, -70.15160418081294, -70.15264966007473, -70.15367237548962, -70.15467280289016, -70.15565140859155, -70.15660864957087, -70.15754497364318, -70.15846081963473, -70.15935661755309, -70.16023278875451, -70.1610897461083, -70.16192789415837, -70.162747629282, -70.16354933984584, -70.16433340635925, -70.16510020162484, -70.16585009088644, -70.16658343197447, -70.16730057544875, -70.1680018647387, -70.16868763628115, -70.16935821965563, -70.17001393771731, -70.17065510672748, -70.1712820364817, -70.17189503043572, -70.17249438582904, -70.17308039380626, -70.17365333953624, -70.17421350232912, -70.17476115575111, -70.1752965677373, -70.1758200007023, -70.17633171164893, -70.17683195227487, -70.17732096907733, -70.17779900345586, -70.17826629181313, -70.17872306565397, -70.17916955168245, -70.17960597189726, -70.18003254368526, -70.18044947991321, -70.18085698901794, -70.18125527509467, -70.18164453798377, -70.18202497335584, -70.18239677279513, -70.18276012388156, -70.18311521027097, -70.18346221177397, -70.1838013044333, -70.18413266059963, -70.18445644900599, -70.18477283484074, -70.18508197981919, -70.18538404225374, -70.18567917712284, -70.18596753613842, -70.18624926781223, -70.18652451752072, -70.18679342756879, -70.18705613725224, -70.18731278291905, -70.18756349802945, -70.18780841321477, -70.1880476563353, -70.18828135253682, -70.18850962430619, -70.18873259152579, -70.18895037152686, -70.18916307914185, -70.18937082675573, -70.18957372435631, -70.18977187958346, -70.18996539777757, -70.19015438202683, -70.19033893321372, -70.19051915006055, -70.19069512917406, -70.19086696508917, -70.19103475031189, -70.19119857536128, -70.19135852881072, -70.19151469732823, -70.191667165716, -70.19181601694925, -70.19196133221416, -70.19210319094516, -70.1922416708614, -70.19237684800252, -70.19250879676369, -70.19263758992996, -70.1927632987099, -70.19288599276864, -70.19300574026006, -70.19312260785858, -70.1932366607901, -70.19334796286242, -70.19345657649501, -70.1935625627482, -70.19366598135174, -70.19376689073287, -70.1938653480437, -70.19396140918808, -70.19405512884796, -70.19414656050924, -70.19423575648692, -70.19432276794996, -70.19440764494549, -70.19449043642257, -70.19457119025546, -70.1946499532664, -70.19472677124799, -70.19480168898498, -70.19487475027574, -70.19494599795325, -70.19501547390561, -70.1950832190962, -70.19514927358335, -70.1952136765397, -70.19527646627105, -70.19533768023494, -70.19539735505874, -70.19545552655741, -70.19551222975092, -70.19556749888123, -70.19562136742906, -70.1956738681301, -70.19572503299113, -70.1957748933056, -70.19582347966897, -70.19587082199376, -70.19591694952426, -70.19596189085085, -70.19600567392422, -70.19604832606906, -70.19608987399765, -70.19613034382306, -70.1961697610721, -70.19620815069803, -70.19624553709295, -70.19628194409998, -70.19631739502516, -70.19635191264909, -70.19638551923838, -70.19641823655672, -70.19645008587595, -70.19648108798667, -70.19651126320872, -70.1965406314015, -70.19656921197394, -70.19659702389437, -70.19662408570012, -70.19665041550698, -70.19667603101834, -70.1967009495343, -70.19672518796044, -70.19674876281647, -70.19677169024474, -70.19679398601848, -70.19681566554989, -70.19683674389813, -70.19685723577705, -70.19687715556275, -70.1968965173011, -70.19691533471497, -70.19693362121136, -70.19695138988835, -70.19696865354197, -70.19698542467286, -70.19700171549275, -70.19701753793095, -70.19703290364052, -70.19704782400444, -70.19706231014162, -70.19707637291268, -70.19709002292576, -70.19710327054214, -70.19711612588169, -70.19712859882826, -70.19714069903495, -70.19715243592921, -70.19716381871798, -70.1971748563925, -70.19718555773316, -70.1971959313143, -70.19720598550869, -70.19721572849217, -70.19722516824797, -70.19723431257107, -70.19724316907245, -70.1972517451832, -70.19726004815851, -70.19726808508177, -70.1972758628683, -70.1972833882692, -70.19729066787507, -70.19729770811959, -70.19730451528311, -70.19731109549608, -70.19731745474246, -70.19732359886305, -70.19732953355872, -70.19733526439357, -70.1973407967981, -70.19734613607216, -70.19735128738796, -70.19735625579301, -70.19736104621292, -70.19736566345418, -70.19737011220691, -70.19737439704747, -70.19737852244111, -70.1973824927445, -70.19738631220817, -70.19738998497904, -70.1973935151027, -70.1973969065258, -70.19740016309827, -70.19740328857561, -70.19740628662105, -70.1974091608076, -70.19741191462025, -70.1974145514579, -70.19741707463542, -70.19741948738559, -70.19742179286094, -70.19742399413566, -70.19742609420742, -70.19742809599913, -70.19743000236069, -70.19743181607069, -70.19743353983806, -70.1974351763037, -70.19743672804205, -70.1974381975627, -70.19743958731185, -70.19744089967381, -70.19744213697246, -70.19744330147265, -70.19744439538162, -70.19744542085034, -70.19744637997482, -70.1974472747974, -70.19744810730803, -70.19744887944556, -70.19744959309884, -70.19745025010798, -70.19745085226549, -70.19745140131742, -70.19745189896445, -70.19745234686293, -70.19745274662603, -70.19745309982467, -70.1974534079886, -70.19745367260737, -70.19745389513123, -70.19745407697218, -70.19745421950479, -70.19745432406715, -70.19745439196174, -70.19745442445628, -70.19745442278459, -70.19745438814735, -70.19745432171297, -70.19745422461834, -70.19745409796961, -70.1974539428429, -70.19745376028506, -70.19745355131438, -70.19745331692128, -70.19745305806902, -70.19745277569429, -70.19745247070794, -70.19745214399558, -70.19745179641818, -70.19745142881273, -70.19745104199278, -70.19745063674902, -70.1974502138499, -70.19744977404213, -70.1974493180512, -70.19744884658198, -70.19744836031916, -70.1974478599278, -70.1974473460538, -70.1974468193244, -70.19744628034859, -70.19744572971764, -70.1974451680055, -70.19744459576926, -70.19744401354954, -70.19744342187097, -70.19744282124252, -70.19744221215792, -70.19744159509611, -70.19744097052153, -70.19744033888452, -70.19743970062171, -70.19743905615634, -70.19743840589858, -70.19743775024594, -70.19743708958353, -70.19743642428442, -70.1974357547099, -70.19743508120985, -70.19743440412297, -70.19743372377717, -70.19743304048971, -70.19743235456764, -70.1974316663079, -70.19743097599776, -70.19743028391491, -70.19742959032781, -70.19742889549593, -70.19742819966997, -70.19742750309207, -70.19742680599609, -70.19742610860779, -70.19742541114505, -70.19742471381812, -70.19742401682979, -70.19742332037558, -70.19742262464398, -70.19742192981661, -70.19742123606844, -70.1974205435679, -70.19741985247715, -70.1974191629522, -70.19741847514307, -70.19741778919398, -70.19741710524352, -70.1974164234248, -70.19741574386556, -70.19741506668841, -70.19741439201086, -70.19741371994557, -70.19741305060043, -70.1974123840787, -70.19741172047915, -70.19741105989621, -70.19741040242005, -70.19740974813672, -70.1974090971283, -70.19740844947299, -70.1974078052452, -70.19740716451572, -70.19740652735176, -70.1974058938171, -70.19740526397219, -70.19740463787421, -70.19740401557725, -70.1974033971323, -70.19740278258743, -70.1974021719878, -70.19740156537584, -70.19740096279125, -70.19740036427113, -70.19739976985008, -70.1973991795602, -70.19739859343123, -70.19739801149065, -70.19739743376367, -70.19739686027337, -70.19739629104073, -70.19739572608472, -70.19739516542235, -70.19739460906874, -70.19739405703719, -70.19739350933924, -70.1973929659847, -70.19739242698176, -70.197391892337, -70.19739136205546, -70.19739083614068, -70.1973903145948, -70.19738979741854, -70.1973892846113, -70.19738877617121, -70.19738827209511, -70.19738777237868, -70.19738727701643, -70.19738678600177, -70.19738629932702, -70.19738581698348]}}, "simConfig": {"cache_efficient": false, "verbose": 0, "saveFolder": "", "saveDat": false, "gatherOnlySimData": false, "duration": 100.0, "filename": "SpikingNet_netpyne_1", "addSynMechs": true, "cvode_atol": 0.001, "checkErrorsVerbose": true, "cvode_active": false, "saveJson": 1, "recordStim": true, "saveCellConns": true, "saveDataInclude": ["netParams", "netCells", "netPops", "simConfig", "simData"], "simLabel": "", "backupCfgFile": [], "saveCellSecs": true, "recordCells": ["all"], "createPyStruct": 1, "checkErrors": false, "createNEURONObj": 1, "recordStep": 0.1, "timestampFilename": false, "printPopAvgRates": false, "timing": true, "dt": 0.1, "saveFileStep": 0.1, "saveMat": false, "recordTraces": {"Volts_file__pop_post_pop_post_0_soma_v": {"var": "v", "loc": 0.5, "sec": "soma", "conds": {"pop": "pop_post"}}, "Volts_file__pop_pre_pop_pre_1_soma_v": {"var": "v", "loc": 0.5, "sec": "soma", "conds": {"pop": "pop_pre"}}, "Volts_file__pop_pre_pop_pre_0_soma_v": {"var": "v", "loc": 0.5, "sec": "soma", "conds": {"pop": "pop_pre"}}}, "savePickle": false, "hParams": {"clamp_resist": 0.001, "celsius": 6.3}, "analysis": {"plotTraces": {"include": ["all"]}}, "saveDpk": false, "seeds": {"loc": 0, "stim": 0, "conn": 0}, "saveHDF5": false, "tstop": 100.0, "includeParamsLabel": true, "saveTiming": false, "saveCSV": false, "printRunTime": false}} \ No newline at end of file From 0d9d502e39cc01fd01977489b27593738fda2989 Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Wed, 9 Aug 2017 23:30:33 -0400 Subject: [PATCH 46/50] fixes 2 --- netpyne/tests/tests.py | 2 +- netpyne/tests/validate_tests.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index a37f679b1..d9661c9f4 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -15,7 +15,7 @@ from neuron import h from netpyne import utils -VALID_SHAPES = ['cuboid', 'ellipsoid', ' cylinder'] +VALID_SHAPES = ['cuboid', 'ellipsoid', 'cylinder'] POP_NUMCELLS_PARAMS = ['Density','NumCells','GridSpacing'] VALID_GEOMETRIES = ['cm', 'L', 'diam', 'Ra', 'pt3d', 'nseg'] VALID_GEOMETRIES_SUBSET = ['L', 'diam', 'Ra'] diff --git a/netpyne/tests/validate_tests.py b/netpyne/tests/validate_tests.py index 37233086e..cf0ef8f8f 100644 --- a/netpyne/tests/validate_tests.py +++ b/netpyne/tests/validate_tests.py @@ -41,9 +41,9 @@ def loadSimConfigTests(self): # Simulation parameters simConfigParams.simConfig.duration = simConfigParams.simConfig.tstop = 100.0 # Duration of the simulation, in ms - simConfigParams.simConfig.dt = 0.1 # Internal integration timestep to use + simConfigParams.simConfig.dt = "a" # Internal integration timestep to use - simConfigParams.simConfig.seeds = {'conn': 0, 'stim': 0, 'loc': 0} + simConfigParams.simConfig.seeds = {'con': 0, 'stim': 0, 'loc': 0} simConfigParams.simConfig.createNEURONObj = 1 # create HOC objects when instantiating network simConfigParams.simConfig.createPyStruct = 1 # create Python structure (simulator-independent) when instantiating network @@ -53,7 +53,7 @@ def loadSimConfigTests(self): simConfigParams.simConfig.recordCells = ['all'] # Column: v_pop_pre_0_RS_v: Pop: pop_pre; cell: 0; segment id: $oc.segment_id; segment name: soma; Neuron loc: soma(0.5); value: v (v) - simConfigParams.simConfig.recordTraces['Volts_file__pop_pre_pop_pre_0_soma_v'] = {'sec':'soma','loc':0.5,'var':'v','conds':{'pop':'pop_pre'}}#,'cellLabel':0}} + simConfigParams.simConfig.recordTraces['Volts_file__pop_pre_pop_pre_0_soma_v'] = {'bla':1,'sec':'soma','loc':0.5,'var':'v','conds':{'pop':'pop_pre'}}#,'cellLabel':0}} # Column: v_pop_pre_1_RS_v: Pop: pop_pre; cell: 1; segment id: $oc.segment_id; segment name: soma; Neuron loc: soma(0.5); value: v (v) simConfigParams.simConfig.recordTraces['Volts_file__pop_pre_pop_pre_1_soma_v'] = {'sec':'soma','loc':0.5,'var':'v','conds':{'pop':'pop_pre'}}#, 'cellLabel':1}} # Column: v_pop_post_0_RS_v: Pop: pop_post; cell: 0; segment id: $oc.segment_id; segment name: soma; Neuron loc: soma(0.5); value: v (v) From 209857b29f87e20f17889d80a02b32b50cbe0847 Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Wed, 9 Aug 2017 23:42:37 -0400 Subject: [PATCH 47/50] fixes 3 --- netpyne/tests/tests.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/netpyne/tests/tests.py b/netpyne/tests/tests.py index d9661c9f4..8f561e11e 100644 --- a/netpyne/tests/tests.py +++ b/netpyne/tests/tests.py @@ -317,7 +317,7 @@ def testDictKeyValidValue(self,paramDict, valList): # TEST_TYPE_VALUE_LIST if isinstance(paramDict, dict) and isinstance(valList, list): if isinstance(valList, str): valList = eval(valList) - assert (all([x in valList for x in paramDict.keys()])), " '" + str(paramDict.keys()[[x in valList for x in paramDict.keys()].index(False)]) + "' must be a key in list " + str(valList) + ". Keys provided are " + str(paramDict.keys()) + "." + assert (all([x in valList for x in paramDict.keys()])), " contains invalid key '" + str(paramDict.keys()[[x in valList for x in paramDict.keys()].index(False)]) + "': Valid values are: " + str(valList) + "." #assert (all([x in valList for x in paramDict.keys()])), str(paramDict) + " must have keys in list " + str("") + ". Keys provided are " + str(paramDict.keys()) + "." except AssertionError as e: @@ -1564,7 +1564,7 @@ def loadSimConfigTests(self): testObj.testParameterValue = "self.simConfig.hParams" testObj.testTypes = [TEST_TYPE_IS_DICT, TEST_TYPE_DICT_KEY_VALID_VALUE ] testObj.testValueList = "h.__dict__.keys()" - testObj.messageText = ["simConfig->'hParams':hParams is not a dict.", "simConfig->'hParams':is not a valid value. Valid key values are in h.__dict__.keys()." ] + testObj.messageText = ["simConfig->'hParams':hParams is not a dict.", "simConfig->'hParams':" ] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["hParamsTest"] = testObj @@ -1603,7 +1603,7 @@ def loadSimConfigTests(self): testObj.testParameterValue = "self.simConfig.seeds" testObj.testTypes = [TEST_TYPE_IS_DICT,TEST_TYPE_DICT_KEY_VALID_VALUE ] testObj.testValueList = ['conn', 'stim', 'loc'] - testObj.messageText = ["simConfig->'seeds':seeds is not a dict.","SimConfig->'seeds':is not a valid value. Valid values are 'conn', 'stim', 'loc'."] + testObj.messageText = ["simConfig->'seeds':seeds is not a dict.","SimConfig->'seeds':"] testObj.errorMessageLevel = [MESSAGE_TYPE_ERROR, MESSAGE_TYPE_ERROR] self.testParamsMap["simConfig"]["seedsTest"] = testObj From 3e11d5140ac147634967f159978b898c37763ab0 Mon Sep 17 00:00:00 2001 From: Siddhartha Mitra Date: Thu, 10 Aug 2017 12:35:19 -0400 Subject: [PATCH 48/50] removed spiking json --- examples/sandbox/SpikingNet_netpyne_1.json | 1 - 1 file changed, 1 deletion(-) delete mode 100644 examples/sandbox/SpikingNet_netpyne_1.json diff --git a/examples/sandbox/SpikingNet_netpyne_1.json b/examples/sandbox/SpikingNet_netpyne_1.json deleted file mode 100644 index 14c728dc4..000000000 --- a/examples/sandbox/SpikingNet_netpyne_1.json +++ /dev/null @@ -1 +0,0 @@ -{"netpyne_version": "0.7.0", "net": {"pops": {"pop_pre": {"cellModelClass": "", "tags": {"cellModel": "RS1", "cellType": "RS", "pop": "pop_pre", "numCells": 2}, "cellGids": [0, 1]}, "pop_post": {"cellModelClass": "", "tags": {"cellModel": "RS1", "cellType": "RS", "pop": "pop_post", "numCells": 1}, "cellGids": [2]}}, "cells": [{"secs": {"soma": {"synMechs": [{"loc": 0.5, "hSyn": null, "e": 0, "label": "expsyn", "tau2": 5.0, "tau1": 0.1, "mod": "Exp2Syn"}], "hSec": null, "mechs": {"hh": {"gnabar": 0.12, "gl": 0.003, "gkbar": 0.036, "el": -70}}, "geom": {"diam": 18.8, "L": 18.8, "Ra": 123.0}}}, "stims": [{"hRandom": null, "noise": 0.0, "start": 0, "hNetStim": null, "number": 1000000000.0, "source": "Stim0_0_pop_pre_0_soma_0_5", "rate": 100, "seed": 0, "type": "NetStim"}], "tags": {"xnorm": 0.71292730264530346, "pop": "pop_pre", "label": ["RS"], "cellType": "RS", "znorm": 0.46576499578874442, "y": 14.894537787210538, "x": 71.292730264530348, "cellModel": "RS1", "z": 46.57649957887444, "ynorm": 0.14894537787210538}, "conns": [{"loc": 0.5, "hNetcon": null, "weight": 0.05, "preGid": "NetStim", "delay": 1.0, "preLabel": "Stim0_0_pop_pre_0_soma_0_5", "sec": "soma", "synMech": "expsyn"}], "gid": 0, "secLists": {}}, {"secs": {"soma": {"synMechs": [{"loc": 0.5, "hSyn": null, "e": 0, "label": "expsyn", "tau2": 5.0, "tau1": 0.1, "mod": "Exp2Syn"}], "hSec": null, "mechs": {"hh": {"gnabar": 0.12, "gl": 0.003, "gkbar": 0.036, "el": -70}}, "geom": {"diam": 18.8, "L": 18.8, "Ra": 123.0}}}, "stims": [{"hRandom": null, "noise": 0.0, "start": 0, "hNetStim": null, "number": 1000000000.0, "source": "Stim0_0_pop_pre_0_soma_0_5", "rate": 100, "seed": 0, "type": "NetStim"}], "tags": {"xnorm": 0.46904081095265204, "pop": "pop_pre", "label": ["RS"], "cellType": "RS", "znorm": 0.84546351832210465, "y": 13.515684401263556, "x": 46.904081095265205, "cellModel": "RS1", "z": 84.546351832210462, "ynorm": 0.13515684401263556}, "conns": [{"loc": 0.5, "hNetcon": null, "weight": 0.05, "preGid": "NetStim", "delay": 1.0, "preLabel": "Stim0_0_pop_pre_0_soma_0_5", "sec": "soma", "synMech": "expsyn"}], "gid": 1, "secLists": {}}, {"secs": {"soma": {"synMechs": [{"loc": 0.5, "hSyn": null, "e": 0, "label": "expsyn", "tau2": 5.0, "tau1": 0.1, "mod": "Exp2Syn"}], "hSec": null, "mechs": {"hh": {"gnabar": 0.12, "gl": 0.003, "gkbar": 0.036, "el": -70}}, "geom": {"diam": 18.8, "L": 18.8, "Ra": 123.0}}}, "stims": [], "tags": {"xnorm": 0.50705587782267114, "pop": "pop_post", "label": ["RS"], "cellType": "RS", "znorm": 0.33150863872573044, "y": 44.623076299991673, "x": 50.705587782267116, "cellModel": "RS1", "z": 33.150863872573041, "ynorm": 0.44623076299991676}, "conns": [{"loc": 0.5, "hNetcon": null, "weight": 0.1, "preGid": 0, "label": "pre->post", "delay": 5, "sec": "soma", "synMech": "expsyn", "threshold": 0}, {"loc": 0.5, "hNetcon": null, "weight": 0.1, "preGid": 1, "label": "pre->post", "delay": 5, "sec": "soma", "synMech": "expsyn", "threshold": 0}], "gid": 2, "secLists": {}}], "params": {"popTagsCopiedToCells": ["cellModel", "cellType"], "scale": 1, "connParams": {"pre->post": {"preConds": {"pop": "pop_pre"}, "weight": 0.1, "delay": 5, "synMech": "expsyn", "threshold": 0, "postConds": {"pop": "pop_post"}}}, "defaultWeight": 1, "synMechParams": {"expsyn": {"tau2": 5.0, "tau1": 0.1, "e": 0, "mod": "Exp2Syn"}}, "scaleConnWeightNetStims": 1, "sizeX": 100, "sizeY": 100, "sizeZ": 100, "scaleConnWeight": 1, "defaultThreshold": 10, "shape": "cuboid", "cellParams": {"RS": {"secs": {"soma": {"mechs": {"hh": {"gnabar": 0.12, "gl": 0.003, "gkbar": 0.036, "el": -70}}, "geom": {"diam": 18.8, "L": 18.8, "Ra": 123.0}}}, "conds": {"cellModel": "RS1", "cellType": "RS"}}}, "popParams": {"pop_pre": {"cellModel": "RS1", "cellType": "RS", "pop": "pop_pre", "numCells": 2}, "pop_post": {"cellModel": "RS1", "cellType": "RS", "pop": "pop_post", "numCells": 1}}, "_labelid": 0, "stimTargetParams": {"Stim0_0_pop_pre_0_soma_0_5": {"loc": 0.5, "conds": {"pop": "pop_pre"}, "weight": 0.05, "source": "Stim0_0_pop_pre_0_soma_0_5", "sec": "soma", "synMech": "expsyn"}}, "scaleConnWeightModels": {"__dict__": {}, "__methods__": {}, "__members__": {}}, "defaultDelay": 1, "stimSourceParams": {"Stim0_0_pop_pre_0_soma_0_5": {"rate": 100, "noise": 0.0, "type": "NetStim"}}, "propVelocity": 500.0, "subConnParams": {}}}, "simData": {"spkt": [1.900000000100001, 1.900000000100001, 7.500000000099981, 12.30000000010004, 12.30000000010004], "stims": {"cell_2": {}, "cell_1": {"Stim0_0_pop_pre_0_soma_0_5": [0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0]}, "cell_0": {"Stim0_0_pop_pre_0_soma_0_5": [0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0]}}, "avgRate": 16.666666666666668, "spkid": [0.0, 1.0, 2.0, 0.0, 1.0], "t": [0.0, 0.1, 0.2, 0.3, 0.39999999999999997, 0.49999999999999994, 0.6, 0.7000000000000001, 0.8000000000000002, 0.9000000000000002, 1.0000000000000002, 1.1000000000000003, 1.2000000000000004, 1.3000000000000005, 1.4000000000000006, 1.5000000000000007, 1.6000000000000008, 1.7000000000000008, 1.800000000000001, 1.900000000000001, 2.000000000000001, 2.1000000000000005, 2.2, 2.3, 2.3999999999999995, 2.499999999999999, 2.5999999999999988, 2.6999999999999984, 2.799999999999998, 2.8999999999999977, 2.9999999999999973, 3.099999999999997, 3.1999999999999966, 3.2999999999999963, 3.399999999999996, 3.4999999999999956, 3.599999999999995, 3.699999999999995, 3.7999999999999945, 3.899999999999994, 3.999999999999994, 4.099999999999993, 4.199999999999993, 4.299999999999993, 4.399999999999992, 4.499999999999992, 4.599999999999992, 4.699999999999991, 4.799999999999991, 4.899999999999991, 4.99999999999999, 5.09999999999999, 5.1999999999999895, 5.299999999999989, 5.399999999999989, 5.4999999999999885, 5.599999999999988, 5.699999999999988, 5.799999999999987, 5.899999999999987, 5.999999999999987, 6.099999999999986, 6.199999999999986, 6.299999999999986, 6.399999999999985, 6.499999999999985, 6.5999999999999845, 6.699999999999984, 6.799999999999984, 6.8999999999999835, 6.999999999999983, 7.099999999999983, 7.199999999999982, 7.299999999999982, 7.399999999999982, 7.499999999999981, 7.599999999999981, 7.699999999999981, 7.79999999999998, 7.89999999999998, 7.99999999999998, 8.09999999999998, 8.199999999999982, 8.299999999999983, 8.399999999999984, 8.499999999999986, 8.599999999999987, 8.699999999999989, 8.79999999999999, 8.899999999999991, 8.999999999999993, 9.099999999999994, 9.199999999999996, 9.299999999999997, 9.399999999999999, 9.5, 9.600000000000001, 9.700000000000003, 9.800000000000004, 9.900000000000006, 10.000000000000007, 10.100000000000009, 10.20000000000001, 10.300000000000011, 10.400000000000013, 10.500000000000014, 10.600000000000016, 10.700000000000017, 10.800000000000018, 10.90000000000002, 11.000000000000021, 11.100000000000023, 11.200000000000024, 11.300000000000026, 11.400000000000027, 11.500000000000028, 11.60000000000003, 11.700000000000031, 11.800000000000033, 11.900000000000034, 12.000000000000036, 12.100000000000037, 12.200000000000038, 12.30000000000004, 12.400000000000041, 12.500000000000043, 12.600000000000044, 12.700000000000045, 12.800000000000047, 12.900000000000048, 13.00000000000005, 13.100000000000051, 13.200000000000053, 13.300000000000054, 13.400000000000055, 13.500000000000057, 13.600000000000058, 13.70000000000006, 13.800000000000061, 13.900000000000063, 14.000000000000064, 14.100000000000065, 14.200000000000067, 14.300000000000068, 14.40000000000007, 14.500000000000071, 14.600000000000072, 14.700000000000074, 14.800000000000075, 14.900000000000077, 15.000000000000078, 15.10000000000008, 15.200000000000081, 15.300000000000082, 15.400000000000084, 15.500000000000085, 15.600000000000087, 15.700000000000088, 15.80000000000009, 15.900000000000091, 16.000000000000092, 16.100000000000094, 16.200000000000095, 16.300000000000097, 16.400000000000098, 16.5000000000001, 16.6000000000001, 16.700000000000102, 16.800000000000104, 16.900000000000105, 17.000000000000107, 17.100000000000108, 17.20000000000011, 17.30000000000011, 17.400000000000112, 17.500000000000114, 17.600000000000115, 17.700000000000117, 17.800000000000118, 17.90000000000012, 18.00000000000012, 18.100000000000122, 18.200000000000124, 18.300000000000125, 18.400000000000126, 18.500000000000128, 18.60000000000013, 18.70000000000013, 18.800000000000132, 18.900000000000134, 19.000000000000135, 19.100000000000136, 19.200000000000138, 19.30000000000014, 19.40000000000014, 19.500000000000142, 19.600000000000144, 19.700000000000145, 19.800000000000146, 19.900000000000148, 20.00000000000015, 20.10000000000015, 20.200000000000152, 20.300000000000153, 20.400000000000155, 20.500000000000156, 20.600000000000158, 20.70000000000016, 20.80000000000016, 20.900000000000162, 21.000000000000163, 21.100000000000165, 21.200000000000166, 21.300000000000168, 21.40000000000017, 21.50000000000017, 21.600000000000172, 21.700000000000173, 21.800000000000175, 21.900000000000176, 22.000000000000178, 22.10000000000018, 22.20000000000018, 22.300000000000182, 22.400000000000183, 22.500000000000185, 22.600000000000186, 22.700000000000188, 22.80000000000019, 22.90000000000019, 23.000000000000192, 23.100000000000193, 23.200000000000195, 23.300000000000196, 23.400000000000198, 23.5000000000002, 23.6000000000002, 23.700000000000202, 23.800000000000203, 23.900000000000205, 24.000000000000206, 24.100000000000207, 24.20000000000021, 24.30000000000021, 24.40000000000021, 24.500000000000213, 24.600000000000215, 24.700000000000216, 24.800000000000217, 24.90000000000022, 25.00000000000022, 25.10000000000022, 25.200000000000223, 25.300000000000225, 25.400000000000226, 25.500000000000227, 25.60000000000023, 25.70000000000023, 25.80000000000023, 25.900000000000233, 26.000000000000234, 26.100000000000236, 26.200000000000237, 26.30000000000024, 26.40000000000024, 26.50000000000024, 26.600000000000243, 26.700000000000244, 26.800000000000246, 26.900000000000247, 27.00000000000025, 27.10000000000025, 27.20000000000025, 27.300000000000253, 27.400000000000254, 27.500000000000256, 27.600000000000257, 27.70000000000026, 27.80000000000026, 27.90000000000026, 28.000000000000263, 28.100000000000264, 28.200000000000266, 28.300000000000267, 28.40000000000027, 28.50000000000027, 28.60000000000027, 28.700000000000273, 28.800000000000274, 28.900000000000276, 29.000000000000277, 29.10000000000028, 29.20000000000028, 29.30000000000028, 29.400000000000283, 29.500000000000284, 29.600000000000286, 29.700000000000287, 29.80000000000029, 29.90000000000029, 30.00000000000029, 30.100000000000293, 30.200000000000294, 30.300000000000296, 30.400000000000297, 30.5000000000003, 30.6000000000003, 30.7000000000003, 30.800000000000303, 30.900000000000304, 31.000000000000306, 31.100000000000307, 31.20000000000031, 31.30000000000031, 31.40000000000031, 31.500000000000313, 31.600000000000314, 31.700000000000315, 31.800000000000317, 31.90000000000032, 32.00000000000032, 32.100000000000314, 32.20000000000031, 32.3000000000003, 32.4000000000003, 32.50000000000029, 32.600000000000286, 32.70000000000028, 32.800000000000274, 32.90000000000027, 33.00000000000026, 33.10000000000026, 33.20000000000025, 33.300000000000246, 33.40000000000024, 33.500000000000234, 33.60000000000023, 33.70000000000022, 33.80000000000022, 33.90000000000021, 34.000000000000206, 34.1000000000002, 34.200000000000195, 34.30000000000019, 34.40000000000018, 34.50000000000018, 34.60000000000017, 34.700000000000166, 34.80000000000016, 34.900000000000155, 35.00000000000015, 35.10000000000014, 35.20000000000014, 35.30000000000013, 35.40000000000013, 35.50000000000012, 35.600000000000115, 35.70000000000011, 35.800000000000104, 35.9000000000001, 36.00000000000009, 36.10000000000009, 36.20000000000008, 36.300000000000075, 36.40000000000007, 36.500000000000064, 36.60000000000006, 36.70000000000005, 36.80000000000005, 36.90000000000004, 37.000000000000036, 37.10000000000003, 37.200000000000024, 37.30000000000002, 37.40000000000001, 37.50000000000001, 37.6, 37.699999999999996, 37.79999999999999, 37.899999999999984, 37.99999999999998, 38.09999999999997, 38.19999999999997, 38.29999999999996, 38.399999999999956, 38.49999999999995, 38.599999999999945, 38.69999999999994, 38.79999999999993, 38.89999999999993, 38.99999999999992, 39.099999999999916, 39.19999999999991, 39.299999999999905, 39.3999999999999, 39.49999999999989, 39.59999999999989, 39.69999999999988, 39.799999999999876, 39.89999999999987, 39.999999999999865, 40.09999999999986, 40.199999999999854, 40.29999999999985, 40.39999999999984, 40.49999999999984, 40.59999999999983, 40.699999999999825, 40.79999999999982, 40.899999999999814, 40.99999999999981, 41.0999999999998, 41.1999999999998, 41.29999999999979, 41.399999999999785, 41.49999999999978, 41.599999999999774, 41.69999999999977, 41.79999999999976, 41.89999999999976, 41.99999999999975, 42.099999999999746, 42.19999999999974, 42.299999999999734, 42.39999999999973, 42.49999999999972, 42.59999999999972, 42.69999999999971, 42.799999999999706, 42.8999999999997, 42.999999999999694, 43.09999999999969, 43.19999999999968, 43.29999999999968, 43.39999999999967, 43.499999999999666, 43.59999999999966, 43.699999999999655, 43.79999999999965, 43.89999999999964, 43.99999999999964, 44.09999999999963, 44.199999999999626, 44.29999999999962, 44.399999999999615, 44.49999999999961, 44.5999999999996, 44.6999999999996, 44.79999999999959, 44.89999999999959, 44.99999999999958, 45.099999999999575, 45.19999999999957, 45.299999999999564, 45.39999999999956, 45.49999999999955, 45.59999999999955, 45.69999999999954, 45.799999999999535, 45.89999999999953, 45.999999999999524, 46.09999999999952, 46.19999999999951, 46.29999999999951, 46.3999999999995, 46.499999999999496, 46.59999999999949, 46.699999999999484, 46.79999999999948, 46.89999999999947, 46.99999999999947, 47.09999999999946, 47.199999999999456, 47.29999999999945, 47.399999999999444, 47.49999999999944, 47.59999999999943, 47.69999999999943, 47.79999999999942, 47.899999999999416, 47.99999999999941, 48.099999999999405, 48.1999999999994, 48.29999999999939, 48.39999999999939, 48.49999999999938, 48.599999999999376, 48.69999999999937, 48.799999999999365, 48.89999999999936, 48.99999999999935, 49.09999999999935, 49.19999999999934, 49.299999999999336, 49.39999999999933, 49.499999999999325, 49.59999999999932, 49.699999999999314, 49.79999999999931, 49.8999999999993, 49.9999999999993, 50.09999999999929, 50.199999999999285, 50.29999999999928, 50.399999999999274, 50.49999999999927, 50.59999999999926, 50.69999999999926, 50.79999999999925, 50.899999999999245, 50.99999999999924, 51.099999999999234, 51.19999999999923, 51.29999999999922, 51.39999999999922, 51.49999999999921, 51.599999999999206, 51.6999999999992, 51.799999999999194, 51.89999999999919, 51.99999999999918, 52.09999999999918, 52.19999999999917, 52.299999999999166, 52.39999999999916, 52.499999999999154, 52.59999999999915, 52.69999999999914, 52.79999999999914, 52.89999999999913, 52.999999999999126, 53.09999999999912, 53.199999999999115, 53.29999999999911, 53.3999999999991, 53.4999999999991, 53.59999999999909, 53.699999999999086, 53.79999999999908, 53.899999999999075, 53.99999999999907, 54.09999999999906, 54.19999999999906, 54.29999999999905, 54.39999999999905, 54.49999999999904, 54.599999999999035, 54.69999999999903, 54.799999999999024, 54.89999999999902, 54.99999999999901, 55.09999999999901, 55.199999999999, 55.299999999998995, 55.39999999999899, 55.499999999998984, 55.59999999999898, 55.69999999999897, 55.79999999999897, 55.89999999999896, 55.999999999998956, 56.09999999999895, 56.199999999998944, 56.29999999999894, 56.39999999999893, 56.49999999999893, 56.59999999999892, 56.699999999998916, 56.79999999999891, 56.899999999998904, 56.9999999999989, 57.09999999999889, 57.19999999999889, 57.29999999999888, 57.399999999998876, 57.49999999999887, 57.599999999998865, 57.69999999999886, 57.79999999999885, 57.89999999999885, 57.99999999999884, 58.099999999998836, 58.19999999999883, 58.299999999998825, 58.39999999999882, 58.49999999999881, 58.59999999999881, 58.6999999999988, 58.799999999998796, 58.89999999999879, 58.999999999998785, 59.09999999999878, 59.199999999998774, 59.29999999999877, 59.39999999999876, 59.49999999999876, 59.59999999999875, 59.699999999998745, 59.79999999999874, 59.899999999998734, 59.99999999999873, 60.09999999999872, 60.19999999999872, 60.29999999999871, 60.399999999998705, 60.4999999999987, 60.599999999998694, 60.69999999999869, 60.79999999999868, 60.89999999999868, 60.99999999999867, 61.099999999998666, 61.19999999999866, 61.299999999998654, 61.39999999999865, 61.49999999999864, 61.59999999999864, 61.69999999999863, 61.799999999998626, 61.89999999999862, 61.999999999998614, 62.09999999999861, 62.1999999999986, 62.2999999999986, 62.39999999999859, 62.499999999998586, 62.59999999999858, 62.699999999998575, 62.79999999999857, 62.89999999999856, 62.99999999999856, 63.09999999999855, 63.199999999998546, 63.29999999999854, 63.399999999998535, 63.49999999999853, 63.59999999999852, 63.69999999999852, 63.79999999999851, 63.899999999998506, 63.9999999999985, 64.0999999999985, 64.1999999999985, 64.29999999999849, 64.39999999999849, 64.49999999999848, 64.59999999999847, 64.69999999999847, 64.79999999999846, 64.89999999999846, 64.99999999999845, 65.09999999999845, 65.19999999999844, 65.29999999999843, 65.39999999999843, 65.49999999999842, 65.59999999999842, 65.69999999999841, 65.7999999999984, 65.8999999999984, 65.9999999999984, 66.09999999999839, 66.19999999999838, 66.29999999999838, 66.39999999999837, 66.49999999999837, 66.59999999999836, 66.69999999999835, 66.79999999999835, 66.89999999999834, 66.99999999999834, 67.09999999999833, 67.19999999999833, 67.29999999999832, 67.39999999999831, 67.49999999999831, 67.5999999999983, 67.6999999999983, 67.79999999999829, 67.89999999999829, 67.99999999999828, 68.09999999999827, 68.19999999999827, 68.29999999999826, 68.39999999999826, 68.49999999999825, 68.59999999999825, 68.69999999999824, 68.79999999999824, 68.89999999999823, 68.99999999999822, 69.09999999999822, 69.19999999999821, 69.2999999999982, 69.3999999999982, 69.4999999999982, 69.59999999999819, 69.69999999999818, 69.79999999999818, 69.89999999999817, 69.99999999999817, 70.09999999999816, 70.19999999999816, 70.29999999999815, 70.39999999999814, 70.49999999999814, 70.59999999999813, 70.69999999999813, 70.79999999999812, 70.89999999999812, 70.99999999999811, 71.0999999999981, 71.1999999999981, 71.2999999999981, 71.39999999999809, 71.49999999999808, 71.59999999999808, 71.69999999999807, 71.79999999999806, 71.89999999999806, 71.99999999999805, 72.09999999999805, 72.19999999999804, 72.29999999999804, 72.39999999999803, 72.49999999999802, 72.59999999999802, 72.69999999999801, 72.79999999999801, 72.899999999998, 72.999999999998, 73.09999999999799, 73.19999999999798, 73.29999999999798, 73.39999999999797, 73.49999999999797, 73.59999999999796, 73.69999999999796, 73.79999999999795, 73.89999999999795, 73.99999999999794, 74.09999999999793, 74.19999999999793, 74.29999999999792, 74.39999999999792, 74.49999999999791, 74.5999999999979, 74.6999999999979, 74.7999999999979, 74.89999999999789, 74.99999999999788, 75.09999999999788, 75.19999999999787, 75.29999999999787, 75.39999999999786, 75.49999999999785, 75.59999999999785, 75.69999999999784, 75.79999999999784, 75.89999999999783, 75.99999999999783, 76.09999999999782, 76.19999999999781, 76.29999999999781, 76.3999999999978, 76.4999999999978, 76.59999999999779, 76.69999999999779, 76.79999999999778, 76.89999999999777, 76.99999999999777, 77.09999999999776, 77.19999999999776, 77.29999999999775, 77.39999999999775, 77.49999999999774, 77.59999999999773, 77.69999999999773, 77.79999999999772, 77.89999999999772, 77.99999999999771, 78.0999999999977, 78.1999999999977, 78.2999999999977, 78.39999999999769, 78.49999999999768, 78.59999999999768, 78.69999999999767, 78.79999999999767, 78.89999999999766, 78.99999999999766, 79.09999999999765, 79.19999999999764, 79.29999999999764, 79.39999999999763, 79.49999999999763, 79.59999999999762, 79.69999999999762, 79.79999999999761, 79.8999999999976, 79.9999999999976, 80.09999999999759, 80.19999999999759, 80.29999999999758, 80.39999999999758, 80.49999999999757, 80.59999999999756, 80.69999999999756, 80.79999999999755, 80.89999999999755, 80.99999999999754, 81.09999999999754, 81.19999999999753, 81.29999999999752, 81.39999999999752, 81.49999999999751, 81.59999999999751, 81.6999999999975, 81.7999999999975, 81.89999999999749, 81.99999999999748, 82.09999999999748, 82.19999999999747, 82.29999999999747, 82.39999999999746, 82.49999999999746, 82.59999999999745, 82.69999999999744, 82.79999999999744, 82.89999999999743, 82.99999999999743, 83.09999999999742, 83.19999999999742, 83.29999999999741, 83.3999999999974, 83.4999999999974, 83.5999999999974, 83.69999999999739, 83.79999999999738, 83.89999999999738, 83.99999999999737, 84.09999999999737, 84.19999999999736, 84.29999999999735, 84.39999999999735, 84.49999999999734, 84.59999999999734, 84.69999999999733, 84.79999999999733, 84.89999999999732, 84.99999999999731, 85.09999999999731, 85.1999999999973, 85.2999999999973, 85.39999999999729, 85.49999999999729, 85.59999999999728, 85.69999999999727, 85.79999999999727, 85.89999999999726, 85.99999999999726, 86.09999999999725, 86.19999999999725, 86.29999999999724, 86.39999999999723, 86.49999999999723, 86.59999999999722, 86.69999999999722, 86.79999999999721, 86.8999999999972, 86.9999999999972, 87.0999999999972, 87.19999999999719, 87.29999999999718, 87.39999999999718, 87.49999999999717, 87.59999999999717, 87.69999999999716, 87.79999999999715, 87.89999999999715, 87.99999999999714, 88.09999999999714, 88.19999999999713, 88.29999999999713, 88.39999999999712, 88.49999999999712, 88.59999999999711, 88.6999999999971, 88.7999999999971, 88.89999999999709, 88.99999999999709, 89.09999999999708, 89.19999999999708, 89.29999999999707, 89.39999999999706, 89.49999999999706, 89.59999999999705, 89.69999999999705, 89.79999999999704, 89.89999999999704, 89.99999999999703, 90.09999999999702, 90.19999999999702, 90.29999999999701, 90.39999999999701, 90.499999999997, 90.599999999997, 90.69999999999699, 90.79999999999698, 90.89999999999698, 90.99999999999697, 91.09999999999697, 91.19999999999696, 91.29999999999696, 91.39999999999695, 91.49999999999694, 91.59999999999694, 91.69999999999693, 91.79999999999693, 91.89999999999692, 91.99999999999692, 92.09999999999691, 92.1999999999969, 92.2999999999969, 92.3999999999969, 92.49999999999689, 92.59999999999688, 92.69999999999688, 92.79999999999687, 92.89999999999687, 92.99999999999686, 93.09999999999685, 93.19999999999685, 93.29999999999684, 93.39999999999684, 93.49999999999683, 93.59999999999683, 93.69999999999682, 93.79999999999681, 93.89999999999681, 93.9999999999968, 94.0999999999968, 94.19999999999679, 94.29999999999679, 94.39999999999678, 94.49999999999677, 94.59999999999677, 94.69999999999676, 94.79999999999676, 94.89999999999675, 94.99999999999675, 95.09999999999674, 95.19999999999673, 95.29999999999673, 95.39999999999672, 95.49999999999672, 95.59999999999671, 95.6999999999967, 95.7999999999967, 95.8999999999967, 95.99999999999669, 96.09999999999668, 96.19999999999668, 96.29999999999667, 96.39999999999667, 96.49999999999666, 96.59999999999665, 96.69999999999665, 96.79999999999664, 96.89999999999664, 96.99999999999663, 97.09999999999663, 97.19999999999662, 97.29999999999661, 97.39999999999661, 97.4999999999966, 97.5999999999966, 97.69999999999659, 97.79999999999659, 97.89999999999658, 97.99999999999658, 98.09999999999657, 98.19999999999656, 98.29999999999656, 98.39999999999655, 98.49999999999655, 98.59999999999654, 98.69999999999654, 98.79999999999653, 98.89999999999652, 98.99999999999652, 99.09999999999651, 99.1999999999965, 99.2999999999965, 99.3999999999965, 99.49999999999649, 99.59999999999648, 99.69999999999648, 99.79999999999647, 99.89999999999647, 99.99999999999646], "Volts_file__pop_pre_pop_pre_0_soma_v": {"cell_1": [-65.0, -66.35899914650287, -67.38782267224542, -68.17213966712598, -68.77104277386958, -69.22755992707039, -69.57438163390907, -69.83676347597856, -70.03435773758643, -70.1823775611781, -70.2925285620816, -70.37383619745265, -57.32012301999715, -46.30984584445645, -38.93277617175556, -33.248265435351016, -26.59557092163199, -16.627623051713137, -2.4725522566656366, 12.702278469930459, 23.165900850740236, 27.533101441131954, 27.907900772095488, 26.129446669859966, 23.162334487378637, 19.496440444582035, 15.413744920141355, 11.098006300210104, 6.676985114039261, 2.2405972893218635, -2.1487267505565324, -6.44936702323486, -10.635344241116226, -14.69161892737841, -18.61184314300663, -22.397028121067443, -26.055245225369934, -29.601947070718893, -33.06266155193012, -36.467713519173714, -39.851209750151725, -43.237940765142596, -46.628743370777485, -49.97793181591061, -53.17548354704002, -56.050599798839855, -58.42578616938828, -60.19594450190088, -61.37926239059858, -62.088699386858345, -62.467146191674814, -62.63716044882118, -62.68536436717227, -62.66607082735419, -62.61111607620463, -62.53849294995378, -62.45820555032917, -62.37580157890827, -62.29437815941235, -62.215685774158274, -62.14072755704787, -62.07008396047092, -62.00408980867925, -61.942932204467034, -61.886677578753144, -61.83535179087117, -61.788949688090234, -61.74744066502853, -61.71077379369631, -61.67888206805663, -61.65168578370656, -61.6290952005178, -61.61101264459664, -61.597334180808744, -61.58795095765328, -61.5827503010766, -61.58161661433045, -61.58443212647897, -61.591077521505134, -61.601432472147735, -61.61537609683535, -61.632787353804595, -61.653545383293135, -61.67752980629233, -61.7046209865247, -61.73470026092832, -61.76765014287211, -61.80335450151552, -61.84169872010059, -61.88256983548005, -61.92585666080852, -61.971449893029025, -62.01924220655342, -62.06911048560941, -62.12091718461531, -62.17455014275442, -62.22991055703344, -62.28690677172502, -62.34545116537911, -62.405458668495946, -62.466846123097596, -62.52953206290219, -62.59343669165896, -62.658481944420664, -62.72459157394967, -62.791691234851385, -62.85970855382236, -62.928573182350505, -62.99821683200033, -63.06857329403942, -63.139516904474114, -63.21096351335683, -52.823312529061695, -44.57265602319288, -39.420322678097875, -35.957914282305595, -32.821084819559516, -29.152581091923054, -24.535795211489884, -18.9222130589384, -12.70221178375467, -6.747745484428386, -2.1020938453441236, 0.5679599640401687, 1.2165190102484438, 0.21478319366042142, -1.9546846342191915, -4.868242647973357, -8.209085183541792, -11.758097099455181, -15.370845369435106, -18.955933883667093, -22.457877898528828, -25.84811001801287, -29.114979284734492, -32.261175364528846, -35.298540528435176, -38.24211457991159, -41.10407722188688, -43.886039877249694, -46.57090448867202, -49.116626541031806, -51.45852887406296, -53.51998227406344, -55.2371216248925, -56.58139006093879, -57.568848894427624, -58.251835760522674, -58.69890703683701, -58.97660369430231, -59.13982586409274, -59.22884926292891, -59.27153126962762, -59.28625024974979, -59.284792698561645, -59.27461077838343, -59.26039441462845, -59.2451003224655, -59.23060253960562, -59.218096141105725, -59.20834589494298, -59.20183949694418, -59.19888267075886, -59.19965893658194, -59.20426783372661, -59.212749891702074, -59.22510334385631, -59.24129560555677, -59.261271362249076, -59.28495840906413, -59.31227196039322, -59.34311789091966, -59.37739521162715, -59.41499798556337, -59.45581682517025, -59.4997400718896, -59.54665473123276, -59.59644721758789, -59.649003949693785, -59.704211828072516, -59.76195861860543, -59.82213326109988, -59.88462611763259, -59.949329172328085, -60.01613619180307, -60.08492371318521, -60.15552028551227, -60.227802645002996, -60.301671520523826, -60.37703939893764, -60.45382448133043, -60.53194782010197, -60.611332067696, -60.69190102172489, -60.77357954611096, -60.856293654458355, -60.93997064957182, -61.02453926876949, -61.10990148523143, -61.19590982975232, -61.28247426175452, -61.369533186301574, -61.45703833126709, -61.54494707606401, -61.63321874613176, -61.721812982308975, -61.81068916519534, -61.89980634984887, -61.989123424749586, -62.078599348870654, -62.168111102528144, -62.25758022558814, -52.13203659241283, -44.11797684262783, -39.13221063058348, -35.81389998432463, -32.88044622750153, -29.555514105307854, -25.487667230918795, -20.646651685995813, -15.33159393414912, -10.181336240218055, -5.993178955258487, -3.3658191915617874, -2.4661644703826036, -3.089284767378177, -4.86608425246542, -7.425092261783796, -10.462683809108409, -13.755515329666025, -17.149686366950796, -20.544314627655794, -23.877232511665827, -27.112924034636148, -30.236693788329724, -33.24803419279171, -36.15475984790251, -38.967578151372095, -41.69363793539875, -44.329273310418564, -46.85345788105954, -49.22526218836835, -51.386455712857114, -53.27465511518788, -54.84244559276196, -56.07360702626229, -56.98800723218059, -57.63293825160197, -58.067252078269554, -58.34849905327057, -58.523943114788175, -58.62935218026324, -58.689905591785504, -58.7225739912564, -58.73850504935587, -58.74492323467567, -58.74648791194747, -58.74620752447606, -58.746033752723584, -58.74724017870379, -58.75066144477484, -58.75684413187646, -58.766142440725346, -58.77877951298883, -58.794887330771665, -58.81453317309137, -58.837737542569386, -58.86448659723144, -58.89474097553484, -58.9284422023599, -58.965517434296906, -59.005883037372016, -59.049440775345424, -59.09604821719115, -59.14558560299323, -59.19794283072989, -59.253013563112404, -59.310692749208236, -59.37087575380299, -59.43345821600318, -59.49833621379829, -59.56540653444654, -59.63456695954311, -59.70571652635799, -59.77875575205537, -59.853586818839815, -59.93011372290118, -60.008242391718404, -60.08787064484591, -60.16881714147047, -60.250963458254105, -60.33422234732833, -60.41852150838772, -60.50379547715728, -60.589981729406894, -60.677018945477876, -60.764846356417564, -60.85340360937729, -60.94263086298624, -61.03246896725782, -61.12282184986925, -61.21355265663823, -61.304582874232196, -61.39586255946248, -61.487354791539424, -61.57902779542433, -61.6708511580957, -61.76279418948001, -61.85482537371135, -61.94691234612443, -62.03902209887123, -62.13108033193822, -52.04005096293385, -44.05739454507042, -39.09513206548677, -35.80010288082723, -32.90156945541686, -29.63443314922769, -25.65583708571325, -20.937260976845344, -15.763586443826672, -10.741875491287859, -6.632751211737637, -4.020561330811871, -3.0844925803200063, -3.645657035982283, -5.355170935727002, -7.85135213974309, -10.833807418128458, -14.079690068958238, -17.433919377223983, -20.794541821308766, -24.097171394636, -27.305745625652566, -30.405006924429532, -33.393316091235455, -36.277810784186144, -39.06846519675131, -41.771547616382776, -44.38276640040218, -46.88072642800937, -49.22495268249907, -51.35848456619093, -53.221131937722234, -54.767799354704856, -55.98356976383285, -56.88877173813187, -57.529421414630285, -57.963124931077964, -58.246015959684684, -58.424256887860864, -58.532898203394915, -58.59675324087095, -58.632624733254, -58.65159734218338, -58.6608835704669, -58.665152769240194, -58.66743073695513, -58.66968720857483, -58.673211882641034, -58.67885284955915, -58.68716755394026, -58.698518847671494, -58.71313673574343, -58.7311586607364, -58.75265627753629, -58.77765363168295, -58.8061397859344, -58.8380777946614, -58.873411224166134, -58.912068985648695, -58.95396898043021, -58.999020889889984, -59.04712833649628, -59.09813612660732, -59.151917868745684, -59.20836145513936, -59.26736097102852, -59.32881307959503, -59.39261555912262, -59.458666850021814, -59.526866053070584, -59.59711310902968, -59.669309032463694, -59.743356142669874, -59.81915826860583, -59.89662092077836, -59.97565143030482, -60.056159058305866, -60.13798563893766, -60.220989931677494, -60.30507483442506, -60.3901647485948, -60.476194111105805, -60.563101758312904, -60.65082830494366, -60.739315053909095, -60.828503659181315, -60.91833613816913, -61.00875502785647, -61.09969337606202, -61.19099635454095, -61.28257747749798, -61.37438402057188, -61.46637887737146, -61.558531298425386, -61.65081238349897, -61.74319307636197, -61.835643441549436, -61.92813256764018, -62.02062875053504, -62.113078127638104, -52.0267234339068, -44.04826740947523, -39.08918276776125, -35.79745572425915, -32.904048225752554, -29.645467454348466, -25.680095191362827, -20.979670928220376, -15.827015263381753, -10.824559805373571, -6.7275441219919765, -4.11812414468382, -3.1775382272812847, -3.7300918510421415, -5.429676732420051, -7.916488985137728, -10.890612074127214, -14.12936338000246, -17.47764309614243, -20.833066344927467, -24.131032213934922, -27.33551358574407, -30.430999170326118, -33.41574499577425, -36.296801137448696, -39.0840320506643, -41.783574723677376, -44.39103261939377, -46.8849597568195, -49.22495394568982, -51.35425070779588, -53.21299489769644, -54.75644220303516, -55.96987045277503, -56.8736400936242, -57.513639352803125, -57.947261167477464, -58.23039916945321, -58.409077679917424, -58.51822651875292, -58.5825994511279, -58.61897254691345, -58.638420726539, -58.64815481499748, -58.65284588630351, -58.65552256677702, -58.65815749069972, -58.662042926930845, -58.66802910223462, -58.676675183011014, -58.68834539046784, -58.70327081528777, -58.721589763803195, -58.74337458338014, -58.76864988067114, -58.79740517897356, -58.82960391619031, -58.865189983155695, -58.90409257039338, -58.94622982394485, -58.99151164349609, -59.03984184975634, -59.091073814831766, -59.14507528963417, -59.201731650494004, -59.260936080712426, -59.32258509954919, -59.386576678377615, -59.45280958370147, -59.52118327932831, -59.591598063192414, -59.663955284262585, -59.73815756876077, -59.81410902580009, -59.891715422107325, -59.970884324478874, -60.05152521243515, -60.133485832513585, -60.216621082050764, -60.30083215777023, -60.386042857673786, -60.47218755507432, -60.55920527248615, -60.64703691232056, -60.73562409313655, -60.824908777930325, -60.91483327192739, -61.005340374121864, -61.09636734861179, -61.18775678781228, -61.27942106971625, -61.37130708218161, -61.46337770468136, -61.555602347430586, -61.64795233926737, -61.74039886965289, -61.83291224033378, -61.92546175806727, -62.01801591475459, -62.11052376307984, -52.02480416426632, -44.04691158405878, -39.08825535735996, -35.79698903099717, -32.90431596207602, -29.646971991139615, -25.68351786586472, -20.98573385140818, -15.836146644119523, -10.836518351943653, -6.741303853990498, -4.132331718297793, -3.1911292586872193, -3.742461685857007, -5.440623851761641, -7.92608689102517, -10.899005443529905, -14.136722496702268, -17.48413696247517, -20.838801571923558, -24.136084648396945, -27.33996527665981, -30.43489518045326, -33.419115369764945, -36.29966333403487, -39.086387513806116, -41.785405516941026, -44.3923052321797, -46.8856330244281, -49.2249974724694, -51.35366296527387, -53.21182428201078, -54.754789512589184, -55.96786596874324, -56.8714192262818, -57.51131879962552, -57.94492609411266, -58.228099108930124, -58.40684152002068, -58.51606510337518, -58.58051464705876, -58.61696215548278, -58.636481025610145, -58.646281780549465, -58.65103571508643, -58.65377185247914, -58.656463242530805, -58.66040252593506, -58.66644024017862, -58.675135802972285, -58.68685363589664, -58.70182498881796, -58.720188294922146, -58.74201600342931, -58.76733280364531, -58.79612828680906, -58.82836594749509, -58.86398972457314, -58.90292884998521, -58.94510150612732, -58.99041762517627, -59.038781057398715, -59.090046423712195, -59.14408062128829, -59.20076866025176, -59.26000359316109, -59.3216819191132, -59.3857016384717, -59.45196156611784, -59.52036121960734, -59.59080094974986, -59.663182155051224, -59.737407507244086, -59.813381157032076, -59.891008909225214, -59.97019836569216, -60.05085903849084, -60.13283952560909, -60.215994169302896, -60.30022392244841, -60.38545249728358, -60.47161425906632, -60.558648258184284, -60.6464954394966, -60.735097467991174, -60.82439635209372, -60.91433443936315, -61.00485456737093, -61.0958946014007, -61.187296767605304, -61.278973283262296, -61.370870982089265, -61.462952742596045, -61.555187998741395, -61.647548112935866, -61.74000431052597, -61.832526927884736, -61.925085303636976, -62.01764795834849, -62.110164356300935, -52.02453102334566, -44.04671414123907, -39.08811569393105, -35.7969132688589, -32.90434422923819, -29.647176704153683, -25.683997016846575, -20.986591640202416, -15.837445740296163, -10.838225731454116, -6.743273638369966, -4.134370171935599, -3.193083234923644, -3.744243586047416, -5.442203876311775, -7.927474857284356, -10.900221528751736, -14.13779070040949, -17.485081233610373, -20.83963693186386, -24.13682175107233, -27.340615772147526, -30.435465404019123, -33.419609527804724, -36.300083846846334, -39.0867345026126, -41.785676297093616, -44.392494854961974, -46.885735415997864, -49.225008119637266, -51.35358152871427, -53.21165770717114, -54.75455240190906, -55.967577274671775, -56.87109868963604, -57.51098346442136, -57.94458842473954, -58.2277663830157, -58.40651799513067, -58.51575239927409, -58.580213065005296, -58.61667139549949, -58.63620055912122, -58.64601103034161, -58.65077413294042, -58.65351894587236, -58.656218578042925, -58.66016572334609, -58.66621096387106, -58.674913753478116, -58.6866385426121, -58.70161660409547, -58.719986389424626, -58.74182036253366, -58.76714322467865, -58.795944576929934, -58.82818792207038, -58.86381720593441, -58.9027616664759, -58.944939491373844, -58.990260617532385, -59.03862889952379, -59.08989913748108, -59.14393810607201, -59.20063076292432, -59.259870141909126, -59.32155273931345, -59.38557655974658, -59.45184042511775, -59.5202438607797, -59.5906872252121, -59.663071924109516, -59.737300635814414, -59.81327751707528, -59.89090837824241, -59.970100826291045, -60.05076437802081, -60.13274775253274, -60.215905213239246, -60.30013767844956, -60.38536884832222, -60.47153308708669, -60.55856944920876, -60.64641888569416, -60.73502306823855, -60.82432401182879, -60.91426407013982, -61.00478608632064, -61.09582801053394, -61.1872320173832, -61.27891030159423, -61.37080968936536, -61.46289305918425, -61.5551298484676, -61.64749142446475, -61.739949017681454, -61.832472969466814, -61.9250326230273, -62.01759650305374, -62.11011413149809, -52.02449251046272, -44.04668580911001, -39.088095157107915, -35.79690155556951, -32.904347123470245, -29.647204514674804, -25.68406367057892, -20.986711985030876, -15.837628802814148, -10.838467001550908, -6.743552564249088, -4.134659315596677, -3.1933608238464615, -3.7444971033129564, -5.442429000422056, -7.927672903542756, -10.900395297369665, -14.137943549460202, -17.485216527996556, -20.839756772476044, -24.13692762414738, -27.34070931672065, -30.435547504317903, -33.41968076893339, -36.30014456269459, -39.086784700897894, -41.785715584820295, -44.39252251478038, -46.88575056798068, -49.22501010687352, -51.35357028979861, -53.211634227313375, -54.75451876765123, -55.967536202770106, -56.87105301444858, -57.51093563643268, -57.94454023868654, -58.22771888974558, -58.40647181075637, -58.51570776042221, -58.58017001797616, -58.61662989937881, -58.63616053949686, -58.64597240533587, -58.65073682450544, -58.65348288372979, -58.656183700245215, -58.66013197547772, -58.666178297846585, -58.67488212635032, -58.68660791554084, -58.70158694150954, -58.71995765836195, -58.741792532130106, -58.76711626577484, -58.79591846176989, -58.828162624070735, -58.86379269950736, -58.90273792689366, -58.944916494665165, -58.99023834040352, -59.03860731929846, -59.089878256908314, -59.14391791052264, -59.20061123032743, -59.259851247550905, -59.32153445809014, -59.385558867166075, -59.451823297694034, -59.520227276141966, -59.59067116208653, -59.66305636225064, -59.737285555922824, -59.81326290071745, -59.89089420777898, -59.97008708481483, -60.05075104930516, -60.13273483741768, -60.2158927014665, -60.30012555490309, -60.385357096196735, -60.47152168944478, -60.558558389699925, -60.64640814884614, -60.7350126395356, -60.82431387769027, -60.91425421785728, -61.004776503981525, -61.09581869811705, -61.18722296766327, -61.27890150420147, -61.370801132890314, -61.46288473222694, -61.55512174012417, -61.64748352452015, -61.73994131665364, -61.832465458580295, -61.9250252941576, -62.017589348662995, -62.11010715207939, -52.02448712038264, -44.04668178948146, -39.088092189646936, -35.79689980231291, -32.90434740775301, -29.647208290000417, -25.684072898190923, -20.98672876007678, -15.837654409621436, -10.8385008250908, -6.743591730175617, -4.134699970554394, -3.193399901020832, -3.7445328327288054, -5.442460764099469, -7.927700877980444, -10.900419869554813, -14.137965186490025, -17.48523569950955, -20.839773770560107, -24.136942655033828, -27.340722609375945, -30.435559181502484, -33.41969091162237, -36.30015321681794, -39.086791866489364, -41.78572120527734, -44.392526487561305, -46.8857527673531, -49.225010438604045, -51.35356874379926, -53.21163094211515, -54.75451403830344, -55.96753041439106, -56.871046569323575, -57.510928882725736, -57.94453343167999, -58.22771217922765, -58.40646528469371, -58.51570145283815, -58.580163935771395, -58.616624036979246, -58.636154886500975, -58.64596695023062, -58.650731556285386, -58.653477792467655, -58.65617877717941, -58.660127212904165, -58.66617368895166, -58.674877665044, -58.68660359631203, -58.70158275930815, -58.719953608506096, -58.74178861023402, -58.76711246769351, -58.79591478355661, -58.82815906194458, -58.86378924982819, -58.902734586143055, -58.944913259431914, -58.99023520737244, -59.038604285241824, -59.08987532217395, -59.14391507301472, -59.20060848690414, -59.25984859469971, -59.32153189224468, -59.38555638484706, -59.451820895564566, -59.52022495102307, -59.590668910954236, -59.66305418222678, -59.73728344426302, -59.81326085480012, -59.890892225094866, -59.97008516295888, -60.050749185968584, -60.132733032679006, -60.2158909538533, -60.300123862264776, -60.385355456147785, -60.47152009958263, -60.5585568477056, -60.64640665252468, -60.73501118682716, -60.82431246666696, -60.914252846714305, -61.004775171026616, -61.09581740331358, -61.18722170997353, -61.278900282151724, -61.37079994486345, -61.46288357660847, -61.55512061537016, -61.64748242918367, -61.739940249390855, -61.832464418147126, -61.92502427940152, -62.017588358513954, -62.11010618658029, -52.02448637045113, -44.0466812241938, -39.0880917664241, -35.796899545720244, -32.90434743387667, -29.647208802255378, -25.684074170766987, -20.986731086398393, -15.83765797069199, -10.838505537138829, -6.743597193506525, -4.134705647603113, -3.1934053629346186, -3.7445378312335125, -5.442465211759844, -7.927704798512524, -10.900423316250333, -14.137968223989294, -17.48523839302711, -20.839776160516113, -24.136944769929684, -27.340724481015084, -30.435560826854733, -33.419692341865726, -36.3001544382334, -39.086792878984255, -41.78572200078558, -44.39252705157803, -46.88575308208999, -49.22501049070946, -51.353568531708774, -53.21163048516183, -54.75451337787452, -55.96752960461062, -56.871045666784454, -57.5109279364442, -57.94453247762932, -58.22771123854997, -58.40646436981947, -58.51570056860207, -58.580163083179905, -58.61662321527379, -58.63615409423581, -58.645966185798, -58.650730818145, -58.65347707922822, -58.65617808761175, -58.66012654592664, -58.666173043606975, -58.6748770404761, -58.686602991745815, -58.70158217403304, -58.71995304186306, -58.74178806160554, -58.7671119364958, -58.7959142692337, -58.828158563963676, -58.8637887676764, -58.90273411932448, -58.94491280746566, -58.99023476979102, -59.03860386159029, -59.08987491249659, -59.14391467701454, -59.2006081041382, -59.2598482246733, -59.32153153445576, -59.38555603880593, -59.45182056080144, -59.52022462709024, -59.59066859742582, -59.66305387869744, -59.7372831503461, -59.81326057012618, -59.89089194931039, -59.97008489572484, -60.050748926959706, -60.13273278190181, -60.21589071109879, -60.3001236272299, -60.38535522849701, -60.47151987897816, -60.55855663382132, -60.6464064450519, -60.73501098547608, -60.824312271166384, -60.914252656810305, -61.0047749864809], "cell_0": [-65.0, -66.35899914650287, -67.38782267224542, -68.17213966712598, -68.77104277386958, -69.22755992707039, -69.57438163390907, -69.83676347597856, -70.03435773758643, -70.1823775611781, -70.2925285620816, -70.37383619745265, -57.32012301999715, -46.30984584445645, -38.93277617175556, -33.248265435351016, -26.59557092163199, -16.627623051713137, -2.4725522566656366, 12.702278469930459, 23.165900850740236, 27.533101441131954, 27.907900772095488, 26.129446669859966, 23.162334487378637, 19.496440444582035, 15.413744920141355, 11.098006300210104, 6.676985114039261, 2.2405972893218635, -2.1487267505565324, -6.44936702323486, -10.635344241116226, -14.69161892737841, -18.61184314300663, -22.397028121067443, -26.055245225369934, -29.601947070718893, -33.06266155193012, -36.467713519173714, -39.851209750151725, -43.237940765142596, -46.628743370777485, -49.97793181591061, -53.17548354704002, -56.050599798839855, -58.42578616938828, -60.19594450190088, -61.37926239059858, -62.088699386858345, -62.467146191674814, -62.63716044882118, -62.68536436717227, -62.66607082735419, -62.61111607620463, -62.53849294995378, -62.45820555032917, -62.37580157890827, -62.29437815941235, -62.215685774158274, -62.14072755704787, -62.07008396047092, -62.00408980867925, -61.942932204467034, -61.886677578753144, -61.83535179087117, -61.788949688090234, -61.74744066502853, -61.71077379369631, -61.67888206805663, -61.65168578370656, -61.6290952005178, -61.61101264459664, -61.597334180808744, -61.58795095765328, -61.5827503010766, -61.58161661433045, -61.58443212647897, -61.591077521505134, -61.601432472147735, -61.61537609683535, -61.632787353804595, -61.653545383293135, -61.67752980629233, -61.7046209865247, -61.73470026092832, -61.76765014287211, -61.80335450151552, -61.84169872010059, -61.88256983548005, -61.92585666080852, -61.971449893029025, -62.01924220655342, -62.06911048560941, -62.12091718461531, -62.17455014275442, -62.22991055703344, -62.28690677172502, -62.34545116537911, -62.405458668495946, -62.466846123097596, -62.52953206290219, -62.59343669165896, -62.658481944420664, -62.72459157394967, -62.791691234851385, -62.85970855382236, -62.928573182350505, -62.99821683200033, -63.06857329403942, -63.139516904474114, -63.21096351335683, -52.823312529061695, -44.57265602319288, -39.420322678097875, -35.957914282305595, -32.821084819559516, -29.152581091923054, -24.535795211489884, -18.9222130589384, -12.70221178375467, -6.747745484428386, -2.1020938453441236, 0.5679599640401687, 1.2165190102484438, 0.21478319366042142, -1.9546846342191915, -4.868242647973357, -8.209085183541792, -11.758097099455181, -15.370845369435106, -18.955933883667093, -22.457877898528828, -25.84811001801287, -29.114979284734492, -32.261175364528846, -35.298540528435176, -38.24211457991159, -41.10407722188688, -43.886039877249694, -46.57090448867202, -49.116626541031806, -51.45852887406296, -53.51998227406344, -55.2371216248925, -56.58139006093879, -57.568848894427624, -58.251835760522674, -58.69890703683701, -58.97660369430231, -59.13982586409274, -59.22884926292891, -59.27153126962762, -59.28625024974979, -59.284792698561645, -59.27461077838343, -59.26039441462845, -59.2451003224655, -59.23060253960562, -59.218096141105725, -59.20834589494298, -59.20183949694418, -59.19888267075886, -59.19965893658194, -59.20426783372661, -59.212749891702074, -59.22510334385631, -59.24129560555677, -59.261271362249076, -59.28495840906413, -59.31227196039322, -59.34311789091966, -59.37739521162715, -59.41499798556337, -59.45581682517025, -59.4997400718896, -59.54665473123276, -59.59644721758789, -59.649003949693785, -59.704211828072516, -59.76195861860543, -59.82213326109988, -59.88462611763259, -59.949329172328085, -60.01613619180307, -60.08492371318521, -60.15552028551227, -60.227802645002996, -60.301671520523826, -60.37703939893764, -60.45382448133043, -60.53194782010197, -60.611332067696, -60.69190102172489, -60.77357954611096, -60.856293654458355, -60.93997064957182, -61.02453926876949, -61.10990148523143, -61.19590982975232, -61.28247426175452, -61.369533186301574, -61.45703833126709, -61.54494707606401, -61.63321874613176, -61.721812982308975, -61.81068916519534, -61.89980634984887, -61.989123424749586, -62.078599348870654, -62.168111102528144, -62.25758022558814, -52.13203659241283, -44.11797684262783, -39.13221063058348, -35.81389998432463, -32.88044622750153, -29.555514105307854, -25.487667230918795, -20.646651685995813, -15.33159393414912, -10.181336240218055, -5.993178955258487, -3.3658191915617874, -2.4661644703826036, -3.089284767378177, -4.86608425246542, -7.425092261783796, -10.462683809108409, -13.755515329666025, -17.149686366950796, -20.544314627655794, -23.877232511665827, -27.112924034636148, -30.236693788329724, -33.24803419279171, -36.15475984790251, -38.967578151372095, -41.69363793539875, -44.329273310418564, -46.85345788105954, -49.22526218836835, -51.386455712857114, -53.27465511518788, -54.84244559276196, -56.07360702626229, -56.98800723218059, -57.63293825160197, -58.067252078269554, -58.34849905327057, -58.523943114788175, -58.62935218026324, -58.689905591785504, -58.7225739912564, -58.73850504935587, -58.74492323467567, -58.74648791194747, -58.74620752447606, -58.746033752723584, -58.74724017870379, -58.75066144477484, -58.75684413187646, -58.766142440725346, -58.77877951298883, -58.794887330771665, -58.81453317309137, -58.837737542569386, -58.86448659723144, -58.89474097553484, -58.9284422023599, -58.965517434296906, -59.005883037372016, -59.049440775345424, -59.09604821719115, -59.14558560299323, -59.19794283072989, -59.253013563112404, -59.310692749208236, -59.37087575380299, -59.43345821600318, -59.49833621379829, -59.56540653444654, -59.63456695954311, -59.70571652635799, -59.77875575205537, -59.853586818839815, -59.93011372290118, -60.008242391718404, -60.08787064484591, -60.16881714147047, -60.250963458254105, -60.33422234732833, -60.41852150838772, -60.50379547715728, -60.589981729406894, -60.677018945477876, -60.764846356417564, -60.85340360937729, -60.94263086298624, -61.03246896725782, -61.12282184986925, -61.21355265663823, -61.304582874232196, -61.39586255946248, -61.487354791539424, -61.57902779542433, -61.6708511580957, -61.76279418948001, -61.85482537371135, -61.94691234612443, -62.03902209887123, -62.13108033193822, -52.04005096293385, -44.05739454507042, -39.09513206548677, -35.80010288082723, -32.90156945541686, -29.63443314922769, -25.65583708571325, -20.937260976845344, -15.763586443826672, -10.741875491287859, -6.632751211737637, -4.020561330811871, -3.0844925803200063, -3.645657035982283, -5.355170935727002, -7.85135213974309, -10.833807418128458, -14.079690068958238, -17.433919377223983, -20.794541821308766, -24.097171394636, -27.305745625652566, -30.405006924429532, -33.393316091235455, -36.277810784186144, -39.06846519675131, -41.771547616382776, -44.38276640040218, -46.88072642800937, -49.22495268249907, -51.35848456619093, -53.221131937722234, -54.767799354704856, -55.98356976383285, -56.88877173813187, -57.529421414630285, -57.963124931077964, -58.246015959684684, -58.424256887860864, -58.532898203394915, -58.59675324087095, -58.632624733254, -58.65159734218338, -58.6608835704669, -58.665152769240194, -58.66743073695513, -58.66968720857483, -58.673211882641034, -58.67885284955915, -58.68716755394026, -58.698518847671494, -58.71313673574343, -58.7311586607364, -58.75265627753629, -58.77765363168295, -58.8061397859344, -58.8380777946614, -58.873411224166134, -58.912068985648695, -58.95396898043021, -58.999020889889984, -59.04712833649628, -59.09813612660732, -59.151917868745684, -59.20836145513936, -59.26736097102852, -59.32881307959503, -59.39261555912262, -59.458666850021814, -59.526866053070584, -59.59711310902968, -59.669309032463694, -59.743356142669874, -59.81915826860583, -59.89662092077836, -59.97565143030482, -60.056159058305866, -60.13798563893766, -60.220989931677494, -60.30507483442506, -60.3901647485948, -60.476194111105805, -60.563101758312904, -60.65082830494366, -60.739315053909095, -60.828503659181315, -60.91833613816913, -61.00875502785647, -61.09969337606202, -61.19099635454095, -61.28257747749798, -61.37438402057188, -61.46637887737146, -61.558531298425386, -61.65081238349897, -61.74319307636197, -61.835643441549436, -61.92813256764018, -62.02062875053504, -62.113078127638104, -52.0267234339068, -44.04826740947523, -39.08918276776125, -35.79745572425915, -32.904048225752554, -29.645467454348466, -25.680095191362827, -20.979670928220376, -15.827015263381753, -10.824559805373571, -6.7275441219919765, -4.11812414468382, -3.1775382272812847, -3.7300918510421415, -5.429676732420051, -7.916488985137728, -10.890612074127214, -14.12936338000246, -17.47764309614243, -20.833066344927467, -24.131032213934922, -27.33551358574407, -30.430999170326118, -33.41574499577425, -36.296801137448696, -39.0840320506643, -41.783574723677376, -44.39103261939377, -46.8849597568195, -49.22495394568982, -51.35425070779588, -53.21299489769644, -54.75644220303516, -55.96987045277503, -56.8736400936242, -57.513639352803125, -57.947261167477464, -58.23039916945321, -58.409077679917424, -58.51822651875292, -58.5825994511279, -58.61897254691345, -58.638420726539, -58.64815481499748, -58.65284588630351, -58.65552256677702, -58.65815749069972, -58.662042926930845, -58.66802910223462, -58.676675183011014, -58.68834539046784, -58.70327081528777, -58.721589763803195, -58.74337458338014, -58.76864988067114, -58.79740517897356, -58.82960391619031, -58.865189983155695, -58.90409257039338, -58.94622982394485, -58.99151164349609, -59.03984184975634, -59.091073814831766, -59.14507528963417, -59.201731650494004, -59.260936080712426, -59.32258509954919, -59.386576678377615, -59.45280958370147, -59.52118327932831, -59.591598063192414, -59.663955284262585, -59.73815756876077, -59.81410902580009, -59.891715422107325, -59.970884324478874, -60.05152521243515, -60.133485832513585, -60.216621082050764, -60.30083215777023, -60.386042857673786, -60.47218755507432, -60.55920527248615, -60.64703691232056, -60.73562409313655, -60.824908777930325, -60.91483327192739, -61.005340374121864, -61.09636734861179, -61.18775678781228, -61.27942106971625, -61.37130708218161, -61.46337770468136, -61.555602347430586, -61.64795233926737, -61.74039886965289, -61.83291224033378, -61.92546175806727, -62.01801591475459, -62.11052376307984, -52.02480416426632, -44.04691158405878, -39.08825535735996, -35.79698903099717, -32.90431596207602, -29.646971991139615, -25.68351786586472, -20.98573385140818, -15.836146644119523, -10.836518351943653, -6.741303853990498, -4.132331718297793, -3.1911292586872193, -3.742461685857007, -5.440623851761641, -7.92608689102517, -10.899005443529905, -14.136722496702268, -17.48413696247517, -20.838801571923558, -24.136084648396945, -27.33996527665981, -30.43489518045326, -33.419115369764945, -36.29966333403487, -39.086387513806116, -41.785405516941026, -44.3923052321797, -46.8856330244281, -49.2249974724694, -51.35366296527387, -53.21182428201078, -54.754789512589184, -55.96786596874324, -56.8714192262818, -57.51131879962552, -57.94492609411266, -58.228099108930124, -58.40684152002068, -58.51606510337518, -58.58051464705876, -58.61696215548278, -58.636481025610145, -58.646281780549465, -58.65103571508643, -58.65377185247914, -58.656463242530805, -58.66040252593506, -58.66644024017862, -58.675135802972285, -58.68685363589664, -58.70182498881796, -58.720188294922146, -58.74201600342931, -58.76733280364531, -58.79612828680906, -58.82836594749509, -58.86398972457314, -58.90292884998521, -58.94510150612732, -58.99041762517627, -59.038781057398715, -59.090046423712195, -59.14408062128829, -59.20076866025176, -59.26000359316109, -59.3216819191132, -59.3857016384717, -59.45196156611784, -59.52036121960734, -59.59080094974986, -59.663182155051224, -59.737407507244086, -59.813381157032076, -59.891008909225214, -59.97019836569216, -60.05085903849084, -60.13283952560909, -60.215994169302896, -60.30022392244841, -60.38545249728358, -60.47161425906632, -60.558648258184284, -60.6464954394966, -60.735097467991174, -60.82439635209372, -60.91433443936315, -61.00485456737093, -61.0958946014007, -61.187296767605304, -61.278973283262296, -61.370870982089265, -61.462952742596045, -61.555187998741395, -61.647548112935866, -61.74000431052597, -61.832526927884736, -61.925085303636976, -62.01764795834849, -62.110164356300935, -52.02453102334566, -44.04671414123907, -39.08811569393105, -35.7969132688589, -32.90434422923819, -29.647176704153683, -25.683997016846575, -20.986591640202416, -15.837445740296163, -10.838225731454116, -6.743273638369966, -4.134370171935599, -3.193083234923644, -3.744243586047416, -5.442203876311775, -7.927474857284356, -10.900221528751736, -14.13779070040949, -17.485081233610373, -20.83963693186386, -24.13682175107233, -27.340615772147526, -30.435465404019123, -33.419609527804724, -36.300083846846334, -39.0867345026126, -41.785676297093616, -44.392494854961974, -46.885735415997864, -49.225008119637266, -51.35358152871427, -53.21165770717114, -54.75455240190906, -55.967577274671775, -56.87109868963604, -57.51098346442136, -57.94458842473954, -58.2277663830157, -58.40651799513067, -58.51575239927409, -58.580213065005296, -58.61667139549949, -58.63620055912122, -58.64601103034161, -58.65077413294042, -58.65351894587236, -58.656218578042925, -58.66016572334609, -58.66621096387106, -58.674913753478116, -58.6866385426121, -58.70161660409547, -58.719986389424626, -58.74182036253366, -58.76714322467865, -58.795944576929934, -58.82818792207038, -58.86381720593441, -58.9027616664759, -58.944939491373844, -58.990260617532385, -59.03862889952379, -59.08989913748108, -59.14393810607201, -59.20063076292432, -59.259870141909126, -59.32155273931345, -59.38557655974658, -59.45184042511775, -59.5202438607797, -59.5906872252121, -59.663071924109516, -59.737300635814414, -59.81327751707528, -59.89090837824241, -59.970100826291045, -60.05076437802081, -60.13274775253274, -60.215905213239246, -60.30013767844956, -60.38536884832222, -60.47153308708669, -60.55856944920876, -60.64641888569416, -60.73502306823855, -60.82432401182879, -60.91426407013982, -61.00478608632064, -61.09582801053394, -61.1872320173832, -61.27891030159423, -61.37080968936536, -61.46289305918425, -61.5551298484676, -61.64749142446475, -61.739949017681454, -61.832472969466814, -61.9250326230273, -62.01759650305374, -62.11011413149809, -52.02449251046272, -44.04668580911001, -39.088095157107915, -35.79690155556951, -32.904347123470245, -29.647204514674804, -25.68406367057892, -20.986711985030876, -15.837628802814148, -10.838467001550908, -6.743552564249088, -4.134659315596677, -3.1933608238464615, -3.7444971033129564, -5.442429000422056, -7.927672903542756, -10.900395297369665, -14.137943549460202, -17.485216527996556, -20.839756772476044, -24.13692762414738, -27.34070931672065, -30.435547504317903, -33.41968076893339, -36.30014456269459, -39.086784700897894, -41.785715584820295, -44.39252251478038, -46.88575056798068, -49.22501010687352, -51.35357028979861, -53.211634227313375, -54.75451876765123, -55.967536202770106, -56.87105301444858, -57.51093563643268, -57.94454023868654, -58.22771888974558, -58.40647181075637, -58.51570776042221, -58.58017001797616, -58.61662989937881, -58.63616053949686, -58.64597240533587, -58.65073682450544, -58.65348288372979, -58.656183700245215, -58.66013197547772, -58.666178297846585, -58.67488212635032, -58.68660791554084, -58.70158694150954, -58.71995765836195, -58.741792532130106, -58.76711626577484, -58.79591846176989, -58.828162624070735, -58.86379269950736, -58.90273792689366, -58.944916494665165, -58.99023834040352, -59.03860731929846, -59.089878256908314, -59.14391791052264, -59.20061123032743, -59.259851247550905, -59.32153445809014, -59.385558867166075, -59.451823297694034, -59.520227276141966, -59.59067116208653, -59.66305636225064, -59.737285555922824, -59.81326290071745, -59.89089420777898, -59.97008708481483, -60.05075104930516, -60.13273483741768, -60.2158927014665, -60.30012555490309, -60.385357096196735, -60.47152168944478, -60.558558389699925, -60.64640814884614, -60.7350126395356, -60.82431387769027, -60.91425421785728, -61.004776503981525, -61.09581869811705, -61.18722296766327, -61.27890150420147, -61.370801132890314, -61.46288473222694, -61.55512174012417, -61.64748352452015, -61.73994131665364, -61.832465458580295, -61.9250252941576, -62.017589348662995, -62.11010715207939, -52.02448712038264, -44.04668178948146, -39.088092189646936, -35.79689980231291, -32.90434740775301, -29.647208290000417, -25.684072898190923, -20.98672876007678, -15.837654409621436, -10.8385008250908, -6.743591730175617, -4.134699970554394, -3.193399901020832, -3.7445328327288054, -5.442460764099469, -7.927700877980444, -10.900419869554813, -14.137965186490025, -17.48523569950955, -20.839773770560107, -24.136942655033828, -27.340722609375945, -30.435559181502484, -33.41969091162237, -36.30015321681794, -39.086791866489364, -41.78572120527734, -44.392526487561305, -46.8857527673531, -49.225010438604045, -51.35356874379926, -53.21163094211515, -54.75451403830344, -55.96753041439106, -56.871046569323575, -57.510928882725736, -57.94453343167999, -58.22771217922765, -58.40646528469371, -58.51570145283815, -58.580163935771395, -58.616624036979246, -58.636154886500975, -58.64596695023062, -58.650731556285386, -58.653477792467655, -58.65617877717941, -58.660127212904165, -58.66617368895166, -58.674877665044, -58.68660359631203, -58.70158275930815, -58.719953608506096, -58.74178861023402, -58.76711246769351, -58.79591478355661, -58.82815906194458, -58.86378924982819, -58.902734586143055, -58.944913259431914, -58.99023520737244, -59.038604285241824, -59.08987532217395, -59.14391507301472, -59.20060848690414, -59.25984859469971, -59.32153189224468, -59.38555638484706, -59.451820895564566, -59.52022495102307, -59.590668910954236, -59.66305418222678, -59.73728344426302, -59.81326085480012, -59.890892225094866, -59.97008516295888, -60.050749185968584, -60.132733032679006, -60.2158909538533, -60.300123862264776, -60.385355456147785, -60.47152009958263, -60.5585568477056, -60.64640665252468, -60.73501118682716, -60.82431246666696, -60.914252846714305, -61.004775171026616, -61.09581740331358, -61.18722170997353, -61.278900282151724, -61.37079994486345, -61.46288357660847, -61.55512061537016, -61.64748242918367, -61.739940249390855, -61.832464418147126, -61.92502427940152, -62.017588358513954, -62.11010618658029, -52.02448637045113, -44.0466812241938, -39.0880917664241, -35.796899545720244, -32.90434743387667, -29.647208802255378, -25.684074170766987, -20.986731086398393, -15.83765797069199, -10.838505537138829, -6.743597193506525, -4.134705647603113, -3.1934053629346186, -3.7445378312335125, -5.442465211759844, -7.927704798512524, -10.900423316250333, -14.137968223989294, -17.48523839302711, -20.839776160516113, -24.136944769929684, -27.340724481015084, -30.435560826854733, -33.419692341865726, -36.3001544382334, -39.086792878984255, -41.78572200078558, -44.39252705157803, -46.88575308208999, -49.22501049070946, -51.353568531708774, -53.21163048516183, -54.75451337787452, -55.96752960461062, -56.871045666784454, -57.5109279364442, -57.94453247762932, -58.22771123854997, -58.40646436981947, -58.51570056860207, -58.580163083179905, -58.61662321527379, -58.63615409423581, -58.645966185798, -58.650730818145, -58.65347707922822, -58.65617808761175, -58.66012654592664, -58.666173043606975, -58.6748770404761, -58.686602991745815, -58.70158217403304, -58.71995304186306, -58.74178806160554, -58.7671119364958, -58.7959142692337, -58.828158563963676, -58.8637887676764, -58.90273411932448, -58.94491280746566, -58.99023476979102, -59.03860386159029, -59.08987491249659, -59.14391467701454, -59.2006081041382, -59.2598482246733, -59.32153153445576, -59.38555603880593, -59.45182056080144, -59.52022462709024, -59.59066859742582, -59.66305387869744, -59.7372831503461, -59.81326057012618, -59.89089194931039, -59.97008489572484, -60.050748926959706, -60.13273278190181, -60.21589071109879, -60.3001236272299, -60.38535522849701, -60.47151987897816, -60.55855663382132, -60.6464064450519, -60.73501098547608, -60.824312271166384, -60.914252656810305, -61.0047749864809]}, "Volts_file__pop_pre_pop_pre_1_soma_v": {"cell_1": [-65.0, -66.35899914650287, -67.38782267224542, -68.17213966712598, -68.77104277386958, -69.22755992707039, -69.57438163390907, -69.83676347597856, -70.03435773758643, -70.1823775611781, -70.2925285620816, -70.37383619745265, -57.32012301999715, -46.30984584445645, -38.93277617175556, -33.248265435351016, -26.59557092163199, -16.627623051713137, -2.4725522566656366, 12.702278469930459, 23.165900850740236, 27.533101441131954, 27.907900772095488, 26.129446669859966, 23.162334487378637, 19.496440444582035, 15.413744920141355, 11.098006300210104, 6.676985114039261, 2.2405972893218635, -2.1487267505565324, -6.44936702323486, -10.635344241116226, -14.69161892737841, -18.61184314300663, -22.397028121067443, -26.055245225369934, -29.601947070718893, -33.06266155193012, -36.467713519173714, -39.851209750151725, -43.237940765142596, -46.628743370777485, -49.97793181591061, -53.17548354704002, -56.050599798839855, -58.42578616938828, -60.19594450190088, -61.37926239059858, -62.088699386858345, -62.467146191674814, -62.63716044882118, -62.68536436717227, -62.66607082735419, -62.61111607620463, -62.53849294995378, -62.45820555032917, -62.37580157890827, -62.29437815941235, -62.215685774158274, -62.14072755704787, -62.07008396047092, -62.00408980867925, -61.942932204467034, -61.886677578753144, -61.83535179087117, -61.788949688090234, -61.74744066502853, -61.71077379369631, -61.67888206805663, -61.65168578370656, -61.6290952005178, -61.61101264459664, -61.597334180808744, -61.58795095765328, -61.5827503010766, -61.58161661433045, -61.58443212647897, -61.591077521505134, -61.601432472147735, -61.61537609683535, -61.632787353804595, -61.653545383293135, -61.67752980629233, -61.7046209865247, -61.73470026092832, -61.76765014287211, -61.80335450151552, -61.84169872010059, -61.88256983548005, -61.92585666080852, -61.971449893029025, -62.01924220655342, -62.06911048560941, -62.12091718461531, -62.17455014275442, -62.22991055703344, -62.28690677172502, -62.34545116537911, -62.405458668495946, -62.466846123097596, -62.52953206290219, -62.59343669165896, -62.658481944420664, -62.72459157394967, -62.791691234851385, -62.85970855382236, -62.928573182350505, -62.99821683200033, -63.06857329403942, -63.139516904474114, -63.21096351335683, -52.823312529061695, -44.57265602319288, -39.420322678097875, -35.957914282305595, -32.821084819559516, -29.152581091923054, -24.535795211489884, -18.9222130589384, -12.70221178375467, -6.747745484428386, -2.1020938453441236, 0.5679599640401687, 1.2165190102484438, 0.21478319366042142, -1.9546846342191915, -4.868242647973357, -8.209085183541792, -11.758097099455181, -15.370845369435106, -18.955933883667093, -22.457877898528828, -25.84811001801287, -29.114979284734492, -32.261175364528846, -35.298540528435176, -38.24211457991159, -41.10407722188688, -43.886039877249694, -46.57090448867202, -49.116626541031806, -51.45852887406296, -53.51998227406344, -55.2371216248925, -56.58139006093879, -57.568848894427624, -58.251835760522674, -58.69890703683701, -58.97660369430231, -59.13982586409274, -59.22884926292891, -59.27153126962762, -59.28625024974979, -59.284792698561645, -59.27461077838343, -59.26039441462845, -59.2451003224655, -59.23060253960562, -59.218096141105725, -59.20834589494298, -59.20183949694418, -59.19888267075886, -59.19965893658194, -59.20426783372661, -59.212749891702074, -59.22510334385631, -59.24129560555677, -59.261271362249076, -59.28495840906413, -59.31227196039322, -59.34311789091966, -59.37739521162715, -59.41499798556337, -59.45581682517025, -59.4997400718896, -59.54665473123276, -59.59644721758789, -59.649003949693785, -59.704211828072516, -59.76195861860543, -59.82213326109988, -59.88462611763259, -59.949329172328085, -60.01613619180307, -60.08492371318521, -60.15552028551227, -60.227802645002996, -60.301671520523826, -60.37703939893764, -60.45382448133043, -60.53194782010197, -60.611332067696, -60.69190102172489, -60.77357954611096, -60.856293654458355, -60.93997064957182, -61.02453926876949, -61.10990148523143, -61.19590982975232, -61.28247426175452, -61.369533186301574, -61.45703833126709, -61.54494707606401, -61.63321874613176, -61.721812982308975, -61.81068916519534, -61.89980634984887, -61.989123424749586, -62.078599348870654, -62.168111102528144, -62.25758022558814, -52.13203659241283, -44.11797684262783, -39.13221063058348, -35.81389998432463, -32.88044622750153, -29.555514105307854, -25.487667230918795, -20.646651685995813, -15.33159393414912, -10.181336240218055, -5.993178955258487, -3.3658191915617874, -2.4661644703826036, -3.089284767378177, -4.86608425246542, -7.425092261783796, -10.462683809108409, -13.755515329666025, -17.149686366950796, -20.544314627655794, -23.877232511665827, -27.112924034636148, -30.236693788329724, -33.24803419279171, -36.15475984790251, -38.967578151372095, -41.69363793539875, -44.329273310418564, -46.85345788105954, -49.22526218836835, -51.386455712857114, -53.27465511518788, -54.84244559276196, -56.07360702626229, -56.98800723218059, -57.63293825160197, -58.067252078269554, -58.34849905327057, -58.523943114788175, -58.62935218026324, -58.689905591785504, -58.7225739912564, -58.73850504935587, -58.74492323467567, -58.74648791194747, -58.74620752447606, -58.746033752723584, -58.74724017870379, -58.75066144477484, -58.75684413187646, -58.766142440725346, -58.77877951298883, -58.794887330771665, -58.81453317309137, -58.837737542569386, -58.86448659723144, -58.89474097553484, -58.9284422023599, -58.965517434296906, -59.005883037372016, -59.049440775345424, -59.09604821719115, -59.14558560299323, -59.19794283072989, -59.253013563112404, -59.310692749208236, -59.37087575380299, -59.43345821600318, -59.49833621379829, -59.56540653444654, -59.63456695954311, -59.70571652635799, -59.77875575205537, -59.853586818839815, -59.93011372290118, -60.008242391718404, -60.08787064484591, -60.16881714147047, -60.250963458254105, -60.33422234732833, -60.41852150838772, -60.50379547715728, -60.589981729406894, -60.677018945477876, -60.764846356417564, -60.85340360937729, -60.94263086298624, -61.03246896725782, -61.12282184986925, -61.21355265663823, -61.304582874232196, -61.39586255946248, -61.487354791539424, -61.57902779542433, -61.6708511580957, -61.76279418948001, -61.85482537371135, -61.94691234612443, -62.03902209887123, -62.13108033193822, -52.04005096293385, -44.05739454507042, -39.09513206548677, -35.80010288082723, -32.90156945541686, -29.63443314922769, -25.65583708571325, -20.937260976845344, -15.763586443826672, -10.741875491287859, -6.632751211737637, -4.020561330811871, -3.0844925803200063, -3.645657035982283, -5.355170935727002, -7.85135213974309, -10.833807418128458, -14.079690068958238, -17.433919377223983, -20.794541821308766, -24.097171394636, -27.305745625652566, -30.405006924429532, -33.393316091235455, -36.277810784186144, -39.06846519675131, -41.771547616382776, -44.38276640040218, -46.88072642800937, -49.22495268249907, -51.35848456619093, -53.221131937722234, -54.767799354704856, -55.98356976383285, -56.88877173813187, -57.529421414630285, -57.963124931077964, -58.246015959684684, -58.424256887860864, -58.532898203394915, -58.59675324087095, -58.632624733254, -58.65159734218338, -58.6608835704669, -58.665152769240194, -58.66743073695513, -58.66968720857483, -58.673211882641034, -58.67885284955915, -58.68716755394026, -58.698518847671494, -58.71313673574343, -58.7311586607364, -58.75265627753629, -58.77765363168295, -58.8061397859344, -58.8380777946614, -58.873411224166134, -58.912068985648695, -58.95396898043021, -58.999020889889984, -59.04712833649628, -59.09813612660732, -59.151917868745684, -59.20836145513936, -59.26736097102852, -59.32881307959503, -59.39261555912262, -59.458666850021814, -59.526866053070584, -59.59711310902968, -59.669309032463694, -59.743356142669874, -59.81915826860583, -59.89662092077836, -59.97565143030482, -60.056159058305866, -60.13798563893766, -60.220989931677494, -60.30507483442506, -60.3901647485948, -60.476194111105805, -60.563101758312904, -60.65082830494366, -60.739315053909095, -60.828503659181315, -60.91833613816913, -61.00875502785647, -61.09969337606202, -61.19099635454095, -61.28257747749798, -61.37438402057188, -61.46637887737146, -61.558531298425386, -61.65081238349897, -61.74319307636197, -61.835643441549436, -61.92813256764018, -62.02062875053504, -62.113078127638104, -52.0267234339068, -44.04826740947523, -39.08918276776125, -35.79745572425915, -32.904048225752554, -29.645467454348466, -25.680095191362827, -20.979670928220376, -15.827015263381753, -10.824559805373571, -6.7275441219919765, -4.11812414468382, -3.1775382272812847, -3.7300918510421415, -5.429676732420051, -7.916488985137728, -10.890612074127214, -14.12936338000246, -17.47764309614243, -20.833066344927467, -24.131032213934922, -27.33551358574407, -30.430999170326118, -33.41574499577425, -36.296801137448696, -39.0840320506643, -41.783574723677376, -44.39103261939377, -46.8849597568195, -49.22495394568982, -51.35425070779588, -53.21299489769644, -54.75644220303516, -55.96987045277503, -56.8736400936242, -57.513639352803125, -57.947261167477464, -58.23039916945321, -58.409077679917424, -58.51822651875292, -58.5825994511279, -58.61897254691345, -58.638420726539, -58.64815481499748, -58.65284588630351, -58.65552256677702, -58.65815749069972, -58.662042926930845, -58.66802910223462, -58.676675183011014, -58.68834539046784, -58.70327081528777, -58.721589763803195, -58.74337458338014, -58.76864988067114, -58.79740517897356, -58.82960391619031, -58.865189983155695, -58.90409257039338, -58.94622982394485, -58.99151164349609, -59.03984184975634, -59.091073814831766, -59.14507528963417, -59.201731650494004, -59.260936080712426, -59.32258509954919, -59.386576678377615, -59.45280958370147, -59.52118327932831, -59.591598063192414, -59.663955284262585, -59.73815756876077, -59.81410902580009, -59.891715422107325, -59.970884324478874, -60.05152521243515, -60.133485832513585, -60.216621082050764, -60.30083215777023, -60.386042857673786, -60.47218755507432, -60.55920527248615, -60.64703691232056, -60.73562409313655, -60.824908777930325, -60.91483327192739, -61.005340374121864, -61.09636734861179, -61.18775678781228, -61.27942106971625, -61.37130708218161, -61.46337770468136, -61.555602347430586, -61.64795233926737, -61.74039886965289, -61.83291224033378, -61.92546175806727, -62.01801591475459, -62.11052376307984, -52.02480416426632, -44.04691158405878, -39.08825535735996, -35.79698903099717, -32.90431596207602, -29.646971991139615, -25.68351786586472, -20.98573385140818, -15.836146644119523, -10.836518351943653, -6.741303853990498, -4.132331718297793, -3.1911292586872193, -3.742461685857007, -5.440623851761641, -7.92608689102517, -10.899005443529905, -14.136722496702268, -17.48413696247517, -20.838801571923558, -24.136084648396945, -27.33996527665981, -30.43489518045326, -33.419115369764945, -36.29966333403487, -39.086387513806116, -41.785405516941026, -44.3923052321797, -46.8856330244281, -49.2249974724694, -51.35366296527387, -53.21182428201078, -54.754789512589184, -55.96786596874324, -56.8714192262818, -57.51131879962552, -57.94492609411266, -58.228099108930124, -58.40684152002068, -58.51606510337518, -58.58051464705876, -58.61696215548278, -58.636481025610145, -58.646281780549465, -58.65103571508643, -58.65377185247914, -58.656463242530805, -58.66040252593506, -58.66644024017862, -58.675135802972285, -58.68685363589664, -58.70182498881796, -58.720188294922146, -58.74201600342931, -58.76733280364531, -58.79612828680906, -58.82836594749509, -58.86398972457314, -58.90292884998521, -58.94510150612732, -58.99041762517627, -59.038781057398715, -59.090046423712195, -59.14408062128829, -59.20076866025176, -59.26000359316109, -59.3216819191132, -59.3857016384717, -59.45196156611784, -59.52036121960734, -59.59080094974986, -59.663182155051224, -59.737407507244086, -59.813381157032076, -59.891008909225214, -59.97019836569216, -60.05085903849084, -60.13283952560909, -60.215994169302896, -60.30022392244841, -60.38545249728358, -60.47161425906632, -60.558648258184284, -60.6464954394966, -60.735097467991174, -60.82439635209372, -60.91433443936315, -61.00485456737093, -61.0958946014007, -61.187296767605304, -61.278973283262296, -61.370870982089265, -61.462952742596045, -61.555187998741395, -61.647548112935866, -61.74000431052597, -61.832526927884736, -61.925085303636976, -62.01764795834849, -62.110164356300935, -52.02453102334566, -44.04671414123907, -39.08811569393105, -35.7969132688589, -32.90434422923819, -29.647176704153683, -25.683997016846575, -20.986591640202416, -15.837445740296163, -10.838225731454116, -6.743273638369966, -4.134370171935599, -3.193083234923644, -3.744243586047416, -5.442203876311775, -7.927474857284356, -10.900221528751736, -14.13779070040949, -17.485081233610373, -20.83963693186386, -24.13682175107233, -27.340615772147526, -30.435465404019123, -33.419609527804724, -36.300083846846334, -39.0867345026126, -41.785676297093616, -44.392494854961974, -46.885735415997864, -49.225008119637266, -51.35358152871427, -53.21165770717114, -54.75455240190906, -55.967577274671775, -56.87109868963604, -57.51098346442136, -57.94458842473954, -58.2277663830157, -58.40651799513067, -58.51575239927409, -58.580213065005296, -58.61667139549949, -58.63620055912122, -58.64601103034161, -58.65077413294042, -58.65351894587236, -58.656218578042925, -58.66016572334609, -58.66621096387106, -58.674913753478116, -58.6866385426121, -58.70161660409547, -58.719986389424626, -58.74182036253366, -58.76714322467865, -58.795944576929934, -58.82818792207038, -58.86381720593441, -58.9027616664759, -58.944939491373844, -58.990260617532385, -59.03862889952379, -59.08989913748108, -59.14393810607201, -59.20063076292432, -59.259870141909126, -59.32155273931345, -59.38557655974658, -59.45184042511775, -59.5202438607797, -59.5906872252121, -59.663071924109516, -59.737300635814414, -59.81327751707528, -59.89090837824241, -59.970100826291045, -60.05076437802081, -60.13274775253274, -60.215905213239246, -60.30013767844956, -60.38536884832222, -60.47153308708669, -60.55856944920876, -60.64641888569416, -60.73502306823855, -60.82432401182879, -60.91426407013982, -61.00478608632064, -61.09582801053394, -61.1872320173832, -61.27891030159423, -61.37080968936536, -61.46289305918425, -61.5551298484676, -61.64749142446475, -61.739949017681454, -61.832472969466814, -61.9250326230273, -62.01759650305374, -62.11011413149809, -52.02449251046272, -44.04668580911001, -39.088095157107915, -35.79690155556951, -32.904347123470245, -29.647204514674804, -25.68406367057892, -20.986711985030876, -15.837628802814148, -10.838467001550908, -6.743552564249088, -4.134659315596677, -3.1933608238464615, -3.7444971033129564, -5.442429000422056, -7.927672903542756, -10.900395297369665, -14.137943549460202, -17.485216527996556, -20.839756772476044, -24.13692762414738, -27.34070931672065, -30.435547504317903, -33.41968076893339, -36.30014456269459, -39.086784700897894, -41.785715584820295, -44.39252251478038, -46.88575056798068, -49.22501010687352, -51.35357028979861, -53.211634227313375, -54.75451876765123, -55.967536202770106, -56.87105301444858, -57.51093563643268, -57.94454023868654, -58.22771888974558, -58.40647181075637, -58.51570776042221, -58.58017001797616, -58.61662989937881, -58.63616053949686, -58.64597240533587, -58.65073682450544, -58.65348288372979, -58.656183700245215, -58.66013197547772, -58.666178297846585, -58.67488212635032, -58.68660791554084, -58.70158694150954, -58.71995765836195, -58.741792532130106, -58.76711626577484, -58.79591846176989, -58.828162624070735, -58.86379269950736, -58.90273792689366, -58.944916494665165, -58.99023834040352, -59.03860731929846, -59.089878256908314, -59.14391791052264, -59.20061123032743, -59.259851247550905, -59.32153445809014, -59.385558867166075, -59.451823297694034, -59.520227276141966, -59.59067116208653, -59.66305636225064, -59.737285555922824, -59.81326290071745, -59.89089420777898, -59.97008708481483, -60.05075104930516, -60.13273483741768, -60.2158927014665, -60.30012555490309, -60.385357096196735, -60.47152168944478, -60.558558389699925, -60.64640814884614, -60.7350126395356, -60.82431387769027, -60.91425421785728, -61.004776503981525, -61.09581869811705, -61.18722296766327, -61.27890150420147, -61.370801132890314, -61.46288473222694, -61.55512174012417, -61.64748352452015, -61.73994131665364, -61.832465458580295, -61.9250252941576, -62.017589348662995, -62.11010715207939, -52.02448712038264, -44.04668178948146, -39.088092189646936, -35.79689980231291, -32.90434740775301, -29.647208290000417, -25.684072898190923, -20.98672876007678, -15.837654409621436, -10.8385008250908, -6.743591730175617, -4.134699970554394, -3.193399901020832, -3.7445328327288054, -5.442460764099469, -7.927700877980444, -10.900419869554813, -14.137965186490025, -17.48523569950955, -20.839773770560107, -24.136942655033828, -27.340722609375945, -30.435559181502484, -33.41969091162237, -36.30015321681794, -39.086791866489364, -41.78572120527734, -44.392526487561305, -46.8857527673531, -49.225010438604045, -51.35356874379926, -53.21163094211515, -54.75451403830344, -55.96753041439106, -56.871046569323575, -57.510928882725736, -57.94453343167999, -58.22771217922765, -58.40646528469371, -58.51570145283815, -58.580163935771395, -58.616624036979246, -58.636154886500975, -58.64596695023062, -58.650731556285386, -58.653477792467655, -58.65617877717941, -58.660127212904165, -58.66617368895166, -58.674877665044, -58.68660359631203, -58.70158275930815, -58.719953608506096, -58.74178861023402, -58.76711246769351, -58.79591478355661, -58.82815906194458, -58.86378924982819, -58.902734586143055, -58.944913259431914, -58.99023520737244, -59.038604285241824, -59.08987532217395, -59.14391507301472, -59.20060848690414, -59.25984859469971, -59.32153189224468, -59.38555638484706, -59.451820895564566, -59.52022495102307, -59.590668910954236, -59.66305418222678, -59.73728344426302, -59.81326085480012, -59.890892225094866, -59.97008516295888, -60.050749185968584, -60.132733032679006, -60.2158909538533, -60.300123862264776, -60.385355456147785, -60.47152009958263, -60.5585568477056, -60.64640665252468, -60.73501118682716, -60.82431246666696, -60.914252846714305, -61.004775171026616, -61.09581740331358, -61.18722170997353, -61.278900282151724, -61.37079994486345, -61.46288357660847, -61.55512061537016, -61.64748242918367, -61.739940249390855, -61.832464418147126, -61.92502427940152, -62.017588358513954, -62.11010618658029, -52.02448637045113, -44.0466812241938, -39.0880917664241, -35.796899545720244, -32.90434743387667, -29.647208802255378, -25.684074170766987, -20.986731086398393, -15.83765797069199, -10.838505537138829, -6.743597193506525, -4.134705647603113, -3.1934053629346186, -3.7445378312335125, -5.442465211759844, -7.927704798512524, -10.900423316250333, -14.137968223989294, -17.48523839302711, -20.839776160516113, -24.136944769929684, -27.340724481015084, -30.435560826854733, -33.419692341865726, -36.3001544382334, -39.086792878984255, -41.78572200078558, -44.39252705157803, -46.88575308208999, -49.22501049070946, -51.353568531708774, -53.21163048516183, -54.75451337787452, -55.96752960461062, -56.871045666784454, -57.5109279364442, -57.94453247762932, -58.22771123854997, -58.40646436981947, -58.51570056860207, -58.580163083179905, -58.61662321527379, -58.63615409423581, -58.645966185798, -58.650730818145, -58.65347707922822, -58.65617808761175, -58.66012654592664, -58.666173043606975, -58.6748770404761, -58.686602991745815, -58.70158217403304, -58.71995304186306, -58.74178806160554, -58.7671119364958, -58.7959142692337, -58.828158563963676, -58.8637887676764, -58.90273411932448, -58.94491280746566, -58.99023476979102, -59.03860386159029, -59.08987491249659, -59.14391467701454, -59.2006081041382, -59.2598482246733, -59.32153153445576, -59.38555603880593, -59.45182056080144, -59.52022462709024, -59.59066859742582, -59.66305387869744, -59.7372831503461, -59.81326057012618, -59.89089194931039, -59.97008489572484, -60.050748926959706, -60.13273278190181, -60.21589071109879, -60.3001236272299, -60.38535522849701, -60.47151987897816, -60.55855663382132, -60.6464064450519, -60.73501098547608, -60.824312271166384, -60.914252656810305, -61.0047749864809], "cell_0": [-65.0, -66.35899914650287, -67.38782267224542, -68.17213966712598, -68.77104277386958, -69.22755992707039, -69.57438163390907, -69.83676347597856, -70.03435773758643, -70.1823775611781, -70.2925285620816, -70.37383619745265, -57.32012301999715, -46.30984584445645, -38.93277617175556, -33.248265435351016, -26.59557092163199, -16.627623051713137, -2.4725522566656366, 12.702278469930459, 23.165900850740236, 27.533101441131954, 27.907900772095488, 26.129446669859966, 23.162334487378637, 19.496440444582035, 15.413744920141355, 11.098006300210104, 6.676985114039261, 2.2405972893218635, -2.1487267505565324, -6.44936702323486, -10.635344241116226, -14.69161892737841, -18.61184314300663, -22.397028121067443, -26.055245225369934, -29.601947070718893, -33.06266155193012, -36.467713519173714, -39.851209750151725, -43.237940765142596, -46.628743370777485, -49.97793181591061, -53.17548354704002, -56.050599798839855, -58.42578616938828, -60.19594450190088, -61.37926239059858, -62.088699386858345, -62.467146191674814, -62.63716044882118, -62.68536436717227, -62.66607082735419, -62.61111607620463, -62.53849294995378, -62.45820555032917, -62.37580157890827, -62.29437815941235, -62.215685774158274, -62.14072755704787, -62.07008396047092, -62.00408980867925, -61.942932204467034, -61.886677578753144, -61.83535179087117, -61.788949688090234, -61.74744066502853, -61.71077379369631, -61.67888206805663, -61.65168578370656, -61.6290952005178, -61.61101264459664, -61.597334180808744, -61.58795095765328, -61.5827503010766, -61.58161661433045, -61.58443212647897, -61.591077521505134, -61.601432472147735, -61.61537609683535, -61.632787353804595, -61.653545383293135, -61.67752980629233, -61.7046209865247, -61.73470026092832, -61.76765014287211, -61.80335450151552, -61.84169872010059, -61.88256983548005, -61.92585666080852, -61.971449893029025, -62.01924220655342, -62.06911048560941, -62.12091718461531, -62.17455014275442, -62.22991055703344, -62.28690677172502, -62.34545116537911, -62.405458668495946, -62.466846123097596, -62.52953206290219, -62.59343669165896, -62.658481944420664, -62.72459157394967, -62.791691234851385, -62.85970855382236, -62.928573182350505, -62.99821683200033, -63.06857329403942, -63.139516904474114, -63.21096351335683, -52.823312529061695, -44.57265602319288, -39.420322678097875, -35.957914282305595, -32.821084819559516, -29.152581091923054, -24.535795211489884, -18.9222130589384, -12.70221178375467, -6.747745484428386, -2.1020938453441236, 0.5679599640401687, 1.2165190102484438, 0.21478319366042142, -1.9546846342191915, -4.868242647973357, -8.209085183541792, -11.758097099455181, -15.370845369435106, -18.955933883667093, -22.457877898528828, -25.84811001801287, -29.114979284734492, -32.261175364528846, -35.298540528435176, -38.24211457991159, -41.10407722188688, -43.886039877249694, -46.57090448867202, -49.116626541031806, -51.45852887406296, -53.51998227406344, -55.2371216248925, -56.58139006093879, -57.568848894427624, -58.251835760522674, -58.69890703683701, -58.97660369430231, -59.13982586409274, -59.22884926292891, -59.27153126962762, -59.28625024974979, -59.284792698561645, -59.27461077838343, -59.26039441462845, -59.2451003224655, -59.23060253960562, -59.218096141105725, -59.20834589494298, -59.20183949694418, -59.19888267075886, -59.19965893658194, -59.20426783372661, -59.212749891702074, -59.22510334385631, -59.24129560555677, -59.261271362249076, -59.28495840906413, -59.31227196039322, -59.34311789091966, -59.37739521162715, -59.41499798556337, -59.45581682517025, -59.4997400718896, -59.54665473123276, -59.59644721758789, -59.649003949693785, -59.704211828072516, -59.76195861860543, -59.82213326109988, -59.88462611763259, -59.949329172328085, -60.01613619180307, -60.08492371318521, -60.15552028551227, -60.227802645002996, -60.301671520523826, -60.37703939893764, -60.45382448133043, -60.53194782010197, -60.611332067696, -60.69190102172489, -60.77357954611096, -60.856293654458355, -60.93997064957182, -61.02453926876949, -61.10990148523143, -61.19590982975232, -61.28247426175452, -61.369533186301574, -61.45703833126709, -61.54494707606401, -61.63321874613176, -61.721812982308975, -61.81068916519534, -61.89980634984887, -61.989123424749586, -62.078599348870654, -62.168111102528144, -62.25758022558814, -52.13203659241283, -44.11797684262783, -39.13221063058348, -35.81389998432463, -32.88044622750153, -29.555514105307854, -25.487667230918795, -20.646651685995813, -15.33159393414912, -10.181336240218055, -5.993178955258487, -3.3658191915617874, -2.4661644703826036, -3.089284767378177, -4.86608425246542, -7.425092261783796, -10.462683809108409, -13.755515329666025, -17.149686366950796, -20.544314627655794, -23.877232511665827, -27.112924034636148, -30.236693788329724, -33.24803419279171, -36.15475984790251, -38.967578151372095, -41.69363793539875, -44.329273310418564, -46.85345788105954, -49.22526218836835, -51.386455712857114, -53.27465511518788, -54.84244559276196, -56.07360702626229, -56.98800723218059, -57.63293825160197, -58.067252078269554, -58.34849905327057, -58.523943114788175, -58.62935218026324, -58.689905591785504, -58.7225739912564, -58.73850504935587, -58.74492323467567, -58.74648791194747, -58.74620752447606, -58.746033752723584, -58.74724017870379, -58.75066144477484, -58.75684413187646, -58.766142440725346, -58.77877951298883, -58.794887330771665, -58.81453317309137, -58.837737542569386, -58.86448659723144, -58.89474097553484, -58.9284422023599, -58.965517434296906, -59.005883037372016, -59.049440775345424, -59.09604821719115, -59.14558560299323, -59.19794283072989, -59.253013563112404, -59.310692749208236, -59.37087575380299, -59.43345821600318, -59.49833621379829, -59.56540653444654, -59.63456695954311, -59.70571652635799, -59.77875575205537, -59.853586818839815, -59.93011372290118, -60.008242391718404, -60.08787064484591, -60.16881714147047, -60.250963458254105, -60.33422234732833, -60.41852150838772, -60.50379547715728, -60.589981729406894, -60.677018945477876, -60.764846356417564, -60.85340360937729, -60.94263086298624, -61.03246896725782, -61.12282184986925, -61.21355265663823, -61.304582874232196, -61.39586255946248, -61.487354791539424, -61.57902779542433, -61.6708511580957, -61.76279418948001, -61.85482537371135, -61.94691234612443, -62.03902209887123, -62.13108033193822, -52.04005096293385, -44.05739454507042, -39.09513206548677, -35.80010288082723, -32.90156945541686, -29.63443314922769, -25.65583708571325, -20.937260976845344, -15.763586443826672, -10.741875491287859, -6.632751211737637, -4.020561330811871, -3.0844925803200063, -3.645657035982283, -5.355170935727002, -7.85135213974309, -10.833807418128458, -14.079690068958238, -17.433919377223983, -20.794541821308766, -24.097171394636, -27.305745625652566, -30.405006924429532, -33.393316091235455, -36.277810784186144, -39.06846519675131, -41.771547616382776, -44.38276640040218, -46.88072642800937, -49.22495268249907, -51.35848456619093, -53.221131937722234, -54.767799354704856, -55.98356976383285, -56.88877173813187, -57.529421414630285, -57.963124931077964, -58.246015959684684, -58.424256887860864, -58.532898203394915, -58.59675324087095, -58.632624733254, -58.65159734218338, -58.6608835704669, -58.665152769240194, -58.66743073695513, -58.66968720857483, -58.673211882641034, -58.67885284955915, -58.68716755394026, -58.698518847671494, -58.71313673574343, -58.7311586607364, -58.75265627753629, -58.77765363168295, -58.8061397859344, -58.8380777946614, -58.873411224166134, -58.912068985648695, -58.95396898043021, -58.999020889889984, -59.04712833649628, -59.09813612660732, -59.151917868745684, -59.20836145513936, -59.26736097102852, -59.32881307959503, -59.39261555912262, -59.458666850021814, -59.526866053070584, -59.59711310902968, -59.669309032463694, -59.743356142669874, -59.81915826860583, -59.89662092077836, -59.97565143030482, -60.056159058305866, -60.13798563893766, -60.220989931677494, -60.30507483442506, -60.3901647485948, -60.476194111105805, -60.563101758312904, -60.65082830494366, -60.739315053909095, -60.828503659181315, -60.91833613816913, -61.00875502785647, -61.09969337606202, -61.19099635454095, -61.28257747749798, -61.37438402057188, -61.46637887737146, -61.558531298425386, -61.65081238349897, -61.74319307636197, -61.835643441549436, -61.92813256764018, -62.02062875053504, -62.113078127638104, -52.0267234339068, -44.04826740947523, -39.08918276776125, -35.79745572425915, -32.904048225752554, -29.645467454348466, -25.680095191362827, -20.979670928220376, -15.827015263381753, -10.824559805373571, -6.7275441219919765, -4.11812414468382, -3.1775382272812847, -3.7300918510421415, -5.429676732420051, -7.916488985137728, -10.890612074127214, -14.12936338000246, -17.47764309614243, -20.833066344927467, -24.131032213934922, -27.33551358574407, -30.430999170326118, -33.41574499577425, -36.296801137448696, -39.0840320506643, -41.783574723677376, -44.39103261939377, -46.8849597568195, -49.22495394568982, -51.35425070779588, -53.21299489769644, -54.75644220303516, -55.96987045277503, -56.8736400936242, -57.513639352803125, -57.947261167477464, -58.23039916945321, -58.409077679917424, -58.51822651875292, -58.5825994511279, -58.61897254691345, -58.638420726539, -58.64815481499748, -58.65284588630351, -58.65552256677702, -58.65815749069972, -58.662042926930845, -58.66802910223462, -58.676675183011014, -58.68834539046784, -58.70327081528777, -58.721589763803195, -58.74337458338014, -58.76864988067114, -58.79740517897356, -58.82960391619031, -58.865189983155695, -58.90409257039338, -58.94622982394485, -58.99151164349609, -59.03984184975634, -59.091073814831766, -59.14507528963417, -59.201731650494004, -59.260936080712426, -59.32258509954919, -59.386576678377615, -59.45280958370147, -59.52118327932831, -59.591598063192414, -59.663955284262585, -59.73815756876077, -59.81410902580009, -59.891715422107325, -59.970884324478874, -60.05152521243515, -60.133485832513585, -60.216621082050764, -60.30083215777023, -60.386042857673786, -60.47218755507432, -60.55920527248615, -60.64703691232056, -60.73562409313655, -60.824908777930325, -60.91483327192739, -61.005340374121864, -61.09636734861179, -61.18775678781228, -61.27942106971625, -61.37130708218161, -61.46337770468136, -61.555602347430586, -61.64795233926737, -61.74039886965289, -61.83291224033378, -61.92546175806727, -62.01801591475459, -62.11052376307984, -52.02480416426632, -44.04691158405878, -39.08825535735996, -35.79698903099717, -32.90431596207602, -29.646971991139615, -25.68351786586472, -20.98573385140818, -15.836146644119523, -10.836518351943653, -6.741303853990498, -4.132331718297793, -3.1911292586872193, -3.742461685857007, -5.440623851761641, -7.92608689102517, -10.899005443529905, -14.136722496702268, -17.48413696247517, -20.838801571923558, -24.136084648396945, -27.33996527665981, -30.43489518045326, -33.419115369764945, -36.29966333403487, -39.086387513806116, -41.785405516941026, -44.3923052321797, -46.8856330244281, -49.2249974724694, -51.35366296527387, -53.21182428201078, -54.754789512589184, -55.96786596874324, -56.8714192262818, -57.51131879962552, -57.94492609411266, -58.228099108930124, -58.40684152002068, -58.51606510337518, -58.58051464705876, -58.61696215548278, -58.636481025610145, -58.646281780549465, -58.65103571508643, -58.65377185247914, -58.656463242530805, -58.66040252593506, -58.66644024017862, -58.675135802972285, -58.68685363589664, -58.70182498881796, -58.720188294922146, -58.74201600342931, -58.76733280364531, -58.79612828680906, -58.82836594749509, -58.86398972457314, -58.90292884998521, -58.94510150612732, -58.99041762517627, -59.038781057398715, -59.090046423712195, -59.14408062128829, -59.20076866025176, -59.26000359316109, -59.3216819191132, -59.3857016384717, -59.45196156611784, -59.52036121960734, -59.59080094974986, -59.663182155051224, -59.737407507244086, -59.813381157032076, -59.891008909225214, -59.97019836569216, -60.05085903849084, -60.13283952560909, -60.215994169302896, -60.30022392244841, -60.38545249728358, -60.47161425906632, -60.558648258184284, -60.6464954394966, -60.735097467991174, -60.82439635209372, -60.91433443936315, -61.00485456737093, -61.0958946014007, -61.187296767605304, -61.278973283262296, -61.370870982089265, -61.462952742596045, -61.555187998741395, -61.647548112935866, -61.74000431052597, -61.832526927884736, -61.925085303636976, -62.01764795834849, -62.110164356300935, -52.02453102334566, -44.04671414123907, -39.08811569393105, -35.7969132688589, -32.90434422923819, -29.647176704153683, -25.683997016846575, -20.986591640202416, -15.837445740296163, -10.838225731454116, -6.743273638369966, -4.134370171935599, -3.193083234923644, -3.744243586047416, -5.442203876311775, -7.927474857284356, -10.900221528751736, -14.13779070040949, -17.485081233610373, -20.83963693186386, -24.13682175107233, -27.340615772147526, -30.435465404019123, -33.419609527804724, -36.300083846846334, -39.0867345026126, -41.785676297093616, -44.392494854961974, -46.885735415997864, -49.225008119637266, -51.35358152871427, -53.21165770717114, -54.75455240190906, -55.967577274671775, -56.87109868963604, -57.51098346442136, -57.94458842473954, -58.2277663830157, -58.40651799513067, -58.51575239927409, -58.580213065005296, -58.61667139549949, -58.63620055912122, -58.64601103034161, -58.65077413294042, -58.65351894587236, -58.656218578042925, -58.66016572334609, -58.66621096387106, -58.674913753478116, -58.6866385426121, -58.70161660409547, -58.719986389424626, -58.74182036253366, -58.76714322467865, -58.795944576929934, -58.82818792207038, -58.86381720593441, -58.9027616664759, -58.944939491373844, -58.990260617532385, -59.03862889952379, -59.08989913748108, -59.14393810607201, -59.20063076292432, -59.259870141909126, -59.32155273931345, -59.38557655974658, -59.45184042511775, -59.5202438607797, -59.5906872252121, -59.663071924109516, -59.737300635814414, -59.81327751707528, -59.89090837824241, -59.970100826291045, -60.05076437802081, -60.13274775253274, -60.215905213239246, -60.30013767844956, -60.38536884832222, -60.47153308708669, -60.55856944920876, -60.64641888569416, -60.73502306823855, -60.82432401182879, -60.91426407013982, -61.00478608632064, -61.09582801053394, -61.1872320173832, -61.27891030159423, -61.37080968936536, -61.46289305918425, -61.5551298484676, -61.64749142446475, -61.739949017681454, -61.832472969466814, -61.9250326230273, -62.01759650305374, -62.11011413149809, -52.02449251046272, -44.04668580911001, -39.088095157107915, -35.79690155556951, -32.904347123470245, -29.647204514674804, -25.68406367057892, -20.986711985030876, -15.837628802814148, -10.838467001550908, -6.743552564249088, -4.134659315596677, -3.1933608238464615, -3.7444971033129564, -5.442429000422056, -7.927672903542756, -10.900395297369665, -14.137943549460202, -17.485216527996556, -20.839756772476044, -24.13692762414738, -27.34070931672065, -30.435547504317903, -33.41968076893339, -36.30014456269459, -39.086784700897894, -41.785715584820295, -44.39252251478038, -46.88575056798068, -49.22501010687352, -51.35357028979861, -53.211634227313375, -54.75451876765123, -55.967536202770106, -56.87105301444858, -57.51093563643268, -57.94454023868654, -58.22771888974558, -58.40647181075637, -58.51570776042221, -58.58017001797616, -58.61662989937881, -58.63616053949686, -58.64597240533587, -58.65073682450544, -58.65348288372979, -58.656183700245215, -58.66013197547772, -58.666178297846585, -58.67488212635032, -58.68660791554084, -58.70158694150954, -58.71995765836195, -58.741792532130106, -58.76711626577484, -58.79591846176989, -58.828162624070735, -58.86379269950736, -58.90273792689366, -58.944916494665165, -58.99023834040352, -59.03860731929846, -59.089878256908314, -59.14391791052264, -59.20061123032743, -59.259851247550905, -59.32153445809014, -59.385558867166075, -59.451823297694034, -59.520227276141966, -59.59067116208653, -59.66305636225064, -59.737285555922824, -59.81326290071745, -59.89089420777898, -59.97008708481483, -60.05075104930516, -60.13273483741768, -60.2158927014665, -60.30012555490309, -60.385357096196735, -60.47152168944478, -60.558558389699925, -60.64640814884614, -60.7350126395356, -60.82431387769027, -60.91425421785728, -61.004776503981525, -61.09581869811705, -61.18722296766327, -61.27890150420147, -61.370801132890314, -61.46288473222694, -61.55512174012417, -61.64748352452015, -61.73994131665364, -61.832465458580295, -61.9250252941576, -62.017589348662995, -62.11010715207939, -52.02448712038264, -44.04668178948146, -39.088092189646936, -35.79689980231291, -32.90434740775301, -29.647208290000417, -25.684072898190923, -20.98672876007678, -15.837654409621436, -10.8385008250908, -6.743591730175617, -4.134699970554394, -3.193399901020832, -3.7445328327288054, -5.442460764099469, -7.927700877980444, -10.900419869554813, -14.137965186490025, -17.48523569950955, -20.839773770560107, -24.136942655033828, -27.340722609375945, -30.435559181502484, -33.41969091162237, -36.30015321681794, -39.086791866489364, -41.78572120527734, -44.392526487561305, -46.8857527673531, -49.225010438604045, -51.35356874379926, -53.21163094211515, -54.75451403830344, -55.96753041439106, -56.871046569323575, -57.510928882725736, -57.94453343167999, -58.22771217922765, -58.40646528469371, -58.51570145283815, -58.580163935771395, -58.616624036979246, -58.636154886500975, -58.64596695023062, -58.650731556285386, -58.653477792467655, -58.65617877717941, -58.660127212904165, -58.66617368895166, -58.674877665044, -58.68660359631203, -58.70158275930815, -58.719953608506096, -58.74178861023402, -58.76711246769351, -58.79591478355661, -58.82815906194458, -58.86378924982819, -58.902734586143055, -58.944913259431914, -58.99023520737244, -59.038604285241824, -59.08987532217395, -59.14391507301472, -59.20060848690414, -59.25984859469971, -59.32153189224468, -59.38555638484706, -59.451820895564566, -59.52022495102307, -59.590668910954236, -59.66305418222678, -59.73728344426302, -59.81326085480012, -59.890892225094866, -59.97008516295888, -60.050749185968584, -60.132733032679006, -60.2158909538533, -60.300123862264776, -60.385355456147785, -60.47152009958263, -60.5585568477056, -60.64640665252468, -60.73501118682716, -60.82431246666696, -60.914252846714305, -61.004775171026616, -61.09581740331358, -61.18722170997353, -61.278900282151724, -61.37079994486345, -61.46288357660847, -61.55512061537016, -61.64748242918367, -61.739940249390855, -61.832464418147126, -61.92502427940152, -62.017588358513954, -62.11010618658029, -52.02448637045113, -44.0466812241938, -39.0880917664241, -35.796899545720244, -32.90434743387667, -29.647208802255378, -25.684074170766987, -20.986731086398393, -15.83765797069199, -10.838505537138829, -6.743597193506525, -4.134705647603113, -3.1934053629346186, -3.7445378312335125, -5.442465211759844, -7.927704798512524, -10.900423316250333, -14.137968223989294, -17.48523839302711, -20.839776160516113, -24.136944769929684, -27.340724481015084, -30.435560826854733, -33.419692341865726, -36.3001544382334, -39.086792878984255, -41.78572200078558, -44.39252705157803, -46.88575308208999, -49.22501049070946, -51.353568531708774, -53.21163048516183, -54.75451337787452, -55.96752960461062, -56.871045666784454, -57.5109279364442, -57.94453247762932, -58.22771123854997, -58.40646436981947, -58.51570056860207, -58.580163083179905, -58.61662321527379, -58.63615409423581, -58.645966185798, -58.650730818145, -58.65347707922822, -58.65617808761175, -58.66012654592664, -58.666173043606975, -58.6748770404761, -58.686602991745815, -58.70158217403304, -58.71995304186306, -58.74178806160554, -58.7671119364958, -58.7959142692337, -58.828158563963676, -58.8637887676764, -58.90273411932448, -58.94491280746566, -58.99023476979102, -59.03860386159029, -59.08987491249659, -59.14391467701454, -59.2006081041382, -59.2598482246733, -59.32153153445576, -59.38555603880593, -59.45182056080144, -59.52022462709024, -59.59066859742582, -59.66305387869744, -59.7372831503461, -59.81326057012618, -59.89089194931039, -59.97008489572484, -60.050748926959706, -60.13273278190181, -60.21589071109879, -60.3001236272299, -60.38535522849701, -60.47151987897816, -60.55855663382132, -60.6464064450519, -60.73501098547608, -60.824312271166384, -60.914252656810305, -61.0047749864809]}, "Volts_file__pop_post_pop_post_0_soma_v": {"cell_2": [-65.0, -66.35899914650287, -67.38782267224542, -68.17213966712598, -68.77104277386958, -69.22755992707039, -69.57438163390907, -69.83676347597856, -70.03435773758643, -70.1823775611781, -70.2925285620816, -70.37383619745265, -70.43322477709754, -70.47598844558675, -70.5061653660598, -70.52683057432372, -70.54032293099162, -70.54841983896253, -70.5524711408284, -70.55350141427368, -70.55228795706947, -70.54942015254318, -70.54534461737093, -70.54039951561317, -70.53484062931248, -70.52886116260032, -70.52260678501449, -70.51618705919063, -70.50968412305888, -70.50315928730325, -70.49665804967573, -70.4902139068746, -70.48385125294391, -70.47758758353254, -70.4714351725359, -70.46540234757437, -70.45949446036235, -70.45371462495194, -70.44806427932406, -70.44254361250468, -70.43715188928616, -70.43188769696148, -70.42674913264901, -70.42173394535182, -70.41683964352428, -70.41206357635328, -70.40740299500871, -70.40285509863176, -70.39841706869643, -70.39408609451785, -70.3898593920227, -70.38573421739628, -70.38170787683778, -70.37777773336434, -70.37394121138112, -70.37019579956534, -70.366539052482, -70.3629685912503, -70.35948210350371, -70.35607734282914, -70.3527521278262, -70.34950434089397, -70.34633192682685, -70.34323289128103, -70.34020529915864, -70.33724727294447, -70.33435699102174, -70.33153268598672, -70.32877264297642, -70.32607519802028, -70.32343873642327, -36.5251842187195, -19.54568964538738, -9.777536166054533, 1.1746434947679347, 12.584670672952523, 20.59689596697556, 24.309409893254315, 25.04723930487051, 24.07024825135243, 22.104976763929393, 19.541502349313898, 16.604359062885887, 13.436976832239461, 10.13926883256153, 6.784813068967856, 3.429106770272134, 0.11440567445192462, -3.1271259067674526, -6.271551244287883, -9.301079214467446, -12.202542605821115, -14.966526557015758, -17.58662302788515, -20.05969869028117, -22.38362538828809, -24.559585153010183, -26.589583556979964, -28.477278858803004, -30.22749372848052, -31.845632168464462, -33.337701912172484, -34.70994208590216, -35.96833289141373, -37.118817132387086, -38.167564152950334, -39.12057917946345, -39.9839392321458, -40.76388106872511, -41.46660976842591, -42.09845771175016, -42.66597199121354, -43.1753146770941, -43.63273039110171, -44.044005970788604, -44.41490333739107, -44.75022772744283, -45.0548612871339, -45.33316051133128, -45.58861569528847, -45.82467279472752, -46.04442714383863, -46.250478564263005, -46.4447829023645, -46.62929542352618, -46.80576956135362, -46.97572594000491, -47.14046813986, -47.30078500644717, -47.457506062388525, -47.61143883547579, -47.76330244030483, -47.9137181697594, -48.06321635991908, -48.212092656205876, -48.36048095827023, -48.50864927472153, -48.656875685617344, -48.80541106667314, -48.95447035627146, -49.104232925775975, -49.2545786042645, -49.405437802629706, -49.55686892809872, -49.70896033928987, -49.86179710274477, -50.015450631522974, -50.1699352759476, -50.32491203197022, -50.480305583043034, -50.63612905001163, -50.79241941473121, -50.9492141686914, -51.10654334481615, -51.264141025445575, -51.42180246971796, -51.5794906197482, -51.73722592490652, -51.89504382683831, -52.052978712722904, -52.21091656444127, -52.368557983690955, -52.52583622908637, -52.682770666726576, -52.8394076293213, -52.99579692416583, -53.15198290874035, -53.30760694743934, -53.46257347901571, -53.6169008120941, -53.77064616344817, -53.92387464043173, -54.07664689310084, -54.22882342003015, -54.380203015742936, -33.79553741616436, -24.00378399363985, -19.986004289715048, -17.844097348603025, -16.32983941735992, -15.240019536322926, -14.610179589392526, -14.461804215254856, -14.758607238448743, -15.424343611100609, -16.368712460261293, -17.504901028287705, -18.7589303276275, -20.072124004585802, -21.400485193353607, -22.712736279666686, -23.9870440972867, -25.209266109690763, -26.37138292066607, -27.469176482863112, -28.5014099962919, -29.468973045534057, -30.374172331919294, -31.22020165364929, -32.01076648123426, -32.749831167572566, -33.44149518026137, -34.089623153171544, -34.69795622838574, -35.27007433637933, -35.8092477994167, -36.31854743571687, -36.80072658043954, -37.258358941058056, -37.69371047189978, -38.108876437125915, -38.50576510068154, -38.885990424195874, -39.25117597306725, -39.60259798905704, -39.94149529319475, -40.26909866220273, -40.5862500392476, -40.89387250349948, -41.19290091173783, -41.483954467254456, -41.76765166546554, -42.04469445119189, -42.3156894626316, -42.58091250842941, -42.840863547936486, -43.096068383594286, -43.346861864111226, -43.59341032311565, -43.83607769655241, -44.07525832309141, -44.311187960575666, -44.54388726657867, -44.77360861033902, -45.00065386025694, -45.22531779537129, -45.44742311200587, -45.66711617137977, -45.884628781096914, -46.10020264989339, -46.313845872683984, -46.52546737333057, -46.735198561783946, -46.94322959398774, -47.14975557186779, -47.354610146340875, -47.55774393176351, -47.759276509737255, -47.95937212498577, -48.15819741914978, -48.355520414531824, -48.55128554727494, -48.7455951218871, -48.938595074236474, -49.13043472640352, -49.32092250859539, -49.50994437646598, -49.697572912715984, -49.88393732250545, -50.069175863532166, -50.253239857403024, -50.43590280170921, -50.617190227834925, -50.79721179546294, -50.97609744509262, -51.15397360213609, -51.330556542432205, -51.50577797031362, -51.67971140344434, -51.85247441054874, -52.02419046042136, -52.19491243171629, -52.36435067328733, -52.53248990219777, -52.69941511198079, -52.865240507430315, -53.03008108146917, -53.1939666151592, -53.35663457867843, -53.51806940282384, -53.67834836769674, -53.83757653944909, -53.99585993829054, -54.15329511605862, -54.309599672350544, -54.46472860355459, -54.61874078542632, -54.77172933839354, -54.92379184177657, -55.075018260251525, -55.22531659212238, -55.37453154248496, -55.52266792392265, -55.66979237505231, -55.815989295978625, -55.96134176667941, -56.10592392702179, -56.24957467138333, -56.39219751755133, -56.53381130985308, -56.67447888074931, -56.81427431590291, -56.953268589429534, -57.091523874097625, -57.228913564004124, -57.36533481603777, -57.500794119754175, -57.635341545634724, -57.76903964875876, -57.90194939212674, -58.03412435504981, -58.165548255498365, -58.296065417028935, -58.425649973278226, -58.55433208370454, -58.68216175242107, -58.80919169864547, -58.93546980279541, -59.061036288346386, -59.185825883328924, -59.30973091726804, -59.432738204542844, -59.55487532380503, -59.67618378339812, -59.79670616272447, -59.916480439611064, -60.03553793861581, -60.153852678410665, -60.2713099106261, -60.38788566441911, -60.503596829262854, -60.618475569861914, -60.73255671096859, -60.845871957386784, -60.95844764492785, -61.070304252704574, -61.18136949418662, -61.29157488981355, -61.40091150006634, -61.50939667180425, -61.617056854364556, -61.723919132564035, -61.830007417346835, -61.93534106323898, -62.039934696825114, -62.143755472040375, -62.2467273372369, -62.34883242657524, -62.4500798238644, -62.5504890488388, -62.650081687608704, -62.74887746300227, -62.84689266904275, -62.9441398162997, -63.04062785617722, -63.13632489560581, -63.23117103991896, -63.32515184162731, -63.41827413654971, -63.510553133019656, -63.60200580674457, -63.69264777328142, -63.78249203117765, -63.87154867158881, -63.959825053290466, -64.04732617183325, -64.13401757997406, -64.21985749729949, -64.30483700101988, -64.38896255664764, -64.47224664145111, -64.55470293833297, -64.63634406606116, -64.71718067957678, -64.79722127912507, -64.87647235956366, -64.95493869951451, -65.03262368578105, -65.10950768618171, -65.18555541420916, -65.2607587853897, -65.33512274720707, -65.40865760325647, -65.48137503072394, -65.55328616257987, -65.62440079438029, -65.6947271790924, -65.76427210875417, -65.83304111805789, -65.90103872296942, -65.96826865144719, -66.03473404750285, -66.10041793979475, -66.16529886425381, -66.22937399714876, -66.29264941640425, -66.35513483329362, -66.41684086657848, -66.47777773679945, -66.53795473256766, -66.5973800790219, -66.65606100111415, -66.71400386847823, -66.77121436247097, -66.82769763625146, -66.8834584553707, -66.93850131511395, -66.99283053518522, -67.04645033423827, -67.09934270556016, -67.15150149809794, -67.2029304300822, -67.25363773111123, -67.30363328931219, -67.35292721091919, -67.40152915970535, -67.44944811352609, -67.4966923328545, -67.54326942766662, -67.58918646160868, -67.6344500621782, -67.67906652221103, -67.72304188690276, -67.76638202520115, -67.80909268660118, -67.85117954526325, -67.89264823358577, -67.93350436724674, -67.9737535634775, -68.01340145404315, -68.05244826923185, -68.0908875636017, -68.12872193964402, -68.16595836647309, -68.2026056499237, -68.23867311807578, -68.27416998222384, -68.30910506406174, -68.34348671396826, -68.37732282283034, -68.41062087433562, -68.44338800990826, -68.47563109255631, -68.50735676358794, -68.53857149020354, -68.56928160398579, -68.59949333121013, -68.62921281621101, -68.65844613905575, -68.68719932866148, -68.71547837232494, -68.74328922246507, -68.77063780122184, -68.79753000342147, -68.82397169830715, -68.8499687303453, -68.87552691934658, -68.90065206008505, -68.92534992155566, -68.94962624597736, -68.97348674762235, -68.9969371115335, -69.01998299217583, -69.04262307633513, -69.0648597537728, -69.08669843123431, -69.10814584287532, -69.12920916265804, -69.14989556153577, -69.17021200642988, -69.190165186682, -69.20976150445809, -69.22900709449034, -69.24790785484583, -69.26646947948394, -69.28469748831928, -69.30259725313674, -69.32017401903909, -69.33743292173233, -69.35437900120188, -69.37101721238736, -69.3873524334282, -69.40338947197924, -69.41913307001329, -69.4345879074504, -69.44975860488425, -69.46464972561945, -69.47926577718644, -69.49361121246332, -69.50769043050427, -69.52150777715131, -69.53506754548796, -69.5483739761794, -69.56143125773326, -69.57424352670665, -69.58681486787881, -69.59914931440395, -69.61125084795506, -69.6231233988668, -69.63477084628309, -69.64619701831384, -69.65740569220358, -69.66840059451404, -69.67918540132206, -69.68976373843333, -69.70013918161254, -69.71031525682984, -69.72029544052337, -69.73008315987758, -69.73968179311686, -69.74909466981384, -69.75832507121179, -69.76737623056042, -69.77625133346446, -69.78495351824424, -69.7934858763076, -69.80185145253255, -69.81005324565973, -69.81809420869435, -69.82597724931661, -69.83370523030021, -69.84128096993828, -69.848707242476, -69.85598677854945, -69.86312226563021, -69.87011634847495, -69.87697162957964, -69.88369066963791, -69.89027598800298, -69.89673006315273, -69.90305533315752, -69.90925419615031, -69.91532901079863, -69.92128209677811, -69.92711573524711, -69.9328321693221, -69.93843360455358, -69.94392220940205, -69.94930011571381, -69.95456941919635, -69.95973217989287, -69.96479042265592, -69.96974613761975, -69.97460128067107, -69.97935777391818, -69.9840175061582, -69.988582333342, -69.99305407903702, -69.99743453488745, -70.00172546107169, -70.00592804149419, -70.01004301087875, -70.0140718034288, -70.01801616720051, -70.02187796058543, -70.02565904912882, -70.02936125677071, -70.03298634591661, -70.03653601221876, -70.04001188639623, -70.04341553901864, -70.04674848616507, -70.05001219495094, -70.05320808849109, -70.0563375501639, -70.05940192718487, -70.06240253356087, -70.06534065251698, -70.06821753848743, -70.07103441875385, -70.07379249480132, -70.07649294345082, -70.0791369178152, -70.08172554811678, -70.08425994239586, -70.08674118713407, -70.08917034781047, -70.09154846940486, -70.09387657685913, -70.09615567550539, -70.09838675146734, -70.10057077204029, -70.10270868605328, -70.10480142421702, -70.10684989945939, -70.10885500725077, -70.11081762592042, -70.11273861696503, -70.11461882535035, -70.1164590798065, -70.11826019311755, -70.12002296240563, -70.12174816941011, -70.12343658076198, -70.12508894825348, -70.12670600910356, -70.12828848621885, -70.1298370884505, -70.13135251084701, -70.13283543490296, -70.13428652880383, -70.135706447667, -70.13709583377894, -70.13845531682851, -70.1397855141367, -70.14108703088267, -70.1423604603261, -70.14360638402609, -70.14482537205637, -70.14601798321722, -70.14718476524374, -70.14832625501087, -70.14944297873497, -70.15053545217208, -70.15160418081294, -70.15264966007473, -70.15367237548962, -70.15467280289016, -70.15565140859155, -70.15660864957087, -70.15754497364318, -70.15846081963473, -70.15935661755309, -70.16023278875451, -70.1610897461083, -70.16192789415837, -70.162747629282, -70.16354933984584, -70.16433340635925, -70.16510020162484, -70.16585009088644, -70.16658343197447, -70.16730057544875, -70.1680018647387, -70.16868763628115, -70.16935821965563, -70.17001393771731, -70.17065510672748, -70.1712820364817, -70.17189503043572, -70.17249438582904, -70.17308039380626, -70.17365333953624, -70.17421350232912, -70.17476115575111, -70.1752965677373, -70.1758200007023, -70.17633171164893, -70.17683195227487, -70.17732096907733, -70.17779900345586, -70.17826629181313, -70.17872306565397, -70.17916955168245, -70.17960597189726, -70.18003254368526, -70.18044947991321, -70.18085698901794, -70.18125527509467, -70.18164453798377, -70.18202497335584, -70.18239677279513, -70.18276012388156, -70.18311521027097, -70.18346221177397, -70.1838013044333, -70.18413266059963, -70.18445644900599, -70.18477283484074, -70.18508197981919, -70.18538404225374, -70.18567917712284, -70.18596753613842, -70.18624926781223, -70.18652451752072, -70.18679342756879, -70.18705613725224, -70.18731278291905, -70.18756349802945, -70.18780841321477, -70.1880476563353, -70.18828135253682, -70.18850962430619, -70.18873259152579, -70.18895037152686, -70.18916307914185, -70.18937082675573, -70.18957372435631, -70.18977187958346, -70.18996539777757, -70.19015438202683, -70.19033893321372, -70.19051915006055, -70.19069512917406, -70.19086696508917, -70.19103475031189, -70.19119857536128, -70.19135852881072, -70.19151469732823, -70.191667165716, -70.19181601694925, -70.19196133221416, -70.19210319094516, -70.1922416708614, -70.19237684800252, -70.19250879676369, -70.19263758992996, -70.1927632987099, -70.19288599276864, -70.19300574026006, -70.19312260785858, -70.1932366607901, -70.19334796286242, -70.19345657649501, -70.1935625627482, -70.19366598135174, -70.19376689073287, -70.1938653480437, -70.19396140918808, -70.19405512884796, -70.19414656050924, -70.19423575648692, -70.19432276794996, -70.19440764494549, -70.19449043642257, -70.19457119025546, -70.1946499532664, -70.19472677124799, -70.19480168898498, -70.19487475027574, -70.19494599795325, -70.19501547390561, -70.1950832190962, -70.19514927358335, -70.1952136765397, -70.19527646627105, -70.19533768023494, -70.19539735505874, -70.19545552655741, -70.19551222975092, -70.19556749888123, -70.19562136742906, -70.1956738681301, -70.19572503299113, -70.1957748933056, -70.19582347966897, -70.19587082199376, -70.19591694952426, -70.19596189085085, -70.19600567392422, -70.19604832606906, -70.19608987399765, -70.19613034382306, -70.1961697610721, -70.19620815069803, -70.19624553709295, -70.19628194409998, -70.19631739502516, -70.19635191264909, -70.19638551923838, -70.19641823655672, -70.19645008587595, -70.19648108798667, -70.19651126320872, -70.1965406314015, -70.19656921197394, -70.19659702389437, -70.19662408570012, -70.19665041550698, -70.19667603101834, -70.1967009495343, -70.19672518796044, -70.19674876281647, -70.19677169024474, -70.19679398601848, -70.19681566554989, -70.19683674389813, -70.19685723577705, -70.19687715556275, -70.1968965173011, -70.19691533471497, -70.19693362121136, -70.19695138988835, -70.19696865354197, -70.19698542467286, -70.19700171549275, -70.19701753793095, -70.19703290364052, -70.19704782400444, -70.19706231014162, -70.19707637291268, -70.19709002292576, -70.19710327054214, -70.19711612588169, -70.19712859882826, -70.19714069903495, -70.19715243592921, -70.19716381871798, -70.1971748563925, -70.19718555773316, -70.1971959313143, -70.19720598550869, -70.19721572849217, -70.19722516824797, -70.19723431257107, -70.19724316907245, -70.1972517451832, -70.19726004815851, -70.19726808508177, -70.1972758628683, -70.1972833882692, -70.19729066787507, -70.19729770811959, -70.19730451528311, -70.19731109549608, -70.19731745474246, -70.19732359886305, -70.19732953355872, -70.19733526439357, -70.1973407967981, -70.19734613607216, -70.19735128738796, -70.19735625579301, -70.19736104621292, -70.19736566345418, -70.19737011220691, -70.19737439704747, -70.19737852244111, -70.1973824927445, -70.19738631220817, -70.19738998497904, -70.1973935151027, -70.1973969065258, -70.19740016309827, -70.19740328857561, -70.19740628662105, -70.1974091608076, -70.19741191462025, -70.1974145514579, -70.19741707463542, -70.19741948738559, -70.19742179286094, -70.19742399413566, -70.19742609420742, -70.19742809599913, -70.19743000236069, -70.19743181607069, -70.19743353983806, -70.1974351763037, -70.19743672804205, -70.1974381975627, -70.19743958731185, -70.19744089967381, -70.19744213697246, -70.19744330147265, -70.19744439538162, -70.19744542085034, -70.19744637997482, -70.1974472747974, -70.19744810730803, -70.19744887944556, -70.19744959309884, -70.19745025010798, -70.19745085226549, -70.19745140131742, -70.19745189896445, -70.19745234686293, -70.19745274662603, -70.19745309982467, -70.1974534079886, -70.19745367260737, -70.19745389513123, -70.19745407697218, -70.19745421950479, -70.19745432406715, -70.19745439196174, -70.19745442445628, -70.19745442278459, -70.19745438814735, -70.19745432171297, -70.19745422461834, -70.19745409796961, -70.1974539428429, -70.19745376028506, -70.19745355131438, -70.19745331692128, -70.19745305806902, -70.19745277569429, -70.19745247070794, -70.19745214399558, -70.19745179641818, -70.19745142881273, -70.19745104199278, -70.19745063674902, -70.1974502138499, -70.19744977404213, -70.1974493180512, -70.19744884658198, -70.19744836031916, -70.1974478599278, -70.1974473460538, -70.1974468193244, -70.19744628034859, -70.19744572971764, -70.1974451680055, -70.19744459576926, -70.19744401354954, -70.19744342187097, -70.19744282124252, -70.19744221215792, -70.19744159509611, -70.19744097052153, -70.19744033888452, -70.19743970062171, -70.19743905615634, -70.19743840589858, -70.19743775024594, -70.19743708958353, -70.19743642428442, -70.1974357547099, -70.19743508120985, -70.19743440412297, -70.19743372377717, -70.19743304048971, -70.19743235456764, -70.1974316663079, -70.19743097599776, -70.19743028391491, -70.19742959032781, -70.19742889549593, -70.19742819966997, -70.19742750309207, -70.19742680599609, -70.19742610860779, -70.19742541114505, -70.19742471381812, -70.19742401682979, -70.19742332037558, -70.19742262464398, -70.19742192981661, -70.19742123606844, -70.1974205435679, -70.19741985247715, -70.1974191629522, -70.19741847514307, -70.19741778919398, -70.19741710524352, -70.1974164234248, -70.19741574386556, -70.19741506668841, -70.19741439201086, -70.19741371994557, -70.19741305060043, -70.1974123840787, -70.19741172047915, -70.19741105989621, -70.19741040242005, -70.19740974813672, -70.1974090971283, -70.19740844947299, -70.1974078052452, -70.19740716451572, -70.19740652735176, -70.1974058938171, -70.19740526397219, -70.19740463787421, -70.19740401557725, -70.1974033971323, -70.19740278258743, -70.1974021719878, -70.19740156537584, -70.19740096279125, -70.19740036427113, -70.19739976985008, -70.1973991795602, -70.19739859343123, -70.19739801149065, -70.19739743376367, -70.19739686027337, -70.19739629104073, -70.19739572608472, -70.19739516542235, -70.19739460906874, -70.19739405703719, -70.19739350933924, -70.1973929659847, -70.19739242698176, -70.197391892337, -70.19739136205546, -70.19739083614068, -70.1973903145948, -70.19738979741854, -70.1973892846113, -70.19738877617121, -70.19738827209511, -70.19738777237868, -70.19738727701643, -70.19738678600177, -70.19738629932702, -70.19738581698348]}}, "simConfig": {"cache_efficient": false, "verbose": 0, "saveFolder": "", "saveDat": false, "gatherOnlySimData": false, "duration": 100.0, "filename": "SpikingNet_netpyne_1", "addSynMechs": true, "cvode_atol": 0.001, "checkErrorsVerbose": true, "cvode_active": false, "saveJson": 1, "recordStim": true, "saveCellConns": true, "saveDataInclude": ["netParams", "netCells", "netPops", "simConfig", "simData"], "simLabel": "", "backupCfgFile": [], "saveCellSecs": true, "recordCells": ["all"], "createPyStruct": 1, "checkErrors": false, "createNEURONObj": 1, "recordStep": 0.1, "timestampFilename": false, "printPopAvgRates": false, "timing": true, "dt": 0.1, "saveFileStep": 0.1, "saveMat": false, "recordTraces": {"Volts_file__pop_post_pop_post_0_soma_v": {"var": "v", "loc": 0.5, "sec": "soma", "conds": {"pop": "pop_post"}}, "Volts_file__pop_pre_pop_pre_1_soma_v": {"var": "v", "loc": 0.5, "sec": "soma", "conds": {"pop": "pop_pre"}}, "Volts_file__pop_pre_pop_pre_0_soma_v": {"var": "v", "loc": 0.5, "sec": "soma", "conds": {"pop": "pop_pre"}}}, "savePickle": false, "hParams": {"clamp_resist": 0.001, "celsius": 6.3}, "analysis": {"plotTraces": {"include": ["all"]}}, "saveDpk": false, "seeds": {"loc": 0, "stim": 0, "conn": 0}, "saveHDF5": false, "tstop": 100.0, "includeParamsLabel": true, "saveTiming": false, "saveCSV": false, "printRunTime": false}} \ No newline at end of file From be1f91acaa33dc5557f31092c685175193d36b0d Mon Sep 17 00:00:00 2001 From: salvdord Date: Fri, 11 Aug 2017 14:23:19 -0400 Subject: [PATCH 49/50] fixed bug in checkErrors code in simFuncs.py initialize() --- examples/sandbox/sandbox.py | 2 +- netpyne/simFuncs.py | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/examples/sandbox/sandbox.py b/examples/sandbox/sandbox.py index 23c66a6f2..b07848535 100644 --- a/examples/sandbox/sandbox.py +++ b/examples/sandbox/sandbox.py @@ -78,7 +78,7 @@ simConfig.createPyStruct = 1 # create Python structure (simulator-independent) when instantiating network simConfig.verbose = False # show detailed messages -simConfig.checkErrors = 1 +simConfig.checkErrors = 0 # Recording simConfig.recordCells = [] # which cells to record from diff --git a/netpyne/simFuncs.py b/netpyne/simFuncs.py index 1bb463256..9f10519d0 100644 --- a/netpyne/simFuncs.py +++ b/netpyne/simFuncs.py @@ -36,11 +36,6 @@ def initialize (netParams = None, simConfig = None, net = None): print('Error: seems like the sim.initialize() arguments are in the wrong order, try initialize(netParams, simConfig)') sys.exit() - if hasattr(simConfig, 'checkErrors') and simConfig.checkErrors: # whether to validate the input parameters - simTestObj = sim.SimTestObj(simConfig.checkErrorsVerbose) - simTestObj.netParams = netParams - simTestObj.runTests() - # for testing validation # if simConfig.exitOnError: #sys.exit() @@ -66,6 +61,12 @@ def initialize (netParams = None, simConfig = None, net = None): sim.setNetParams(netParams) # set network parameters + if hasattr(sim.cfg, 'checkErrors') and sim.cfg.checkErrors: # whether to validate the input parameters + simTestObj = sim.SimTestObj(sim.cfg.checkErrorsVerbose) + simTestObj.simConfig = sim.cfg + simTestObj.netParams = sim.net.params + simTestObj.runTests() + sim.timing('stop', 'initialTime') From 7c27e33ee5f07344bb60bd3d0103c3d1af3e63f3 Mon Sep 17 00:00:00 2001 From: salvdord Date: Fri, 11 Aug 2017 14:39:00 -0400 Subject: [PATCH 50/50] VERSION 0.7.2 --- netpyne/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netpyne/__init__.py b/netpyne/__init__.py index 9ccaf787f..6b1320383 100644 --- a/netpyne/__init__.py +++ b/netpyne/__init__.py @@ -1,3 +1,3 @@ -__version__ = '0.7.1' +__version__ = '0.7.2' __gui__ = True # global option to enable/disable graphics \ No newline at end of file