-
Wolfgang Ludwig authored
gtSequenceMedianRefs: added exception for acq.nref=1 Signed-off-by:
Wolfgang Ludwig <wolfgang.ludwig@esrf.fr>
Wolfgang Ludwig authoredgtSequenceMedianRefs: added exception for acq.nref=1 Signed-off-by:
Wolfgang Ludwig <wolfgang.ludwig@esrf.fr>
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