123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- %%
- % This script loads all the deconvolved data and plots them as ERPs
- cd '/net/store/nbp/users/agert/itw'
- init_itw
- projectFolder=['/net/store/nbp/projects/IntoTheWild'];
- codingscheme = 'mashup';
- phase='WLFO';
- filtType='causal';
- timewin=[-0.5 1.0];
- % LOADING
- % needed for chanlocs
- if strcmp(phase,'Lab')
- Data=load(['/net/store/nbp/projects/IntoTheWild/Daten/EEG/' phase '/collectedERPs_-5001000_causal_noCar.mat']);
- elseif strcmp(phase,'WLFO')
- Data=load(['/net/store/nbp/projects/IntoTheWild/Daten/EEG/' phase '/collectedERPs_-5001000_causal.mat']);
-
- end
- fns=fieldnames(Data);
- collData = Data.(fns{1});
- paramNames=[];
- %
- d2nd = [];
- for subj = [8 9 29:36 38:41 44 45 48 51:53];
- fPath = fullfile(projectFolder,['Daten/EEG/' phase '/unfold_' phase '/' filtType '/']);
-
- fPath = fullfile(fPath,['ufresult_subj' num2str(subj) ,'_allElec_' codingscheme '_-500-1000_regularized0.mat']);
- try
- % load subject results
- if ~exist(fPath,'file')
- continue
- end
- fprintf('\n \n loading subject %i \n',subj)
-
- d = load(fPath);
-
- ufresult = d.ufresult;
-
- tmpBeta=[];
- tmpBeta_nodc=[];
- if strcmp(phase,'Lab') && subj==51 % sub 51 does not have predictore sacAmp -> adjust structure accordingly
- tmpBeta(:,:,1:9)=ufresult.beta(:,:,1:9);
- tmpBeta(:,:,10:13)=nan(length(d2nd.chanlocs),length(ufresult.times),4);
- tmpBeta(:,:,14:20)=ufresult.beta(:,:,10:16);
- tmpBeta_nodc(:,:,1:9)=ufresult.beta_nodc(:,:,1:9);
- tmpBeta_nodc(:,:,10:13)=nan(length(d2nd.chanlocs),length(ufresult.times),4);
- tmpBeta_nodc(:,:,14:20)=ufresult.beta_nodc(:,:,10:16);
-
- ufresult.beta=tmpBeta;
- ufresult.beta_nodc=tmpBeta_nodc;
- if ~isempty(d2nd)
- ufresult.param=d2nd.param;
- end
- end
-
- % first subject: initialize d2nd (2nd-level analysis)
- if isempty(d2nd)
- d2nd = ufresult;
- d2nd.unfold(1) = d2nd.unfold;
- d2nd.subject = subj;
- else
- d2nd.unfold(end+1) = ufresult.unfold;
- d2nd.beta(:,:,:,end+1) = ufresult.beta;
- d2nd.beta_nodc(:,:,:,end+1) = ufresult.beta_nodc;
- d2nd.subject(end+1) = subj;
- end
-
-
- catch e
- display(['problem with subject ',num2str(subj), ': ' ,e.message])
- end
-
- end
- %% Calculate ERPs
- elecfind = @(x)find(strcmp(x,{d2nd.chanlocs.labels}));
- chan = 1:length(d2nd.chanlocs);%[elecfind('PO8')];
- if strcmp(codingscheme,'effects')
- [x2n,x2h,n2x,h2x,x2n_nodc,x2h_nodc,n2x_nodc,h2x_nodc,SB]=ITW_unfold_calcERPs(d2nd,codingscheme,chan,phase);
- else
- [n2n,n2h,h2n,h2h,n2n_nodc,n2h_nodc,h2n_nodc,h2h_nodc,SB]=ITW_unfold_calcERPs(d2nd,codingscheme,chan,phase);
- end
- %% Save in ERP structure
- ufERP.times=d2nd.times;
- ufERP.chanlocs=d2nd.chanlocs;
- ufERP.subject=d2nd.subject;
- ufERP.data=[];
- ufERP.data(:,:,:,1)=n2n;
- ufERP.data(:,:,:,2)=n2h;
- ufERP.data(:,:,:,3)=h2n;
- ufERP.data(:,:,:,4)=h2h;
- ufERP.cond={'n2n','n2h','h2n','h2h'};
- save(['/net/store/nbp/projects/IntoTheWild/Daten/EEG/' phase '/unfold_' phase '/' filtType '/unfoldERPs_-5001000.mat'],'ufERP')
- %% PLOT ERPs
- % load(['/net/store/nbp/projects/IntoTheWild/Daten/EEG/WLFO/unfold_WLFO/' filtType '/unfoldERPs_-5001000.mat'],'ufERP')
- elecfind = @(x)find(strcmp(x,{d2nd.chanlocs.labels}));
- chan =[elecfind('PO8'),elecfind('P8'),elecfind('PO7'),elecfind('P7')];
- % plot 2x2 results of deconvolution
- figure('units','normalized','outerposition',[0 0 1 1])
- hold on, plot(d2nd.times,squeeze(mean(mean(n2n(:,chan,:)),2)),'b--','LineWidth',2);
- hold on, plot(d2nd.times,squeeze(mean(mean(n2h(:,chan,:)),2)),'r--','LineWidth',2);
- hold on, plot(d2nd.times,squeeze(mean(mean(h2n(:,chan,:)),2)),'b','LineWidth',2);
- hold on, plot(d2nd.times,squeeze(mean(mean(h2h(:,chan,:)),2)),'r','LineWidth',2);
-
- legend({'BG -> BG','BG -> HF','HF -> BG','HF -> HF'},'FontSize',20)
- xlim([-0.5 1])
- xt = get(gca, 'XTick');
- set(gca, 'FontSize', 18)
- ylim([-6 6]);
- vline(0,'k')
- hline(0,'k');
- box off
- title([phase ' Deconvolution'],'FontSize',20)
- xlabel('Time [sec]', 'FontSize',20)
- ylabel('Amplitude [microV]', 'FontSize',20);
-
- % export_fig(['/home/student/a/agert/Desktop/Into the Wild/LabvsWLFO/autoplot/2x2_ERP_Deconv_Unfold_' filtType '.eps'])
-
- % plot 2x2 design of NO deconvolution
- figure('units','normalized','outerposition',[0 0 1 1])
- hold on, plot(d2nd.times,squeeze(mean(mean(n2n_nodc(:,chan,:)),2)),'b--','LineWidth',2);
- hold on, plot(d2nd.times,squeeze(mean(mean(n2h_nodc(:,chan,:)),2)),'r--','LineWidth',2);
- hold on, plot(d2nd.times,squeeze(mean(mean(h2n_nodc(:,chan,:)),2)),'b','LineWidth',2);
- hold on, plot(d2nd.times,squeeze(mean(mean(h2h_nodc(:,chan,:)),2)),'r','LineWidth',2);
-
- legend({'BG -> BG','BG -> HF','HF -> BG','HF -> HF'},'FontSize',20)
- xlim([-0.5 1])
- xt = get(gca, 'XTick');
- set(gca, 'FontSize', 18)
- ylim([-6 6])
- vline(0,'k')
- hline(0,'k')
- box off
- title([phase ' No Deconvolution'],'FontSize',20)
- xlabel('Time [sec]', 'FontSize',20)
- ylabel('Amplitude [microV]', 'FontSize',20);
-
- % within face fixation
- if strcmp(phase,'WLFO')
- figure('units','normalized','outerposition',[0 0 1 1])
- hold on,plot(d2nd.times,squeeze(mean(mean(n2h(:,chan,:)),2)),'b','LineWidth',2);
- hold on, plot(d2nd.times,squeeze(mean(mean(h2h(:,chan,:)),2)),'r--','LineWidth',2);
- hold on, plot(d2nd.times,squeeze(mean(mean(SB (:,chan,:)),2)),'r','LineWidth',2);
-
-
- legend({'BG -> HF','HF -> HF','Within Box'},'FontSize',20)
- xlim([-0.5 1])
- xt = get(gca, 'XTick');
- set(gca, 'FontSize', 18)
- ylim([-6 6])
- vline(0,'k')
- % vline(0.17,'--k')
- hline(0,'k')
- box off
- title([phase ' Samebox Effect'],'FontSize',20)
- xlabel('Time [sec]', 'FontSize',20)
- ylabel('Amplitude [microV]', 'FontSize',20);
- % export_fig(['/home/student/a/agert/Desktop/Into the Wild/LabvsWLFO/autoplot/SB_ERP_' filtType '.png'])
- % export_fig(['/home/student/a/agert/Desktop/Into the Wild/LabvsWLFO/autoplot/SB_ERP.eps'])
- end
- %% 1x2 ERP plots
- n2x=(n2h+n2n)./2;
- h2x=(h2h+h2n)./2;
- x2n=(h2n+n2n)./2;
- x2h=(h2h+n2h)./2;
-
- % plot 1x2 for type of previous fixation
- figure('units','normalized','outerposition',[0 0 1 1])
- hold on, plot(d2nd.times,squeeze(mean(mean(n2x(:,chan,:)),2)),'k--','LineWidth',2);
- hold on, plot(d2nd.times,squeeze(mean(mean(h2x(:,chan,:)),2)),'k','LineWidth',2);
-
-
- legend({'BG -> X','HF -> X'},'FontSize',20)
- xlim([-0.5 1])
- xt = get(gca, 'XTick');
- set(gca, 'FontSize', 18)
- ylim([-6 6])
- vline(0,'k')
- % vline(0.17,'--k')
- hline(0,'k')
- box off
- title([phase ' Main Effect Prev'],'FontSize',20)
- xlabel('Time [sec]', 'FontSize',20)
- ylabel('Amplitude [microV]', 'FontSize',20);
- %export_fig(['/home/student/a/agert/Desktop/Into the Wild/LabvsWLFO/autoplot/1x2_ERP_MainPrev_Unfold_' filtType '.eps'])
-
- % plot 1x2 for type of current fixation
- x2nCI=zeros(length(squeeze(mean(x2n(:,chan,:),2))),2);
- x2hCI=zeros(length(squeeze(mean(x2h(:,chan,:),2))),2);
- for timep=1:length(squeeze(mean(x2n(:,chan,:),2)))
- x2nCI(timep,:)= bootci(10000,@mean,mean(x2n(:,chan,timep),2));
- x2hCI(timep,:)= bootci(10000,@mean,mean(x2h(:,chan,timep),2));
- end
-
- figure('units','normalized','outerposition',[0 0 1 1])
- % hold on, plot(d2nd.times,squeeze(mean(mean(x2h(:,chan,:)),2)),'r','LineWidth',2);
- %
- x1 = [squeeze(d2nd.times), fliplr(squeeze(d2nd.times))];
- inBetween = [x2nCI(:,1)', fliplr(x2nCI(:,2)')];
- fill(x1, inBetween, [0,0.5,0.5]);
- hold on;
- plot(d2nd.times,squeeze(mean(mean(x2n(:,chan,:)),2)),'b','LineWidth',2);
- % hold on, plot(d2nd.times,x2nCI,'b--','LineWidth',2);
- % hold on, plot(d2nd.times,x2hCI,'r--','LineWidth',2);
- inBetween2 = [x2hCI(:,1)', fliplr(x2hCI(:,2)')];
- fill(x1, inBetween2, [1,0.5,0]);
- hold on;
- plot(d2nd.times,squeeze(mean(mean(x2h(:,chan,:)),2)),'r','LineWidth',2);
- legend({'X -> BG','X -> HF'},'FontSize',20)
- xlim([-0.5 1])
- xt = get(gca, 'XTick');
- set(gca, 'FontSize', 18)
- ylim([-7 7])
- vline(0,'k')
- vline(0.12,'k--') %N170 start
- vline(0.2,'k--') %N170 stop
- vline(-0.3,'k--')
- % vline(0.17,'--k')
- hline(0,'k')
-
- box off
- title([phase ' Main Effect Curr'],'FontSize',20)
- xlabel('Time [sec]', 'FontSize',20)
- ylabel('Amplitude [microV]', 'FontSize',20);
- export_fig(['/home/student/a/agert/Desktop/Into the Wild/LabvsWLFO/autoplot/1x2_ERP_MainCurr_Unfold_' filtType '_' phase '_withCI.eps'])
-
- %% Plot effect topos (timerange specified for N170)
- effectData=squeeze(mean(x2h(:,:,:)))-squeeze(mean(x2n(:,:,:)));
- tp1=find(d2nd.times>0.120, 1, 'first');
- tp2=find(d2nd.times<0.200, 1, 'last');
- topoData=squeeze(mean(effectData(:,tp1:tp2),2));
- figure, topoplot(topoData',d2nd.chanlocs,'conv','on');
- title(['N170 topo 120:200 ' phase])
- %% viewing behavior
- d2nd2 = subjectwise_getparam(d2nd,{{'sac_amplitude',[0.5 1 2.5 5 7.5 10]}},1);
- uf_plotParam(d2nd2,'channel','Oz','plotSeparate','all','plotParam',{'fix_avgpos_y','fix_avgpos_x'})
- uf_plotParam(d2nd2,'channel','Oz', 'plotSeparate','all','plotParam','sac_amplitude','deconv',1)
- set(findobj(gca,'-property','LineWidth'),'LineWidth',2)
- %% Component amplitudes
- %P100: 80-130
- %N170: 120-200
- p100Start=find(d2nd.times>=0.080,1,'first');
- p100End=find(d2nd.times<=0.130,1,'last');
- n170Start=find(d2nd.times>=0.120,1,'first');
- n170End=find(d2nd.times<=0.200,1,'last');
- meanN2N.p100=squeeze(mean(ufERP.data(:,chan,p100Start:p100End,1),2));
- meanN2H.p100=squeeze(mean(ufERP.data(:,chan,p100Start:p100End,2),2));
- meanH2N.p100=squeeze(mean(ufERP.data(:,chan,p100Start:p100End,3),2));
- meanH2H.p100=squeeze(mean(ufERP.data(:,chan,p100Start:p100End,4),2));
- meanN2N.n170=squeeze(mean(ufERP.data(:,chan,n170Start:n170End,1),2));
- meanN2H.n170=squeeze(mean(ufERP.data(:,chan,n170Start:n170End,2),2));
- meanH2N.n170=squeeze(mean(ufERP.data(:,chan,n170Start:n170End,3),2));
- meanH2H.n170=squeeze(mean(ufERP.data(:,chan,n170Start:n170End,4),2));
- meanX2N.p100=squeeze(mean(mean(ufERP.data(:,chan,p100Start:p100End,[1,3]),2),4));
- meanX2H.p100=squeeze(mean(mean(ufERP.data(:,chan,p100Start:p100End,[2,4]),2),4));
- meanX2N.n170=squeeze(mean(mean(ufERP.data(:,chan,n170Start:n170End,[1,3]),2),4));
- meanX2H.n170=squeeze(mean(mean(ufERP.data(:,chan,n170Start:n170End,[2,4]),2),4));
- meanN2X.p100=squeeze(mean(mean(ufERP.data(:,chan,p100Start:p100End,[1,2]),2),4));
- meanH2X.p100=squeeze(mean(mean(ufERP.data(:,chan,p100Start:p100End,[3,4]),2),4));
- meanN2X.n170=squeeze(mean(mean(ufERP.data(:,chan,n170Start:n170End,[1,2]),2),4));
- meanH2X.n170=squeeze(mean(mean(ufERP.data(:,chan,n170Start:n170End,[3,4]),2),4));
- %%
- p100=meanH2H.p100;
- n170=meanH2H.n170;
- [p100Amp,p100Time]=max(p100,[],2);
- [n170Amp,n170Time]=min(n170,[],2);
- p2pEff=p100Amp-n170Amp;
- p100PeakTime=ufERP.times(p100Start+p100Time-1);
- n170PeakTime=ufERP.times(n170Start+n170Time-1);
- p100AmpCI = bootci(10000,@mean,p100Amp);
- n170AmpCI = bootci(10000,@mean,n170Amp);
- p2pAmpCI = bootci(10000,@mean,p2pEff);
- p100TimeCI = bootci(10000,@mean,p100PeakTime);
- n170TimeCI = bootci(10000,@mean,n170PeakTime);
- t=0;
- if t==100
- fprintf(['P100 for ' phase ' H2H on average ' num2str(mean(p100Amp)) 'uV 95CI [' num2str(p100AmpCI(1)) ';' num2str(p100AmpCI(2)) '] at ' num2str(mean(p100PeakTime)) 'ms [' num2str(p100TimeCI(1)) ';' num2str(p100TimeCI(2)) '].\n'])
- elseif t==170
- fprintf(['N170 for ' phase ' H2H on average ' num2str(mean(n170Amp)) 'uV 95CI [' num2str(n170AmpCI(1)) ';' num2str(n170AmpCI(2)) '] at ' num2str(mean(n170PeakTime)) 'ms [' num2str(n170TimeCI(1)) ';' num2str(n170TimeCI(2)) '].\n'])
- elseif t==0
- fprintf(['P2P for ' phase ' H2H on average ' num2str(mean(p2pEff)) 'uV 95CI [' num2str(p2pAmpCI(1)) ';' num2str(p2pAmpCI(2)) '].\n'])
-
- end
- %% conditionwise differences
- cond1=meanX2N;
- cond2=meanX2H;
- [cond1p100Amp,cond1p100Time]=max(cond1.p100,[],2);
- [cond1n170Amp,cond1n170Time]=min(cond1.n170,[],2);
- [cond2p100Amp,cond2p100Time]=max(cond2.p100,[],2);
- [cond2n170Amp,cond2n170Time]=min(cond2.n170,[],2);
- condDiffp100=cond2p100Amp-cond1p100Amp;
- condDiffn170=cond2n170Amp-cond1n170Amp;
- p100AmpCI = bootci(10000,@mean,condDiffp100);
- n170AmpCI = bootci(10000,@mean,condDiffn170);
- fprintf(['Diff P100 for ' phase ' on average ' num2str(mean(condDiffp100)) 'uV 95CI [' num2str(p100AmpCI(1)) ';' num2str(p100AmpCI(2)) '].\n'])
- fprintf(['Diff N170 for ' phase ' on average ' num2str(mean(condDiffn170)) 'uV 95CI [' num2str(n170AmpCI(1)) ';' num2str(n170AmpCI(2)) '].\n'])
- % [N2NAmp,N2NTime]=min(meanN2N,[],2);
- % [N2HAmp,N2HTime]=min(meanN2H,[],2);
- % [H2NAmp,H2NTime]=min(meanH2N,[],2);
- % [H2HAmp,H2HTime]=min(meanH2H,[],2);
- %
- %
- % [X2HAmp,X2HTime]=max(meanX2H,[],2);
- % [X2NAmp,X2NTime]=max(meanX2N,[],2);
- %
- % X2NPeakTime=ufERP.times(n170Start+X2NTime);
- % X2HPeakTime=ufERP.times(n170Start+X2HTime);
- % X2NAmpCI = bootci(10000,@mean,X2NAmp);
- % X2HAmpCI = bootci(10000,@mean,X2HAmp);
- % X2NTimeCI = bootci(10000,@mean,X2NPeakTime);
- % X2HTimeCI = bootci(10000,@mean,X2HPeakTime);
- % fprintf(['N170 for ' phase ' N2N on average ' num2str(mean(N2NRange)) 'uV.\n'])
- % fprintf(['N170 for ' phase ' N2H on average ' num2str(mean(N2HRange)) 'uV.\n'])
- % fprintf(['N170 for ' phase ' H2N on average ' num2str(mean(H2NRange)) 'uV.\n'])
- % fprintf(['N170 for ' phase ' H2H on average ' num2str(mean(H2HRange)) 'uV.\n'])
- % fprintf(['N170 for ' phase ' X2N on average ' num2str(mean(X2NAmp)) 'uV 95CI [' num2str(X2NCI(1)) ' ' num2str(X2NAmpCI(2)) '] at ' num2str(mean(X2NPeakTime)) 'ms.\n'])
- % fprintf(['N170 for ' phase ' X2H on average ' num2str(mean(X2HAmp)) 'uV 95CI [' num2str(X2HCI(1)) ' ' num2str(X2HAmpCI(2)) '] at ' num2str(mean(X2HPeakTime)) 'ms.\n'])
|