Attachment 'cburt_watcher.m'
Download 1 % Run watchport.py before this script
2 function [cburt]=cburt_watcher(cburt,waitforincoming)
3
4 % randomise
5 rand('state',sum(100*clock))
6
7 % Directory conventions
8 try
9 cburt.directory_conventions.incomingmetapath;
10 catch
11 cburt.directory_conventions.incomingmetapath='/realtime/scratch/incomingmeta';
12 end;
13 try
14 cburt.directory_conventions.incomingdata;
15 catch
16 cburt.directory_conventions.incomingdata='/realtime/scratch/incoming';
17 end;
18
19 try
20 cburt.directory_conventions.processeddata;
21 catch
22 cburt.directory_conventions.processeddata='/realtime/scratch/processed';
23 end;
24
25 try
26 cburt.directory_conventions.rois;
27 catch
28 cburt.directory_conventions.rois='/realtime/scratch/rois';
29 end;
30
31 % Some options
32 cburt.options.cburt_diagnostics.maximagesacross=16;
33 try
34 waitforincoming;
35 catch
36 waitforincoming=true;
37 end;
38
39 showv1=false;
40
41 % ffa ROIs to be summarised
42 cburt.rois=[];
43 cburt=cburt_addroi(cburt,'left_ffa','left_ffa_10mm.nii');
44 cburt=cburt_addroi(cburt,'right_ffa','right_ffa_10mm.nii');
45 if (showv1)
46 cburt=cburt_addroi(cburt,'left_v1','v1_left.nii');
47 cburt=cburt_addroi(cburt,'right_v1','v1_right.nii');
48 end;
49 % % ppa ROIs to be summarised
50 % cburt.rois=[];
51 % cburt=cburt_addroi(cburt,'left_ppa','left_ppa_10mm.nii');
52 % cburt=cburt_addroi(cburt,'right_ppa','right_ppa_10mm.nii');
53 % if (showv1)
54 % cburt=cburt_addroi(cburt,'left_v1','v1_left.nii');
55 % cburt=cburt_addroi(cburt,'right_v1','v1_right.nii');
56 % end;
57
58
59 %cburt.rois(3).filename='ifs_left.nii';
60 %cburt.rois(4).filename='ifs_right.nii';
61 %
62 % List of actions to be trigger by the arrival of different kinds of data
63 cburt.actions=[];
64 action.shortname='localiser';
65 action.protocolname='^CBU_Localiser.*';
66 action.imgtype='ORIGINAL\PRIMARY\M\ND';
67 action.onstart={};
68 action.onreceived={'cburt_convert','cburt_diagnostics'};
69 action.ontrigger={};
70 action.onend={};
71 cburt.actions=[cburt.actions action];
72
73 action.shortname='structural';
74 action.protocolname='^CBU_MPRAGE.*';
75 action.imgtype='ORIGINAL\PRIMARY\M\ND\NORM';
76 action.onstart={};
77 action.onreceived={'cburt_convert_multipledcm_loadheader'};
78 action.ontrigger={};
79 action.onend={'cburt_convert_multipledcm_doit','cburt_normalise','cburt_roi_inversenormalise'};
80 cburt.actions=[cburt.actions action];
81
82 action.shortname='epinomoco';
83 action.protocolname='^CBU_EPI.*';
84 action.imgtype='ORIGINAL\PRIMARY\M\ND\MOSAIC';
85 action.onstart={'cburt_dai_adaptive_setup'};
86 action.onreceived={'cburt_convert','cburt_realign','cburt_roi_summarise','cburt_model_removespikes'};
87 action.ontrigger={'cburt_dai_estimate'};
88 action.onend={'cburt_dai_finalfigure','cburt_dumpfigures'};
89 cburt.actions=[cburt.actions action];
90
91
92 %% MODEL SETUP
93 cburt.model.highpassperiod=128; % filter out frequencies with period below
94 cburt.model.TR=1; % seconds
95 cburt.model.ndummies=20;
96 cburt.model.outliercutoff=0.5; % proportion of modal value
97 cburt.model.globalrescale=0; % rescale by global signal?
98
99 % Pre-prepared stimulus lists
100 cburt.model.runspecificstimuli=false;
101
102 cburt.model.gapbetweenblocks=24; % in TRs - also at end
103 cburt.model.numstimperblock=[92 48 24 12 6 3]; %round(92*((0.7).^[0:11])); %[92 48 24 12 6 3]; %
104 cburt.model.totalnumstim=max(cburt.model.numstimperblock); %92;
105 cburt.model.nullevery=4; % 4 stimuli per null
106 cburt.model.numstimincludingnulls=floor((cburt.model.nullevery+1)/cburt.model.nullevery*(cburt.model.numstimperblock-0.0001));
107
108 blockstart=cburt.model.ndummies;
109 cburt.model.trigger=[];
110 for i=1:length(cburt.model.numstimincludingnulls)
111 cburt.model.trigger=[cburt.model.trigger blockstart + 6*([1:cburt.model.numstimincludingnulls(i)]-1) - 19];
112 % ...5 seconds before stimulus should be played
113 blockstart=blockstart+6*cburt.model.numstimincludingnulls(i)+cburt.model.gapbetweenblocks;
114 end;
115 cburt.model.maxscans=blockstart;
116
117 % High pass filter with butterworth order 3
118 nyquistfreq=0.5/cburt.model.TR;
119 [cburt.model.filter.hpf_b cburt.model.filter.hpf_a]=butter(3,1/(cburt.model.highpassperiod*nyquistfreq),'high');
120
121
122 fprintf('Maximum number of scans is %d\n',cburt.model.maxscans);
123
124 if (showv1)
125 cburt.model.contrast=[1 1 0 0]';
126 else
127 cburt.model.contrast=[1 1]'; % cburt.model.contrast=[1 1 -1 -1]';
128 end;
129 cburt.model.stimlistfilename=fullfile(cburt.directory_conventions.incomingmetapath,'stimlist.txt');
130
131 cburt.model.addrealignmentparms=2;
132
133 %% LOAD IMAGES FOR DISPLAY
134 global imgs
135 load thumbnails.mat
136
137 %% STIMULI - LOAD; ADAPT?
138 if (~isfield(cburt.model,'loadstimuli'))
139 cburt.model.loadstimuli=1;
140 end;
141
142 if (~isfield(cburt.model,'adaptstimuli'))
143 cburt.model.adaptstimuli=1;
144 cburt.model.loadstimuli=1;
145 end;
146
147 %% COMMUNICATION
148 if (~isfield(cburt,'communication') || ~isfield(cburt.communication,'tostimulus'))
149 cburt.communication.tostimulus.on=true;
150 cburt.communication.tostimulus.port=6001;
151 cburt=cburt_checkcommunications(cburt);
152 end;
153
154
155 %% RESTART ANALYSIS
156 if (~isfield(cburt,'incoming') || ~isfield(cburt.incoming,'series'))
157 cburt.incoming.series=[];
158 end;
159
160 if (~isfield(cburt.incoming,'dealtwith'))
161 cburt.incoming.dealtwith=[];
162 end;
163
164 cburt.model.numstimulilistsused=0;
165
166
167
168 %% WARNINGS
169 if (~cburt.model.adaptstimuli)
170 fprintf('WARNING: not adapting stimuli\n');
171 end;
172 if (~cburt.communication.tostimulus.on)
173 fprintf('WARNING: not communicating with stimulus delivery machine\n');
174 end;
175
176
177 %% Lets go
178 process=true;
179 while(process)
180 fn=dir(cburt.directory_conventions.incomingmetapath);
181 for i=1:length(fn)
182 if (length(fn(i).name)>6 && strcmp(fn(i).name(1:6),'series'))
183 ind=str2num(fn(i).name(7:12));
184 if (~any(cburt.incoming.dealtwith==ind))
185 fprintf('Data series %s %06d\n',fn(i).name,ind);
186 cburt=cburt_processseries(cburt,fullfile(cburt.directory_conventions.incomingmetapath,fn(i).name));
187 cburt.incoming.dealtwith=[cburt.incoming.dealtwith ind];
188 end;
189 end;
190 end;
191 process=waitforincoming;
192 end;
Attached Files
To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.You are not allowed to attach a file to this page.