IRootLab
An Open-Source MATLAB toolbox for vibrational biospectroscopy
dataio_opus_nasse.m
Go to the documentation of this file.
1 %> @brief Dataset loader for OPUS "0" files
2 %>
3 %> Uses routine written by Michael Nasse during his time at Synchrotron Radiation Centre in Wisconsin, USA
4 %>
5 %> @sa load_opus_file2
7  methods(Access=private)
8  function clear_cubes(o)
9  % Clear globals that start with "cube_"
10  cc = who('cube_*', 'global');
11  for i = 1:numel(cc)
12  evalin('base', sprintf('clear(''global'', ''%s'');', cc{i}));
13  end;
14  end;
15  end;
16 
17  methods
18  %> Loader
19  function data = load(o, range)
20 
21  flag_range = exist('range', 'var');
22 
23  if flag_range
24  irwarning('range will be ignored');
25  end;
26 
27 
28  o.clear_cubes();
29 
30  data = irdata();
31 
32  % Clear globals that start with "cube_"
33  cc = who('cube_*', 'global');
34  for i = 1:numel(cc)
35  evalin('base', sprintf('clear(''global'', ''%s'');', cc{i}));
36  end;
37 
38  status = load_opus_file2(o.filename);
39 
40  if status ~= 0
41  irerror(sprintf('OPUS file loading returned error status %d', status));
42  end;
43 
44  cc = who('cube_*', 'global');
45 
46  if isempty(cc)
47  irerror('Couldn''t find cube variable in the global space!');
48  end;
49 
50 
51 
52  eval(['global ', cc{1}, '; cube = ', cc{1}, ';']);
53  cube = double(cube); % Comes as single, originally
54 % cube = permute(cube, [2, 1, 3]); % x-y are originally transposed
55 % cube = cube(:, end:-1:1, :); % seems to be right-to-left
56 % cube = cube(end:-1:1, :, :); % seems to be upside down
57 
58  data.X = reshape(cube, [size(cube, 1)*size(cube, 2), size(cube, 3), 1]);
59  data.X = data.X(:, end:-1:1);
60  data.height = size(cube, 1);
61  temp = 0:data.no-1;
62  data.obsnames = arrayfun(@(x, y) sprintf('x=%d, y=%d', x, y), floor(temp/data.height), mod(temp, data.height), 'UniformOutput', 0)';
63 
64  global spectral_axis;
65  data.fea_x = spectral_axis(end:-1:1);
66 
67  data.classes = zeros(size(data.X, 1), 1);
68  data.classlabels = {'Class 0'};
69 
70 
71 
72 
73  % Assigns data.classes correcting numbers for eventual non-zero-based
74  % classes
75  m = min(data.classes);
76  if m > 0
77  irwarning(sprintf('Class numbers started in %d and thus were shifted down in order to start in zero.', m));
78  data.classes = data.classes-m;
79  end;
80 
81  % Produces class labels
82  for i = 1:max(data.classes)+1
83  data.classlabels{i} = sprintf('Class %d', i-1);
84  end;
85 
86 
87  data.assert_not_nan();
88  data.filename = o.filename;
89  data.filetype = '0';
90  data = data.make_groupnumbers();
91 
92 
93  o.clear_cubes();
94  end
95 
96 
97  %> Saver
98  function o = save(o, data)
99  irerror('Sorry, IRootLab does not save files in OPUS format');
100  end;
101  end
102 end
function irerror(in s)
Dataset class.
Definition: irdata.m:30
Dataset loader/saver common class.
Definition: dataio.m:2
Analysis Session (AS) base class.
Definition: as.m:6
Dataset loader for OPUS "0" files.
function irwarning(in s)