Changeset 178


Ignore:
Timestamp:
Oct 21, 2011, 12:28:28 PM (6 years ago)
Author:
tjniskan
Message:
  • Added some support for Bruker spectral data.
  • Fixed a small bug in aedes_readctdata.m.

M aedes_readbruker.m
M aedes_readctdata.m
M aedes_revision.m

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • aedes_readbruker.m

    r177 r178  
    8585Dat.precision = 'double';
    8686Dat.return = 1;
     87Dat.zerofill = 'auto';
    8788
    8889if nargin == 0 || isempty(filename)
    89         [fname,fpath,findex] = uigetfile({'fid;2dseq','Bruker file formats (fid, 2dseq)';...
     90        [fname,fpath,findex] = uigetfile({'fid;fid.*;2dseq','Bruker file formats (fid, 2dseq)';...
    9091                '*.*','All Files (*.*)'},'Select Bruker file formats');
    9192        if isequal(fname,0)
     
    162163DATA.HDR.FileHeader = hdr;
    163164DATA.HDR.BlockHeader = [];
    164 DATA.HDR.fname = fn;
     165DATA.HDR.fname = [fn,fe];
    165166DATA.HDR.fpath = [fp,filesep];
    166167DATA.FTDATA = data;
    167 DATA.KSPACE = kspace;
     168if Dat.return == 1
     169        DATA.KSPACE = [];
     170        clear kspace;
     171else
     172        DATA.KSPACE = kspace;
     173end
    168174DATA.PROCPAR = [];
    169175DATA.PHASETABLE = pe1_table;
     
    340346
    341347% Reconstruct k-space
    342 [kspace,pe1_table,msg] = l_ReconstructKspace(kspace,hdr,Dat);
     348if Dat.return ~= 4
     349        [kspace,pe1_table,msg] = l_ReconstructKspace(kspace,hdr,Dat);
     350else
     351        pe1_table = l_GetPeTable(hdr);
     352end
    343353if isempty(kspace)
    344354        kspace = [];
     
    347357
    348358% Fourier transform k-space
    349 [data,msg] = l_doFFT(kspace,hdr,Dat);
    350 if isempty(data)
    351         kspace = [];
     359if any(Dat.return==[1 3])
     360        [data,msg] = l_doFFT(kspace,hdr,Dat);
     361        if isempty(data)
     362                kspace = [];
     363                data = [];
     364                return
     365        end
     366else
    352367        data = [];
    353         return
    354368end
    355369
     
    438452if ~isDataComplex
    439453        % - Read magnitude data ---------------------------------
     454        [data,count] = fread(fid,inf,precision);
     455        fclose(fid);
     456       
     457        % Reshape and permute to correct size and orientation
     458        data = reshape(data,[hdr.d3proc.IM_SIX,...
     459                hdr.d3proc.IM_SIY,...
     460                hdr.d3proc.IM_SIZ,...
     461                hdr.d3proc.IM_SIT]);
     462        data = permute(data,[2 1 3 4]);
     463       
     464        % Map integer data to single or double values
     465        if ~strcmpi(hdr.reco.RECO_wordtype,'_32BIT_FLOAT')
     466                slope = hdr.reco.RECO_map_slope;
     467                offset = hdr.reco.RECO_map_offset;
     468                if length(hdr.reco.RECO_size) == 1
     469                        nDim = 1;
     470                elseif length(hdr.reco.RECO_size) == 2
     471                        nDim = 2;
     472                elseif length(hdr.reco.RECO_size) == 3
     473                        nDim = 3;
     474                end
     475                for ii=1:length(slope)
     476                        if any(nDim == [1 2])
     477                                data(:,:,ii) = data(:,:,ii)/slope(ii)+offset(ii);
     478                        else
     479                                data(:,:,:,ii) = data(:,:,:,ii)/slope(ii)+offset(ii);
     480                        end
     481                end
     482        end
     483       
     484        % The length of RECO_transposition should be same as NI.
     485        NI = length(hdr.reco.RECO_transposition);
     486        if NI~=hdr.d3proc.IM_SIZ
     487                data = reshape(data,hdr.d3proc.IM_SIY,...
     488                        hdr.d3proc.IM_SIX,NI,[]);
     489        end
     490       
     491else
     492        % - Read complex data -----------------------------------
    440493        [data,count] = fread(fid,inf,precision);
    441494        fclose(fid);
     
    466519        end
    467520       
    468         % The length of RECO_transposition should be same as NI.
    469         NI = length(hdr.reco.RECO_transposition);
    470         if NI~=hdr.d3proc.IM_SIZ
    471                 data = reshape(data,hdr.d3proc.IM_SIY,...
    472                         hdr.d3proc.IM_SIX,NI,[]);
    473         end
    474        
    475 else
    476         % - Read complex data -----------------------------------
    477         [data,count] = fread(fid,inf,precision);
    478         fclose(fid);
    479        
    480         % Reshape and permute to correct size and orientation
    481         data = reshape(data,[hdr.d3proc.IM_SIX,...
    482                 hdr.d3proc.IM_SIY,...
    483                 hdr.d3proc.IM_SIZ,...
    484                 hdr.d3proc.IM_SIT]);
    485         data = permute(data,[2 1 3 4]);
    486        
    487         % Map integer data to single or double values
    488         if ~strcmpi(hdr.reco.RECO_wordtype,'_32BIT_FLOAT')
    489                 slope = hdr.reco.RECO_map_slope;
    490                 offset = hdr.reco.RECO_map_offset;
    491                 if length(hdr.reco.RECO_size) == 2
    492                         nDim = 2;
    493                 elseif length(hdr.reco.RECO_size) == 3
    494                         nDim = 3;
    495                 end
    496                 for ii=1:length(slope)
    497                         if nDim == 2
    498                                 data(:,:,ii) = data(:,:,ii)/slope(ii)+offset(ii);
    499                         else
    500                                 data(:,:,:,ii) = data(:,:,:,ii)/slope(ii)+offset(ii);
    501                         end
    502                 end
    503         end
    504        
    505521        data = reshape(data,hdr.reco.RECO_size(1),...
    506522                hdr.reco.RECO_size(2),...
     
    523539msg = '';
    524540
    525 
     541% Don't try to reconstruct 1D data
     542nDims = hdr.acqp.ACQ_dim;
     543if nDims == 1
     544        pe1_table = l_GetPeTable(hdr);
     545        return
     546end
    526547NI = hdr.acqp.NI; % Number of objects
    527548NSLICES = hdr.acqp.NSLICES; % Number of slices
    528549NR = hdr.acqp.NR; % Number of repetitions
    529550phase_factor = hdr.acqp.ACQ_phase_factor; % scans belonging to a single image
    530 nDims = hdr.acqp.ACQ_dim;
    531551im_size = hdr.acqp.ACQ_size;im_size(1)=im_size(1)/2;
    532552order = hdr.acqp.ACQ_obj_order;
     
    534554% Get phase table
    535555usePeTable = true;
    536 if isfield(hdr.acqp,'ACQ_spatial_phase_1')
    537         [s,pe1_table] = sort(hdr.acqp.ACQ_spatial_phase_1);
    538 elseif isfield(hdr.method,'PVM_EncSteps1')
    539         pe1_table = hdr.method.PVM_EncSteps1+(-min(hdr.method.PVM_EncSteps1(:))+1);
    540 else
    541         pe1_table = [];
     556pe1_table = l_GetPeTable(hdr);
     557if isempty(pe1_table)
    542558        usePeTable = false;
    543559end
     
    624640end
    625641
     642% Do Zero filling if requested
     643if any(AcqType == [2 3])
     644        switch Dat.zerofill
     645                case 'auto'
     646                       
     647                case 'on'
     648                       
     649                case 'off'
     650                       
     651                otherwise
     652                        warning('Unknown zerofill option "%s". Skipping zerofilling...',...
     653                                Dat.zerofill);
     654        end
     655end
     656
    626657if AcqType==1
    627   data = abs(fftshift(fft(kspace,[],1),1));
     658        %data = flipdim(abs(fftshift(fft(kspace,[],1),1)),1);
     659        data = abs(fftshift(fft(flipdim(kspace,1),[],1),1));
     660  %data = circshift(flipdim(abs(fftshift(fft(kspace,[],1),1)),1),[1 0 0]);
    628661elseif AcqType==2
    629662  data = abs(fftshift(fftshift(fft(fft(kspace,[],1),[],2),1),2));
     
    632665end
    633666
    634 
    635 
    636 
    637 
    638 
    639 
    640 
    641 
    642 
    643 
    644 
    645 
    646 
    647 
     667%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     668% Calculate phase table indexes
     669%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     670function pt = l_GetPeTable(hdr)
     671
     672if ~isfield(hdr,'acqp') || ~isfield(hdr,'method')
     673        error('Cannot determine phase table, because ACQP and/or METHODS fields are missing.')
     674end
     675
     676if isfield(hdr.acqp,'ACQ_spatial_phase_1')
     677        [s,pt] = sort(hdr.acqp.ACQ_spatial_phase_1);
     678elseif isfield(hdr.method,'PVM_EncSteps1')
     679        pt = hdr.method.PVM_EncSteps1+(-min(hdr.method.PVM_EncSteps1(:))+1);
     680else
     681        pt = [];
     682end
     683
     684
     685
     686
     687
     688
     689
     690
     691
     692
     693
  • aedes_readctdata.m

    r80 r178  
    525525  % Update waitbar
    526526  if ShowWbar
    527     hWbar=aedes_wbar(ii/nFiles,hWbar,...
    528                {['Reading file ',num2str(ii),'/',num2str(nFiles)],...
    529                 slice_files{ii}});
     527    aedes_wbar(ii/nFiles,hWbar,...
     528                        {['Reading file ',num2str(ii),'/',num2str(nFiles)],...
     529                        slice_files{ii}});
    530530  end
    531531 
     
    534534    data = [];
    535535    msg = sprintf('Could not open file "%s" for reading!', ...
    536                   slice_files{ii});
     536                        slice_files{ii});
     537                if ShowWbar
     538                        close(hWbar)
     539                end
    537540    return
    538541  end
  • aedes_revision.m

    r177 r178  
    9393% bash-script every time it is called so that this file "aedes_revision.m" is
    9494% always in the list of committed files. DO NOT EDIT THE NEXT LINE!!!
    95 % - SVN Hook -
     95% - Svn Hook -
Note: See TracChangeset for help on using the changeset viewer.

Powered by Trac 1.0.9.Copyright © Juha-Pekka Niskanen 2008