Skip to content
Snippets Groups Projects
Select Git revision
  • master default
  • noGUIDE
  • 4.5
3 results

gui_smoother2histval.m

Blame
  • Forked from Dynare / matlab-gui
    31 commits behind the upstream repository.
    gui_smoother2histval.m 10.32 KiB
    function gui_smoother2histval(tabId)
    % function gui_smoother2histval(tabId)
    % interface for the DYNARE smoother2histval command
    %
    % INPUTS
    %   tabId:      GUI tab element which displays smoother2histval command interface
    %
    % OUTPUTS
    %   none
    %
    % SPECIAL REQUIREMENTS
    %   none
    
    % Copyright (C) 2019 Dynare Team
    %
    % This file is part of Dynare.
    %
    % Dynare is free software: you can redistribute it and/or modify
    % it under the terms of the GNU General Public License as published by
    % the Free Software Foundation, either version 3 of the License, or
    % (at your option) any later version.
    %
    % Dynare is distributed in the hope that it will be useful,
    % but WITHOUT ANY WARRANTY; without even the implied warranty of
    % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    % GNU General Public License for more details.
    %
    % You should have received a copy of the GNU General Public License
    % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
    
    global project_info options_ model_settings oo_ estim_params_ M_ bayestopt_
    
    handles = [];
    gui_size = gui_tools.get_gui_elements_size(tabId);
    
    model_settings.smoother2histval = struct();
    model_settings.smoother2histval.period = options_.nobs;
    model_settings.smoother2histval.invars = [strjoin(M_.endo_names(1:M_.orig_endo_nbr), ',') ',' strjoin(M_.exo_names, ',')];
    model_settings.smoother2histval.outvars = model_settings.smoother2histval.invars;
    
    % --- PANELS -------------------------------------
    handles.uipanelVars = uipanel(tabId, ...
        'Units', 'normalized', ...
        'Position', [0.01 0.18 0.48 0.73], ...
        'Title', '', ...
        'BorderType', 'none');
    
    handles = gui_tabs.create_endo_vars(handles, 'smoother2histval');
    handles.endoTable.Data(:, 1) = {true};
    handles.endoTable.CellEditCallback = @selectVar;
    
    handles.command_options = uipanel(tabId, ...
        'Units', 'normalized', ...
        'Position', [0.51 0.7 0.48 0.2], ...
        'Title', 'Command options:');
    
    command_options_CreateFcn;
    
    handles.uipanelShocks = uipanel( ...
        'Parent', tabId, ...
        'Tag', 'uipanelShocks', ...
        'Units', 'normalized', ...
        'Position', [0.51 0.18 0.48 0.5], ...
        'Title', '', ...
        'BorderType', 'none');
    
    uipanelShocks_CreateFcn;
    
        function uipanelShocks_CreateFcn()
            data = cell(size(model_settings.shocks, 1), 2);
            data(:,1) = {true};
            data(:,2) = model_settings.shocks(:,1);
            handles.shocksTabGroup = uitabgroup(handles.uipanelShocks ,'Position', [0 0 1 1]);
            new_tab = uitab(handles.shocksTabGroup, 'Title', 'Shocks' , 'UserData', 1);
            currentPanel = uipanel('Parent', new_tab,'BackgroundColor', 'white', 'BorderType', 'none');
            handles.shocksTable = uitable(currentPanel, ...
                'Data', data, ...
                'Units', 'normalized', ...
                'ColumnName', {'Active','Shock'}, ...
                'ColumnEditable', [true false], ...
                'RowName', [], ...
                'Position', [0 0 1 1], ...
                'CellEditCallback', @selectVar);
        end
    
    handles.uipanelComm = uipanel(tabId, ...
        'UserData', zeros(1,0), ...
        'Units', 'normalized', ...
        'Position', [0.01 0.09 0.98 0.09], ...
        'Title', 'Current command options:');
    
    uicontrol(tabId, ...
        'Style', 'text', ...
        'Units','normalized', ...
        'Position',[0.01 0.92 0.48 0.05], ...
        'FontWeight', 'bold', ...
        'String', 'Select variables to be used by smoother2histval:', ...
        'HorizontalAlignment', 'left');
    
    comm_str = gui_tools.command_string('smoother2histval', model_settings.smoother2histval);
    
    handles.smoother2histval = uicontrol(handles.uipanelComm, ...
        'Style', 'text', ...
        'Units', 'normalized', ...
        'Position', [0.01 0.01 0.98 0.98], ...
        'FontAngle', 'italic', ...
        'String', comm_str, ...
        'HorizontalAlignment', 'left');
    
    handles.RunSmoother2histval = uicontrol(tabId, ...
        'Style', 'pushbutton', ...
        'Units', 'normalized', ...
        'Position', [gui_size.space gui_size.bottom gui_size.button_width gui_size.button_height], ...
        'String', 'Run smoother2histval', ...
        'Callback', @RunSmoother2histvalCallback);
    
    handles.Reset = uicontrol(tabId, ...
        'Style', 'pushbutton', ...
        'Units','normalized', ...
        'Position', [gui_size.space*2+gui_size.button_width gui_size.bottom gui_size.button_width gui_size.button_height], ...
        'String', 'Reset', ...
        'Callback', @Reset_Callback);
    
    handles.Close = uicontrol(tabId, ...
        'Style', 'pushbutton', ...
        'Units', 'normalized', ...
        'Position', [gui_size.space*3+gui_size.button_width*2 gui_size.bottom gui_size.button_width gui_size.button_height], ...
        'String', 'Close tab', ...
        'Callback', {@close_tab, tabId});
    
        function command_options_CreateFcn()
            uicontrol(handles.command_options, ...
                'Style', 'text', ...
                'Units', 'normalized', ...
                'Position', [.05 .8 .3 .17], ...
                'String', 'infile:', ...
                'HorizontalAlignment', 'left');
    
            handles.infile = uicontrol(handles.command_options, ...
                'Style', 'edit', ...
                'Units', 'normalized', ...
                'Position', [.12 .8 .7 .17], ...
                'HorizontalAlignment', 'left', ...
                'Callback', {@checkCommOption_Callback, 'infile'});
    
            uicontrol(handles.command_options, ...
                'Style', 'text', ...
                'Units', 'normalized', ...
                'Position', [.05 .6 .3 .17], ...
                'String', 'outfile:', ...
                'HorizontalAlignment', 'left');
    
            handles.outfile = uicontrol(handles.command_options, ...
                'Style', 'edit', ...
                'Units', 'normalized', ...
                'Position', [.12 .6 .7 .17], ...
                'HorizontalAlignment', 'left', ...
                'Callback', {@checkCommOption_Callback, 'outfile'});
    
            uicontrol(handles.command_options, ...
                'Style', 'text', ...
                'Units', 'normalized', ...
                'Position', [.05 .4 .3 .17], ...
                'String', 'period:', ...
                'HorizontalAlignment', 'left');
    
            handles.period = uicontrol(...
                'Parent', handles.command_options, ...
                'Style', 'edit', ...
                'Units', 'normalized', ...
                'Position', [.12 .4 .7 .17], ...
                'HorizontalAlignment', 'left', ...
                'String', num2str(options_.nobs), ...
                'Callback', {@checkCommOption_Callback, 'period'});
    
            uicontrol(handles.command_options, ...
                'Style', 'checkbox', ...
                'Units', 'normalized', ...
                'Position', [.05 .2 .2 .17], ...
                'String', 'clear endogs', ...
                'Callback', @clearendogs);
    
            uicontrol(handles.command_options, ...
                'Style', 'checkbox', ...
                'Units', 'normalized', ...
                'Position', [.35 .2 .2 .17], ...
                'String', 'clear exogs', ...
                'Callback', @clearexogs);
    
            function checkCommOption_Callback(~, ~, option_name)
                comm_options = model_settings.smoother2histval;
                switch option_name
                    case 'infile'
                        comm_options.infile = handles.infile.String;
                    case 'outfile'
                        comm_options.outfile = handles.outfile.String;
                    case 'period'
                        period = str2double(handles.period.String);
                        if isnan(period) || ~isint(period) ...
                                || period < 1 || period > options_.nobs
                            gui_tools.show_error(['period must be an int between 1 and ' options_.nobs])
                            return
                        end
                        comm_options.period = period;
                end
                comm_str = gui_tools.command_string('smoother2histval', comm_options);
                handles.smoother2histval.String = comm_str;
                model_settings.smoother2histval =  comm_options;
            end
        end
    
        function RunSmoother2histvalCallback(hObject, ~)
            try
                options_smoother2histval = model_settings.smoother2histval;
    
                gui_tools.project_log_entry('Running smoother2histval ','...');
                [jObj, guiObj] = gui_tools.create_animated_screen('Running smoother2histval, please wait...', tabId);
    
                smoother2histval(options_smoother2histval);
    
                jObj.stop;
                jObj.setBusyText('All done!');
                project_info.modified = true;
                project_info.smoother2histval_run = true;
                gui_set_menus(true);
            catch ME
                jObj.stop;
                jObj.setBusyText('Done with errors!');
                gui_tools.show_error('Error in execution of smoother2histval command', ME, 'extended');
                uicontrol(hObject);
            end
            delete(guiObj);
        end
    
        function Reset_Callback(~, ~)
            handles.infile.String = '';
            handles.outfile.String = '';
            handles.periods.String = '';
            handles.endoTable.Data(:, 1) = {true};
            handles.shocksTable.Data(:,1) = {true};
        end
    
        function selectVar(~, ~)
            comm_options = model_settings.smoother2histval;
            if any([handles.endoTable.Data{:,1} handles.shocksTable.Data{:,1}])
                comm_options.invars = strjoin(handles.endoTable.Data([handles.endoTable.Data{:,1}], 2), ',');
                if any([handles.shocksTable.Data{:,1}])
                    if ~isempty(comm_options.invars)
                        comm_options.invars = [ comm_options.invars ','];
                    end
                    comm_options.invars = ...
                    [ ...
                    comm_options.invars ...
                    strjoin(handles.shocksTable.Data([handles.shocksTable.Data{:,1}], 2), ',') ...
                    ];
                end
                comm_options.outvars = comm_options.invars;
            else
                if isfield(comm_options, 'invars')
                    comm_options = rmfield(comm_options, 'invars');
                end
                if isfield(comm_options, 'outvars')
                    comm_options = rmfield(comm_options, 'outvars');
                end
            end
            comm_str = gui_tools.command_string('smoother2histval', comm_options);
            handles.smoother2histval.String = comm_str;
            model_settings.smoother2histval =  comm_options;
        end
    
        function clearendogs(~, evt)
            handles.endoTable.Data(:,1) = {~logical(evt.Source.Value)};
            selectVar(1, 1);
        end
    
        function clearexogs(~, evt)
            handles.shocksTable.Data(:,1) = {~logical(evt.Source.Value)};
            selectVar(1, 1);
        end
    end
    
    function close_tab(~, ~, hTab)
    gui_tabs.delete_tab(hTab);
    end