Changeset 194


Ignore:
Timestamp:
Feb 17, 2012, 1:10:34 PM (7 years ago)
Author:
tjniskan
Message:
  • aedes_readjcamp now correctly reads matrices from JCAMP files into cell arrays.
  • aedes_readbruker now tries to read information from acqp and method files when opening a 2dseq file.
  • aedes_readbruker now reads also visu_pars file and uses that to read the 2dseq file if reco file is not found.

M aedes_readbruker.m
M aedes_readjcamp.m
M aedes_revision.m

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • aedes_readbruker.m

    r193 r194  
    273273% Read reco file
    274274reco_file = [fp,filesep,'reco'];
    275 if exist(reco_file,'file')~=2
    276         warning('Cannot find RECO file in "%s"',fp);
    277 else
     275if exist(reco_file,'file')==2
    278276        try
    279277                hdr.reco = aedes_readjcamp(reco_file);
     
    286284end
    287285
     286% Read visu_pars file
     287visu_pars_file = [fp,filesep,'visu_pars'];
     288if exist(visu_pars_file,'file')==2
     289        try
     290                hdr.visu_pars = aedes_readjcamp(visu_pars_file);
     291        catch
     292                hdr = [];
     293                msg = sprintf('Error while reading "%s". The error was "%s".',...
     294                        reco_file,lasterr);
     295                return
     296        end
     297end
     298
     299% Read also acqp and method files if they exist
     300ind = find(fp==filesep);
     301if length(ind) >= 2
     302        fp_fid = fp(1:ind(end-1));
     303       
     304        % Try to read ACQP file
     305        acqp_file = [fp_fid,filesep,'acqp'];
     306        if exist(acqp_file,'file')==2
     307                hdr.acqp = aedes_readjcamp(acqp_file);
     308        end
     309       
     310        % Try to read Method file
     311        method_file = [fp_fid,filesep,'method'];
     312        if exist(method_file,'file')==2
     313                hdr.method = aedes_readjcamp(method_file);
     314        end
     315end
     316
     317% Check that either RECO or VISU_PARS file is found
     318if exist(reco_file,'file')~=2 && exist(visu_pars_file,'file')~=2
     319        warning('AEDES_READBRUKER:RecoVisuParsNotFound','Cannot find RECO and VISU_PARS files in "%s".',fp);
     320end
     321
    288322% Check for Functional Imaging Tool files
    289323if exist([fp,filesep,'fun'],'dir') == 7
     
    358392if Dat.return ~= 4
    359393        % Issue a warning that reconstruction of raw data is experimental
    360         warning('READBRUKER:RawDataReconstructionExperimental',...
     394        warning('AEDES_READBRUKER:RawDataReconstructionExperimental',...
    361395                'The reconstruction of raw bruker data is EXPERIMENTAL and may work correctly.');
    362396       
     
    404438        else
    405439                msg = sprintf('Unknown word type "%s".',hdr.reco.RECO_wordtype);
     440                return
     441        end
     442elseif isfield(hdr,'visu_pars')
     443        if strcmpi(hdr.visu_pars.VisuCoreWordType,'_8BIT_UNSGN_INT')
     444                precision = ['uint8=>',Dat.precision];
     445        elseif strcmpi(hdr.visu_pars.VisuCoreWordType,'_16BIT_SGN_INT')
     446                precision = ['int16=>',Dat.precision];
     447        elseif strcmpi(hdr.visu_pars.VisuCoreWordType,'_32BIT_SGN_INT')
     448                precision = ['int32=>',Dat.precision];
     449        elseif strcmpi(hdr.visu_pars.VisuCoreWordType,'_32BIT_FLOAT')
     450                precision = ['single=>',Dat.precision];
     451        else
     452                msg = sprintf('Unknown word type "%s".',hdr.visu_pars.VisuCoreWordType);
    406453                return
    407454        end
     
    431478                byteorder = 'ieee-be';
    432479        end
     480elseif isfield(hdr,'visu_pars')
     481        if strcmpi(hdr.visu_pars.VisuCoreByteOrder,'littleEndian')
     482                byteorder = 'ieee-le';
     483        else
     484                byteorder = 'ieee-be';
     485        end
    433486else
    434487        % Use little endian if no information is available
     
    463516end
    464517
     518% Check if word type is float
     519isWordFloat = false;
     520if isfield(hdr,'reco') && strcmpi(hdr.reco.RECO_wordtype,'_32BIT_FLOAT')
     521        isWordFloat = true;
     522elseif isfield(hdr,'visu_pars') && strcmpi(hdr.visu_pars.VisuCoreWordType,'_32BIT_FLOAT')
     523        isWordFloat = true;
     524end
     525
    465526% Read data
     527
     528% - Read magnitude data ---------------------------------
     529[data,count] = fread(fid,inf,precision);
     530fclose(fid);
     531
     532% Reshape and permute to correct size and orientation
     533data = reshape(data,[hdr.d3proc.IM_SIX,...
     534        hdr.d3proc.IM_SIY,...
     535        hdr.d3proc.IM_SIZ,...
     536        hdr.d3proc.IM_SIT]);
     537data = permute(data,[2 1 3 4]);
     538
     539% Map integer data to single or double values
     540slope = [];
     541offset = [];
     542if isfield(hdr,'reco') && ~isWordFloat
     543        slope = hdr.reco.RECO_map_slope;
     544        offset = hdr.reco.RECO_map_offset;
     545        nDim = length(hdr.reco.RECO_size);
     546elseif isfield(hdr,'visu_pars') && ~isWordFloat
     547        % Try to get the scaling information from visu_pars if reco file could
     548        % not be found...
     549        slope = hdr.visu_pars.VisuCoreDataSlope;
     550        offset = hdr.visu_pars.VisuCoreDataOffs;
     551        nDim = length(hdr.visu_pars.VisuCoreSize);
     552elseif ~isWordFloat
     553        warning('AEDES_READBRUKER:ScalingInformationNotFound',...
     554                'Scaling information for 2dseq data was not found. Integer data is not scaled.');
     555end
     556
     557if ~isempty(slope) && ~isempty(offset)
     558        for ii=1:length(slope)
     559                if any(nDim == [1 2])
     560                        data(:,:,ii) = data(:,:,ii)/slope(ii)+offset(ii);
     561                else
     562                        data(:,:,:,ii) = data(:,:,:,ii)/slope(ii)+offset(ii);
     563                end
     564        end
     565end
     566
    466567if ~isDataComplex
    467         % - Read magnitude data ---------------------------------
    468         [data,count] = fread(fid,inf,precision);
    469         fclose(fid);
    470        
    471         % Reshape and permute to correct size and orientation
    472         data = reshape(data,[hdr.d3proc.IM_SIX,...
    473                 hdr.d3proc.IM_SIY,...
    474                 hdr.d3proc.IM_SIZ,...
    475                 hdr.d3proc.IM_SIT]);
    476         data = permute(data,[2 1 3 4]);
    477        
    478         % Map integer data to single or double values
    479         if ~strcmpi(hdr.reco.RECO_wordtype,'_32BIT_FLOAT')
    480                 slope = hdr.reco.RECO_map_slope;
    481                 offset = hdr.reco.RECO_map_offset;
    482                 if length(hdr.reco.RECO_size) == 1
    483                         nDim = 1;
    484                 elseif length(hdr.reco.RECO_size) == 2
    485                         nDim = 2;
    486                 elseif length(hdr.reco.RECO_size) == 3
    487                         nDim = 3;
    488                 end
    489                 for ii=1:length(slope)
    490                         if any(nDim == [1 2])
    491                                 data(:,:,ii) = data(:,:,ii)/slope(ii)+offset(ii);
    492                         else
    493                                 data(:,:,:,ii) = data(:,:,:,ii)/slope(ii)+offset(ii);
    494                         end
    495                 end
    496         end
    497568       
    498569        % The length of RECO_transposition should be same as NI.
    499         NI = length(hdr.reco.RECO_transposition);
    500         if NI~=hdr.d3proc.IM_SIZ
    501                 data = reshape(data,hdr.d3proc.IM_SIY,...
    502                         hdr.d3proc.IM_SIX,NI,[]);
     570        if isfield(hdr,'reco')
     571                NI = length(hdr.reco.RECO_transposition);
     572                if NI~=hdr.d3proc.IM_SIZ
     573                        data = reshape(data,hdr.d3proc.IM_SIY,...
     574                                hdr.d3proc.IM_SIX,NI,[]);
     575                end
    503576        end
    504577       
    505578else
    506         % - Read complex data -----------------------------------
    507         [data,count] = fread(fid,inf,precision);
    508         fclose(fid);
    509        
    510         % Reshape and permute to correct size and orientation
    511         data = reshape(data,[hdr.d3proc.IM_SIX,...
    512                 hdr.d3proc.IM_SIY,...
    513                 hdr.d3proc.IM_SIZ,...
    514                 hdr.d3proc.IM_SIT]);
    515         data = permute(data,[2 1 3 4]);
    516        
    517         % Map integer data to single or double values
    518         if ~strcmpi(hdr.reco.RECO_wordtype,'_32BIT_FLOAT')
    519                 slope = hdr.reco.RECO_map_slope;
    520                 offset = hdr.reco.RECO_map_offset;
    521                 if length(hdr.reco.RECO_size) == 2
    522                         nDim = 2;
    523                 elseif length(hdr.reco.RECO_size) == 3
    524                         nDim = 3;
    525                 end
    526                 for ii=1:length(slope)
    527                         if nDim == 2
    528                                 data(:,:,ii) = data(:,:,ii)/slope(ii)+offset(ii);
    529                         else
    530                                 data(:,:,:,ii) = data(:,:,:,ii)/slope(ii)+offset(ii);
    531                         end
    532                 end
    533         end
    534        
    535579        data = reshape(data,hdr.reco.RECO_size(1),...
    536580                hdr.reco.RECO_size(2),...
  • aedes_readjcamp.m

    r189 r194  
    124124end
    125125
    126 % Remove string identifiers
     126% Handle strings and string lists
    127127if val(1) == '<' && val(end) == '>'
    128         val = val(2:end-1);
    129         out = val;
    130         return
    131 end
    132 
    133 % Check if the string contains numbers at all before tryin to convert to a
     128        val(val=='<')='''';
     129        val(val=='>')='''';
     130        out = eval(['{',val,'}']);
     131        if length(out) == 1
     132                out = out{1};
     133        end
     134        return
     135end
     136
     137% Handle cell matrices
     138if val(1) == '(' && val(end) == ')'
     139        nRows = length(find(val==')'));
     140       
     141        val(1) = '';
     142        val(end) = '';
     143        val(val=='(')='';
     144        val(val==')')=',';
     145        val(val=='<')='';
     146        val(val=='>')='';
     147       
     148        % Split using the commas
     149        val_split = regexp(val,',\s*','split');
     150        val_out = cell(size(val_split));
     151       
     152        % Try to convert to numbers
     153        for ii = 1:length(val_split)
     154                num = str2double(val_split{ii});
     155                if isnan(num)
     156                        val_out{ii} = val_split{ii};
     157                else
     158                        val_out{ii} = num;
     159                end
     160        end
     161       
     162        out = reshape(val_out,[],nRows).';
     163        return
     164end
     165
     166% Check if the string contains only numbers before tryin to convert to a
    134167% number. str2num uses eval command and if the string matches to a
    135168% function name strange things can happen...
    136 tmp2 = regexp(val,'.*\d.*');
    137 if isempty(tmp2)
     169tmp2 = regexp(val,'[^\d\.\seE-+]');
     170if ~isempty(tmp2)
    138171        out = val;
    139172        return
  • aedes_revision.m

    r193 r194  
    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