function [RMSE,biais,ErreursPrev]=ModSimul(J)
global options_ M_ oo_ estim_params_ bayestopt_

horizon=8;

% options_.logdata
% options_.loglinear
BeginSample = 5;
EndSample = 51;
nb_prevs = EndSample-BeginSample+1;
train = options_.bvar_prior_train;
idx = options_.first_obs+options_.presample-train-4:options_.first_obs+options_.nobs-1;

% chargement des données
rawdata = read_variables(options_.datafile,options_.varobs,[],options_.xls_sheet,options_.xls_range);
nb_points=size(rawdata,1);
if options_.loglinear == 1 & ~options_.logdata
  rawdata = log(rawdata);
end
% if options_.prefilter == 1
%    bayestopt_.mean_varobs = mean(rawdata,1);
%    data = transpose(rawdata-ones(nb_points,1)*bayestopt_.mean_varobs);
% else
  data = transpose(rawdata);
% end
if ~isreal(rawdata)
  error(['There are complex values in the data. Probably  a wrong' ...
	 ' transformation'])
end


% chargement du mode postérieur des paramètres
load ACDM_mode.mat

% simulations
nb_obs = size(bayestopt_.mf,2);
Y = zeros(nb_obs,horizon+1,nb_prevs);
%indx = GetObsIndex();
for gend = BeginSample:EndSample  %51 ; options_.nobs; On veut commencer la prev en 2004Q1 => gend=51
    X = zeros(M_.endo_nbr,horizon+1);
    databoucle = data(:,options_.first_obs:options_.first_obs+gend-1);
    [alphahat,etahat,epsilonhat,ahat,SteadyState,trend_coeff,aK,A,B] = DsgeSmoother(xparam1,gend,databoucle);
    X(:,1) = alphahat(:,end);    
    for k=2:horizon+1
        X(:,k) = A*X(:,k-1) ;
    end
    Y(:,:,gend-BeginSample+1) = X(bayestopt_.mf,:) ;
end

% M_.endo_names(oo_.dr.order_var,:) Les variables endogènes sont classées
% suivant oo_.dr.order_var dans la matrice de transition -> utile pour
% prevs conditionnelles

% function RMSE(Y)

% global data nb_obs


ErreursPrev = zeros(nb_prevs,horizon+1,nb_obs);
for i = 1:nb_obs
    for h = 1:horizon+1
        for gend = BeginSample:EndSample
           ErreursPrev(gend-BeginSample+1,h,i) = Y(i,h,gend-BeginSample+1) - data(i,options_.first_obs+gend+h-2) ;
        end
    end
end

% nb_prevs


% figure('Name','pi')
% for boucle = 1:(horizon+1)
%     subplot(3,3,boucle)
% %     Go(end-boucle+1,:)
% %     data(4,end-boucle+1-8:end-boucle+1)
% %     J(end-boucle+1,:,4)
%     plot(Go(end-boucle+1,:),'color','r');
%     hold on
%     plot(data(4,end-boucle+1-8:end-boucle+1));
%     hold on
%     plot(J(end-boucle+1,:,4),'color','g');
% end

% vecteur de dates
vecteurdates = [];
for an = 1993:2:2006
    vecteurdates=[vecteurdates ; int2str(an) 'Q' int2str(1) ];
end

data
options_.first_obs+BeginSample-1

for variable=1:7
    Go=permute(Y(variable,:,:),[3 2 1]);
    figure('Name', options_.varobs(variable,:))
    plot(data(variable,options_.first_obs+BeginSample-1:end),'LineWidth',1.5,'Color','k')
    hold on
    for boucle = 3:4:nb_prevs
        plot([boucle:boucle+8],Go(boucle,:),'Color','k')
        hold on
        plot([boucle:boucle+8],J(boucle,:,variable),'Color','k','LineStyle',':')
        legend('données','modèle','bvar','Location','SouthOutside','Orientation','horizontal')
        hold on
    end
    set(gca,'Xtick',4:8:55,'XTickLabel',{vecteurdates},'FontSize',9)
    grid on
    hold off
end



% Go=permute(Y(7,:,:),[3 2 1]);
% figure('Name','w')
% for boucle = 1:(horizon+1)
%     subplot(3,3,boucle)
% %     Go(end-boucle+1,:)
% %     data(7,end-boucle+1-8:end-boucle+1)
%     plot(Go(end-boucle+1,:),'color','r');
%     hold on
%     plot(data(7,end-boucle+1-8:end-boucle+1));
%     hold on
%     plot(J(end-boucle+1,:,7),'color','g');
% end
% Go=permute(Y(1,:,:),[3 2 1]);
% figure('Name','Y')
% for boucle = 1:(horizon+1)
%     subplot(3,3,boucle)
% %     Go(end-boucle+1,:)
% %     data(1,end-boucle+1-8:end-boucle+1)
%     plot(Go(end-boucle+1,:),'color','r');
%     hold on
%     plot(data(1,end-boucle+1-8:end-boucle+1));
%     hold on
%     plot(J(end-boucle+1,:,1),'color','g');
% end

% figure(2)
% Go=permute(Y(4,2,:),[2 3 1]);
% plot(Go)
% hold on
% plot(data(4,52:end))
% pause

% RMSE et biais par horizon de prev

RMSE = zeros(nb_obs,horizon+1);
biais = zeros(nb_obs,horizon+1);
for i = 1:nb_obs
    RMSE(i,:) = sqrt(diag(ErreursPrev(:,:,i)'*ErreursPrev(:,:,i))/nb_prevs);
    biais(i,:) = mean(ErreursPrev(:,:,i));
end

RMSE=RMSE(:,2:horizon+1);
biais=biais(:,2:horizon+1);
ErreursPrev=ErreursPrev(:,2:horizon+1,:);
% RMSE moyen et biais sur tous les exercices de prev

% RMSEtot = zeros(nb_obs,1);
% biaistot = zeros(nb_obs,1); 
% for i = 1:nb_obs
%     RMSEtot(i) = mean(sqrt(diag(ErreursPrev(:,:,i)*ErreursPrev(:,:,i)')/horizon));
%     biaistot(i) = mean(mean(ErreursPrev(:,:,i)'));
% end
options_.varobs
RMSE
%RMSEtot
%biais
%biaistot


% function indx = GetObsIndex()
% global options_ M_ oo_
% names = options_.varobs;
% n = size(names,1);
% indx = zeros(n,1);
% for i = 1:n
%     indx(i) = strmatch(deblank(names(i,:)),deblank(M_.endo_names(oo_.dr.order_var,:)),'exact');
% end
