def automated_analysis(folder, contains, vmSuffix, synapseSuffix, averageSynapseName, outName): vmNames = [] # scan_directory(folder, vmNames, vmSuffix) scan_directory2(folder, vmNames, vmSuffix, contains) synNames = [] # scan_directory(folder, synNames, synapseSuffix) scan_directory2(folder, synNames, synapseSuffix, contains) #=========================================================================== # first, determine avg. ongoing nr. of synapses per cell type # later subtracted from total nr. to give evoked nr. of synapses per type #=========================================================================== averageSynsPerCellType = load_average_synapse_file(averageSynapseName) vmData = {} for n in range(len(vmNames)): fname = vmNames[n] print 'Loading traces from file %s' % fname data_ = np.loadtxt(fname, skiprows=1, unpack=True) vmData[fname] = data_ print 'Loading %d synapse activation files...' % len(synNames) synapseData = {} for synTrialFile in synNames: synapseData[synTrialFile] = scp.read_complete_synapse_activation_file( synTrialFile) # for synchronyWindow in range(25,0,-1): ## for synchronyWindow in range(2,0,-2): ## for synchronyWindow in range(12,0,-2): ## for synchronyWindowOffset in range(0,22-synchronyWindow,2): ## for synchronyWindowOffset in range(0,4,2): ## for synchronyWindowOffset in range(8,22-synchronyWindow,2): # for synchronyWindowOffset in range(0,26-synchronyWindow,1): # if synchronyWindow%2 == 0 and synchronyWindowOffset%2 == 0: # continue # tmpOutName = outName + '_window_' + str(synchronyWindow) + '_offset_' + str(synchronyWindowOffset) # print '****************************************' # print 'Analyzing synaptic inputs' # print 'synchrony window: %dms' % synchronyWindow # print 'window offset: %dms' % synchronyWindowOffset # print 'output base name: %s' % tmpOutName # print '****************************************' # synaptic_input_window_analysis(vmData, synapseData, averageSynsPerCellType, tmpOutName, synchronyWindow, synchronyWindowOffset) synchronyWindow = 50 synchronyWindowOffset = 0 tmpOutName = outName + '_window_' + str( synchronyWindow) + '_offset_' + str(synchronyWindowOffset) print '****************************************' print 'Analyzing synaptic inputs' print 'synchrony window: %dms' % synchronyWindow print 'window offset: %dms' % synchronyWindowOffset print 'output base name: %s' % tmpOutName print '****************************************' synaptic_input_window_analysis(vmData, synapseData, averageSynsPerCellType, tmpOutName, synchronyWindow, synchronyWindowOffset)
def automated_analysis(folder, contains, vmSuffix, synapseSuffix, outName): vmNames = [] # scan_directory(folder, vmNames, vmSuffix) scan_directory2(folder, vmNames, vmSuffix, contains) synNames = [] # scan_directory(folder, synNames, synapseSuffix) scan_directory2(folder, synNames, synapseSuffix, contains) print 'Loading %d synapse activation files...' % len(synNames) synapseData = {} for synTrialFile in synNames: synapseData[synTrialFile] = scp.read_complete_synapse_activation_file( synTrialFile) synaptic_input_PCA(vmNames, synapseData, outName)
def spike_time_correlation_synaptic_input(folder, contains, vmSuffix, synapseSuffix, averageSynapseName, outName): ''' relative contributions of different presynaptic cell types as a function of spike time after stimulus ''' excTypes = ('L2', 'L34', 'L4py', 'L4sp', 'L4ss', 'L5st', 'L5tt',\ 'L6cc', 'L6ccinv', 'L6ct', 'VPM') inhTypes = ('L1','L23Trans','L45Sym','L45Peak','L56Trans',\ 'SymLocal1','SymLocal2','SymLocal3','SymLocal4','SymLocal5','SymLocal6') cellTypeColorMap = {'L2': 'dodgerblue', 'L34': 'blue', 'L4py': 'palegreen',\ 'L4sp': 'green', 'L4ss': 'lime', 'L5st': 'yellow', 'L5tt': 'orange',\ 'L6cc': 'indigo', 'L6ccinv': 'violet', 'L6ct': 'magenta', 'VPM': 'black',\ 'INH': 'grey', 'EXC': 'red'} plotTypes = ('L2', 'L34', 'L4py', 'L4sp', 'L4ss', 'L5st', 'L5tt',\ 'L6cc', 'L6ccinv', 'L6ct', 'VPM', 'EXC', 'INH') vmNames = [] # scan_directory(folder, vmNames, vmSuffix) scan_directory2(folder, vmNames, vmSuffix, contains) synNames = [] # scan_directory(folder, synNames, synapseSuffix) scan_directory2(folder, synNames, synapseSuffix, contains) #=========================================================================== # first, determine avg. ongoing nr. of synapses per cell type # later subtracted from total nr. to give evoked nr. of synapses per type #=========================================================================== averageSynsPerCellType = load_average_synapse_file(averageSynapseName) vmData = {} for n in range(len(vmNames)): fname = vmNames[n] print 'Loading traces from file %s' % fname data_ = np.loadtxt(fname, skiprows=1, unpack=True) vmData[fname] = data_ print 'Loading %d synapse activation files...' % len(synNames) synapseData = {} for synTrialFile in synNames: synapseData[synTrialFile] = scp.read_complete_synapse_activation_file( synTrialFile) print 'Computing reverse correlation of synaptic input from %d files' % len( synNames) # vmNames = vmData.keys() # synNames = synapseData.keys() # look at spikes in early phase (0-25ms) # and late phase (25-50ms) separately tOffset = 245.0 # tStim = 245.0 tStim = 253.0 # after VPM activation only tStimWindow = 50.0 # earlyWindow = 25.0 earlyWindow = 17.0 # after VPM activation only: 25-8 binWidth = 1.0 spikeTrialSyns = {} spikeTrialSynsProx = {} spikeTrialSynsDistal = {} spikeTrialSynsEarly = {} spikeTrialSynsEarlyProx = {} spikeTrialSynsEarlyDistal = {} # contains bins (i.e. int) of spike times at resolution binWidth (in ms) spikeTimesEarly = [] spikeTrialSynsLate = {} spikeTrialSynsLateProx = {} spikeTrialSynsLateDistal = {} for cellType in plotTypes: spikeTrialSyns[cellType] = [] spikeTrialSynsProx[cellType] = [] spikeTrialSynsDistal[cellType] = [] spikeTrialSynsEarly[cellType] = [] spikeTrialSynsEarlyProx[cellType] = [] spikeTrialSynsEarlyDistal[cellType] = [] spikeTrialSynsLate[cellType] = [] spikeTrialSynsLateProx[cellType] = [] spikeTrialSynsLateDistal[cellType] = [] data = [] trialSpikeTimes = [[] for j in range(len(vmNames))] trialWithSpikes = {} for n in range(len(vmNames)): fname = vmNames[n] # pathName = fname[:fname.rfind('/')] # print 'pathName = %s' % pathName print 'Analyzing traces in file %s' % fname # data_ = np.loadtxt(fname, skiprows=1, unpack=True) data_ = vmData[fname] data.append(data_) t = data_[0] trialWithSpikes[n] = [] for i in range(1, len(data_)): trialSpikeTimes[n].append([]) v = data_[i] trialSpikeTimes_ = sca.simple_spike_detection(t, v) trialWithSpikes_ = False for tSpike in trialSpikeTimes_: if tSpike >= tStim and tSpike < tStim + earlyWindow: trialSpikeTimes[n][-1].append(tSpike - tStim) trialWithSpikes_ = True if trialWithSpikes_: tSpikeMin = np.min(trialSpikeTimes[n][-1]) spikeTimesEarly.append(int(tSpikeMin / binWidth)) trialWithSpikes[n].append(trialWithSpikes_) allTrialSpikeTimes = [ tSpike for traceFile in trialSpikeTimes for trace in traceFile for tSpike in trace ] totalMeanSpikeTime = np.mean(allTrialSpikeTimes) print 'total mean spike time = %.1fms' % totalMeanSpikeTime for n in range(len(vmNames)): nrSpikeTrials = 0 nrNoSpikeTrials = 0 earlyProxSyns = 0 for i in range(1, len(data[n])): # for i in range(1,10): print 'Computing reverse correlation for spikes in trial %d of %d\r' % ( i, len(data[n]) - 1), sys.stdout.flush() trialNr = i - 1 synTrialStr = 'simulation_run%04d_synapses.csv' % trialNr synTrialFile = '' tmpVmName = vmNames[n] for name in synNames: if synTrialStr in name and os.path.split( tmpVmName)[0] == os.path.split(name)[0]: synTrialFile = name break if synTrialFile == '': errstr = 'Could not find synapse activation file for trial nr. %d' % trialNr raise RuntimeError(errstr) # activeSyns = scp.read_complete_synapse_activation_file(synTrialFile) activeSyns = synapseData[synTrialFile] synapseTimes = {} synapseTimesProx = {} synapseTimesDistal = {} for excType in excTypes: synapseTimes[excType] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimesProx[excType] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimesDistal[excType] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimes['EXC'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimesProx['EXC'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimesDistal['EXC'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimes['INH'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Soma': [], 'Total': [] } synapseTimesProx['INH'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Soma': [], 'Total': [] } synapseTimesDistal['INH'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Soma': [], 'Total': [] } for synType in activeSyns.keys(): preCellType = synType.split('_')[0] for excType in excTypes: if excType == preCellType: for syn in activeSyns[synType]: somaDist = syn[1] structure = syn[4] synTimes = syn[5] synapseTimes[excType][structure].extend(synTimes) synapseTimes[excType]['Total'].extend(synTimes) synapseTimes['EXC'][structure].extend(synTimes) synapseTimes['EXC']['Total'].extend(synTimes) if somaDist < 500.0: synapseTimesProx[excType][structure].extend( synTimes) synapseTimesProx[excType]['Total'].extend( synTimes) synapseTimesProx['EXC'][structure].extend( synTimes) synapseTimesProx['EXC']['Total'].extend( synTimes) else: synapseTimesDistal[excType][structure].extend( synTimes) synapseTimesDistal[excType]['Total'].extend( synTimes) synapseTimesDistal['EXC'][structure].extend( synTimes) synapseTimesDistal['EXC']['Total'].extend( synTimes) for inhType in inhTypes: if inhType == preCellType: for syn in activeSyns[synType]: somaDist = syn[1] structure = syn[4] synTimes = syn[5] synapseTimes['INH'][structure].extend(synTimes) synapseTimes['INH']['Total'].extend(synTimes) if somaDist < 500.0: synapseTimesProx['INH'][structure].extend( synTimes) synapseTimesProx['INH']['Total'].extend( synTimes) else: synapseTimesDistal['INH'][structure].extend( synTimes) synapseTimesDistal['INH']['Total'].extend( synTimes) if not trialWithSpikes[n][trialNr]: nrNoSpikeTrials += 1 continue elif trialWithSpikes[n][trialNr]: nrSpikeTrials += 1 tSpikeReference = np.min(trialSpikeTimes[n][trialNr]) for cellType in plotTypes: spikeTrialSyns[cellType].append(0) spikeTrialSynsProx[cellType].append(0) spikeTrialSynsDistal[cellType].append(0) spikeTrialSynsEarly[cellType].append(0) spikeTrialSynsEarlyProx[cellType].append(0) spikeTrialSynsEarlyDistal[cellType].append(0) spikeTrialSynsLate[cellType].append(0) spikeTrialSynsLateProx[cellType].append(0) spikeTrialSynsLateDistal[cellType].append(0) synTimes = synapseTimes[cellType]['Total'] synTimesProx = synapseTimesProx[cellType]['Total'] synTimesDistal = synapseTimesDistal[cellType]['Total'] for tSyn in synTimesProx: # 8.0: VPM offset (tOffset vs. tStim) if tOffset <= tSyn < tOffset + tSpikeReference + 8.0: spikeTrialSynsEarlyProx[cellType][-1] += 1 earlyProxSyns += 1 print '' print 'Nr of trials with spike: %d' % nrSpikeTrials print 'Nr of trials without spike: %d' % nrNoSpikeTrials print 'earlyProxSyns = %d' % earlyProxSyns print 'mean spike time = %.1fms' % np.mean( [tSpike for trace in trialSpikeTimes[n] for tSpike in trace]) cellTypeTrialContributions = {} for cellType in plotTypes: cellTypeTrialContributions[cellType] = [ [] for i in range(int(earlyWindow)) ] for i in range(len(spikeTimesEarly)): evokedSyn = {} # totalNr = spikeTrialSynsEarlyProx['EXC'][i] - (spikeTimesEarly[i]+9.0)*averageSynsPerCellType['EXC'] # if not totalNr: # continue # for cellType in excTypes: # # 9.0 = 1.0 + tStim-tOffset # evokedSyn_ = spikeTrialSynsEarlyProx[cellType][i] - (spikeTimesEarly[i]+9.0)*averageSynsPerCellType[cellType] # evokedSyn[cellType] = np.max([0.0, evokedSyn_]) # cellTypeTrialContributions[cellType][spikeTimesEarly[i]].append(evokedSyn[cellType]/totalNr) norm = 0.0 for cellType in excTypes: # 9.0 = 1.0 + tStim-tOffset evokedSyn_ = spikeTrialSynsEarlyProx[cellType][i] - ( spikeTimesEarly[i] + 9.0) * averageSynsPerCellType[cellType] evokedSyn[cellType] = np.max([0.0, evokedSyn_]) norm += evokedSyn[cellType] for cellType in excTypes: cellTypeTrialContributions[cellType][spikeTimesEarly[i]].append( evokedSyn[cellType] / norm) if not outName.endswith('.csv'): outName += '.csv' with open(outName, 'w') as outFile: header = 'spike time\tnr. of spikes' for cellType in excTypes: header += '\t' header += cellType header += ' AVG\t' header += cellType header += ' STD' header += '\n' outFile.write(header) for i in range(int(earlyWindow)): line = str(i + 0.5) line += '\t' line += str(len(cellTypeTrialContributions['VPM'][i])) for cellType in excTypes: avg = np.mean(cellTypeTrialContributions[cellType][i]) std = np.std(cellTypeTrialContributions[cellType][i]) line += '\t' line += str(avg) line += '\t' line += str(std) line += '\n' outFile.write(line)
def reverse_correlation_synaptic_input(folder, contains, vmSuffix, synapseSuffix): ''' load all traces, compute spike times and create raster plots ''' excTypes = ('L2', 'L34', 'L4py', 'L4sp', 'L4ss', 'L5st', 'L5tt',\ 'L6cc', 'L6ccinv', 'L6ct', 'VPM') inhTypes = ('L1','L23Trans','L45Sym','L45Peak','L56Trans',\ 'SymLocal1','SymLocal2','SymLocal3','SymLocal4','SymLocal5','SymLocal6') cellTypeColorMap = {'L2': 'dodgerblue', 'L34': 'blue', 'L4py': 'palegreen',\ 'L4sp': 'green', 'L4ss': 'lime', 'L5st': 'yellow', 'L5tt': 'orange',\ 'L6cc': 'indigo', 'L6ccinv': 'violet', 'L6ct': 'magenta', 'VPM': 'black',\ 'INH': 'grey', 'EXC': 'red'} plotTypes = ('L2', 'L34', 'L4py', 'L4sp', 'L4ss', 'L5st', 'L5tt',\ 'L6cc', 'L6ccinv', 'L6ct', 'VPM', 'EXC', 'INH') vmNames = [] # scan_directory(folder, vmNames, vmSuffix) scan_directory2(folder, vmNames, vmSuffix, contains) synNames = [] # scan_directory(folder, synNames, synapseSuffix) scan_directory2(folder, synNames, synapseSuffix, contains) print 'Computing reverse correlation of synaptic input from %d files' % len( synNames) # look at spikes in early phase (0-20ms) # and late phase (20-50ms) separately reverseTimes = {} reverseTimesProx = {} reverseTimesDistal = {} reverseTimesEarly = {} reverseTimesEarlyProx = {} reverseTimesEarlyDistal = {} reverseTimesLate = {} reverseTimesLateProx = {} reverseTimesLateDistal = {} for cellType in plotTypes: reverseTimes[cellType] = [] reverseTimesProx[cellType] = [] reverseTimesDistal[cellType] = [] reverseTimesEarly[cellType] = [] reverseTimesEarlyProx[cellType] = [] reverseTimesEarlyDistal[cellType] = [] reverseTimesLate[cellType] = [] reverseTimesLateProx[cellType] = [] reverseTimesLateDistal[cellType] = [] tOffset = 100.0 tStim = 245.0 tStimWindow = 50.0 earlyWindow = 25.0 correlationWindow = 50.0 binWidth = 1.0 for n in range(len(vmNames)): fname = vmNames[n] pathName = fname[:fname.rfind('/')] print 'pathName = %s' % pathName print 'Loading traces from file %s' % fname data = np.loadtxt(fname, skiprows=1, unpack=True) t = data[0] for i in range(1, len(data)): # for i in range(1,10): print 'Computing reverse correlation for spikes in trial %d of %d\r' % ( i, len(data) - 1), sys.stdout.flush() trialNr = i - 1 synTrialStr = 'simulation_run%04d_synapses.csv' % trialNr synTrialFile = '' for name in synNames: if synTrialStr in name and pathName in name: synTrialFile = name break if synTrialFile == '': errstr = 'Could not find synapse activation file for trial nr. %d' % trialNr raise RuntimeError(errstr) activeSyns = scp.read_complete_synapse_activation_file( synTrialFile) synapseTimes = {} synapseTimesProx = {} synapseTimesDistal = {} for excType in excTypes: synapseTimes[excType] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimesProx[excType] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimesDistal[excType] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimes['EXC'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimesProx['EXC'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimesDistal['EXC'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimes['INH'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Soma': [], 'Total': [] } synapseTimesProx['INH'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Soma': [], 'Total': [] } synapseTimesDistal['INH'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Soma': [], 'Total': [] } for synType in activeSyns.keys(): preCellType = synType.split('_')[0] for excType in excTypes: if excType == preCellType: for syn in activeSyns[synType]: somaDist = syn[1] structure = syn[4] synTimes = syn[5] synapseTimes[excType][structure].extend(synTimes) synapseTimes[excType]['Total'].extend(synTimes) synapseTimes['EXC'][structure].extend(synTimes) synapseTimes['EXC']['Total'].extend(synTimes) if somaDist < 500.0: synapseTimesProx[excType][structure].extend( synTimes) synapseTimesProx[excType]['Total'].extend( synTimes) synapseTimesProx['EXC'][structure].extend( synTimes) synapseTimesProx['EXC']['Total'].extend( synTimes) else: synapseTimesDistal[excType][structure].extend( synTimes) synapseTimesDistal[excType]['Total'].extend( synTimes) synapseTimesDistal['EXC'][structure].extend( synTimes) synapseTimesDistal['EXC']['Total'].extend( synTimes) for inhType in inhTypes: if inhType == preCellType: for syn in activeSyns[synType]: somaDist = syn[1] structure = syn[4] synTimes = syn[5] synapseTimes['INH'][structure].extend(synTimes) synapseTimes['INH']['Total'].extend(synTimes) if somaDist < 500.0: synapseTimesProx['INH'][structure].extend( synTimes) synapseTimesProx['INH']['Total'].extend( synTimes) else: synapseTimesDistal['INH'][structure].extend( synTimes) synapseTimesDistal['INH']['Total'].extend( synTimes) v = data[i] trialSpikeTimes = sca.simple_spike_detection(t, v) for tSpike in trialSpikeTimes: #evoked if tSpike <= tStim or tSpike > tStim + tStimWindow: #ongoing #if tSpike < tOffset or tSpike > tStim: continue for cellType in plotTypes: reverseTimes[cellType].append([]) reverseTimesProx[cellType].append([]) reverseTimesDistal[cellType].append([]) if tStim <= tSpike < tStim + earlyWindow: reverseTimesEarly[cellType].append([]) reverseTimesEarlyProx[cellType].append([]) reverseTimesEarlyDistal[cellType].append([]) else: reverseTimesLate[cellType].append([]) reverseTimesLateProx[cellType].append([]) reverseTimesLateDistal[cellType].append([]) synTimes = synapseTimes[cellType]['Total'] synTimesProx = synapseTimesProx[cellType]['Total'] synTimesDistal = synapseTimesDistal[cellType]['Total'] for tSyn in synTimes: # for tSyn in synTimesDistal: if tSpike - correlationWindow <= tSyn < tSpike: reverseTimes[cellType][-1].append(tSyn - tSpike) if tStim <= tSpike < tStim + earlyWindow: reverseTimesEarly[cellType][-1].append(tSyn - tSpike) else: reverseTimesLate[cellType][-1].append(tSyn - tSpike) for tSyn in synTimesProx: if tSpike - correlationWindow <= tSyn < tSpike: reverseTimesProx[cellType][-1].append(tSyn - tSpike) if tStim <= tSpike < tStim + earlyWindow: reverseTimesEarlyProx[cellType][-1].append( tSyn - tSpike) else: reverseTimesLateProx[cellType][-1].append( tSyn - tSpike) for tSyn in synTimesDistal: if tSpike - correlationWindow <= tSyn < tSpike: reverseTimesDistal[cellType][-1].append(tSyn - tSpike) if tStim <= tSpike < tStim + earlyWindow: reverseTimesEarlyDistal[cellType][-1].append( tSyn - tSpike) else: reverseTimesLateDistal[cellType][-1].append( tSyn - tSpike) #fig.add_subplot(2,1,1) #spikes = [i for time in trialSpikeTimes] #ax.append(plt.plot(trialSpikeTimes, spikes, 'k|')) print '' ax = [] fig = plt.figure(1) for cellType in plotTypes: hist, bins = sca.PSTH_from_spike_times(reverseTimes[cellType], binWidth, -correlationWindow, 0.0) offset = 0.5 * (bins[1] - bins[0]) fig.add_subplot(3, 1, 1) ax.append( plt.plot(bins[:-1] + offset, hist, color=cellTypeColorMap[cellType], label=cellType, linewidth=2)) hist, bins = sca.PSTH_from_spike_times(reverseTimesEarly[cellType], binWidth, -correlationWindow, 0.0) offset = 0.5 * (bins[1] - bins[0]) fig.add_subplot(3, 1, 2) ax.append( plt.plot(bins[:-1] + offset, hist, color=cellTypeColorMap[cellType], label=cellType, linewidth=2)) hist, bins = sca.PSTH_from_spike_times(reverseTimesLate[cellType], binWidth, -correlationWindow, 0.0) offset = 0.5 * (bins[1] - bins[0]) fig.add_subplot(3, 1, 3) ax.append( plt.plot(bins[:-1] + offset, hist, color=cellTypeColorMap[cellType], label=cellType, linewidth=2)) #fig.add_subplot(3,1,1) plt.xlabel('t [ms]') plt.ylabel('All spikes') plt.xlim([-correlationWindow, 0.0]) #fig.add_subplot(3,1,2) #plt.xlabel('t [ms]') #plt.ylabel('Early spikes') #plt.xlim([-correlationWindow, 0.0]) #fig.add_subplot(3,1,3) #plt.xlabel('t [ms]') #plt.ylabel('Late spikes') #plt.xlim([-correlationWindow, 0.0]) fig = plt.figure(2) for cellType in plotTypes: hist, bins = sca.PSTH_from_spike_times(reverseTimesProx[cellType], binWidth, -correlationWindow, 0.0) offset = 0.5 * (bins[1] - bins[0]) fig.add_subplot(3, 1, 1) ax.append( plt.plot(bins[:-1] + offset, hist, color=cellTypeColorMap[cellType], label=cellType, linewidth=2)) hist, bins = sca.PSTH_from_spike_times(reverseTimesEarlyProx[cellType], binWidth, -correlationWindow, 0.0) offset = 0.5 * (bins[1] - bins[0]) fig.add_subplot(3, 1, 2) ax.append( plt.plot(bins[:-1] + offset, hist, color=cellTypeColorMap[cellType], label=cellType, linewidth=2)) hist, bins = sca.PSTH_from_spike_times(reverseTimesLateProx[cellType], binWidth, -correlationWindow, 0.0) offset = 0.5 * (bins[1] - bins[0]) fig.add_subplot(3, 1, 3) ax.append( plt.plot(bins[:-1] + offset, hist, color=cellTypeColorMap[cellType], label=cellType, linewidth=2)) plt.xlabel('t [ms]') plt.ylabel('All spikes (proximal syns)') plt.xlim([-correlationWindow, 0.0]) fig = plt.figure(3) for cellType in plotTypes: hist, bins = sca.PSTH_from_spike_times(reverseTimesDistal[cellType], binWidth, -correlationWindow, 0.0) offset = 0.5 * (bins[1] - bins[0]) fig.add_subplot(3, 1, 1) ax.append( plt.plot(bins[:-1] + offset, hist, color=cellTypeColorMap[cellType], label=cellType, linewidth=2)) hist, bins = sca.PSTH_from_spike_times( reverseTimesEarlyDistal[cellType], binWidth, -correlationWindow, 0.0) offset = 0.5 * (bins[1] - bins[0]) fig.add_subplot(3, 1, 2) ax.append( plt.plot(bins[:-1] + offset, hist, color=cellTypeColorMap[cellType], label=cellType, linewidth=2)) hist, bins = sca.PSTH_from_spike_times( reverseTimesLateDistal[cellType], binWidth, -correlationWindow, 0.0) offset = 0.5 * (bins[1] - bins[0]) fig.add_subplot(3, 1, 3) ax.append( plt.plot(bins[:-1] + offset, hist, color=cellTypeColorMap[cellType], label=cellType, linewidth=2)) plt.xlabel('t [ms]') plt.ylabel('All spikes (distal syns)') plt.xlim([-correlationWindow, 0.0]) # outName = fname[:-4] # outName += '_spike_raster_plot.pdf' # plt.savefig(outName) plt.show()
def create_active_synapse_histogram_spike_no_spike(folder, suffix, vmSuffix, contains, outName): ''' load all traces, compute spike times and create raster plots ''' excTypes = ('L2', 'L34', 'L4py', 'L4sp', 'L4ss', 'L5st', 'L5tt',\ 'L6cc', 'L6ccinv', 'L6ct', 'VPM') inhTypes = ('L1','L23Trans','L45Sym','L45Peak','L56Trans',\ 'SymLocal1','SymLocal2','SymLocal3','SymLocal4','SymLocal5','SymLocal6') plotTypes = ('L2', 'L34', 'L4py', 'L4sp', 'L4ss', 'L5st', 'L5tt',\ 'L6cc', 'L6ccinv', 'L6ct', 'VPM', 'EXC', 'INH') vmNames = [] scan_directory2(folder, vmNames, vmSuffix, contains) synNames = [] scan_directory2(folder, synNames, suffix, contains) nrOfFiles = len(synNames) print 'Creating active synapse plots from %d files' % nrOfFiles synData = {} for fname in synNames: activeSyns = scp.read_complete_synapse_activation_file(fname) synData[fname] = activeSyns synapseTimes = {} spikeTrialSyns = {} noSpikeTrialSyns = {} for excType in excTypes: synapseTimes[excType] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } spikeTrialSyns[excType] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } noSpikeTrialSyns[excType] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimes['EXC'] = {'ApicalDendrite': [], 'Dendrite': [], 'Total': []} synapseTimes['INH'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Soma': [], 'Total': [] } spikeTrialSyns['EXC'] = {'ApicalDendrite': [], 'Dendrite': [], 'Total': []} spikeTrialSyns['INH'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Soma': [], 'Total': [] } noSpikeTrialSyns['EXC'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } noSpikeTrialSyns['INH'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Soma': [], 'Total': [] } tStim = 253.0 earlyWindow = 17.0 trials = [] trialSpikeTimes = [[] for j in range(len(vmNames))] trialWithSpikes = {} for n in range(len(vmNames)): fname = vmNames[n] print 'Loading spike times from file %s' % fname trialWithSpikes[n] = [] trialSpikeTimes_ = scp.read_spike_times_file(fname) nrOfTrials = len(trialSpikeTimes_.keys()) trials.append(nrOfTrials) for trial in trialSpikeTimes_.keys(): trialSpikeTimes[n].append([]) trialWithSpikes_ = False for tSpike in trialSpikeTimes_[trial]: if tSpike >= tStim and tSpike < tStim + earlyWindow: trialSpikeTimes[n][-1].append(tSpike - tStim) trialWithSpikes_ = True trialWithSpikes[n].append(trialWithSpikes_) for n in range(len(vmNames)): nrSpikeTrials = 0 nrNoSpikeTrials = 0 earlyProxSyns = 0 for trialNr in range(trials[n]): print 'Counting active synapses in trial %d of %d\r' % ( trialNr + 1, trials[n]), sys.stdout.flush() synTrialStr = 'simulation_run%04d_synapses.csv' % trialNr synTrialFile = '' tmpVmName = vmNames[n] for name in synNames: if synTrialStr in name and os.path.split( tmpVmName)[0] == os.path.split(name)[0]: synTrialFile = name break if synTrialFile == '': errstr = 'Could not find synapse activation file for trial nr. %d' % trialNr raise RuntimeError(errstr) activeSyns = synData[synTrialFile] for excType in excTypes: synapseTimes[excType]['ApicalDendrite'].append([]) synapseTimes[excType]['Dendrite'].append([]) synapseTimes[excType]['Total'].append([]) if trialWithSpikes[n][trialNr]: spikeTrialSyns[excType]['ApicalDendrite'].append([]) spikeTrialSyns[excType]['Dendrite'].append([]) spikeTrialSyns[excType]['Total'].append([]) else: noSpikeTrialSyns[excType]['ApicalDendrite'].append([]) noSpikeTrialSyns[excType]['Dendrite'].append([]) noSpikeTrialSyns[excType]['Total'].append([]) synapseTimes['EXC']['ApicalDendrite'].append([]) synapseTimes['EXC']['Dendrite'].append([]) synapseTimes['EXC']['Total'].append([]) synapseTimes['INH']['ApicalDendrite'].append([]) synapseTimes['INH']['Dendrite'].append([]) synapseTimes['INH']['Soma'].append([]) synapseTimes['INH']['Total'].append([]) if trialWithSpikes[n][trialNr]: spikeTrialSyns['EXC']['ApicalDendrite'].append([]) spikeTrialSyns['EXC']['Dendrite'].append([]) spikeTrialSyns['EXC']['Total'].append([]) spikeTrialSyns['INH']['ApicalDendrite'].append([]) spikeTrialSyns['INH']['Dendrite'].append([]) spikeTrialSyns['INH']['Soma'].append([]) spikeTrialSyns['INH']['Total'].append([]) else: noSpikeTrialSyns['EXC']['ApicalDendrite'].append([]) noSpikeTrialSyns['EXC']['Dendrite'].append([]) noSpikeTrialSyns['EXC']['Total'].append([]) noSpikeTrialSyns['INH']['ApicalDendrite'].append([]) noSpikeTrialSyns['INH']['Dendrite'].append([]) noSpikeTrialSyns['INH']['Soma'].append([]) noSpikeTrialSyns['INH']['Total'].append([]) for synType in activeSyns.keys(): preCellType = synType.split('_')[0] for excType in excTypes: if excType == preCellType: for syn in activeSyns[synType]: somaDist = syn[1] structure = syn[4] synTimes = syn[5] if somaDist < 500.0: synapseTimes[excType][structure][-1].extend( synTimes) synapseTimes[excType]['Total'][-1].extend( synTimes) synapseTimes['EXC'][structure][-1].extend( synTimes) synapseTimes['EXC']['Total'][-1].extend( synTimes) if trialWithSpikes[n][trialNr]: spikeTrialSyns[excType][structure][ -1].extend(synTimes) spikeTrialSyns[excType]['Total'][ -1].extend(synTimes) spikeTrialSyns['EXC'][structure][ -1].extend(synTimes) spikeTrialSyns['EXC']['Total'][-1].extend( synTimes) else: noSpikeTrialSyns[excType][structure][ -1].extend(synTimes) noSpikeTrialSyns[excType]['Total'][ -1].extend(synTimes) noSpikeTrialSyns['EXC'][structure][ -1].extend(synTimes) noSpikeTrialSyns['EXC']['Total'][ -1].extend(synTimes) for inhType in inhTypes: if inhType == preCellType: for syn in activeSyns[synType]: somaDist = syn[1] structure = syn[4] synTimes = syn[5] if somaDist < 500.0: synapseTimes['INH'][structure][-1].extend( synTimes) synapseTimes['INH']['Total'][-1].extend( synTimes) if trialWithSpikes[n][trialNr]: spikeTrialSyns['INH'][structure][ -1].extend(synTimes) spikeTrialSyns['INH']['Total'][-1].extend( synTimes) else: noSpikeTrialSyns['INH'][structure][ -1].extend(synTimes) noSpikeTrialSyns['INH']['Total'][ -1].extend(synTimes) print '' tOffset = 100.0 tPlotBegin = 220.0 tPlotBeginWindow = 50.0 binWidth = 1.0 maxCount = 0 synapseHistograms = {} spikeTrialHistograms = {} noSpikeTrialHistograms = {} for cellType in synapseTimes.keys(): synapseHistograms[cellType] = {} spikeTrialHistograms[cellType] = {} noSpikeTrialHistograms[cellType] = {} for structure in synapseTimes[cellType].keys(): synTimes = synapseTimes[cellType][structure] hist, bins = sca.PSTH_from_spike_times( synTimes, binWidth, tOffset, tPlotBegin + tPlotBeginWindow) synapseHistograms[cellType][structure] = hist, bins spikeTrialSynTimes = spikeTrialSyns[cellType][structure] hist2, bins2 = sca.PSTH_from_spike_times( spikeTrialSynTimes, binWidth, tOffset, tPlotBegin + tPlotBeginWindow) spikeTrialHistograms[cellType][structure] = hist2, bins2 noSpikeTrialSynTimes = noSpikeTrialSyns[cellType][structure] hist3, bins3 = sca.PSTH_from_spike_times( noSpikeTrialSynTimes, binWidth, tOffset, tPlotBegin + tPlotBeginWindow) noSpikeTrialHistograms[cellType][structure] = hist3, bins3 tableOutName = outName + '_all_trials.csv' with open(tableOutName, 'w') as outputTable: hist, bins = synapseHistograms['EXC']['Total'] header = 'Bin start\tbin end\tbin center' for cellType in plotTypes: header += '\t' header += cellType header += '\n' outputTable.write(header) for i in range(len(bins) - 1): line = str(bins[i]) line += '\t' line += str(bins[i + 1]) line += '\t' line += str(0.5 * (bins[i] + bins[i + 1])) for cellType in plotTypes: line += '\t' line += str(synapseHistograms[cellType]['Total'][0][i]) line += '\n' outputTable.write(line) tableOutName2 = outName + '_spike_trials.csv' with open(tableOutName2, 'w') as outputTable: hist, bins = spikeTrialHistograms['EXC']['Total'] header = 'Bin start\tbin end\tbin center' for cellType in plotTypes: header += '\t' header += cellType header += '\n' outputTable.write(header) for i in range(len(bins) - 1): line = str(bins[i]) line += '\t' line += str(bins[i + 1]) line += '\t' line += str(0.5 * (bins[i] + bins[i + 1])) for cellType in plotTypes: line += '\t' line += str(spikeTrialHistograms[cellType]['Total'][0][i]) line += '\n' outputTable.write(line) tableOutName3 = outName + '_no_spike_trials.csv' with open(tableOutName3, 'w') as outputTable: hist, bins = noSpikeTrialHistograms['EXC']['Total'] header = 'Bin start\tbin end\tbin center' for cellType in plotTypes: header += '\t' header += cellType header += '\n' outputTable.write(header) for i in range(len(bins) - 1): line = str(bins[i]) line += '\t' line += str(bins[i + 1]) line += '\t' line += str(0.5 * (bins[i] + bins[i + 1])) for cellType in plotTypes: line += '\t' line += str(noSpikeTrialHistograms[cellType]['Total'][0][i]) line += '\n' outputTable.write(line)
def create_active_synapse_histogram(folder, suffix, contains, outName): ''' load all traces, compute spike times and create raster plots ''' excTypes = ('L2', 'L34', 'L4py', 'L4sp', 'L4ss', 'L5st', 'L5tt',\ 'L6cc', 'L6ccinv', 'L6ct', 'VPM') inhTypes = ('L1','L23Trans','L45Sym','L45Peak','L56Trans',\ 'SymLocal1','SymLocal2','SymLocal3','SymLocal4','SymLocal5','SymLocal6') plotTypes = ('INH', 'L2', 'L34', 'L4py', 'L4sp', 'L4ss', 'L5st', 'L5tt',\ 'L6cc', 'L6ccinv', 'L6ct', 'VPM') columns = ('A1','A2','A3','A4','Alpha','B1','B2','B3','B4','Beta',\ 'C1','C2','C3','C4','D1','D2','D3','D4','Delta','E1','E2','E3','E4','Gamma') fnames = [] # scan_directory(folder, fnames, suffix) scan_directory2(folder, fnames, suffix, contains) nrOfFiles = len(fnames) print 'Creating active synapse plots from %d files' % nrOfFiles synapseTimes = {} synapseTimesProximal = {} synapseTimesDistal = {} for col in columns: synapseTimes[col] = {} synapseTimesProximal[col] = {} synapseTimesDistal[col] = {} for excType in excTypes: synapseTimes[col][excType] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimesProximal[col][excType] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimesDistal[col][excType] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimes[col]['EXC'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimes[col]['INH'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Soma': [], 'Total': [] } synapseTimesProximal[col]['EXC'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimesProximal[col]['INH'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Soma': [], 'Total': [] } synapseTimesDistal[col]['EXC'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Total': [] } synapseTimesDistal[col]['INH'] = { 'ApicalDendrite': [], 'Dendrite': [], 'Soma': [], 'Total': [] } for n in range(len(fnames)): fname = fnames[n] print 'Loading synapse activation times from file %s (file %d of %d)\r' % ( fname, n + 1, nrOfFiles), sys.stdout.flush() activeSyns = scp.read_complete_synapse_activation_file(fname) for col in columns: for excType in excTypes: synapseTimes[col][excType]['ApicalDendrite'].append([]) synapseTimes[col][excType]['Dendrite'].append([]) synapseTimes[col][excType]['Total'].append([]) synapseTimesProximal[col][excType]['ApicalDendrite'].append([]) synapseTimesProximal[col][excType]['Dendrite'].append([]) synapseTimesProximal[col][excType]['Total'].append([]) synapseTimesDistal[col][excType]['ApicalDendrite'].append([]) synapseTimesDistal[col][excType]['Dendrite'].append([]) synapseTimesDistal[col][excType]['Total'].append([]) synapseTimes[col]['EXC']['ApicalDendrite'].append([]) synapseTimes[col]['EXC']['Dendrite'].append([]) synapseTimes[col]['EXC']['Total'].append([]) synapseTimesProximal[col]['EXC']['ApicalDendrite'].append([]) synapseTimesProximal[col]['EXC']['Dendrite'].append([]) synapseTimesProximal[col]['EXC']['Total'].append([]) synapseTimesDistal[col]['EXC']['ApicalDendrite'].append([]) synapseTimesDistal[col]['EXC']['Dendrite'].append([]) synapseTimesDistal[col]['EXC']['Total'].append([]) synapseTimes[col]['INH']['ApicalDendrite'].append([]) synapseTimes[col]['INH']['Dendrite'].append([]) synapseTimes[col]['INH']['Soma'].append([]) synapseTimes[col]['INH']['Total'].append([]) synapseTimesProximal[col]['INH']['ApicalDendrite'].append([]) synapseTimesProximal[col]['INH']['Dendrite'].append([]) synapseTimesProximal[col]['INH']['Soma'].append([]) synapseTimesProximal[col]['INH']['Total'].append([]) synapseTimesDistal[col]['INH']['ApicalDendrite'].append([]) synapseTimesDistal[col]['INH']['Dendrite'].append([]) synapseTimesDistal[col]['INH']['Soma'].append([]) synapseTimesDistal[col]['INH']['Total'].append([]) for synType in activeSyns.keys(): preCellType = synType.split('_')[0] preCol = synType.split('_')[1] for col in columns: if col == preCol: for excType in excTypes: if excType == preCellType: for syn in activeSyns[synType]: somaDist = syn[1] structure = syn[4] synTimes = syn[5] synapseTimes[col][excType][structure][ n].extend(synTimes) synapseTimes[col][excType]['Total'][n].extend( synTimes) synapseTimes[col]['EXC'][structure][n].extend( synTimes) synapseTimes[col]['EXC']['Total'][n].extend( synTimes) if somaDist < 500.0: synapseTimesProximal[col][excType][ structure][n].extend(synTimes) synapseTimesProximal[col][excType][ 'Total'][n].extend(synTimes) synapseTimesProximal[col]['EXC'][ structure][n].extend(synTimes) synapseTimesProximal[col]['EXC']['Total'][ n].extend(synTimes) if somaDist >= 500.0: synapseTimesDistal[col][excType][ structure][n].extend(synTimes) synapseTimesDistal[col][excType]['Total'][ n].extend(synTimes) synapseTimesDistal[col]['EXC'][structure][ n].extend(synTimes) synapseTimesDistal[col]['EXC']['Total'][ n].extend(synTimes) for inhType in inhTypes: if inhType == preCellType: for syn in activeSyns[synType]: somaDist = syn[1] structure = syn[4] synTimes = syn[5] synapseTimes[col]['INH'][structure][n].extend( synTimes) synapseTimes[col]['INH']['Total'][n].extend( synTimes) if somaDist < 500.0: synapseTimesProximal[col]['INH'][ structure][n].extend(synTimes) synapseTimesProximal[col]['INH']['Total'][ n].extend(synTimes) if somaDist >= 500.0: synapseTimesDistal[col]['INH'][structure][ n].extend(synTimes) synapseTimesDistal[col]['INH']['Total'][ n].extend(synTimes) print '' tOffset = 100.0 tOngoing = 120.0 tOngoingWindow = 100.0 tStim = 245.0 tStimWindow = 25.0 binWidth = 1.0 maxCount = 0 synapseHistogramsEvoked = {} synapseHistogramsOngoing = {} synapseHistogramsEvokedProximal = {} synapseHistogramsOngoingProximal = {} synapseHistogramsEvokedDistal = {} synapseHistogramsOngoingDistal = {} for col in columns: synapseHistogramsEvoked[col] = {} synapseHistogramsOngoing[col] = {} synapseHistogramsEvokedProximal[col] = {} synapseHistogramsOngoingProximal[col] = {} synapseHistogramsEvokedDistal[col] = {} synapseHistogramsOngoingDistal[col] = {} for cellType in synapseTimes[col].keys(): synapseHistogramsEvoked[col][cellType] = {} synapseHistogramsOngoing[col][cellType] = {} synapseHistogramsEvokedProximal[col][cellType] = {} synapseHistogramsOngoingProximal[col][cellType] = {} synapseHistogramsEvokedDistal[col][cellType] = {} synapseHistogramsOngoingDistal[col][cellType] = {} for structure in synapseTimes[col][cellType].keys(): synTimes1 = synapseTimes[col][cellType][structure] hist1, bins1 = sca.PSTH_from_spike_times( synTimes1, binWidth, tStim, tStim + tStimWindow) synapseHistogramsEvoked[col][cellType][structure] = np.sum( hist1) hist2, bins2 = sca.PSTH_from_spike_times( synTimes1, binWidth, tOngoing, tOngoing + tOngoingWindow) synapseHistogramsOngoing[col][cellType][structure] = np.sum( hist2) synTimes2 = synapseTimesProximal[col][cellType][structure] hist3, bins3 = sca.PSTH_from_spike_times( synTimes2, binWidth, tStim, tStim + tStimWindow) synapseHistogramsEvokedProximal[col][cellType][ structure] = np.sum(hist3) hist4, bins4 = sca.PSTH_from_spike_times( synTimes2, binWidth, tOngoing, tOngoing + tOngoingWindow) synapseHistogramsOngoingProximal[col][cellType][ structure] = np.sum(hist4) synTimes3 = synapseTimesDistal[col][cellType][structure] hist5, bins5 = sca.PSTH_from_spike_times( synTimes3, binWidth, tStim, tStim + tStimWindow) synapseHistogramsEvokedDistal[col][cellType][ structure] = np.sum(hist5) hist6, bins6 = sca.PSTH_from_spike_times( synTimes3, binWidth, tOngoing, tOngoing + tOngoingWindow) synapseHistogramsOngoingDistal[col][cellType][ structure] = np.sum(hist6) ongoingOutName = outName + '_ongoing_syn.csv' with open(ongoingOutName, 'w') as outputTable: header = 'Column\tcell type\tnr. of active synapses (100ms)\n' outputTable.write(header) for cellType in plotTypes: for col in columns: line = col line += '\t' line += cellType line += '\t' line += str(synapseHistogramsOngoing[col][cellType]['Total']) line += '\n' outputTable.write(line) writeHeader = True evokedOutName = outName + '_total_evoked_syn.csv' with open(evokedOutName, 'w') as outputTable: header = 'Column\tcell type\tnr. of active synapses (25ms post-stimulus)\n' outputTable.write(header) for cellType in plotTypes: for col in columns: line = col line += '\t' line += cellType line += '\t' line += str(synapseHistogramsEvoked[col][cellType]['Total']) line += '\n' outputTable.write(line) ongoingProximalOutName = outName + '_ongoing_proximal_syn.csv' with open(ongoingProximalOutName, 'w') as outputTable: header = 'Column\tcell type\tnr. of active synapses (100ms)\n' outputTable.write(header) for cellType in plotTypes: for col in columns: line = col line += '\t' line += cellType line += '\t' line += str( synapseHistogramsOngoingProximal[col][cellType]['Total']) line += '\n' outputTable.write(line) writeHeader = True evokedProximalOutName = outName + '_total_evoked_proximal_syn.csv' with open(evokedProximalOutName, 'w') as outputTable: header = 'Column\tcell type\tnr. of active synapses (25ms post-stimulus)\n' outputTable.write(header) for cellType in plotTypes: for col in columns: line = col line += '\t' line += cellType line += '\t' line += str( synapseHistogramsEvokedProximal[col][cellType]['Total']) line += '\n' outputTable.write(line) ongoingDistalOutName = outName + '_ongoing_distal_syn.csv' with open(ongoingDistalOutName, 'w') as outputTable: header = 'Column\tcell type\tnr. of active synapses (100ms)\n' outputTable.write(header) for cellType in plotTypes: for col in columns: line = col line += '\t' line += cellType line += '\t' line += str( synapseHistogramsOngoingDistal[col][cellType]['Total']) line += '\n' outputTable.write(line) writeHeader = True evokedDistalOutName = outName + '_total_evoked_distal_syn.csv' with open(evokedDistalOutName, 'w') as outputTable: header = 'Column\tcell type\tnr. of active synapses (25ms post-stimulus)\n' outputTable.write(header) for cellType in plotTypes: for col in columns: line = col line += '\t' line += cellType line += '\t' line += str( synapseHistogramsEvokedDistal[col][cellType]['Total']) line += '\n' outputTable.write(line)
def subcellular_distribution_active_synapses(folder, contains, synapseSuffix, outName): ''' load all synapse times from all trials and compute average subcellular histograms of active synapses at 50 micron resolution ''' synNames = [] # scan_directory(folder, synNames, synapseSuffix) scan_directory2(folder, synNames, synapseSuffix, contains) print 'Loading %d synapse activation files...' % len(synNames) synapseData = {} for synTrialFile in synNames: synapseData[synTrialFile] = scp.read_complete_synapse_activation_file(synTrialFile) # all separately excTypes = ('L2', 'L34', 'L4py', 'L4sp', 'L4ss', 'L5st', 'L5tt',\ 'L6cc', 'L6ccinv', 'L6ct', 'VPM') inhTypes = ('L1','L23Trans','L45Sym','L45Peak','L56Trans',\ 'SymLocal1','SymLocal2','SymLocal3','SymLocal4','SymLocal5','SymLocal6') cellTypeColorMap = {'L2': 'dodgerblue', 'L34': 'blue', 'L4py': 'palegreen',\ 'L4sp': 'green', 'L4ss': 'lime', 'L5st': 'yellow', 'L5tt': 'orange',\ 'L6cc': 'indigo', 'L6ccinv': 'violet', 'L6ct': 'magenta', 'VPM': 'black',\ 'INH': 'grey', 'EXC': 'red'} # all separately #plotTypes = ('L2', 'L34', 'L4py', 'L4sp', 'L4ss', 'L5st', 'L5tt',\ #'L6cc', 'L6ccinv', 'L6ct', 'VPM', 'EXC', 'INH') # only EXC/INH plotTypes = ('EXC', 'INH') synFileNames = synapseData.keys() tOffset = 245.0 tStim = 253.0 # after VPM activation only offsetWindow50 = 42.0 bins = [i*50 for i in range(33)] # 0-1600 microns synapseHistograms = {} for cellType in plotTypes: synapseHistograms[cellType] = [] for n in range(len(synFileNames)): print 'Computing subcellular histogram of synapses in trial %d of %d\r' % (n+1, len(synFileNames)), synTrialFile = synFileNames[n] activeSyns = synapseData[synTrialFile] synapseDistances = {} for excType in excTypes: synapseDistances[excType] = [] synapseDistances['EXC'] = [] synapseDistances['INH'] = [] for synType in activeSyns.keys(): preCellType = synType.split('_')[0] for excType in excTypes: if excType == preCellType: for syn in activeSyns[synType]: somaDist = syn[1] synTimes = syn[5] for tSyn in synTimes: # spike trial 0-50ms all synapses mode if tStim <= tSyn < tStim + offsetWindow50: synapseDistances[excType].append(somaDist) synapseDistances['EXC'].append(somaDist) break for inhType in inhTypes: if inhType == preCellType: for syn in activeSyns[synType]: somaDist = syn[1] synTimes = syn[5] for tSyn in synTimes: # spike trial 0-50ms all synapses mode if tStim <= tSyn < tStim + offsetWindow50: synapseDistances['INH'].append(somaDist) break for cellType in plotTypes: hist, _ = np.histogram(synapseDistances[cellType], bins=bins) synapseHistograms[cellType].append(hist) print '' histAvg, histStd = {}, {} for cellType in plotTypes: histAvg[cellType] = np.mean(synapseHistograms[cellType], axis=0) histStd[cellType] = np.std(synapseHistograms[cellType], axis=0) histName = '' if not outName.endswith('.csv'): histName = outName + '_subcellular_synapse_distribution.csv' else: histName = outName[:-4] + '_subcellular_synapse_distribution.csv' with open(histName, 'w') as outFile: header = '#bin begin (microns)\tbin end' for cellType in plotTypes: header += '\t' header += cellType header += ' AVG' header += '\t' header += cellType header += ' STD' header += '\n' outFile.write(header) for i in range(len(bins)-1): line = str(bins[i]) line += '\t' line += str(bins[i+1]) for cellType in plotTypes: line += '\t' line += str(histAvg[cellType][i]) line += '\t' line += str(histStd[cellType][i]) line += '\n' outFile.write(line)