Skip to content
Snippets Groups Projects
gtSequenceMedianRefs.m 4.80 KiB
function gtSequenceMedianRefs(~, ~, workingdirectory, overwrite_flag)
% GTSEQUENCEMEDIANREFS  Generate median image for each set of reference images in a scan
%     gtSequenceMedianRefs(first, last, workingdirectory, overwrite_flag)
%     -------------------------------------------------------------------
%       Works on reference files found in current directory, and only
%       overwrites if explicitly told to.
%
%     Version 003 22-02-2007 by GJ
%       takes arguments 'offset',-1 or 1 : will look for offsets below (or above)
%       those in the xml file
%       'overwrite' : will overwrite pre-existing files
%
%     Version 002 15-06-2007 by AKing
%       final modifications - offests only -1, but not at every reference group.
%       Always wait, but skip if the next reference group appears
%       overwrite_flag should be the string 'overwrite' to overwrite references
%
%       THIS SHOULD BE COMPILED WITH ID19_MCC TO PUT IN THE RIGHT PLACE
%       app.overwrite=false;  %single arg...
%       app.wait=true;  %always wait (see above)
%       app.offset=0;   deal with -1 and 0  (so 0, 50, 99, 100, 150 etc)
%       app=parse_pv_pairs(app,varargin);
%       offsets=sort(unique([app.offset 0 app.offset]));
%
%       gt version - if parameters.prep.correct_drift=='required', function must
%       wait for 'istranslated'==true in the edf header
%
%       modify to work from the parameters file (which is created from the .xml)
%
%       propagate edf header info to the refHST created
%
%

disp('gtSequenceMedianRefs.m  -  graintracking specific version')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% load('parameters.mat');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if ~exist('workingdirectory', 'var') || isempty(workingdirectory)
    workingdirectory=pwd;
end
cd(workingdirectory)

if exist('parameters.mat', 'file')
    load('parameters.mat');
    acq=parameters.acq;
else
    disp('gtSequenceMedianRefs should be launched in the analysis directory (where the parameters.mat file is)')
    disp('quitting...')
    return
end

% overwrite preexisting refs
if ~exist('overwrite_flag','var')
  overwrite_flag='';
end

% should we wait for images to be shifted by gtApplyDrifts?
waitfortranslated=false;
% if strcmp(parameters.prep.correct_drift, 'required')
%     waitfortranslated=parameters.prep.correct_drift_iteration;
% end

%images per turn
if strcmp(acq.type, '360degree')
    nimages=2*acq.nproj;
elseif strcmp(acq.type, '180degree')
    nimages=acq.nproj;
else
    Mexc = MException('ACQ:invalid_parameter', ...
                      'Unknown type of scan. Check parameters.acq.type!');
    throw(Mexc);
end

%offsets - for situations where the mono is tuned at certain reference
%groups
offsets=[-1 0];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% move into the directory with the images
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cd([acq.dir '/0_rawdata/' acq.name]);


for n=0:acq.refon:nimages
  for offset=offsets

    if (n+offset<0)
      continue
    end

    fname_refC=sprintf('refHST%04d.edf',n+offset);
    if exist(fname_refC,'file') && ~strcmpi(overwrite_flag, 'overwrite')
      fprintf('%s already exists - skipping\n',fname_refC);
      continue
    end

    fprintf('Looking for references at %04d\n',n+offset);
    ref=zeros(acq.nref,acq.ydet,acq.xdet);

    skip=false;

    %determine next reference group after this one - if it appears, move on
    if offset==-1
      fname_next=sprintf('ref0000_%04d.edf', n);
    else
      fname_next=[];
    end

    for m=0:acq.nref-1
      fname_ref=sprintf('ref%04d_%04d.edf',m,n+offset);

      if ~exist(fname_ref,'file')
        if isempty(fname_next)
          fprintf('Waiting for %s...',fname_ref)
        else
          fprintf('Waiting for %s or %s...',fname_ref, fname_next)
        end
        %modif andy and sabine to avoid unfinished jobs in condor queue
        i=0;
        while ~exist(fname_ref,'file') && ~exist(fname_next,'file')
            i=i+1;
          pause(2)
          if i>2000 % timeout
              fprintf('\nTimeout. Exiting...\n')
			  cd(parameters.acq.dir);
              return
          end
        end
        fprintf('Found file.\n')
      end

      if exist(fname_ref,'file')
        fprintf('\tReading image %d of %d\r',m+1,acq.nref)
        ref(m+1,:,:) = edf_wait_read(fname_ref, [], waitfortranslated);
        info=edf_info(fname_ref);
      elseif exist(fname_next,'file')
        skip=true;
        break
      end

    end

    if skip==false
      fprintf('Now performing median...\n')
      if (parameters.acq.nref == 1)
          refC = squeeze(ref(1,:,:));
      else
          refC=squeeze(median(ref));
      end
      info.datatype='uint16';
	  fprintf('Saving file: %s\n', fname_refC)
      edf_write(refC,fname_refC, info);
    end

  end
end

cd(parameters.acq.dir);

end % end function