function PPFigure(hndl)

% створюємо глобальну змінну 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',[400,SCRHeight-630,300,500], 'Units','pixels', ...
          'HandleVisibility','on', 'MenuBar','none', 'Name','Phase Portrait', ...
          'Resize','off', 'Tag','MFDFA set properties figure', ...
          'NumberTitle','off', 'DeleteFcn',@DeleteFcn_Callback);
      
% записуємо handle фігури
handles.rootFigure=fg;
handles.baseFigure=hndl;
% створюємо кнопку для побудови фазового портрету
handles.plotPPPushbutton=uicontrol(fg, 'Style','pushbutton', 'Tag','plotPPButton', ...
          'Units','pixels', 'Position',[60,400,200,40], 'String','Построить фазовый портрет', ...
          'FontName','Times New Roman', 'FontSize', 10, 'FontAngle', 'normal', 'FontWeight', 'bold', ...
          'Callback',@plotPPButton_Callback);

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

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

% створюємо кнопку для введення виду переміщення вікна
handles.kindOfMovingWindowPushbutton=uicontrol(fg, 'Style','pushbutton', 'Tag','kindOfMovingWindowPushbutton', ...
          'Units','pixels', 'Position',[75,200,150,30], 'String','Перемещение окна', ...
          'FontName','Times New Roman', 'FontSize', 10, 'FontAngle', 'normal', 'FontWeight', 'bold', ...
          'Max', 1, 'Min', 0, 'Value', 0, 'Callback',@kindOfMovingWindow_Callback);

% створюємо кнопку для побудови динамічного фазового портрету
handles.plotDynamicPPPushbutton=uicontrol(fg, 'Style','pushbutton', 'Tag','plotDynamicPPAButton', ...
          'Units','pixels', 'Position',[35,125,220,40], 'String','Динамический фазовый портрет', ...
          'FontName','Times New Roman', 'FontSize', 10, 'FontAngle', 'normal', 'FontWeight', 'bold', ...
          'Callback',@plotDynamicPPButton_Callback);

guidata(fg,handles);

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

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


% =============================================================================================================================
% якщо клацнули по кнопці "Перемещение окна"
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

% =============================================================================================================================
% при натисненні на кнопку "Построить фазовый портрет"
function plotPPButton_Callback(h,eventdata,handles)

global TSTemp;
handles=guidata(gcbo);
index=get(handlesbase.listbox1,'Value');
X=SERIES{index};

[m,n]=size(X);
for i=1:n-1
    plot(X(i),X(i+1));
    hold on;
end
hold off
% очищуємо локальні змінні
clear index X m n index;

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

global TSTemp;
handles=guidata(gcbo);

index=get(handles.ListBoxTS,'Value');
X=TSTemp.data{index}.datas;
windowWidthBegin=str2num(get(handles.windowWidthBeginEdit,'String'));
windowWidthEnd=str2num(get(handles.windowWidthEndEdit,'String'));
POWERS=String2Array(get(handles.POWERSEdit,'String'));
% визначаємо, чи є нулі в ряді степенів
% якщо є - викидаємо їх
[m,n]=size(POWERS);
index=1;
while (index<=n)
    if (POWERS(1,index)==0)
        if (index==1) POWERS=POWERS(1,2:n); n=n-1;
        elseif (index==n) POWERS=POWERS(1,1:n-1); n=n-1;
        else POWERS=[POWERS(1,1:index-1) POWERS(1,index+1:n)]; n=n-1;
        end
    else index=index+1;
    end
end
    
ORDER=str2num(get(handles.ORDEREdit,'String'));
kindOfElevate=get(handles.kindOfElevatePushbutton,'String');
valueOfElevate=get(handles.valueOfElevateEdit,'String');

if (CmpStr(get(handles.kindOfMovingWindowPushbutton,'String'),'Перемещение окна')==0)
    kindOfMovingWindow=0;
else
    kindOfMovingWindow=1;
end
beginWidthMovingWindow=str2num(get(handles.beginWidthMovingWindowEdit,'String'));
windowMovingStep=str2num(get(handles.windowMovingEdit,'String'));

percFunction=get(handles.percFunctionCheckBox,'Value');
if (percFunction==1)
    percFunction=get(handles.percFunctionEdit,'String');
else
    percFunction='0';
end

calculateDynamicMFDFA(X,windowWidthBegin,windowWidthEnd,POWERS,ORDER,kindOfElevate,valueOfElevate, ...
                      kindOfMovingWindow,beginWidthMovingWindow,windowMovingStep,percFunction);

% очищуємо локальні змінні
clear index X windowWidthBegin windowWidthEnd POWERS m n index ORDER kindOfElevate valueOfElevate percFunction;

