www.gusucode.com > Ogive_optimization_1.0.6 > Ogive_output_synthesis.m

    function [runok,txtlog,FLUXES,FLUXES_CHARS,PARAMETERS,PARAMETERS_CHARS,WARNINGS_ERRORS,WARNINGS_ERRORS_CHARS]=Ogive_output_synthesis(fname,txtlog,errordir,mtime,DAT,filename,densitymap_filename,flux_outOO_VI,flux_outOO_auto,fit_uncertainty,flux_out30,flux_out30_perc_std,flux_out30_perc_298,TS,index_opt,index_opt_auto)

if nargin==0
    load Ogive_output_synthesis_TESTDELETE
end

try
    %% SETUP
    runok=1;
    SCRIPT_LEVEL=2;
    units={'';'^circ C';'^circ K';'';'';'';'molm^{-2}s^{-1}';'molm^{-2}d^{-1}';'Wm^{-2}'};
    scaling={'';'m';'\mu';'h';'k'};
    DAT5=DAT{5}(DAT{5}>0);
    str0={'OO_NOVI';'OO_VI';'fit_uncertainty [%]';'30min'};
    str13=cell(1,3);
    str13{1}={'gaptest';'gaptype';'rangetest';'spiketest';'spiketype'};
    str13{3}={'errHaar';'errTS'};
    str2={'u';'v';'w'};
    
    DAT5_ed=DAT5;
    DAT5_ed(DAT5_ed~=3 & DAT5_ed~=5 & DAT5_ed~=6)=0;
    DAT5_ed(DAT5_ed==0)=[];
    ixs1=DAT5_ed; %3, 5 and 6 only
    
    
    DAT5raw=DAT{5};
    DAT5_ed2=DAT5;
    DAT5_ed2(DAT5_ed2<2 | DAT5_ed2>6)=0;
    DAT5_ed2(DAT5_ed2==0)=[];
    ixs2=DAT5_ed2; %3, 4, 5 and 6 only
    DAT5raw_ixes=nan(size(ixs2));
    for ii=1:length(ixs2)
        DAT5raw_ixes(ii)=find(DAT5raw==ixs2(ii),1,'first');
        DAT5raw(DAT5raw_ixes(ii))=0;
    end
    ixs2=sortrows([DAT5raw_ixes;ixs2]');
    ixs2=ixs2(:,2)';
    
    DAT5_ed3=DAT5;DAT5_ed3(DAT5_ed3<2 | DAT5_ed3>2)=0;DAT5_ed3(DAT5_ed3==0)=[];ixs3=DAT5_ed3; %3, 4, 5 and 6 only
    ixs={ixs2;'';ixs1};
    
    % MKDIR
    if ~exist([DAT{9},filesep,'4_RESULTS'],'dir')
        mkdir([DAT{9},filesep,'4_RESULTS'])
    end
    
    % save mtime
    save([DAT{9},filesep,'4_RESULTS',filesep,'mtime.mat'],'mtime')
    
    
    %% FLUXES
    FLUXES=[datevec(mtime) flux_outOO_auto flux_outOO_VI fit_uncertainty flux_out30 flux_out30_perc_std flux_out30_perc_298];
    FLUXES(:,6)=round(FLUXES(:,6));
    FLUXES_CHARS=cell(1,size(FLUXES,2));
    FLUXES_CHARS(1:6)={'Year','Month','Day','Hour','Minute','Second'};
    ctr=6;
    for ii=1:4 %OO and 30min
        for ij=1:size(DAT{14},2)
            ctr=ctr+1;
            FLUXES_CHARS{ctr}=[DAT{8}{DAT{14}(3,ij),7},'_',str0{ii},' [',[scaling{DAT{6}(5,DAT{14}(2,ij))+1} units{DAT{6}(4,DAT{14}(2,ij))+1}],']'];
        end
    end
    FLchar={'std';'2-98th'};
    for ii=1:2
        for ij=1:size(DAT{14},2)
            ctr=ctr+1;
            FLUXES_CHARS{ctr}=[DAT{8}{DAT{14}(3,ij),7},'_30min_perc_',FLchar{ii}];
        end
    end
    
    %% PARAMETERS
    colmns_params=[6 9 1 1 4 1 sum(DAT{7}(DAT{14}(1,:))>0) sum(DAT{5}==7)];
    PARAMETERS=nan(size(filename,1),sum(colmns_params));
    PARAMETERS_CHARS={'Year','Month','Day','Hour','Minute','Second','mean(U)','std(U)','mean(w)','std(w)','WDIR','WDIR_RANGE_LEFT','WDIR_RANGE_RIGHT','std(v)','cov(vw)','ustar','q_v','mean(Tair)','mean(c_d0)','mean(rho_d)','mean(Tair_potv)','ZL-1'};
    ixf=find(DAT{7}(DAT{14}(1,:))>0); %signal alignments
    if ~isempty(ixf)
        for ii=1:length(ixf)
            PARAMETERS_CHARS{end+1}=['TS_',DAT{8}{DAT{14}(3,ixf(ii)),3}];
        end
    end
    ixf=find(DAT5==7); %averages
    if ~isempty(ixf)
        for ii=1:length(ixf)
            PARAMETERS_CHARS{end+1}=['mean(',DAT{8}{ixf(ii),3},')'];
        end
    end
    
    
    
    %% WARNINGS_ERRORS
    sumin=sum(DAT{5}>=2 & DAT{5}<=6);
    sumin2=sum(DAT{5}==3 | DAT{5}==5 | DAT{5}==6);
    colmns_warns=[sumin sumin 3 sumin sumin 3 sumin2 sumin2]; %gaptest, gaptype, spiketest, spiketype, errwind, errHaar, errTS
    WARNINGS_ERRORS=nan(size(filename,1),sum(colmns_warns));
    WARNINGS_ERRORS_CHARS=cell(1,size(WARNINGS_ERRORS,2));
    ctr=0;
    iirun=[5 3 2];
    for id=1:3
        if id==1
            for ii=1:iirun(id) %times
                if ii==3
                    DAT5_ed0=DAT5;
                    for ij=ixs3 %DAT5 numbers
                        ixf=find(DAT5_ed0==ij,1,'first');
                        while ~isempty(ixf)
                            ctr=ctr+1;
                            WARNINGS_ERRORS_CHARS{ctr}=[str13{id}{ii},'_',DAT{8}{ixf,3}];
                            DAT5_ed0(ixf)=0;
                            ixf=find(DAT5_ed0==ij,1,'first');
                        end
                    end
                else
                    DAT5_ed0=DAT5;
                    for ij=ixs{id} %DAT5 numbers
                        ixf=find(DAT5_ed0==ij,1,'first');
                        while ~isempty(ixf)
                            ctr=ctr+1;
                            WARNINGS_ERRORS_CHARS{ctr}=[str13{id}{ii},'_',DAT{8}{ixf,3}];
                            DAT5_ed0(ixf)=0;
                            ixf=find(DAT5_ed0==ij,1,'first');
                        end
                    end
                end
            end
        elseif id==3
            for ii=1:iirun(id) %times
                DAT5_ed0=DAT5;
                for ij=ixs{id} %DAT5 numbers
                    ixf=find(DAT5_ed0==ij,1,'first');
                    while ~isempty(ixf)
                        ctr=ctr+1;
                        WARNINGS_ERRORS_CHARS{ctr}=[str13{id}{ii},'_',DAT{8}{ixf,3}];
                        DAT5_ed0(ixf)=0;
                        ixf=find(DAT5_ed0==ij,1,'first');
                    end
                end
            end
        else
            for ii=1:iirun(id)
                ctr=ctr+1;
                WARNINGS_ERRORS_CHARS{ctr}=['errwind_',str2{ii}];
            end
        end
    end
    WARNINGS_ERRORS_CHARS=[{'Year','Month','Day','Hour','Minute','Second'},WARNINGS_ERRORS_CHARS]; %gaptest, gaptype, rangetest, spiketest, spiketype, errwind, errHaar, errTS
    
    
    %% LOOP - PARAMETERS & WARNINGS_ERRORS
    PARAMETERS(:,1:6)=datevec(mtime);
    PARAMETERS(:,23:23+sum(DAT{7}(DAT{14}(1,:))>0)-1)=TS(:,DAT{7}(DAT{14}(1,:))>0);
    meanOutput=cell(size(filename,1),1);
    for id=1:size(filename,1)
        mytimedwaitbar(id,size(filename,1))
        if ~isempty(filename{id,1})
            DATA=load(filename{id,1});
            SecOutput_id=DATA.x;
            if ~isempty(SecOutput_id{3,1})
                PARAMETERS(id,7:15)=SecOutput_id{3,1};      % mwind
            end
            if ~isempty(SecOutput_id{3,4})
                PARAMETERS(id,16)=SecOutput_id{3,4};        % ustar
            end
            if ~isempty(SecOutput_id{4,1})
                PARAMETERS(id,17)=SecOutput_id{4,1};        % q_v
            end
            if ~isempty(SecOutput_id{5,1})
                PARAMETERS(id,18:21)=SecOutput_id{5,1};     % mean(Tair) mean(c_d0) mean(Rho_d) mean(PotTemp_v)
            end
            if ~isempty(SecOutput_id{9,5})
                PARAMETERS(id,22)=SecOutput_id{9,5};        % ZL^{-1}
            end
            if any(DAT5==7)
                PARAMETERS(id,end-sum(DAT5==7)+1:end)=SecOutput_id{7,1};
                meanOutput{id}=SecOutput_id{7,2};
            end
            
            ixv=[1 1;1 2;1 3;2 1;2 2;3 2;8 1;9 1];
            in=nan(length(ixv)+1,1);in(1)=0;
            for ij=1:length(ixv)
                if ~isempty(SecOutput_id{ixv(ij,1),ixv(ij,2)})
                    in2=cell2mat(SecOutput_id(ixv(ij,1),ixv(ij,2)));
                    WARNINGS_ERRORS(id,sum(in(1:ij))+1:sum(in(1:ij))+numel(in2))=in2; %gaptest, gaptype, wind rangetest, spiketest, spiketype, errwind, errHaar, errTS
                    in(ij+1)=numel(in2);
                end
            end
        end
    end
    if any(DAT5==7) %save meanOutput
        save([DAT{9},filesep,'4_RESULTS',filesep,'meanOutput.mat'],'meanOutput')
    end
    WARNINGS_ERRORS=[datevec(mtime) WARNINGS_ERRORS];
    
    
    %% FIT PARAMETERS
    HFLF={'HF';'LF'};
    chars0={'A0';'mu';'f0';'offset';'A0';'mu';'f0'};
    FITPARAMS=cell(1,size(filename,2)-1);
    for ii=1:size(FITPARAMS,2)
        FITPARAMS{ii}=nan(size(filename,1),8);
    end
    for ii=1:size(filename,1)
        if ~isempty(filename{ii,1})
            for ij=2:size(filename,2)
                if ~isempty(filename{ii,ij})
                    DATA=load(filename{ii,ij});
                    thirdoutput=DATA.ThirdOutput_idii;
                    
                    %fit parameters
                    if isnan(index_opt(ii,ij-1))
                        ixOpt=index_opt_auto(ii,ij-1);
                    else
                        ixOpt=index_opt(ii,ij-1);
                    end
                    optparams=thirdoutput{1}{1}(ixOpt,:);
                    if length(optparams)==4
                        FITPARAMS{ij-1}(ii,1:4)=thirdoutput{1}{1}(ixOpt,:);
                    elseif length(optparams)==7
                        FITPARAMS{ij-1}(ii,1:7)=thirdoutput{1}{1}(ixOpt,:);
                    end
                    Ogives_out_HF=thirdoutput{6}{1}(ixOpt,:);
                    [~,mxix]=max(abs(gradient(Ogives_out_HF)));
                    FITPARAMS{ij-1}(ii,end)=thirdoutput{2}(mxix(1));
                end
            end
        end
    end
    log47=false(1,size(filename,2)-1); %false=4 parameters. True=7 parameters (LF)
    for ij=1:size(filename,2)-1
        if ~all(isnan(FITPARAMS{ij}(:,5)))
            log47(ij)=true;
        end
    end
    if all(log47==0) %exclude LF
        mxixe=4;
        for ij=1:size(filename,2)-1
            FITPARAMS{ij}=[FITPARAMS{ij}(1:end,1:mxixe) FITPARAMS{ij}(1:end,end)];
        end
    else %include LF
        mxixe=7;
    end
    FITPARAMS=[datevec(mtime) cell2mat(FITPARAMS)];
    FITPARAMS_CHARS=cell(1,((size(filename,2)-1)*(mxixe+1))+6);
    FITPARAMS_CHARS{1}='Year';FITPARAMS_CHARS{2}='Month';FITPARAMS_CHARS{3}='Day';FITPARAMS_CHARS{4}='Hour';FITPARAMS_CHARS{5}='Minute';FITPARAMS_CHARS{6}='Second';
    ctr=6;
    for ii=1:size(filename,2)-1
        for ij=1:mxixe+1
            ctr=ctr+1;
            if ij<mxixe+1
                if mxixe==4
                    FITPARAMS_CHARS{ctr}=[DAT{8}{DAT{14}(3,ii),7},'_',chars0{ij}];
                else
                    FITPARAMS_CHARS{ctr}=[DAT{8}{DAT{14}(3,ii),7},'_',HFLF{(ij>4)+1},'_',chars0{ij}];
                end
            else
                FITPARAMS_CHARS{ctr}=[DAT{8}{DAT{14}(3,ii),7},'_Cospectralpeak_natfreq'];
            end
        end
    end
    
    
    
    %% LINEAR DETREND RESULTS
    Flux_lindet_cell=cell(size(densitymap_filename));
    for id=1:size(densitymap_filename,1)
        for ii=1:size(densitymap_filename,2)
            if ~isempty(densitymap_filename{id,ii})
                DATA=load(densitymap_filename{id,ii});
                Flux_lindet_cell{id,ii}=[DATA.datalength' DATA.Flux_lindet];
            end
        end
    end
    save([DAT{9},filesep,'4_RESULTS',filesep,'Flux_lindet_cell.mat'],'Flux_lindet_cell')
    
    %% SAVE AS .MAT and .XLSX
    FLUXES_CELL=num2cell(FLUXES);
    FLUXES_CELL=[FLUXES_CHARS;FLUXES_CELL];
    if ispc
        xlswrite([DAT{9},filesep,'4_RESULTS',filesep,'FLUXES.xlsx'],FLUXES_CELL)
    else
        xlwrite([DAT{9},filesep,'4_RESULTS',filesep,'FLUXES.xls'],FLUXES_CELL);
    end
    save([DAT{9},filesep,'4_RESULTS',filesep,'FLUXES.mat'],'FLUXES_CELL')
    %     if ~isempty(DAT{10})
    %         if ~isnan(DAT{10})
    %             xlswrite([DAT{10},'\FLUXES.xlsx'],FLUXES_CELL)
    %             save([DAT{10},'\FLUXES.mat'],'FLUXES_CELL')
    %         end
    %     end
    
    PARAMETERS_CELL=num2cell(PARAMETERS);
    PARAMETERS_CELL=[PARAMETERS_CHARS;PARAMETERS_CELL];
    if ispc
        xlswrite([DAT{9},filesep,'4_RESULTS',filesep,'PARAMETERS.xlsx'],PARAMETERS_CELL)
    else
        xlwrite([DAT{9},filesep,'4_RESULTS',filesep,'PARAMETERS.xls'],PARAMETERS_CELL);
    end
    save([DAT{9},filesep,'4_RESULTS',filesep,'PARAMETERS.mat'],'PARAMETERS_CELL')
    %     if ~isempty(DAT{10})
    %         if ~isnan(DAT{10})
    %             xlswrite([DAT{10},'\PARAMETERS.xlsx'],PARAMETERS_CELL)
    %             save([DAT{10},'\PARAMETERS.mat'],'PARAMETERS_CELL')
    %         end
    %     end
    
    WARNINGS_ERRORS_CELL=num2cell(WARNINGS_ERRORS);
    WARNINGS_ERRORS_CELL=[WARNINGS_ERRORS_CHARS;WARNINGS_ERRORS_CELL];
    if ispc
        xlswrite([DAT{9},filesep,'4_RESULTS',filesep,'WARNINGS_ERRORS.xlsx'],WARNINGS_ERRORS_CELL)
    else
        xlwrite([DAT{9},filesep,'4_RESULTS',filesep,'WARNINGS_ERRORS.xlsx'],WARNINGS_ERRORS_CELL);
    end
    save([DAT{9},filesep,'4_RESULTS',filesep,'WARNINGS_ERRORS.mat'],'WARNINGS_ERRORS_CELL')
    %     if ~isempty(DAT{10})
    %         if ~isnan(DAT{10})
    %             xlswrite([DAT{10},'\WARNINGS_ERRORS.xlsx'],WARNINGS_ERRORS_CELL)
    %             save([DAT{10},'\WARNINGS_ERRORS.mat'],'WARNINGS_ERRORS_CELL')
    %         end
    %     end
    
    FITPARAMS_CELL=num2cell(FITPARAMS);
    FITPARAMS_CELL=[FITPARAMS_CHARS;FITPARAMS_CELL];
    if ispc
        xlswrite([DAT{9},filesep,'4_RESULTS',filesep,'FITPARAMS.xlsx'],FITPARAMS_CELL)
    else
        xlwrite([DAT{9},filesep,'4_RESULTS',filesep,'FITPARAMS.xls'],FITPARAMS_CELL);
    end
    save([DAT{9},filesep,'4_RESULTS',filesep,'FITPARAMS.mat'],'FITPARAMS_CELL')
    %     if ~isempty(DAT{10})
    %         if ~isnan(DAT{10})
    %             xlswrite([DAT{10},'\FLUXES.xlsx'],FLUXES_CELL)
    %             save([DAT{10},'\FLUXES.mat'],'FLUXES_CELL')
    %         end
    %     end
    
catch me
    txtlog=errordisp(SCRIPT_LEVEL,fname,txtlog,me,[]);
    runok=0;
    WS=ws2struct();save([errordir,filesep,'workspace_',datestr(now,'yyyymmdd_HHMMSS_FFF'),'_PREOVI_OutputSynthesis_error.mat'],'WS')
end

end