function [yprogn,first_r_min,first_r_max,first_r_avg,masdtparamnew,hierarchies]=prognoztest(y,masdtparam,tbeg_progn,nprognoz)
% функция тестового прогноза для подбора параметров р и с.
% Строится прогноз из указанной начальной точки, используя указанную
% иерархию времен и подобранные оптимальные параметры для иерархий старших
% шагов.
N=length(y);
% Определяем наиболее оптимальную длину ряда при заданной иерархии.
% Обрезаем входной ряд, убирая лишние начальные точки.
y_urez=y;
% блок  прогнозирования для каждого варианта приращения.
% Подготовка варианта начального приближения в виде линейного тренда.
xx=1:length(y);
if (size(y,1)>size(y,2))
    y=transpose(y);
end
skleenoe=0; 
first_r_min=-10;
lin_aprox=polyfit(xx,y,1);
xx=1:nprognoz+1;
aa=ones(1,length(xx))*lin_aprox(1);
bb=ones(1,length(xx))*y_urez(tbeg_progn);
skleenoe=aa.*xx+bb;
%figure;
%plot(y);
%hold on;
%plot(skleenoe);
global type_s;
global s_const;
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;
    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
        % Sglazh
        [mas_newsost,mas_sredn,res_r_min,res_r_max,res_r_avg,s,errors]=prognoz_maxr(y_urez,dt,rmin_usr, rmax_usr,s,nprognoz/dt,tbeg_progn,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_urez(length(y_urez)),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 (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(mas_newy,skleenoe,dt_prev);
            skleenoe=skleyka(skleenoe,mas_newy,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];

    global graphs;
    if ~isempty(graphs)
        figure;
        plot(skleenoe,'r');
        title(strcat('dt=',num2str(dt)));
        hold on;
        plot(mas_newy,'b');
    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))];
