function imstack = tif_series_read(folder)
% read tif series of multi-channel 12bit data
warning('off', 'MATLAB:imagesci:tiffmexutils:libtiffWarning')
warning('off', 'MATLAB:tifflib:TIFFReadDirectory:libTiffWarning')


tif_files=dir(fullfile(folder, '*.tif'));
nfile=length(tif_files);
filenames={tif_files.name}';
z=zeros(nfile,1);
ch=zeros(nfile,1);
for i=1:nfile
    [z(i), ch(i)]=get_tif_z_ch_from_filename(filenames{i});
end

InfoImage = imfinfo(fullfile(folder,filenames{1}));
col=InfoImage.Width;
row=InfoImage.Height;
nz=max(z);
nch=max(ch);
if InfoImage.BitDepth==16
    imstack=zeros(row,col,nz,nch,'uint16');
elseif InfoImage.BitDepth==8
    imstack=zeros(row,col,nz,nch,'uint8');
else
    error('Unknown bit depth !');
end

for i=1:nfile
    tif = Tiff(fullfile(folder,filenames{i}), 'r');
    imstack(:,:,z(i),ch(i))=tif.read();
end
tif.close();

if InfoImage.BitDepth==16  % 12bit
    imstack=uint8(imstack/(4095/255));%2^12   2^8
end

end

function [z, ch]=get_tif_z_ch_from_filename(filename)

matchc = regexp(filename, '[cC][0-9]+', 'match');
ch=sscanf(matchc{end},'%*c%d');
matchz = regexp(filename, '[zZ][0-9]+', 'match');
z=sscanf(matchz{end},'%*c%d');

end