% Run watchport.py before this script
function [cburt]=cburt_watcher(cburt,waitforincoming)

% randomise
rand('state',sum(100*clock))

% Directory conventions
try
    cburt.directory_conventions.incomingmetapath;
catch
    cburt.directory_conventions.incomingmetapath='/realtime/scratch/incomingmeta';
end;
try
    cburt.directory_conventions.incomingdata;
catch
    cburt.directory_conventions.incomingdata='/realtime/scratch/incoming';
end;

try
    cburt.directory_conventions.processeddata;
catch
    cburt.directory_conventions.processeddata='/realtime/scratch/processed';
end;

try
    cburt.directory_conventions.rois;
catch
    cburt.directory_conventions.rois='/realtime/scratch/rois';
end;

% Some options
cburt.options.cburt_diagnostics.maximagesacross=16;
try
    waitforincoming;
catch
    waitforincoming=true;
end;

showv1=false;

% ffa ROIs to be summarised
cburt.rois=[];
cburt=cburt_addroi(cburt,'left_ffa','left_ffa_10mm.nii');
cburt=cburt_addroi(cburt,'right_ffa','right_ffa_10mm.nii');
if (showv1)
    cburt=cburt_addroi(cburt,'left_v1','v1_left.nii');
    cburt=cburt_addroi(cburt,'right_v1','v1_right.nii');
end;
% %  ppa ROIs to be summarised
% cburt.rois=[];
% cburt=cburt_addroi(cburt,'left_ppa','left_ppa_10mm.nii');
% cburt=cburt_addroi(cburt,'right_ppa','right_ppa_10mm.nii');
% if (showv1)
%     cburt=cburt_addroi(cburt,'left_v1','v1_left.nii');
%     cburt=cburt_addroi(cburt,'right_v1','v1_right.nii');
% end;


%cburt.rois(3).filename='ifs_left.nii';
%cburt.rois(4).filename='ifs_right.nii';
%
% List of actions to be trigger by the arrival of different kinds of data
cburt.actions=[];
action.shortname='localiser';
action.protocolname='^CBU_Localiser.*';
action.imgtype='ORIGINAL\PRIMARY\M\ND';
action.onstart={};
action.onreceived={'cburt_convert','cburt_diagnostics'};
action.ontrigger={};
action.onend={};
cburt.actions=[cburt.actions action];

action.shortname='structural';
action.protocolname='^CBU_MPRAGE.*';
action.imgtype='ORIGINAL\PRIMARY\M\ND\NORM';
action.onstart={};
action.onreceived={'cburt_convert_multipledcm_loadheader'};
action.ontrigger={};
action.onend={'cburt_convert_multipledcm_doit','cburt_normalise','cburt_roi_inversenormalise'};
cburt.actions=[cburt.actions action];

action.shortname='epinomoco';
action.protocolname='^CBU_EPI.*';
action.imgtype='ORIGINAL\PRIMARY\M\ND\MOSAIC';
action.onstart={'cburt_dai_adaptive_setup'};
action.onreceived={'cburt_convert','cburt_realign','cburt_roi_summarise','cburt_model_removespikes'};
action.ontrigger={'cburt_dai_estimate'};
action.onend={'cburt_dai_finalfigure','cburt_dumpfigures'};
cburt.actions=[cburt.actions action];


%% MODEL SETUP
cburt.model.highpassperiod=128; % filter out frequencies with period below
cburt.model.TR=1; % seconds
cburt.model.ndummies=20;
cburt.model.outliercutoff=0.5; % proportion of modal value
cburt.model.globalrescale=0; % rescale by global signal?

% Pre-prepared stimulus lists
cburt.model.runspecificstimuli=false;

cburt.model.gapbetweenblocks=24; % in TRs - also at end
cburt.model.numstimperblock=[92 48 24 12 6 3]; %round(92*((0.7).^[0:11])); %[92 48 24 12 6 3]; %
cburt.model.totalnumstim=max(cburt.model.numstimperblock); %92;
cburt.model.nullevery=4; % 4 stimuli per null
cburt.model.numstimincludingnulls=floor((cburt.model.nullevery+1)/cburt.model.nullevery*(cburt.model.numstimperblock-0.0001));

blockstart=cburt.model.ndummies;
cburt.model.trigger=[];
for i=1:length(cburt.model.numstimincludingnulls)
	cburt.model.trigger=[cburt.model.trigger blockstart + 6*([1:cburt.model.numstimincludingnulls(i)]-1) - 19]; 
			% ...5 seconds before stimulus should be played
	blockstart=blockstart+6*cburt.model.numstimincludingnulls(i)+cburt.model.gapbetweenblocks;
end;
cburt.model.maxscans=blockstart;

% High pass filter with butterworth order 3
nyquistfreq=0.5/cburt.model.TR;
[cburt.model.filter.hpf_b cburt.model.filter.hpf_a]=butter(3,1/(cburt.model.highpassperiod*nyquistfreq),'high');


fprintf('Maximum number of scans is %d\n',cburt.model.maxscans);

if (showv1)
    cburt.model.contrast=[1 1 0 0]';
else
    cburt.model.contrast=[1 1]'; % cburt.model.contrast=[1 1 -1 -1]';
end;    
cburt.model.stimlistfilename=fullfile(cburt.directory_conventions.incomingmetapath,'stimlist.txt');

cburt.model.addrealignmentparms=2;

%% LOAD IMAGES FOR DISPLAY
global imgs
load thumbnails.mat

%% STIMULI - LOAD; ADAPT?
if (~isfield(cburt.model,'loadstimuli'))
    cburt.model.loadstimuli=1;
end;

if (~isfield(cburt.model,'adaptstimuli'))
    cburt.model.adaptstimuli=1;
    cburt.model.loadstimuli=1;
end;

%% COMMUNICATION
if (~isfield(cburt,'communication') || ~isfield(cburt.communication,'tostimulus'))
    cburt.communication.tostimulus.on=true;
    cburt.communication.tostimulus.port=6001;
    cburt=cburt_checkcommunications(cburt);
end;


%% RESTART ANALYSIS
if (~isfield(cburt,'incoming') || ~isfield(cburt.incoming,'series'))
    cburt.incoming.series=[];
end;

if (~isfield(cburt.incoming,'dealtwith'))
    cburt.incoming.dealtwith=[];
end;

cburt.model.numstimulilistsused=0;



%% WARNINGS
if (~cburt.model.adaptstimuli)
    fprintf('WARNING: not adapting stimuli\n');
end;
if (~cburt.communication.tostimulus.on)
    fprintf('WARNING: not communicating with stimulus delivery machine\n');
end;


%% Lets go
process=true;
while(process)
    fn=dir(cburt.directory_conventions.incomingmetapath);
    for i=1:length(fn)
        if (length(fn(i).name)>6 && strcmp(fn(i).name(1:6),'series'))
            ind=str2num(fn(i).name(7:12));
            if (~any(cburt.incoming.dealtwith==ind))
                fprintf('Data series %s %06d\n',fn(i).name,ind);
                cburt=cburt_processseries(cburt,fullfile(cburt.directory_conventions.incomingmetapath,fn(i).name));
                cburt.incoming.dealtwith=[cburt.incoming.dealtwith ind];
            end;
        end;
    end;
    process=waitforincoming;
end;
