mirror of
https://github.com/c-sooyoung/fold_slice.git
synced 2026-09-17 23:39:08 +09:00
67 lines
2.8 KiB
Matlab
67 lines
2.8 KiB
Matlab
%LOAD_ASTRA_RECONS Load tomographic reconstructions from astra toolbox
|
|
% Currently supports reconstruction produced on Summit@OLCF with MPI parallelization.
|
|
% Created by YJ.
|
|
%
|
|
|
|
function [recon_astra, par_astra] = load_astra_recons( par_astra, par, np, Nblocks)
|
|
|
|
par_astra.dir = strcat('rec_',par_astra.algorithm,'_Niter',num2str(par_astra.Niter));
|
|
par_astra.file_name = strcat('rec_',par_astra.algorithm,'_Niter',num2str(par_astra.Niter));
|
|
|
|
if isfield(par_astra,'min_con')
|
|
par_astra.dir = strcat(par_astra.dir,'_minCon',num2str(par_astra.min_con));
|
|
par_astra.file_name = strcat(par_astra.file_name,'_minCon',num2str(par_astra.min_con));
|
|
end
|
|
|
|
if isfield(par_astra,'upsample_method') && ~isempty(par_astra.upsample_method)
|
|
par_astra.dir = strcat(par_astra.dir,'_',par_astra.upsample_method);
|
|
par_astra.file_name = strcat(par_astra.file_name,'_',par_astra.upsample_method);
|
|
end
|
|
|
|
par_astra.dir = strcat(par_astra.dir,'_v',num2str(par_astra.N_y),'_h',num2str(par_astra.N_x));
|
|
|
|
|
|
par_astra.time_recon = zeros(Nblocks,1);
|
|
par_astra.time_save = zeros(Nblocks,1);
|
|
|
|
if par_astra.sp>1
|
|
par_astra.dir = strcat(par_astra.dir,'_sp',num2str(sp));
|
|
par_astra.file_name = strcat(par_astra.file_name,'_sp',num2str(sp));
|
|
end
|
|
par_astra.file_name = strcat(par_astra.file_name,'_np',num2str(np));
|
|
|
|
recon_temp = {};%
|
|
|
|
Nslice = 0;
|
|
disp('Loading astra reconstructions...')
|
|
for i = 1:Nblocks
|
|
disp(strcat(par_astra.file_name,'_',num2str(i),'.hdf5'))
|
|
try
|
|
recon_temp{i} = h5read(strcat(par.output_path,'/tomograms/',par_astra.dir,'/',par_astra.file_name,'_',num2str(i),'.hdf5'),'/rec');
|
|
catch
|
|
disp(strcat(par.output_path,'/tomograms/',par_astra.dir,'/',par_astra.file_name,'_',num2str(i),'.hdf5'))
|
|
|
|
end
|
|
par_astra.time_recon(i) = sum(h5read(strcat(par.output_path,'/tomograms/',par_astra.dir,'/',par_astra.file_name,'_',num2str(i),'.hdf5'),'/t_recon'));
|
|
par_astra.time_save(i) = sum(h5read(strcat(par.output_path,'/tomograms/',par_astra.dir,'/',par_astra.file_name,'_',num2str(i),'.hdf5'),'/t_save'));
|
|
disp(strcat('recon time:',num2str(par_astra.time_recon(i)/60),'mins.','save time:',num2str(par_astra.time_save(i)/60),'mins'))
|
|
Nslice = Nslice + size(recon_temp{i},3);
|
|
end
|
|
|
|
disp('Processing astra reconstructions...')
|
|
|
|
recon_astra = zeros(size(recon_temp{i},2),size(recon_temp{1},1),Nslice,'single');
|
|
ind_start = 1;
|
|
for i = 1:Nblocks
|
|
disp(strcat(par_astra.file_name,'_',num2str(i),'.hdf5'))
|
|
%ind_start = (i-1)*size(rec,1)+1;
|
|
ind_end = ind_start + size(recon_temp{i},3)-1;
|
|
if strcmp(par_astra.algorithm,'SIRT') || strcmp(par_astra.algorithm,'SART') || strcmp(par_astra.algorithm,'FBP')%2D algorithms
|
|
recon_astra(:,:,ind_start:ind_end) = single(flipud(permute(recon_temp{i},[2 1 3])));
|
|
else
|
|
recon_astra(:,:,ind_start:ind_end) = single((permute(recon_temp{i},[2 1 3])));
|
|
end
|
|
ind_start = ind_end+1;
|
|
end
|
|
|
|
end |