123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681 |
- %% initial analysis of event-evoked activity
- %need to save excel sheets in the specified folder
- %the excel sheets say which events to make PSTHs for and what windows to
- %use for statistical testing
- %clear all; clc;
- global Dura Baseline Tm Tbase BSIZE Tbin
- tic
- if ~exist('RAW'), load ('RAW.mat'); end
- %Main settings
- SAVE_FLAG=1;
- BSIZE=0.01; %Do not change
- Dura=[-5 12]; Tm=Dura(1):BSIZE:Dura(2);
- %Baseline=[-22 0]; Tbase=Baseline(1):BSIZE:Baseline(2); %now defined line 98
- Tbin=-0.5:0.005:0.5; %window used to determine the optimal binsize
- PStat=0.05; %for comparing pre versus post windows, or event A versus event B
- MinNumTrials=5; %how many trials of event there need to be to conduct analysis
- BinSize=0.02;
- %Smoothing
- Smoothing=1; %0 for raw and 1 for smoothing
- SmoothTYPE='lowess';
- SmoothSPAN=5;
- if Smoothing~=1, SmoothTYPE='NoSmoothing';SmoothSPAN=NaN; end
- %for bins analysis
- BinBase=[-22 -12]; %For normalizing activity
- BinDura=[0 0.6]; %size of bin
- bins = 66; %number of bins
- binint = 0.1; %spacing of bins
- binstart = -2; %start time of first bin relative to event
- %% Standard sucrose and maltodextrin sessions
- %start fresh
- R_2R=[];R_2R.Ninfo={};NN=0;Nneurons=0;
- % List of events to analyze and analysis windows EXTRACTED from excel file
- path='C:\Users\dottenh2\Documents\MATLAB\David\2Rewards Nex Files\2R_paper.xls';
- [~,Erefnames]=xlsread(path,'Windows','a3:a15'); % cell that contains the event names
- prewin = xlsread(path,'Windows','b3:c15');
- postwin = xlsread(path,'Windows','d3:e15');
- %saves event names for reference later
- R_2R.Erefnames=Erefnames;
- %Finds the total number of neurons in 2R and marks them by region/session
- for i=1:length(RAW)
- if strcmp('NA',RAW(i).Type(1:2)) | strcmp('VP',RAW(i).Type(1:2))
- R_2R.Ninfo=cat(1,R_2R.Ninfo,RAW(i).Ninfo);
- Nneurons=Nneurons+size(RAW(i).Nrast,1);
- end
- end
- for i=1:Nneurons
- Session=string(R_2R.Ninfo(i,1));
- Name=char(Session);
- R_2R.Ninfo(i,3)=cellstr(Name(1:2));
- R_2R.Ninfo(i,4)=cellstr(Name(1:3));
- end
- % preallocating
- R_2R.Param.Tm=Tm;
- R_2R.Param.Tbin=Tbin;
- R_2R.Param.Dura=Dura;
- R_2R.Param.Baseline=Baseline;
- R_2R.Param.PStat=PStat;
- R_2R.Param.MinNumTrials=MinNumTrials;
- R_2R.Param.path=path;
- R_2R.Param.prewin=prewin;
- R_2R.Param.postwin=postwin;
- R_2R.Param.SmoothTYPE=SmoothTYPE;
- R_2R.Param.SmoothSPAN=SmoothSPAN;
- R_2R.Param.BinBase=BinBase;
- R_2R.Param.BinDura=BinDura;
- R_2R.Param.bins = bins;
- R_2R.Param.binint = binint;
- R_2R.Param.binstart = binstart;
- for k=1:length(Erefnames)
- R_2R.Ev(k).PSTHraw(1:Nneurons,1:length(Tm))=NaN(Nneurons,length(Tm));
- R_2R.Ev(k).PSTHz(1:Nneurons,1:length(Tm))=NaN(Nneurons,length(Tm));
- R_2R.Ev(k).Meanraw(1:Nneurons,1)=NaN;
- R_2R.Ev(k).Meanz(1:Nneurons,1)=NaN;
- R_2R.Ev(k).BW(1:Nneurons,1)=NaN;
- R_2R.Ev(k).signrank(1:Nneurons,1)=NaN;
- R_2R.Ev(k).RespDir(1:Nneurons,1)=NaN;
- R_2R.Ev(k).NumberTrials(1:Nneurons,1)=NaN;
- end
- % runs the main routine
- for i=1:length(RAW) %loops through sessions
- if strcmp('NA',RAW(i).Type(1:2)) | strcmp('VP',RAW(i).Type(1:2))
- for j= 1:size(RAW(i).Nrast,1) %Number of neurons per session
- NN=NN+1; %neuron counter
- for k=1:length(Erefnames) %loops thorough the events
- EvInd=strcmp(Erefnames(k),RAW(i).Einfo(:,2)); %find the event id number from RAW
- if sum(EvInd)==0
- fprintf('HOWDY, CANT FIND EVENTS FOR ''%s''\n',Erefnames{k});
- end
- R_2R.Ev(k).NumberTrials(NN,1)=length(RAW(i).Erast{EvInd});
- Tbase=prewin(k,1):BSIZE:prewin(k,2);
- if ~isempty(EvInd) && R_2R.Ev(k).NumberTrials(NN,1)>MinNumTrials %avoid analyzing sessions where that do not have enough trials
- [PSR0,N0]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EvInd},prewin(k,:),{1});% makes collapsed rasters for baseline for use in normalizing
- [PSR1,N1]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EvInd},Dura,{1});% makes collpased rasters. PSR1 is a cell(neurons)
- [PSR2,N2]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EvInd},Dura,{2});% makes trial by trial rasters. PSR1 is a cell(neurons, trials)
- [PSR3,N0]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EvInd},prewin(k,:),{2});% makes trial by trial rasters for baseline for use in response detection
- if ~isempty(PSR0{1}) || ~isempty(PSR1{1}) %to avoid errors, added on 12/28 2011
- [PTH1,BW1,~]=MakePTH07(PSR1,repmat(N1, size(RAW(i).Nrast{j},1),1),{2,1});%-----DP used here
- [PTH0,~,~]=MakePTH07(PSR0,repmat(N0, size(RAW(i).Nrast{j},1),1),{1,0,BW1});%BW1 reinjected here to make sure PTH0 & PTH1 have the same BW
- %Fixed bin size
- %[PTH1,BW1,~]=MakePTH07(PSR1,repmat(N1, size(RAW(i).Nrast{j},1),1),{2,0,BinSize});%-----DP used here
- %[PTH0,~,~]=MakePTH07(PSR0,repmat(N0, size(RAW(i).Nrast{j},1),1),{1,0,BinSize});%BW1 reinjected here to make sure PTH0 & PTH1 have the same BW
- PTH1=smooth(PTH1,SmoothSPAN,SmoothTYPE)';
- PTH0=smooth(PTH0,SmoothSPAN,SmoothTYPE)';
- %------------- Fills the R_2R.Ev(k) fields --------------
- R_2R.Ev(k).BW(NN,1)=BW1;
- R_2R.Ev(k).PSTHraw(NN,1:length(Tm))=PTH1;
- R_2R.Ev(k).Meanraw(NN,1)=nanmean(R_2R.Ev(k).PSTHraw(NN,Tm>postwin(k,1) & Tm<postwin(k,2)),2);
- if sum(PTH0,2)~=0
- R_2R.Ev(k).PSTHz(NN,1:length(Tm))=normalize(PTH1,PTH0,0);
- R_2R.Ev(k).Meanz(NN,1)=nanmean(R_2R.Ev(k).PSTHz(NN,Tm>postwin(k,1) & Tm<postwin(k,2)),2);
- else
- R_2R.Ev(k).PSTHz(NN,1:length(Tm))=NaN(1,length(Tm));
- R_2R.Ev(k).Meanz(NN,1)=NaN;
- end
- %------------------ firing (in Hz) per trial in pre/post windows ------------------
- %used to make the between events comparisons and Response detection in a single window----
- ev(k).pre=NaN(size(RAW(i).Erast{EvInd},1),1);
- ev(k).post=NaN(size(RAW(i).Erast{EvInd},1),1);
- for m=1:size(RAW(i).Erast{EvInd},1) %loops through trials
- ev(k).pre(m)=sum(PSR3{m}<prewin(k,2) & PSR3{m}>prewin(k,1))/(prewin(k,2)-prewin(k,1)); %CHANGED FROM PSR2 to PSR0 here 10/24/17
- ev(k).post(m)=sum(PSR2{m}<postwin(k,2) & PSR2{m}>postwin(k,1))/(postwin(k,2)-postwin(k,1));
- end
- %-------------------- signrank on event and direction----
- [R_2R.Ev(k).signrank(NN,1),~]=signrank(ev(k).pre, ev(k).post); %Signrank used here because it is a dependant sample test
- if R_2R.Ev(k).signrank(NN,1)<PStat
- R_2R.Ev(k).RespDir(NN,1)=sign(mean(ev(k).post)-mean(ev(k).pre));
- else R_2R.Ev(k).RespDir(NN,1)=0;
- end
- end %if ~isempty(PSR0{1}) || ~isempty(PSR1{1})
- end %if EvInd=0 OR n(trials) < MinNumTrials fills with NaN
- end %Events
- %----------------------- Check for difference in cue responding after sucrose and maltodextrin trials -----------------------
- CueP1=strcmp('CueP1', Erefnames);
- CueP2=strcmp('CueP2', Erefnames);
- [R_2R.CueP12Stat(NN,1),~]=ranksum(ev(CueP1).post,ev(CueP2).post); %Ranksum test used becasue it is an independent sample test
- %----------------------- Check for difference in PE responding after sucrose and maltodextrin trials -----------------------
- PEP1=strcmp('PEP1', Erefnames);
- PEP2=strcmp('PEP2', Erefnames);
- [R_2R.PEP12Stat(NN,1),~]=ranksum(ev(PEP1).post,ev(PEP1).post); %Ranksum test used becasue it is an independent sample test
- %----------------------- Check for reward modulation across all the bins surrounding reward delivery-----------------------
- BHz=0;
- Trial=0;
- Reward=0;
- EV1=strmatch('RD1',RAW(i).Einfo(:,2),'exact');
- EV2=strmatch('RD2',RAW(i).Einfo(:,2),'exact');
- %get mean baseline firing for all reward trials
- [Bcell1,B1n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV1},BinBase,{2});% makes trial by trial rasters for baseline
- for y= 1:B1n
- BHz(1,y)=sum(Bcell1{1,y}>BinBase(1))/(BinBase(1,2)-BinBase(1,1));
- Reward(1,y)=1;
- end
- [Bcell2,B2n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV2},BinBase,{2});% makes trial by trial rasters for baseline
- for z= 1:B2n
- BHz(1,z+B1n)=sum(Bcell2{1,z}>BinBase(1))/(BinBase(1,2)-BinBase(1,1));
- Reward(1,z+B1n)=2;
- end
- for k=1:bins %go through each bin for each neuron
- EVHz=0;
- %get trial by trial firing rate for sucrose trials
- [EV1cell,EV1n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV1},[(BinDura(1)+(binstart - binint)+k*binint) (BinDura(2)+(binstart - binint)+k*binint)],{2});% makes trial by trial rasters for event
- for y= 1:EV1n
- EVHz(1,y)=sum(EV1cell{1,y}>binstart)/(BinDura(1,2)-BinDura(1,1));
- end
- %get trial by trial firing rate for maltodextrin trials
- [EV2cell,EV2n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV2},[(BinDura(1)+(binstart - binint)+k*binint) (BinDura(2)+(binstart - binint)+k*binint)],{2});% makes trial by trial rasters for event
- for z= 1:EV2n
- EVHz(1,z+EV1n)=sum(EV2cell{1,z}>binstart)/(BinDura(1,2)-BinDura(1,1));
- end
- %run ANOVA on the effects of pre vs post, cued or not,
- %kind of reward, and the interactions
- [~,Bintbl,~]=anovan([BHz EVHz],{cat(2,zeros(1,length(Reward)),ones(1,length(Reward))),[Reward Reward]},'varnames',{'Pre vs Post','Reward'},'model','full','display','off');
- R_2R.BinStatRwrd{k,1}(NN).IntSig=cell2mat(Bintbl(4,7));
- %get mean firing rates
- R_2R.BinStatRwrd{k,1}(NN).R1Mean=(nanmean(EVHz(Reward==1))-nanmean(BHz(Reward==1)))/std(BHz(Reward==1));
- R_2R.BinStatRwrd{k,1}(NN).R2Mean=(nanmean(EVHz(Reward==2))-nanmean(BHz(Reward==2)))/std(BHz(Reward==2));
- %signranks for checking if inhibitory or excitatory
- %sucrose trials
- signranksig=signrank(BHz(Reward==1), EVHz(Reward==1)); %Signrank used here because it is a dependant sample test
- if signranksig<PStat
- R_2R.BinStatRwrd{k,1}(NN).SucRespDir=sign(nanmean(EVHz(Reward==1))-mean(BHz(Reward==1)));
- else
- R_2R.BinStatRwrd{k,1}(NN).SucRespDir=0;
- end
- %maltodextrin trials
- signranksig=signrank(BHz(Reward==2), EVHz(Reward==2)); %Signrank used here because it is a dependant sample test
- if signranksig<PStat
- R_2R.BinStatRwrd{k,1}(NN).MalRespDir=sign(nanmean(EVHz(Reward==2))-mean(BHz(Reward==2)));
- else
- R_2R.BinStatRwrd{k,1}(NN).MalRespDir=0;
- end
- end %bins for bins analysis
- fprintf('2R Neuron #%d\n',NN);
- end %neurons: FOR j= 1:size(RAW(i).Nrast,1)
- end %if it's the right kind of session
- end %sessions: FOR i=1:length(RAW)
- if SAVE_FLAG
- save('R_2R.mat','R_2R')
- end
- toc
- %% water and maltodextrin sessions
- %start fresh
- R_W=[];R_W.Ninfo={};NN=0;Nneurons=0;
- % List of events to analyze and analysis windows EXTRACTED from excel file
- path='C:\Users\dottenh2\Documents\MATLAB\David\2Rewards Nex Files\2R_paper.xls';
- [~,Erefnames]=xlsread(path,'Windows','a3:a15'); % cell that contains the event names
- prewin = xlsread(path,'Windows','b3:c15');
- postwin = xlsread(path,'Windows','d3:e15');
- %saves event names for reference later
- R_W.Erefnames=Erefnames;
- %Finds the total number of neurons in 2R and marks them by region/session
- for i=1:length(RAW)
- if strcmp('WA',RAW(i).Type(1:2))
- R_W.Ninfo=cat(1,R_W.Ninfo,RAW(i).Ninfo);
- Nneurons=Nneurons+size(RAW(i).Nrast,1);
- end
- end
- for i=1:Nneurons
- Session=string(R_W.Ninfo(i,1));
- Name=char(Session);
- R_W.Ninfo(i,3)=cellstr(Name(1:2));
- R_W.Ninfo(i,4)=cellstr(Name(1:3));
- end
- % preallocating
- R_W.Param.Tm=Tm;
- R_W.Param.Tbin=Tbin;
- R_W.Param.Dura=Dura;
- R_W.Param.Baseline=Baseline;
- R_W.Param.PStat=PStat;
- R_W.Param.MinNumTrials=MinNumTrials;
- R_W.Param.path=path;
- R_W.Param.prewin=prewin;
- R_W.Param.postwin=postwin;
- R_W.Param.SmoothTYPE=SmoothTYPE;
- R_W.Param.SmoothSPAN=SmoothSPAN;
- R_W.Param.BinBase=BinBase;
- R_W.Param.BinDura=BinDura;
- R_W.Param.bins = bins;
- R_W.Param.binint = binint;
- R_W.Param.binstart = binstart;
- for k=1:length(Erefnames)
- R_W.Ev(k).PSTHraw(1:Nneurons,1:length(Tm))=NaN(Nneurons,length(Tm));
- R_W.Ev(k).PSTHz(1:Nneurons,1:length(Tm))=NaN(Nneurons,length(Tm));
- R_W.Ev(k).Meanraw(1:Nneurons,1)=NaN;
- R_W.Ev(k).Meanz(1:Nneurons,1)=NaN;
- R_W.Ev(k).BW(1:Nneurons,1)=NaN;
- R_W.Ev(k).signrank(1:Nneurons,1)=NaN;
- R_W.Ev(k).RespDir(1:Nneurons,1)=NaN;
- R_W.Ev(k).NumberTrials(1:Nneurons,1)=NaN;
- end
- % runs the main routine
- for i=1:length(RAW) %loops through sessions
- if strcmp('WA',RAW(i).Type(1:2))
- for j= 1:size(RAW(i).Nrast,1) %Number of neurons per session
- NN=NN+1; %neuron counter
- for k=1:length(Erefnames) %loops thorough the events
- EvInd=strcmp(Erefnames(k),RAW(i).Einfo(:,2)); %find the event id number from RAW
- if sum(EvInd)==0
- fprintf('HOWDY, CANT FIND EVENTS FOR ''%s''\n',Erefnames{k});
- end
- R_W.Ev(k).NumberTrials(NN,1)=length(RAW(i).Erast{EvInd});
- Tbase=prewin(k,1):BSIZE:prewin(k,2);
- if ~isempty(EvInd) && R_W.Ev(k).NumberTrials(NN,1)>MinNumTrials %avoid analyzing sessions where that do not have enough trials
- [PSR0,N0]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EvInd},prewin(k,:),{1});% makes collapsed rasters for baseline for use in normalizing
- [PSR1,N1]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EvInd},Dura,{1});% makes collpased rasters. PSR1 is a cell(neurons)
- [PSR2,N2]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EvInd},Dura,{2});% makes trial by trial rasters. PSR1 is a cell(neurons, trials)
- [PSR3,N0]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EvInd},prewin(k,:),{2});% makes trial by trial rasters for baseline for use in response detection
- if ~isempty(PSR0{1}) || ~isempty(PSR1{1}) %to avoid errors, added on 12/28 2011
- %optimal bin size
- [PTH1,BW1,~]=MakePTH07(PSR1,repmat(N1, size(RAW(i).Nrast{j},1),1),{2,1});%-----DP used here
- [PTH0,~,~]=MakePTH07(PSR0,repmat(N0, size(RAW(i).Nrast{j},1),1),{1,0,BW1});%BW1 reinjected here to make sure PTH0 & PTH1 have the same BW
- %Fixed bin size
- %[PTH1,BW1,~]=MakePTH07(PSR1,repmat(N1, size(RAW(i).Nrast{j},1),1),{2,0,BinSize});%-----DP used here
- %[PTH0,~,~]=MakePTH07(PSR0,repmat(N0, size(RAW(i).Nrast{j},1),1),{1,0,BinSize});%BW1 reinjected here to make sure PTH0 & PTH1 have the same BW
- PTH1=smooth(PTH1,SmoothSPAN,SmoothTYPE)';
- PTH0=smooth(PTH0,SmoothSPAN,SmoothTYPE)';
- %------------- Fills the R_W.Ev(k) fields --------------
- R_W.Ev(k).BW(NN,1)=BW1;
- R_W.Ev(k).PSTHraw(NN,1:length(Tm))=PTH1;
- R_W.Ev(k).Meanraw(NN,1)=nanmean(R_W.Ev(k).PSTHraw(NN,Tm>postwin(k,1) & Tm<postwin(k,2)),2);
- if sum(PTH0,2)~=0
- R_W.Ev(k).PSTHz(NN,1:length(Tm))=normalize(PTH1,PTH0,0);
- R_W.Ev(k).Meanz(NN,1)=nanmean(R_W.Ev(k).PSTHz(NN,Tm>postwin(k,1) & Tm<postwin(k,2)),2);
- else
- R_W.Ev(k).PSTHz(NN,1:length(Tm))=NaN(1,length(Tm));
- R_W.Ev(k).Meanz(NN,1)=NaN;
- end
- %------------------ firing (in Hz) per trial in pre/post windows ------------------
- %used to make the between events comparisons and Response detection in a single window----
- ev(k).pre=NaN(size(RAW(i).Erast{EvInd},1),1);
- ev(k).post=NaN(size(RAW(i).Erast{EvInd},1),1);
- for m=1:size(RAW(i).Erast{EvInd},1) %loops through trials
- ev(k).pre(m)=sum(PSR3{m}<prewin(k,2) & PSR3{m}>prewin(k,1))/(prewin(k,2)-prewin(k,1)); %CHANGED FROM PSR2 to PSR0 here 10/24/17
- ev(k).post(m)=sum(PSR2{m}<postwin(k,2) & PSR2{m}>postwin(k,1))/(postwin(k,2)-postwin(k,1));
- end
- %-------------------- signrank on event and direction----
- [R_W.Ev(k).signrank(NN,1),~]=signrank(ev(k).pre, ev(k).post); %Signrank used here because it is a dependant sample test
- if R_W.Ev(k).signrank(NN,1)<PStat
- R_W.Ev(k).RespDir(NN,1)=sign(mean(ev(k).post)-mean(ev(k).pre));
- else R_W.Ev(k).RespDir(NN,1)=0;
- end
- end %if ~isempty(PSR0{1}) || ~isempty(PSR1{1})
- end %if EvInd=0 OR n(trials) < MinNumTrials fills with NaN
- end %Events
- %----------------------- Check for reward modulation across all the bins surrounding reward delivery-----------------------
- BHz=0;
- Trial=0;
- Reward=0;
- EV1=strmatch('RD1',RAW(i).Einfo(:,2),'exact');
- EV2=strmatch('RD2',RAW(i).Einfo(:,2),'exact');
- %get mean baseline firing for all reward trials
- [Bcell1,B1n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV1},BinBase,{2});% makes trial by trial rasters for baseline
- for y= 1:B1n
- BHz(1,y)=sum(Bcell1{1,y}>BinBase(1))/(BinBase(1,2)-BinBase(1,1));
- Reward(1,y)=1;
- end
- [Bcell2,B2n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV2},BinBase,{2});% makes trial by trial rasters for baseline
- for z= 1:B2n
- BHz(1,z+B1n)=sum(Bcell2{1,z}>BinBase(1))/(BinBase(1,2)-BinBase(1,1));
- Reward(1,z+B1n)=2;
- end
- for k=1:bins %go through each bin for each neuron
- EVHz=0;
- %get trial by trial firing rate for water trials
- [EV1cell,EV1n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV1},[(BinDura(1)+(binstart - binint)+k*binint) (BinDura(2)+(binstart - binint)+k*binint)],{2});% makes trial by trial rasters for event
- for y= 1:EV1n
- EVHz(1,y)=sum(EV1cell{1,y}>binstart)/(BinDura(1,2)-BinDura(1,1));
- end
- %get trial by trial firing rate for maltodextrin trials
- [EV2cell,EV2n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV2},[(BinDura(1)+(binstart - binint)+k*binint) (BinDura(2)+(binstart - binint)+k*binint)],{2});% makes trial by trial rasters for event
- for z= 1:EV2n
- EVHz(1,z+EV1n)=sum(EV2cell{1,z}>binstart)/(BinDura(1,2)-BinDura(1,1));
- end
- %run ANOVA on the effects of pre vs post, cued or not,
- %kind of reward, and the interactions
- [~,Bintbl,~]=anovan([BHz EVHz],{cat(2,zeros(1,length(Reward)),ones(1,length(Reward))),[Reward Reward]},'varnames',{'Pre vs Post','Reward'},'model','full','display','off');
- R_W.BinStatRwrd{k,1}(NN).IntSig=cell2mat(Bintbl(4,7));
- %get mean firing rates
- R_W.BinStatRwrd{k,1}(NN).R1Mean=(nanmean(EVHz(Reward==1))-nanmean(BHz(Reward==1)))/std(BHz(Reward==1));
- R_W.BinStatRwrd{k,1}(NN).R2Mean=(nanmean(EVHz(Reward==2))-nanmean(BHz(Reward==2)))/std(BHz(Reward==2));
- %signranks for checking if inhibitory or excitatory
- %water trials
- signranksig=signrank(BHz(Reward==1), EVHz(Reward==1)); %Signrank used here because it is a dependant sample test
- if signranksig<PStat
- R_W.BinStatRwrd{k,1}(NN).WatRespDir=sign(nanmean(EVHz(Reward==1))-mean(BHz(Reward==1)));
- else
- R_W.BinStatRwrd{k,1}(NN).WatRespDir=0;
- end
- %maltodextrin trials
- signranksig=signrank(BHz(Reward==2), EVHz(Reward==2)); %Signrank used here because it is a dependant sample test
- if signranksig<PStat
- R_W.BinStatRwrd{k,1}(NN).MalRespDir=sign(nanmean(EVHz(Reward==2))-mean(BHz(Reward==2)));
- else
- R_W.BinStatRwrd{k,1}(NN).MalRespDir=0;
- end
- end %bins for bins analysis
- fprintf('Water neuron #%d\n',NN);
- end %neurons: FOR j= 1:size(RAW(i).Nrast,1)
- end %if right kind of session
- end %sessions: FOR i=1:length(RAW)
- if SAVE_FLAG
- save('R_W.mat','R_W')
- end
- toc
- %% All three rewards sessions
- %make this lower because there are only 3 of some current/previous reward combinations
- MinNumTrials=3; %how many trials of event there need to be to conduct analysis
- %start fresh
- R_3R=[];R_3R.Ninfo={};NN=0;Nneurons=0;
- % List of events to analyze and analysis windows EXTRACTED from excel file
- path='C:\Users\dottenh2\Documents\MATLAB\David\2Rewards Nex Files\3R_paper.xls';
- [~,Erefnames]=xlsread(path,'Windows','a3:a23'); % cell that contains the event names
- prewin = xlsread(path,'Windows','b3:c23');
- postwin = xlsread(path,'Windows','d3:e23');
- %saves event names for reference later
- R_3R.Erefnames=Erefnames;
- %Finds the total number of neurons in 2R and marks them by region/session
- for i=1:length(RAW)
- if strcmp('TH',RAW(i).Type(1:2))
- R_3R.Ninfo=cat(1,R_3R.Ninfo,RAW(i).Ninfo);
- Nneurons=Nneurons+size(RAW(i).Nrast,1);
- end
- end
- for i=1:Nneurons
- Session=string(R_3R.Ninfo(i,1));
- Name=char(Session);
- R_3R.Ninfo(i,3)=cellstr(Name(1:2));
- R_3R.Ninfo(i,4)=cellstr(Name(1:3));
- end
- % preallocating
- R_3R.Param.Tm=Tm;
- R_3R.Param.Tbin=Tbin;
- R_3R.Param.Dura=Dura;
- R_3R.Param.Baseline=Baseline;
- R_3R.Param.PStat=PStat;
- R_3R.Param.MinNumTrials=MinNumTrials;
- R_3R.Param.path=path;
- R_3R.Param.prewin=prewin;
- R_3R.Param.postwin=postwin;
- R_3R.Param.SmoothTYPE=SmoothTYPE;
- R_3R.Param.SmoothSPAN=SmoothSPAN;
- R_3R.Param.BinBase=BinBase;
- R_3R.Param.BinDura=BinDura;
- R_3R.Param.bins = bins;
- R_3R.Param.binint = binint;
- R_3R.Param.binstart = binstart;
- for k=1:length(Erefnames)
- R_3R.Ev(k).PSTHraw(1:Nneurons,1:length(Tm))=NaN(Nneurons,length(Tm));
- R_3R.Ev(k).PSTHz(1:Nneurons,1:length(Tm))=NaN(Nneurons,length(Tm));
- R_3R.Ev(k).Meanraw(1:Nneurons,1)=NaN;
- R_3R.Ev(k).Meanz(1:Nneurons,1)=NaN;
- R_3R.Ev(k).BW(1:Nneurons,1)=NaN;
- R_3R.Ev(k).signrank(1:Nneurons,1)=NaN;
- R_3R.Ev(k).RespDir(1:Nneurons,1)=NaN;
- R_3R.Ev(k).NumberTrials(1:Nneurons,1)=NaN;
- end
- % runs the main routine
- for i=1:length(RAW) %loops through sessions
- if strcmp('TH',RAW(i).Type(1:2))
- for j= 1:size(RAW(i).Nrast,1) %Number of neurons per session
- NN=NN+1; %neuron counter
- for k=1:length(Erefnames) %loops thorough the events
- EvInd=strcmp(Erefnames(k),RAW(i).Einfo(:,2)); %find the event id number from RAW
- if sum(EvInd)==0
- fprintf('HOWDY, CANT FIND EVENTS FOR ''%s''\n',Erefnames{k});
- end
- R_3R.Ev(k).NumberTrials(NN,1)=length(RAW(i).Erast{EvInd});
- Tbase=prewin(k,1):BSIZE:prewin(k,2);
- if ~isempty(EvInd) && R_3R.Ev(k).NumberTrials(NN,1)>MinNumTrials %avoid analyzing sessions where that do not have enough trials
- [PSR0,N0]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EvInd},prewin(k,:),{1});% makes collapsed rasters for baseline for use in normalizing
- [PSR1,N1]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EvInd},Dura,{1});% makes collpased rasters. PSR1 is a cell(neurons)
- [PSR2,N2]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EvInd},Dura,{2});% makes trial by trial rasters. PSR1 is a cell(neurons, trials)
- [PSR3,N0]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EvInd},prewin(k,:),{2});% makes trial by trial rasters for baseline for use in response detection
- if ~isempty(PSR0{1}) || ~isempty(PSR1{1}) %to avoid errors, added on 12/28 2011
- %optimal bin size
- [PTH1,BW1,~]=MakePTH07(PSR1,repmat(N1, size(RAW(i).Nrast{j},1),1),{2,1});%-----DP used here
- [PTH0,~,~]=MakePTH07(PSR0,repmat(N0, size(RAW(i).Nrast{j},1),1),{1,0,BW1});%BW1 reinjected here to make sure PTH0 & PTH1 have the same BW
- %Fixed bin size
- %[PTH1,BW1,~]=MakePTH07(PSR1,repmat(N1, size(RAW(i).Nrast{j},1),1),{2,0,BinSize});%-----DP used here
- %[PTH0,~,~]=MakePTH07(PSR0,repmat(N0, size(RAW(i).Nrast{j},1),1),{1,0,BinSize});%BW1 reinjected here to make sure PTH0 & PTH1 have the same BW
- PTH1=smooth(PTH1,SmoothSPAN,SmoothTYPE)';
- PTH0=smooth(PTH0,SmoothSPAN,SmoothTYPE)';
- %------------- Fills the R_3R.Ev(k) fields --------------
- R_3R.Ev(k).BW(NN,1)=BW1;
- R_3R.Ev(k).PSTHraw(NN,1:length(Tm))=PTH1;
- R_3R.Ev(k).Meanraw(NN,1)=nanmean(R_3R.Ev(k).PSTHraw(NN,Tm>postwin(k,1) & Tm<postwin(k,2)),2);
- if sum(PTH0,2)~=0
- R_3R.Ev(k).PSTHz(NN,1:length(Tm))=normalize(PTH1,PTH0,0);
- R_3R.Ev(k).Meanz(NN,1)=nanmean(R_3R.Ev(k).PSTHz(NN,Tm>postwin(k,1) & Tm<postwin(k,2)),2);
- else
- R_3R.Ev(k).PSTHz(NN,1:length(Tm))=NaN(1,length(Tm));
- R_3R.Ev(k).Meanz(NN,1)=NaN;
- end
- %------------------ firing (in Hz) per trial in pre/post windows ------------------
- %used to make the between events comparisons and Response detection in a single window----
- ev(k).pre=NaN(size(RAW(i).Erast{EvInd},1),1);
- ev(k).post=NaN(size(RAW(i).Erast{EvInd},1),1);
- for m=1:size(RAW(i).Erast{EvInd},1) %loops through trials
- ev(k).pre(m)=sum(PSR3{m}<prewin(k,2) & PSR3{m}>prewin(k,1))/(prewin(k,2)-prewin(k,1)); %CHANGED FROM PSR2 to PSR0 here 10/24/17
- ev(k).post(m)=sum(PSR2{m}<postwin(k,2) & PSR2{m}>postwin(k,1))/(postwin(k,2)-postwin(k,1));
- end
- %-------------------- signrank on event and direction----
- [R_3R.Ev(k).signrank(NN,1),~]=signrank(ev(k).pre, ev(k).post); %Signrank used here because it is a dependant sample test
- if R_3R.Ev(k).signrank(NN,1)<PStat
- R_3R.Ev(k).RespDir(NN,1)=sign(mean(ev(k).post)-mean(ev(k).pre));
- else R_3R.Ev(k).RespDir(NN,1)=0;
- end
- end %if ~isempty(PSR0{1}) || ~isempty(PSR1{1})
- end %if EvInd=0 OR n(trials) < MinNumTrials fills with NaN
- end %Events
- %----------------------- Check for reward modulation across all the bins surrounding reward delivery-----------------------
- EV1=strmatch('RD1',RAW(i).Einfo(:,2),'exact');
- EV2=strmatch('RD2',RAW(i).Einfo(:,2),'exact');
- EV3=strmatch('RD3',RAW(i).Einfo(:,2),'exact');
- Bcell1=0;
- Bcell2=0;
- Bcell3=0;
- BHz=0;
- Trial=0;
- Reward=0;
- %get mean baseline firing for all reward trials
- [Bcell1,B1n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV1},BinBase,{2});% makes trial by trial rasters for baseline
- for y= 1:B1n
- BHz(1,y)=sum(Bcell1{1,y}>BinBase(1))/(BinBase(1,2)-BinBase(1,1));
- Trial(1,y)=y;
- Reward(1,y)=1;
- end
- [Bcell2,B2n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV2},BinBase,{2});% makes trial by trial rasters for baseline
- for z= 1:B2n
- BHz(1,z+B1n)=sum(Bcell2{1,z}>BinBase(1))/(BinBase(1,2)-BinBase(1,1));
- Trial(1,z+B1n)=z+B1n;
- Reward(1,z+B1n)=2;
- end
- [Bcell3,B3n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV3},BinBase,{2});% makes trial by trial rasters for baseline
- for x= 1:B3n
- BHz(1,x+B2n+B1n)=sum(Bcell3{1,x}>BinBase(1))/(BinBase(1,2)-BinBase(1,1));
- Trial(1,x+B2n+B1n)=x+B2n+B1n;
- Reward(1,x+B2n+B1n)=3;
- end
- for k=1:bins %go through each bin for each neuron
- EVHz=0;
- EV1cell=0;
- EV2cell=0;
- EV3Cell=0;
- %get trial by trial firing rate for water trials
- [EV1cell,EV1n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV1},[(BinDura(1)+(binstart - binint)+k*binint) (BinDura(2)+(binstart - binint)+k*binint)],{2});% makes trial by trial rasters for event
- for y= 1:EV1n
- EVHz(1,y)=sum(EV1cell{1,y}>binstart)/(BinDura(1,2)-BinDura(1,1));
- end
- %get trial by trial firing rate for maltodextrin trials
- [EV2cell,EV2n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV2},[(BinDura(1)+(binstart - binint)+k*binint) (BinDura(2)+(binstart - binint)+k*binint)],{2});% makes trial by trial rasters for event
- for z= 1:EV2n
- EVHz(1,z+EV1n)=sum(EV2cell{1,z}>binstart)/(BinDura(1,2)-BinDura(1,1));
- end
- %get trial by trial firing rate for water trials
- [EV3cell,EV3n]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{EV3},[(BinDura(1)+(binstart - binint)+k*binint) (BinDura(2)+(binstart - binint)+k*binint)],{2});% makes trial by trial rasters for event
- for x= 1:EV3n
- EVHz(1,x+EV1n+EV2n)=sum(EV3cell{1,x}>binstart)/(BinDura(1,2)-BinDura(1,1));
- end
- [~,Bintbl,~]=anovan([BHz EVHz],{[Reward Reward],cat(2,zeros(1,length(Trial)),ones(1,length(Trial)))},'varnames',{'Reward','Pre vs Post'},'model','full','display','off');
- R_3R.BinStatRwrd{k,1}(NN).IntSig=cell2mat(Bintbl(4,7));
-
- %get mean firing rates
- R_3R.BinStatRwrd{k,1}(NN).R1Mean=(nanmean(EVHz(Reward==1))-nanmean(BHz(Reward==1)))/std(BHz(Reward==1));
- R_3R.BinStatRwrd{k,1}(NN).R2Mean=(nanmean(EVHz(Reward==2))-nanmean(BHz(Reward==2)))/std(BHz(Reward==2));
- R_3R.BinStatRwrd{k,1}(NN).R3Mean=(nanmean(EVHz(Reward==3))-nanmean(BHz(Reward==3)))/std(BHz(Reward==3));
- %signranks for checking if inhibitory or excitatory
- %sucrose trials
- signranksig=signrank(BHz(Reward==1), EVHz(Reward==1)); %Signrank used here because it is a dependant sample test
- if signranksig<PStat
- R_3R.BinStatRwrd{k,1}(NN).SucRespDir=sign(nanmean(EVHz(Reward==1))-mean(BHz(Reward==1)));
- else
- R_3R.BinStatRwrd{k,1}(NN).SucRespDir=0;
- end
- %maltodextrin trials
- signranksig=signrank(BHz(Reward==2), EVHz(Reward==2)); %Signrank used here because it is a dependant sample test
- if signranksig<PStat
- R_3R.BinStatRwrd{k,1}(NN).MalRespDir=sign(nanmean(EVHz(Reward==2))-mean(BHz(Reward==2)));
- else
- R_3R.BinStatRwrd{k,1}(NN).MalRespDir=0;
- end
- %water trials
- signranksig=signrank(BHz(Reward==3), EVHz(Reward==3)); %Signrank used here because it is a dependant sample test
- if signranksig<PStat
- R_3R.BinStatRwrd{k,1}(NN).WatRespDir=sign(nanmean(EVHz(Reward==3))-mean(BHz(Reward==3)));
- else
- R_3R.BinStatRwrd{k,1}(NN).WatRespDir=0;
- end
- end %bins for bins analysis
-
- fprintf('3R neuron #%d\n',NN);
- end %neurons: FOR j= 1:size(RAW(i).Nrast,1)
- end %if right kind of session
- end %sessions: FOR i=1:length(RAW)
- if SAVE_FLAG
- save('R_3R.mat','R_3R')
- end
- toc
|