function [yprogn,first_r_min,first_r_max,first_r_avg,masdtparamnew,hierarchies]=prognoztest_sglazh(y,masdtparam,tbeg_progn,nprognoz)
% функция тестового прогноза для подбора параметров р и с.
% Строится прогноз из указанной начальной точки, используя указанную
% иерархию времен и подобранные оптимальные параметры для иерархий старших
% шагов.
N=length(y);
% Определяем наиболее оптимальную длину ряда при заданной иерархии.
% Обрезаем входной ряд, убирая лишние начальные точки.

% блок  прогнозирования для каждого варианта приращения.
% Подготовка варианта начального приближения в виде линейного тренда.
xx=1:length(y);
if (size(y,1)>size(y,2))
    y=transpose(y);
end
y_urez=y;
skleenoe=0; 
first_r_min=-10;
lin_aprox=polyfit(xx,y,1);
xx=1:nprognoz*3+1;
aa=ones(1,length(xx))*lin_aprox(1);
bb=ones(1,length(xx))*y_urez(tbeg_progn+1);
skleenoe=aa.*xx+bb;
%figure;
%plot(y);
%hold on;
%plot(skleenoe);
global type_s;
global s_const;
    global graphs;
    global statdt1;
statdt1=[];

fracdt=1;
masdtparamnew=[];
hierarchies=[];
for dtstr=masdtparam
    if (dtstr.use==0)
        masdtparamnew=[masdtparamnew,dtstr];
        continue;
    end
    if type_s==1
        s=s_const;
    else
        if type_s==2
            s=s_const;
        else
            s=dtstr.s;
        end
    end
    r_max=dtstr.rmax;
    rmin_usr=dtstr.rmin;
    rmax_usr=dtstr.rmax;
    k=dtstr.k;
    dt=dtstr.dt;
    dt_skleenoe=dt;
    global masstat;
    masstat=[];
    %figure;
    %hold on;
    %fprintf(1,'dt=%d:',dt);
    %Блок подсчета оптимального 
    tbeg=dtstr.tbeg;
    tend=dtstr.tend;
    tbeg_sost=dtstr.tbeg_sost;
    tend_sost=dtstr.tend_sost;
    
    for r=1:1
        smeshenie=floor(dt_skleenoe/2);
        if (~isempty(skleenoe))
            y_all_prognoz=[y_urez(1:length(y_urez)-1),skleenoe];
            y_all_zglazh=sglazh(y_all_prognoz,dt_skleenoe,0); % в конце уменьшение окна
            len1=tbeg_progn-smeshenie;%length(y_urez)
            y_zglazh=y_all_zglazh(1:length(y_urez));
            len_yzgl=length(y_all_zglazh);
            sglazhskl=y_all_zglazh(len1+1:len_yzgl);%sglazh(y_urez,dt);
        else
            y_zglazh=sglazh(y_urez,dt_skleenoe,1); % уменьшение окна в начале (в конце прогнозироваться будет)
            if tbeg_progn>length(y_zglazh)
                tbeg_progn=length(y_zglazh);
            end
            sglazhskl=sglazh(skleenoe,dt_skleenoe,0); % уменьшение окна в конце - там прогноз менее точен
        end
        %y_zglazh

        [mas_newsost,mas_sredn,res_r_min,res_r_max,res_r_avg,s,errors]=prognoz_maxr(y_zglazh,dt,rmin_usr, rmax_usr,s,nprognoz/dt+1,tbeg_progn-smeshenie+1,k,tbeg,tend,tbeg_sost,tend_sost);

        nresseries=size(mas_newsost,1);
        for nser=1:nresseries
            mas_newsost1=mas_newsost(nser,:);
            mas_newy=sost2val(y_zglazh(tbeg_progn-smeshenie+1),mas_newsost1,mas_sredn,dt);
            %plot(mas_newy);
        end
    end
    if (first_r_min==-10)
        first_r_min=res_r_min; 
        first_r_max=res_r_max;
        first_r_avg=res_r_avg;
    end
            if ~isempty(graphs)
                
                %plot_skleenoe=[y_urez(1:tbeg_progn-floor(dt)),skleenoe];
                %plot_newy=[y_urez(1:tbeg_progn-floor(dt)),mas_newy];
                %lenplot=min(length(plot_skleenoe),length(plot_newy));
                %plot(plot_skleenoe(1:lenplot),'r');
                %title(strcat('dt=',num2str(dt)));
                %hold on;
                %plot(plot_newy(1:lenplot),'b');
                figure;
                plot(y_all_prognoz(smeshenie+1:length(y_all_prognoz))); % Исх +прошлая иерархия
                title(strcat('Dano+Predidushee dlya dt=',num2str(dt)));
                figure;
                plot([y_all_prognoz(smeshenie+1:length(y_urez)-1),skleenoe],'r');% Исходний
                hold on;
                plot([y_zglazh(1:tbeg_progn-smeshenie),sglazhskl],'g'); % Исх сглаженний+предид. сглаженній
                 % исх сглаженній+прогноз сглаженного 
                zglazh_prognoz=[y_all_zglazh(1:tbeg_progn-smeshenie),mas_newy];
                plot(zglazh_prognoz,'b');
                title(strcat('dt=',num2str(dt)));
                legend('Ishodnaya+predid','sglazhennaya+sglazh predid','Ishodn+prognoz');
            end
        
    if (errors<1)% нет вообще неопределенных состояний - тогда склеиваем
        if (isempty(skleenoe))
            skleenoe=mas_newy;
        else
            % lenmasnewy=length(mas_newy)
            % lenskley=length(skleenoe)
            dt_prev=dt;
            %fprintf(1,'done\n');
            %skleenoe=skleyka(skleenoe,mas_newy,dt_prev);
            skleenoe=skleyka2(skleenoe,mas_newy,sglazhskl,dt_prev);
        end
    else
        fprintf(1,'Error! Ошибка определения следующего состояния. Иерархия dt=%d будет пропущена!',dt);
        dtstr.use=0;
    end
    global logs_skleyka;
    global hlogfile;
    if (logs_skleyka==1);
        fprintf(hlogfile,'dt=\t%d\t\t',dt);
        fprintf(hlogfile,'real s= %d\t',s);
        fprintf(hlogfile,'r_min=%d,r_max=%d,r_avg=%d\n',res_r_min,res_r_max,res_r_avg);
    end
    dtstr.s=s;
    masdtparamnew=[masdtparamnew,dtstr];
    hierstruct=[];
    hierstruct.dt=dt;
    hierstruct.skleenoe=skleenoe;
    hierstruct.mas_newy=mas_newy;
    hierarchies=[hierarchies,hierstruct];

    if ~isempty(graphs)
        %figure;
        y_all_prognoz=[y_urez(smeshenie+1:length(y_urez)),skleenoe(2:length(skleenoe))];
        plot(y_all_prognoz,'y'); % Исх +прошлая иерархия
        plot([y_zglazh(1:tbeg_progn-smeshenie+1),mas_newy(2:length(mas_newy))],'k'); %mas_newy(2:length(mas_newy))
        legend('Ishodnaya+predid','sglazhennaya+sglazh predid','Ishodn+prognoz','NewSkleenoe','Sglazh+Prognoz');
        %plot_skleenoe=[y_urez(1:tbeg_progn-floor(dt)),skleenoe];
        %plot_newy=[y_urez(1:tbeg_progn-floor(dt)),mas_newy];
        %lenplot=min(length(plot_skleenoe),length(plot_newy));
        %plot(plot_skleenoe(1:lenplot),'r');
        %title(strcat('dt=',num2str(dt)));
        %hold on;
        %plot(plot_newy(1:lenplot),'b');
        %figure;
        %plot(y_all_prognoz);
        %hold on;
        %plot(y_all_zglazh(floor(dt/2):length(y_all_zglazh)));
        %plot([y_all_zglazh(:length(y_urez)-floor(dt/2))(,mas_newy(1:lenplot)],'b');
        %title(strcat('Sglazhiv dt=',num2str(dt)));
    end
    
end
trend=aa.*xx+bb;
dt_prev=length(skleenoe)-1;
%skleenoe=skleyka(skleenoe,trend,dt_prev); %Заремано по просьбе СВН
%20081120
yprogn=[y(1:tbeg_progn+1),skleenoe(2:length(skleenoe))];
