clear 
clc

set(0,'DefaultLineLineWidth',2)


%---------------------------------------------------------------------
% To compute multipliers at ZLB, solve two models
% simulation 1 is baseline  that takes us at the ZLB
% simulation 2 is baseline simulation that takes us at the ZLB plus G shock
%---------------------------------------------------------------------

nperiods=30;
maxiter=20;

% Pick color of charts
solution=1;

irfshock = char('eps_ut', 'eps_taun');

%0.5     0.5      0.5       0.5        0.5       0.5    0.5 0.5 0.5 0.5 0.5     0.5      0.5       0.5        0.5       0.5    0.5 0.5 0.5 0.5 

 baseline1=[   0.00  0.00   0.00    0.00     0    0.0  0 0 0 0 0.00  0.00   0.00    0.00     0    0.0  0 0 0 0 
  0.00  0.00   0.00    0.00     0    0.0  0 0 0 0 0.00  0.00   0.00    0.00     0    0.0  0 0 0 0]';


scenario1=[ -0.9  -0.9     -0.9      -0.9      -0.9  -0.9   -0.9  -0.9 -0.9 -0.9 -0.9 -0.9 -0.9  -0.9   -0.9    -0.9     -0.9    -0.9  -0.9 -0.9 
  0  0     0      0      0  0   0  0 0 0 0 0 0.00  0.00   0.00    0.00     0    0.0  0 0]';

global M_ oo_

modnam = 'NKDMP';
modnamstar = 'NKDMP_ZLB';

constraint = 'r< -(1/beta-1)';
constraint_relax ='r>-(1/beta-1)';

%constraint = 'r<(1-1/beta)'; 
%constraint_relax ='rnot>(1-1/beta)';

% First time we solve simulation only with baseline shocks
[zdatabaseline_lin1 zdatabaseline_pie1 zdatass oobase_ Mbase_] = ...
  solve_one_constraint(modnam,modnamstar,...
  constraint, constraint_relax,...
  baseline1,irfshock,nperiods,maxiter);

% Second time we solve simulation with baseline shocks and scenario
[zdatascenario_lin1 zdatascenario_pie1 zdatass oobase_ Mbase_ ] = ...
  solve_one_constraint(modnam,modnamstar,...
  constraint, constraint_relax,...
  baseline1+scenario1,irfshock,nperiods,maxiter);





% Pick color of charts
simulation=2;

irfshock = char('eps_ut', 'eps_taun'); 

baseline2=[ 0.00  0.00   0.00    0.00     0    0.0  0 0 0 0 0.00  0.00   0.00    0.00     0    0.0  0 0 0 0
   0.00  0.00   0.00    0.00     0    0.0  0 0 0 0 0.00  0.00   0.00    0.00     0    0.0  0 0 0 0]';  
%  0.00  0.00   0.00    0.00     0    0.0  0 0 0 0 0.00  0.00   0.00    0.00     0    0.0  0 0 0 0 ]';


scenario2=[ 0.00  0.00   0.00    0.00     0    0.0  0 0 0 0 0.00  0.00   0.00    0.00     0    0.0  0 0 0 0 
  0  0     0      0      0  0   0  0 0 0 0 0 0.00  0.00   0.00    0.00     0    0.0  0 0]';   
%  0  0     0      0      0    0   0  0 0 0 0 0 0.00  0.00   0.00    0.00     0    0.0  0 0    ]';


% First time we solve simulation only with baseline shocks
[zdatabaseline_lin2 zdatabaseline_pie2 zdatass oobase_ Mbase_] = ...
  solve_one_constraint(modnam,modnamstar,...
  constraint, constraint_relax,...
  baseline2,irfshock,nperiods,maxiter);

% Second time we solve simulation with baseline shocks and scenario
[zdatascenario_lin2 zdatascenario_pie2 zdatass oobase_ Mbase_ ] = ...
  solve_one_constraint(modnam,modnamstar,...
  constraint, constraint_relax,...
  baseline2+scenario2,irfshock,nperiods,maxiter);


% Note that we compute impulse responses in deviation from baseline
% In simulation=1, baseline1 has a negative preference shock that takes economy to ZLB
% In simulation=2, baseline2 has no negative preference shock
for i=1:Mbase_.endo_nbr
  eval([deblank(Mbase_.endo_names(i,:)),'1 = zdatascenario_pie1(:,i)-zdatabaseline_pie1(:,i);']);
  eval([deblank(Mbase_.endo_names(i,:)),'2 = zdatascenario_pie2(:,i)-zdatabaseline_pie2(:,i);']);
end

% Construct interest rate in levels
%rlevel_ss=1/BETA-1;
%rlevel1=4*(r1+rlevel_ss);
%rlevel2=4*(r2+rlevel_ss);

%rlevel_ss=100*(1/BETA-1);
%rlevel1=(4*(r1+rlevel_ss))/100;
%rlevel2=(4*(r2+rlevel_ss))/100;

%rlevel_ss=1/BETA-1;
%rlevel_piecewise=400*(r_piecewise+rlevel_ss);
%rlevel_linear=400*(r_linear+rlevel_ss);

%rlevel_ss=1/beta-1;
%rlevel1=400*(r1+rlevel_ss);
%rlevel2=400*(r2+rlevel_ss);



%% Modify to plot IRFs and decision rules

titlelist = char('Interest Rate (Annualized)','Inflation (Annualized)','Output', 'Consumption', 'Labour tax shock'); %'Wage tax shock',


figtitle = '';
line1=[r1,pibar1,Y1,C1,taun1]; %line1=[r1*4,infl1,y1,c1,tauw1,taus1];
line2=[r2,pibar2,Y2,C2,taun2]; %line2=[r2*4,infl2,y2,c2,tauw2,taus2];
%rlevel1
%rlevel2

% Figure 1: Plot dynamic simulation
legendlist = cellstr(char('ZLB','No ZLB')); %('ZLB','No ZLB')); %'Wages tax cut','Sales tax cut'
ylabels = char('Deviation from ss','Deviation from ss','Percent from ss', 'Percent from ss', 'Percent from ss');
figlabel = '';
makechart(titlelist,legendlist,figlabel,ylabels,line1,line2)



%titlelist = char('Output','Sales Tax','Interest rate','Consumption','Inflation', 'ut');

%ylabels = char('percent deviation from baseline',...
 % '% of GDP, deviation from baseline',...
  %'ppoints deviation from baseline, annualized',...
  %'percent deviation from baseline',...
  %'percent deviation from baseline');

%figtitle = '';
%line1=100*[y1,taus1,rlevel1,c1, infl1, ut1];
%line2=100*[y2,taus2,rlevel2,c2, infl2, ut2];

%legendlist = cellstr(char('ZLB',' No ZLB'));
%figlabel = '';
%makechart(titlelist,legendlist,figlabel,ylabels,line1,line2)




















