6157c8a01a7b175a3d35a2f333815e5f0a80545d
Christoph Budziszewski kleine änderungen code move

Christoph Budziszewski authored 15 years ago

1) function pst = calculatePST(des,globalStart,baselineStart,baselineEnd,globalEnd,eventList,data,sessionList)
2)     bstart          = baselineStart;
3)     bend            = baselineEnd;
4)     edur            = 12;
5)     pre             =  globalStart;
6)     post            =  globalEnd;
7)     res             = 1;
8) 
9)     normz           = 'file';
10)     pm              = 0;
11) 
12)     lsess           = getNumberOfScans(des);
13)     nSessions       = getNumberOfSessions(des);
14)     tr              = 2;
15) 
16)     [evntrow evntcol]=size(eventList);
17)     
18) 
19)     hsec=str2num(des.xsDes.High_pass_Filter(8:end-3)); % Highpass filter [sec] from SPM.mat
20) 
21)     if strcmp(des.xBF.UNITS,'secs')
22)         unitsecs=1;
23)     end;
24) 
25)     nScansPerSession=getNumberOfScans(des);
26)     %stime=[0:tr:max(nScansPerSession)*tr+post-tr]; % Stimulus time for raw data plot
27)     stime=0:tr:max(nScansPerSession)*tr+round(post/tr)*tr-tr; % Stimulus time for raw data plot
28) 
29) 
30) 
31)     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32)     % RUN
33)     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
34) 
35) 
36)     % Digital Highpass
37)     Rp=0.5;
38)     Rs=20;
39)     NO=1;
40)     Wp=1/((1/2/tr)/(1/hsec));
41)     [B, A] = ellip(NO,Rp,Rs,Wp,'high');
42) 
43)     sdata(1:max(nScansPerSession)+round(post/tr),1:nSessions)=nan; % Open Data Matrix
44)     for z=1:nSessions % Fill Data Matrix sessionwise
45)         sdata(1:nScansPerSession(z),z)=data(sum(nScansPerSession(1:z))-nScansPerSession(z)+1:sum(nScansPerSession(1:z)))';
46)     end;
47) %         usdata=sdata; % Keep unfiltered data
48) 
49)     sdatamean=nanmean(nanmean(sdata(:,:)));
50)     for z=1:nSessions
51) %             X(:,z)=[1:1:max(nScansPerSession)]'; % #Volume
52)         sdata(1:nScansPerSession(z),z)=filtfilt(B,A,sdata(1:nScansPerSession(z),z)); %Filter Data (Highpass)
53)     end;
54)     sdata=sdata+sdatamean;
55) 
56) 
57)     %%%%Parametric Modulation Modus%%%%
58)     if pm %Find Parameters for Event of Interest
59)         [imods modss mods erow evntrow eventList] = getParametricMappingEvents(eventList,evntrow,des,pmf);
60)     end;
61)     %%%%PM%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
62) 
63) 
64)     for zr=1:evntrow
65)         n{zr}=0;
66)         nn{zr}=0; 
67)         nnn{zr}=0;
68)         sstart{zr}=1;
69)     end;
70) 
71) 
72)     sesst0=0; 
73)     for sessionID=sessionList
74)         if sessionID>1
75)             sesst0(sessionID)=sum(lsess(1:sessionID-1))*tr;  
76)         end;
77)         for zr=1:evntrow  %LABEL NUMBER, EVENT GROUP
78)             sstart{zr}=n{zr}+1;
79)             for ze=1:evntcol % EVENT INDEX in EventList
80)                 if ze==1 || (ze>1 && eventList(zr,ze)~=eventList(zr,ze-1))
81)                     for zz=1:length(des.Sess(sessionID).U(eventList(zr,ze)).ons) % EVENT REPETITION NUMBER
82)                         if ~unitsecs
83)                             des.Sess(sessionID).U(eventList(zr,ze)).ons(zz)=(des.Sess(sessionID).U(eventList(zr,ze)).ons(zz)-1)*tr;
84)                             des.Sess(sessionID).U(eventList(zr,ze)).dur(zz)=(des.Sess(sessionID).U(eventList(zr,ze)).dur(zz)-1)*tr;
85)                         end;
86) 
87)                         nnn{zr}=nnn{zr}+1; % INFO for rawdataplot start
88)                         if des.Sess(sessionID).U(eventList(zr,ze)).dur(zz)<edur
89)                             mev{zr}(nnn{zr},1:2)=[des.Sess(sessionID).U(eventList(zr,ze)).ons(zz)+sesst0(sessionID) edur]; % modeled event [onset length]
90)                         else
91)                             mev{zr}(nnn{zr},1:2)=[des.Sess(sessionID).U(eventList(zr,ze)).ons(zz)+sesst0(sessionID) des.Sess(sessionID).U(eventList(zr,ze)).dur(zz)];
92)                         end; % INFO for rawdataplot end
93) 
94)                         n{zr}=n{zr}+1;
95)                         pst{zr}(n{zr},:)=interp1(stime,sdata(:,sessionID),[des.Sess(sessionID).U(eventList(zr,ze)).ons(zz)+pre:res:des.Sess(sessionID).U(eventList(zr,ze)).ons(zz)+post],'linear');
Axel Lindner New Option for COL Bias rem...

Axel Lindner authored 15 years ago

96)                         pstevnt{zr}(n{zr})=eventList(zr,ze); % NEW 090110 Specify #Event/Condition for each PST
Christoph Budziszewski kleine änderungen code move

Christoph Budziszewski authored 15 years ago

97)                         if strcmp(normz,'epoc')
98)                             bline=nanmean(pst{zr}(n{zr},round(-pre/res+(bstart)/res+1):round(-pre/res+(bend)/res+1)));
99)                             if isnan(bline)
100)                                 pst{zr}(n{zr},1:-pre/res+post/res+1)=nan;
101)                             else
Axel Lindner New Option for COL Bias rem...

Axel Lindner authored 15 years ago

102)                                 nn{zr}=nn{zr}+1;
Christoph Budziszewski kleine änderungen code move

Christoph Budziszewski authored 15 years ago

103)                                 pst{zr}(n{zr},:)=(pst{zr}(n{zr},:)-bline)/bline*100; % 'epoch-based' normalization
104)                             end;
105)                         end;
106)                     end;
107)                 end;
108)             end;
109)             if ~strcmp(normz,'epoc')
110)                 bline(zr)=nanmean(nanmean(pst{zr}(sstart{zr}:n{zr},-pre/res+(bstart)/res+1:-pre/res+(bend)/res+1)));
111)                 bstd(zr)=nanmean(nanstd(pst{zr}(sstart{zr}:n{zr},-pre/res+(bstart)/res+1:-pre/res+(bend)/res+1)));
112)                 nn{zr}=n{zr};
113)             end;
114)         end;
115)         if strcmp(normz,'filz')
116)             for zr=1:evntrow
117)                 pst{zr}(sstart{zr}:n{zr},:)=(pst{zr}(sstart{zr}:n{zr},:)-mean(bline))/mean(bstd); % session-based z-score normalization
118)             end;
119)         elseif strcmp(normz,'file')
120)             for zr=1:evntrow
121)                 pst{zr}(sstart{zr}:n{zr},:)=(pst{zr}(sstart{zr}:n{zr},:)-mean(bline))/mean(bline)*100; % session-based normalization
122)             end;
123)         end;
124)     end;
Axel Lindner plot optimiert. normalisier...

Axel Lindner authored 15 years ago

125)     
Axel Lindner New Option for COL Bias rem...

Axel Lindner authored 15 years ago

126)     %%%%COL BIAS REMOVAL, added 090110 %%%%%
127)     col_bias_removal=0;
128)     if col_bias_removal
129) 
130)         for zr=1:evntrow % Event ROW
131)             pst4row(zr,:)=nanmean(pst{zr}); % Average PST for overall ROW
132)             n_col=0;
133)             for ze=1:evntcol % Even COL
134)                 if ze==1 || (ze>1 && eventList(zr,ze)~=eventList(zr,ze-1))
135)                     n_col=n_col+1;
136)                     tmp_index=[];
137)                     tmp_index=find(pstevnt{zr}(:)==eventList(zr,ze));
138)                     % Calculate Average PST for each COL within ROW
139)                     pst4col(n_col,:)=nanmean(pst{zr}(tmp_index,:));
140)                     % COL BIAS: Calculate Difference between COL Ave and Overall Row Ave
141)                     pst_delta(n_col,:)=pst4col(n_col,:)-pst4row(zr,:);
142)                     % Remove COL BIAS from single PSTs
143)                     for z=1:length(tmp_index)
144)                         pst{zr}(tmp_index(z),:)=pst{zr}(tmp_index(z),:)-pst_delta(n_col,:);
145)                     end;
146)                 end;
147)             end;
148)         end;
149)     end;
150)     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
151)                 
152)             
153)             
154)     
155)     
156)     
157)     
Axel Lindner plot optimiert. normalisier...

Axel Lindner authored 15 years ago

158)     %%%%%%%%%%% new 090109 Axel: "Normalization" for SVM
Axel Lindner New Normalization Methods i...

Axel Lindner authored 15 years ago

159) 
Axel Lindner New Option for COL Bias rem...

Axel Lindner authored 15 years ago

160)     norm4SVM='mean'; %Normalization method for SVM
Axel Lindner New Normalization Methods i...

Axel Lindner authored 15 years ago

161)     disp(['normalization: ' norm4SVM]);   
162)     % none - no normalization
163)     % mean - mean normalization (meanPSTH max at .5, baseline at -.5]
164)     % minmax - all PSTHs between [0 1]
165)     
166)     for zr=1:evntrow
167)           tmp_maxmean(zr)=max(nanmean(pst{zr}));
168)           tmp_max(zr)=max(max(pst{zr}));
169)           tmp_min(zr)=min(min(pst{zr}));
170)     end;
Axel Lindner plot optimiert. normalisier...

Axel Lindner authored 15 years ago

171)     
Axel Lindner New Normalization Methods i...

Axel Lindner authored 15 years ago

172)     pstmaxmean=max(tmp_maxmean);
173)     pstmax=max(tmp_max);
174)     pstmin=min(tmp_min);
175)     
176)     for zr=1:evntrow
177)         switch norm4SVM
178)             case {'none'}
179)             case {'mean'}
180)                 pst{zr}=pst{zr}./pstmaxmean-.5;
181)             case {'minmax'}
182)                 pst{zr}=(pst{zr}-pstmin)./(pstmax-pstmin);
183)         end;
184)     end;
Axel Lindner plot optimiert. normalisier...

Axel Lindner authored 15 years ago

185)     
186)     
187)     
188)