annotate scripts/study_analysis_rec_algos_noisy.m @ 22:2dd78e37b23a

ABS approx script is working Started working on parallel
author nikcleju
date Wed, 09 Nov 2011 00:11:14 +0000
parents
children
rev   line source
nikcleju@22 1 % File: study_analysis_rec_algos
nikcleju@22 2 % Run global experiment to compare algorithms used for analysis-based reconstruction
nikcleju@22 3 % and plot phast transition graphs
nikcleju@22 4
nikcleju@22 5 clear all
nikcleju@22 6 close all
nikcleju@22 7
nikcleju@22 8 % =================================
nikcleju@22 9 % Set up experiment parameters
nikcleju@22 10 %==================================
nikcleju@22 11 % Which form factor, delta and rho we want
nikcleju@22 12 sigmas = 1.2;
nikcleju@22 13 deltas = 0.05:0.05:0.95;
nikcleju@22 14 rhos = 0.05:0.05:0.95;
nikcleju@22 15 % deltas = [0.95];
nikcleju@22 16 % rhos = [0.1];
nikcleju@22 17 %deltas = 0.3:0.3:0.9;
nikcleju@22 18 %rhos = 0.3:0.3:0.9;
nikcleju@22 19
nikcleju@22 20 % Number of vectors to generate each time
nikcleju@22 21 numvects = 100;
nikcleju@22 22
nikcleju@22 23 % Add noise
nikcleju@22 24 % This is norm(signal)/norm(noise), so power, not energy
nikcleju@22 25 SNRdb = 20; % virtually no noise
nikcleju@22 26
nikcleju@22 27 % Show progressbar ? (not recommended when running on parallel threads)
nikcleju@22 28 do_progressbar = 0;
nikcleju@22 29
nikcleju@22 30 % Value of lambda
nikcleju@22 31 lambda = 1e-2;
nikcleju@22 32
nikcleju@22 33 % What algos to run
nikcleju@22 34 do_abs_ompk = 1;
nikcleju@22 35 do_abs_ompeps = 1;
nikcleju@22 36 do_abs_tst = 1;
nikcleju@22 37 do_abs_bp = 1;
nikcleju@22 38 do_gap = 1;
nikcleju@22 39 do_nesta = 0;
nikcleju@22 40
nikcleju@22 41 % =================================
nikcleju@22 42 % Processing the parameters
nikcleju@22 43 %==================================
nikcleju@22 44 % Set up parameter structure
nikcleju@22 45 count = 0;
nikcleju@22 46 for isigma = 1:sigmas
nikcleju@22 47 for idelta = 1:numel(deltas)
nikcleju@22 48 for irho = 1:numel(rhos)
nikcleju@22 49 sigma = sigmas(isigma);
nikcleju@22 50 delta = deltas(idelta);
nikcleju@22 51 rho = rhos(irho);
nikcleju@22 52
nikcleju@22 53 d = 200;
nikcleju@22 54 p = round(sigma*d);
nikcleju@22 55 m = round(delta*d);
nikcleju@22 56 l = round(d - rho*m);
nikcleju@22 57
nikcleju@22 58 params(count+1).d = d;
nikcleju@22 59 params(count+1).p = p;
nikcleju@22 60 params(count+1).m = m;
nikcleju@22 61 params(count+1).l = l;
nikcleju@22 62
nikcleju@22 63 count = count + 1;
nikcleju@22 64 end
nikcleju@22 65 end
nikcleju@22 66 end
nikcleju@22 67
nikcleju@22 68 % Compute noiselevel from db
nikcleju@22 69 noiselevel = 1 / (10^(SNRdb/10));
nikcleju@22 70
nikcleju@22 71 %load study_analysis_init
nikcleju@22 72
nikcleju@22 73 % Generate an analysis operator Omega
nikcleju@22 74 Omega = Generate_Analysis_Operator(d, p);
nikcleju@22 75
nikcleju@22 76 % Progressbar
nikcleju@22 77 if do_progressbar
nikcleju@22 78 progressbar('Total', 'Current parameters');
nikcleju@22 79 end
nikcleju@22 80
nikcleju@22 81 % Init times
nikcleju@22 82 elapsed_abs_ompk = 0;
nikcleju@22 83 elapsed_abs_ompeps = 0;
nikcleju@22 84 elapsed_abs_tst = 0;
nikcleju@22 85 elapsed_abs_bp = 0;
nikcleju@22 86 elapsed_gap = 0;
nikcleju@22 87 elapsed_nesta = 0;
nikcleju@22 88
nikcleju@22 89 % Init results structure
nikcleju@22 90 results = [];
nikcleju@22 91
nikcleju@22 92 % Prepare progressbar reduction variables
nikcleju@22 93 % if do_progressbar
nikcleju@22 94 % incr2 = 1/numvects;
nikcleju@22 95 % incr1 = 1/numvects/count;
nikcleju@22 96 % frac2 = 0;
nikcleju@22 97 % frac1 = 0;
nikcleju@22 98 % end
nikcleju@22 99
nikcleju@22 100 % ========
nikcleju@22 101 % Run
nikcleju@22 102 % ========
nikcleju@22 103 parfor iparam = 1:numel(params)
nikcleju@22 104
nikcleju@22 105 % Read current parameters
nikcleju@22 106 d = params(iparam).d;
nikcleju@22 107 p = params(iparam).p;
nikcleju@22 108 m = params(iparam).m;
nikcleju@22 109 l = params(iparam).l;
nikcleju@22 110
nikcleju@22 111 % Init stuff
nikcleju@22 112 xrec_abs_ompk = zeros(d, numvects);
nikcleju@22 113 xrec_abs_ompeps = zeros(d, numvects);
nikcleju@22 114 xrec_abs_tst = zeros(d, numvects);
nikcleju@22 115 xrec_abs_bp = zeros(d, numvects);
nikcleju@22 116 xrec_gap = zeros(d, numvects);
nikcleju@22 117 xrec_nesta = zeros(d, numvects);
nikcleju@22 118 %
nikcleju@22 119 err_abs_ompk = zeros(numvects,1);
nikcleju@22 120 relerr_abs_ompk = zeros(numvects,1);
nikcleju@22 121 err_abs_ompeps = zeros(numvects,1);
nikcleju@22 122 relerr_abs_ompeps = zeros(numvects,1);
nikcleju@22 123 err_abs_tst = zeros(numvects,1);
nikcleju@22 124 relerr_abs_tst = zeros(numvects,1);
nikcleju@22 125 err_abs_bp = zeros(numvects,1);
nikcleju@22 126 relerr_abs_bp = zeros(numvects,1);
nikcleju@22 127 err_gap = zeros(numvects,1);
nikcleju@22 128 relerr_gap = zeros(numvects,1);
nikcleju@22 129 err_nesta = zeros(numvects,1);
nikcleju@22 130 relerr_nesta = zeros(numvects,1);
nikcleju@22 131
nikcleju@22 132 % Generate data based on parameters
nikcleju@22 133 [x0,y,M,Lambda] = Generate_Data_Known_Omega(Omega, d,p,m,l,noiselevel, numvects,'l0');
nikcleju@22 134
nikcleju@22 135 % For every generated signal do
nikcleju@22 136 for iy = 1:size(y,2)
nikcleju@22 137
nikcleju@22 138 % Compute epsilon
nikcleju@22 139 epsilon = noiselevel * norm(y(:,iy));
nikcleju@22 140
nikcleju@22 141 %--------------------------------
nikcleju@22 142 % Reconstruct (and measure delay)
nikcleju@22 143 % Compute reconstruction error
nikcleju@22 144 %--------------------------------
nikcleju@22 145 % ABS-OMPk
nikcleju@22 146 if (do_abs_ompk)
nikcleju@22 147 timer_abs_ompk = tic;
nikcleju@22 148 xrec_abs_ompk(:,iy) = ABS_OMPk_approx(y(:,iy), Omega, M, p-l, lambda);
nikcleju@22 149 elapsed_abs_ompk = elapsed_abs_ompk + toc(timer_abs_ompk);
nikcleju@22 150 %
nikcleju@22 151 err_abs_ompk(iy) = norm(x0(:,iy) - xrec_abs_ompk(:,iy));
nikcleju@22 152 relerr_abs_ompk(iy) = err_abs_ompk(iy) / norm(x0(:,iy));
nikcleju@22 153 end
nikcleju@22 154 % ABS-OMPeps
nikcleju@22 155 if (do_abs_ompeps)
nikcleju@22 156 timer_abs_ompeps = tic;
nikcleju@22 157 xrec_abs_ompeps(:,iy) = ABS_OMPeps_approx(y(:,iy), Omega, M, epsilon, lambda);
nikcleju@22 158 elapsed_abs_ompeps = elapsed_abs_ompeps + toc(timer_abs_ompeps);
nikcleju@22 159 %
nikcleju@22 160 err_abs_ompeps(iy) = norm(x0(:,iy) - xrec_abs_ompeps(:,iy));
nikcleju@22 161 relerr_abs_ompeps(iy) = err_abs_ompeps(iy) / norm(x0(:,iy));
nikcleju@22 162 end
nikcleju@22 163 % ABS-TST
nikcleju@22 164 if (do_abs_tst)
nikcleju@22 165 timer_abs_tst = tic;
nikcleju@22 166 xrec_abs_tst(:,iy) = ABS_TST_approx(y(:,iy), Omega, M, epsilon, lambda);
nikcleju@22 167 elapsed_abs_tst = elapsed_abs_tst + toc(timer_abs_tst);
nikcleju@22 168 %
nikcleju@22 169 err_abs_tst(iy) = norm(x0(:,iy) - xrec_abs_tst(:,iy));
nikcleju@22 170 relerr_abs_tst(iy) = err_abs_tst(iy) / norm(x0(:,iy));
nikcleju@22 171 end
nikcleju@22 172 % ABS-BP
nikcleju@22 173 if (do_abs_bp)
nikcleju@22 174 timer_abs_bp = tic;
nikcleju@22 175 xrec_abs_bp(:,iy) = ABS_BP_approx(y(:,iy), Omega, M, epsilon, lambda);
nikcleju@22 176 elapsed_abs_bp = elapsed_abs_bp + toc(timer_abs_bp);
nikcleju@22 177 %
nikcleju@22 178 err_abs_bp(iy) = norm(x0(:,iy) - xrec_abs_bp(:,iy));
nikcleju@22 179 relerr_abs_bp(iy) = err_abs_bp(iy) / norm(x0(:,iy));
nikcleju@22 180 end
nikcleju@22 181 % GAP
nikcleju@22 182 if (do_gap)
nikcleju@22 183 gapparams = [];
nikcleju@22 184 gapparams.num_iteration = 40;
nikcleju@22 185 gapparams.greedy_level = 0.9;
nikcleju@22 186 gapparams.stopping_coefficient_size = 1e-4;
nikcleju@22 187 gapparams.l2solver = 'pseudoinverse';
nikcleju@22 188 gapparams.noise_level = noiselevel;
nikcleju@22 189 timer_gap = tic;
nikcleju@22 190 xrec_gap(:,iy) = GAP(y(:,iy), M, M', Omega, Omega', gapparams, zeros(d,1));
nikcleju@22 191 elapsed_gap = elapsed_gap + toc(timer_gap);
nikcleju@22 192 %
nikcleju@22 193 err_gap(iy) = norm(x0(:,iy) - xrec_gap(:,iy));
nikcleju@22 194 relerr_gap(iy) = err_gap(iy) / norm(x0(:,iy));
nikcleju@22 195 end
nikcleju@22 196 % NESTA
nikcleju@22 197 if (do_nesta)
nikcleju@22 198 try
nikcleju@22 199 timer_nesta = tic;
nikcleju@22 200 xrec_nesta(:,iy) = do_nesta_DemoNonProjector(x0(:,iy), M, Omega', 0);
nikcleju@22 201 elapsed_nesta = elapsed_nesta + toc(timer_nesta);
nikcleju@22 202 catch err
nikcleju@22 203 disp('*****ERROR: NESTA throwed error *****');
nikcleju@22 204 xrec_nesta(:,iy) = zeros(size(x0(:,iy)));
nikcleju@22 205 end
nikcleju@22 206 %
nikcleju@22 207 err_nesta(iy) = norm(x0(:,iy) - xrec_nesta(:,iy));
nikcleju@22 208 relerr_nesta(iy) = err_nesta(iy) / norm(x0(:,iy));
nikcleju@22 209 end
nikcleju@22 210
nikcleju@22 211 % Update progressbar
nikcleju@22 212 % if do_progressbar
nikcleju@22 213 % %frac2 = iy/numvects;
nikcleju@22 214 % %frac1 = ((iparam-1) + frac2) / count;
nikcleju@22 215 % if norm(frac2 - 1) < 1e-6
nikcleju@22 216 % frac2 = 0;
nikcleju@22 217 % end
nikcleju@22 218 % frac2 = frac2 + incr2;
nikcleju@22 219 % frac1 = frac1 + incr1;
nikcleju@22 220 % progressbar(frac1, frac2);
nikcleju@22 221 % end
nikcleju@22 222 end
nikcleju@22 223
nikcleju@22 224 %--------------------------------
nikcleju@22 225 % Save results in big stucture & display
nikcleju@22 226 %--------------------------------
nikcleju@22 227 % Save reconstructed signals
nikcleju@22 228 % Save rel & abs errors
nikcleju@22 229 % Display error
nikcleju@22 230 disp(['Simulation no. ' num2str(iparam)]);
nikcleju@22 231 if (do_abs_ompk)
nikcleju@22 232 results(iparam).xrec_abs_ompk = xrec_abs_ompk;
nikcleju@22 233 results(iparam).err_abs_ompk = err_abs_ompk;
nikcleju@22 234 results(iparam).relerr_abs_ompk = relerr_abs_ompk;
nikcleju@22 235 disp([' ABS_OMPk: avg relative error = ' num2str(mean(relerr_abs_ompk))]);
nikcleju@22 236 end
nikcleju@22 237 if (do_abs_ompeps)
nikcleju@22 238 results(iparam).xrec_abs_ompeps = xrec_abs_ompeps;
nikcleju@22 239 results(iparam).err_abs_ompeps = err_abs_ompeps;
nikcleju@22 240 results(iparam).relerr_abs_ompeps = relerr_abs_ompeps;
nikcleju@22 241 disp([' ABS_OMPeps: avg relative error = ' num2str(mean(relerr_abs_ompeps))]);
nikcleju@22 242 end
nikcleju@22 243 if (do_abs_tst)
nikcleju@22 244 results(iparam).xrec_abs_tst = xrec_abs_tst;
nikcleju@22 245 results(iparam).err_abs_tst = err_abs_tst;
nikcleju@22 246 results(iparam).relerr_abs_tst = relerr_abs_tst;
nikcleju@22 247 disp([' ABS_TST: avg relative error = ' num2str(mean(relerr_abs_tst))]);
nikcleju@22 248 end
nikcleju@22 249 if (do_abs_bp)
nikcleju@22 250 results(iparam).xrec_abs_bp = xrec_abs_bp;
nikcleju@22 251 results(iparam).err_abs_bp = err_abs_bp;
nikcleju@22 252 results(iparam).relerr_abs_bp = relerr_abs_bp;
nikcleju@22 253 disp([' ABS_BP: avg relative error = ' num2str(mean(relerr_abs_bp))]);
nikcleju@22 254 end
nikcleju@22 255 if (do_gap)
nikcleju@22 256 results(iparam).xrec_gap = xrec_gap;
nikcleju@22 257 results(iparam).err_gap = err_gap;
nikcleju@22 258 results(iparam).relerr_gap = relerr_gap;
nikcleju@22 259 disp([' GAP: avg relative error = ' num2str(mean(relerr_gap))]);
nikcleju@22 260 end
nikcleju@22 261 if (do_nesta)
nikcleju@22 262 results(iparam).xrec_nesta = xrec_nesta;
nikcleju@22 263 results(iparam).err_nesta = err_nesta;
nikcleju@22 264 results(iparam).relerr_nesta = relerr_nesta;
nikcleju@22 265 disp([' NESTA: avg relative error = ' num2str(mean(relerr_nesta))]);
nikcleju@22 266 end
nikcleju@22 267 end
nikcleju@22 268
nikcleju@22 269 % =================================
nikcleju@22 270 % Save
nikcleju@22 271 % =================================
nikcleju@22 272 save mat/avgerr_SNR20_lbd1e-2
nikcleju@22 273
nikcleju@22 274 % =================================
nikcleju@22 275 % Plot phase transition
nikcleju@22 276 % =================================
nikcleju@22 277 %--------------------------------
nikcleju@22 278 % Prepare
nikcleju@22 279 %--------------------------------
nikcleju@22 280 %d = 200;
nikcleju@22 281 %m = 190;
nikcleju@22 282 %exactthr = d/m * noiselevel;
nikcleju@22 283 %sigma = 1.2;
nikcleju@22 284 iparam = 1;
nikcleju@22 285 for idelta = 1:numel(deltas)
nikcleju@22 286 for irho = 1:numel(rhos)
nikcleju@22 287 % Create exact recovery count matrix
nikcleju@22 288 % nexact_abs_bp (irho, idelta) = sum(results(iparam).relerr_abs_bp < exactthr);
nikcleju@22 289 % nexact_abs_ompk (irho, idelta) = sum(results(iparam).relerr_abs_ompk < exactthr);
nikcleju@22 290 % nexact_abs_ompeps (irho, idelta) = sum(results(iparam).relerr_abs_ompeps < exactthr);
nikcleju@22 291 % nexact_gap (irho, idelta) = sum(results(iparam).relerr_gap < exactthr);
nikcleju@22 292 % nexact_abs_tst (irho, idelta) = sum(results(iparam).relerr_abs_tst < exactthr);
nikcleju@22 293 % % nexact_nesta(irho, idelta) = sum(results(iparam).relerr_nesta < exactthr);
nikcleju@22 294
nikcleju@22 295 % Get histogram (for a single param set only!)
nikcleju@22 296 % hist_abs_ompk = hist(results(iparam).relerr_abs_ompk, 0.001:0.001:0.1);
nikcleju@22 297 % hist_abs_ompeps = hist(results(iparam).relerr_abs_ompeps, 0.001:0.001:0.1);
nikcleju@22 298 % hist_abs_tst = hist(results(iparam).relerr_abs_tst, 0.001:0.001:0.1);
nikcleju@22 299 % hist_abs_bp = hist(results(iparam).relerr_abs_bp, 0.001:0.001:0.1);
nikcleju@22 300 % hist_gap = hist(results(iparam).relerr_gap, 0.001:0.001:0.1);
nikcleju@22 301
nikcleju@22 302 % Compute average error value
nikcleju@22 303 if (do_abs_ompk)
nikcleju@22 304 avgerr_abs_ompk(irho, idelta) = 1 - mean(results(iparam).relerr_abs_ompk);
nikcleju@22 305 avgerr_abs_ompk(avgerr_abs_ompk < 0) = 0;
nikcleju@22 306 end
nikcleju@22 307 if (do_abs_ompeps)
nikcleju@22 308 avgerr_abs_ompeps(irho, idelta) = 1 - mean(results(iparam).relerr_abs_ompeps);
nikcleju@22 309 avgerr_abs_ompeps(avgerr_abs_ompeps < 0) = 0;
nikcleju@22 310 end
nikcleju@22 311 if (do_abs_tst)
nikcleju@22 312 avgerr_abs_tst(irho, idelta) = 1 - mean(results(iparam).relerr_abs_tst);
nikcleju@22 313 avgerr_abs_tst(avgerr_abs_tst < 0) = 0;
nikcleju@22 314 end
nikcleju@22 315 if (do_abs_bp)
nikcleju@22 316 avgerr_abs_bp(irho, idelta) = 1 - mean(results(iparam).relerr_abs_bp);
nikcleju@22 317 avgerr_abs_bp(avgerr_abs_bp < 0) = 0;
nikcleju@22 318 end
nikcleju@22 319 if (do_gap)
nikcleju@22 320 avgerr_gap(irho, idelta) = 1 - mean(results(iparam).relerr_gap);
nikcleju@22 321 avgerr_gap(avgerr_gap < 0) = 0;
nikcleju@22 322 end
nikcleju@22 323 if (do_nesta)
nikcleju@22 324 avgerr_nesta(irho, idelta) = 1 - mean(results(iparam).relerr_nesta);
nikcleju@22 325 avgerr_nesta(avgerr_nesta < 0) = 0;
nikcleju@22 326 end
nikcleju@22 327
nikcleju@22 328 iparam = iparam + 1;
nikcleju@22 329 end
nikcleju@22 330 end
nikcleju@22 331
nikcleju@22 332 %--------------------------------
nikcleju@22 333 % Plot
nikcleju@22 334 %--------------------------------
nikcleju@22 335 show_phasetrans = @show_phasetrans_win;
nikcleju@22 336 iptsetpref('ImshowAxesVisible', 'on');
nikcleju@22 337 close all
nikcleju@22 338 figbase = 'figs/avgerr_SNR20_lbd1e-2_';
nikcleju@22 339 do_save = 1;
nikcleju@22 340 %
nikcleju@22 341 if (do_abs_ompk)
nikcleju@22 342 figure;
nikcleju@22 343 %h = show_phasetrans(nexact_abs_ompk, numvects);
nikcleju@22 344 %bar(0.001:0.001:0.1, hist_abs_ompk);
nikcleju@22 345 h = show_phasetrans(avgerr_abs_ompk, 1);
nikcleju@22 346 if do_save
nikcleju@22 347 figname = [figbase 'ABS_OMPk'];
nikcleju@22 348 saveas(h, [figname '.fig']);
nikcleju@22 349 saveas(h, [figname '.png']);
nikcleju@22 350 saveTightFigure(h, [figname '.pdf']);
nikcleju@22 351 end
nikcleju@22 352 end
nikcleju@22 353 %
nikcleju@22 354 if (do_abs_ompeps)
nikcleju@22 355 figure;
nikcleju@22 356 %h = show_phasetrans(nexact_abs_ompeps, numvects);
nikcleju@22 357 %bar(0.001:0.001:0.1, hist_abs_ompeps);
nikcleju@22 358 h = show_phasetrans(avgerr_abs_ompeps, 1);
nikcleju@22 359 if do_save
nikcleju@22 360 figname = [figbase 'ABS_OMPeps'];
nikcleju@22 361 saveas(h, [figname '.fig']);
nikcleju@22 362 saveas(h, [figname '.png']);
nikcleju@22 363 saveTightFigure(h, [figname '.pdf']);
nikcleju@22 364 end
nikcleju@22 365 end
nikcleju@22 366 %
nikcleju@22 367 if (do_abs_tst)
nikcleju@22 368 figure;
nikcleju@22 369 %h = show_phasetrans(nexact_abs_tst, numvects);
nikcleju@22 370 %bar(0.001:0.001:0.1, hist_abs_tst);
nikcleju@22 371 h = show_phasetrans(avgerr_abs_tst, 1);
nikcleju@22 372 if do_save
nikcleju@22 373 figname = [figbase 'ABS_TST'];
nikcleju@22 374 saveas(h, [figname '.fig']);
nikcleju@22 375 saveas(h, [figname '.png']);
nikcleju@22 376 saveTightFigure(h, [figname '.pdf']);
nikcleju@22 377 end
nikcleju@22 378 end
nikcleju@22 379 %
nikcleju@22 380 if (do_abs_bp)
nikcleju@22 381 figure;
nikcleju@22 382 %h = show_phasetrans(nexact_abs_bp, numvects);
nikcleju@22 383 %bar(0.001:0.001:0.1, hist_abs_bp);
nikcleju@22 384 h = show_phasetrans(avgerr_abs_bp, 1);
nikcleju@22 385 if do_save
nikcleju@22 386 figname = [figbase 'ABS_BP'];
nikcleju@22 387 saveas(h, [figname '.fig']);
nikcleju@22 388 saveas(h, [figname '.png']);
nikcleju@22 389 saveTightFigure(h, [figname '.pdf']);
nikcleju@22 390 end
nikcleju@22 391 end
nikcleju@22 392 %
nikcleju@22 393 if (do_gap)
nikcleju@22 394 figure;
nikcleju@22 395 %h = show_phasetrans(nexact_gap, numvects);
nikcleju@22 396 %bar(0.001:0.001:0.1, hist_gap);
nikcleju@22 397 h = show_phasetrans(avgerr_gap, 1);
nikcleju@22 398 if do_save
nikcleju@22 399 figname = [figbase 'GAP'];
nikcleju@22 400 saveas(h, [figname '.fig']);
nikcleju@22 401 saveas(h, [figname '.png']);
nikcleju@22 402 saveTightFigure(h, [figname '.pdf']);
nikcleju@22 403 end
nikcleju@22 404 end
nikcleju@22 405 %
nikcleju@22 406 if (do_nesta)
nikcleju@22 407 figure;
nikcleju@22 408 %h = show_phasetrans(nexact_nesta, numvects);
nikcleju@22 409 %bar(0.001:0.001:0.1, hist_nesta);
nikcleju@22 410 h = show_phasetrans(avgerr_nesta, 1);
nikcleju@22 411 if do_save
nikcleju@22 412 figname = [figbase 'NESTA'];
nikcleju@22 413 saveas(h, [figname '.fig']);
nikcleju@22 414 saveas(h, [figname '.png']);
nikcleju@22 415 saveTightFigure(h, [figname '.pdf']);
nikcleju@22 416 end
nikcleju@22 417 end