чтение ковариационной матрицы из файла журнала FACSIMILE в MATLAB - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь получить ковариационную матрицу из файла журнала FACSIMILE (это просто обычный текстовый файл с расширением .log), а также строковый массив или аналогичный список с именами параметровв том порядке, в котором файл их поместил.

Я включил соответствующий раздел файла журнала.В этом случае это происходит в строке 3285, хотя они имеют тенденцию перемещаться - и ковариационная матрица, и блок, в котором перечислены имена параметров, могут быть идентифицированы по их заголовкам!

FITTED VALUES, ACCURACIES AND CONFIDENCE LIMITS


NO.   NAME                       VALUE       SDLN   5 PERCENT  95 PERCENT
   1 KA1                        5.2353E-04  0.1809  3.8880E-04  7.0496E-04
   2 KA2                        6.7624E-02  0.3834  3.5994E-02  1.2705E-01
   3 KD1                        3.5626E-05  0.9008  8.0949E-06  1.5679E-04
   4 KD2                        1.3444E-01  0.3023  8.1764E-02  2.2104E-01
   5 KAA1                       4.7226E-04  1.8292  2.3302E-05  9.5715E-03
   6 KAA2                       1.7067E+04  1.7779  9.1613E+02  3.1793E+05
   7 KAAAA                      1.8234E+02  0.3205  1.0763E+02  3.0893E+02
   8 R1                         1.3568E+00  0.1278  1.0996E+00  1.6743E+00
   9 R2                         2.9313E-01  0.0268  2.8048E-01  3.0635E-01
  10 R3                         1.3338E-01  0.0303  1.2689E-01  1.4021E-01
  11 T1B                        9.9068E-01  0.2833  6.2163E-01  1.5788E+00
  12 T2B                        3.4526E-01  0.2362  2.3412E-01  5.0918E-01
  13 KM11                       3.5125E-04  0.1825  2.6015E-04  4.7425E-04
  14 KM21                       3.5625E-04  0.1881  2.6144E-04  4.8544E-04
  15 KM31                       1.5056E-04  0.1899  1.1016E-04  2.0576E-04
  16 CTRANSFORM                 1.9530E-01  0.2302  1.3374E-01  2.8518E-01

  CORRELATION MATRIX COMPONENTS

 COLUMN     1      2      3      4      5      6      7      8      9     10
           11     12     13     14     15     16

 ROW    1  1.000  0.277  0.048  0.336 -0.360  0.444  0.310 -0.767 -0.448 -0.471
          -0.784 -0.484 -0.761 -0.875 -0.882  0.782

 ROW    2  0.277  1.000  0.235  0.910 -0.136  0.478  0.222  0.140 -0.144 -0.294
           0.186 -0.275  0.255  0.054  0.001 -0.229

 ROW    3  0.048  0.235  1.000  0.338 -0.021  0.122  0.416  0.109  0.565  0.144
           0.073 -0.366  0.152  0.083  0.107 -0.129

 ROW    4  0.336  0.910  0.338  1.000 -0.306  0.364  0.554  0.242 -0.269 -0.137
           0.237 -0.065  0.315  0.103  0.036 -0.283

 ROW    5 -0.360 -0.136 -0.021 -0.306  1.000 -0.454 -0.325  0.035  0.547  0.404
           0.064 -0.271  0.058  0.122  0.105 -0.066

 ROW    6  0.444  0.478  0.122  0.364 -0.454  1.000 -0.119 -0.252 -0.329 -0.943
          -0.189 -0.254 -0.212 -0.340 -0.238  0.218

 ROW    7  0.310  0.222  0.416  0.554 -0.325 -0.119  1.000  0.150 -0.156  0.301
           0.041  0.124  0.158  0.065  0.044 -0.116

 ROW    8 -0.767  0.140  0.109  0.242  0.035 -0.252  0.150  1.000  0.088  0.408
           0.990  0.676  0.979  0.964  0.935 -0.984

 ROW    9 -0.448 -0.144  0.565 -0.269  0.547 -0.329 -0.156  0.088  1.000  0.424
           0.094 -0.480  0.157  0.245  0.262 -0.154

 ROW   10 -0.471 -0.294  0.144 -0.137  0.404 -0.943  0.301  0.408  0.424  1.000
           0.336  0.236  0.388  0.473  0.364 -0.384

 ROW   11 -0.784  0.186  0.073  0.237  0.064 -0.189  0.041  0.990  0.094  0.336
           1.000  0.639  0.979  0.959  0.933 -0.986

 ROW   12 -0.484 -0.275 -0.366 -0.065 -0.271 -0.254  0.124  0.676 -0.480  0.236
           0.639  1.000  0.573  0.604  0.591 -0.592

 ROW   13 -0.761  0.255  0.152  0.315  0.058 -0.212  0.158  0.979  0.157  0.388
           0.979  0.573  1.000  0.971  0.944 -0.998

 ROW   14 -0.875  0.054  0.083  0.103  0.122 -0.340  0.065  0.964  0.245  0.473
           0.959  0.604  0.971  1.000  0.977 -0.977

 ROW   15 -0.882  0.001  0.107  0.036  0.105 -0.238  0.044  0.935  0.262  0.364
           0.933  0.591  0.944  0.977  1.000 -0.948

 ROW   16  0.782 -0.229 -0.129 -0.283 -0.066  0.218 -0.116 -0.984 -0.154 -0.384
          -0.986 -0.592 -0.998 -0.977 -0.948  1.000

Если вы можете помочькаждый, кто использует FACSIMILE, будет благодарен!

1 Ответ

0 голосов
/ 25 апреля 2018

Я написал код, который поможет вам на полпути! Это читается в оценках параметров из таблицы выше ковариационной матрицы.

function out = GET_parameter_estimates_from_LogFile(FileAddress)

out                              = cell(0);

%sometimes its a cell
if iscell(FileAddress)
    FileAddress=FileAddress{1};
end

%open it!
fid = fopen(FileAddress,'r');

if fid<0 %the file doesnt exist
    display(['the file ',FileAddress,' is missing'])
    out={};
else %the file exists

TableNumber=0
while ~feof(fid)
        %there are multiple tables of parameter values in the file and we want
    %parameter values from all of them!
    TableNumber=TableNumber+1;
    % Find the line the (next) table starts on!
    while ~feof(fid)
        line = fgetl(fid);
        %is the 5 percent and 95 percent enough of a marker to identify the
        %header line?
        if ~isempty(strfind(line,'PARAMETER NUMBER,')) && ~isempty(strfind(line,'TYPE,'))
            break %found a part of the logfile where parameter values are listed
        end
    end 

    if exist('line','var')
    line(strfind(line,'NUMBER')-1)='_';
    else
        display('cant find the SDLN table in ', FileAddress,'using Dummy logfile') 
    end

    if length(line)>1 % don't do anything if its the last line of the file which is length 1
        header                             = textscan(line,'%s','delimiter',' ');
        header                             = header{1};
        unwanted_elems                     = zeros(0);
        for i=1:length(header)
            if isempty(header{i})
                unwanted_elems(end+1)=i;
            end
        end
        if ~isempty(unwanted_elems)
            header(unwanted_elems)=[];
        end
        if size(header,1) > size(header,2)
            header = header';
        end
        out(1,:,TableNumber)=header;
        k=2;

        % get  the stuff under the header
        while ~feof(fid)
            line = fgetl(fid);
            %first non-table line is just a single space
            if length(line)<=1
                break
            end
            header = textscan(line,'%s','delimiter',' ');
            header = header{1};
            unwanted_elems = zeros(0);
            for i=1:length(header)
                if isempty(header{i})
                    unwanted_elems(end+1)=i;
                end
            end
            if ~isempty(unwanted_elems)
                header(unwanted_elems)=[];
            end
            if size(header,1) > size(header,2)
                header = header';
            end
            out(k,:,TableNumber)=header;
            k=k+1;
        end
    end
end
    fclose(fid);
end

%out is the output
end
...