From c17b24f56107232553f405b3e348e2c7293a7cc4 Mon Sep 17 00:00:00 2001
From: Marco Ratto <marco.ratto@ec.europa.eu>
Date: Fri, 13 Sep 2024 08:35:48 +0200
Subject: [PATCH] big fixes for aoa decomposition requiring auxiliary variable:
 - when init2shocks is used, list of exo names must be re-set before
 retrieving decomposition info for auxiliary variable - when decomposition
 results are squeezed, steady state info in oo_ must also be temporarily
 squeezed, other wise plotted results will be wrong

(cherry picked from commit 64f0f1fcf39ec43f2d8b4f87fdeb148f499c0b1b)
---
 .../plot_shock_decomposition.m                | 25 +++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/matlab/shock_decomposition/plot_shock_decomposition.m b/matlab/shock_decomposition/plot_shock_decomposition.m
index 7b95613a75..20c369bf82 100644
--- a/matlab/shock_decomposition/plot_shock_decomposition.m
+++ b/matlab/shock_decomposition/plot_shock_decomposition.m
@@ -265,6 +265,7 @@ if ~isempty(init2shocks) && ~expand
     end
     n=size(init2shocks,1);
     M_.exo_names_init=M_.exo_names;
+    M_.orig_exo_names=M_.exo_names;
     for i=1:n
         j=strmatch(init2shocks{i}{1},orig_endo_names,'exact');
         if ~isempty(init2shocks{i}{2})
@@ -479,7 +480,31 @@ switch type
                     opts=options_;
                     opts.plot_shock_decomp.type='qoq';
                     opts.plot_shock_decomp.use_shock_groups=[];
+                    if ~isempty(init2shocks)
+                        M_.exo_names = M_.orig_exo_names;
+                    end
+                    is_squeezed_steady_state=false;
+                    if length(steady_state)<length(oo_.steady_state)
+                        is_squeezed_steady_state=true;
+                        if isfield(oo_.dr,'ys')
+                            steady_state0= oo_.dr.ys;
+                            oo_.dr.ys = steady_state;
+                        else
+                            steady_state0=oo_.steady_state;
+                            oo_.steady_state=steady_state;
+                        end
+                    end
                     [y_aux, steady_state_aux] = plot_shock_decomposition(M_,oo_,opts,q2a.aux.y);
+                    if is_squeezed_steady_state
+                        if isfield(oo_.dr,'ys')
+                            oo_.dr.ys = steady_state0;
+                        else
+                            oo_.steady_state=steady_state0;
+                        end
+                    end
+                    if ~isempty(init2shocks)
+                        M_.exo_names = M_.exo_names_init;
+                    end
                     q2a.aux.y=y_aux;
                     q2a.aux.yss=steady_state_aux;
                 end
-- 
GitLab