%% % gpuDevice([]) nLenslet_ = [20 40 64 84 150]; D_ = [3.6 8 5 42 30]; nIt = 200; %rms_ps_err_minres = zeros(nIt,length(D_)); %rms_ps_minres = cell(1,length(D_)); for kRun = 1:length(D_) D = D_(kRun); % atm = atmosphere(photometry.V,r0,L0,... % 'altitude',[0, 500, 1000, 2000, 5000, 8000. 13000],... % 'fractionnalR0',[0.2, 0.1, 0.1, 0.3, 0.2, 0.05, 0.05],... % 'windSpeed',[10, 5, 7.5, 5, 10, 12, 15],... % 'windDirection',[0, 0.25, 0.5, 1, 1.5, 1.75, 2]); % atm = gmtAtmosphere(1); % r0 = atm.r0; % L0 = atm.L0; nLenslet = nLenslet_(kRun); d = D/nLenslet; nPxLenslet = 16; cxy0 = 0.5*(nPxLenslet-1); nxy = nLenslet*nPxLenslet; r0 = 0.15; L0 = 30; atm = atmosphere(photometry.V,r0,L0,'windSpeed',10,'windDirection',0); lambda = atm.wavelength; phase2nm = 1e9*lambda/2/pi; ne = 2*nLenslet+1; compile = true; if compile %% ceodir = '~/CEO'; cd([ceodir,'/include']) unix(['sed -i ',... '-e ''s/#define N_SIDE_LENSLET [0-9]*/#define N_SIDE_LENSLET ',num2str(nLenslet),'/g'' ',... '-e ''s/#define _N_PX_PUPIL_ [0-9]*/#define _N_PX_PUPIL_ ',num2str(nPxLenslet),'/g'' ',... '-e ''s/#define _N_PIXEL_ [0-9]*/#define _N_PIXEL_ ',... num2str((nLenslet*nPxLenslet)^2),'/g'' definitions.h']); unix('cat definitions.h'); cd(ceodir) unix('make clean all') cd([ceodir,'/iterativeSolvers']) unix('make iterativeSolvers.bin') % unix('make imaging.mex') % clear ceo_imaging % mex -largeArrayDims -I../include -L../lib -lceo -o ceo_imaging imaging.mex.cu %% % fprintf(' ==>>> CG (N=%d)\n',nLenslet) % tic % unix(sprintf('./a.out CG > CG_%03d_%03d.log',nIt,nLenslet)); % toc fprintf(' ==>>> STATS_MINRES (N=%d)\n',nLenslet) tic unix(sprintf('./a.out %3.1f MINRES > STATS_MINRES_%03d_%03d.log',D,nIt,nLenslet)); toc end %% pup = tools.piston(ne,'type','logical'); pup = pup(:); ps = phase2nm*loadBin(sprintf('STATS_phaseScreenLowRes_%03d',nLenslet),[ne*ne,nIt]); rms_ps_minres{kRun} = std(ps(pup,:),[],2); ps = bsxfun( @minus, ps, mean(ps(pup,:),1) ); ps = bsxfun( @times, pup, ps); ps_e = phase2nm*loadBin(sprintf('STATS_MINRES_phaseEst_%03d_%03d',nIt,nLenslet),[ne*ne,nIt]); ps_e = bsxfun( @minus, ps_e, mean(ps_e(pup,:),1) ); ps_e = bsxfun( @times, pup, ps_e); ps_err = ps - ps_e; rms_ps_err_minres(:,kRun) = std(ps_err); % ps_e = phase2nm*loadBin(sprintf('CG_phaseEst_%03d_%03d',nIt,nLenslet),[ne*ne,nIt]); % ps_e = bsxfun( @minus, ps_e, mean(ps_e,1) ); % ps_err = bsxfun( @minus, ps(:), ps_e); % rms_ps_err_cg = std(ps_err); % figure(kRun+5) % loglog(1:nIt,rms_ps_err_minres,'.-',1:nIt,rms_ps_err_cg,'.-') % grid % title(sprintf('N=%d',nLenslet)) % xlabel('Iteration #') % ylabel('WFE [nm]') % legend('MINRES','CG',0) % % drawnow end %% figure % subplot(1,2,1) % hb = boxplot(rms_ps_minres,nLenslet_); % grid % xlabel('Lenslet linear size') % ylabel('WF RMS [nm]') % subplot(1,2,2) hbe = boxplot(rms_ps_err_minres,nLenslet_); grid xlabel('Lenslet linear size') ylabel('WFE [nm]') wf_rms_th = sqrt(phaseStats.variance(atm)).*phase2nm wf_rms = mean(cellfun( @mean, rms_ps_minres)) %% med_rms_ps_err_minres = mean(rms_ps_err_minres) % h = @(fm) phase2nm*sqrt( ... % phaseStats.variance(atm)-integral(@(x)2.*pi*x.*phaseStats.spectrum(x,atm),0,fm)); h = @(fm) phase2nm*sqrt( ... phaseStats.variance(atm)-... integral2(@(x,y)phaseStats.spectrum(hypot(x,y),atm),-fm,fm,-fm,fm)); d = D_./nLenslet_; sfit = arrayfun( h, 1./(2*d) ) % ((med_rms_ps_err_minres./phase2nm)).^2 % ((sfit./phase2nm)).^2