diff toolboxes/MIRtoolbox1.3.2/somtoolbox/preprocess.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/preprocess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6642 @@
+function preprocess(sData,arg2)
+
+%PREPROCESS  A GUI for data preprocessing.
+%
+%  preprocess(sData)
+%
+%    preprocess(sData)
+%
+% Launches a preprocessing GUI. The optional input argument can be
+% either a data struct or a struct array of such. However, primarily
+% the processed data sets are loaded to the application using the
+% tools in the GUI. Also, the only way to get the preprocessed data
+% sets back into the workspace is to use the tools in the GUI (press
+% the button DATA SET MANAGEMENT).
+%  
+% For a more throughout description, see online documentation.
+% See also SOM_GUI. 
+
+%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% IN FILES: preprocess.html,preproc.jpg,sDman.jpg,clip.jpg,delay.jpg,window.jpg,selVect.jpg
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas
+% Copyright (c) by Juha Parhankangas and the SOM Toolbox team
+
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 050100
+
+global no_of_sc  % every Nth component in 'relative values' is drawn stronger.
+no_of_sc=5;
+
+if nargin < 1 | nargin > 2 
+  error('Invalid number of input arguments');
+  return;
+end
+  
+if nargin == 1, arg2=[]; end
+
+if ~isstr(sData)   %%% Preprocess is started...
+data.LOG{1}='% Starting the ''Preprocess'' -window...';
+data.LOG{2}=cat(2,'preprocess(',...
+                     sprintf('%s);',inputname(1)));
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+if ~isempty(pre_h)
+  figure(pre_h);
+  msgbox('''Preprocess''-figure already exists.');
+  return;
+end
+
+h0 = figure('Color',[0.8 0.8 0.8], ...
+	'PaperPosition',[18 180 576 432], ...
+	'PaperUnits','points', ...
+	'Position',[595 216 600 775], ...
+	'Tag','Preprocess');
+	
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.015 0.06064516129032258 0.9550000000000001 0.1458064516129032], ...
+	'Style','text', ...
+	'Tag','StaticText1');
+
+data.results_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess close', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.8067 0.0142 0.1667 0.0348],...
+	'String','CLOSE', ...
+	'Tag','Pushbutton1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.2141935483870968 0.07000000000000001 0.01806451612903226], ...
+	'String','LOG', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess sel_comp',...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.7983333333333333 0.2090322580645161 0.1666666666666667 0.03483870967741935], ...
+	'String',' ', ...
+	'Style','popupmenu', ...
+	'Tag','sel_comp_h', ...
+	'Value',1);
+
+data.sel_comp_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.0183 0.2568 0.2133 0.1290], ...
+	'Style','text', ...
+	'Tag','StaticText3');
+
+data.sel_cdata_h=h1;
+
+h1 = axes('Parent',h0, ...
+	'CameraUpVector',[0 1 0], ...
+	'CameraUpVectorMode','manual', ...
+	'Color',[1 1 1], ...
+	'Position',[0.2583 0.2568 0.2133 0.1290], ...
+	'Tag','Axes1', ...
+	'XColor',[0 0 0], ...
+	'XTickLabel',['0  ';'0.5';'1  '], ...
+	'XTickLabelMode','manual', ...
+	'XTickMode','manual', ...
+	'YColor',[0 0 0], ...
+	'YTickMode','manual', ...
+	'ZColor',[0 0 0]);
+
+data.sel_chist_h=h1;
+
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[0.4960629921259843 -0.08080808080808044 9.160254037844386], ...
+	'Tag','Axes1Text4', ...
+	'VerticalAlignment','cap');
+set(get(h2,'Parent'),'XLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[-0.0551181102362206 0.4848484848484853 9.160254037844386], ...
+	'Rotation',90, ...
+	'Tag','Axes1Text3', ...
+	'VerticalAlignment','baseline');
+set(get(h2,'Parent'),'YLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','right', ...
+	'Position',[-1.2283    5.7980    9.1603], ...
+	'Tag','Axes1Text2', ...
+	'Visible','off');
+set(get(h2,'Parent'),'ZLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[0.4960629921259843 1.070707070707071 9.160254037844386], ...
+	'Tag','Axes1Text1', ...
+	'VerticalAlignment','bottom');
+set(get(h2,'Parent'),'Title',h2);
+
+h1 = axes('Parent',h0, ...
+	'CameraUpVector',[0 1 0], ...
+	'CameraUpVectorMode','manual', ...
+	'Color',[0.7529 0.7529 0.7529], ...
+	'Position',[0.4950000000000001 0.2567741935483871 0.4766666666666667 0.1290322580645161], ...
+	'Tag','Axes2', ...
+	'XColor',[0 0 0], ...
+	'XTickMode','manual', ...
+	'YColor',[0 0 0], ...
+	'YTick',[0 0.5 1], ...
+	'YTickMode','manual', ...
+	'ZColor',[0 0 0]);
+
+data.vector_h=h1;
+
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[0.4982456140350879 -0.08080808080808044 9.160254037844386], ...
+	'Tag','Axes2Text4', ...
+	'VerticalAlignment','cap');
+set(get(h2,'Parent'),'XLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[-0.1018    0.4848    9.1603], ...
+	'Rotation',90, ...
+	'Tag','Axes2Text3', ...
+	'VerticalAlignment','baseline');
+set(get(h2,'Parent'),'YLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','right', ...
+	'Position',[-1.045614035087719 5.797979797979799 9.160254037844386], ...
+	'Tag','Axes2Text2', ...
+	'Visible','off');
+set(get(h2,'Parent'),'ZLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[0.4982456140350879 1.070707070707071 9.160254037844386], ...
+	'Tag','Axes2Text1', ...
+	'VerticalAlignment','bottom');
+set(get(h2,'Parent'),'Title',h2);
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.3922580645161291 0.17 0.01806451612903226], ...
+	'String','STATISTICS', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2583333333333334 0.3922580645161291 0.1633333333333333 0.01806451612903226], ...
+	'String','HISTOGRAM', ...
+	'Style','text', ...
+	'Tag','StaticText5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi',...
+	'FontSize',6,...
+	'HorizontalAlignment','left',...
+	'String',{'LEFT: NEW SELECTION';'RIGHT: ADD TO SELECTION'}, ...
+	'ListboxTop',0, ...
+	'Position',[0.5016666666666667 0.38 0.235 0.03741935483870968], ...
+	'Style','text', ...
+	'Tag','StaticText6', ...
+	'UserData','[ ]');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess selall', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.8066666666666668 0.3922580645161291 0.1666666666666667 0.03483870967741935], ...
+	'String','SELECT ALL', ...
+	'Tag','Pushbutton2', ...
+	'UserData','[ ]');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.7529 0.7529 0.7529], ...
+	'Position',[0.01833333333333333 0.4503225806451613 0.23 0.3225806451612903], ...
+	'String',' ', ...
+	'Style','listbox', ...
+	'Tag','Listbox1', ...
+	'Value',1);
+
+data.comp_names_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Position',[0.4950000000000001 0.4503225806451613 0.2333333333333333 0.3225806451612903], ...
+	'String',' ', ...
+	'Style','listbox', ...
+	'Tag','Listbox2', ...
+	'Value',1);
+
+data.vect_mean_h = h1;
+
+h1 = axes('Parent',h0, ...
+	'CameraUpVector',[0 1 0], ...
+	'CameraUpVectorMode','manual', ...
+	'Color',[1 1 1], ...
+	'Position',[0.7383333333333334 0.4503225806451613 0.2333333333333333 0.3225806451612903], ...
+	'Tag','Axes3', ...
+	'XColor',[0 0 0], ...
+	'XTickMode','manual', ...
+	'YColor',[0 0 0], ...
+	'YTickMode','manual', ...
+	'ZColor',[0 0 0]);
+
+data.sel_cplot_h = h1;
+
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[0.4964028776978418 -0.03212851405622486 9.160254037844386], ...
+	'Tag','Axes3Text4', ...
+	'VerticalAlignment','cap');
+set(get(h2,'Parent'),'XLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[-0.05035971223021596 0.493975903614458 9.160254037844386], ...
+	'Rotation',90, ...
+	'Tag','Axes3Text3', ...
+	'VerticalAlignment','baseline');
+set(get(h2,'Parent'),'YLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','right', ...
+	'Position',[-3.1942    1.7028    9.1603], ...
+	'Tag','Axes3Text2', ...
+	'Visible','off');
+set(get(h2,'Parent'),'ZLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[0.4964028776978418 1.028112449799197 9.160254037844386], ...
+	'Tag','Axes3Text1', ...
+	'VerticalAlignment','bottom');
+set(get(h2,'Parent'),'Title',h2);
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess plxy', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.265 0.4683870967741936 0.125 0.03483870967741935], ...
+	'String','XY-PLOT', ...
+	'Tag','Pushbutton3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess hist', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.265 0.5303225806451613 0.125 0.03483870967741935], ...
+	'String','HISTOGRAM', ...
+	'Tag','Pushbutton4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess bplo', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.265 0.5922580645161291 0.125 0.03483870967741935], ...
+	'String','BOX PLOT', ...
+	'Tag','Pushbutton5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess plot', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.265 0.654195483870968 0.125 0.03483870967741935], ...
+	'String','PLOT', ...
+	'Tag','Pushbutton6');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.4088888888888889 0.5333333333333333 0.06 0.03268817204301075], ...
+	'String','30', ...
+	'Style','edit', ...
+	'Tag','EditText1');
+
+data.no_of_bins_h = h1;
+
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.775483870967742 0.2016666666666667 0.01806451612903226], ...
+	'String','COMPONENT LIST', ...
+	'Style','text', ...
+	'Tag','StaticText7');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.4950000000000001 0.775483870967742 0.1966666666666667 0.01806451612903226], ...
+	'String','AVERAGE', ...
+	'Style','text', ...
+	'Tag','StaticText8');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.7383333333333334 0.775483870967742 0.225 0.01806451612903226], ...
+	'String','RELATIVE VALUES', ...
+	'Style','text', ...
+	'Tag','StaticText9');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',10, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.8154838709677419 0.2033333333333333 0.0232258064516129], ...
+	'String','COMPONENTS', ...
+	'Style','text', ...
+	'Tag','StaticText10');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',10, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.4950000000000001 0.8154838709677419 0.2 0.0232258064516129], ...
+	'String','VECTORS', ...
+	'Style','text', ...
+	'Tag','StaticText11');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess sD_management', ...
+	'FontSize',5, ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.8503225806451613 0.1666666666666667 0.03483870967741935], ...
+	'String','DATA SET MANAGEMENT', ...
+	'Tag','Pushbutton7');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'Callback','preprocess sel_sD', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.8890322580645161 0.1666666666666667 0.03483870967741935], ...
+	'String',' ', ...
+	'Style','popupmenu', ...
+	'Tag','PopupMenu2', ...
+	'Value',1);
+
+data.sD_set_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.2516666666666667 0.8503225806451613 0.7216666666666667 0.07354838709677419], ...
+	'Style','text', ...
+	'Tag','StaticText12');
+
+data.sD_name_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',10, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.9341935483870968 0.1616666666666667 0.02064516129032258], ...
+	'String','DATA SETS', ...
+	'Style','text', ...
+	'Tag','StaticText13');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',10, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2516666666666667 0.9341935483870968 0.2833333333333333 0.02064516129032258], ...
+	'String','SELECTED DATA SET', ...
+	'Style','text', ...
+	'Tag','StaticText14');
+
+if ~isstruct(sData), 
+  sData=som_data_struct(sData);
+end
+
+ui_h=uimenu('Label','&Normalization');
+uimenu(ui_h,'Label','Scale [0,1]','Callback','preprocess zscale');
+uimenu(ui_h,'Label','Scale var=1','Callback','preprocess vscale');
+uimenu(ui_h,'Label','HistD','Callback','preprocess histeq');
+uimenu(ui_h,'Label','HistC','Callback','preprocess histeq2');
+uimenu(ui_h,'Label','Log','Callback','preprocess log');
+uimenu(ui_h,'Label','Eval (1-comp)','Callback','preprocess eval1');
+
+ui_h=uimenu('Label','&Components');
+uimenu(ui_h,'Label','Move component','Callback','preprocess move');
+uimenu(ui_h,'Label','Copy component','Callback','preprocess copy');
+uimenu(ui_h,'Label','Add: N binary types','Callback','preprocess oneo');
+uimenu(ui_h,'Label','Add: zeros','Callback','preprocess zero');
+uimenu(ui_h,'Label','Remove component','Callback','preprocess remove');
+uimenu(ui_h,'Label','Remove selected vectors',...
+            'Callback','preprocess remove_vects');
+uimenu(ui_h,'Label','Select all components',...
+            'Callback','preprocess sel_all_comps');
+
+ui_h=uimenu('Label','&Misc');
+ui_h1=uimenu(ui_h,'Label','Calculate');
+ui_h2=uimenu(ui_h,'Label','Process');
+
+uimenu(ui_h,'Label','Get LOG-file','Callback','preprocess LOG');
+uimenu(ui_h,'Label','Indices of the selected vectors',...
+            'Callback','preprocess get_inds');
+uimenu(ui_h,'Label','Undo','Callback','preprocess undo');
+uimenu(ui_h1,'Label','Number of values','Callback','preprocess noof');
+uimenu(ui_h1,'Label','Number of selected vectors',...
+             'Callback','preprocess no_of_sel');
+uimenu(ui_h1,'Label','Correlation','Callback','preprocess corr');
+uimenu(ui_h2,'Label','Unit length','Callback','preprocess unit');
+uimenu(ui_h2,'Label','Eval','Callback','preprocess eval2');
+uimenu(ui_h2,'Label','Clipping','Callback','preprocess clipping');
+uimenu(ui_h2,'Label','Delay','Callback','preprocess delay');
+uimenu(ui_h2,'Label','Windowed','Callback','preprocess window');
+uimenu(ui_h2,'Label','Select vectors','Callback','preprocess select');
+
+len=getfield(size(sData(1).data),{1});
+data.selected_vects=find(ones(1,len));
+data.sD_set=sData;
+set(data.vector_h,'ButtonDownFcn','preprocess(''vector_bdf'',''down'')');
+set(gcf,'UserData',data);
+if ~set_sD_stats;
+  return;
+end
+sel_sD;
+return;    %%% Preprocess-window is ready.
+
+else
+ arg=sData;
+ if strcmp(arg,'rename')
+   rename(arg2);
+ elseif strcmp(arg,'sel_sD')
+   if isempty(arg2)
+     sel_sD;
+   else
+     sel_sD(arg2);
+   end
+ elseif strcmp(arg,'zscale')
+   if isempty(arg2)
+      zero2one_scale;
+   else
+      zero2one_scale(arg2);
+   end
+ elseif strcmp(arg,'vscale');
+   if isempty(arg2)
+      var_scale;
+   else
+      var_scale(arg2);
+   end
+ elseif strcmp(arg,'histeq2')
+   if isempty(arg2)
+     hist_eq2;
+   else
+     hist_eq2(arg2);
+   end
+ elseif strcmp(arg,'log')
+   if isempty(arg2)
+     logarithm;
+   else
+     logarithm(arg2);
+   end
+ elseif strcmp(arg,'eval1')
+   if isempty(arg2)
+     eval1;
+   else
+     eval1(arg2);
+   end
+ elseif strcmp(arg,'eval2')
+   if isempty(arg2)
+     eval2;
+   else
+     eval2(arg2);
+   end
+ elseif strcmp(arg,'histeq');
+   if isempty(arg2)
+     hist_eq;
+   else
+      hist_eq(arg2);
+   end
+ elseif strcmp(arg,'selall')
+   if isempty(arg2)
+     select_all;
+   else
+     select_all(arg2);
+   end
+ elseif strcmp(arg,'sel_button');
+   if isempty(arg2)
+     sel_button;
+   else
+     sel_button(arg2);
+   end
+ elseif strcmp(arg,'clear_button')
+   if isempty(arg2)
+     clear_button;
+   else
+     clear_button(arg2)
+   end
+ elseif(strcmp(arg,'move'))
+   if isempty(arg2)
+     move_component;
+   else
+     move_component(arg2);
+   end
+ elseif(strcmp(arg,'copy'))
+   if isempty(arg2)
+     copy_component;
+   else
+     copy_component(arg2);
+   end
+ elseif strcmp(arg,'oneo')
+   if isempty(arg2)
+     one_of_n;
+   else
+     one_of_n(arg2);
+   end
+ elseif strcmp(arg,'zero')
+   if isempty(arg2)
+     add_zeros;
+   else
+     add_zeros(arg2);
+   end
+ elseif strcmp(arg,'remove')
+   if isempty(arg2)
+     remove_component;
+   else
+     remove_component(arg2);
+   end
+ elseif strcmp(arg,'remove_vects')
+   if isempty(arg2)
+     remove_vects;
+   else
+     remove_vects(arg2);
+   end
+ elseif strcmp(arg,'noof')
+   if isempty(arg2)
+     no_of_values;
+   else
+     no_of_values(arg2);
+   end
+ elseif strcmp(arg,'corr');
+   if isempty(arg2)
+     correlation;
+   else
+     correlation(arg2);
+   end
+ elseif strcmp(arg,'unit')
+   if isempty(arg2)
+     unit_length;
+   else
+     unit_length(arg2);
+   end
+ elseif strcmp(arg,'clip_data')
+   clip_data(arg2);
+ elseif strcmp(arg,'copy_delete')
+   copy_delete(arg2);
+ elseif strcmp(arg,'and_or_cb')
+   and_or_cb(arg2);
+ elseif strcmp(arg,'all_sel_cb')
+   all_sel_cb(arg2);
+ elseif strcmp(arg,'clip_exp_cb')
+   clip_exp_cb(arg2);
+ elseif strcmp(arg,'window_cb')
+   window_cb(arg2);
+ elseif strcmp(arg,'set_state_vals')
+   set_state_vals(arg2);
+ elseif strcmp(arg,'vector_bdf')
+   vector_bdf(arg2);
+ elseif strcmp(arg,'sD_management');
+   if isempty(arg2)
+     sD_management;
+   else
+     sD_management(arg2);
+   end
+ elseif strcmp(arg,'clipping')
+   if isempty(arg2)
+     clipping;
+   else
+     clipping(arg2);
+   end
+ elseif strcmp(arg,'delay')
+   if isempty(arg2)
+     delay;
+   else
+     delay(arg2);
+   end
+ elseif strcmp(arg,'window');
+   if isempty(arg2)
+     window;
+   else
+     window(arg2);
+   end
+ elseif strcmp(arg,'select');
+   if isempty(arg2)
+     select;
+   else
+     select(arg2);
+   end
+ elseif strcmp(arg,'import')
+   if isempty(arg2)
+     import;
+   else
+     import(arg2);
+   end
+ elseif strcmp(arg,'export')
+   if isempty(arg2)
+     export;
+   else
+     export(arg2);
+   end
+ elseif strcmp(arg,'undo');
+   if isempty(arg2)
+     undo;
+   else
+     undo(arg2);
+   end
+ elseif strcmp(arg,'delay_data')
+   if isempty(arg2)
+     delay_data;
+   else
+     delay_data(arg2);
+   end
+ elseif strcmp(arg,'eval_windowed')
+   if isempty(arg2)
+     eval_windowed;
+   else
+     eval_windowed(arg2);
+   end 
+ elseif strcmp(arg,'get_inds')
+   if isempty(arg2)
+     get_selected_inds;
+   else
+     get_selected_inds(arg2);
+   end
+ elseif strcmp(arg,'no_of_sel')
+   if isempty(arg2)
+     no_of_selected;
+   else
+     no_of_selected(arg2);
+   end
+ elseif strcmp(arg,'sel_comp');
+   if isempty(arg2)
+     sel_comp;
+   else
+     sel_comp(arg2);
+   end
+ elseif strcmp(arg,'sel_all_comps')
+   if isempty(arg2)
+     select_all_comps;
+   else
+     select_all_comps(arg2);
+   end 
+ elseif strcmp(arg,'refresh')
+   set_var_names;  
+ elseif any(strcmp(arg,{'close_c','close_d','close_s','close_w','close_sD'}))
+   if isempty(arg2)
+     close_func(arg)
+   else
+     close_func(arg,arg2);
+   end 
+ end
+ 
+
+ switch arg
+   case 'sD_stats'
+     sD_stats;
+   case 'LOG'
+     log_file;
+   otherwise
+     pro_tools(arg);
+ end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function set_compnames(sData,h)
+
+%SET_COMPNAMES
+%
+% set_compnames(sData,h)
+%
+% ARGUMENTS
+%
+%  sData     (struct)  som_data_struct
+%  h         (scalar)  handle to a list box object
+%
+%
+% This function sets the component names of sData to the list box
+% indicated by 'h'. 
+%
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  error('Figure ''Preprocess'' does not exist. Closing program...');
+  close_preprocess;
+end
+
+udata=get(pre_h,'UserData');
+
+set(h,'Value',[]);
+for i=1:length(sData.comp_names)	
+  tmp=sprintf('#%d: ',i);
+  names{i,1}=cat(2,tmp, sData.comp_names{i});
+end
+
+
+set(h,'String',names,'Max',2);
+set(udata.sel_comp_h,'String',names);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function draw_vectors(vectors,h)
+
+%DRAW_VECTORS
+%
+% draw_vectors(vectors,h)
+%
+% ARGUMENTS
+%
+%  vectors  (vector) vector of 0's and 1's
+%  h        (scalar) handle to an axis object
+%
+%
+%  This function draws an horizontal bar of 'vectors' in the axis
+%  indicated by 'h'.
+%
+%
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+subplot(h);
+hold off;
+cla;
+
+set(h,'YLim',[0 1]);
+set(h,'YTick',[]);
+set(h,'XLim',[0 length(vectors)+1]);
+hold on;
+
+comp_no=get(getfield(get(pre_h,'UserData'),'sel_comp_h'),'Value');
+comp=getfield(get(pre_h,'UserData'),'sData');
+comp=comp.data(:,comp_no);
+Max = max(comp);
+Min = min(comp);
+lims=get(gca,'YLim');
+lims(1)=Min;
+h=abs(0.1*Max);
+lims(2)=Max;
+if Max - Min <= eps
+  tmp=Max;
+  lims(1)=tmp-1;
+  lims(2)=tmp+1;
+end
+lims(2)=lims(2)+h;
+if ~all(isnan(lims))
+  set(gca,'YLim',lims);
+end
+h=(lims(2)-lims(1))/4;
+set(gca,'YTickMode','auto'); 
+t=1:length(vectors);
+h=plot(t,comp);
+set(h,'ButtonDownFcn','preprocess(''vector_bdf'',''down'')');
+indices =find(vectors);
+vectors(indices)=0.1*(getfield(get(gca,'YLim'),...
+                      {2})-getfield(get(gca,'YLim'),{1}));
+plot(indices,vectors(indices)+getfield(get(gca,'YLim'),{1}),...
+     'ored','MarkerSize',4);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function vect_means(sData,handle,indices)
+
+%VECT_MEANS
+%
+% vect_means(sData,handle,indices)
+%
+% ARGUMENTS
+% 
+%  sData    (struct)    som_data_struct
+%  handle   (scalar)    handle to the static text box object
+%  indices  (vector)    indices of selected vectors
+%
+%
+% This function calculates means of selected vectors' components
+% and writes them in the static text box indicated by 'handle'.
+%
+%
+
+sData= sData.data(indices,:);
+
+for i=1:length(sData(1,:))
+  names{i}=sprintf('#%d: ',i);
+end
+
+
+for i=1:length(sData(1,:))
+  tmp=sData(:,i);
+  tmp=cat(2,names{i},sprintf('%-10.3g',mean(tmp(find(~isnan(tmp))))));
+  string{i}=tmp;
+end
+
+set(handle,'String',string);
+set(handle,'HorizontalAlignment','left');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function vector_bdf(arg)
+
+%VECTOR_BDF   A button down function.
+%
+% vector_bdf(arg)
+%
+% ARGUMENTS
+%
+%  arg      (string)  'down' or 'up',  tells the mouse button's state.
+%                     
+%
+%  This function selects vectors in the vector-window and plots maxima,
+%  minima and means of the selected vectors. It also writes means of the
+%  selected vectors' components in a static text box and takes care of
+%  changes of the chosen component's data.
+%
+%  See also VECTOR_MEANS, SEL_COMP
+%
+%
+ 
+
+arg2=arg(6:length(arg));
+if ~isempty(arg2)
+  LOG=1;
+else
+  LOG=0;
+end
+arg=arg(1:4);
+
+%%% arg's first "word" is 4 letters long and it can be:
+%%%
+%%% 'key '
+%%% 'down'
+%%% 'drag'
+%%% 'up  '
+
+if strcmp(arg,'key ') %string is 'key' + 1 space!!!
+  if ~LOG
+    key=get(gcf,'CurrentCharacter');
+   else 
+    key=arg2
+  end
+  if ~strcmp(key,'<') & ~strcmp(key,'>')
+    return;
+  end
+  data=get(gcf,'UserData');
+  sel=data.selected_vects;
+  if length(sel) == 1
+    if strcmp(key,'<') & sel ~= 1 
+      data.selected_vects=sel-1;
+      set(gcf,'UserData',data);
+     elseif strcmp(key,'>') & sel ~= length(data.sData.data(:,1))
+      data.selected_vects = sel + 1;
+      set(gcf,'UserData',data);
+     end
+  else
+    if strcmp(key,'<') & sel(1) ~= 1
+      data.selected_vects=cat(2,sel(1)-1,sel);
+      set(gcf,'UserData',data);
+     elseif strcmp(key,'>') & sel(length(sel)) ~= length(sel)
+      data.selected_vects=cat(2,sel,sel(length(sel))+1);
+      set(gcf,'UserData',data);
+     end
+  end
+  cplot_mimema;
+  pro_tools('plot_hist');
+  pro_tools('c_stat');
+  vects=zeros(1,length(data.sData.data(:,1)));
+  vects(data.selected_vects)=1;
+  draw_vectors(vects,data.vector_h);
+ 
+  if ~LOG
+    data=get(gcf,'UserData');
+    data.LOG{length(data.LOG)+1}=...
+    sprintf('preprocess(''vector_bdf'',''key  %s'');',key);
+                                                %string is 'key'+2spaces+%s
+    set(gcf,'UserData',data);
+  end
+  return;
+end
+
+switch arg
+  case 'down'
+   set(gcf,'WindowButtonUpFcn','preprocess(''vector_bdf'',''up  '')');
+   set(gcf,'WindowButtonMotionFcn','preprocess(''vector_bdf'',''drag'')');
+   switch get(gcf,'SelectionType')
+     case 'normal'
+      data.lims1=round(getfield(get(gca,'CurrentPoint'),{1,1}));
+      data.lims2=[];
+     case 'alt'
+      tmp=round(getfield(get(gca,'CurrentPoint'),{1,1}));
+      if isempty(get(gca,'UserData'))
+        data.lims1=tmp;
+        data.lims2=[];
+      else
+        data.lims1=cat(2,getfield(get(gca,'UserData'),'lims1'),tmp);
+        data.lims2=getfield(get(gca,'UserData'),'lims2');
+      end
+   end
+   coords=get(gca,'CurrentPoint');
+   h=line([coords(1),coords(1)],get(gca,'YLim'),'EraseMode','xor');
+   set(h,'Color','red');
+   h2=line([coords(1),coords(1)],get(gca,'YLim'),'EraseMode','xor');
+   set(h2,'Color','red');
+   data.h=h;
+   data.h2=h2;
+   set(gca,'UserData',data);
+
+  case 'drag'
+   coords=get(gca,'CurrentPoint');
+   lim=get(gca,'XLim');
+   h2=getfield(get(gca,'UserData'),'h2');
+   if lim(1) >= coords(1)
+     set(h2,'XData',[lim(1) lim(1)]);
+   elseif lim(2) <= coords(2)
+     set(h2,'XData',[lim(2) lim(2)]);
+   else
+     set(h2,'XData',[coords(1) coords(1)]);
+   end
+  case 'up  '   % string is 'up' + 2 spaces!!! 
+   set(gcf,'WindowButtonUpFcn','');
+   set(gcf,'WindowButtonMotionFcn','');
+   if ~LOG
+     data=get(gca,'UserData');
+     delete(data.h);
+     delete(data.h2);
+     tmp=round(getfield(get(gca,'CurrentPoint'),{1,1}));
+     data.lims2=cat(2,data.lims2,tmp);
+     tmp_data=sort(cat(1,data.lims1,data.lims2));
+     high=getfield(get(gca,'XLim'),{2})-1;
+     vectors=zeros(1,high);
+     tmp_data(find(tmp_data<1))=1;
+     tmp_data(find(tmp_data>high))=high;
+
+     for i=1:getfield(size(tmp_data),{2})
+       vectors(tmp_data(1,i):tmp_data(2,i))=1;
+     end
+     selected_vects=find(vectors);
+   else
+     pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+     len=size(getfield(getfield(get(pre_h,'UserData'),'sData'),'data'));
+     vectors=zeros(1,len(1));
+     i=1;
+     while i <= length(arg2) & (isspace(arg2(i)) | ~isletter(arg2(i)))
+      i=i+1;
+     end
+     arg3=arg2(i:length(arg2));
+     selected_vects=str2num(arg2(1:i-1));
+     if ~isempty(arg3) & ~all(isspace(arg3))
+       selected_vects=unique(cat(2,selected_vects,...
+                            getfield(get(pre_h,'UserData'),'selected_vects')));
+     end           
+     vectors(selected_vects)=1;  
+     set(pre_h,'CurrentAxes',getfield(get(pre_h,'UserData'),'vector_h'));
+     set(0,'CurrentFigure',pre_h);
+   end
+   draw_vectors(vectors,gca);
+   sData=getfield(get(gcf,'UserData'),'sData');
+   h=getfield(get(gcf,'UserData'),'vect_mean_h');
+   vect_means(sData,h,selected_vects);
+   if ~LOG
+     set(gca,'UserData',data);
+   end
+   data=get(gcf,'UserData');  
+   data.undo.sData=data.sData;
+   data.undo.selected=data.selected_vects;
+   data.selected_vects=selected_vects;
+   if ~LOG
+     data.LOG{length(data.LOG)+1}='% Vector selection by using the mouse...';
+     tmp=sprintf('preprocess(''vector_bdf'',''up   %s'');',...
+                num2str(data.selected_vects));
+     if length(tmp) > 500
+       tmp=textwrap({tmp},500);
+       data.LOG{length(data.LOG)+1}=cat(2,tmp{1},''');');
+       for i=2:length(tmp)-1
+         data.LOG{length(data.LOG)+1}=...
+               cat(2,sprintf('preprocess(''vector_bdf'',''up   %s',...
+                     tmp{i}),'add'');');
+       end
+       data.LOG{length(data.LOG)+1}=...
+             cat(2,sprintf('preprocess(''vector_bdf'',''up   %s',...
+                   tmp{length(tmp)}(1:length(tmp{length(tmp)})-3)),' add'');');
+     else
+       data.LOG{length(data.LOG)+1}=tmp;
+     end
+   end   
+   set(gcf,'UserData',data);
+   cplot_mimema;
+   sel_comp;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sel_button(varargin) 
+
+%SEL_BUTTON     A Callback function. It performs the operations needed
+%               when vector components are selected.
+%
+% See also SEL_COMP
+%
+
+if nargin == 1
+  LOG=1;
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  string=getfield(get(pre_h,'UserData'),'comp_names_h');
+  string=getfield(get(string,'String'),{str2num(varargin{1})});
+  set(0,'CurrentFigure',pre_h);
+else
+  LOG=0;
+  val=get(getfield(get(gcf,'UserData'),'comp_names_h'),'Value');
+end
+
+sel_button_h=getfield(get(gcf,'UserData'),'sel_button_h');
+sel_comps_h=getfield(get(gcf,'UserData'),'sel_comps_h');
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+if ~LOG
+  string=getfield(get(comp_names_h,'String'),{get(comp_names_h,'Value')});
+end
+tmp_string=get(sel_comps_h,'String');
+
+if iscell(tmp_string)
+
+  for i=1:length(string)
+    if ~any(strcmp(string{i},tmp_string))
+      tmp_string=cat(1,tmp_string,string(i));
+    end
+  end
+  string=tmp_string;
+end
+
+set(sel_comps_h,'String',string);
+set(comp_names_h,'Value',[]);
+sel_comp;
+if ~LOG
+  data=get(gcf,'UserData');
+  data.LOG{length(data.LOG)+1}='% Select components';
+  data.LOG{length(data.LOG)+1}=sprintf('preprocess(''sel_button'',''%s'');',...
+                                        num2str(val));
+  set(gcf,'UserData',data);
+end
+ 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function clear_button(varargin)
+
+%CLEAR_BUTTON  Function callback evaluated when a 'Clear'-button is
+%              pressed. It removes texts from the 'selected components' 
+%              -window and the 'selected component data' -window and
+%              clears the 'histogram' -axis.
+%
+%
+
+if nargin==1
+  LOG=1;
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  set(0,'CurrentFigure',pre_h);
+else
+  LOG=0;
+end
+
+sel_comp_h=getfield(get(gcf,'UserData'),'sel_comp_h');
+sel_cdata_h=getfield(get(gcf,'UserData'),'sel_cdata_h');
+sel_cplot_h=getfield(get(gcf,'UserData'),'sel_cplot_h');
+sel_chist_h=getfield(get(gcf,'UserData'),'sel_chist_h');
+vector_h=getfield(get(gcf,'UserData'),'vector_h');
+
+set(sel_comp_h,'Value',1);
+set(sel_cdata_h,'String',' ');
+subplot(sel_chist_h);
+hold off;
+cla;
+
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+dims=size(getfield(getfield(get(gcf,'UserData'),'sData'),'data'));
+vectors=zeros(1,dims(1));
+vectors(selected)=1;
+subplot(vector_h);
+draw_vectors(vectors,vector_h);
+if ~LOG
+  data=get(gcf,'UserData');
+  data.LOG{length(data.LOG)+1}='% Remove components from the selected list.';
+  data.LOG{length(data.LOG)+1}='preprocess(''clear_button'',''foo'');';
+  set(gcf,'UserData',data);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sel_comp(varargin)
+
+%SEL_COMP  performs the operations needed when vector components are
+%          chosen. It writes maxima, minima, mean and standard deviation
+%          of the chosen component to a text box window and draws a
+%          histogram of the chosen component of selected vectors' 
+%
+%
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+set(0,'CurrentFigure',pre_h);
+sel_comp_h=getfield(get(pre_h,'UserData'),'sel_comp_h');
+
+if nargin == 1
+  set(sel_comp_h,'Value',str2num(varargin{1}));
+elseif ~isempty(gcbo)
+  no=get(sel_comp_h,'Value');
+  data=get(gcf,'UserData');
+  data.LOG{length(data.LOG)+1}='% Select one component';
+  data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''sel_comp'',''',...
+                                      num2str(no),''');');
+  set(gcf,'UserData',data);
+end
+
+pro_tools('c_stat');
+pro_tools('plot_hist');
+data=get(gcf,'UserData');
+sData=data.sData;  
+vector_h=data.vector_h;
+len=length(sData.data(:,1));
+vects=zeros(1,len);
+vects(data.selected_vects)=1;
+draw_vectors(vects,vector_h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function cplot_mimema
+
+global no_of_sc
+
+sData=getfield(get(gcf,'UserData'),'sData');
+sel_cplot_h=getfield(get(gcf,'UserData'),'sel_cplot_h');
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+
+set(sel_cplot_h,'YLim',[0 length(sData.data(1,:))+1]);
+
+subplot(sel_cplot_h);
+hold off;
+cla;
+hold on;
+
+for i=1:length(sData.data(1,:))
+  Max=max(sData.data(:,i));
+  Min=min(sData.data(:,i));
+  tmp=sData.data(selected,i);
+
+  selMax=max(tmp);
+  selMin=min(tmp);
+  Mean=abs(mean(tmp(find(~isnan(tmp)))));
+  Median=abs(median(tmp(find(~isnan(tmp)))));
+  
+  if Max ~= Min & ~all(isnan(sData.data(:,i)))
+
+    if rem(i,no_of_sc)   % no_of_sc is defined in the beginning of this file...
+
+      line([abs(selMin-Min)/(Max-Min) (selMax-Min)/(Max-Min)],...
+           [i i],'Color','black');
+      plot(abs(Mean-Min)/(Max-Min),i,'oblack');
+      plot(abs(Median-Min)/(Max-Min),i,'xblack');
+    else
+      line([abs(selMin-Min)/(Max-Min) (selMax-Min)/(Max-Min)],...
+           [i i],'Color','black','LineWidth',2);
+      plot(abs(Mean-Min)/(Max-Min),i,'oblack','LineWidth',2);
+      plot(abs(Median-Min)/(Max-Min),i,'xblack','LineWidth',2);
+    end
+  else
+
+    if rem(i,no_of_sc)     % N is defined in the beginning of this file.
+
+      plot(mean(get(gca,'XLim')),i,'oblack');
+      plot(mean(get(gca,'XLim')),i,'xblack');
+    else
+      plot(mean(get(gca,'XLim')),i,'oblack','LineWidth',2);
+      plot(mean(get(gca,'XLim')),i,'xblack','LineWidth',2);
+    end
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+function bool=set_sD_stats
+
+%SET_SD_STATS Writes the data set names to popup menu.
+%
+%
+
+bool=1;
+data=get(gcf,'UserData');
+
+for i=1:length(data.sD_set)
+ % if ~isvalid_var_name({data.sD_set(i).name})
+ %   close_preprocess;
+ %   bool=0;
+ %   return;
+ % end
+  string{i}=cat(2,sprintf('#%d: ',i),data.sD_set(i).name);
+end
+
+set(data.sD_set_h,'String',string);
+data.sData=data.sD_set(get(data.sD_set_h,'Value'));
+data.sData.MODIFIED=0;
+data.sData.INDEX=1;
+set(gcf,'UserData',data);
+write_sD_stats;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function write_sD_stats
+
+%WRITE_SD_STATS  writes data's name, length and dimension to text box.
+%
+%
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+
+sD_name_h=getfield(get(pre_h,'UserData'),'sD_name_h');
+sData=getfield(get(pre_h,'UserData'),'sData');
+dims=size(sData.data);
+string{1}=cat(2,'Name:   ',sData.name);
+string{2}=cat(2,'Length: ',sprintf('%d',dims(1)));
+string{3}=cat(2,'Dim:     ',sprintf('%d',dims(2)));
+
+set(sD_name_h,'String',string);
+set(sD_name_h,'HorizontalAlignment','left');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sel_sD(varargin)
+
+%SEL_SD  sets new data to UserData's 'sData'.
+%        
+%
+
+if nargin==1
+  LOG=1;
+  index=str2num(varargin{1});
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  set(0,'CurrentFigure',pre_h);
+else
+  LOG=0;
+end
+
+sD_set_h=getfield(get(gcf,'UserData'),'sD_set_h');
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+vector_h=getfield(get(gcf,'UserData'),'vector_h');
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+
+if ~LOG
+  index=get(sD_set_h,'Value');
+end
+data=get(gcf,'UserData');
+data.undo = [];
+INDEX=data.sData.INDEX;
+data.sData=rmfield(data.sData,'MODIFIED'); 
+data.sData=rmfield(data.sData,'INDEX');
+
+tmp=data.sD_set(index);
+tmp.MODIFIED=0;
+tmp.INDEX=index;
+data.sD_set(INDEX)=data.sData;
+data.sData=tmp;
+
+len=getfield(size(tmp.data),{1});
+
+data.selected_vects=find(ones(1,len));
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Select a new data set.';
+  data.LOG{length(data.LOG)+1}=sprintf('preprocess(''sel_sD'',''%s'');',...
+                                        num2str(index));
+end
+set(gcf,'UserData',data);
+write_sD_stats;
+set_compnames(tmp,comp_names_h);
+draw_vectors(ones(1,len),vector_h);
+vect_means(tmp,vect_mean_h,data.selected_vects);
+clear_button;
+sel_comp;
+cplot_mimema;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function indices=get_indices
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+comp_names_h=getfield(get(pre_h,'UserData'),'comp_names_h');
+indices = get(comp_names_h,'Value');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sD_management(varargin)
+
+if nargin ~= 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  preh_udata=get(pre_h,'UserData');
+  preh_udata.LOG{length(preh_udata.LOG)+1}=...
+           '% Starting the ''Data Set Management'' -window...';
+  preh_udata.LOG{length(preh_udata.LOG)+1}=...
+                 'preprocess(''sD_management'',''foo'');';
+  set(pre_h,'UserData',preh_udata);
+end 
+
+man_h=findobj(get(0,'Children'),'Tag','Management');
+if ~isempty(man_h)
+  figure(man_h);
+  return;
+end
+
+h0 = figure('BackingStore','off', ...
+	'Color',[0.8 0.8 0.8], ...
+	'Name','Data Set Management', ...
+	'PaperPosition',[18 180 576 432], ...
+	'PaperUnits','points', ...
+	'Position',[753 523 324 470], ...
+	'RendererMode','manual', ...
+	'Tag','Management');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Max',2, ...
+	'Position',[0.02777777777777778 0.0723404255319149 0.7716049382716049 0.1914893617021277], ...
+	'String',' ', ...
+	'Style','edit', ...
+	'Tag','EditText1');
+
+data.new_c_name_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess rename comp',...
+	'Units','normalized', ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.8240740740740741 0.2106382978723404 0.154320987654321 0.05319148936170213], ...
+	'String','RENAME', ...
+	'Tag','Pushbutton1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess close_sD',...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.8240740740740741 0.01914893617021277 0.154320987654321 0.05319148936170213], ...
+	'String','CLOSE', ...
+	'Tag','Pushbutton2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.02777777777777778 0.2680851063829787 0.345679012345679 0.02978723404255319], ...
+	'String','COMPONENTS:', ...
+	'Style','text', ...
+	'Tag','StaticText1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'HorizontalAlignment','left', ...
+	'Position',[0.02777777777777778 0.3170212765957447 0.3549382716049382 0.5319148936170213], ...
+	'String',' ', ...
+	'Style','listbox', ...
+	'Tag','Listbox1', ...
+	'Value',1);
+
+data.sets_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'HorizontalAlignment','left', ...
+	'Position',[0.6234567901234568 0.3170212765957447 0.3549382716049382 0.5319148936170213], ...
+	'String',' ', ...
+	'Style','listbox', ...
+	'Tag','Listbox2', ...
+	'Value',1);
+
+
+data.variables_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess export',...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.4259259259259259 0.551063829787234 0.154320987654321 0.0425531914893617], ...
+	'String','->', ...
+	'Tag','Pushbutton4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess import',...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.4259259259259259 0.625531914893617 0.154320987654321 0.0425531914893617], ...
+	'String','<-', ...
+	'Tag','Pushbutton3');
+
+
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.02777777777777778 0.8531914893617022 0.2993827160493827 0.02978723404255319], ...
+	'String','DATA SETS', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.6234567901234568 0.8531914893617022 0.2561728395061728 0.02978723404255319], ...
+	'String','WORKSPACE', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess rename set',...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1820987654320987 0.9127659574468086 0.7808641975308641 0.0425531914893617], ...
+	'Style','edit', ...
+	'Tag','EditText2');
+
+data.new_name_h = h1;
+
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.02777777777777778 0.9127659574468086 0.1388888888888889 0.02978723404255319], ...
+	'String','NAME:', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+
+
+ui_h=uimenu('Label','&Tools');
+uimenu(ui_h,'Label','Copy','Callback','preprocess copy_delete copy');
+uimenu(ui_h,'Label','Delete','Callback','preprocess copy_delete delete');
+uimenu(ui_h,'Label','Refresh','Callback','preprocess refresh');
+
+set(gcf,'UserData',data);
+set_var_names;
+sD_names;
+sD_stats;
+
+
+
+%%% Subfunction: set_var_names %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function set_var_names
+
+
+variables_h=getfield(get(gcf,'UserData'),'variables_h');
+value=get(variables_h,'Value');
+len=evalin('base','length(who)');
+
+names=cell(len,1);
+
+for i=1:len
+  string=cat(2,'getfield(who,{',num2str(i),'})');
+  names(i)=evalin('base',string);
+end
+
+set(variables_h,'String',names);
+if(value > length(names))
+  set(variables_h,'Value',1);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: sD_names %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sD_names
+
+sets_h=getfield(get(gcf,'UserData'),'sets_h');
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+sD_set = getfield(get(pre_h,'UserData'),'sD_set');
+
+for i=1:length(sD_set)
+  names{i,1}=cat(2,sprintf('#%d: ',i),sD_set(i).name);
+end
+
+set(sets_h,'String',names);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: sD_stats %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sD_stats
+
+man_h=findobj(get(0,'Children'),'Tag','Management');
+c_names_h=getfield(get(man_h,'UserData'),'new_c_name_h');
+sD_name_h=getfield(get(man_h,'UserData'),'new_name_h');
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+INDEX=getfield(getfield(get(pre_h,'UserData'),'sData'),'INDEX');
+MODIFIED=getfield(getfield(get(pre_h,'UserData'),'sData'),'MODIFIED');
+value=get(getfield(get(man_h,'UserData'),'sets_h'),'Value');
+ 
+if value==INDEX
+  data=get(pre_h,'UserData');
+  sData=rmfield(data.sData,[{'INDEX'};{'MODIFIED'}]);
+  data.sD_set(INDEX)=sData;
+  data.sData.MODIFIED=0;
+  set(pre_h,'UserData',data);
+end      
+
+sData=getfield(getfield(get(pre_h,'UserData'),'sD_set'),{value});
+string1=[{sData.name}];
+
+
+set(sD_name_h,'String',string1);
+set(c_names_h,'String',sData.comp_names);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: import %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function import(varargin)
+
+if nargin==1
+  LOG=1;
+  man_h=findobj(get(0,'Children'),'Tag','Management');
+  set(0,'CurrentFigure',man_h);
+  name=varargin;
+else 
+  LOG=0;
+end
+
+variables_h=getfield(get(gcf,'UserData'),'variables_h');
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+if ~LOG
+  name=getfield(get(variables_h,'String'),{get(variables_h,'Value')});
+end
+errstr='Data to be imported must be real matrix or ''som_data_struct''.';
+new_sD=evalin('base',name{1});
+
+if isempty(pre_h)
+  errordlg('''Preprocess'' -figure does not exist. Terminating program...');
+  close_preprocess;
+  return;
+end
+
+if isstr(new_sD) | (~isstruct(new_sD) & ~isreal(new_sD))
+  errordlg(errstr);
+  return;
+elseif isstruct(new_sD) & length(new_sD) > 1
+  errordlg(errstr)
+  return;
+elseif ~isstruct(new_sD)
+  new_sD=som_data_struct(new_sD);
+  new_sD.name=name{1};
+end
+
+new_sD_names=fieldnames(new_sD);
+right_names=fieldnames(som_data_struct(1));
+for i=1:length(new_sD_names)
+  if ~any(strcmp(new_sD_names(i),right_names));
+    errordlg(errstr);
+    return;
+  end
+end
+
+data=get(pre_h,'UserData');
+data.sD_set(length(data.sD_set) + 1)=new_sD;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Import a data set from the workspace.';
+  data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''import'',''',...
+                                    name{1},''');');
+end
+set(pre_h,'UserData',data);
+sD_names;
+sD_stats;
+old =gcf;
+set(0,'CurrentFigure',pre_h);
+set_sD_stats;
+set(0,'CurrentFigure',old);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: export %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function export(varargin)
+
+if nargin == 1
+  LOG=1;
+  man_h=findobj(get(0,'Children'),'Tag','Management');
+  set(0,'CurrentFigure',man_h);
+  index=str2num(varargin{1});  
+else
+  LOG=0;
+end
+
+sets_h=getfield(get(gcf,'UserData'),'sets_h');
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if ~LOG
+  index=get(sets_h,'Value');
+end
+
+if isempty(pre_h)
+  errordlg('''Preprocess''-figure does not exist. Terminating program...');
+  close(findobj(get(0,'Children'),'Tag','Management'));
+  close(findobj(get(0,'Children'),'Tag','PlotWin'));
+  return;
+end
+
+sData=getfield(getfield(get(pre_h,'UserData'),'sD_set'),{index});
+
+if ~isvalid_var_name({sData.name})
+  return;
+end
+
+assignin('base',sData.name,sData);
+disp(sprintf('Data set ''%s'' is set to the workspace.',sData.name));
+if ~LOG
+  data=get(pre_h,'UserData');
+  data.LOG{length(data.LOG)+1}='% Export a data set to the workspace.';
+  data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''export'',''',...
+                                   num2str(index),''');');
+  set(pre_h,'UserData',data);
+end
+set_var_names;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Subfunction: rename %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function rename(arg)
+
+i=1;
+while i <= length(arg) & arg(i) ~= ' '
+  i=i+1;
+end
+
+arg2=arg(i+1:length(arg));
+arg=arg(1:i-1);
+if ~isempty(arg2)
+  LOG=1;
+  i=1;
+  if arg2(1) ~= '{'
+    while i <= length(arg2) & arg2(i) ~= ' '
+      i=i+1;
+    end
+    index=str2num(arg2(i+1:length(arg2)));
+    arg2=arg2(1:i-1);
+  else
+    while i <= length(arg2) & arg2(i) ~= '}'
+      i=i+1;
+    end
+    index=str2num(arg2(i+1:length(arg2)));
+    arg2=arg2(1:i);
+  end
+else
+  LOG=0;
+end
+
+new_name_h=getfield(get(gcf,'UserData'),'new_name_h');
+new_c_name_h=getfield(get(gcf,'UserData'),'new_c_name_h');
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  errordlg('''Preprocess'' -figure does not exist. Terminating program...');
+  close_preprocess;
+  return;
+end
+
+switch arg
+  case 'set'
+   if LOG
+     name={arg2};
+   else
+     name=get(new_name_h,'String');
+   end
+   if ~isempty(name{1}) & ~any(isspace(name{1}))
+     if ~isvalid_var_name(name)
+       sD_stats;
+       return;
+     end
+     if ~LOG
+       index=get(getfield(get(gcf,'UserData'),'sets_h'),'Value');
+     end
+     data=get(pre_h,'UserData');
+     tmp_set.name=name{1};        
+     data.sD_set(index).name=name{1};
+     if data.sData.INDEX == index
+       data.sData.name=name{1};
+     end
+     if ~LOG
+       data.LOG{length(data.LOG)+1}='% Rename a data set.';
+       data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''rename'',''set ',...
+                                                       name{1},' ',...
+                                                       num2str(index),...
+                                                       ''');');
+     end 
+
+     set(pre_h,'UserData',data);
+     sD_names;
+     string=get(data.sD_set_h,'String');
+     string{index}=cat(2,sprintf('#%d: ',index),name{1});
+     set(data.sD_set_h,'String',string);
+     string=get(data.sD_name_h,'String');
+     string{1}=cat(2,'Name:   ',name{1});
+     if index==data.sData.INDEX
+       set(data.sD_name_h,'String',string);
+     end
+   else
+     sD_stats;
+   end
+  case 'comp'
+   if ~LOG
+     names=get(new_c_name_h,'String');
+     index=get(getfield(get(gcf,'UserData'),'sets_h'),'Value');
+   else
+     names=eval(arg2);
+   end
+   if check_cell_names(names)
+     data=get(pre_h,'UserData');
+     sData=data.sD_set(index);
+     if length(sData.comp_names)==length(names)
+       data.sD_set(index).comp_names=names;
+       if index == data.sData.INDEX
+         for i=1:length(names)
+           names{i}=cat(2,sprintf('#%d: ',i),names{i});
+         end
+         set(data.comp_names_h,'String',names);
+         set(data.sel_comp_h,'String',names);
+       end
+       if ~LOG
+         data.LOG{length(data.LOG)+1}='% Rename components.';
+         str='preprocess(''rename'',''comp {';
+         for i=1:length(names)-1
+           str=cat(2,str,'''''',names{i},''''',');
+         end
+         str=cat(2,str,'''''',names{length(names)},'''''} ',...
+                 num2str(index),''');');
+         data.LOG{length(data.LOG)+1}=str;
+       else
+         set(new_c_name_h,'String',names);
+       end
+       set(pre_h,'UserData',data);          
+     else
+       errordlg('There are less components in data.');
+       sD_stats;
+       return;
+     end
+   else
+     sD_stats;  
+   end
+end
+
+%%% Subfunction: check_cell_names %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function bool=check_cell_names(names)
+
+bool = 1;
+
+if isempty(names)
+  bool= 0;
+  return;
+end
+for i=1:length(names)
+  if isempty(names{i}) | isspace(names{i})
+    bool = 0;
+    return;
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: isvalid_var_name %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function bool=isvalid_var_name(name)
+
+bool=1;
+
+tmp=name{1};
+if ~((tmp(1)>='a' & tmp(1)<='z') | (tmp(1)>='A' & tmp(1)<='Z'))
+  errordlg('Invalid name.');
+  bool=0;
+  return;
+end
+for j=1:length(tmp)
+  if ~((tmp(j)>='a' & tmp(j)<='z') | ...
+       (tmp(j)>='A' & tmp(j)<='Z') | ...
+       (j>1 & tmp(j) == '_') | ...
+       (tmp(j)>='0' & tmp(j) <= '9')) | tmp(j) == '.'
+    errordlg('Invalid name.');
+    bool=0;
+    return;
+  end
+  if j == length(tmp) & tmp(j) == '_'
+    errordlg('Invalid name.');
+    bool=0;
+    return;
+  end
+end 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: copy_delete %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function copy_delete(arg)
+
+i=1;
+while i <= length(arg) & arg(i) ~= ' '
+  i=i+1;
+end
+
+arg2=arg(i+1:length(arg));
+arg=arg(1:i-1);
+
+if ~isempty(arg2)
+  index=str2num(arg2);
+  LOG=1;
+else
+  LOG=0;
+end
+
+sets_h=getfield(get(gcf,'UserData'),'sets_h');
+if ~LOG
+  index=get(sets_h,'Value');
+end
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  errordlg('''Preprocess'' -figure does not exist. Terminating program.');
+  close_preprocess;
+  return;
+end
+
+switch arg
+  case 'copy'
+   data=get(pre_h,'UserData');
+   data.sD_set(length(data.sD_set)+1)=data.sD_set(index);
+   if ~LOG
+     data.LOG{length(data.LOG)+1}='% Copy a data set.';
+     data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''copy_delete'',''',...
+                                      'copy ',num2str(index),''');');
+   end
+   set(pre_h,'UserData',data);
+   sD_names;   
+   old=gcf;
+   set(0,'CurrentFigure',pre_h);
+   set_sD_stats;
+   set(0,'CurrentFigure',old);
+  case 'delete'
+   if length(get(sets_h,'String')) == 1
+     msgbox('No data left. Closing program...')
+     close_preprocess;
+     return;
+   end
+   data=get(pre_h,'UserData');
+   if ~isempty(data.undo) &  any(strcmp('index',fieldnames(data.undo)))
+     if data.undo.index > index
+       data.undo.index = data.undo.index-1;
+     elseif data.undo.index==index;
+       data.undo=[];
+     end
+   end
+   set1=data.sD_set(1:index-1);
+   set2=data.sD_set(index+1:length(data.sD_set));
+
+   if ~isempty(set1)
+     data.sD_set=[set1 set2];
+   else
+     data.sD_set=set2;
+   end
+   if ~LOG
+     data.LOG{length(data.LOG)+1}='% Delete a data set.';
+     data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''copy_delete'',''',...
+                                      'delete ',num2str(index),''');');
+   end
+   set(pre_h,'UserData',data);
+
+   set(sets_h,'Value',1);
+   sD_names;
+   sD_stats;
+   old = gcf;
+   set(0,'CurrentFigure',pre_h);
+
+   for i=1:length(data.sD_set)
+     string{i}=cat(2,sprintf('#%d: ',i),data.sD_set(i).name);
+   end
+
+   set(data.sD_set_h,'String',string);
+   data.sData=data.sD_set(get(data.sD_set_h,'Value'));
+   data.sData.MODIFIED=0;
+   data.sData.INDEX=1;
+   set(gcf,'UserData',data);
+   write_sD_stats;
+
+   sData=getfield(get(gcf,'UserData'),'sData');
+   if sData.INDEX > index
+     value=get(getfield(get(gcf,'UserData'),'sD_set_h'),'Value');
+     set(getfield(get(gcf,'UserData'),'sD_set_h'),'Value',value-1);
+     sData.INDEX = sData.INDEX -1;
+   elseif sData.INDEX == index
+     set(getfield(get(gcf,'UserData'),'sD_set_h'),'Value',1);
+   end
+ 
+   sel_sD;
+   set(0,'CurrentFigure',old);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function clipping(varargin)
+
+if nargin ~= 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  preh_udata=get(pre_h,'UserData');
+  preh_udata.LOG{length(preh_udata.LOG)+1}=...
+        '% Starting the ''Clipping'' -window...';
+  preh_udata.LOG{length(preh_udata.LOG)+1}='preprocess(''clipping'',''foo'');';
+  set(pre_h,'UserData',preh_udata);
+end
+
+clip_h=findobj(get(0,'Children'),'Tag','Clipping');
+
+if ~isempty(clip_h)
+  figure(clip_h);
+  return;
+end
+
+h0 = figure('Color',[0.8 0.8 0.8], ...
+	'PaperPosition',[18 180 575 432], ...
+	'PaperUnits','points', ...
+	'Position',[718 389 300 249], ...
+	'Tag','Clipping');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.03 0.03614457831325301 0.4666666666666667 0.9236947791164658], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.05333333333333334 0.5983935742971887 0.42 0.3333333333333333], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Style','frame', ...
+	'Position',[0.05333333333333334 0.33 0.42 0.24], ...
+	'Tag','Frame3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Style','frame', ...
+	'Position',[0.05333333333333334 0.06 0.42 0.24],...
+	'Tag','Frame4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.5133333333333334 0.6385542168674698 0.4666666666666667 0.321285140562249], ...
+	'Style','frame', ...
+	'Tag','Frame5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.5366666666666667 0.6666666666666666 0.42 0.2650602409638554], ...
+	'Style','frame', ...
+	'Tag','Frame6');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.31 0.823293172690763 0.15 0.09638554216867469], ...
+	'Style','edit', ...
+	'Tag','EditText1');
+
+data.big_val_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.31 0.7148594377510039 0.15 0.09638554216867469], ...
+	'Style','edit', ...
+	'Tag','EditText2');
+
+data.small_val_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.31 0.606425702811245 0.15 0.09638554216867469], ...
+	'Style','edit', ...
+	'Tag','EditText3');
+
+data.equal_val_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.06000000000000001 0.8473895582329316 0.22 0.05622489959839357], ...
+	'String','Bigger than', ...
+	'Style','text', ...
+	'Tag','StaticText1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.06000000000000001 0.7389558232931727 0.24 0.04819277108433735], ...
+	'String','Smaller than', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.06000000000000001 0.610441767068273 0.22 0.07228915662650602], ...
+	'String','Equal to', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.07000000000000001 0.465863453815261 0.06333333333333334 0.07228915662650602], ...
+	'Style','radiobutton', ...
+	'Value',1,...
+	'Tag','Radiobutton1');
+
+data.and_button_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.07000000000000001 0.3734939759036144 0.06333333333333334 0.07228915662650602], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton2');
+
+data.or_button_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[0.1466666666666667 0.45 0.2333333333333333 0.07228915662650602], ...
+	'String','AND', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'String','OR', ...
+	'Position',[0.1466666666666667 0.35 0.2333333333333333 0.07228915662650602], ...
+	'Style','text', ...
+	'Tag','StaticText5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.07000000000000001 0.1967871485943775 0.06333333333333334 0.07228915662650602], ...
+	'Style','radiobutton', ...
+	'Value',1,...
+	'Tag','Radiobutton3');
+
+data.all_button_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.07000000000000001 0.09236947791164658 0.06333333333333334 0.07228915662650602], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton4');
+
+data.sel_vects_button_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1466666666666667 0.1927710843373494 0.2333333333333333 0.07228915662650602], ...
+	'String','All vectors', ...
+	'Style','text', ...
+	'Tag','StaticText6');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1466666666666667 0.09638554216867469 0.3133333333333334 0.05622489959839357], ...
+	'String','Among selected', ...
+	'Style','text', ...
+	'Tag','StaticText7');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.7866666666666667 0.823293172690763 0.1366666666666667 0.09236947791164658], ...
+	'Style','edit', ...
+	'Tag','EditText4');
+
+data.replace_val_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.5633333333333334 0.8273092369477911 0.2066666666666667 0.07630522088353413], ...
+	'String','Replace', ...
+	'Style','text', ...
+	'Tag','StaticText8');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.5700000000000001 0.6827309236947791 0.3566666666666667 0.08032128514056225], ...
+	'String','Replace', ...
+	'Tag','Pushbutton1');
+
+data.OK_button_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess close_c',...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.6633333333333333 0.07228915662650602 0.2833333333333333 0.09638554216867469], ...
+	'String','Close', ...
+	'Tag','Pushbutton2');
+
+
+data.state.and=1;
+data.state.all=1;
+data.state.big=[];
+data.state.small=[];
+data.state.equal=[];
+data.state.replace=[];
+
+set(data.or_button_h,'Callback','preprocess and_or_cb or');
+set(data.and_button_h,'Callback','preprocess and_or_cb and');
+set(data.and_button_h,'Value',1);
+set(data.all_button_h,'Callback','preprocess all_sel_cb all');
+set(data.sel_vects_button_h,'Callback','preprocess all_sel_cb sel');
+set(data.big_val_h,'Callback','preprocess set_state_vals big');
+set(data.small_val_h,'Callback','preprocess set_state_vals small');
+set(data.equal_val_h,'Callback','preprocess set_state_vals equal');
+set(data.replace_val_h,'Callback','preprocess set_state_vals replace');
+set(data.OK_button_h,'Callback','preprocess clip_data clip');
+set(h0,'UserData',data);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function select(varargin)
+
+if nargin ~= 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  preh_udata=get(pre_h,'UserData');
+  preh_udata.LOG{length(preh_udata.LOG)+1}=...
+      '% Starting the ''Select'' -window...';
+  preh_udata.LOG{length(preh_udata.LOG)+1}='preprocess(''select'',''foo'');';
+  set(pre_h,'UserData',preh_udata);
+end
+
+sel_h=findobj(get(0,'Children'),'Tag','Select');
+
+if ~isempty(sel_h)
+  figure(sel_h);
+  return;
+end
+
+h0 = figure('Color',[0.8 0.8 0.8], ...
+	'PaperPosition',[18 180 576 432], ...
+	'PaperUnits','points', ...
+	'Position',[750 431 168 365], ...
+	'Tag','Select');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.05357142857142857 0.2712328767123288 0.8333333333333333 0.6301369863013698], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.05357142857142857 0.1041095890410959 0.8333333333333333 0.1397260273972603], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+
+h1 = uicontrol('Parent',h0,...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.6547945205479452 0.75 0.2273972602739726], ...
+	'Style','frame', ...
+	'Tag','Frame3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.4794520547945206 0.75 0.1506849315068493], ...
+	'Style','frame', ...
+	'Tag','Frame4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.2986301369863014 0.75 0.1506849315068493], ...
+	'Style','frame', ...
+	'Tag','Frame5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.5535714285714285 0.8082191780821918 0.2678571428571429 0.06575342465753425], ...
+	'Style','edit', ...
+	'Tag','EditText1');
+
+data.big_val_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.5535714285714285 0.7342465753424657 0.2678571428571429 0.06575342465753425], ...
+	'Style','edit', ...
+	'Tag','EditText2');
+
+data.small_val_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.5535714285714285 0.6602739726027397 0.2678571428571429 0.06575342465753425], ...
+	'Style','edit', ...
+	'Tag','EditText3');
+
+data.equal_val_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1071 0.8247 0.3929 0.0384], ...
+	'String','Bigger than', ...
+	'Style','text', ...
+	'Tag','StaticText1');
+
+h1 = uicontrol('Parent',h0, ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1071 0.7507 0.4286 0.0329], ...
+	'String','Smaller than', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1071 0.6630 0.3929 0.0493], ...
+	'String','Equal to', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.125 0.5643835616438356 0.1130952380952381 0.04931506849315068], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton1');
+
+data.and_button_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.125 0.5013698630136987 0.1130952380952381 0.04931506849315068], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton2');
+
+data.or_button_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2619047619047619 0.5561643835616439 0.3809523809523809 0.05205479452054795], ...
+	'String','AND', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2619047619047619 0.4986301369863014 0.3809523809523809 0.04657534246575343], ...
+	'String','OR', ...
+	'Style','text', ...
+	'Tag','StaticText5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.125 0.3808219178082192 0.1130952380952381 0.04931506849315068], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton3');
+
+data.all_button_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.125 0.3095890410958904 0.1130952380952381 0.04931506849315068], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton4');
+
+data.sel_vects_button_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2619047619047619 0.3780821917808219 0.4166666666666666 0.04931506849315068], ...
+	'String','All vectors', ...
+	'Style','text', ...
+	'Tag','StaticText6');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2619047619047619 0.3123287671232877 0.5595238095238095 0.03835616438356165], ...
+	'String','Among selected', ...
+	'Style','text', ...
+	'Tag','StaticText7');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.0952    0.1178    0.7500    0.1068], ...
+	'Style','frame', ...
+	'Tag','Frame6');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.5298    0.1342    0.2738    0.0712], ...
+	'Style','edit', ...
+	'Tag','EditText4');
+
+data.replace_val_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',8,...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1369047619047619 0.136986301369863 0.3214285714285714 0.06027397260273973], ...
+	'String','Vectors', ...
+	'Style','text', ...
+	'Tag','StaticText8');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.05357142857142857 0.01917808219178082 0.3869047619047619 0.0684931506849315], ...
+	'String','OK', ...
+	'Tag','Pushbutton1');
+
+data.OK_button_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess close_s',...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.5 0.01917808219178082 0.3869047619047619 0.0684931506849315], ...
+	'String','Close', ...
+	'Tag','Pushbutton2');
+
+
+
+data.state.and=1;
+data.state.all=1;
+data.state.big=[];
+data.state.small=[];
+data.state.equal=[];
+data.state.replace=[];
+
+set(data.or_button_h,'Callback','preprocess and_or_cb or');
+set(data.and_button_h,'Callback','preprocess and_or_cb and');
+set(data.and_button_h,'Value',1);
+set(data.all_button_h,'Callback','preprocess all_sel_cb all');
+set(data.sel_vects_button_h,'Callback','preprocess all_sel_cb sel');
+set(data.big_val_h,'Callback','preprocess set_state_vals big');
+set(data.small_val_h,'Callback','preprocess set_state_vals small');
+set(data.equal_val_h,'Callback','preprocess set_state_vals equal');
+set(data.replace_val_h,'Callback','preprocess set_state_vals replace');
+set(data.OK_button_h,'Callback','preprocess clip_data sel');
+set(h0,'UserData',data);
+
+
+
+%%% Subfunction: and_or_cb %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function and_or_cb(arg)
+
+%AND_OR_CB  A callback function. Checks that only one of the radiobox
+%           buttons 'AND' and 'OR' is pressed down.
+%
+%
+
+and_button_h=getfield(get(gcf,'UserData'),'and_button_h');
+or_button_h=getfield(get(gcf,'UserData'),'or_button_h');
+data=get(gcf,'UserData');
+
+switch arg
+  case 'or'
+   set(and_button_h,'Value',0);
+   set(or_button_h,'Value',1);
+   data.state.and=0;
+  case 'and'
+   set(or_button_h,'Value',0);
+   set(and_button_h,'Value',1);
+   data.state.and=1;
+end
+
+set(gcf,'UserData',data);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: all_sel_cb %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function all_sel_cb(arg)
+
+all_button_h=getfield(get(gcf,'UserData'),'all_button_h');
+sel_vects_button_h=getfield(get(gcf,'UserData'),'sel_vects_button_h');
+data=get(gcf,'UserData');
+
+switch arg
+ case 'all'
+  set(sel_vects_button_h,'Value',0);
+  set(all_button_h,'Value',1);
+  data.state.all=1;
+ case 'sel'
+  set(all_button_h,'Value',0);
+  set(sel_vects_button_h,'Value',1);
+  data.state.all=0;
+end
+
+set(gcf,'UserData',data);
+
+%%% Subfunction: set_state_vals %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function set_state_vals(arg)
+
+%SET_STATE_VALS  sets the values to the UserData's state-struct.
+%
+%
+
+
+data=get(gcf,'UserData');
+
+switch arg
+  case 'big'
+   big_val_h=getfield(get(gcf,'UserData'),'big_val_h');
+   val =str2num(get(big_val_h,'String'));
+   dims=size(val);
+   if dims(1) ~= 1 | dims(2) ~= 1
+     errordlg('Argument of the operation must be scalar.');
+     set(big_val_h,'String','');
+     return;
+   end 
+   if isreal(val) 
+     data.state.big=val;
+   else
+     errordlg('Limits of the operation must be real.');
+     set(big_val_h,'String','');
+     return;
+   end
+  case 'small'
+   small_val_h=getfield(get(gcf,'UserData'),'small_val_h');
+   val=str2num(get(small_val_h,'String'));
+   dims=size(val);
+   if dims(1) ~= 1 | dims(2) ~= 1
+     errordlg('Argument of the operation must be scalar.')
+     set(small_val_h,'String','');
+     return;
+   end 
+   if isreal(val)
+     data.state.small=val;
+   else
+     errordlg('Limits of the operation must be real.');
+     set(small_val_h,'String','');
+     return;
+   end 
+  case 'equal'
+   equal_val_h=getfield(get(gcf,'UserData'),'equal_val_h');
+   val = str2num(get(equal_val_h,'String'));
+   dims=size(val);
+   if dims(1) ~= 1 | dims(2) ~= 1
+     errordlg('Argument of the operation must be scalar.');
+     set(equal_val_h,'String','');
+     return;
+   end
+   if isreal(val)
+     data.state.equal=val;
+   else
+     errordlg('Limits of the operation must be real.');
+     set(equal_val_h,'String','');
+     return;
+   end
+  case 'replace'
+   replace_val_h=getfield(get(gcf,'UserData'),'replace_val_h');
+   val=str2num(get(replace_val_h,'String'));
+   dims=size(val);
+   if (dims(1) ~= 1 | dims(2) ~= 1) & ~strcmp(get(gcf,'Tag'),'Select')
+     errordlg('Argument of the operation must be scalar.');
+     set(replace_val_h,'String','');
+     return;
+   end
+   if isreal(val)
+     data.state.replace=val;
+   else
+     errordlg('Limits of the operation must be real.');
+     set(replace_val_h,'String','');
+     return;
+   end
+end
+
+set(gcf,'UserData',data);   
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: clip_data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function clip_data(arg)
+
+%CLIP_DATA  A callback function. Filters the data.
+%
+%
+
+i=1;
+while i <= length(arg) & arg(i) ~= ' '
+  i=i+1;
+end
+
+arg2=arg(i+1:length(arg));
+arg=arg(1:i-1);
+
+if ~isempty(arg2)
+  LOG=1;
+  if strcmp(arg,'sel')
+    c_h=findobj(get(0,'Children'),'Tag','Select');
+  else
+    c_h=findobj(get(0,'Children'),'Tag','Clipping');
+  end
+  set(0,'CurrentFigure',c_h);
+  i=1;
+  while i <= length(arg2) & arg2(i) ~= ' '
+    i=i+1;
+  end
+  BT=str2num(arg2(1:i-1));
+  i=i+1;
+  j=i;
+  while i <= length(arg2) & arg2(i) ~= ' '
+    i=i+1;
+  end
+  ST=str2num(arg2(j:i-1));
+  i=i+1;
+  j=i;
+  while i <= length(arg2) & arg2(i) ~= ' '
+    i=i+1;
+  end
+  EQ=str2num(arg2(j:i-1));
+  i=i+1;
+  j=i;
+  while i <= length(arg2) & arg2(i) ~= ' '
+    i=i+1;
+  end
+  AND_OR=str2num(arg2(j:i-1));
+  i=i+1;
+  j=i;
+  while i <= length(arg2) & arg2(i) ~= ' '
+    i=i+1;
+  end
+  ALL_AMONG=str2num(arg2(j:i-1));
+  i=i+1;
+  j=i;
+  while i <= length(arg2)
+    i=i+1;
+  end
+  VECT_REPL=str2num(arg2(j:i-1));
+else
+  LOG=0;
+end
+
+if ~LOG
+  big_val_h=getfield(get(gcf,'UserData'),'big_val_h');
+  small_val_h=getfield(get(gcf,'UserData'),'small_val_h');
+  equal_val_h=getfield(get(gcf,'UserData'),'equal_val_h');
+  replace_val_h=getfield(get(gcf,'UserData'),'replace_val_h');
+end
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  errordlg('''Preprocess'' -figure does not exist. Terminating program...');
+  pro_tools('close');
+  return;
+end
+
+comp_names_h=getfield(get(pre_h,'UserData'),'comp_names_h');
+selected=getfield(get(pre_h,'UserData'),'selected_vects');
+sData=getfield(get(pre_h,'UserData'),'sData');
+undo = sData;
+state=getfield(get(gcf,'UserData'),'state');
+
+if LOG
+  state.big=BT;
+  state.small=ST;
+  state.equal=EQ;
+  state.replace=VECT_REPL;
+  state.and=AND_OR;
+  state.all=ALL_AMONG;
+end
+
+if isempty(pre_h)
+  pro_tools('close');
+end
+
+if isempty(get(comp_names_h,'Value'))
+  clear_state_vals;
+  errordlg('There must be one component chosen for the operation.');
+  return;
+end
+
+n_th_comp=getfield(get_indices,{1});
+
+if isempty(state.big) & isempty(state.small) & isempty(state.equal) & ...
+   strcmp(arg,'clip')
+  clear_state_vals;
+  errordlg('At least one limit must be chosen for the-operation.');
+  return;
+end
+
+if ~isempty(state.replace) & strcmp(arg,'sel')
+  if ~all(state.replace == round(state.replace)) | any(state.replace < 1)
+    errordlg('Indices of vectors must be positive integers.');
+    return;
+  elseif any(state.replace > length(sData.data(:,1)))
+    errordlg('Indices of the vectors to be selected are too big.');
+    return;
+  end
+end
+
+if isempty(state.replace) & strcmp(arg,'clip')
+  clear_state_vals;
+  errordlg('Replace value must be determined for Clipping-operation.');
+  return;
+end
+
+if isempty(state.big) & isempty(state.small) & isempty(state.equal) & ...
+   isempty(state.replace)
+   clear_state_vals;
+   return;
+end
+
+bt_indices=[];
+lt_indices=[];
+equal_indices=[];
+
+
+if ~isempty(state.big)
+  if state.all
+    bt_indices=find(sData.data(:,n_th_comp) > state.big); 
+  else
+    bt_indices=selected(find(sData.data(selected,n_th_comp) > state.big));
+  end
+end
+
+if ~isempty(state.small)
+  if state.all
+    lt_indices=find(sData.data(:,n_th_comp) < state.small);
+  else
+    lt_indices=selected(find(sData.data(selected,n_th_comp) < state.small)); 
+  end
+end
+
+if ~isempty(state.equal)
+  if isnan(state.equal)
+    if state.all
+      equal_indices=find(isnan(sData.data(:,n_th_comp)));
+    else
+      equal_indices=selected(find(isnan(sData.data(selected,n_th_comp))));
+    end
+  elseif state.all
+    equal_indices=find(sData.data(:,n_th_comp)==state.equal);
+  else
+    equal_indices=selected(find(sData.data(selected,n_th_comp)==state.equal));
+  end
+end
+
+if state.and
+
+  if ~isempty(bt_indices) | ~isempty(lt_indices) | ~isempty(equal_indices)...
+     | strcmp(arg,'sel')
+
+    if isempty(bt_indices) & isempty(lt_indices) & isempty(equal_indices) &...
+       isempty(state.replace)
+      clear_state_vals;
+      return;
+    end
+    if isempty(bt_indices)
+      if ~state.all
+        bt_indices=selected;
+      else
+        bt_indices=1:getfield(size(sData.data),{1});
+      end
+    end
+    if isempty(lt_indices)
+      if ~state.all
+        lt_indices=selected;
+      else
+        lt_indices=1:getfield(size(sData.data),{1});
+      end
+    end
+    if isempty(equal_indices)
+      if ~state.all
+        equal_indices=selected;
+      else
+        equal_indices=1:getfield(size(sData.data),{1});
+      end
+    end
+    
+    indices=intersect(intersect(bt_indices,lt_indices),equal_indices);
+    if strcmp(arg,'sel')
+      if ~isempty(indices) | ~isempty(state.replace)
+        if isempty(state.replace)
+          NOTEMPTY=0;
+          if ~state.all
+            state.replace=selected;
+          else
+            state.replace=1:getfield(size(sData.data),{1});
+          end
+        else
+          NOTEMPTY=1;
+        end
+        if isempty(indices)
+          indices=selected;
+        end
+        indices=intersect(indices,state.replace);
+        if isempty(indices)
+          indices=selected;
+        end
+        data=get(pre_h,'UserData');
+        data.undo.sData=sData;
+        data.undo.selected=data.selected_vects;
+        data.selected_vects=indices;
+        if ~LOG
+         if ~NOTEMPTY
+           data.LOG{length(data.LOG)+1}='% Select vectors.';
+           data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''clip_data'',''',...
+                                                 arg,...
+                                                 ' ',num2str(state.big),...
+                                                 ' ',num2str(state.small),...
+                                                 ' ',num2str(state.equal),...
+                                                 ' ',num2str(state.and),...
+                                                 ' ',num2str(state.all),...
+                                                 ''');');
+         else
+           code=write_log_code(state.replace,...
+                               arg,...
+                               state.big,...
+                               state.small,...
+                               state.equal,...
+                               state.and,...
+                               state.all);
+           data.LOG(length(data.LOG)+1:length(data.LOG)+length(code))=code;
+         end 
+        end 
+        set(pre_h,'UserData',data);
+        old=gcf;
+        set(0,'CurrentFigure',pre_h);
+        sel_comp;
+        cplot_mimema;
+        vect_means(data.sData,data.vect_mean_h,data.selected_vects);
+        set(0,'CurrentFigure',old);
+      end
+      clear_state_vals;
+      return;
+    end
+    sData.data(indices,n_th_comp) = state.replace;
+    sData.MODIFIED=1;
+  end
+else
+  indices=union(union(bt_indices,lt_indices),equal_indices);
+  if ~isempty(indices) | strcmp(arg,'sel')
+    if strcmp(arg,'sel')
+      if ~isempty(indices) | ~isempty(state.replace')
+        data=get(pre_h,'UserData');
+        data.undo.sData=sData;
+        data.undo.selected=data.selected_vects;
+        data.selected_vects=union(indices,state.replace);
+        if ~LOG
+         if isempty(state.replace);
+           data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''clip_data'',''',...
+                                                 arg,...
+                                                 ' ',num2str(state.big),...
+                                                 ' ',num2str(state.small),...
+                                                 ' ',num2str(state.equal),...
+                                                 ' ',num2str(state.and),...
+                                                 ' ',num2str(state.all),...
+                                                 ''');');
+         else
+           code=write_log_code(state.replace,...
+                               arg,...
+                               state.big,...
+                               state.small,...
+                               state.equal,...
+                               state.and,...
+                               state.all);
+           data.LOG(length(data.LOG)+1:length(data.LOG)+length(code))=code;
+         end
+        end 
+        set(pre_h,'UserData',data);
+        old=gcf;
+        set(0,'CurrentFigure',pre_h);
+        sel_comp;
+	vect_means(data.sData,data.vect_mean_h,data.selected_vects);
+        cplot_mimema;
+        set(0,'CurrentFigure',old);
+      end
+      clear_state_vals;
+      return;
+    end
+    sData.data(indices,n_th_comp)=state.replace;
+    sData.MODIFIED=1;
+  end
+end
+
+if sData.MODIFIED
+  data=get(pre_h,'UserData');
+  data.sData=sData;
+  data.undo.sData=undo;
+  if ~LOG
+    if strcmp(arg,'sel')
+      data.LOG{length(data.LOG)+1}='% Select vectors';
+    else
+      data.LOG{length(data.LOG)+1}='% Clip values.';
+    end
+    if strcmp(arg,'clip') | isempty(state.replace)
+     data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''clip_data'',''',arg,...
+                                                 ' ',num2str(state.big),...
+                                                 ' ',num2str(state.small),...
+                                                 ' ',num2str(state.equal),...
+                                                 ' ',num2str(state.and),...
+                                                 ' ',num2str(state.all),...
+                                                 ' ',num2str(state.replace),...
+                                                 ''');');
+    else
+      code=write_log_code(state.replace,...
+                          arg,...
+                          state.big,...
+                          state.small,...
+                          state.equal,...
+                          state.and,...
+                          state.all);
+      data.LOG(length(data.LOG)+1:length(data.LOG)+length(code))=code;
+    end
+  end 
+  set(pre_h,'UserData',data);
+  old=gcf;
+  set(0,'CurrentFigure',pre_h)
+
+  vector_h=getfield(get(gcf,'UserData'),'vector_h');
+  vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+  set(gcf,'CurrentAxes',vector_h);
+  vect_means(sData,vect_mean_h,selected);
+  cplot_mimema;
+  sel_comp;
+
+  set(0,'CurrentFigure',old);
+end
+
+clear_state_vals;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: clear_state_vals %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function clear_state_vals
+
+%CLEAR_STATE_VALS  Sets the fields of the UserData's state-struct empty.
+%
+%
+
+
+data=get(gcf,'UserData');
+set(data.big_val_h,'String','');
+set(data.small_val_h,'String','');
+set(data.equal_val_h,'String','');
+set(data.replace_val_h,'String','');
+data.state.big=[];
+data.state.small=[];
+data.state.equal=[];
+data.state.replace=[];
+set(gcf,'UserData',data);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function delay(varargin)
+
+delay_h=findobj(get(0,'Children'),'Tag','Delay');
+
+if nargin ~= 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  preh_udata=get(pre_h,'UserData');
+  preh_udata.LOG{length(preh_udata.LOG)+1}=...
+      '% Starting the ''Delay'' -window...';
+  preh_udata.LOG{length(preh_udata.LOG)+1}='preprocess(''delay'',''foo'');';
+  set(pre_h,'UserData',preh_udata);
+end
+
+if ~isempty(delay_h)
+  figure(delay_h);
+  return;
+end
+
+h0 = figure('Color',[0.8 0.8 0.8], ...
+	'PaperPosition',[18 180 576 432], ...
+	'PaperUnits','points', ...
+	'Position',[759 664 162 215], ...
+	'Tag','Delay');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.05555555555555555 0.2046511627906977 0.8950617283950617 0.7441860465116279], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.08641975308641975 0.6976744186046512 0.8333333333333333 0.2232558139534884], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.08641975308641975 0.227906976744186 0.8333333333333333 0.4418604651162791], ...
+	'Style','frame', ...
+	'Tag','Frame3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'Callback','preprocess delay_data',...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.0556 0.0326 0.4012 0.1163], ...
+	'String','OK', ...
+	'Tag','Pushbutton1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'Callback','preprocess close_d',...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.5494 0.0326 0.4012 0.1163], ...
+	'String','Close', ...
+	'Tag','Pushbutton2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.4876543209876543 0.7534883720930232 0.3518518518518519 0.1255813953488372], ...
+	'Style','edit', ...
+	'Tag','EditText1');
+
+data.delay_val_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1173 0.7860 0.3086 0.0651], ...
+	'String','Delay', ...
+	'Style','text', ...
+	'Tag','StaticText1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'Callback','preprocess clip_exp_cb c_this',...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.1173 0.5349 0.1173 0.0837], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton1');
+
+data.c_this_button_h=h1;
+data.mode='c_this';
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess clip_exp_cb c_all',...
+	'ListboxTop',0, ...
+	'Position',[0.1173 0.4047 0.1173 0.0837], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton2');
+
+data.c_all_button_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess clip_exp_cb e_all',...
+	'ListboxTop',0, ...
+	'Position',[0.1173    0.2651    0.1173    0.0837], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton3');
+
+data.e_all_button_h=h1;
+
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.26 0.5534883720930233 0.4135802469135802 0.06511627906976744], ...
+	'String','Clip this', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.26 0.413953488372093 0.3765432098765432 0.06511627906976744], ...
+	'String','Clip all', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.26 0.2744186046511628 0.4197530864197531 0.06511627906976744], ...
+	'String','Expand all', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+
+
+set(gcf,'UserData',data);
+
+%%% Subfunction clip_exp_cb %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function clip_exp_cb(arg)
+
+c_this_button_h=getfield(get(gcf,'UserData'),'c_this_button_h');
+c_all_button_h=getfield(get(gcf,'UserData'),'c_all_button_h');
+e_all_button_h=getfield(get(gcf,'UserData'),'e_all_button_h');
+data=get(gcf,'UserData');
+
+
+switch arg    
+  case 'c_this'
+   set(c_all_button_h,'Value',0);
+   set(e_all_button_h,'Value',0);
+   set(c_this_button_h,'Value',1);
+   data.mode='c_this';
+  case 'c_all'
+   set(c_this_button_h,'Value',0);
+   set(e_all_button_h,'Value',0);
+   set(c_all_button_h,'Value',1);
+   data.mode='c_all';
+  case 'e_all'
+   set(c_this_button_h,'Value',0);
+   set(c_all_button_h,'Value',0);
+   set(e_all_button_h,'Value',1);
+   data.mode='e_all';
+end
+
+set(gcf,'UserData',data);
+
+%%% Subfunction: delay_data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function delay_data(varargin)
+
+if nargin == 1
+  del_h=findobj(get(0,'Children'),'Tag','Delay');
+  set(0,'CurrentFigure',del_h);
+  LOG=1;
+  arg=varargin{1};
+  i=1;
+  while i <= length(arg) & arg(i) ~= ' ' 
+    i=i+1;
+  end
+  delay=str2num(arg(1:i-1));
+  no=str2num(arg(i+1:length(arg)));
+else
+  LOG=0;
+end
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+q='Delay operation is not evaluated.';
+t='Warning';
+if isempty(pre_h)
+  errordlg('''Preprocess'' -figure does not exist. Terminating program...');
+  pro_tools('close');
+  return;
+end
+
+sData=getfield(get(pre_h,'UserData'),'sData');
+undo = sData;
+data=get(gcf,'UserData');
+if ~LOG
+  delay=str2num(get(data.delay_val_h,'String'));
+  if isempty(delay)
+    errordlg('Value of ''Delay'' must be defined.');
+    return
+  end
+  set(data.delay_val_h,'String','');
+  if round(delay) ~= delay
+    errordlg('Value of ''Delay'' must be integer.');
+    return;
+  end
+end
+comp_names_h=getfield(get(pre_h,'UserData'),'comp_names_h');
+if isempty(get(comp_names_h,'Value'))
+  errordlg('There are not components chosen.');
+  return;
+end
+n_th_comp=getfield(get_indices,{1});
+len=length(sData.data(:,1));
+
+if LOG
+  switch no
+    case 1
+     data.mode='c_this';
+     preprocess('clip_exp_cb','c_this');
+    case 2
+     data.mode='c_all';
+     preprocess('clip_exp_cb','c_all');
+    case 3
+     data.mode='e_all';
+     preprocess('clip_exp_cb','e_all');
+  end
+end
+
+switch data.mode
+  case 'c_this'
+   MODE='1';
+   if delay > 0
+     sData.data(delay+1:len,n_th_comp)=sData.data(1:len-delay);
+     if delay >= len
+       errordlg(q,t);
+       return;
+     else
+       sData.data(1:delay,n_th_comp)=NaN;
+     end
+   elseif delay < 0
+     sData.data(1:len+delay,n_th_comp)=...
+              sData.data(abs(delay)+1:len,n_th_comp);    
+     if abs(delay) >= len
+       errordlg(q,t);
+       return;
+     else
+       sData.data(len+delay+1:len,n_th_comp)=NaN;
+     end
+   end
+   if delay ~= 0
+     data=get(pre_h,'UserData');
+     sData.MODIFIED=1;
+     sData.comp_norm(n_th_comp)=[];
+     data.sData=sData;
+     data.undo.sData=undo;
+     set(pre_h,'UserData',data);
+     old = gcf;
+     set(0,'CurrentFigure',pre_h);
+     sel_comp;
+     cplot_mimema;
+     set(0,'CurrentFigure',old);
+   end
+  case 'c_all'
+   MODE='2';
+   if delay > 0
+     sData.data(delay+1:len,n_th_comp)=sData.data(1:len-delay,n_th_comp);
+     if delay >= len
+       errordlg(q,t);
+       return;
+     else
+       sData.data=sData.data(delay+1:len,:);
+     end
+   elseif delay < 0
+    sData.data(1:len+delay,n_th_comp)=sData.data(abs(delay)+1:len,n_th_comp);
+    if abs(delay) >= len
+      errordlg(q,t);
+      return;
+    else
+      sData.data=sData.data(1:len+delay,:);
+    end
+   end
+   if delay ~= 0
+     data=get(pre_h,'UserData');
+     sData.MODIFIED=1;
+     sData.comp_norm(:,:)={[]};
+     data.sData=sData;
+     data.undo.sData=undo;
+     data.undo.selected=data.selected_vects;
+     if delay > 0
+       data.selected_vects=...
+                        data.selected_vects(find(data.selected_vects>delay));
+       data.selected_vects=data.selected_vects-delay;
+     elseif nargin == 1
+       data.selected_vects=...
+         data.selected_vects(find(data.selected_vects<=len-abs(delay)));
+     end
+     set(pre_h,'UserData',data);
+     old=gcf;
+     set(0,'CurrentFigure',pre_h);
+     vects=zeros(1,length(sData.data(:,1)));
+     vects(data.selected_vects)=1;
+     write_sD_stats;
+     draw_vectors(vects,data.vector_h);
+     sel_comp;
+     cplot_mimema;
+     set(0,'CurrentFigure',old);
+   end
+  case 'e_all'
+   MODE='3';
+   if delay > 0
+     sData.data(len+1:len+delay,:)=NaN;
+     sData.data(1+delay:delay+len,n_th_comp)=sData.data(1:len,n_th_comp);
+     sData.data(1:delay,n_th_comp)=NaN;
+   elseif delay < 0
+     delay=abs(delay);
+     sData.data(delay+1:len+delay,:)=sData.data;
+     sData.data(1:delay,:)=NaN;
+     sData.data(1:len,n_th_comp)=sData.data(delay+1:len+delay,n_th_comp);
+     sData.data(len+1:len+delay,n_th_comp)=NaN;
+   end 
+   if delay ~= 0
+     data=get(pre_h,'UserData');
+     sData.MODIFIED=1;
+     sData.comp_norm(:,:)={[]};
+     data.sData=sData;
+     data.undo.sData=undo;
+     data.undo.selected=data.selected_vects;
+     set(pre_h,'UserData',data);
+     old=gcf;
+     set(0,'CurrentFigure',pre_h);
+     write_sD_stats;
+     pro_tools('selall');
+     set(0,'CurrentFigure',old);
+   end
+end
+ 
+if ~LOG
+  data=get(pre_h,'UserData');
+  data.LOG{length(data.LOG)+1}='% Delay a component.';
+  data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''delay_data'',''',...
+                                      num2str(delay),' ',MODE,''');');
+  set(pre_h,'UserData',data);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function window(varargin)
+
+if nargin ~= 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  preh_udata=get(pre_h,'UserData');
+  preh_udata.LOG{length(preh_udata.LOG)+1}=...
+    '% Starting the ''Windowed'' -window...';
+  preh_udata.LOG{length(preh_udata.LOG)+1}='preprocess(''window'',''foo'');';
+  set(pre_h,'UserData',preh_udata);
+end
+
+win_h=findobj(get(0,'Children'),'Tag','Window');
+
+if ~isempty(win_h)
+  figure(win_h);
+  return;
+end
+
+h0 = figure('Color',[0.8 0.8 0.8], ...
+	'PaperPosition',[18 180 576 432], ...
+	'PaperUnits','points', ...
+	'Position',[513 703 288 219], ...
+	'Tag','Window');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.03125 0.1552511415525114 0.9375 0.7990867579908676], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.04861111111111111 0.7214611872146118 0.9027777777777777 0.2009132420091324], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.04861111111111111 0.1780821917808219 0.2777777777777778 0.5251141552511416], ...
+	'Style','frame', ...
+	'Tag','Frame3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.3611111111111111 0.1780821917808219 0.2777777777777778 0.5251141552511416], ...
+	'Style','frame', ...
+	'Tag','Frame4');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.6736111111111111 0.1780821917808219 0.2777777777777778 0.5251141552511416], ...
+	'Style','frame', ...
+	'Tag','Frame5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess eval_windowed',...	
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.03125 0.0319634703196347 0.2256944444444444 0.091324200913242], ...
+	'String','OK', ...
+	'Tag','Pushbutton1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess close_w', ...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.7430555555555555 0.0319634703196347 0.2256944444444444 0.091324200913242], ...
+	'String','Close', ...
+	'Tag','Pushbutton2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.7083333333333333 0.7625570776255708 0.2083333333333333 0.1232876712328767], ...
+	'Style','edit', ...
+	'Tag','EditText1');
+
+data.win_len_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.07638888888888888 0.8036529680365296 0.3784722222222222 0.0547945205479452], ...
+	'String','Window length', ...
+	'Style','text', ...
+	'Tag','StaticText1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb centered',...
+	'ListboxTop',0, ...
+	'Position',[0.06597222222222222 0.5616438356164384 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton1');
+
+data.centered_h=h1;
+data.position='center';
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb previous',...
+	'ListboxTop',0, ...
+	'Position',[0.06597222222222222 0.4018264840182648 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton2');
+
+data.previous_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb next',...
+	'ListboxTop',0, ...
+	'Position',[0.06597222222222222 0.2465753424657534 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton3');
+
+data.next_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	 'Callback','preprocess window_cb mean',...
+	'ListboxTop',0, ...
+	'Position',[0.3784722222222222 0.5799086757990868 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton4');
+
+data.mean_h=h1;
+data.mode='mean';
+
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb median',...
+	'ListboxTop',0, ...
+	'Position',[0.3784722222222222 0.4611872146118721 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton5');
+
+
+data.median_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb max',...
+	'ListboxTop',0, ...
+	'Position',[0.3784722222222222 0.3515981735159817 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton6');
+
+data.max_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'Callback','preprocess window_cb min',...
+	'BackgroundColor',[0.8 0.8 0.8], ...	
+	'ListboxTop',0, ...
+	'Position',[0.3784722222222222 0.2374429223744292 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton7');
+
+data.min_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb clip',...
+	'ListboxTop',0, ...
+	'Position',[0.6909722222222222 0.5525114155251141 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton8');
+
+data.clip_h=h1;
+data.eval_mode='clip';
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb expand',...
+	'ListboxTop',0, ...
+	'Position',[0.6909722222222222 0.2922374429223744 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton9');
+
+data.expand_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.132 0.5799 0.19 0.0548], ...
+	'String','Centered', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.132 0.4247 0.1667 0.0548], ...
+	'String','Previous', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.132 0.2648 0.1632 0.0548], ...
+	'String','Next', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+h1 = uicontrol('Parent',h0, ...,
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.445 0.6027397260273972 0.19 0.0547945205479452], ...
+	'String','Mean', ...
+	'Style','text', ...
+	'Tag','StaticText5');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.445 0.4795 0.1806 0.0548], ...
+	'String','Median', ...
+	'Style','text', ...
+	'Tag','StaticText6');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.445 0.3699 0.1667 0.0548], ...
+	'String','Max', ...
+	'Style','text', ...
+	'Tag','StaticText7');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.445 0.2557077625570776 0.1597222222222222 0.0547945205479452], ...
+	'String','Min', ...
+	'Style','text', ...
+	'Tag','StaticText8');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.7535 0.5753 0.1354 0.054], ...
+	'String','Clip', ...
+	'Style','text', ...
+	'Tag','StaticText9');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.7534722222222222 0.3150684931506849 0.1527777777777778 0.0547945205479452], ...
+	'String','Expand', ...
+	'Style','text', ...
+	'Tag','StaticText10');
+
+
+
+set(gcf,'UserData',data);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function window_cb(arg)
+
+data=get(gcf,'UserData');
+
+if any(strcmp(arg,[{'centered'},{'previous'},{'next'}]))
+  switch arg
+    case 'centered'
+     data.position='center';
+     set(data.previous_h,'Value',0);
+     set(data.next_h,'Value',0);
+     set(data.centered_h,'Value',1);
+    case 'previous'
+     data.position='previous';
+     set(data.centered_h,'Value',0);
+     set(data.next_h,'Value',0);
+     set(data.previous_h,'Value',1);
+    case 'next'
+     data.position='next';
+     set(data.centered_h,'Value',0);
+     set(data.previous_h,'Value',0);
+     set(data.next_h,'Value',1);
+  end
+elseif any(strcmp(arg,[{'mean'},{'median'},{'min'},{'max'}]))
+  switch arg
+    case 'mean'
+     data.mode='mean';
+     set(data.median_h,'Value',0);
+     set(data.min_h,'Value',0);
+     set(data.max_h,'Value',0);
+     set(data.mean_h,'Value',1);
+    case 'median'
+     data.mode='median';
+     set(data.mean_h,'Value',0);
+     set(data.max_h,'Value',0);
+     set(data.min_h,'Value',0);
+     set(data.median_h,'Value',1);
+    case 'max'
+     data.mode='max';
+     set(data.mean_h,'Value',0);
+     set(data.median_h,'Value',0);
+     set(data.min_h,'Value',0);
+     set(data.max_h,'Value',1);
+    case 'min'
+     data.mode='min';
+     set(data.mean_h,'Value',0);
+     set(data.median_h,'Value',0);
+     set(data.max_h,'Value',0);
+     set(data.min_h,'Value',1);
+  end
+elseif any(strcmp(arg,[{'clip','expand'}]))
+  switch arg
+    case 'clip'
+     data.eval_mode='clip';
+     set(data.expand_h,'Value',0);
+     set(data.clip_h,'Value',1);
+    case 'expand'
+     data.eval_mode='expand';
+     set(data.clip_h,'Value',0);
+     set(data.expand_h,'Value',1); 
+  end
+end
+
+set(gcf,'UserData',data);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function eval_windowed(varargin)
+
+if nargin == 1
+  LOG=1;
+  i=1;
+  arg=varargin{1};
+  while i <= length(arg) & arg(i) ~= ' '
+    i=i+1;
+  end
+  value=str2num(arg(1:i-1));
+  i=i+1;
+  j=i;
+  while i <= length(arg) & arg(i) ~= ' '
+    i=i+1;
+  end
+  position=arg(j:i-1);
+  i=i+1;
+  j=i;
+  while i <= length(arg) & arg(i) ~= ' '
+    i=i+1;
+  end
+  mode=arg(j:i-1);
+  i=i+1;
+  j=i;
+  while i <= length(arg) & arg(i) ~= ' '
+    i=i+1;
+  end
+  eval_mode=arg(j:i-1);
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+if LOG
+  data.position=position;
+  data.eval_mode=eval_mode;
+  data.mode=mode;
+end
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  errordlg('''Preprocess''-window does not exist. Terminating program...');
+  pro_tools('close');
+  return;
+end
+
+comp_names_h=getfield(get(pre_h,'UserData'),'comp_names_h');
+sData=getfield(get(pre_h,'UserData'),'sData');
+undo=sData;
+
+if isempty(get(comp_names_h,'Value'))
+ errordlg('There are not components chosen.');
+ return;
+end
+
+if ~LOG
+  if isempty(get(data.win_len_h,'String'))
+    errordlg('Window length must be defined');
+    return;
+  end
+
+  value=str2num(get(data.win_len_h,'String'));
+end
+
+set(data.win_len_h,'String','');
+
+if ~LOG
+  if isempty(value) | value < 0 | value ~= round(value)
+    errordlg('Window length must be positive integer.');
+    return;
+  end
+
+  if value > length(sData.data(:,1))
+    errordlg('Length of window is too big.');
+    return;
+  end
+end
+
+index=getfield(get_indices,{1});
+
+sData=eval_operation(sData,value,data.mode,data.eval_mode,data.position,index);
+sData.comp_norm(index)={[]};
+u_data=get(pre_h,'UserData');
+u_data.sData=sData;
+u_data.undo.sData=undo;
+u_data.undo.selected=u_data.selected_vects;
+
+if ~LOG
+  u_data.LOG{length(u_data.LOG)+1}=...
+    '% Evaluating the wanted ''windowed'' -operation.';
+  u_data.LOG{length(u_data.LOG)+1}=cat(2,'preprocess(''eval_windowed'',',...
+                                        '''',num2str(value),...
+                                       ' ',data.position,' ',data.mode,...
+                                       ' ',data.eval_mode,''');');
+end
+ 
+set(pre_h,'UserData',u_data);
+old=gcf;
+set(0,'CurrentFigure',pre_h);
+
+if strcmp(data.eval_mode,'expand');
+  write_sD_stats;
+  pro_tools('selall');
+else
+  sel_comp;
+  cplot_mimema;
+end
+
+set(0,'CurrentFigure',old);
+
+
+
+%%% Subfunction: eval_operation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+function sData=eval_operation(sData,winlen,mode,evalmode,position,n)
+
+
+len=length(sData.data(:,1));
+dim=length(sData.data(1,:));
+
+switch(position)
+  case 'center'
+   prev=round(winlen/2)-1;
+   next=winlen-round(winlen/2);
+  case 'previous'
+   prev=winlen-1;
+   next=0;
+  case 'next'
+   prev=0;
+   next=winlen-1;
+end
+
+switch(evalmode)
+  case 'clip'
+   for center=1:len
+     win=center-prev:center-prev+winlen-1;
+     win=win(find(win > 0 & win <= len));
+     str=cat(2,mode,'(sData.data(win(find(~isnan(sData.data(win,n)))),n))');
+     tmp(center)=eval(str);
+   end
+   sData.data(:,n)=tmp;
+  case 'expand'   
+   for i=1:len+winlen-1  
+     win=i-(winlen-1):i;
+     win=win(find(win > 0 & win <= len));
+     str=cat(2,mode,'(sData.data(win(find(~isnan(sData.data(win,n)))),n))');
+     tmp(i)=eval(str);
+   end  
+  sData.data=cat(1,repmat(NaN,next,dim),sData.data,repmat(NaN,prev,dim));
+  sData.data(:,n)=tmp;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function pro_tools(arg)
+
+switch arg
+  case 'close'
+   close_preprocess;
+  case 'c_stat'
+   write_c_stats;
+  case 'plot_hist'
+   plot_hist;
+  case 'plot'
+   plot_button;
+  case 'plxy'
+   plxy_button;
+  case 'bplo'
+   bplo_button;
+  case 'hist'
+   hist_button;
+end
+
+
+%%% Subfunction close_preprocess %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function close_preprocess
+
+ 
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+man_h=findobj(get(0,'Children'),'Tag','Management');
+clip_h=findobj(get(0,'Children'),'Tag','Clipping');
+plot_h=findobj(get(0,'Children'),'Tag','PlotWin');
+delay_h=findobj(get(0,'Children'),'Tag','Delay');
+window_h=findobj(get(0,'Children'),'Tag','Window');
+sel_h=findobj(get(0,'Children'),'Tag','Select');
+
+if ~isempty(man_h)
+  close(man_h);
+end
+if ~isempty(clip_h)
+  close(clip_h);
+end
+if ~isempty(plot_h)
+  close(plot_h);
+end
+if ~isempty(delay_h)
+  close(delay_h);
+end
+if ~isempty(window_h)
+  close(window_h);
+end
+if ~isempty(sel_h)
+  close(sel_h);
+end
+if ~isempty(pre_h)
+  close(pre_h);
+end
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: undo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function undo(varargin)
+
+if nargin == 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  set(0,'CurrentFigure',pre_h);
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+if ~isempty(data.undo)
+  if any(strcmp('selected',fieldnames(data.undo)))
+    data.selected_vects=data.undo.selected;
+  end
+  if ~any(strcmp('index',fieldnames(data.undo)))
+    data.sData=data.undo.sData;
+    data.undo=[];
+    if ~LOG
+      data.LOG{length(data.LOG)+1}='% Undo the most recent operation.';
+      data.LOG{length(data.LOG)+1}='preprocess(''undo'',''foo'');';
+    end
+    set(gcf,'UserData',data);
+    set_compnames(data.sData,data.comp_names_h);
+    write_sD_stats;
+    vect_means(data.sData,data.vect_mean_h,data.selected_vects);
+    sel_comp;
+    cplot_mimema;
+    return;
+  end
+  
+  % 'undo.sData' does not exist in sD_set - array
+
+  index=data.undo.index; 
+  data.undo.sData=rmfield(data.undo.sData,[{'INDEX'};{'MODIFIED'}]);
+  if index<=length(data.sD_set)
+    rest=data.sD_set(index:length(data.sD_set));        
+  else
+    rest=[];
+  end
+  data.sD_set=cat(2,data.sD_set(1:index-1),data.undo.sData,rest);
+  data.undo=[];
+  if ~LOG
+    data.LOG{length(data.LOG)+1}='% Undo the most recent operation.';
+    data.LOG{length(data.LOG)+1}='preprocess(''undo'',''foo'');';
+  end
+  set(gcf,'UserData',data);
+  set(getfield(get(gcf,'UserData'),'sD_set_h'),'Value',index);
+  set_sD_stats;
+  sel_sD;
+else
+  msgbox('Can''t do...');
+end
+
+%%% Subfunction: write_c_stats %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function write_c_stats(varargin)
+
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+comp_names_h=getfield(get(pre_h,'UserData'),'comp_names_h');
+sel_comp_h=getfield(get(pre_h,'UserData'),'sel_comp_h');
+sel_chist_h=getfield(get(pre_h,'UserData'),'sel_chist_h');
+
+if nargin==1
+  val1=varargin(1);
+else
+  val1=get(sel_comp_h,'String');
+end
+   
+if ~isempty(val1) & iscell(val1)
+  selected_vects=getfield(get(pre_h,'UserData'),'selected_vects');
+  sData=getfield(get(pre_h,'UserData'),'sData');
+  sel_cdata_h=getfield(get(pre_h,'UserData'),'sel_cdata_h');
+  name=getfield(get(sel_comp_h,'String'),{get(sel_comp_h,'Value')});
+  name=name{1};
+  i=2;
+
+  while ~isempty(str2num(name(i)))
+   value(i-1)=name(i);
+   i=i+1;
+  end
+
+  value=str2num(value);
+
+
+  data=sData.data(selected_vects,value);
+
+  string{1} = cat(2,'Min: ',sprintf('%-10.3g',min(data)));
+  string{2} = cat(2,'Mean: ',sprintf('%-10.3g',mean(data(find(~isnan(data))))));
+  string{3} = cat(2,'Max: ',sprintf('%-10.3g',max(data)));
+  string{4} = cat(2,'Std: ',sprintf('%-10.3g',std(data(find(~isnan(data)))))); 
+  string{5} = cat(2,'Number of NaNs: ',sprintf('%-10.3g',sum(isnan(data))));
+  string{6} = cat(2,'NaN (%):',...
+                    sprintf('%-10.3g',100*sum(isnan(data))/length(data)));
+  string{7} = cat(2,'Number of values: ',sprintf('%-10.3g',...
+                    length(find(~isnan(unique(data))))));
+  set(sel_cdata_h,'String',string);
+  set(sel_cdata_h,'HorizontalAlignment','left');  
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction plot_hist %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function plot_hist
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+sel_chist_h=getfield(get(pre_h,'UserData'),'sel_chist_h');
+sData=getfield(get(pre_h,'UserData'),'sData');
+selected=getfield(get(pre_h,'UserData'),'selected_vects');
+
+value=get(getfield(get(pre_h,'UserData'),'sel_comp_h'),'Value');
+subplot(sel_chist_h);
+hold off;
+cla;
+if all(isnan(sData.data(:,value)));
+  return;
+end
+hold on;
+lim1=min(sData.data(:,value));
+lim2=max(sData.data(:,value));
+if lim2 - lim1 >= eps
+  x=lim1:(lim2-lim1)/(30-1):lim2;
+  set(sel_chist_h,'XLim',[lim1 lim2]);
+elseif lim1 ~= 0
+  x=(lim1)/2:lim1/(30-1):lim1+(lim1)/2;
+  set(sel_chist_h,'Xlim',[lim1-abs(lim1/2) lim1+abs(lim1/2)]);
+else
+  x=-1:2/(30-1):1;
+  set(sel_chist_h,'XLim',[-1 1]);
+end
+
+hist(sData.data(selected,value),x);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: select_all %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function select_all(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+data.selected_vects=(1:length(data.sData.data(:,1)));
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Select all vectors.';
+  data.LOG{length(data.LOG)+1}='selall(''foo'');';
+end
+set(gcf,'UserData',data);
+tmp=zeros(1,length(data.sData.data(:,1)));
+tmp(data.selected_vects)=1;
+draw_vectors(tmp,data.vector_h);
+cplot_mimema;
+vect_means(data.sData,data.vect_mean_h,data.selected_vects);
+sel_comp;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: plot_button %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function plot_button
+
+%PLOT_BUTTON  A callback function. Plots all the components and marks
+%             the chosen components.
+%
+%
+
+sData=getfield(get(gcf,'UserData'),'sData');
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+
+indices=get_indices;
+if isempty(indices)
+  return;
+end
+h=findobj(get(0,'Children'),'Tag','PlotWin');
+if isempty(h)
+  h= figure;
+  set(h,'Tag','PlotWin');
+end
+
+names=sData.comp_names(indices);  
+data=sData.data(:,indices);
+
+set(0,'CurrentFigure',h);
+hold off;
+clf;
+t=0:1/(getfield(size(data),{1})-1):1;
+tmp=setdiff(1:length(data(:,1)),selected);
+for i=1:length(names)
+  subplot(length(names),1,i);
+  hold on;
+  if max(data(:,i))- min(data(:,i)) <= eps
+    set(gca,'YLim',[max(data(:,i))-1 max(data(:,i))+1]);
+  end
+  plot(t,data(:,i));
+  if ~isempty(tmp);
+    data(tmp,i)=NaN;
+  end
+  plot(t,data(:,i),'red');
+  ylabel(names{i});
+  set(gca,'XTick',[]);
+end
+set(gcf,'Name','Plotted Data Components');    
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: plxy_button %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function plxy_button
+
+%PLXY_BUTTON  A callback function. XY-plots the first and the second
+%             components chosen.
+%
+%
+
+
+sData=getfield(get(gcf,'UserData'),'sData');
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+
+inds = get_indices;
+if length(inds) < 2
+  errordlg('There must be two components chosen for XY-plot.');
+  return;
+end
+
+inds=inds(1:2);
+names=getfield(sData,'comp_names',{inds});
+
+h=findobj(get(0,'Children'),'Tag','PlotWin');
+
+if isempty(h)
+  h= figure;
+  set(h,'Tag','PlotWin');
+end
+
+set(0,'CurrentFigure',h);
+clf;
+axes;
+if max(sData.data(:,inds(1))) - min(sData.data(:,inds(1))) <= eps
+  set(gca,'XLim',[max(sData.data(:,inds(1)))-1 max(sData.data(:,inds(1)))+1]);
+end
+if max(sData.data(:,inds(2))) - min(sData.data(:,inds(2))) <= eps
+  set(gca,'YLim',[max(sData.data(:,inds(2)))-1 max(sData.data(:,inds(2)))+1]);
+end
+hold on;
+plot(sData.data(:,inds(1)),sData.data(:,inds(2)),'o');
+x=sData.data(selected,inds(1));
+y=sData.data(selected,inds(2));
+
+plot(x,y,'ored','MarkerSize',4);
+xlabel(names(1));
+ylabel(names(2));
+set(h,'Name','Plotted Data Components');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Sub_function: bplo_button %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function bplo_button
+
+%BPLO_BUTTON  A callback function. Box-plots the first component chosen.
+
+
+sData=getfield(get(gcf,'UserData'),'sData');
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+
+if length(selected) == 1
+  errordlg('There are too few vectors chosen for box-plotting.');
+else
+  indices=get_indices;
+  if isempty(indices)
+    return;
+  end
+  for i=1:length(indices)
+    if length(unique(sData.data(selected,indices(i))))==1
+      errordlg('All the values are the same. Operation can''t be evaluated.');
+      return;
+    end
+  end 
+  names=getfield(sData,'comp_names',{indices});
+  h= findobj(get(0,'Children'),'Tag','PlotWin');
+  if isempty(h)
+    h= figure;
+    set(h,'Tag','PlotWin');
+  end
+
+  data=sData.data(selected,indices);
+
+  set(0,'CurrentFigure',h);
+  hold off;
+  clf;
+  hold on;
+  for i=1:getfield(size(data),{2})
+    subplot(getfield(size(data),{2}),1,i);
+    if ~all(isnan(data(:,i)))
+      boxplot(data(:,i));
+    end
+    name=names{i};
+    tmp=get(get(gca,'YLabel'),'String');
+    ylabel(cat(2,sprintf('[%s]    ',name),tmp));
+  end
+  set(h,'Name','Box-plot');
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: hist_button %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function hist_button
+
+no_of_bins_h=getfield(get(gcf,'UserData'),'no_of_bins_h');
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+sData=getfield(get(gcf,'UserData'),'sData');
+n=str2num(get(no_of_bins_h,'String'));
+s1='Invalid number of bins.';
+s2=sprintf('\nSet new value to the box under the ''Histogram''-button.');
+
+if isempty(n)
+  errordlg(cat(2,s1,s2));
+else
+  indices=get_indices;
+  if isempty(indices)
+    return;
+  end
+  n=round(n);
+  if n < 1
+    errordlg('Number of bins must be positive integer.');
+  else
+    h= findobj(get(0,'Children'),'Tag','PlotWin');
+    if isempty(h)
+      h= figure;
+      set(h,'Tag','PlotWin');
+    end
+
+    set(0,'CurrentFigure',h);
+    hold off;
+    clf;
+    data=sData.data(selected,indices);
+    names=sData.comp_names(indices);
+    for i=1:length(names)
+      subplot(length(names),1,i);
+      hold on;
+      lim1=min(sData.data(:,indices(i)));
+      lim2=max(sData.data(:,indices(i)));
+      if n > 1
+        if lim2 - lim1 >= eps
+          x=lim1:(lim2-lim1)/(n-1):lim2;
+          set(gca,'XLim',[lim1 lim2]);
+        elseif lim1 ~= 0
+          x=lim1/2:lim1/(n-1):lim1/2+lim1;
+          if ~all(isnan([lim1 lim2]))
+            set(gca,'XLim',[lim1-abs(lim1/2) lim1+abs(lim1/2)]);
+          end
+        else
+          x=-1:2/(n-1):1;
+          set(gca,'XLim',[-1 1]);
+        end
+      else 
+        x=1;
+        if lim2 ~= lim1
+          set(gca,'XLim',[lim1 lim2]);
+        else
+          set(gca,'XLim',[lim1/2 lim1/2+lim1]);
+        end
+      end
+      if ~all(isnan(data(:,i)))
+        hist(data(:,i),x);
+      end
+      name=names{i};
+      xlabel(name);     
+    end
+    set(h,'Name','Histogram');      
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: no_of_values %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function no_of_values(varargin); 
+
+%NO_OF_VALUES  A callback function. Calculates the number of different
+%              values of the chosen components.
+%
+%
+
+if nargin==1;
+  LOG=1;
+else
+  LOG=0;
+end
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+results_h=getfield(get(pre_h,'UserData'),'results_h');
+sData=getfield(get(pre_h,'UserData'),'sData');
+selected=getfield(get(pre_h,'UserData'),'selected_vects');
+str1='There must be one component chosen for ''Number of Values''-operation';
+
+
+if ~LOG & isempty(get_indices) 
+  errordlg(str1);
+else
+  indices=get_indices;
+  data=sData.data(selected,indices);
+
+  string{1} = 'Number of different values:';
+
+  for i=1:getfield(size(data),{2})
+
+    tmp=data(:,i);
+    string{i+1}=cat(2,sprintf('#%d:',indices(i)),... 
+                      sprintf('%d',length(find(~isnan(unique(data(:,i)))))));
+  end
+
+  set(results_h,'String',string);
+  set(results_h,'HorizontalAlignment','left');
+  if ~LOG
+    data=get(pre_h,'UserData');
+    data.LOG{length(data.LOG)+1}='% Number of values';
+    data.LOG{length(data.LOG)+1}='preprocess(''noof'',''foo'');';
+    set(pre_h,'UserData',data);
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: correlation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function correlation(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+results_h=getfield(get(pre_h,'UserData'),'results_h');
+selected=getfield(get(pre_h,'UserData'),'selected_vects');
+sData=getfield(get(pre_h,'UserData'),'sData');
+
+if length(get_indices) < 2
+  errordlg('There must be two components chosen for Correlation');
+else
+  indices=getfield(get_indices,{1:2});
+  data=sData.data(selected,indices);
+  inds=find(~isnan(data(:,1)) & ~isnan(data(:,2)));
+  value=getfield(corrcoef(data(inds,1),data(inds,2)),{1,2});
+  names=sData.comp_names(indices);
+  string{1}='Correlation between';
+  string{2}=cat(2,names{1},' and ',names{2},':');
+  string{3}=sprintf('%-10.3g',value);
+
+  set(results_h,'String',string);
+  set(results_h,'HorizontalAlignment','left');
+  if ~LOG
+    data=get(pre_h,'UserData');
+    data.LOG{length(data.LOG)+1}='% Correlation';
+    data.LOG{length(data.LOG)+1}='preprocess(''corr'',''foo'');';
+    set(pre_h,'UserData',data);
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: unit_length %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function unit_length(varargin) 
+
+%UNIT_LENGTH  A callback function Scales all the vectors to the unit
+%             length.
+%
+% 
+
+if nargin==1
+  LOG=1;
+else
+  LOG=0;
+end
+
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+sData=getfield(get(gcf,'UserData'),'sData');
+sData.MODIFIED=1;
+scaled=sData.data;
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+
+if ~LOG & isempty(get(comp_names_h,'Value'))
+  errordlg('There must be components chosen for the ''unit length''- operation');
+  return;
+end
+inds=get_indices;
+for i=1:length(scaled(:,1));
+  x=find(~isnan(scaled(i,inds)));
+  scaled(i,inds(x))=(1/sqrt(sum(scaled(i,inds(x)).^2)))*scaled(i,inds(x));
+end
+
+data=get(gcf,'UserData');
+
+
+data.undo.sData = sData;
+data.sData.data=scaled;
+
+for i=1:length(inds)
+  data.sData.comp_norm{inds(i)}=[];
+end
+
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Unit length';
+  data.LOG{length(data.LOG)+1}='preprocess(''unit'',''foo'');';
+end
+set(gcf,'UserData',data);
+
+vects=zeros(1,length(sData.data(:,1)));
+vects(data.selected_vects)=1;
+
+draw_vectors(vects,data.vector_h);
+vect_means(sData,vect_mean_h,data.selected_vects);
+cplot_mimema;
+plot_hist;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: one_of_n %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function one_of_n(varargin)
+
+if nargin==1
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+vector_h=getfield(get(gcf,'Userdata'),'vector_h');
+comp_names_h=getfield(get(gcf,'Userdata'),'comp_names_h');
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+sData=data.sData;
+undo=data.sData;
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+msg='Creating over 10 new components. Stop operation?';
+
+if ~LOG
+  if isempty(get(data.comp_names_h,'Value'))
+    errordlg('There must be one component chosen for ''Add: N binary types'' -operation');
+    return;
+  end
+end
+
+index=getfield(get_indices,{1});
+
+tmp=unique(sData.data(:,index)); 
+n=length(tmp);
+
+if ~LOG
+  if n>10
+    answer=questdlg(msg,'Question','Yes','No','Yes');
+
+    if strcmp(answer,'Yes')
+      msgbox('Operation stopped.');
+      return;
+    end
+
+  end
+end
+
+dim1=getfield(size(sData.data),{1});
+dim2=getfield(size(sData.data),{2});
+sData.data=cat(2,sData.data,zeros(dim1,n));
+
+dim=dim2+n;
+for i=1:n
+  sData.data(:,dim-(n-i))=(sData.data(:,index) == tmp(i));
+end
+
+INDEX=sData.INDEX;
+for i=1:n
+  sData.comp_names{dim2+i}=sprintf('%dNewVar',dim2+i);
+end
+tmp_norm=cat(1,sData.comp_norm,cell(n,1));
+sData=som_data_struct(sData.data,...
+                      'name',sData.name,...
+                      'labels',sData.labels,...
+                      'comp_names',sData.comp_names);
+                
+sData.MODIFIED=1;
+sData.INDEX=INDEX;
+sData.comp_norm=tmp_norm;
+data.undo.sData=undo;
+data.sData=sData;
+data.selected_vects=1:length(sData.data(:,1));
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Add: N binary types';
+  data.LOG{length(data.LOG)+1}='preprocess(''oneo'',''foo'');';
+end
+set(gcf,'UserData',data);
+clear_button;
+write_sD_stats;
+set_compnames(sData,comp_names_h);
+tmp=ones(1,length(sData.data(:,1)));
+draw_vectors(tmp,vector_h);
+vect_means(sData,vect_mean_h,1:length(sData.data(:,1)));
+cplot_mimema;
+sel_comp;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: add_zeros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function add_zeros(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+vector_h=getfield(get(gcf,'Userdata'),'vector_h');
+comp_names_h=getfield(get(gcf,'Userdata'),'comp_names_h');
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+sData=data.sData;
+undo=sData;
+
+dim1=getfield(size(sData.data),{1});
+dim2=getfield(size(sData.data),{2});
+sData.data=cat(2,sData.data,zeros(dim1,1));
+
+INDEX=sData.INDEX;
+
+sData.comp_names{dim2+1}=sprintf('%dNewVar',dim2+1);
+tmp_norm=cat(1,sData.comp_norm,cell(1,1));
+sData=som_data_struct(sData.data,...
+                      'name',sData.name,...
+                      'labels',sData.labels,...
+                      'comp_names',sData.comp_names);
+         
+sData.MODIFIED=1;
+sData.INDEX=INDEX;
+sData.comp_norm=tmp_norm;
+data.sData=sData;
+data.undo.sData=undo;
+data.selected_vects=1:length(sData.data(:,1));
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Add: zeros';
+  data.LOG{length(data.LOG)+1}='preprocess(''zero'',''foo'');';
+end
+set(gcf,'UserData',data);
+clear_button;
+write_sD_stats;
+set_compnames(sData,comp_names_h);
+tmp=ones(1,length(sData.data(:,1)));
+draw_vectors(tmp,vector_h);
+vect_means(sData,vect_mean_h,1:length(sData.data(:,1)));
+cplot_mimema;
+sel_comp;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: move_component %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function move_component(varargin)
+
+%MOVE_COMPONENT  A callback function. Moves one component of vectors to
+%                the position wanted.
+%
+%
+
+if nargin == 1
+  LOG=1;
+  i=1;
+  while varargin{1}(i) ~= ' ' 
+    value(i)=varargin{1}(i);
+    i=i+1;
+  end
+  value=str2num(value);                                 % the new place
+  index=str2num(varargin{1}(i:length(varargin{1})));    % index of the chosen
+                                                        % component
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+prompt='Enter the number of the new component place:';
+
+
+if isempty(get(data.comp_names_h,'Value'))
+  errordlg('There must be one component chosen for ''Move Component''-operation');
+  return;
+end
+
+if ~LOG
+  index=getfield(get_indices,{1});
+  answer=inputdlg(prompt);
+
+  if isempty(answer) | (iscell(answer) & isempty(answer{1}))
+    msgbox('No components moved');
+    return;
+  end
+
+  value=str2num(answer{1});
+
+
+  dims=size(value);
+
+  if dims(1) ~= 1 | dims(2) ~= 1 | ~isreal(value)
+    errordlg('The new component place must be positive integer.')
+    return;
+  end
+
+  if value <= 0 | round(value) ~= value
+    errordlg('The new component place must be positive integer.');
+    return;
+  end
+
+  if value > getfield(size(sData.data),{2})
+    errordlg('Too big value for the new component place.');
+    return;
+  end
+end
+
+sData.MODIFIED=1;
+if index < value
+  indices1=setdiff(1:value,index);
+  indices2=setdiff(value+1:length(sData.data(1,:)),index);
+elseif index > value
+  indices1=setdiff(1:value-1,index);
+  indices2=setdiff(value:length(sData.data(1,:)),index);
+else
+  data.sData=sData;
+  data.undo.sData=undo;
+  set(gcf,'UserData',data);
+  return;
+end
+
+tmp1=sData.data(:,indices1);
+tmp2=sData.data(:,indices2);
+sData.data=cat(2,tmp1,sData.data(:,index),tmp2);
+
+tmp1=sData.comp_names(indices1);
+tmp2=sData.comp_names(indices2);
+sData.comp_names=cat(1,tmp1,sData.comp_names(index),tmp2);
+
+tmp1=sData.comp_norm(indices1);
+tmp2=sData.comp_norm(indices2);
+sData.comp_norm=cat(1,tmp1,sData.comp_norm(index),tmp2);
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Move component.';
+  data.LOG{length(data.LOG)+1}=sprintf('preprocess(''move'',''%s %s'');',...
+           num2str(value),num2str(index));
+end
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+vector_h=getfield(get(gcf,'UserData'),'vector_h');
+data.selected_vects=1:length(sData.data(:,1));
+set(gcf,'UserData',data);
+clear_button;
+set_compnames(sData,comp_names_h);
+draw_vectors(ones(1,length(sData.data(:,1))),vector_h);
+vect_means(sData,vect_mean_h,data.selected_vects);
+cplot_mimema;
+sel_comp;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: copy_component %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function copy_component(varargin)
+
+%COPY_COMPONENT  Copies one component of vectors to the position wanted.
+%
+%
+
+if nargin == 1
+  LOG=1;
+  i=1;
+  while varargin{1}(i) ~= ' ' 
+    value(i)=varargin{1}(i);
+    i=i+1;
+  end
+  value=str2num(value);                                 % the new place
+  index=str2num(varargin{1}(i:length(varargin{1})));    % index of the chosen
+                                                        % component
+else
+  LOG=0;
+end
+
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+if ~LOG
+  prompt='Enter the number of the new component place:';
+
+
+  if isempty(get(data.comp_names_h,'Value'))
+    errordlg('There must be one component chosen for ''Copy Component''-operation');
+    return;
+  end
+
+  index=getfield(get_indices,{1});
+  answer=inputdlg(prompt);
+
+  if isempty(answer) | (iscell(answer) & isempty(answer{1}))
+    msgbox('No components moved');
+    return
+  end
+
+
+  value=str2num(answer{1});
+  dims=size(value);
+
+  if dims(1) ~= 1 | dims(2) ~= 1 | ~isreal(value)
+    errordlg('The new component place must be positive integer.')
+    return;
+  end
+
+  if value <= 0 | round(value) ~= value
+    errordlg('The new component place must be positive integer.');
+    return;
+  end
+
+  if value > getfield(size(sData.data),{2}) + 1
+    errordlg('Too big value for the new component place.');
+    return;
+  end
+end
+
+sData.MODIFIED=1;
+
+indices1=1:value-1;
+indices2=value:length(sData.data(1,:));
+tmp1=sData.data(:,indices1);
+tmp2=sData.data(:,indices2);
+sData.data=cat(2,tmp1,sData.data(:,index),tmp2);
+
+tmp1=sData.comp_names(indices1);
+tmp2=sData.comp_names(indices2);
+name=cell(1,1);
+name{1}=cat(2,'Copied',sData.comp_names{index});
+sData.comp_names=cat(1,tmp1,name,tmp2);
+
+tmp1=sData.comp_norm(indices1);
+tmp2=sData.comp_norm(indices2);
+norm=cell(1,1);
+norm{1}=sData.comp_norm{index};
+sData.comp_norm=cat(1,tmp1,norm,tmp2);
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Copy component';
+  data.LOG{length(data.LOG)+1}=sprintf('preprocess(''copy'',''%s %s'');',...
+           num2str(value),num2str(index));
+end
+
+
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+vector_h=getfield(get(gcf,'UserData'),'vector_h');
+data.selected_vects=1:length(sData.data(:,1));
+set(gcf,'UserData',data);
+clear_button;
+write_sD_stats;
+set_compnames(sData,comp_names_h);
+draw_vectors(ones(1,length(sData.data(:,1))),vector_h);
+vect_means(sData,vect_mean_h,data.selected_vects);
+cplot_mimema;
+sel_comp;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: remove_component %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function remove_component(varargin)
+
+if nargin == 1
+  LOG=1;
+  value=str2num(varargin{1});
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+vector_h=getfield(get(gcf,'UserData'),'vector_h');
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+sData=data.sData;
+undo=sData;
+prompt='Enter the number of component to be removed.';
+dim=length(sData.data(1,:));
+
+if ~LOG
+  answer=inputdlg(prompt);
+
+  if isempty(answer) | (iscell(answer) & isempty(answer{1}))
+    msgbox('Components not removed.');
+    return;
+  end
+
+  value=str2num(answer{1});
+  dims=size(value);
+
+  if dims(1) ~= 1 | dims(2) ~= 1 | ~isreal(value)
+    errordlg('Number of the component to be removed must be positive integer.')
+    return;
+  end
+
+  if value <= 0 | round(value) ~= value
+    errordlg('Number of the component to be removed must be positive integer.');
+    return;
+  end
+
+  if value > getfield(size(sData.data),{2})
+    errordlg('There are less components.');
+    return;
+  end
+end
+
+sD_set_h=getfield(get(gcf,'UserData'),'sD_set_h');
+index=get(sD_set_h,'Value');
+if value == 1 & getfield(size(sData.data),{2}) == 1
+   if length(get(sD_set_h,'String')) == 1
+    msgbox('No data left. Closing program...')
+    pro_tools('close');
+    return;
+  end
+ 
+  set1=data.sD_set(1:index-1);
+  set2=data.sD_set(index+1:length(data.sD_set));
+  data.sD_set=[set1 set2];
+   set(gcf,'UserData',data);
+  
+  set_sD_stats;
+  sel_sD;
+  data=get(gcf,'UserData');
+  data.undo.sData=undo;
+  data.undo.index=index;
+  set(gcf,'UserData',data);
+  return;
+end
+dims=size(sData.data);
+tmp_data=cat(2,sData.data(:,1:value-1),sData.data(:,value+1:dims(2)));
+tmp_norm=cat(1,sData.comp_norm(1:value-1),sData.comp_norm(value+1:dims(2)));
+names=cat(1,sData.comp_names(1:value-1),sData.comp_names(value+1:dims(2)));
+INDEX=sData.INDEX;
+comp_norm=sData.comp_norm;
+sData=som_data_struct(tmp_data,...
+                      'name',sData.name,...
+                      'labels',sData.labels,...
+                      'comp_names',names);
+sData.comp_norm=tmp_norm;
+sData.MODIFIED=1;
+sData.INDEX=INDEX;
+data=get(gcf,'UserData');
+data.sData=sData;
+data.undo.sData=undo;
+data.selected_vects=1:length(sData.data(:,1));
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Remove component';
+  data.LOG{length(data.LOG)+1}=sprintf('preprocess(''remove'',''%s'');',...
+                                        answer{1});
+end
+set(gcf,'UserData',data);
+clear_button;
+write_sD_stats;
+set_compnames(sData,comp_names_h);
+tmp=ones(1,length(sData.data(:,1)));
+draw_vectors(tmp,vector_h);
+vect_means(sData,vect_mean_h,1:length(sData.data(:,1)));
+cplot_mimema;
+sel_comp;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: remove_vects %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function remove_vects(varargin)
+
+if nargin==1
+  LOG=1;
+  tmp_str=varargin{1};
+else
+  LOG=0;
+  tmp_str='_foo';
+end
+data=get(gcf,'UserData');
+vect_mean_h=data.vect_mean_h;
+vector_h=data.vector_h;
+sData=data.sData;
+undo=sData;
+
+if length(data.selected_vects) == getfield(size(sData.data),{1})
+  if LOG
+    answer='Yes';
+  else
+    answer=questdlg('Do you want to delete this data set?');
+  end
+  if strcmp(answer,'No')
+    return;
+  else
+    index=get(data.sD_set_h,'Value');
+    if length(get(data.sD_set_h,'String')) == 1
+      msgbox('No data left. Closing program...')
+      pro_tools('close');
+      return;
+    end
+     
+    set1=data.sD_set(1:index-1);
+    set2=data.sD_set(index+1:length(data.sD_set));
+    data.sD_set=[set1 set2];
+    set(gcf,'UserData',data);
+  
+    set(data.sD_set_h,'Value',1);
+    set_sD_stats;
+    sel_sD;
+    data=get(gcf,'UserData');
+    data.undo.sData=undo;
+    data.undo.index=index;
+    if ~LOG
+      data.LOG{length(data.LOG)+1}='% Remove selected vectors';
+      data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''remove_vects'',''',...
+                                          tmp_str,''');');
+    end
+    set(gcf,'UserData',data);
+    return;
+  end
+end
+
+tmp=sData.data(data.selected_vects,:);
+if ~LOG
+  answer=questdlg('Do you want to save removed values to workspace?');
+else
+  if ~strcmp(tmp_str,'_foo')
+    answer='Yes';
+  else
+    answer='No';
+  end
+end
+old=gcf;
+if strcmp(answer,'Yes')
+  if ~LOG
+    answer=inputdlg('Give the name of the output -variable.');
+  else
+    answer={tmp_str};
+  end
+  if isvalid_var_name(answer)
+    assignin('base',answer{1},tmp);
+    disp(sprintf('Removed values are set to workspace as''%s''.',answer{1}));
+    tmp_str=answer{1};
+  end
+end
+set(0,'CurrentFigure',old);
+sData.data(data.selected_vects,:)=[];
+sData.labels(data.selected_vects,:)=[];
+sData.MODIFIED=1;
+data.sData=sData;
+data.selected=1:length(sData.data(:,1));
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)}='% Remove selected vectors';
+  data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''remove_vects'',''',...
+                                      tmp_str,''');');
+end
+set(gcf,'UserData',data);
+
+
+draw_vectors(ones(1,length(data.selected)),data.vector_h);
+write_sD_stats;
+select_all('foo');
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+%%% Subfunction: eval1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function eval1(varargin);
+
+if nargin == 1
+  answer=varargin
+  LOG=1;
+else
+  LOG=0;
+end
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+if isempty(pre_h)
+  errordlg('''Preprocess''-figure does not exist. Terminating program...');
+  pro_tools('close');
+  return;
+end  
+
+undo=getfield(get(pre_h,'UserData'),'sData');
+
+if ~LOG
+  prompt={'Enter the expression to be evaluated.',...
+          'Enter the inverse normalization method (optional).'};
+  title='Single component eval.';
+  answer= inputdlg(prompt,title,1);
+end
+
+if ~isempty(answer)
+  tmp=[];
+  if ~isempty(answer{1})
+    [tmp,method]=build_expr(answer{1},'single');
+    if ~isstr(tmp)
+      sData=getfield(get(gcf,'UserData'),'sData');
+      tmp='Done.';
+      %if ~isempty(answer{2})
+      %  sN=som_norm_struct('eval',{method,answer{2}});
+      %else
+      %  sN=som_norm_struct('eval',{method});
+      %end
+      %sN=som_set(sN,'status','done');
+      params={answer{1};answer{2}};
+      ind=getfield(get_indices,{1});
+      x.type='';
+      x.method='eval';
+      x.params={answer{1};answer{2}};
+      x.status='';
+      sData.comp_norm{ind}=x;
+      data=get(gcf,'UserData');
+      data.undo.sData=undo;
+      data.sData=sData;
+      if ~LOG
+        data.LOG{length(data.LOG)+1}='% Eval (1-comp)';
+        data.LOG{length(data.LOG)+1}=cat(2,'preprocess eval1 ',...
+                 sprintf('{''%s''  ''%s''};',answer{1},answer{2}));
+      end 
+      set(pre_h,'UserData',data);
+
+    end
+  end    
+  set(getfield(get(pre_h,'UserData'),'results_h'),'String',tmp);
+end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: eval2
+
+function eval2(varargin)
+
+if nargin == 1
+  answer=varargin{1};
+  LOG=1;
+else
+  LOG=0;
+end
+
+undo=getfield(get(gcf,'UserData'),'sData');
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  errordlg('''Preprocess''-figure does not exist. Terminating program.');
+  pro_tools('close');
+  return;
+end
+
+if ~LOG
+  prompt='Enter the expression to be evaluated.';
+  title ='Eval';
+  answer=inputdlg(prompt,title,1);
+end
+
+if ~isempty(answer) & ~isempty(answer{1})
+   str=answer{1};
+   [answer,foo]=build_expr(answer{1},'multiple');
+   if ~isstr(answer)
+     
+     answer='Done.';
+     data=get(gcf,'UserData');
+     data.undo.sData=undo;
+     if ~LOG
+        data.LOG{length(data.LOG)+1}='% Eval';
+        data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''eval2'',',...
+                 sprintf('{''%s''});',str));
+      end 
+     set(gcf,'UserData',data);
+   end
+end
+
+set(getfield(get(pre_h,'UserData'),'results_h'),'String',answer);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: zero2one_scale %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function zero2one_scale(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+INDEX=sData.INDEX;
+sData=rmfield(sData,[{'INDEX'};{'MODIFIED'}]);
+
+if isempty(get(data.comp_names_h,'Value'))
+  errordlg('There must be components chosen for scaling.');
+  return;
+end
+
+sData=som_normalize(sData,'range',get_indices);
+sData.MODIFIED=1;
+sData.INDEX=INDEX;
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Scale [0,1]';
+  data.LOG{length(data.LOG)+1}='preprocess(''zscale'', ''foo'');';
+end 
+set(gcf,'UserData',data);
+
+vects=zeros(1,length(sData.data(:,1)));
+vects(data.selected_vects)=1;
+
+cplot_mimema;
+plot_hist;
+vect_means(sData,data.vect_mean_h,data.selected_vects);
+draw_vectors(vects,data.vector_h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: var_scale %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function var_scale(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+INDEX=sData.INDEX;
+sData=rmfield(sData,[{'INDEX'};{'MODIFIED'}]);
+
+if isempty(get(data.comp_names_h,'Value'))
+  errordlg('There must be components chosen for scaling.');
+  return;
+end  
+
+sData=som_normalize(sData,'var',get_indices);
+
+sData.INDEX=INDEX;
+sData.MODIFIED=1;
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Scale var=1';
+  data.LOG{length(data.LOG)+1}='preprocess(''vscale'', ''foo'');';
+end 
+set(gcf,'UserData',data);
+
+vects=zeros(1,length(sData.data(:,1)));
+vects(data.selected_vects)=1;
+
+cplot_mimema;
+plot_hist;
+vect_means(sData,data.vect_mean_h,data.selected_vects);
+draw_vectors(vects,data.vector_h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: hist_eq %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function hist_eq(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+INDEX=sData.INDEX;
+sData=rmfield(sData,[{'INDEX'},{'MODIFIED'}]);
+
+if isempty(get(data.comp_names_h,'Value'))
+  errordlg('There must be components chosen for ''Histogram eq''.');
+  return;
+end
+
+sData=som_normalize(sData,'histD',get_indices);
+
+sData.INDEX=INDEX;
+sData.MODIFIED=1;
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Histogram eq';
+  data.LOG{length(data.LOG)+1}='preprocess(''histeq'', ''foo'');';
+end 
+set(gcf,'UserData',data);
+
+vects=zeros(1,length(sData.data(:,1)));
+vects(data.selected_vects)=1;
+
+cplot_mimema;
+plot_hist;
+vect_means(sData,data.vect_mean_h,data.selected_vects);
+draw_vectors(vects,data.vector_h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: hist_eq2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function hist_eq2(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+
+INDEX=sData.INDEX;
+sData=rmfield(sData,[{'INDEX'};{'MODIFIED'}]);
+
+if isempty(get(data.comp_names_h,'Value'))
+  errordlg('There must be components chosen for ''Histogram eq2''.');
+  return;
+end
+
+inds=get_indices;
+%%%[sData,ok]=som_normalize(sData,inds,'histC');
+sData=som_normalize(sData,'histC',inds);
+sData.INDEX=INDEX;
+sData.MODIFIED=1;
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Histogram eq2';
+  data.LOG{length(data.LOG)+1}='preprocess(''histeq2'', ''foo'');';
+end 
+set(gcf,'UserData',data);
+
+vects=zeros(1,length(sData.data(:,1)));
+vects(data.selected_vects)=1;
+
+cplot_mimema;
+plot_hist;
+vect_means(sData,data.vect_mean_h,data.selected_vects);
+draw_vectors(vects,data.vector_h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: logarithm %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function logarithm(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+
+INDEX=sData.INDEX;
+sData=rmfield(sData,[{'INDEX'},{'MODIFIED'}]);
+
+if isempty(get(data.comp_names_h,'Value'))
+  errordlg('There must be components chosen for ''Log''.');
+  return;
+end
+
+Data=som_normalize(sData,'log',get_indices);
+
+sData.INDEX=INDEX;
+sData.MODIFIED=1;
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Log';
+  data.LOG{length(data.LOG)+1}='preprocess(''log'', ''foo'');';
+end 
+set(gcf,'UserData',data);
+
+vects=zeros(1,length(sData.data(:,1)));
+vects(data.selected_vects)=1;
+
+cplot_mimema;
+plot_hist;
+vect_means(sData,data.vect_mean_h,data.selected_vects);
+draw_vectors(vects,data.vector_h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [answer,method]=build_expr(string,evaltype)
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+method=[];
+if isempty(pre_h)
+  close_preprocess;
+  errordlg('''Preprocess'' -figure does not exist. Terminating program...'); 
+  return;
+
+end
+
+if isempty(string)
+  str = '[]';
+  return;
+end
+
+tmp=[];
+[name,assign,skip]=check_assign(string,evaltype);
+
+if ~strcmp(assign,'NOTASSIGN') & ~strcmp(assign,'error')
+  string=string(skip:length(string));
+end
+
+if ~strcmp(assign,'error')
+  if isempty(string)
+    answer='Illegal expression.';
+    return;
+  end
+  [str,skip]=check_token(string,evaltype);
+  method=string;
+  while ~strcmp(str,'error') & ~strcmp(tmp,'error') & skip < length(string)
+    if ~strcmp(tmp,')')
+      str=cat(2,str,tmp);
+    end
+    [tmp,skip2]=check_token(string(skip+1:length(string)),evaltype);
+    skip=skip+skip2;
+               
+  end
+   if ~strcmp(tmp,')') & ~strcmp(tmp,'error')
+     str=cat(2,str,tmp);
+   elseif strcmp(tmp,'error')
+     str='error';
+   end
+end
+
+if ~strcmp(assign,'error') & ~strcmp(str,'error');
+  answer=evalin('caller',str,'lasterr');
+else
+  answer='??? Illegal expression.';
+end
+
+
+data=get(pre_h,'UserData');
+sData=data.sData;
+if strcmp(assign,'NOTASSIGN') & strcmp(evaltype,'single') & ~isstr(answer)
+  if isempty(get(getfield(get(pre_h,'UserData'),'comp_names_h'),'Value'))
+    errordlg('There are not components chosen.');
+    answer='??? Illegal expression.';
+    return;
+  end
+  index=getfield(get_indices,{1});
+  if strcmp(assign,'NOTASSIGN')
+    if length(sData.data(:,index)) ~=length(answer) & ~isscalar(answer)
+      answer='??? Illegal assignment.';
+    else
+      sData.data(:,index)=answer;
+      sData.MODIFIED=1;
+      data.sData=sData;
+      set(pre_h,'UserData',data);
+    end
+  else
+    if length(sData.data(str2num(assign),index)) ~=length(answer) & ~isscalar(answer)
+      answer='??? Illegal assignment.';
+    else
+      sData.data(str2num(assign),index)=answer;
+      sData.MODIFIED=1;
+      data.sData=sData;
+      set(pre_h,'UserData',data);
+    end
+  end
+elseif ~strcmp(assign,'error') & ~isstr(answer) & ~strcmp(assign,'NOTASSIGN')  
+  switch name
+    case 'x'
+     if isempty(get(data.comp_names_h,'Value'))
+       return;
+     end
+     index = getfield(get_indices,{1});
+     if isempty(assign)
+       if length(sData.data(:,index)) ~= length(answer) & ~isscalar(answer)
+         answer='??? Illegal assignment.';
+       else
+         sData.data(:,index)=answer;
+         sData.MODIFIED=1;
+         data.sData=sData;
+         if strcmp(evaltype,'multiple')
+           data.sData.comp_norm(index)={[]};
+         end
+         set(pre_h,'UserData',data);
+       end
+     else
+       args=create_args(assign,'x');
+       if length(args) == 1
+         len=max(str2num(args{1}));
+         if ~isscalar(len)
+           answer='??? Illegal assignment.';
+           return;
+         elseif len > length(sData.data(:,1)) | min(str2num(args{1})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         elseif ~all(size(sData.data(str2num(args{1}),index))) == size(answer) & ~isscalar(answer)
+           answer='??? Illegal assignment.';
+           return;
+         else            
+           sData.data(str2num(args{1}),index)=answer;
+           sData.MODIFIED=1;
+           data.sData=sData;
+           if strcmp(evaltype,'multiple')
+             data.sData.comp_norm(index)={[]};
+           end
+           set(pre_h,'UserData',data);
+         end
+       else
+         len=max(str2num(args{1}));
+         dim=max(str2num(args{2}));
+         asize=size(answer);
+         msize=size(sData.data);
+         if ~isscalar(len) | ~isscalar(dim) 
+           answer='??? Illegal assignment.';
+           return;
+         elseif len > length(sData.data(:,1)) | len < 1
+           answer='??? Illegal assignment.';
+           return;
+         elseif dim > 1 | dim > msize(2) | min(str2num(args{2})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         end 
+         len=length(str2num(args{1}));
+         dim=length(str2num(args{1}));
+         if ~all([len dim] == asize) & ~isscalar(answer) 
+           answer='??? Illegal assignment.';
+           return;
+         else
+           tmp=sData.data(:,index);
+           tmp([str2num(args{1})],[str2num(args{2})])=answer;
+           sData.data(:,index)=tmp;
+           sData.MODIFIED=1;
+           data.sData=sData;
+           if strcmp(evaltype,'multiple')
+             data.sData.comp_norm(index)={[]};
+           end
+           set(pre_h,'UserData',data);
+         end
+       end
+     end
+
+    case 'xs'
+     if isempty(get(data.comp_names_h,'Value'))
+       return;
+     end
+     indices=get_indices;
+     if isempty(assign)
+       if ~all(size(answer) == size(sData.data(:,indices))) & ~isscalar(answer)
+         answer='??? Illegal assignment.';
+       else       
+         sData.data(:,indices) = answer;
+         sData.MODIFIED=1;
+         data.sData=sData;
+         data.sData.comp_norm(indices)={[]};
+         set(pre_h,'UserData',data);
+       end
+     else
+       args=create_args(assign,'xs');
+       if length(args) == 1
+         len=max(str2num(args{1}));
+         if ~isscalar(len)
+           answer='??? Illegal assignment.';
+           return;
+         elseif len > length(sData.data(:,1)) | min(str2num(args{1})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         end
+         if ~all(size(answer) == size(sData.data(str2num(args{1})))) &...
+            ~isscalar(answer)
+           answer='??? Illegal assignment.';
+           return;
+         else
+           tmp=sData.data(:,indices);
+           tmp(str2num(args{1}))=answer;
+           sData.data(:,indices)=tmp;
+           sData.MODIFIED=1;
+           sData.comp_norm{indices}={[]};
+           data.sData=sData;
+           set(pre_h,'UserData',data);
+         end
+       else
+         len=max(str2num(args{1}));
+         dim=max(str2num(args{2}));
+         asize=size(answer);
+         msize=size(sData.data(:,indices));
+         if ~isscalar(len) | ~isscalar(dim)
+           answer='??? Illegal assignment.';
+           return;
+         elseif len > msize(1) | min(str2num(args{1})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         elseif dim > msize(2) | min(str2num(args{2})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         end
+         len=length(str2num(args{1}));
+         dim=length(str2num(args{2}));
+         if ~all([len dim] == asize) & ~isscalar(answer)
+           answer='??? Illegal assignment';
+           return;
+         else
+           tmp=sData.data(:,indices);
+           tmp([str2num(args{1})],[str2num(args{2})])=answer;
+           sData.MODIFIED=1;
+           sData.data(:,indices)=tmp;
+           data.sData=sData;
+           data.sData.comp_norm(indices)={[]};
+           set(pre_h,'UserData',data); 
+         end
+        
+       end
+     end
+
+    case 'D'
+     if isempty(assign)
+       if ~all(size(answer) == size(sData.data)) & ~isscalar(answer)
+         answer='??? Illegal assignment.';
+       else
+         if isscalar(answer)
+           sData.data(:,:)=answer;
+         else
+           sData.data=answer;
+         end
+         sData.MODIFIED=1;
+         data.sData=sData;
+         data.sData.comp_norm(1:length(sData.data(1,:)))={[]};
+         set(pre_h,'UserData',data);
+       end
+     else
+       args=create_args(assign,'D');
+       if length(args) == 1
+         len=max(str2num(args{1}));
+         if ~isscalar(len)
+           answer='??? Illegal assignment.';
+           return;
+         elseif len > length(sData.data(:,1)) | min(str2num(args{1})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         end 
+         if ~all(size(answer) == size(sData.data(str2num(args{1})))) &...
+            ~isscalar(answer)
+           answer='??? Illegal assignment.';
+         else
+           sData.data(str2num(args{1}))=answer;
+           sData.MODIFIED=1;
+           data.sData=sData;
+           [i,j]=ind2sub(size(sData.data),str2num(args{1}));
+           data.sData.comp_norm(j)={[]};
+           set(pre_h,'UserData',data);
+         end
+       else
+         len=max(str2num(args{1}));
+         dim=max(str2num(args{2}));
+         asize=size(answer);
+         msize=size(sData.data);
+         if ~isscalar(len) | ~isscalar(dim)
+           answer='??? Illegal assignment.';
+           return;
+         elseif len > msize(1) | min(str2num(args{1})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         elseif dim > msize(2) | min(str2num(args{2})) < 1
+           answer= '??? Illegal assignment.';
+           return;
+         end
+         len = length(str2num(args{1}));
+         dim = length(str2num(args{2}));
+         if ~all([len dim] == asize) & ~isscalar(answer)
+           answer='??? Illegal assignment.';
+           return;
+         else
+           sData.data([str2num(args{1})],[str2num(args{2})])=answer;
+           sData.MODIFIED=1;
+           data.sData=sData;
+           data.sData.comp_norm(str2num(args{2}))={[]};
+           set(pre_h,'UserData',data);
+         end
+       end
+     end
+  end
+end
+if sData.MODIFIED
+  selected=getfield(get(pre_h,'UserData'),'selected_vects');
+  vector_h=getfield(get(pre_h,'UserData'),'vector_h');
+  vect_mean_h=getfield(get(pre_h,'UserData'),'vect_mean_h');
+  vects=zeros(length(sData.data(:,1)));
+  vects(selected)=1;
+  draw_vectors(vects,vector_h);
+  vect_means(sData,vect_mean_h,selected);
+  pro_tools('plot_hist');
+  pro_tools('c_stat');
+  cplot_mimema;
+end
+
+ 
+%%% Subfunction: check_assign %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [name,string,skip]=check_assign(string,evaltype)
+
+
+reswords=[{'D'};{'x'};{'xs'}];
+flag=0;
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  man_h=findobj(get(0,'Children'),'Tag','Management');
+  clip_h=findobj(get(0,'Children'),'Tag','Clipping');
+  errordlg('''Preprocess'' -window does not exist. Terminating program.');
+  if ~isempty(man_h)
+    close man_h;
+  end
+  if ~isempty(clip_h)
+    close clip_h;
+  end
+  return;
+end
+
+EMPTY=isempty(get(getfield(get(pre_h,'UserData'),'comp_names_h'),'Value'));
+
+[name,s]=give_token(string,evaltype);
+skip=length(s);
+
+if strcmp(evaltype,'single') & ~strcmp(name,'x')
+  string='NOTASSIGN';
+  return;
+end
+
+if strcmp(name,'other') & ~strcmp(s,'x') 
+  string = 'error';
+  return;
+end
+
+if strcmp(name,[{'x'};{'xs'}])
+  comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+  if isempty(get(comp_names_h,'Value'))
+    errordlg('There are not components chosen.');
+    string='error';
+    return;
+  end
+end
+
+
+if skip == length(string) | ~strcmp(name,reswords)
+  string = 'NOTASSIGN';
+  return;
+end
+
+if (strcmp(name,'x') | strcmp(name,'xs')) & EMPTY
+  errordlg('There are not components chosen.');
+  string = 'error';
+  return;
+end
+
+[t,s]=give_token(string(length(name)+1),evaltype);
+
+if strcmp(t,'(')
+  flag=1;
+end
+
+[foo,skip]=check_token(string,evaltype);
+if length(name) ~= skip-1
+  skip=skip-1;
+  tmp=string(length(name)+1:skip);
+else 
+  tmp = [];
+end
+
+if flag & tmp(length(tmp)) ~= ')'
+  tmp(length(tmp)+1)=')';
+end
+
+if skip==length(string)
+  return;
+end
+
+skip=skip+1;
+if length(string) ~= skip
+  [t,s]=give_token(string(skip+1:length(string)),evaltype);
+else
+  string='NOTASSIGN';
+  return;
+end
+
+if ~strcmp(t,'=')
+  string = 'NOTASSIGN';
+  return;
+end
+string=tmp;
+skip = skip+2;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: isscalar %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function bool = isscalar(x)
+
+  m= size(x);
+  
+  bool = m(1) == 1 & m(2) == 1;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: create_args %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function args=create_args(string,type)
+
+arg2='';
+i=2;
+j=1;
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+msize=size(getfield(getfield(get(pre_h,'UserData'),'sData'),'data'));
+
+
+if string(i) == ':'
+  arg1=num2str(cat(2,'1:',num2str(msize(1))));
+  i=i+1;
+  j=j+length(arg1);
+end
+
+while string(i) ~=',' & string(i) ~=')'
+  arg1(j)=string(i);
+  i=i+1;
+  j=j+1;
+end
+
+
+
+if string(i) ==','
+  j=1;
+  i=i+1;
+  if string(i)==':'
+    switch type
+      case 'x'
+       arg2='1';
+      case 'cs'
+       arg2=num2str(get_indices);
+      case 'D'
+       arg2=num2str(cat(2,'1:',num2str(msize(2))));
+    end
+    i=i+1;
+    j=j+length(arg2);
+  end
+
+  while string(i) ~= ')'
+    arg2(j)=string(i);
+    j=j+1;
+    i=i+1;
+  end
+end
+
+
+args{1}=arg1;
+if ~isempty(arg2)
+  args{2} = arg2;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [str,skip] = check_token(string,evaltype)
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+tmp_string=string;
+[t,s]=give_token(tmp_string,evaltype);
+skip=length(s);
+
+if strcmp(t,'c')
+  if isempty(get(getfield(get(pre_h,'UserData'),'comp_names_h'),'Value'))
+    errordlg('There are no components chosen.');
+    str='error';
+    return;
+  end
+  index=getfield(get_indices,{1});
+  str=cat(2,'[',num2str(index),']');
+  if skip == length(tmp_string)
+    return;
+  end
+  tmp_string=tmp_string(skip+1:length(tmp_string));  
+  [t,s] = give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(')
+    return;
+  end
+  [args,skip2] = get_args(tmp_string(length(s)+1:length(tmp_string)),'c',...
+                          evaltype);
+  skip=skip+skip2+2;
+  if strcmp(args,'error')
+    str = 'error'
+    return;
+  elseif ~strcmp(args,'all')
+    str=cat(2,'getfield(',str,',',args,')');
+  else
+    str=cat(2,'getfield(',str,',{[1]})'); 
+  end
+elseif strcmp(t,'cs')
+  if isempty(get(getfield(get(pre_h,'UserData'),'comp_names_h'),'Value'))
+    errordlg('There are no components chosen.');
+    str='error';
+    return;
+  end
+  str =cat(2,'[',num2str(get_indices),']');
+  if length(s) == length(string)
+    return;
+  end
+  tmp_string=tmp_string(1+length(s):length(string));
+  [t,s]=give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(')
+    return;
+  else
+    [args,skip2]=get_args(tmp_string(1+length(s):length(tmp_string)),'cs',...
+                          evaltype);
+    skip=2+skip+skip2;
+    if strcmp(args,'error')
+      str='error';
+      return;
+    elseif ~strcmp(args,'all')
+      str = cat(2,'getfield(',str,',',args,')');
+    else
+      tmp_str=str;
+      str=cat(2,'[getfield(',str,',','{1})');
+      for i=2:length(get_indices)
+        str=cat(2,str,';getfield(',tmp_str,',',sprintf('{%d})',i));
+      end
+      str=cat(2,str,']');
+    end
+  end
+elseif strcmp(t,'dim')
+  ind1=getfield(size(getfield(getfield(get(pre_h,'UserData'),'sData'),'data')),{2});
+  str=cat(2,'[',num2str(ind1),']');
+  if length(s)==length(string)
+    return;
+  end
+  tmp_string=string(1+length(s):length(string));
+  [t,s]=give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(')
+    return;
+  end
+  skip=1+skip+length(s);
+  [args,skip2]=get_args(tmp_string(1+length(s):length(tmp_string)),'dim',...
+                        evaltype);
+  if strcmp(args,'error')
+    str = 'error';
+    return;
+  else
+    skip=skip+skip2;
+    if ~strcmp(args,'all')
+      str=cat(2,'getfield(',str,',',args,')');
+    end
+  end
+
+elseif strcmp(t,'dlen') 
+  ind1=getfield(size(getfield(getfield(get(pre_h,'UserData'),'sData'),'data')),{1});
+  str=cat(2,'[',num2str(ind1),']');
+  if length(s)==length(string)
+    return;
+  end
+  tmp_string=string(1+length(s):length(string));
+  [t,s]=give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(')
+    return;
+  end
+  skip=skip+length(s);
+  [args,skip2]=get_args(tmp_string(1+length(s):length(tmp_string)),'dlen',...
+                        evaltype);
+  if strcmp(args,'error')
+    str='error';
+    return;
+  else
+    skip=1+skip+skip2;
+    if ~strcmp(args,'all')
+      str=cat(2,'getfield(',str,',',args,')');
+    end
+  end
+
+elseif strcmp(t,'x')
+  if isempty(get(getfield(get(pre_h,'UserData'),'comp_names_h'),'Value'))
+    errordlg('There are not components chosen.');
+    str='error';
+    return;
+  end
+  len=getfield(size(getfield(getfield(get(pre_h,'UserData'),...
+               'sData'),'data')),{1});
+  index=num2str(getfield(get_indices,{1}));
+  h_str='findobj(get(0,''Children''),''Tag'',''Preprocess'')';
+  get_str=cat(2,'getfield(get(',h_str,',''UserData''),''sData'')');
+  get_str=cat(2,'getfield(',get_str,',''data'')');
+  str=cat(2,'getfield(',get_str,',{[1:',num2str(len),'],',index,'})');
+  if length(s) == length(string)
+    return;
+  end
+  tmp_string=string(1+length(s):length(string));
+  [t,s]=give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(');
+    return;
+  end
+  skip=skip+length(s);
+  [args,skip2]=get_args(tmp_string(1+length(s):length(tmp_string)),'x',...
+                        evaltype);
+  if strcmp(args,'error')
+    str = 'error';
+    return;
+  else
+    skip=1+skip+skip2;
+    if ~strcmp(args,'all')
+      str=cat(2,'getfield(',str,',',args,')');
+    end
+  end
+
+elseif strcmp(t,'xs')
+  if isempty(get(getfield(get(pre_h,'UserData'),'comp_names_h'),'Value'))
+    errordlg('There are not components chosen.');
+    str='error';
+    return;
+  end
+  len=getfield(size(getfield(getfield(get(pre_h,'UserData'),...
+               'sData'),'data')),{1});
+  index=get_indices;
+  index=cat(2,'[',num2str(index),']');
+  h_str='findobj(get(0,''Children''),''Tag'',''Preprocess'')';
+  get_str=cat(2,'getfield(get(',h_str,',''UserData''),''sData'')');
+  get_str=cat(2,'getfield(',get_str,',''data'')');
+  str=cat(2,'getfield(',get_str,',{[1:',num2str(len),'],',index,'})');
+  if length(s) == length(string)
+    return;
+  end
+  tmp_string=string(1+length(s):length(string));
+  [t,s]=give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(')
+    return;
+  end
+  skip=1+skip+length(s);
+
+  [args,skip2]=get_args(tmp_string(1+length(s):length(tmp_string)),'xs',...
+                        evaltype);
+  if strcmp(args,'error')
+    str = 'error';
+    return;
+  elseif ~strcmp(args,'all')  
+    str=cat(2,'getfield(',str,',',args,')');
+    skip=skip+skip2;
+  else
+    skip=skip+skip2;
+    [dlen,dim]=size(eval(str));
+    tmp_str=str;
+    str=cat(2,'[','getfield(',tmp_str,sprintf(',{1:%d,1})',dlen));
+    for i=2:dim
+      tmp=sprintf(',{1:%d,%d})',dlen,dim);
+      str=cat(2,str,';','getfield(',tmp_str,tmp);
+    end
+    str=cat(2,str,']');
+  end
+elseif strcmp(t,'D')
+  get_h='findobj(get(0,''Children''),''Tag'',''Preprocess'')';
+  str=cat(2,'getfield(getfield(get(',get_h,',''UserData''),''sData''),''data'')');
+
+  if length(s) >= length(tmp_string)
+    return;
+  end
+
+  tmp_string=tmp_string(1+length(s):length(tmp_string));
+  [t,s]=give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(')
+    return;
+  else
+    tmp_string=tmp_string(1+length(s):length(tmp_string));
+    skip = skip+length(s);
+    [args, skip2]=get_args(tmp_string,'D',evaltype);
+    if strcmp(args,'error')
+      str='error';
+      return;
+    elseif ~strcmp(args,'all')
+      str=cat(2,'getfield(',str,',',args,')');
+      skip=1+skip+skip2;
+    else
+      skip=1+skip+skip2;
+      [dlen,dim]=size(eval(str));
+      tmp_str=str;
+      str=cat(2,'[getfield(',str,sprintf(',{1:%d,1})',dlen));
+      for i=2:dim
+        tmp=sprintf(',{1:%d,%d}',dlen,i);
+        str=cat(2,str,';getfield(',tmp_str,tmp,')');
+      end
+      str=cat(2,str,']');
+    end
+  end  
+else
+  if strcmp(t,'(')
+    str = t;
+    str2='';
+    tmp_string=tmp_string(1+length(s):length(tmp_string));
+    while ~strcmp(str2,')') & ~isempty(tmp_string)
+      [str2,skip2]=check_token(tmp_string,evaltype);
+      if strcmp(str2,'error')
+        str='error';
+        return;
+      end
+      skip=skip+skip2;
+      tmp_string=tmp_string(skip2+1:length(tmp_string));
+      str=cat(2,str,str2);
+    end
+    if ~strcmp(str2,')')
+      str = 'error';
+    end
+  else
+    str = s;
+  end
+end
+
+%%% Subfunction: get_args %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [str,skip] = get_args(string,flag,evaltype)
+
+res_words=[{'D'};{'c'};{'cs'};{'dim'};{'dlen'};{'x'};{'xs'}];
+NOTALL=1;
+if isempty(string)
+  str='error'
+  skip=[];
+  return;
+end
+[t,s] = give_token(string,evaltype);
+
+
+skip=length(s);
+if any(strcmp(t,res_words));
+  [str,skip2] = check_token(string,evaltype);
+  string=string(1+length(s):length(string)); 
+  str=cat(2,'{[',str);
+  [t,s]=give_token(string,evaltype);
+elseif t==')' | t==','
+  str = 'error';
+  return;
+elseif strcmp(t,':');
+  if length(s) == length(string)
+    str='error';
+    return;
+  end
+  [t,s]=give_token(string(1+length(s):length(string)),evaltype);
+  if t == ')'
+    str = 'all';
+    return;
+  end
+  switch flag
+    case {'c','cs','dim','dlen'}
+     str= '{[1';
+    otherwise
+     str=cat(2,'{[',get_all('vect'));
+  end
+  NOTALL=0;
+  string=string(1+length(s):length(string));
+  [t,s]=give_token(string,evaltype);
+  skip=skip+1;
+else 
+  str = cat(2,'{[',s);
+end
+str2 =[];
+
+
+if ~strcmp(t,',') & ~strcmp(t,')')
+  skip=skip-length(s);
+end
+
+
+
+while ~strcmp(t,',') & ~strcmp(t,')') & NOTALL;
+  str=cat(2,str,str2);
+  [t,s] = give_token(string,evaltype);
+  if length(s) == length(string)
+    str = 'error';
+    return;
+  end
+  string=string(1+length(s):length(string));
+  skip=skip+length(s);
+  [t,s]=give_token(string,evaltype);
+  if length(s) == length(string) & ~strcmp(t,')')
+    str = 'error';
+    return;
+  end
+
+  [str2,foo]=check_token(string,evaltype);  
+end 
+
+if NOTALL & ~strcmp(t,')')
+ skip=skip+1;
+end
+
+if strcmp(t,')')
+  str=cat(2,str,']}');
+  return
+end
+
+str=cat(2,str,']',',','[');
+str2 = [];
+
+
+[t,s] = give_token(string,evaltype);
+if strcmp(t,')')
+  str = 'error'
+  return;
+end
+NOTALL=1;
+string=string(1+length(s):length(string));
+[t,s]=give_token(string,evaltype);
+if strcmp(t,':');
+   switch flag
+     case {'c','dim','dlen','x'}
+      str=cat(2,str,'1');
+     case 'D'
+      str=cat(2,str,get_all('comp'));
+     case {'cs','xs'}
+      str=cat(2,str,'1:',num2str(length(get_indices)));
+   end
+   NOTALL=0;
+   if length(s) == length(string)
+    str='error';
+    return;
+   end
+   string=string(1+length(s):length(string));
+   [t,s]=give_token(string,evaltype);
+end
+
+if ~strcmp(t,')') & NOTALL
+  skip=skip-1;
+end
+
+while ~strcmp(t,')') & NOTALL
+  str=cat(2,str,str2);
+  skip=skip+length(s);
+  if length(s) == length(string) & ~strcmp(t,')')
+    str='error';
+    return;
+  end
+  [str2,foo]=check_token(string,evaltype);
+  string=string(1+length(s):length(string));
+  [t,s]=give_token(string,evaltype);
+end
+if ~strcmp(t,')')
+  str='error';
+  return;
+end
+
+
+str=cat(2,str,str2,']}');
+skip=skip+length(s);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: get_all %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function str=get_all(vect_or_comp)
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+switch vect_or_comp
+  case 'vect'
+   dim=getfield(size(getfield(getfield(get(pre_h,'UserData'),...
+                'sData'),'data')),{1});
+   str=cat(2,'1:',num2str(dim));
+  case 'comp'
+   dim=getfield(size(getfield(getfield(get(pre_h,'UserData'),...
+                'sData'),'data')),{2});
+   str=cat(2,'1:',num2str(dim));
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [token,str]=give_token(string,evaltype)
+
+n=length(string);
+i=1;
+char=string(i);
+
+switch analyze_char(string(i));
+  case 'num'
+   token='num';
+   while i <= n & strcmp('num',analyze_char(string(i)))
+     str(i)=string(i);
+     i=i+1;
+   end
+  case 'other'
+   switch string(i)
+     case ':'
+      token = ':';
+     case ','
+      token = ',';
+     case '('
+      token = '(';
+     case ')'
+      token = ')';
+     case '='
+      token = '=';
+     otherwise
+      token='other';
+   end
+   str=string(i);
+  case 'alpha'
+   while i <= n & strcmp('alpha',analyze_char(string(i)))
+    str(i)=string(i);
+    i=i+1;
+   end
+   token = find_res_word(str,evaltype);
+end
+
+%%% Subfunction: analyze_char %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function type=analyze_char(char)
+
+
+if ((char-0) >= ('0'-0) &  (char-0) <= ('9'-0))
+  type='num';
+elseif   ((char-0) >= ('a'-0) & (char-0) <= ('z'-0)) ...
+       | ((char-0) >= ('A'-0) & (char-0) <= ('Z'-0))  
+  type='alpha';
+else
+  type='other';
+end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: find_res_word %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function token = find_res_word(string,evaltype)
+
+reswords=[{'D'};{'c'};{'cs'};{'dim'};{'dlen'};{'x'};{'xs'};{'other'}];
+
+for i=1:length(reswords);
+  token=reswords{i};
+  if strcmp(string,reswords{i})
+    if strcmp(evaltype,'single') & ~strcmp(string,'x')
+      token = 'other';
+    end
+    return;
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function close_func(varargin)
+
+switch varargin{1}
+  case 'close_c'
+   str='% Closing the ''Clipping'' -window...';
+   clip_h=findobj(get(0,'Children'),'Tag','Clipping');
+   close(clip_h);
+  case 'close_sD'
+   str='% Closing the ''Data Set Management'' -window...';
+   sD_h=findobj(get(0,'Children'),'Tag','Management');
+   close(sD_h);
+  case 'close_w'
+   str='% Closing the ''Windowed'' -window...';
+   win_h=findobj(get(0,'Children'),'Tag','Window');
+   close(win_h);
+  case 'close_s'
+   str='% Closing the ''Select'' -window...';
+   sel_h=findobj(get(0,'Children'),'Tag','Select');
+   close(sel_h);
+  case 'close_d'
+   str='% Closing the ''Delay'' -window...';
+   del_h=findobj(get(0,'Children'),'Tag','Delay');
+   close(del_h);
+end
+
+if nargin ~= 2
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  preh_udata=get(pre_h,'UserData');
+  str2=cat(2,'preprocess(''',varargin{1},''',''foo'');');
+  preh_udata.LOG{length(preh_udata.LOG)+1}=str;
+  preh_udata.LOG{length(preh_udata.LOG)+1}=str2;
+  set(pre_h,'UserData',preh_udata);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function log_file
+
+answer=inputdlg('Give the name of the outputfile:','LOG function',1,...
+                {'log_function'});
+
+if isempty(answer)
+  return;
+end
+
+
+tmp=clock;
+str =cat(2,'% Created: ',...
+           date,...
+           ' ',sprintf('%d:%d\n%\n\n',tmp(4),tmp(5)));
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+LOG=getfield(get(pre_h,'UserData'),'LOG');
+file=cat(2,pwd,'/',answer{1},'.m');
+fid =fopen(file,'w');
+
+arg=LOG{2}(12:length(LOG{2})-2);
+fprintf(fid,'%s\n \n',cat(2,'function ',answer{1},'(',arg,')'));
+fprintf(fid,'%s\n',str);
+for i=1:length(LOG)
+  fprintf(fid,'%s\n',LOG{i});
+end
+fclose(fid);
+disp(sprintf('LOG-file ''%s'' is done.',file));
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function get_selected_inds(varargin)
+
+if nargin == 1
+  LOG=1;
+  answer = {varargin{1}};
+else
+  LOG=0;
+end
+
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+if ~LOG
+  answer=inputdlg('Give the name of the output variable:',...
+                '',1,{'indices'});
+end
+
+if isempty(answer) | isempty(answer{1})
+  return;
+else
+  assignin('base',answer{1},selected);
+  disp(cat(2,'Indices of the selected vectors are set to the workspace ',...  
+           sprintf(' as ''%s''.',answer{1})));
+  if ~LOG
+    data=get(gcf,'UserData');
+    data.LOG{length(data.LOG)+1}=...
+    '% Saving indices of the selected vectors to the workspace.';
+    data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''get_inds'',',...
+                                        '''',answer{1},''');');
+    set(gcf,'UserData',data);
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function no_of_selected(varargin)
+
+if nargin == 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  set(0,'CurrentFigure',pre_h);
+  LOG = 1;
+else
+  LOG = 0;
+end
+
+results_h=getfield(get(gcf,'UserData'),'results_h');
+no=length(getfield(get(gcf,'UserData'),'selected_vects'));
+str={sprintf('Number of selected vectors: %d\n', no)};
+set(results_h,'String',str,'HorizontalAlignment','left');
+
+if ~LOG
+  data=get(gcf,'UserData');
+  data.LOG{length(data.LOG)+1}='% Number of selected vectors';
+  data.LOG{length(data.LOG)+1}='preprocess(''no_of_sel'',''foo'');';
+  set(gcf,'UserData',data);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function select_all_comps(varargin)
+
+if nargin == 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  set(0,'CurrentFigure',pre_h);
+  LOG=1;
+else
+  LOG=0;
+end
+
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+
+set(comp_names_h,'Value',[1:length(get(comp_names_h,'String'))]);
+sel_comp;
+
+if ~LOG
+  data=get(gcf,'UserData');
+  data.LOG{length(data.LOG)+1}='% Select all components';          
+  data.LOG{length(data.LOG)+1}='preprocess(''sel_all_comps'',''foo'');';
+  set(gcf,'UserData',data);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
+
+function code=write_log_code(indices,arg1,arg2,arg3,arg4,arg5,arg6);
+
+str=textwrap({num2str(indices)},500);
+
+code{1}=sprintf('inds=[];');
+for i=1:length(str);
+  code{i+1}=sprintf('  inds=cat(2,inds,[%s]);',str{i});
+end
+str=cat(2,'preprocess(''''clip_data'''',''''',arg1,' ',num2str(arg2),' ',...
+                      num2str(arg3),' ',num2str(arg4),...
+                      ' ',num2str(arg5),' ',num2str(arg6),' ');
+code{length(code)+1}=cat(2,'eval(cat(2,',...
+                            '''',str,'''',...
+                            ',num2str(inds),'''''');''));');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%