IRootLab
An Open-Source MATLAB toolbox for vibrational biospectroscopy
dataio_db.m
Go to the documentation of this file.
1 %> @file
2 %> @ingroup sheware
3 %
4 %> @brief Dataset loader/saver for the SHEWare database
5 classdef dataio_db < dataio
6  properties
7  idexperiment = [];
8  iddomain = [];
9  idjudge = [];
10  iddeact = [];
11  idtray = [];
12  end;
13 
14  methods
15  function data = load(o)
16  flag_deact = ~isempty(o.iddeact);
17  if flag_deact
18  fielddeact = '(flag_inactive is null or flag_inactive = 0) as flag_active, ';
19  fielddeact2 = 'flag_active';
20  wheredeact = ' AND (flag_inactive is null or flag_inactive = 0)';
21  ljdeact = [' LEFT JOIN deact_spectrum ON deact_spectrum.idspectrum = spectrum.id and deact_spectrum.iddeact = ' mat2str(o.iddeact)];
22  else
23  fielddeact = '';
24  fielddeact2 = '';
25  wheredeact = '';
26  ljdeact = '';
27  end;
28 
29 
30  disp('-- Doing the BIG select ... --')
31 
32  s_joins = [' LEFT JOIN series ON series.idspectrum = spectrum.id and series.iddomain = ' mat2str(o.iddomain) ljdeact ...
33  ' LEFT JOIN colony ON colony.id = spectrum.idcolony'];
34 
35  s_fields = ['spectrum.id as idspectrum, spectrum.file_name, colony.id as colony_id, colony.code as colony_code, ' fielddeact 'series.vector, series.id as series_id'];
36  a_outputs = [{'idspectrum', 'file_name', 'colony_id', 'colony_code'}, fielddeact2, {'vector', 'series_id'}];
37  s_outputs_params = [];
38  s_wheres = [' WHERE spectrum.idexperiment = ' mat2str(o.idexperiment) wheredeact];
39  for i_judge = 1:length(o.idjudge)
40  s_ij = mat2str(i_judge);
41  fieldij = ['params' s_ij];
42  s_fields = [s_fields ', sj' s_ij '.params as ' fieldij];
43  s_joins = [s_joins ' LEFT JOIN spectrum_judge sj' s_ij ' on sj' s_ij '.idspectrum = spectrum.id and ' ...
44  'sj' s_ij '.idjudge = ' mat2str(o.idjudge(i_judge))];
45 
46  a_outputs = [a_outputs, fieldij];
47 
48  if ~isempty(s_outputs_params)
49  s_outputs_params = [s_outputs_params ', '];
50  end;
51  s_outputs_params = [s_outputs_params fieldij];
52  end;
53 
54 
55  if ~isempty(o.idtray)
56  s_joins = [s_joins ' LEFT JOIN slide on slide.id = colony.idslide LEFT JOIN tray on tray.id = slide.idtray'];
57  s_wheres = [s_wheres ' AND tray.id = ' int2str(o.idtray)];
58  end;
59 
60  s_select = ['SELECT ' s_fields ' FROM spectrum ' s_joins s_wheres ' HAVING series.id > 0 ORDER BY spectrum.idcolony, spectrum.id'];
61  disp(s_select);
62  a = irquery(s_select); %#ok<NASGU>
63  for i = 1:numel(a_outputs)
64  eval([a_outputs{i}, ' = a.', a_outputs{i}, ';']);
65  end;
66  params_s = eval(['{' s_outputs_params '}']);
67 
68  disp('-- ... done --')
69 
70  no_obs = length(idspectrum);
71  a = irquery(['select wncount, wn1, wn2 from domain where id = ' mat2str(o.iddomain)]);
72  no_wn = a.wncount; wn1 = a.wn1; wn2 = a.wn2;
73  no_judges = length(params_s);
74 
75  data = irdata(); % Creates new dataset object
76  data.classlabels = {};
77  data.fea_x = linspace(wn1, wn2, no_wn);
78  X = zeros(no_obs, no_wn);
79  data.classes = zeros(no_obs, 1);
80  data.obsids = idspectrum;
81  data.obsnames = file_name;
82  data.groupcodes = colony_code;
83 
84  n = 1; % pointer over data
85  nn = 0;
86 
87  cnt_ok = 0;
88 
89  for i_obs = 1:no_obs
90  vchar = char(vector{i_obs})';
91  if length(vchar) > 0
92 
93  %--- resolves X
94  try
95 % X(i_obs, :) = str2num(['[' vchar ']']);
96 % X(i_obs, :) = str2double(regexp(vchar(2:end-1), ', ', 'split'));
97  X(i_obs, :) = sscanf(vchar, '%f', [1, no_wn]);
98  catch ME
99  rethrow ME;
100  end;
101 
102  %--- resolves class
103  % . mounts a code like "A|T"
104  code = '';
105  virg = '';
106  for i_judge = 1:no_judges
107  if i_judge == 2
108  virg = '|';
109  end;
110  code = [code virg strip_code(char(params_s{i_judge}{i_obs})')];
111  end;
112 
113  % . fits code in the dataset
114  find_indexes = find(strcmp(data.classlabels, code));
115  if isempty(find_indexes)
116  data.classlabels{end+1} = code;
117  data.classes(i_obs) = data.nc-1;
118  else
119  data.classes(i_obs) = find_indexes(1)-1;
120  end
121 
122  % progress visual feedback
123  nn = nn+1;
124  if nn == 199 % arbitrary value
125  disp(sprintf('-- %5.1f %% --', i_obs/no_obs*100))
126  nn = 0;
127  end
128 
129  cnt_ok = cnt_ok+1;
130  end;
131  end
132  data.X = X;
133 
134  data.assert_not_nan();
135  data = data_sort_classlabels(data);
136  data = data.make_groupnumbers();
137 
138 
139  fprintf('%d spectra were read\n', cnt_ok);
140  end
141  end
142 end
Dataset class.
Definition: irdata.m:30
Dataset loader/saver for the SHEWare database.
Definition: dataio_db.m:5
Dataset loader/saver common class.
Definition: dataio.m:2
function data_sort_classlabels(in data)
function irquery(in varargin)
Analysis Session (AS) base class.
Definition: as.m:6
Property fea_x
feature x-axis
Definition: irdata.m:77