Changeset 177 for aedes_readbruker.m


Ignore:
Timestamp:
Sep 15, 2011, 10:13:39 AM (8 years ago)
Author:
tjniskan
Message:
  • Added support for reading complex data from bruker 2dseq files.
  • Fixed scaling of 3D data from 2dseq files.
  • Aedes now prompts for handling of complex data (absolute, real

or imag parts) if only complex data is read from a file.

  • Added an option for EPI phase correction in aedes_readvnmr and epi_recon

M aedes_readbruker.m
M aedes_readvnmr.m
M aedes.m
M aedes_revision.m
M vnmr_recon/epi_recon.m

File:
1 edited

Legend:

Unmodified
Added
Removed
  • aedes_readbruker.m

    r176 r177  
    5252%        'wbar'        : [ {'on'} | 'off' ]     % Show/hide waitbar
    5353%
     54%        'Precision'   : [{'double'}|'single']  % The precision for the
     55%                                               % reconstructed and scaled
     56%                                               % data. (default='double')
     57%
    5458%
    5559% Examples:
     
    8084Dat.showWbar = true;
    8185Dat.precision = 'double';
     86Dat.return = 1;
    8287
    8388if nargin == 0 || isempty(filename)
     
    95100if strcmpi(fn,'fid')
    96101        isRawData = true;
     102        data_format = aedes_getdataformat(filename);
     103        if strcmpi(data_format,'vnmr')
     104                error('aedes_readbruker cannot read Varian FID-files. Use aedes_readvnmr instead.');
     105        end
    97106elseif strcmpi(fn,'2dseq')
    98107        isRawData = false;
     
    103112% Check varargin length
    104113if rem(length(varargin),2)==1
    105         error('Arguments may only include filename and param/value pairs.')
     114        error('Input arguments may only include filename and param/value pairs.')
    106115end
    107116
    108117% Parse varargin
    109118for ii=1:2:length(varargin)
    110        
     119        param = varargin{ii};
     120        if ~ischar(param) || isempty(param)
     121                error('Parameters must be strings.')
     122        end
     123        value = varargin{ii+1};
     124        switch lower(param)
     125                case 'wbar'
     126                        Dat.wbar = value;
     127                case 'precision'
     128                        Dat.precision = value;
     129                case 'return'
     130                        if ~isnumeric(value) || ~isscalar(value) || isempty(value) || ...
     131                                        isnan(value) || ~isreal(value) || (value-floor(value)) ~= 0 || ...
     132                                        value < 1 || value > 4
     133                                error('Invalid return value. Return value can be an integer in the range 1..4')
     134                        end
     135                        Dat.return = value;
     136                otherwise
     137                        error('Unknown parameter "%s".',param)
     138        end
    111139end
    112140
     
    127155        pe1_table = [];
    128156end
    129 if isempty(data)
     157if isempty(data) && isempty(kspace)
    130158        DATA = [];
    131159        error(msg);
     
    424452                slope = hdr.reco.RECO_map_slope;
    425453                offset = hdr.reco.RECO_map_offset;
     454                if length(hdr.reco.RECO_size) == 2
     455                        nDim = 2;
     456                elseif length(hdr.reco.RECO_size) == 3
     457                        nDim = 3;
     458                end
    426459                for ii=1:length(slope)
    427                         data(:,:,ii) = data(:,:,ii)/slope(ii)+offset(ii);
     460                        if nDim == 2
     461                                data(:,:,ii) = data(:,:,ii)/slope(ii)+offset(ii);
     462                        else
     463                                data(:,:,:,ii) = data(:,:,:,ii)/slope(ii)+offset(ii);
     464                        end
    428465                end
    429466        end
     
    438475else
    439476        % - Read complex data -----------------------------------
    440         msg = 'Reading complex data from 2dseq has not been implemented yet.';
    441         if Dat.showWbar
    442                 close(wbh);
    443         end
     477        [data,count] = fread(fid,inf,precision);
    444478        fclose(fid);
    445         return
     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       
     505        data = reshape(data,hdr.reco.RECO_size(1),...
     506                hdr.reco.RECO_size(2),...
     507                hdr.reco.RECO_size(3),[]);
     508       
     509        kspace = complex(data(:,:,:,1),data(:,:,:,2));
     510        data = [];
    446511end
    447512
Note: See TracChangeset for help on using the changeset viewer.

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