timport_php_file.m - 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
---
timport_php_file.m (8593B)
---
1 function [sample_id, name, email, ...
2 lat, long, ...
3 be_conc, al_conc, c_conc, ne_conc, ...
4 be_uncer, al_uncer, c_uncer, ne_uncer, ...
5 zobs, ...
6 be_prod_spall, al_prod_spall, c_prod_spall, ne_prod_spall, ...
7 be_prod_muon, al_prod_muon, c_prod_muon, ne_prod_muon, ...
8 rock_density, ...
9 epsilon_gla_min, epsilon_gla_max, ...
10 epsilon_int_min, epsilon_int_max, ...
11 t_degla_min, t_degla_max, ...
12 record, record_threshold_min, record_threshold_max, ...
13 nwalkers] = ...
14 import_php_file(filename, startRow, endRow)
15
16 %% import_php_file.m
17 % Automatically generated using the `uiimport` tool in Matlab.
18 % If the output format in "uploadhistory.php" is changed, update this file
19 % accordingly.
20 % All columns are initially read as strings. Some of the columns (specified
21 % by the col vector) are converted to numbers.
22
23 %IMPORTFILE Import numeric data from a text file as column vectors.
24 % [SAMPLEID,NAME,EMAIL,LAT,LONG,BE_CONC,AL_CONC,C_CONC,NE_CONC,BE_UNCER,AL_UNCER,C_UNCER,NE_UNCER,ZOBS,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]
25 % = IMPORTFILE(FILENAME) Reads data from text file FILENAME for the
26 % default selection.
27 %
28 % [SAMPLEID,NAME,EMAIL,LAT,LONG,BE_CONC,AL_CONC,C_CONC,NE_CONC,BE_UNCER,AL_UNCER,C_UNCER,NE_UNCER,ZOBS,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]
29 % = IMPORTFILE(FILENAME, STARTROW, ENDROW) Reads data from rows STARTROW
30 % through ENDROW of text file FILENAME.
31 %
32 % Example:
33 % [sampleid,name,email,lat,long,be_conc,al_conc,c_conc,ne_conc,be_uncer,al_uncer,c_uncer,ne_uncer,be_zobs,al_zobs,c_zobs,ne_zobs,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]
34 % = importfile('cosmo_pgpzvt',1, 1);
35 %
36 % See also TEXTSCAN.
37
38 % Auto-generated by MATLAB on 2015/08/24 12:47:00
39
40 %% Initialize variables.
41 delimiter = '\t';
42 if nargin<=2
43 startRow = 1;
44 endRow = inf;
45 end
46
47 %% Read columns of data as strings:
48 % For more information, see the TEXTSCAN documentation.
49 %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]';
50 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%s%s%s%s%s%s%[^\n\r]';
51
52 %% Open the text file.
53 fileID = fopen(filename,'r');
54
55 %% Read columns of data according to format string.
56 % This call is based on the structure of the file used to generate this
57 % code. If an error occurs for a different file, try regenerating the code
58 % from the Import Tool.
59 dataArray = textscan(fileID, formatSpec, endRow(1)-startRow(1)+1, 'Delimiter', delimiter, 'HeaderLines', startRow(1)-1, 'ReturnOnError', false);
60 for block=2:length(startRow)
61 frewind(fileID);
62 dataArrayBlock = textscan(fileID, formatSpec, endRow(block)-startRow(block)+1, 'Delimiter', delimiter, 'HeaderLines', startRow(block)-1, 'ReturnOnError', false);
63 for col=1:length(dataArray)
64 dataArray{col} = [dataArray{col};dataArrayBlock{col}];
65 end
66 end
67
68 %% Close the text file.
69 fclose(fileID);
70
71 %% Convert the contents of columns containing numeric strings to numbers.
72 % Replace non-numeric strings with NaN.
73 raw = repmat({''},length(dataArray{1}),length(dataArray)-1);
74 for col=1:length(dataArray)-1
75 raw(1:length(dataArray{col}),col) = dataArray{col};
76 end
77 numericData = NaN(size(dataArray{1},1),size(dataArray,2));
78
79 % the columns in col are numeric]
80 for col=[6:29, 31:33]
81 % Converts strings in the input cell array to numbers. Replaced non-numeric
82 % strings with NaN.
83 rawData = dataArray{col};
84 for row=1:size(rawData, 1);
85 % Create a regular expression to detect and remove non-numeric prefixes and
86 % suffixes.
87 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>.*)';
88 try
89 result = regexp(rawData{row}, regexstr, 'names');
90 numbers = result.numbers;
91
92 % Detected commas in non-thousand locations.
93 invalidThousandsSeparator = false;
94 if any(numbers==',');
95 thousandsRegExp = '^\d+?(\,\d{3})*\.{0,1}\d*$';
96 if isempty(regexp(thousandsRegExp, ',', 'once'));
97 numbers = NaN;
98 invalidThousandsSeparator = true;
99 end
100 end
101 % Convert numeric strings to numbers.
102 if ~invalidThousandsSeparator;
103 numbers = textscan(strrep(numbers, ',', ''), '%f');
104 numericData(row, col) = numbers{1};
105 raw{row, col} = numbers{1};
106 end
107 catch me
108 end
109 end
110 end
111
112
113 %% Split data into numeric and cell columns.
114
115 % rows with numbers, check that range matches values in for loop l. 68 and
116 % the list below
117 rawNumericColumns = raw(:, [6:29, 31:33]);
118
119 % rows with strings
120 rawCellColumns = raw(:, [1:5, 30]);
121
122
123 %% Allocate imported array to column variable names
124 % use rawCellColumns(:, i) for text fields and
125 % cell2mat(rawNumericColumns(:, i)) for numeric fields
126 sample_id = rawCellColumns(:, 1); % 1
127 name = rawCellColumns(:, 2); % 2
128 email = rawCellColumns(:, 3); % 3
129 lat = rawCellColumns(:, 4); % 4
130 long = rawCellColumns(:, 5); % 5
131 be_conc = cell2mat(rawNumericColumns(:, 1)); % 6
132 al_conc = cell2mat(rawNumericColumns(:, 2)); % 7
133 c_conc = cell2mat(rawNumericColumns(:, 3)); % 8
134 ne_conc = cell2mat(rawNumericColumns(:, 4)); % 9
135 be_uncer = cell2mat(rawNumericColumns(:, 5)); % 10
136 al_uncer = cell2mat(rawNumericColumns(:, 6)); % 11
137 c_uncer = cell2mat(rawNumericColumns(:, 7)); % 12
138 ne_uncer = cell2mat(rawNumericColumns(:, 8)); % 13
139 zobs = cell2mat(rawNumericColumns(:, 9)); % 14
140 be_prod_spall = cell2mat(rawNumericColumns(:, 10)); % 15
141 al_prod_spall = cell2mat(rawNumericColumns(:, 11)); % 16
142 c_prod_spall = cell2mat(rawNumericColumns(:, 12)); % 17
143 ne_prod_spall = cell2mat(rawNumericColumns(:, 13)); % 18
144 be_prod_muon = cell2mat(rawNumericColumns(:, 14)); % 19
145 al_prod_muon = cell2mat(rawNumericColumns(:, 15)); % 20
146 c_prod_muon = cell2mat(rawNumericColumns(:, 16)); % 21
147 ne_prod_muon = cell2mat(rawNumericColumns(:, 17)); % 22
148 rock_density = cell2mat(rawNumericColumns(:, 18)); % 23
149 epsilon_gla_min = cell2mat(rawNumericColumns(:, 19)); % 24
150 epsilon_gla_max = cell2mat(rawNumericColumns(:, 20)); % 25
151 epsilon_int_min = cell2mat(rawNumericColumns(:, 21)); % 26
152 epsilon_int_max = cell2mat(rawNumericColumns(:, 22)); % 27
153 t_degla_min = cell2mat(rawNumericColumns(:, 23)); % 28
154 t_degla_max = cell2mat(rawNumericColumns(:, 24)); % 29
155 record = rawCellColumns(:, 6); % 30
156 record_threshold_min = cell2mat(rawNumericColumns(:, 25)); % 31
157 record_threshold_max = cell2mat(rawNumericColumns(:, 26)); % 32
158 nwalkers = cell2mat(rawNumericColumns(:, 27)); % 33
159
160
161 %% Change units
162 be_conc = be_conc*1000.; % atoms/g to atoms/kg
163 al_conc = al_conc*1000.; % atoms/g to atoms/kg
164 c_conc = c_conc*1000.; % atoms/g to atoms/kg
165 ne_conc = ne_conc*1000.; % atoms/g to atoms/kg
166
167 be_prod_spall = be_prod_spall*1000.; % atoms/g/yr to atoms/kg/yr
168 al_prod_spall = al_prod_spall*1000.; % atoms/g/yr to atoms/kg/yr
169 c_prod_spall = c_prod_spall*1000.; % atoms/g/yr to atoms/kg/yr
170 ne_prod_spall = ne_prod_spall*1000.; % atoms/g/yr to atoms/kg/yr
171
172 be_prod_muon = be_prod_muon*1000.; % atoms/g/yr to atoms/kg/yr
173 al_prod_muon = al_prod_muon*1000.; % atoms/g/yr to atoms/kg/yr
174 c_prod_muon = c_prod_muon*1000.; % atoms/g/yr to atoms/kg/yr
175 ne_prod_muon = ne_prod_muon*1000.; % atoms/g/yr to atoms/kg/yr
176
177 be_uncer = be_uncer/100.; % percent to fraction
178 al_uncer = al_uncer/100.; % percent to fraction
179 c_uncer = c_uncer/100.; % percent to fraction
180 ne_uncer = ne_uncer/100.; % percent to fraction
181
182 epsilon_gla_min = epsilon_gla_min/1.0e6; % m/Myr to m/yr
183 epsilon_gla_max = epsilon_gla_max/1.0e6; % m/Myr to m/yr
184 epsilon_int_min = epsilon_int_min/1.0e6; % m/Myr to m/yr
185