function makeplot(out,varargin)

%MAKEPLOT makes plots for the main functions. These figures can also be obtained 
% by setting 'plots = 1' in those functions.
%
% Required input:
%  out = a structure containing the output of one of the following classes: 
%        MCDCOV, LS, LTS, MLR, MCDREG, CPCA,CPCR, CSIMPLS, RAPCA, ROBPCA, 
%        RPCR, RSIMPLS, CDA, RDA
%
% Optional input: 
%  nameplot  :  0         : menu of plots     (default = 0) 
%              'all'      : all possible plots
%              'scree'    : scree plot
%              'pcadiag'  : Score outlier map
%              'regdiag'  : Regression outlier map
%              '3ddiag'   : 3D Regression outlier map
%              'robdist'  : A plot of the robust distances
%              'qqmcd'    : A qq-plot of the robust distances versus the quantiles of the chi-squared distribution
%              'dd'       : A DD-plot: Robust distances versus Mahalanobis distances
%              'ellipse'  : A tolerance ellipse
%              'resfit'   : Standardized LTS Residuals versus fitted values
%              'resindex' : Standardized LTS Residuals versus index
%              'qqlts'    : Normal QQ-plot of the LTS residuals 
%              'scatter'  : Scatterplot with LTS line 
%              'da'       : Tolerance ellipses of a discrimant analysis
%              'simca'    : Scatterplot with boundaries defined by the number of PC's from a simca method
%  labod   : number of points to be identified in score plots 
%            with largest orthogonal distance.
%  labsd   : number of points to be identified in score and regression plots 
%            with largest score distance.
%  labresd : number of points to be identified in regression plots 
%            with largest residual distance.
%  labmcd  : number of points to be identified in MCD plots
%            with the largest robust distance.
%  lablts  : number of points to be identified in LTS plots 
%            with the largest absolute standardized residual.
%  classic : In case of a robust analysis, classic can be set to 0 to avoid classical plots (default). 
%            If set to one, the inputargument 'out' must contain a field called 'classic' which is a structure. 
%
% I/O: makeplot(out,'nameplot',0,'labsd',3,'labod',3,'labresd',3,'classic',0)
%  The user should only give the input arguments that have to change their default value.
%  The name of the input arguments needs to be followed by their value. The order of 
%  the input arguments is of no importance.
%
% Example: outrpcr=rpcr(x,y,'plots',0,'classic',1); 
%          makeplot(outrpcr,'labsd',5, 'classic',1)
%          makeplot(outrpcr,'nameplot','scree')
%
%          outmcd=mcdcov(x);
%          makeplot(outmcd,'labmcd',6)
%          makeplot(outmcd,'labmcd',4,'nameplot','dd')
%
%          outls=libra_ols(x,y);
%          makeplot(outls)
%
% This function is part of the Matlab Library for Robust Analysis (LIBRA),
% available at: 
%              www.wis.kuleuven.ac.be/stat/robust.html
%
% Written by Sabine Verboven  09/04/2003
% Last Updated : 29/01/2008
%
% Uses functions:  screeplot, scorediagplot, regresdiagplot,
%                  regresdiagplot3d, plotnumbers, plotnumbers3d,
%                  distplot, chiqqplot, ddplot, ellipsplot, residualplot, 
%                  normqqplot, lsscatter, menureg, menuscoreg,
%                  menupls, menucov, menuls,menuda, menusimca
%

%INTITIALISATION%
if isstruct(out)
    innames=fieldnames(out);
    if strmatch('class',innames,'exact')
        attrib=out.class;
    else
        error('The method had no class identifier.')    
    end
    if strmatch('classic',innames,'exact')
        classic=out.classic;
    elseif ismember(attrib,{'CPCA','CPCR','CSIMPLS','MLR','CDA','LS','CSIMCA'})
        classic= 1; 
    else 
        classic=0;
    end
else
    error('The first inputargument is not a structure.')
end
counter=1;
default=struct('nameplot',0,'labsd',3,'labod',3,'labresd',3,'labmcd',3,'lablts',3,'classic',1);
list=fieldnames(default);
options=default;
IN=length(list);
i=1;
%
if nargin>1
    %
    %placing inputfields in array of strings
    %
    for j=1:nargin-1
        if rem(j,2)~=0
            chklist{i}=varargin{j};
            i=i+1;
        end
    end 
    %
    %Checking which default parameters have to be changed
    % and keep them in the structure 'options'.
    %
    while counter<=IN 
        index=strmatch(list(counter,:),chklist,'exact');
        if ~isempty(index) %in case of similarity
            for j=1:nargin-2 %searching the index of the accompanying field
                if rem(j,2)~=0 %fieldnames are placed on odd index
                    if strcmp(chklist{index},varargin{j})
                        I=j;
                    end
                end
            end
            options=setfield(options,chklist{index},varargin{I+1});
            index=[];
        end
        counter=counter+1;
    end
    choice=options.nameplot;
    if choice~=0
        ask=0; 
    else       
        ask=1; %menu of plots 
    end
    labsd=options.labsd;
    labod=options.labod;
    labresd=options.labresd;
    labmcd=options.labmcd;
    lablts=options.lablts;
    classicplots=options.classic;
    if ~isstruct(classic) & options.classic==1
        mess=sprintf(['The classical output is not available. Only robust plots will be shown.\n',...
                'Please rerun the preceeding analysis with the option ''classic'' set to 1',...
              '\n if the classical plots are required.']);
        disp(mess)     
        classicplots=0;
    end
else
    ask=1; %menu of plots
    choice=0;
    labsd=3;
    labod=3;
    labresd=3;
    labmcd=3;
    lablts=3;    
    if ~isstruct(classic) & options.classic==1
       % mess=sprintf(['The classical output is not available. Only robust plots will be shown.\n',...
         %       'Please rerun the preceeding analysis with the option ''classic'' set to 1',...
           %     '\n if the classical plots are required.']);
        %disp(mess)     
        classicplots=0;
    else
        classicplots=1;
    end
end    

%to initialize the correct menu of plots
exitno=0;
switch attrib
case 'CPCA'
    exitno=4;
    if ismember({char(choice)},{'regdiag','3ddiag','robdist','qqmcd','dd','ellipse','resfit','resindex','qqlts','diag','scatter',...
                'da','simca'})
         error('That kind of plot is not available for this method.')
    end
case 'CPCR'
    exitno=6;
    if ismember({char(choice)},{'robdist','qqmcd','dd','ellipse','resfit','resindex','qqlts','diag','scatter','da','simca'})
         error('That kind of plot is not available for this method.')
    end   
case 'LS'
    exitno=7;    
     if ismember({char(choice)},{'scree','pcadiag','3ddiag','robdist','qqmcd','dd','ellipse','simca','da'})
         error('That kind of plot is not available for this method.')
    end
case 'MCDREG'
    exitno=3;
     if ismember({char(choice)},{'scree','pcadiag','3ddiag','robdist','qqmcd','dd','ellipse',...
             'resfit','resindex','qqlts','diag','scatter','da','simca'})
         error('That kind of plot is not available for this method.')
    end
case 'MLR'
    exitno=3;
     if ismember({char(choice)},{'scree','pcadiag','3ddiag','robdist','qqmcd','dd','ellipse',...
             'resfit','resindex','qqlts','diag','scatter','da','simca'})
         error('That kind of plot is not available for this method.')
    end
case 'LTS' 
    exitno=7;
    if ismember({char(choice)},{'scree','pcadiag','3ddiag',...
            'robdist','qqmcd','dd','ellipse','da','simca'})
         error('That kind of plot is not available for this method.')
    end
    if ~isfield(out,'rd')
        error('Please rerun the LTS-regression again with the option plots equal to 1.')
    end
case {'RAPCA','ROBPCA'}
    exitno=4;
   if ismember({char(choice)},{'regdiag','3ddiag','robdist','qqmcd','dd','ellipse','resfit',...
           'resindex','qqlts','diag','scatter','da','simca'})
        error('That kind of plot is not available for this method.')
   end
case 'RPCR' 
      exitno=6;
      if ismember({char(choice)},{'robdist','qqmcd','dd','ellipse','resfit','resindex','qqlts','diag','scatter',...
              'da','simca'})
         error('That kind of plot is not available for this method.')
    end   
case {'RSIMPLS','CSIMPLS'}
    exitno=5;
     if ismember({char(choice)},{'scree','robdist','qqmcd','dd','ellipse','resfit','resindex','qqlts','diag','scatter',...
             'da','simca'})
         error('That kind of plot is not available for this method.')
    end
case 'MCDCOV'
    if ismember({char(choice)},{'scree','pcadiag','regdiag','3ddiag','resfit','resindex','qqlts','diag','scatter',...
                'da','simca'})
         error('That kind of plot is not available for this method.')
    end
    exitno=6;
case {'RDA','CDA'}
    exitno=3;
    if ismember({char(choice)},{'scree','pcadiag','3ddiag','robdist','qqmcd','dd','ellipse',...
             'resfit','resindex','qqlts','diag','scatter','regdiag','simca'})
        error('That kind of plot is not available for this method.')
    end 
    if size(out.center,2)>2
        disp('Warning: Tolerance ellipses are only drawn for two-dimensional data sets.')
        return
    end
case {'CSIMCA','RSIMCA'}
    exitno=3;
    if ismember({char(choice)},{'scree','pcadiag','3ddiag','robdist','qqmcd','dd','ellipse',...
             'resfit','resindex','qqlts','diag','scatter','regdiag','da'})
        error('That kind of plot is not available for this method.')
    end 
    if size(out.pca{1}.P,1) > 3 
        disp('Warning: The dimension of the dataset is larger than 3.')
        return
    end
end
if exitno==0
    error(['Your attribute identifier must be one of the following names:',...
            'CPCA, RAPCA, ROBPCA, CPCR, RPCR, LS, LTS, MCDREG, RSIMPLS, CSIMPLS, MCDCOV, CDA,RDA,CSIMCA,RSIMCA'])
end

%plotting what is asked for 
if ask==0
    whichplot(out,choice,attrib,exitno,labsd,labod,labresd,labmcd,lablts,classic,classicplots)
else
    %make menu of plots
    while (choice~=exitno)
        switch attrib               
            case {'CPCA','ROBPCA','RAPCA'}
                choice=menuscore(out,attrib,exitno,labsd,labod,classic,classicplots);
            case {'MCDREG','MLR'}
                choice=menureg(out,attrib,exitno,labsd,labresd,classic,classicplots);
            case {'COV','MCDCOV'}
                choice=menucov(out,attrib,exitno,labmcd,classic,classicplots);
            case {'RSIMPLS','CSIMPLS'}
                choice=menupls(out,attrib,exitno,labsd,labod,labresd,classic,classicplots);
            case {'CPCR','RPCR'}
                choice=menuscoreg(out,attrib,exitno,labsd,labod,labresd,classic,classicplots);
            case {'LTS','LS'}
                 choice=menuls(out,attrib,exitno,labsd,labresd,lablts,classic,classicplots);    
            case{'CDA','RDA'}
                    choice=menuda(out,attrib,exitno,classic,classicplots);
            case{'CSIMCA','RSIMCA'}
                    choice=menusimca(out,attrib,exitno,classic,classicplots);
           end 
    end
end

%%%%%%%%%%%%% MAIN FUNCTION %%%%%%%%%%%%%%%
function whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,labmcd,lablts,classic,classicplots)

%Initializing variables

switch attrib
    
case {'ROBPCA','RAPCA'}
    Xdist=out.sd;
    cutoffX=out.cutoff.sd;
    cutoffO=out.cutoff.od;
    OD=out.od;
    k=out.k;
    L=out.L;
    %classical output
    if isstruct(classic)
        Lcl=classic.L;
        Xdistcl=classic.sd;
        ODcl=classic.od;
        cutoffXcl=classic.cutoff.sd;
        cutoffOcl=classic.cutoff.od;
        attribcl='CPCA';
    end
case 'MCDREG'
    fitted=out.fitted;  
    Rdist=out.resd;
    cutoffR=out.cutoff.resd;
    if size(fitted,2)~=1 
        multi=1;
    else
        multi=0;
    end
    res=out.res;
    Xdist=out.rd;
    Rsquared=out.rsquared;
    cutoffX=out.cutoff.rd;
    Se=out.cov;
    k=size(out.slope,1);
    %classical output
    if isstruct(classic)
        attribcl=classic.class;
        fittedcl=classic.fitted;
        Rdistcl=classic.resd;
        standrescl=classic.stdres;
        cutoffRcl=classic.cutoff.resd;
        rescl=classic.res;
        Xdistcl=classic.md;
        cutoffXcl=classic.cutoff.md;
        Rsquaredcl=classic.rsquared;
        Secl=classic.cov;
    end
case 'MLR'
    fittedcl=out.fitted;
    Rdistcl=out.resd;
    cutoffRcl=out.cutoff.resd;
    if size(fittedcl,2)~=1
        multi=1;
    else
        multi=0;
    end    
    rescl=out.res;
    Xdistcl=out.md;
    cutoffXcl=out.cutoff.md;
    Rsquaredcl=out.rsquared;
    Secl=out.cov;
    k=size(out.slope,1);
    attribcl=out.class;
case 'RPCR'
    fitted=out.fitted; 
    Rdist=out.resd;
    cutoffR=out.cutoff.resd;
    if size(fitted,2)~=1
        multi=1;
    else
        multi=0;
    end
    res=out.res;
    Xdist=out.sd;
    Rsquared=out.rsquared;
    cutoffX=out.cutoff.sd;
    cutoffO=out.cutoff.od;
    OD=out.od;
    Se=out.cov;
    k=out.k;
    L=out.robpca.L;
    %classical output
    if isstruct(classic)
        attribcl='CPCR';
        Lcl=classic.cpca.L;
        Xdistcl=classic.sd;
        ODcl=classic.od;
        cutoffOcl=classic.cutoff.od;
        cutoffXcl=classic.cutoff.sd;
        Rdistcl=classic.resd; 
        cutoffRcl=classic.cutoff.resd;
    end
case 'LTS'
    resid=out.res;
    fitted=out.fitted;
    scale=out.scale;
    standres=resid/scale;
    n=length(resid);
    if isfield(out,'X')
        x=out.X;
        y=out.y;
    else
        x=0;
        y=0;
    end
    Xdist=out.rd;
    cutoffX=out.cutoff.rd;
    cutoffY=out.cutoff.rd;
    k=size(out.slope,1);
    %classical output
    if isstruct(classic)
        attribcl='LS';
        residcl=classic.res;
        fittedcl=classic.fitted;
        scalecl=classic.scale;
        standrescl=residcl/scalecl;
        Xdistcl=classic.md;
        cutoffXcl=classic.cutoff.md;
        ncl=length(residcl);
        if isfield(classic,'X')
            xcl=classic.X;
            ycl=classic.y;
        else
            xcl=0;
            ycl=0;
        end
    end
case 'LS'
    attribcl=attrib;
    residcl=out.res;
    fittedcl=out.fitted;
    scalecl=out.scale;
    Xdistcl=out.md;
    cutoffXcl=out.cutoff.md;
    standrescl=out.resd;
    ncl=length(residcl);
    if isfield(out,'X')
        xcl=out.X;
        ycl=out.y; 
    else
        xcl=0;
        ycl=0; 
    end
    k=size(out.slope,1);
case 'CPCA'
    Lcl=out.L;
    Xdistcl=out.sd;
    ODcl=out.od;
    cutoffOcl=out.cutoff.od;
    cutoffXcl=out.cutoff.sd;
    k=out.k;
    attribcl=attrib;
case 'CPCR'
    fitted=out.fitted;
    Lcl=out.cpca.L;
    k=out.k;
    Xdistcl=out.sd;
    ODcl=out.od;
    cutoffOcl=out.cutoff.od;
    cutoffXcl=out.cutoff.sd;
    Rdistcl=out.resd;
    cutoffRcl=out.cutoff.resd;
    if size(fitted,2)~=1
        multi=1; %multivariate analysis
    else
        multi=0; %univariate analysis
        stdrescl=out.resd;
        cutoffRcl=out.cutoff.resd;
    end   
    attribcl=attrib;
case 'RSIMPLS'
    fitted=out.fitted; 
    Rdist=out.resd;
    cutoffR=out.cutoff.resd;
    if size(fitted,2)~=1
        multi=1;
    else
        multi=0;
    end
    res=out.res;
    Xdist=out.sd;
    cutoffX=out.cutoff.sd;
    cutoffO=out.cutoff.od;
    OD=out.od;
    Se=out.cov;
    k=out.k;
    %classical output
    if isstruct(classic)
        attribcl='CSIMPLS';
        Xdistcl=classic.sd;
        ODcl=classic.od;
        cutoffOcl=classic.cutoff.od;
        cutoffXcl=classic.cutoff.sd;
        Rdistcl=classic.resd;
        cutoffRcl=classic.cutoff.resd;
    end
case 'CSIMPLS'
    fittedcl=out.fitted;
    if size(fittedcl,2)~=1
        multi=1;
    else
        multi=0;
    end
    Xdistcl=out.sd;
    ODcl=out.od;
    k=out.k;
    cutoffXcl=out.cutoff.sd;
    cutoffOcl=out.cutoff.od;
    attribcl=attrib;
    Rdistcl=out.resd;
    cutoffRcl=out.cutoff.resd;
case 'MCDCOV'
    if ~isempty(out.plane)
        disp('Warning (makeplot): The MCD covariance matrix is singular. No plots can be drawn.')
        return
    end
    covar=out.cov;
    md=out.md;
    rd=out.rd;
    if isfield(out,'X')
        data=out.X;
    else
        data=0;
    end
    center=out.center;
    cutoffR=out.cutoff.rd;  
    cutoffM=out.cutoff.md; 
    if isstruct(classic)
        if isfield(out,'X')
            datacl=out.X;
        else
            datacl=0;
        end
        centercl=out.classic.center;
        covcl=out.classic.cov; 
        mdcl=out.classic.md;
        attribcl=out.classic.class;
    end
case 'COV'
   %only available inside the mcdcov function.   
case 'CDA'
    if isfield(out,'x')
        xcl=out.x;
        groupcl=out.group;
    else
        xcl=0;
        groupcl=0;
    end
    methodcl=out.method;
    centercl=out.center;
    covcl=out.cov;
    classcl=out.class;
case 'RDA'
    if isfield(out,'x')
        x=out.x; group=out.group;
    else
        x=0;group=0;
    end
    method=out.method;
    center=out.center;
    covar=out.cov;
    class=out.class;
    if isstruct(classic)
        if isfield(out.classic,'x')
            xcl=out.classic.x;
            groupcl=out.classic.group;
        else
            xcl=0;
            groupcl=0;
        end
        methodcl=out.classic.method;
        centercl=out.classic.center;
        covcl=out.classic.cov;
        classcl=out.classic.class;
    end
case 'RSIMCA'
    if isstruct(classic)
        resultcl=out.classic;
    else
        resultcl=0;
    end
end

%determination of the number of plots (robust or/and classic) 
if strcmp(attrib,'LS') | strcmp(attrib,'CPCR') | strcmp(attrib,'CPCA') | strcmp(attrib,'MLR') | strcmp(attrib,'CDA') | strcmp(attrib,'CSIMPLS')|strcmp(attrib,'CSIMCA')
    oneplot=1; %only classical plots possible
elseif  (strcmp(attrib,'RAPCA') |strcmp(attrib,'MCDREG') | strcmp(attrib,'RPCR')|strcmp(attrib,'ROBPCA')| strcmp(attrib,'RSIMPLS')| strcmp(attrib,'MCDCOV')|strcmp(attrib,'LTS')|strcmp(attrib,'RDA')|strcmp(attrib,'RSIMCA'))  &  classicplots==0
    oneplot=2; %only robust plots possible
else 
    oneplot=0; %both robust and classical plot in the middle of the screen 
    bdwidth=5;
    topbdwidth=30;
    set(0,'Units','pixels');
    scnsize=get(0,'ScreenSize');
    pos1=[bdwidth, 1/3*scnsize(4)+bdwidth, scnsize(3)/2-2*bdwidth, scnsize(4)/2-(topbdwidth+bdwidth)];
    pos2=[pos1(1)+scnsize(3)/2, pos1(2), pos1(3), pos1(4)];
end

switch plotn
case 'all' %all possible plots
    close 
    switch attrib
        case {'MCDREG','MLR'}
            if oneplot==0
                figure('Position',pos1)
                regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)               
                figure('Position',pos2)
                regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)               
            elseif oneplot==1
                figure
                regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd) %multi stond op 2
            elseif oneplot==2
                figure
                regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)
            end
        case {'CPCA', 'ROBPCA'}
            if oneplot==0
                figure('Position',pos1)
                screeplot(L,attrib)
                figure('Position',pos2)
                screeplot(Lcl,attribcl)
                pos1(2)=pos1(2)-40;
                pos2(2)=pos2(2)-40;
                figure('Position',pos1)
                scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)  
                figure('Position',pos2)
                scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)
            elseif oneplot==1
                figure
                screeplot(Lcl,attrib)
                figure
                scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)          
            else
                figure
                screeplot(L,attrib)   
                figure
                scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)
            end
        case {'RSIMPLS','CSIMPLS'}
                if oneplot==0
                    figure('Position',pos1)
                    scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)   
                    figure('Position',pos2)
                    scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)
                    pos1(2)=pos1(2)-40;
                    pos2(2)=pos2(2)-40;
                    figure('Position',pos1)
                    regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attribcl,labsd,labresd)   
                    figure('Position',pos2)
                    regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)               
%3D plot is still highly memory consuming 08/04/04
%                     if exist('OD')
%                         Nihil=(OD <= 1.e-06);
%                         OD(Nihil)=0;
%                         help=OD;
%                     elseif exist('ODcl')
%                         Nihil=(ODcl <= 1.e-06);
%                         ODcl(Nihil)=0;
%                         helpcl=ODcl;
%                     end
                    
%                     pos1(2)=pos1(2)-80;
%                     pos2(2)=pos2(2)-80;
%                     if ~all(help) %in case k=rank(T)=r then OD = zero 
%                         figure('Position',pos1)
%                         regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)  
%                         figure('Position',pos2)
%                         regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)
%                     else
%                         figure('Position',pos1)
%                         regresdiagplot3d(Xdist,OD,Rdist,cutoffX,cutoffO,cutoffR,k,attrib,multi,labsd,labod,labresd,0)
%                         title(['Robust 3D outlier map based on ',num2str(k),' LV'])
%                         figure('Position',pos2)
%                         regresdiagplot3d(Xdistcl,ODcl,Rdistcl,cutoffXcl,cutoffOcl,cutoffRcl,k,attribcl,multi,labsd,labod,labresd,0)
%                         title(['Classical 3D outlier map based on ',num2str(k),' LV'])
%                     end       
                elseif oneplot==1
                    figure
                    scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)         
                    figure
                    regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)       
%3D plot is still highly memory consuming 08/04/04        
%                     if exist('ODcl')
%                         Nihil=(ODcl <= 1.e-06);
%                         ODcl(Nihil)=0;
%                         helpcl=ODcl;
%                     end                 
%                     figure
%                     if ~all(helpcl) %in case k=rank(T)=r then OD = zero 
%                         regresdiagplot(Rdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,'CPCR',labsd,labresd)
%                     else
%                         regresdiagplot3d(Xdistcl,ODcl,Rdistcl,cutoffXcl,cutoffOcl,cutoffRcl,k,attribcl,multi,labsd,labod,labresd,0)
%                         title(['Classical 3D outlier map based on ',num2str(k),' LV'])
%                     end       
                else
                    figure
                    scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod) 
                    figure
                    regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd) 
%3D plot is still highly memory consuming 08/04/04
%                     if exist('OD')
%                         Nihil=(OD <= 1.e-06);
%                         OD(Nihil)=0;
%                         help=OD;
%                     end
%                     figure
%                     if ~all(help) %in case k=rank(T)=r then OD = zero % nog verfijnen is niet volledig nul is zeer klein (<10^-6)
%                         regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)  
%                     else
%                         regresdiagplot3d(Xdist,OD,Rdist,cutoffX,cutoffO,cutoffR,k,attrib,multi,labsd,labod,labresd,0)
%                         title(['Robust 3D outlier map based on ',num2str(k),' LV'])
%                     end       
                end
            case {'CPCR','RPCR'}
            if oneplot==0
                figure('Position',pos1)
                screeplot(L,attrib)
                figure('Position',pos2)
                screeplot(Lcl,attrib)
                pos1(2)=pos1(2)-40;
                pos2(2)=pos2(2)-40;
                figure('Position',pos1)
                scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)   
                figure('Position',pos2)
                scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)
                pos1(2)=pos1(2)-80;
                pos2(2)=pos2(2)-80;
                figure('Position',pos1)
                regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attribcl,labsd,labresd)   
                figure('Position',pos2)
                regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)               
%3D plot is still highly memory consuming 08/04/04
%                 if exist('OD')
%                     Nihil=(OD <= 1.e-06);
%                     OD(Nihil)=0;
%                     help=OD;
%                 elseif exist('ODcl')
%                     Nihil=(ODcl <= 1.e-06);
%                     ODcl(Nihil)=0;
%                     helpcl=ODcl;
%                 end                       
%                 if ~all(help) %in case k=rank(T)=r then OD = zero 
%                     figure('Position',pos1)
%                     regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)  
%                     figure('Position',pos2)
%                     regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)
%                 else
%                     figure('Position',pos1)
%                     regresdiagplot3d(Xdist,OD,Rdist,cutoffX,cutoffO,cutoffR,k,attrib,multi,labsd,labod,labresd,0)
%                     title(['Robust 3D outlier map based on ',num2str(k),' LV'])
%                     figure('Position',pos2)
%                     regresdiagplot3d(Xdistcl,ODcl,Rdistcl,cutoffXcl,cutoffOcl,cutoffRcl,k,attribcl,multi,labsd,labod,labresd,0)
%                     title(['Classical 3D outlier map based on ',num2str(k),' LV'])
%                 end       
            elseif oneplot==1
                figure
                screeplot(Lcl,attrib)    
                figure
                scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attrib,labsd,labod)         
                figure
                regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)               
%3D plot is still highly memory consuming 08/04/04
%                 if exist('ODcl')
%                     Nihil=(ODcl <= 1.e-06);
%                     ODcl(Nihil)=0;
%                     helpcl=ODcl;
%                 end                                
%                 figure
%                 if ~all(helpcl) %in case k=rank(T)=r then OD = zero 
%                     regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,'CPCR',labsd,labresd)
%                 else
%                     regresdiagplot3d(Xdistcl,ODcl,Rdistcl,cutoffXcl,cutoffOcl,cutoffRcl,k,attribcl,multi,labsd,labod,labresd,0)
%                     title(['Classical 3D outlier map based on ',num2str(k),' LV'])
%                 end       
            else
                figure
                screeplot(L,attrib)
                figure
                scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod) 
                figure
                regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd) 
%3D plot is still highly memory consuming 08/04/04
%                 figure
%                 if exist('OD')
%                     Nihil=(OD <= 1.e-06);
%                     OD(Nihil)=0;
%                     help=OD;
%                 end                                 
%                 if ~all(help) %in case k=rank(T)=r then OD = zero 
%                     regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)  
%                 else
%                     regresdiagplot3d(Xdist,OD,Rdist,cutoffX,cutoffO,cutoffR,k,attrib,multi,labsd,labod,labresd,0)
%                     title(['Robust 3D outlier map based on ',num2str(k),' LV'])
%                 end       
            end
        case 'MCDCOV'
            if oneplot==0
                figure('Position',pos1)
                distplot(rd,cutoffR,attrib,labmcd)
                figure('Position',pos2)
                distplot(md,cutoffM,attribcl,labmcd)
                figure('Position',pos1)
                chiqqplot(rd,size(data,2),attrib)
                figure('Position',pos2)
                chiqqplot(md,size(data,2),attribcl)
                figure
                ddplot(md,rd,cutoffM,attrib,labmcd)
                figure 
                if size(data,2)~=2|data==0
                    axes
                    box on
                    text(0.05,0.5,'Tolerance ellipse is only available for bivariate data','color','r')
                else 
                    ellipsplot(center,covar,data,rd,labmcd)
                    set(findobj('color','r'),'color','m');
                    hold on
                    ellipsplot(centercl,covcl,data,md,labmcd)
                    set(findobj('color','r'),'color','b','linestyle',':');
                    hold off
                    legend_handles=[findobj('color','m'); findobj('color','b','linestyle',':')];
                    legend(legend_handles,'robust','classical','Location','best')
                end
            elseif oneplot==2
                figure
                distplot(rd,cutoffM,attrib,labmcd)
                figure
                chiqqplot(rd,size(data,2),attrib)
                figure
                ddplot(md,rd,cutoffM,attrib,labmcd)
                figure
                if size(data,2)~=2|data==0
                    axes
                    box on
                    text(0.05,0.5,'Tolerance ellipse is only available for bivariate data','color','r')
                else 
                    ellipsplot(center,covar,data,rd,labmcd,'MCDCOV')
                end
            end
        case {'LTS','LS'}
            if oneplot==0
                figure('Position',pos1)
                residualplot(fitted,standres,attrib,'Fitted values','Standardized LTS residual',lablts)
                figure('Position',pos2)
                residualplot(fittedcl,standrescl,attribcl,'Fitted value','Standardized LS residual',lablts) 
                pos1(2)=pos1(2)-40;
                pos2(2)=pos2(2)-40;                
                figure('Position',pos1)                
                residualplot(1:n,standres,attrib,'Index','Standardized LTS residual',lablts)
                figure('Position',pos2)
                residualplot(1:ncl,standrescl,attribcl,'Index','Standardized LS residual',lablts)       
                pos1(2)=pos1(2)-80;
                pos2(2)=pos2(2)-80;                 
                figure('Position',pos1)
                normqqplot(resid,attrib) 
                figure('Position',pos2)
                normqqplot(residcl,attribcl)         
                pos1(2)=pos1(2)-100;
                pos2(2)=pos2(2)-100;    
                figure('Position',pos1)
                if strcmp(attrib,'LTS')
                    regresdiagplot(Xdist,standres,cutoffX,cutoffY,k,0,attrib,labsd,labresd);
                else
                    regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,1,attrib,labsd,labresd);
                end
                figure('Position',pos2)
                if strcmp(attribcl,'LS')
                    regresdiagplot(Xdistcl,standrescl,cutoffXcl,0,k,0,attribcl,labsd,labresd);
                else
                    regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,1,attribcl,labsd,labresd);
                end
                pos1(2)=pos1(2)-120;
                pos2(2)=pos2(2)-120;  
                figure('Position',pos1)
                if size(x,2)~=1|x==0
                    axes
                    box on
                    text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
                else 
                    lsscatter(x,y,fitted,attrib)
                end
                figure('Position',pos2)
                if size(xcl,2)~=1|xcl==0
                    axes
                    box on
                    text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
                else
                    lsscatter(xcl,ycl,fittedcl,attribcl)
                end               
            elseif oneplot ==1
                figure
                residualplot(fittedcl,standrescl,attribcl,'Fitted value','Standardized LS residual',lablts) ;
                figure
                residualplot(1:ncl,standrescl,attribcl,'Index','Standardized LS residual',lablts) ;
                figure
                normqqplot(residcl,attrib);
                figure
                if strcmp(attrib,'LS')
                    regresdiagplot(Xdistcl,standrescl,cutoffXcl,0,k,0,attrib,labsd,labresd);
                else
                    regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,1,attrib,labsd,labresd);
                end
                figure
                if size(xcl,2)~=1|xcl==0
                    axes
                    box on
                    text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
                else
                    lsscatter(xcl,ycl,fittedcl,attribcl)
                end
              elseif oneplot==2
                figure
                residualplot(fitted,standres,attrib, 'Fitted value','Standardized LTS residual',lablts)
                figure
                residualplot(1:n,standres,attrib,'Index','Standardized LTS residual',lablts)
                figure
                normqqplot(resid,attrib)
                figure
                if strcmp(attrib,'LTS')
                    regresdiagplot(Xdist,standres,cutoffX,0,k,0,attrib,labsd,labresd);
                else
                    regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,1,attrib,labsd,labresd);
                end
                figure
                if size(x,2)~=1|x==0
                    axes
                    box on
                    text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
                else
                    lsscatter(x,y,fitted,attrib)
                end
            end
        case{'RDA','CDA'}
            if oneplot==0
                    figure('Position',pos1)
                    daplot(x,group,center,covar,class,method)
                    figure('Position',pos2)
                    daplot(xcl,groupcl,centercl,covcl,classcl,methodcl)
                elseif oneplot==1
                    figure
                    daplot(xcl,groupcl,centercl,covcl,classcl,methodcl)
                elseif oneplot==2
                    figure
                    daplot(x,group,center,covar,class,method)
                end
            case{'RSIMCA','CSIMCA'}
                if oneplot==0
                    figure('Position',pos1)
                    simcaplot(result)
                    figure('Position',pos2)
                    simcaplot(resultcl)
                elseif oneplot==1
                    figure
                    simcaplot(resultcl)
                elseif oneplot==2
                    figure
                    simcaplot(result)
                end    
        end
    choice=exitno;
case 'scree' %screeplot
    close 
    if oneplot==0
        figure('Position',pos1)
        screeplot(L,attrib)
        figure('Position',pos2)
        screeplot(Lcl,attribcl)
    elseif oneplot==1
        screeplot(Lcl,attribcl)
    else
        screeplot(L,attrib)
    end
case 'pcadiag' %diagnostic Scoreplot (Xdist-Odist)
    %close 
    if oneplot==0
        figure('Position',pos1)
        scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)
        figure('Position',pos2)
        scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)
    elseif oneplot==1
        figure
        scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)
    else
        figure
        scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)
    end
case '3ddiag' %3D-plot: highly memory consuming!!!!
    close 
    if oneplot==0
        if exist('OD')
            Nihil=(OD <= 1.e-06);
            OD(Nihil)=0;
            help=OD;
        elseif exist('ODcl')
            Nihil=(ODcl <= 1.e-06);
            ODcl(Nihil)=0;
            helpcl=ODcl;
        end
        if ~all(help)%in case k=rank(T)=r then OD = zero 
            figure('Position',pos1)
            regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)  
            figure('Position',pos2)
            regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)
        else
            figure('Position',pos1)
            regresdiagplot3d(Xdist,OD,Rdist,cutoffX,cutoffO,cutoffR,k,attrib,multi,labsd,labod,labresd,0)
            title(['Robust 3D outlier map based on ',num2str(k),' LV'])
            figure('Position',pos2)
            regresdiagplot3d(Xdistcl,ODcl,Rdistcl,cutoffXcl,cutoffOcl,cutoffRcl,k,attribcl,multi,labsd,labod,labresd,0)
            title(['Classical 3D outlier map based on ',num2str(k),' LV'])
        end   
    elseif oneplot==1
        if exist('ODcl')
            Nihil=(ODcl <= 1.e-06);
            ODcl(Nihil)=0;
            helpcl=ODcl;
        end
        if ~all(helpcl) %in case k=rank(T)=r then OD = zero 
            regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)
        else
            regresdiagplot3d(Xdistcl,ODcl,Rdistcl,cutoffXcl,cutoffOcl,cutoffRcl,k,attribcl,multi,labsd,labod,labresd,0)
            title(['Classical 3D outlier map based on ',num2str(k),' LV'])
        end       
    else
        if exist('OD')
            Nihil=(OD <= 1.e-06);
            OD(Nihil)=0;
            help=OD;
        end
        if ~all(help) %in case k=rank(T)=r then OD = zero 
            regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)  
        else
            regresdiagplot3d(Xdist,OD,Rdist,cutoffX,cutoffO,cutoffR,k,attrib,multi,labsd,labod,labresd,0)
            title(['Robust 3D outlier map based on ',num2str(k),' LV'])
        end  
    end
case {'Idist','robdist'} 
    close
    if oneplot==0
        figure('Position',pos1)
        distplot(rd,cutoffM,'MCDCOV',labmcd)
        figure('Position',pos2)
        distplot(md,cutoffM,'COV',labmcd)
        %elseif oneplot==1 not available since 'COV' is only called inside
        %the MCDCOV function
    elseif oneplot==2
        distplot(rd,cutoffM,'MCDCOV',labmcd)
    end
case 'qqmcd'
    close
    if oneplot==0
        figure('Position',pos1)
        chiqqplot(rd,size(data,2),'MCDCOV')
        figure('Position',pos2)
        chiqqplot(md,size(data,2),'COV')
    elseif oneplot==2
        chiqqplot(rd,size(data,2),'MCDCOV')
    end
case 'dd'
    close
    ddplot(md,rd,cutoffM,attrib,labmcd)
case 'ellipse'
    close
    if oneplot==0
        if size(data,2)~=2|data==0
            axes
            box on
            text(0.05,0.5,'Tolerance ellipse plot is only available for bivariate data','color','r')
        else
            ellipsplot(center,covar,data,rd,labmcd)
            set(findobj('color','r'),'color','m');
            hold on
            ellipsplot(centercl,covcl,data,md,labmcd)
            set(findobj('color','r'),'color','b','linestyle',':');
            hold off
            legend_handles=[findobj('color','m'); findobj('color','b','linestyle',':')];
            legend(legend_handles,'robust','classical','Location','best')
        end
    elseif oneplot==2
        if size(data,2)~=2|data==0
            axes
            box on
            text(0.05,0.5,'Tolerance ellipse plot is only available for bivariate data','color','r')
        else
            ellipsplot(center,covar,data,rd,labmcd)
        end
    end
case 'resfit'
    close
    if oneplot==0
        figure('Position',pos1)
        residualplot(fitted,standres,attrib,'Fitted value','Standardized LTS residual',lablts)
        figure('Position',pos2)
        residualplot(fittedcl,standrescl,attribcl,'Fitted value','Standardized LS residual',lablts) 
    elseif oneplot==1
        residualplot(fittedcl,standrescl,attribcl,'Fitted value','Standardized LS residual',lablts) 
    elseif oneplot==2
        residualplot(fitted,standres,attrib,'Fitted value','Standardized LTS residual',lablts)
    end
case 'resindex'
    close
    if oneplot==0
        figure('Position',pos1)
        residualplot(1:n,standres,attrib,'Index','Standardized LTS residual',lablts)
        figure('Position',pos2)
        residualplot(1:ncl,standrescl,attribcl,'Index','Standardized LS residual',lablts)  
    elseif oneplot==1
        residualplot(1:ncl,standrescl,attribcl,'Index','Standardized LS residual',lablts)  
    elseif oneplot==2
        residualplot(1:n,standres,attrib,'Index','Standardized LTS residual',lablts)      
    end
case 'qqlts'
    close
    if oneplot==0
        figure('Position',pos1)
        normqqplot(resid,'LTS')
        figure('Position',pos2)
        normqqplot(residcl,'LS')
    elseif oneplot==1
        normqqplot(residcl,'LS')
    elseif oneplot==2
        normqqplot(resid,'LTS')
    end
case 'regdiag'
    %close
    if oneplot==0
        figure('Position',pos1)
        if strcmp(attrib,'LTS')
            regresdiagplot(Xdist,standres,cutoffX,0,k,0,attrib,labsd,labresd);
        else
            regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd);
        end
        figure('Position',pos2)
        if strcmp(attribcl,'LS')
            regresdiagplot(Xdistcl,standrescl,cutoffXcl,0,k,0,attribcl,labsd,labresd);
        else
            regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd);
        end
    elseif oneplot==1
        if strcmp(attrib,'LS')
            regresdiagplot(Xdistcl,standrescl,cutoffXcl,0,k,0,attrib,labsd,labresd);
        else
            regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attrib,labsd,labresd);
        end
    elseif oneplot==2
        if strcmp(attrib,'LTS')
            regresdiagplot(Xdist,standres,cutoffX,0,k,0,attrib,labsd,labresd);
        else
            regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd);
        end
    end
case 'scatter'
    close
    if oneplot==0
        figure('Position',pos1)
        if size(x,2)~=1|x==0
            axes
            box on
            text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
        else 
            lsscatter(x,y,fitted,attrib)
        end
        figure('Position',pos2)
        if size(xcl,2)~=1|xcl==0
            axes
            box on
            text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
        else
            lsscatter(xcl,ycl,fittedcl,attribcl)
        end
    elseif oneplot==1
        if size(xcl,2)~=1|xcl==0
            axes
            box on
            text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
        else
            lsscatter(xcl,ycl,fittedcl,attribcl)
        end
    elseif oneplot==2
        if size(x,2)~=1|x==0
            axes
            box on
            text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
        else
            lsscatter(x,y,fitted,attrib)
        end
    end
case 'da'
    close 
    if oneplot==0
        figure('Position',pos1)
        daplot(x,group,center,covar,class,method)
        figure('Position',pos2)
        daplot(xcl,groupcl,centercl,covcl,classcl,methodcl)
    elseif oneplot==1
        daplot(xcl,groupcl,centercl,covcl,classcl,methodcl)
    elseif oneplot==2
        daplot(x,group,center,covar,class,method)
    end 
case 'simca'
    close 
    if oneplot==0
        figure('Position',pos1)
        simcaplot(out)
        figure('Position',pos2)
        simcaplot(resultcl)
    elseif oneplot==1
        simcaplot(out)
    elseif oneplot==2
        simcaplot(out)
    end 
end

%---------------------------------------------------------------------------------------------------------------------------
function choice= menucov(out,attrib,exitno,labmcd,classic,classicplots)
choice=menu('Covariance plots: ','All','Index plot of the distances','Quantile-Quantile plot of the distances','Distance-distance plot',...
             'Tolerance ellipse (for bivariate data)','Exit');          
switch choice
    case 1
        plotn='all';
        whichplot(out,plotn,attrib,exitno,3,3,3,labmcd,3,classic,classicplots)
    case 2
        plotn='Idist';
        whichplot(out,'Idist',attrib,exitno,3,3,3,labmcd,3,classic,classicplots)
    case 3
        plotn='qqmcd';
        whichplot(out,plotn,attrib,exitno,3,3,3,labmcd,3,classic,classicplots)
    case 4
        plotn='dd';
        whichplot(out,plotn,attrib,exitno,3,3,3,labmcd,3,classic,classicplots)
    case 5
        plotn='ellipse';
        whichplot(out,plotn,attrib,exitno,3,3,3,labmcd,3,classic,classicplots)
    case 6
        choice=exitno;
    end
%---------------------------------------------------------------------------------------------------------------------------
function choice = menureg(out,attrib,exitno,labsd,labresd,classic,classicplots)
choice=menu('Regression Plots: ','All ','Regression outlier map', 'Exit ');
switch choice
    case 1
        plotn='all';
        whichplot(out,plotn,attrib,exitno,labsd,3,labresd,3,3,classic,classicplots)
    case 2
        plotn='regdiag';
        whichplot(out,plotn,attrib,exitno,labsd,3,labresd,3,3,classic,classicplots)
    case 3
        choice=exitno;
    end
%---------------------------------------------------------------------------------------------------------------------------
function choice =  menuscore(out,attrib,exitno,labsd,labod,classic,classicplots)
choice=menu('Score Plots: ','All ','Scree plot','Score outlier map', 'Exit ');
switch choice
    case 1
        plotn='all';
        whichplot(out,plotn,attrib,exitno,labsd,labod,3,3,3,classic,classicplots)
    case 2
        plotn='scree';
        whichplot(out,plotn,attrib,exitno,labsd,labod,3,3,3,classic,classicplots)
    case 3
        plotn='pcadiag';
        whichplot(out,plotn,attrib,exitno,labsd,labod,3,3,3,classic,classicplots)
    case 4
        choice=exitno;
    end
    
%---------------------------------------------------------------------------------------------------------------------------
function choice = menupls(out,attrib,exitno,labsd,labod,labresd,classic,classicplots)
choice=menu('PLS Plots: ','All ','Score outlier map',...
                     'Regression outlier map', '3D outlier map (Highly memory consuming)','Exit ');
switch choice
    case 1
        plotn='all';
        whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
    case 2
        plotn='pcadiag';
        whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)  
    case 3
        plotn='regdiag';
        whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots) 
    case 4
        plotn='3ddiag';
        whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)            
    case 5
        choice=exitno;
    end     
%---------------------------------------------------------------------------------------------------------------------------
function choice=menuscoreg(out,attrib,exitno,labsd,labod,labresd,classic,classicplots)
choice=menu('Score and Regression Plots: ','All ','Scree plot','Score outlier map',...
        'Regression outlier map', '3D outlier map  (Highly memory consuming)', 'Exit ');

switch choice
    case 1
        plotn='all';
        whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
    case 2
        plotn='scree';
        whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
    case 3
        plotn='pcadiag';
        whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)              
    case 4
        plotn='regdiag';
        whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
    case 5
        plotn='3ddiag';
        whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
    case 6
        choice=exitno;
    end
%---------------------------------------------------------------------------------------------------------------------------
function choice= menuls(out,attrib,exitno,labsd,labresd,lablts,classic,classicplots)
choice=menu('Residual plots: ', 'All', 'Standardized residuals versus fitted values',...
             'Index plot of standardized residuals','Normal QQplot of residuals',...
             'Diagnostic plot of residuals versus robust distances',...
             'Scatter plot with regression line','Exit');         
switch choice
case 1
    plotn='all';
    whichplot(out,plotn,attrib,exitno,labsd,3,labresd,3,lablts,classic,classicplots)
case 2
    plotn='resfit';
    whichplot(out,plotn,attrib,exitno,3,3,3,3,lablts,classic,classicplots)
case 3
    plotn='resindex';
    whichplot(out,plotn,attrib,exitno,3,3,3,3,lablts,classic,classicplots)
case 4
    plotn='qqlts';
    whichplot(out,plotn,attrib,exitno,3,3,3,3,lablts,classic,classicplots)
case 5
    plotn='regdiag';
    whichplot(out,plotn,attrib,exitno,labsd,3,labresd,3,lablts,classic,classicplots)    
case 6
    plotn='scatter';
    whichplot(out,plotn,attrib,exitno,3,3,3,3,lablts,classic,classicplots)
case 7
    choice=exitno;
end   
%---------------------------------------------------------------------------------------------------------------------------
function choice = menuda(out,attrib,exitno,classic,classicplots)
choice=menu('Discriminant analysis: ','All ','Tolerance ellipses (for bivariate data)', 'Exit ');
switch choice
    case 1
        plotn='all';
        whichplot(out,plotn,attrib,exitno,3,3,3,3,3,classic,classicplots)
    case 2
        plotn='da';
        whichplot(out,plotn,attrib,exitno,3,3,3,3,3,classic,classicplots)
    case 3
        choice=exitno;
end
%------------------------------------------------------------------------------------------------------------------------------
function choice = menusimca(out,attrib,exitno,classic,classicplots)
choice=menu('SIMCA analysis: ','All ','Scatter plot', 'Exit ');
switch choice
    case 1
        plotn='all';
        whichplot(out,plotn,attrib,exitno,3,3,3,3,3,classic,classicplots)
    case 2
        plotn='simca';
        whichplot(out,plotn,attrib,exitno,3,3,3,3,3,classic,classicplots)
    case 3
        choice=exitno;
end
