function NLIN_ApEnFigure

% створюємо глобальну змінну TS, куди будуть записуватись дані
global TS; TS.index=0;
global TSTemp; TSTemp.index=0;

% визначаємо поточну розподільчу здатність, встановивши одиниці в PIXELS
set(0,'Units','pixels');
SCREEN_SIZE=get(0,'ScreenSize');
% SCREEN_SIZE = [left bottom width height]
SCRHeight=SCREEN_SIZE(1,4);

% створюємо фігуру розміром 100 x 600, що знаходиться у верхному лівому
% куті з відступом у 10 пікселів зверху та зліва
fg=figure('Position',[10,SCRHeight-630,300,600], 'Units','pixels', ...
          'HandleVisibility','on', 'MenuBar','none', 'Name','Lampel Ziv Scale research', ...
          'Resize','off', 'Tag','ApEn set properties figure', ...
          'NumberTitle','off', 'DeleteFcn',@DeleteFcn_Callback);
      
% записуємо handle фігури
handles.rootFigure=fg;

% створюємо меню користувача
menuRoot=uimenu('Parent',fg, 'Label','Файл', 'Tag', 'Menu File');
menuTemp=uimenu('Parent',menuRoot, 'Label','Читать', 'Tag','Menu File Load', 'Callback',@MenuFileLoad_Callback);
%menuTemp=uimenu('Parent',fg, 'Label','Оценить коэфф. подобия', 'Tag','MenuEstimateDifference', 'Callback',@MenuEstimateDifference_Callback);
      
% створюємо статичний текст 
uicontrol(fg, 'Style','text', 'Tag','', 'Units','pixels', 'Position',[3,575,297,25], ...
          'String','Имеющиеся ряды:', 'FontName','Times New Roman', ...
          'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal');

% створюємо ListBox
handles.ListBoxTS=uicontrol(fg, 'Style','listbox', 'Units','pixels', 'Position',[3,297,297,278], ...
          'String','', 'FontName','Times New Roman', ...
          'FontSize', 10, 'FontAngle', 'normal', 'FontWeight', 'normal', ...
          'Tag', 'ListBoxTS', 'ListboxTop', 5,'Visible','on');
      
% створюємо статичний текст та едіт для введення довжини векторів (паттернів)
uicontrol(fg, 'Style','text', 'Tag','', 'Units','pixels', 'Position',[3,450,225,25], ...
          'String','Длина вектора (pattern):', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal','Visible','off');
handles.patternLengthEdit=uicontrol(fg, 'Style','edit', 'Tag','patternLengthEdit', ...
          'BackgroundColor',[1.0 1.0 1.0], 'Units','pixels', 'Position',[228,450,72,25], ...
          'String','2', 'FontName','Courier New', ...
          'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal','Visible','off');

% створюємо статичний текст та кнопку для введення виду коефіцієнта подібності
uicontrol(fg, 'Style','text', 'Tag','', 'Units','pixels', 'Position',[3,425,225,25], ...
          'String','Вид коэфф. подобия:', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal','Visible','off');
handles.kindOfSimilarityCoefficientButton=uicontrol(fg, 'Style','pushbutton', 'Tag','kindOfSimilarityCoefficientButton', ...
          'Units','pixels', 'Position',[228,425,72,25], 'String','ЗНАЧ', ...
          'FontName','Times New Roman', 'FontSize', 10, 'FontAngle', 'normal', 'FontWeight', 'bold', ...
          'Callback',@kindOfSimilarityCoefficientButton_Callback,'Visible','off');

% створюємо статичний текст та едіт для коефіцієнта подібності
uicontrol(fg, 'Style','text', 'Tag','', 'Units','pixels', 'Position',[3,400,225,25], ...
          'String','Коэффициент подобия:', ...
          'FontName', 'Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal','Visible','off');
handles.similarityCoefficientEdit=uicontrol(fg, 'Style','edit', 'Tag','similarityCoefficientEdit', ...
          'BackgroundColor',[1.0 1.0 1.0], 'Units','pixels', 'Position',[228,400,72,25], 'String','0.15', ...
          'FontName','Courier New','FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal','Visible','off');
      
% створюємо кнопку для розрахунку коефіцієнта ентропії ряду
handles.calcApEnPushbutton=uicontrol(fg, 'Style','pushbutton', 'Tag','calcApEnButton', ...
          'Units','pixels', 'Position',[75,375,150,25], 'String','Рассчитать ApEn', ...
          'FontName','Times New Roman', 'FontSize', 10, 'FontAngle', 'normal', 'FontWeight', 'bold', ...
          'Callback',@calcApEnButton_Callback,'Visible','off');

% створюємо об"єкти для розрахунку ApEn у пересувному вікні
% створюємо статичний текст та edit для введення значення початкової ширини вікна
uicontrol(fg, 'Style','text', 'Tag','', 'Units','pixels', 'Position',[3,350,225,25], ...
          'String','Начальная ширина окна:', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal','Visible','off');
handles.beginWidthMovingWindowEdit=uicontrol(fg, 'Style','Edit', 'Tag', 'beginWidthMovingWindowEdit', ...
          'BackgroundColor',[1.0 1.0 1.0], 'Units','pixels', 'Position',[228,350,72,25], ...
          'String','250', 'FontName','Courier New', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal','Visible','off');

% створюємо статичний текст та edit для введення кроку зміни ширини вікна
handles.windowMovingText=uicontrol(fg, 'Style','text', 'Tag','windowMovingText', 'Units','pixels', ...
          'Position',[3,325,225,25], 'String','Шаг перемещения окна:', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal','Visible','off');
handles.windowMovingEdit=uicontrol(fg, 'Style','Edit', 'Tag', 'windowMovingEdit', ...
          'BackgroundColor',[1.0 1.0 1.0], 'Units','pixels', 'Position',[228,325,72,25], ...
          'String','5', 'FontName','Courier New', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal','Visible','off');
% створюємо статичний текст та edit для введення значення кількості станів
% в розрахунку Лемпля-Зіва...
uicontrol(fg, 'Style','text', 'Tag','', 'Units','pixels', 'Position',[5,264,225,25], ...
          'String','Кол-во состояний (2,3 или 4):', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal','Visible','on');
handles.StatesEdit=uicontrol(fg, 'Style','Edit', 'Tag', 'beginWidthMovingWindowEdit', ...
          'BackgroundColor',[1.0 1.0 1.0], 'Units','pixels', 'Position',[222,269,72,25], ...
          'String','3', 'FontName','Courier New', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal','Visible','on');

% створюємо статичний текст та edit для введення інтервалу розбиття
% прибутковостей на стани
handles.windowMovingText=uicontrol(fg, 'Style','text', 'Tag','windowMovingText', 'Units','pixels', ...
          'Position',[9,235,225,25], 'String','b в единицах sigma', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal','Visible','on');
handles.B_Edit=uicontrol(fg, 'Style','Edit', 'Tag', 'windowMovingEdit', ...
          'BackgroundColor',[1.0 1.0 1.0], 'Units','pixels', 'Position',[221,238,72,25], ...
          'String','1', 'FontName','Courier New', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal','Visible','on');
      
      
      
% створюємо кнопку для введення виду переміщення вікна
handles.kindOfMovingWindowPushbutton=uicontrol(fg, 'Style','pushbutton', 'Tag','kindOfMovingWindowPushbutton', ...
          'Units','pixels', 'Position',[75,300,150,25], 'String','Перемещение окна', ...
          'FontName','Times New Roman', 'FontSize', 10, 'FontAngle', 'normal', 'FontWeight', 'bold', ...
          'Max', 1, 'Min', 0, 'Value', 0, 'Callback',@kindOfMovingWindow_Callback,'Visible','off');

% створюємо checkbox для введення виду розрахунку середнього відхилення
handles.stdTSCheckBox=uicontrol(fg,'Style','checkbox','Tag','stdTSCheckBox','Units','pixels', ...
          'Position',[3,275,297,25], 'String','Считать ср. откл. для каждого окна', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal',...
          'Value',0,'Visible','off');

% створюємо кнопку для розрахунку динамічного MFDFA
handles.calcDynamicMFDFAPushbutton=uicontrol(fg, 'Style','pushbutton', 'Tag','calcDynamicMFDFAButton', ...
          'Units','pixels', 'Position',[65,250,170,25], 'String','Динамическая ApEn', ...
          'FontName','Times New Roman', 'FontSize', 10, 'FontAngle', 'normal', 'FontWeight', 'bold', ...
          'Callback',@calcDynamicApEnButton_Callback,'Visible','off');

% створюємо checkbox для введення виду розрахункової ентропії
handles.typeEnCheckBox=uicontrol(fg,'Style','checkbox','Tag','typeEnCheckBox','Units','pixels', ...
          'Position',[3,225,297,25], 'String','Считать Approximate Entropy', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal',...
          'Value',1,'Callback',@changeEntropyType_Callback,'Visible','off');
% створюємо checkbox для вказання використання профіля
handles.typeProfileCheckBox=uicontrol(fg,'Style','checkbox','Tag','typeProfileCheckBox','Units','pixels', ...
          'Position',[3,200,297,25], 'String','Использовать профиль', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal',...
          'Value',0,'Visible','off');

handles.typeReturnsCheckBox=uicontrol(fg,'Style','checkbox','Tag','typeProfileCheckBox','Units','pixels', ...
          'Position',[3,200,297,25], 'String','Использовать возвраты', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal',...
          'Value',1,'Visible','on');

      
% створюємо об"єкти для розрахунку MSE
% створюємо статичний текст та edit для введення значення початкового масштабу
uicontrol(fg, 'Style','text', 'Tag','', 'Units','pixels', 'Position',[3,165,225,25], ...
          'String','Начальный масштаб:', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal');
handles.beginScaleEdit=uicontrol(fg, 'Style','Edit', 'Tag', 'beginScaleEdit', ...
          'BackgroundColor',[1.0 1.0 1.0], 'Units','pixels', 'Position',[228,165,72,25], ...
          'String','1', 'FontName','Courier New', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal');

% створюємо статичний текст та edit для введення значення кінцевого масштабу
uicontrol(fg, 'Style','text', 'Tag','', 'Units','pixels', ...
          'Position',[3,140,225,25], 'String','Конечный масштаб:', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal');
handles.endScaleEdit=uicontrol(fg, 'Style','Edit', 'Tag', 'endScaleEdit', ...
          'BackgroundColor',[1.0 1.0 1.0], 'Units','pixels', 'Position',[228,140,72,25], ...
          'String','20', 'FontName','Courier New', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal');

% створюємо кнопку для обрахунку MSE
handles.calcMSE=uicontrol(fg, 'Style','pushbutton', 'Tag','calcMSE', ...
          'Units','pixels', 'Position',[75,115,150,25], 'String','Рассчитать LZWsc', ...
          'FontName','Times New Roman', 'FontSize', 10, 'FontAngle', 'normal', 'FontWeight', 'bold', ...
          'Callback',@calcMSEButton_Callback);

% створюємо об"єкти для розрахунку MSE у пересувному вікні
% створюємо статичний текст та edit для введення значення початкової ширини вікна
uicontrol(fg, 'Style','text', 'Tag','', 'Units','pixels', 'Position',[3,90,225,25], ...
          'String','Начальная ширина окна:', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal');
handles.beginWidthMovingWindowMSEEdit=uicontrol(fg, 'Style','Edit', 'Tag', 'beginWidthMovingWindowMSEEdit', ...
          'BackgroundColor',[1.0 1.0 1.0], 'Units','pixels', 'Position',[228,90,72,25], ...
          'String','1000', 'FontName','Courier New', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal');

% створюємо статичний текст та edit для введення кроку зміни ширини вікна
uicontrol(fg, 'Style','text', 'Tag','windowMovingMSEText', 'Units','pixels', ...
          'Position',[3,65,225,25], 'String','Шаг перемещения окна:', ...
          'FontName','Times New Roman', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal');
handles.windowMovingMSEEdit=uicontrol(fg, 'Style','Edit', 'Tag', 'windowMovingMSEEdit', ...
          'BackgroundColor',[1.0 1.0 1.0], 'Units','pixels', 'Position',[228,65,72,25], ...
          'String','5', 'FontName','Courier New', 'FontSize', 12, 'FontAngle', 'normal', 'FontWeight', 'normal');

% створюємо кнопку для обрахунку динамічної MSE
handles.calcDynamicMSE=uicontrol(fg, 'Style','pushbutton', 'Tag','calcDynamicMSE', ...
          'Units','pixels', 'Position',[75,40,150,25], 'String','Динамический LZW', ...
          'FontName','Times New Roman', 'FontSize', 10, 'FontAngle', 'normal', 'FontWeight', 'bold', ...
          'Callback',@calcDynamicMSEButton_Callback);

guidata(fg,handles);

% =============================================================================================================================
% Функція, що виконується при закритті фігури
function DeleteFcn_Callback(h,eventdata,handles)

% очищення пам"яті, що використовувалась для локальних змінних
global TSTemp;
clear TSTemp;

% =============================================================================================================================
% якщо клацнули по кнопці "Вид коэфф. подобия"
function kindOfSimilarityCoefficientButton_Callback(h,eventdata,handles)

handles=guidata(gcbo);
if (CmpStr(get(handles.kindOfSimilarityCoefficientButton,'String'),'ЗНАЧ')==0)
    set(handles.kindOfSimilarityCoefficientButton,'String','%*std');
    set(handles.similarityCoefficientEdit,'String','25');
else
    set(handles.kindOfSimilarityCoefficientButton,'String','ЗНАЧ');
    set(handles.similarityCoefficientEdit,'String','0.2');
end

% =============================================================================================================================
% при натисненні на кнопку "Рассчитать ApEn"
function calcApEnButton_Callback(h,eventdata,handles)

global TSTemp;
handles=guidata(gcbo);

index=get(handles.ListBoxTS,'Value');
X=TSTemp.data{index}.datas;
patternLength=str2num(get(handles.patternLengthEdit,'String'));
similarityCoefficient=str2num(get(handles.similarityCoefficientEdit,'String'));

if (CmpStr(get(handles.kindOfSimilarityCoefficientButton,'String'),'%*std')==0)
    similarityCoefficient=std(X)/100*similarityCoefficient;
else
    similarityCoefficient = std(X) * similarityCoefficient;
end

if (get(handles.typeProfileCheckBox,'Value')==1)
    X=getProfile(X);
end

if (get(handles.typeEnCheckBox,'Value')==1)
    apen=ApEnOpt(X,patternLength,similarityCoefficient);
    apen=apen(patternLength);
    messageString=['Значение коэффициента энтропии: ' num2str(apen,8)];
    msgbox(messageString,'Результат рассчета.');
else
    [apen,t1,t2,t3]=sampen(X,patternLength,similarityCoefficient,0,0);
    apen=apen(patternLength);
    messageString=['Значение коэффициента энтропии: ' num2str(apen,8)];
    msgbox(messageString,'Результат рассчета.');
end    

% очищуємо локальні змінні
clear index X patternLength similarityCoefficient apen messageString t1 t2 t3;

% =============================================================================================================================
% якщо клацнули по кнопцi "Перемещение окна"
function kindOfMovingWindow_Callback(h,eventdata,handles)

handles=guidata(gcbo);
if (CmpStr(get(handles.kindOfMovingWindowPushbutton,'String'),'Перемещение окна')==0)
    set(handles.kindOfMovingWindowPushbutton,'String','Увеличение окна');
    set(handles.windowMovingText,'String','Шаг увеличения окна');
else
    set(handles.kindOfMovingWindowPushbutton,'String','Перемещение окна');
    set(handles.windowMovingText,'String','Шаг перемещения окна');
end

% =============================================================================================================================
% при натисненні на кнопку "Динамическая ApEn"
function calcDynamicApEnButton_Callback(h,eventdata,handles)

global TSTemp;
handles=guidata(gcbo);

index=get(handles.ListBoxTS,'Value');
X=TSTemp.data{index}.datas;
patternLength=str2num(get(handles.patternLengthEdit,'String'));
similarityCoefficient=str2num(get(handles.similarityCoefficientEdit,'String'));
if (CmpStr(get(handles.kindOfSimilarityCoefficientButton,'String'),'%*std')==0)
    similarityCoefficientType=1; % розрахунок відсотків
else
    similarityCoefficientType=0; % подано абсолютне значення
end
beginWidthMovingWindow=str2num(get(handles.beginWidthMovingWindowEdit,'String'));
windowMovingStep=str2num(get(handles.windowMovingEdit,'String'));
if (CmpStr(get(handles.kindOfMovingWindowPushbutton,'String'),'Перемещение окна')==0)
    kindOfMovingWindow=1;        % переміщення вікна
else
    kindOfMovingWindow=0;        % збільшення вікна
end
aloneWindows=get(handles.stdTSCheckBox,'Value');
isProfile=get(handles.typeProfileCheckBox,'Value');

if (get(handles.typeEnCheckBox,'Value')==1)
    calculateDynamicApEn(X,patternLength,similarityCoefficient,similarityCoefficientType,...
                         beginWidthMovingWindow,windowMovingStep,kindOfMovingWindow,aloneWindows,isProfile);
else
    calculateDynamicSampEn(X,patternLength,similarityCoefficient,similarityCoefficientType,...
                         beginWidthMovingWindow,windowMovingStep,kindOfMovingWindow,aloneWindows,isProfile);    
end;

% очищуємо локальні змінні
clear index X patternLength similarityCoefficient similarityCoefficientType beginWidthMovingWindow windowMovingStep;
clear kindOfMovingWindow aloneWindows;

% =============================================================================================================================
% при натисненні на кнопку "Рассчитать MSE"
function calcMSEButton_Callback(h,eventdata,handles)

global TSTemp;
handles=guidata(gcbo);

index=get(handles.ListBoxTS,'Value');
X=TSTemp.data{index}.datas;
patternLength=str2num(get(handles.patternLengthEdit,'String'));
similarityCoefficient=str2num(get(handles.similarityCoefficientEdit,'String'));

if (CmpStr(get(handles.kindOfSimilarityCoefficientButton,'String'),'%*std')==0)
    similarityCoefficient=std(X)/100*similarityCoefficient;
end

if (get(handles.typeProfileCheckBox,'Value')==1)
    X=getProfile(X);
end

beginScale=str2num(get(handles.beginScaleEdit,'String'));
endScale=str2num(get(handles.endScaleEdit,'String'));

if (get(handles.typeReturnsCheckBox,'Value')==1)
    n=length(X);
    X=(X(2:n)-X(1:n-1))./X(2:n);
    X=X/std(X);
end

States=str2num(get(handles.StatesEdit,'String'));
b=str2num(get(handles.B_Edit,'String'));

MSE=LZWn(X,patternLength,similarityCoefficient,beginScale,endScale,get(handles.typeEnCheckBox,'Value'),States,b);

figure;
ft=plot(MSE(1,:),MSE(2,:),'^');
set(ft,'LineWidth',2);
legend('Lampel Ziv');

% очищуємо локальні змінні
clear index X patternLength similarityCoefficient apen messageString t1 t2 t3;

% =============================================================================================================================
% при натисненні на кнопку "Рассчитать MSE"
function calcDynamicMSEButton_Callback(h,eventdata,handles)

global TSTemp;
handles=guidata(gcbo);

index=get(handles.ListBoxTS,'Value');
X=TSTemp.data{index}.datas;
patternLength=str2num(get(handles.patternLengthEdit,'String'));
similarityCoefficient=str2num(get(handles.similarityCoefficientEdit,'String'));

if (CmpStr(get(handles.kindOfSimilarityCoefficientButton,'String'),'%*std')==0)
    similarityCoefficient=std(X)/100*similarityCoefficient;
end

if (get(handles.typeProfileCheckBox,'Value')==1)
    X=getProfile(X);
end

beginScale=str2num(get(handles.beginScaleEdit,'String'));
endScale=str2num(get(handles.endScaleEdit,'String'));

beginWidthWindow=str2num(get(handles.beginWidthMovingWindowMSEEdit,'String'));
stepWindow=str2num(get(handles.windowMovingMSEEdit,'String'));

TypeReturns=get(handles.typeReturnsCheckBox,'Value');
States=str2num(get(handles.StatesEdit,'String'));
b=str2num(get(handles.B_Edit,'String'));

[dMSE,scales]=dynamicLZWn(X,patternLength,similarityCoefficient,beginScale,endScale,get(handles.typeEnCheckBox,'Value'),...
              beginWidthWindow,stepWindow,TypeReturns,States,b);

figure;
ftm=mesh(dMSE);
ftm_sum=sum(dMSE);
figure;
plot(ftm_sum);
title('Mean value of dynamical LZW');

figure;
plot(dMSE(1,:));
title(['Dynamics of LZW at the scale ' num2str(beginScale)]);

[file,path]=uiputfile('*.txt','Укажите путь куда сохранить средний LZW');
fullfilename=[path,file];
dlmwrite(fullfilename,ftm_sum,'\n');

[file,path]=uiputfile('*.txt',['Укажите путь куда сохранить LZW на масштабе ' num2str(beginScale)]);
fullfilename=[path,file];
dlmwrite(fullfilename,dMSE(1,:),'\n');


% очищуємо локальні змінні
clear index X patternLength similarityCoefficient apen messageString t1 t2 t3;

% =============================================================================================================================
% якщо включили "Считать ApproximateEntropy"
function changeEntropyType_Callback(h,eventdata,handles)

handles=guidata(gcbo);
if (get(handles.typeEnCheckBox,'Value')==1)
    set(handles.typeEnCheckBox,'Value',1);
    set(handles.calcApEnPushbutton,'String','Рассчитать ApEn');
    set(handles.calcDynamicMFDFAPushbutton,'String','Динамическая ApEn');
%    set(handles.kindOfSimilarityCoefficientButton,'String','%*std');
%    set(handles.similarityCoefficientEdit,'String','25');
else
    set(handles.typeEnCheckBox,'Value',0);
    set(handles.calcApEnPushbutton,'String','Рассчитать SampEn');
    set(handles.calcDynamicMFDFAPushbutton,'String','Динамическая SampEn');
%    set(handles.kindOfSimilarityCoefficientButton,'String','ЗНАЧ');
%    set(handles.similarityCoefficientEdit,'String','0.2');
end

% =============================================================================================================================
% вибір пункту меню "Прочитати файл"
function MenuFileLoad_Callback(h,eventdata,handles)

% читаємо ім"я файла
[FILENAME,PATHNAME,FILTERINDEX]=uigetfile( ...
    {'*.txt;*.dat;*.ts', 'Файлы с данными (*.txt, *.dat, *.ts)'; ...
     '*.ts',             'Файлы с временными рядами (*.ts)'; ...
     '*.txt',            'Текстовые файлы (*.txt)'; ...
     '*.dat',            'Текстовый файлы с данными (*.dat)'}, ...
     'Выберите файл с временным рядом');

if ((FILENAME(1,1)~=0) & (PATHNAME(1,1)~=0))
    % читаємо дані з вибраного файла
    [NAMES,DATAS,DATES]=loadTS(PATHNAME,FILENAME);

    global TSTemp;
    
    % повідомляємо про прочитаний файл
    TSTemp.index=TSTemp.index+1;
    TSTemp.data{TSTemp.index}.datas=DATAS;
    TSTemp.data{TSTemp.index}.names=NAMES
    TSTemp.data{TSTemp.index}.dates=DATES
    
    % отримуємо handle ListBox
    handles=guidata(gcbo);
    ListBoxTS=handles.ListBoxTS;
    STRINGS=get(ListBoxTS,'String');
    STRINGS=appendString(STRINGS,FILENAME);
    set(ListBoxTS,'String',STRINGS);
end

% =============================================================================================================================
% вибір пункту меню "Оценить коэфф. подобия"
function MenuEstimateDifference_Callback(h,eventdata,handles)

global TSTemp;
handles=guidata(gcbo);

if (TSTemp.index==0)
    return
end
index=get(handles.ListBoxTS,'Value');
X=TSTemp.data{index}.datas;

diff=std(X);
messageString=['Среднее квадр. отклонение: ' num2str(diff,8)];
msgbox(messageString,'Оценивание ряда');