%% Control Script clear, close all n=2; %Number of cells used. numberTrials=4; %number of trials to average over tfinal=10000; %length of each trial in ms stimulation=1; %set to 0 if there is no sinusoidal component frequency=4; %frequency of sinusoidal component in Hz T=1000/frequency; %period in ms noPeriodsSampled=tfinal/T; %number of periods over which PSTHs are averaged dt=0.05; %sampling period in ms t=0:dt:tfinal; %time vector; CCGbinsize=0.5; %ms CCGmaxlags=ceil(T/2); %absolute value of max and min lag when producing CCGs Rmaxlags=ceil(T/2); %absolute value of max and min lag when calculating R coefficients noPSTHbins=12; PSTHbinsize=T/noPSTHbins; %ms c=0.25; e=1; trainingSession=0; %set to 0 to avoid retraining weights. trainingTime=1000000; %length of weight training. if trainingSession fixedNoiseTrain=normrnd(0,1,1, trainingTime/dt+1); %shared noise between SP cells randomNoiseTrain=normrnd(0,1,1,trainingTime/dt+1); %noise that is unique for each SP cell %NOTE: since we are only training one SP cell, the distinction between shared and unique noise is irrelevant. %However, the above variables need to be set anyway. trialIndex=0; %To distinguish this trial as a training trial, it has a trialIndex of zero. [~, ~, weightMatrix]=model(1, 1, frequency,stimulation, dt, trainingTime, randomNoiseTrain,fixedNoiseTrain, c, e, trainingSession, trialIndex); cd('/Users/bensimmonds/Documents/MATLAB/Noise Correlation Reduction Model/Weights'); save(['globalWeightMatrixe' num2str(e) num2str(frequency) 'Hz.mat'], 'weightMatrix'); end %End of training session (if applicable) %Now, beginning of data-collecting trials: trainingSession=0; %Preallocate matrix space for PSTH matrices. localBinnedPSTH=zeros(noPeriodsSampled,noPSTHbins+1,n, numberTrials); globalBinnedPSTH=zeros(noPeriodsSampled,noPSTHbins+1,n, numberTrials); localBinnedAverageSamples=zeros(noPSTHbins+1, numberTrials); globalBinnedAverageSamples=zeros(noPSTHbins+1, numberTrials); %Raster matrices globalRaster=cell(1); localRaster=cell(1); localChirpRaster=cell(1); globalChirpRaster=cell(1); %Preallocate matrices for CCGs. localCCGBinned=zeros(numberTrials, floor(tfinal/CCGbinsize)+1, n); globalCCGBinned=zeros(numberTrials, floor(tfinal/CCGbinsize)+1, n); %Perform following set of functions for each trial: for trialIndex=1:numberTrials; %Create noise train shared by both SP cells: fixedNoiseTrain=normrnd(0,1,1, length(t)); for cellNumber=1:n; %Create noise train unique to cell n: randomNoiseTrain=normrnd(0,1,1,length(t)); %Obtain spike trains by running model: [localV, localSpikeTrain]=model(cellNumber, 0,frequency, stimulation, dt, tfinal, randomNoiseTrain,fixedNoiseTrain, c, e, trainingSession, trialIndex); [globalV, globalSpikeTrain]=model(cellNumber, 1,frequency, stimulation, dt, tfinal, randomNoiseTrain,fixedNoiseTrain, c, e, trainingSession, trialIndex); %Bin local and global spike trains for each period of spike train to be sampled (for use with PSTHs). for sampleNumber=1:noPeriodsSampled; highPeriodLimit=tfinal-(sampleNumber-1)*T; lowPeriodLimit=tfinal-T-(sampleNumber-1)*T; localLastPeriodIndices=sort(find(localSpikeTrain >lowPeriodLimit & localSpikeTrain <= highPeriodLimit)) ; localSpikeTrainPeriod=localSpikeTrain(localLastPeriodIndices) ; localBinnedPSTH(sampleNumber,:,cellNumber, trialIndex)=hist(localSpikeTrainPeriod, lowPeriodLimit:T/noPSTHbins:highPeriodLimit); globalLastPeriodIndices=sort(find(globalSpikeTrain>lowPeriodLimit & globalSpikeTrain<=highPeriodLimit)); globalSpikeTrainPeriod=globalSpikeTrain(globalLastPeriodIndices); globalBinnedPSTH(sampleNumber,:,cellNumber, trialIndex)=hist(globalSpikeTrainPeriod,lowPeriodLimit:T/noPSTHbins:highPeriodLimit); end % Calculate average spike train over the sample periods for cell cellNumber (for use with PSTHs). localBinnedAverageSamples(:, cellNumber,trialIndex)=sum(localBinnedPSTH(:,:,cellNumber, trialIndex),1)/noPeriodsSampled; globalBinnedAverageSamples(:, cellNumber, trialIndex)=sum(globalBinnedPSTH(:,:,cellNumber, trialIndex),1)/noPeriodsSampled; %CCG Binning for this trial: localCCGBinned(trialIndex,:,cellNumber)=hist(localSpikeTrain, 0:CCGbinsize:tfinal); globalCCGBinned(trialIndex,:,cellNumber)=hist(globalSpikeTrain, 0:CCGbinsize: tfinal); end end %Now, generation of CCGs, PSTHs and R coefficients. %LOCAL %Calculate local CCGs for display: localCCGRaw=CCGraw(localCCGBinned, CCGbinsize, CCGmaxlags); localCCGSignal=CCGsignal(localCCGBinned, CCGbinsize, CCGmaxlags); localCCGNoise=localCCGRaw-localCCGSignal; %Plot local raw versus local noise CCGs: figure; plot(-CCGmaxlags/2:0.5:CCGmaxlags/2, localCCGRaw, -CCGmaxlags/2:0.5:CCGmaxlags/2,localCCGNoise); title(['Local noise CCG versus local raw CCG with frequency ' int2str(frequency) 'Hz (Number of trials=' int2str(numberTrials) ')']); axis([-60 60 -20 60]); xlabel('Lag(ms)'); ylabel('Coincidences per second'); legend('Raw', 'Noise'); %Calculate local R coefficients: %First need to calculate local CCGs specifically for R calculation (because may involve %different input parameters than CCGs created for display - e.g. maxlags) [localCCGRawR]=CCGraw(localCCGBinned, CCGbinsize, Rmaxlags); [localCCGSignalR]=CCGsignal(localCCGBinned, CCGbinsize, Rmaxlags); localCCGNoiseR=localCCGRawR-localCCGSignalR; localACG1BinnedR=repmat(localCCGBinned(:,:,1),[1,1,2]); localACG2BinnedR=repmat(localCCGBinned(:,:,2),[1,1,2]); [localACG1RawR]=CCGraw(localACG1BinnedR, CCGbinsize, Rmaxlags); [localACG2RawR]=CCGraw(localACG2BinnedR, CCGbinsize, Rmaxlags); [localACG1SignalR]=CCGsignal(localACG1BinnedR, CCGbinsize, Rmaxlags); [localACG2SignalR]=CCGsignal(localACG2BinnedR, CCGbinsize, Rmaxlags); localACG1NoiseR=localACG1RawR-localACG1SignalR; localACG2NoiseR=localACG2RawR-localACG2SignalR; localRRaw=crossCorrelationCoefficient(localCCGRawR, localACG1RawR, localACG2RawR) localRSignal=crossCorrelationCoefficient(localCCGSignalR, localACG1SignalR, localACG2SignalR) localRNoise=crossCorrelationCoefficient(localCCGNoiseR, localACG1NoiseR, localACG2NoiseR) %Plot local PSTH (are plotting PSTH only for cell 1): figure; plot(0:PSTHbinsize:T, mean(localBinnedAverageSamples(:,1,:),3)/(PSTHbinsize/1000), '*') ; title('Local Input PSTH for Sample Cell'); xlabel('Time (ms)'); ylabel('Firing rate (Hz)'); axis([0 T 0 100]) ; % Plot sample local voltage trace from last trial (ie. from trial=trialNumber) figure; plot(t, localV); xlabel('Time(ms)'); ylabel('Voltage(mV)'); axis([0 4*T -80 -63]); title(['Voltage trace for superficial cell under local input from a sample trial (trial number ' int2str(numberTrials) ')']); %GLOBAL %Calculate global CCGs for display: [globalCCGRaw]=CCGraw(globalCCGBinned, CCGbinsize, CCGmaxlags); [globalCCGSignal]=CCGsignal(globalCCGBinned, CCGbinsize, CCGmaxlags); globalCCGNoise=globalCCGRaw-globalCCGSignal; %Plot global raw versus global noise CCGs: figure; plot(-CCGmaxlags/2:0.5:CCGmaxlags/2, globalCCGRaw, -CCGmaxlags/2:0.5:CCGmaxlags/2,globalCCGNoise); title(['Global noise CCG versus global raw CCG with frequency ' int2str(frequency) 'Hz (Number of trials=' int2str(numberTrials) ')' ]); xlabel('lag(ms)'); axis([-60 60 -10 30]); ylabel('Coincidences per second'); legend('Raw', 'noise'); % Global R calculations: %First need to calculate global CCGs specifically for R calculation (because may involve %different input parameters than CCGs created for display-e.g. maxlags) globalCCGRawR=CCGraw(globalCCGBinned, CCGbinsize, Rmaxlags); globalCCGSignalR=CCGsignal(globalCCGBinned, CCGbinsize, Rmaxlags); globalCCGNoiseR=globalCCGRawR-globalCCGSignalR; globalACG1BinnedR=repmat(globalCCGBinned(:,:,1),[1,1,2]); globalACG2BinnedR=repmat(globalCCGBinned(:,:,2),[1,1,2]); globalACG1RawR=CCGraw(globalACG1BinnedR,CCGbinsize, Rmaxlags); globalACG2RawR=CCGraw(globalACG2BinnedR, CCGbinsize, Rmaxlags); globalACG1SignalR=CCGsignal(globalACG1BinnedR, CCGbinsize, Rmaxlags); globalACG2SignalR=CCGsignal(globalACG2BinnedR, CCGbinsize, Rmaxlags); globalACG1NoiseR=globalACG1RawR-globalACG1SignalR; globalACG2NoiseR=globalACG2RawR-globalACG2SignalR; globalRRaw=crossCorrelationCoefficient(globalCCGRawR, globalACG1RawR, globalACG2RawR) globalRSignal=crossCorrelationCoefficient(globalCCGSignalR, globalACG1SignalR, globalACG2SignalR) globalRNoise=crossCorrelationCoefficient(globalCCGNoiseR, globalACG1NoiseR, globalACG2NoiseR) %Plot global PSTH (are plotting PSTH only for cell 1): figure; plot(0:PSTHbinsize:T, mean(globalBinnedAverageSamples(:,1,:),3)/(PSTHbinsize/1000), '*') ; title('Global Input PSTH for Sample Cell'); xlabel('time (ms)'); ylabel('Firing rate (Hz)'); axis([0 T 0 100]) ; %Plot sample global voltage trace from last trial (ie. from trial=trialNumber) figure; plot(t, globalV); xlabel('time(ms)'); ylabel('voltage(mV)'); axis([0 4*T -80 -63]); title(['Voltage trace for superficial cell under global input from a sample trial (trial number ' int2str(numberTrials) ')']);