tadd preliminary plot generator - cosmo - front and backend for Markov-Chain Mo… | |
git clone git://src.adamsgaard.dk/cosmo | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 975cbd537b90d0449110c9a21a0a7effc32341ba | |
parent 18f347b2531e003200eb970faa5c465cb5d0cfa8 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Wed, 26 Aug 2015 16:19:20 +0200 | |
add preliminary plot generator | |
Diffstat: | |
M matlab/file_scanner_mcmc_starter.m | 6 +++++- | |
A matlab/generate_plots.m | 206 +++++++++++++++++++++++++++++… | |
M matlab/mcmc_inversion.m | 12 ++++++++---- | |
3 files changed, 219 insertions(+), 5 deletions(-) | |
--- | |
diff --git a/matlab/file_scanner_mcmc_starter.m b/matlab/file_scanner_mcmc_star… | |
t@@ -24,6 +24,9 @@ matlab_scripts_folder = 'm_pakke2014maj11/'; | |
%% general settings | |
debug = true; % show debugging output to matlab console | |
+% output graphics formats | |
+graphics_formats = ['fig', 'png', 'pdf']; | |
+ | |
%% initialization | |
addpath(matlab_scripts_folder); | |
t@@ -73,7 +76,8 @@ while 1 | |
record_threshold_min, record_threshold_max); | |
% generate plots | |
- CompareWalks2(Ss, save_file) | |
+ %CompareWalks2(Ss, save_file) | |
+ generate_plots(Ss, save_file, graphics_formats) | |
% delete or archive the file so it is not processed again | |
%delete(infile) | |
diff --git a/matlab/generate_plots.m b/matlab/generate_plots.m | |
t@@ -0,0 +1,206 @@ | |
+function generate_plots(Ss, save_file, formats) | |
+ | |
+%% Copied from m_pakke2014maj11/CompareWalks2.m | |
+% Generates and saves all relevant figures | |
+ | |
+S = Ss{1}; | |
+fixed_stuff = S.fs; | |
+Nwalkers = fixed_stuff.Nwalkers; | |
+M = size(fixed_stuff.mminmax,1); | |
+ | |
+%Compare BurnIn | |
+fh(1)=figure; | |
+for iwalk=1:min(4,Nwalkers) %only up to the first four walks | |
+ QsBurnIns(:,iwalk)=Ss{iwalk}.QsBurnIn; | |
+ Qss(:,iwalk) =Ss{iwalk}.Qs; | |
+ acceptss(:,iwalk)=Ss{iwalk}.accepts; | |
+ normdmpropspr(:,iwalk) = sqrt(sum(Ss{iwalk}.lump_MetHas.dmpropspr.^2)/M); | |
+ normdmcurspr(:,iwalk) = sqrt(sum(Ss{iwalk}.lump_MetHas.dmcurspr.^2)/M); | |
+end | |
+subplot(2,4,1) | |
+semilogy((1:size(QsBurnIns,1)),QsBurnIns,'-'); | |
+ylim([0.1,1e4]) | |
+ylabel('St. sum of sq.') | |
+title('Burn in') | |
+grid on | |
+ | |
+subplot(2,4,2:4) | |
+semilogy(size(QsBurnIns,1)+(1:size(Qss,1)),Qss,'.') | |
+legend('1','2','3','4','5','6','7','8','9','10','location','NorthEast') | |
+ylim([0.1,1e4]) | |
+% ylabel('St. sum of sq.') | |
+title(['Sampling. Result file =',save_file],'interp','none') | |
+grid on | |
+ | |
+subplot(2,4,6) | |
+hist(normdmcurspr) | |
+xlabel('||dm_{cur}||') | |
+ylimit = ylim; | |
+title('Cur2cur step lengths (Stdz)') | |
+ | |
+subplot(2,4,5) | |
+hist(normdmpropspr) | |
+xlabel('||dm_{prop}||') | |
+ylim(ylimit) | |
+title('Proposed step lengths (Stdz)') | |
+ | |
+subplot(2,4,7) | |
+textfontsize=8; | |
+fs = Ss{1}.fs; | |
+title('Data and Model') | |
+%text out nucleides, RelError, depths | |
+axis([-0.03,1,-1,9]) | |
+str = ['Nucleides']; | |
+for i=1:length(fs.Nucleides) | |
+ str = [str,' - ',fs.Nucleides{i}]; | |
+end | |
+str = {str,['>> Rel.Error=',num2str(fs.RelErrorObs)],... | |
+ ['>> zobs = ',sprintf('%g, ',fs.zobs)]}; | |
+text(0,1,str,'fontsize',textfontsize,'interp','none') | |
+%text out prior intervals | |
+for im=1:size(fs.mminmax,1) | |
+ %str=[fs.mname{im},'_minmax=[',sprintf('%g,%g]. True=%g',fs.mminmax(im,:),fs… | |
+ text(0,im+2,str,'fontsize',textfontsize,'interp','none') | |
+end | |
+ | |
+axis ij | |
+box on | |
+ | |
+subplot(2,4,8) | |
+title('MCMC-analysis') | |
+str = ['Nwalkers:',num2str(fs.Nwalkers),'. ',fs.WalkerStartMode]; | |
+text(0,1,str,'fontsize',textfontsize,'interp','none') | |
+ | |
+fsamp = fs.BurnIn; | |
+str = {['BurnIn: ',num2str(fsamp.Nsamp),' skip ',num2str(fsamp.Nskip),' of ',f… | |
+ ['>> StepFactor ',fsamp.StepFactorMode]}, | |
+switch fsamp.StepFactorMode | |
+ case 'Fixed', str{2} = [str{2},'=',num2str(fsamp.StepFactor)]; | |
+ case 'Adaptive', str{2} = [str{2},', AccRat=',num2str(fsamp.TargetAcceptance… | |
+end | |
+text(0,2,str,'fontsize',textfontsize,'interp','none') | |
+ | |
+fsamp = fs.Sampling; | |
+str = {['Sampling: ',num2str(fsamp.Nsamp),' skip ',num2str(fsamp.Nskip),' of '… | |
+ ['>> StepFactor ',fsamp.StepFactorMode]}, | |
+switch fsamp.StepFactorMode | |
+ case 'Fixed', str{2} = [str{2},'=',num2str(fsamp.StepFactor)]; | |
+ case 'Adaptive', str{2} = [str{2},', AccRat=',num2str(fsamp.TargetAcceptance… | |
+end | |
+text(0,3.5,str,'fontsize',textfontsize,'interp','none') | |
+ | |
+axis([-0.03,1,0,10]) | |
+axis ij | |
+box on | |
+ | |
+%Compare sampling cross-plots | |
+fh = [fh;figure]; | |
+Nbin = 50; | |
+ | |
+mminmax = fixed_stuff.mminmax; %bounds of uniform prior intervals | |
+mDistr = fixed_stuff.mDistr; %'uniform' or 'logunif' for each coordinate | |
+% M = size(ms,1); | |
+ | |
+isub1 = 0; | |
+for i1=1:M | |
+ mminmax_i1 = mminmax(i1,:); | |
+ % mDistr_i1 = mDistr(i1,:); | |
+ % xi = ms(i1,:); | |
+ switch mDistr(i1,:) | |
+ case 'uniform', | |
+ dxbin = diff(mminmax_i1)/Nbin; %we want outside bins to check that we do… | |
+ xbins{i1} = linspace(mminmax_i1(1)-dxbin,mminmax_i1(2)+2*dxbin,Nbin+4); … | |
+ case 'logunif' | |
+ dfacxbin = (mminmax_i1(2)/mminmax_i1(1))^(1/(Nbin)); %we want outside bi… | |
+ xbins{i1} = logspace(log10(mminmax_i1(1)/dfacxbin),log10(mminmax_i1(2)*d… | |
+ end | |
+ | |
+ % for i2 = 1:M | |
+ for i2 = (i1+1):M | |
+ % yi = ms(i2,:); | |
+ | |
+ mminmax_i2 = mminmax(i2,:); | |
+ switch mDistr(i2,:) | |
+ case 'uniform', | |
+ dybin = diff(mminmax_i2)/Nbin; %we want outside bins to check that we … | |
+ ybins = linspace(mminmax_i2(1)-dybin,mminmax_i2(2)+2*dybin,Nbin+4); | |
+ case 'logunif' | |
+ dfacybin = (mminmax_i2(2)/mminmax_i2(1))^(1/Nbin); %we want outside bi… | |
+ ybins = logspace(log10(mminmax_i2(1)/dfacybin),log10(mminmax_i2(2)*dfa… | |
+ end | |
+ W = ones(2); W = conv2(W,W); W = W/sum(W(:)); | |
+ %loop over walks | |
+ isub1 = isub1+1; | |
+ for iwalk = 1:min(4,Nwalkers) | |
+ xi = Ss{iwalk}.ms(i1,:);yi = Ss{iwalk}.ms(i2,:); | |
+ [smoothgrid,histgrid] = smoothdens(xi,yi,xbins{i1},ybins,W); | |
+ isub2 = iwalk; isub = isub2 + (isub1-1)*4; | |
+ if isub>4*5 | |
+ isub1 = 1; isub=1; | |
+ fh = [fh;figure]; | |
+ end | |
+ subplot(5,4,isub) | |
+ pcolor(xbins{i1},ybins,smoothgrid); | |
+ xlabel(fixed_stuff.mname{i1}) | |
+ ylabel(fixed_stuff.mname{i2}) | |
+ grid on; shading flat; axis tight; set(gca,'fontsize',8); | |
+ switch mDistr(i1,:) | |
+ case 'uniform', set(gca,'xscale','lin') | |
+ case 'logunif', set(gca,'xscale','log') | |
+ end | |
+ switch mDistr(i2,:) | |
+ case 'uniform', set(gca,'yscale','lin') | |
+ case 'logunif', set(gca,'yscale','log') | |
+ end | |
+ axis([mminmax_i1,mminmax_i2]) | |
+ end | |
+ end | |
+end | |
+ | |
+fh = [fh;figure]; | |
+for i1 = 1:M | |
+ for iwalk=1:min(4,Nwalkers) | |
+ isub = (i1-1)*4 + iwalk; | |
+ subplot(5,4,isub) | |
+ Nhistc=histc(Ss{iwalk}.ms(i1,:),xbins{i1}); | |
+ bar(xbins{i1},Nhistc,'histc') | |
+ xlabel(fixed_stuff.mname{i1}) | |
+ %set (gca,'xtick',[1e-7:1e-3]); | |
+ | |
+ switch mDistr(i1,:) | |
+ case 'uniform', set(gca,'xscale','lin','xlim',mminmax(i1,:)) | |
+ case 'logunif', set(gca,'xscale','log','xlim',mminmax(i1,:)) | |
+ end | |
+ end | |
+end | |
+ | |
+%Putting in titles over figure 2:4 | |
+figure(fh(2)) | |
+subplot(5,4,2) | |
+title(['Density cross-plots A. Result file =',save_file],'interp','none') | |
+figure(fh(3)) | |
+subplot(5,4,2) | |
+title(['Density cross-plots B. Result file =',save_file],'interp','none') | |
+figure(fh(4)) | |
+subplot(5,4,2) | |
+title(['Histograms. Result file =',save_file],'interp','none') | |
+ | |
+figpos1 = [6 474 1910 504]; | |
+figpos2 =[ 12 94 645 887]; | |
+figpos3 =[ 610 94 645 887]; | |
+figpos4 =[ 1207 94 740 887]; | |
+set(fh(2),'pos',figpos2) | |
+set(fh(3),'pos',figpos3) | |
+set(fh(4),'pos',figpos4) | |
+set(fh(1),'pos',figpos1) | |
+figure(fh(1)) | |
+ | |
+% for i1 = 1:M | |
+% hold off | |
+% subplot(M,M,(M-1)*M+i1) | |
+% xlabel(fixed_stuff.mname{i1}) | |
+% subplot(M,M,(i1-1)*M+1) | |
+% ylabel(fixed_stuff.mname{i1}) | |
+% end | |
+% i=1; | |
+ | |
diff --git a/matlab/mcmc_inversion.m b/matlab/mcmc_inversion.m | |
t@@ -126,12 +126,16 @@ switch fs.g_case | |
fs.mname{4} = 'd18Oth'; | |
%>........ Prior information | |
% m = [ErateInt,ErateGla,tDegla,dtGla,dtIdtG]; | |
- fs.ErateIntminmax = [1e-7,1e-3]; %0.26m to 2600 m pr. Quaternary | |
- fs.ErateGlaminmax = [1e-7,1e-3]; | |
- fs.tDeglaminmax = [10e3,12e3]; %8000 to 10000 yr Holocene | |
+ %fs.ErateIntminmax = [1e-7,1e-3]; %0.26m to 2600 m pr. Quaternary | |
+ %fs.ErateGlaminmax = [1e-7,1e-3]; | |
+ fs.ErateIntminmax = [epsilon_int_min, epsilon_int_max]; %0.26m to 2600 m p… | |
+ fs.ErateGlaminmax = [epsilon_gla_min, epsilon_gla_max]; | |
+ %fs.tDeglaminmax = [10e3,12e3]; %8000 to 10000 yr Holocene | |
+ fs.tDeglaminmax = [t_degla - t_degla_uncer, t_degla + t_degla_uncer]; | |
% fs.dtGlaminmax = [40e3,200e3]; | |
% fs.dtIdtGminmax = [0,0.5]; | |
- fs.d18Othminmax = [3.6,4.4]; | |
+ %fs.d18Othminmax = [3.6,4.4]; | |
+ fs.d18Othminmax = [record_threshold_min, record_threshold_max]; | |
fs.ErateIntDistr = 'logunif'; | |
fs.ErateGlaDistr = 'logunif'; |