tadd script and function to import data written from PHP side - cosmo - front and backend for Markov-Chain Monte Carlo inversion of cosmogenic nuclide concentrations
 (HTM) git clone git://src.adamsgaard.dk/cosmo
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 4503f1a7499b1c4ca43ea9b56b376472f0343474
 (DIR) parent 7d5bb9cf840993ec45b28c4291fa22bbfe554840
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Mon, 24 Aug 2015 12:48:24 +0200
       
       add script and function to import data written from PHP side
       
       Diffstat:
         A matlab/import_php_file.m            |     124 +++++++++++++++++++++++++++++++
         A matlab/import_php_input.m           |     109 +++++++++++++++++++++++++++++++
       
       2 files changed, 233 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/matlab/import_php_file.m b/matlab/import_php_file.m
       t@@ -0,0 +1,124 @@
       +function [sampleid,name,email,lat,long,be_conc,al_conc,c_conc,ne_conc,be_uncer,al_uncer,c_uncer,ne_uncer,be_prod,al_prod,c_prod,ne_prod,rock_density,epsilon_gla_min,epsilon_gla_max,epsilon_int_min,epsilon_int_max,t_degla,t_degla_uncer,record,record_threshold_min,record_threshold_max] = import_php_file(filename, startRow, endRow)
       +%IMPORTFILE Import numeric data from a text file as column vectors.
       +%   [SAMPLEID,NAME,EMAIL,LAT,LONG,BE_CONC,AL_CONC,C_CONC,NE_CONC,BE_UNCER,AL_UNCER,C_UNCER,NE_UNCER,BE_PROD,AL_PROD,C_PROD,NE_PROD,ROCK_DENSITY,EPSILON_GLA_MIN,EPSILON_GLA_MAX,EPSILON_INT_MIN,EPSILON_INT_MAX,T_DEGLA,T_DEGLA_UNCER,RECORD,RECORD_THRESHOLD_MIN,RECORD_THRESHOLD_MAX]
       +%   = IMPORTFILE(FILENAME) Reads data from text file FILENAME for the
       +%   default selection.
       +%
       +%   [SAMPLEID,NAME,EMAIL,LAT,LONG,BE_CONC,AL_CONC,C_CONC,NE_CONC,BE_UNCER,AL_UNCER,C_UNCER,NE_UNCER,BE_PROD,AL_PROD,C_PROD,NE_PROD,ROCK_DENSITY,EPSILON_GLA_MIN,EPSILON_GLA_MAX,EPSILON_INT_MIN,EPSILON_INT_MAX,T_DEGLA,T_DEGLA_UNCER,RECORD,RECORD_THRESHOLD_MIN,RECORD_THRESHOLD_MAX]
       +%   = IMPORTFILE(FILENAME, STARTROW, ENDROW) Reads data from rows STARTROW
       +%   through ENDROW of text file FILENAME.
       +%
       +% Example:
       +%   [sampleid,name,email,lat,long,be_conc,al_conc,c_conc,ne_conc,be_uncer,al_uncer,c_uncer,ne_uncer,be_prod,al_prod,c_prod,ne_prod,rock_density,epsilon_gla_min,epsilon_gla_max,epsilon_int_min,epsilon_int_max,t_degla,t_degla_uncer,record,record_threshold_min,record_threshold_max]
       +%   = importfile('cosmo_pgpzvt',1, 1);
       +%
       +%    See also TEXTSCAN.
       +
       +% Auto-generated by MATLAB on 2015/08/24 12:47:00
       +
       +%% Initialize variables.
       +delimiter = '\t';
       +if nargin<=2
       +    startRow = 1;
       +    endRow = inf;
       +end
       +
       +%% Read columns of data as strings:
       +% For more information, see the TEXTSCAN documentation.
       +formatSpec = '%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%[^\n\r]';
       +
       +%% Open the text file.
       +fileID = fopen(filename,'r');
       +
       +%% Read columns of data according to format string.
       +% This call is based on the structure of the file used to generate this
       +% code. If an error occurs for a different file, try regenerating the code
       +% from the Import Tool.
       +dataArray = textscan(fileID, formatSpec, endRow(1)-startRow(1)+1, 'Delimiter', delimiter, 'HeaderLines', startRow(1)-1, 'ReturnOnError', false);
       +for block=2:length(startRow)
       +    frewind(fileID);
       +    dataArrayBlock = textscan(fileID, formatSpec, endRow(block)-startRow(block)+1, 'Delimiter', delimiter, 'HeaderLines', startRow(block)-1, 'ReturnOnError', false);
       +    for col=1:length(dataArray)
       +        dataArray{col} = [dataArray{col};dataArrayBlock{col}];
       +    end
       +end
       +
       +%% Close the text file.
       +fclose(fileID);
       +
       +%% Convert the contents of columns containing numeric strings to numbers.
       +% Replace non-numeric strings with NaN.
       +raw = repmat({''},length(dataArray{1}),length(dataArray)-1);
       +for col=1:length(dataArray)-1
       +    raw(1:length(dataArray{col}),col) = dataArray{col};
       +end
       +numericData = NaN(size(dataArray{1},1),size(dataArray,2));
       +
       +for col=[6,7,8,9,10,11,12,13,18,19,20,21,22,23,24,25,26,27]
       +    % Converts strings in the input cell array to numbers. Replaced non-numeric
       +    % strings with NaN.
       +    rawData = dataArray{col};
       +    for row=1:size(rawData, 1);
       +        % Create a regular expression to detect and remove non-numeric prefixes and
       +        % suffixes.
       +        regexstr = '(?<prefix>.*?)(?<numbers>([-]*(\d+[\,]*)+[\.]{0,1}\d*[eEdD]{0,1}[-+]*\d*[i]{0,1})|([-]*(\d+[\,]*)*[\.]{1,1}\d+[eEdD]{0,1}[-+]*\d*[i]{0,1}))(?<suffix>.*)';
       +        try
       +            result = regexp(rawData{row}, regexstr, 'names');
       +            numbers = result.numbers;
       +            
       +            % Detected commas in non-thousand locations.
       +            invalidThousandsSeparator = false;
       +            if any(numbers==',');
       +                thousandsRegExp = '^\d+?(\,\d{3})*\.{0,1}\d*$';
       +                if isempty(regexp(thousandsRegExp, ',', 'once'));
       +                    numbers = NaN;
       +                    invalidThousandsSeparator = true;
       +                end
       +            end
       +            % Convert numeric strings to numbers.
       +            if ~invalidThousandsSeparator;
       +                numbers = textscan(strrep(numbers, ',', ''), '%f');
       +                numericData(row, col) = numbers{1};
       +                raw{row, col} = numbers{1};
       +            end
       +        catch me
       +        end
       +    end
       +end
       +
       +
       +%% Split data into numeric and cell columns.
       +rawNumericColumns = raw(:, [6,7,8,9,10,11,12,13,18,19,20,21,22,23,24,25,26,27]);
       +rawCellColumns = raw(:, [1,2,3,4,5,14,15,16,17]);
       +
       +
       +%% Allocate imported array to column variable names
       +sampleid = rawCellColumns(:, 1);
       +name = rawCellColumns(:, 2);
       +email = rawCellColumns(:, 3);
       +lat = rawCellColumns(:, 4);
       +long = rawCellColumns(:, 5);
       +be_conc = cell2mat(rawNumericColumns(:, 1));
       +al_conc = cell2mat(rawNumericColumns(:, 2));
       +c_conc = cell2mat(rawNumericColumns(:, 3));
       +ne_conc = cell2mat(rawNumericColumns(:, 4));
       +be_uncer = cell2mat(rawNumericColumns(:, 5));
       +al_uncer = cell2mat(rawNumericColumns(:, 6));
       +c_uncer = cell2mat(rawNumericColumns(:, 7));
       +ne_uncer = cell2mat(rawNumericColumns(:, 8));
       +be_prod = rawCellColumns(:, 6);
       +al_prod = rawCellColumns(:, 7);
       +c_prod = rawCellColumns(:, 8);
       +ne_prod = rawCellColumns(:, 9);
       +rock_density = cell2mat(rawNumericColumns(:, 9));
       +epsilon_gla_min = cell2mat(rawNumericColumns(:, 10));
       +epsilon_gla_max = cell2mat(rawNumericColumns(:, 11));
       +epsilon_int_min = cell2mat(rawNumericColumns(:, 12));
       +epsilon_int_max = cell2mat(rawNumericColumns(:, 13));
       +t_degla = cell2mat(rawNumericColumns(:, 14));
       +t_degla_uncer = cell2mat(rawNumericColumns(:, 15));
       +record = cell2mat(rawNumericColumns(:, 16));
       +record_threshold_min = cell2mat(rawNumericColumns(:, 17));
       +record_threshold_max = cell2mat(rawNumericColumns(:, 18));
       +
       +
 (DIR) diff --git a/matlab/import_php_input.m b/matlab/import_php_input.m
       t@@ -0,0 +1,108 @@
       +%% Import data from text file.
       +% Script for importing data from the following text file:
       +%
       +%    /tmp/cosmo_pgpzvt
       +%
       +% To extend the code to different selected data or a different text file,
       +% generate a function instead of a script.
       +
       +% Auto-generated by MATLAB on 2015/08/24 12:46:56
       +
       +%% Initialize variables.
       +filename = '/tmp/cosmo_pgpzvt';
       +delimiter = '\t';
       +
       +%% Read columns of data as strings:
       +% For more information, see the TEXTSCAN documentation.
       +formatSpec = '%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%[^\n\r]';
       +
       +%% Open the text file.
       +fileID = fopen(filename,'r');
       +
       +%% Read columns of data according to format string.
       +% This call is based on the structure of the file used to generate this
       +% code. If an error occurs for a different file, try regenerating the code
       +% from the Import Tool.
       +dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter,  'ReturnOnError', false);
       +
       +%% Close the text file.
       +fclose(fileID);
       +
       +%% Convert the contents of columns containing numeric strings to numbers.
       +% Replace non-numeric strings with NaN.
       +raw = repmat({''},length(dataArray{1}),length(dataArray)-1);
       +for col=1:length(dataArray)-1
       +    raw(1:length(dataArray{col}),col) = dataArray{col};
       +end
       +numericData = NaN(size(dataArray{1},1),size(dataArray,2));
       +
       +for col=[6,7,8,9,10,11,12,13,18,19,20,21,22,23,24,25,26,27]
       +    % Converts strings in the input cell array to numbers. Replaced non-numeric
       +    % strings with NaN.
       +    rawData = dataArray{col};
       +    for row=1:size(rawData, 1);
       +        % Create a regular expression to detect and remove non-numeric prefixes and
       +        % suffixes.
       +        regexstr = '(?<prefix>.*?)(?<numbers>([-]*(\d+[\,]*)+[\.]{0,1}\d*[eEdD]{0,1}[-+]*\d*[i]{0,1})|([-]*(\d+[\,]*)*[\.]{1,1}\d+[eEdD]{0,1}[-+]*\d*[i]{0,1}))(?<suffix>.*)';
       +        try
       +            result = regexp(rawData{row}, regexstr, 'names');
       +            numbers = result.numbers;
       +            
       +            % Detected commas in non-thousand locations.
       +            invalidThousandsSeparator = false;
       +            if any(numbers==',');
       +                thousandsRegExp = '^\d+?(\,\d{3})*\.{0,1}\d*$';
       +                if isempty(regexp(thousandsRegExp, ',', 'once'));
       +                    numbers = NaN;
       +                    invalidThousandsSeparator = true;
       +                end
       +            end
       +            % Convert numeric strings to numbers.
       +            if ~invalidThousandsSeparator;
       +                numbers = textscan(strrep(numbers, ',', ''), '%f');
       +                numericData(row, col) = numbers{1};
       +                raw{row, col} = numbers{1};
       +            end
       +        catch me
       +        end
       +    end
       +end
       +
       +
       +%% Split data into numeric and cell columns.
       +rawNumericColumns = raw(:, [6,7,8,9,10,11,12,13,18,19,20,21,22,23,24,25,26,27]);
       +rawCellColumns = raw(:, [1,2,3,4,5,14,15,16,17]);
       +
       +
       +%% Allocate imported array to column variable names
       +sampleid = rawCellColumns(:, 1);
       +name = rawCellColumns(:, 2);
       +email = rawCellColumns(:, 3);
       +lat = rawCellColumns(:, 4);
       +long = rawCellColumns(:, 5);
       +be_conc = cell2mat(rawNumericColumns(:, 1));
       +al_conc = cell2mat(rawNumericColumns(:, 2));
       +c_conc = cell2mat(rawNumericColumns(:, 3));
       +ne_conc = cell2mat(rawNumericColumns(:, 4));
       +be_uncer = cell2mat(rawNumericColumns(:, 5));
       +al_uncer = cell2mat(rawNumericColumns(:, 6));
       +c_uncer = cell2mat(rawNumericColumns(:, 7));
       +ne_uncer = cell2mat(rawNumericColumns(:, 8));
       +be_prod = rawCellColumns(:, 6);
       +al_prod = rawCellColumns(:, 7);
       +c_prod = rawCellColumns(:, 8);
       +ne_prod = rawCellColumns(:, 9);
       +rock_density = cell2mat(rawNumericColumns(:, 9));
       +epsilon_gla_min = cell2mat(rawNumericColumns(:, 10));
       +epsilon_gla_max = cell2mat(rawNumericColumns(:, 11));
       +epsilon_int_min = cell2mat(rawNumericColumns(:, 12));
       +epsilon_int_max = cell2mat(rawNumericColumns(:, 13));
       +t_degla = cell2mat(rawNumericColumns(:, 14));
       +t_degla_uncer = cell2mat(rawNumericColumns(:, 15));
       +record = cell2mat(rawNumericColumns(:, 16));
       +record_threshold_min = cell2mat(rawNumericColumns(:, 17));
       +record_threshold_max = cell2mat(rawNumericColumns(:, 18));
       +
       +
       +%% Clear temporary variables
       +clearvars filename delimiter formatSpec fileID dataArray ans raw col numericData rawData row regexstr result numbers invalidThousandsSeparator thousandsRegExp me rawNumericColumns rawCellColumns;
       +\ No newline at end of file