de857369edab4a7076e0bdacae4778263ad585e0
Christoph Budziszewski refactored to arg-structs!...

Christoph Budziszewski authored 15 years ago

1) %function pst = calculatePST(des,globalStart,baselineStart,baselineEnd,globalEnd,eventList,data,sessionList)
2) function pst = calculatePST(timeline,pstopts,data)
3)     des         = pstopts.des;
4)     eventList   = pstopts.eventList;
5)     sessionList = pstopts.sessionList;
Christoph Budziszewski normalization features enabled

Christoph Budziszewski authored 15 years ago

6)     col_bias_removal = pstopts.colBias;
7)     norm4SVM         = pstopts.psthNorm; %Normalization method for SVM
Christoph Budziszewski refactored to arg-structs!...

Christoph Budziszewski authored 15 years ago

8) 
9)     bstart          = timeline.baselineStart;
10)     bend            = timeline.baselineEnd;
Christoph Budziszewski kleine änderungen code move

Christoph Budziszewski authored 15 years ago

11)     edur            = 12;
Christoph Budziszewski refactored to arg-structs!...

Christoph Budziszewski authored 15 years ago

12)     pre             = timeline.psthStart;
13)     post            = timeline.psthEnd;
Christoph Budziszewski added TR

Christoph Budziszewski authored 15 years ago

14)     tr              = timeline.tr;
15)     res             = tr * timeline.trFactor;
Christoph Budziszewski kleine änderungen code move

Christoph Budziszewski authored 15 years ago

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

103)                         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

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

Axel Lindner authored 15 years ago

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

Christoph Budziszewski authored 15 years ago

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

Axel Lindner authored 15 years ago

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

Axel Lindner authored 15 years ago

133)     %%%%COL BIAS REMOVAL, added 090110 %%%%%
Christoph Budziszewski normalization features enabled

Christoph Budziszewski authored 15 years ago

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

Axel Lindner authored 15 years ago

135)     if col_bias_removal
136) 
137)         for zr=1:evntrow % Event ROW
138)             pst4row(zr,:)=nanmean(pst{zr}); % Average PST for overall ROW
139)             n_col=0;
140)             for ze=1:evntcol % Even COL
141)                 if ze==1 || (ze>1 && eventList(zr,ze)~=eventList(zr,ze-1))
142)                     n_col=n_col+1;
143)                     tmp_index=find(pstevnt{zr}(:)==eventList(zr,ze));
144)                     % Calculate Average PST for each COL within ROW
145)                     pst4col(n_col,:)=nanmean(pst{zr}(tmp_index,:));
146)                     % COL BIAS: Calculate Difference between COL Ave and Overall Row Ave
147)                     pst_delta(n_col,:)=pst4col(n_col,:)-pst4row(zr,:);
148)                     % Remove COL BIAS from single PSTs
149)                     for z=1:length(tmp_index)
150)                         pst{zr}(tmp_index(z),:)=pst{zr}(tmp_index(z),:)-pst_delta(n_col,:);
151)                     end;
152)                 end;
153)             end;
154)         end;
155)     end;
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) 
Christoph Budziszewski normalization features enabled

Christoph Budziszewski authored 15 years ago

160) %     disp(['normalization: ' norm4SVM]);   
Axel Lindner New Normalization Methods i...

Axel Lindner authored 15 years ago

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

Axel Lindner authored 15 years ago

170)     
Axel Lindner New Normalization Methods i...

Axel Lindner authored 15 years ago

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

Axel Lindner authored 15 years ago

184)     
185)     
186)     
187)