diff --git a/examples/DM-L50-N128/PlotPowerSpec.pro b/examples/DM-L50-N128/PlotPowerSpec.pro new file mode 100644 index 0000000000000000000000000000000000000000..0b6491ff79a17adb065a4e1ec5d7bfa79ffd7bf4 --- /dev/null +++ b/examples/DM-L50-N128/PlotPowerSpec.pro @@ -0,0 +1,205 @@ + +fout = "powerspec_z0.eps" +RunDir = "./output/" +Tag = "DM-L50-N128" +inpsec_filename = "./output/inputspec_snapshot.txt" + +BoxSize = 50.0 + +Num = 2 ; snapshot numbers at z=0 + +if num ge 1000 then begin + exts='0000' + exts=exts+strcompress(string(Num),/remove_all) + exts=strmid(exts,strlen(exts)-4,4) +endif else begin + exts='000' + exts=exts+strcompress(string(Num),/remove_all) + exts=strmid(exts,strlen(exts)-3,3) +endelse + + + +mydevice=!d.name +set_plot,'PS' +!p.font=0 +device,/times,/italic,font_index=20 +device,/times +device,xsize=20.0,ysize=15.0 +!x.margin=[10,3] +!p.thick=3.0 +!p.ticklen=0.03 + +device, filename = fout, /encapsulated, /color + +v1 = [255, 0, 0] +v2 = [ 0, 185, 0] +v3 = [ 0, 0, 255] +tvlct,v1,v2,v3,1 + +plot, [1], [1], /xlog, /ylog , $ + xtitle = "!20k!7 [ !20h!7 Mpc!U-1!N ]", ytitle = "!9D!7!U2!N(!20k!7)", thick=3.0, $ + xrange = 2*!PI/Boxsize*[0.7, 2000], xstyle = 1, yrange=[0.1, 8.0e3], ystyle=1, xthick=3.5, ythick=3.5, charsize=1.2 + +oplot, 2.0*!PI/BoxSize * [1, 1], [1.0e-10,1.0e10], linestyle=2 + + +Kall = [0] +Dall = [0] + +; read in the three (folded) power spectrum measurements, and stick +; them together to reach higher k + +FoldFac = 16L +MinModeCount = 8 ; rebin to get at least this number of modes per bin +TargetBinNummer = 50 ; aim for this number of bins + + +fname = RunDir + "/powerspecs/powerspec_" + exts + ".txt" +openr, 1, fname + +for piece = 0, 2 do begin + + Time = 0.0D + Bins = 0L + BoxSize = 0.0D + Ngrid = 0.0D + Dplus = 0.0D + readf, 1, Time + + print, "piece=", piece, " TIME=", time + + readf, 1, Bins + readf, 1, BoxSize + readf, 1, Ngrid + readf, 1, Dgrowth + da= dblarr(5, bins) + readf, 1, da + + K = da(0,*) + Delta2 = da(1,*) + ModePow = da(2,*) + ModeCount = da(3,*) + Shot = da(4,*) + + + if (piece eq 0) then begin ;; let's plot linear theory spectrum, scaled to present time + + openr,2, inpsec_filename + z = 0.0D + dplus = 0.0D + readf,2,z,dplus + dat = dblarr(4, 514) + readf,2,dat + close,2 + + k_lin = dat(0,*) + D2_lin = dat(1,*) + D2_Lin /= Dgrowth^2 + + oplot, k_lin, D2_lin + + endif + + + + oplot, K, Shot, color=13, thick=3.0 + + Delta2 -= Shot ; do a shot-noise subtraction + + SumPower = Delta2 * ModeCount + + kmin = 2*!PI/BoxSize * double(FoldFac)^piece + kmax = 2*!PI/BoxSize * Ngrid/2.0/4 * double(FoldFac)^piece + + if piece gt 0 then begin + kmin = 2*!PI/BoxSize * Ngrid/2.0/4 * double(FoldFac)^(piece-1.0) + endif + + print, "Kmin=", Kmin, " Kmax = ", Kmax + + +; we will do a band averaging of the finely binned points, +; subject to two conditions: +; We want enough modes per bin in order to reduce the variance in a bin, +; and simultaneously, for large k, we don't want the bins become too narrow. +; +; The first condition is set by "MinModeCount", +; the second by "TargetBinNummer", which is used to compute a minimum +; logarithmic bin-size. + + + MinDlogK = (alog10(max(K)) - alog10(min(K)))/TargetbinNummer + + istart=0 + ind=[istart] + k_list = [0] + Delta2_list = [0] + Delta2lin_list = [0] + count_list = [0] + repeat begin + count = total(modecount(ind)) + deltak = (alog10(max(K(ind))) - alog10(min(K(ind)))) + + if (deltak ge mindlogk) or ((max(k(ind)) lt 2.0 * kmin) and (piece eq 0)) then begin + + kk = exp(total(alog(k(ind))*ModeCount(ind), /double)/total(ModeCount(ind),/double)) + d2 = total(Delta2(ind) * ModeCount(ind) , /double)/total(ModeCount(ind), /double) + Delta2lin = exp(interpol(alog(D2_lin), alog(k_lin), alog(k(ind)))) + d2lin = total(Delta2lin * ModeCount(ind) , /double)/total(ModeCount(ind), /double) + + if d2 gt 0 then begin + + k_list = [k_list, kk] + Delta2_list = [Delta2_list, d2] + Delta2lin_list = [Delta2lin_list, d2lin] + count_list = [count_list, total(ModeCount(ind))] + endif + + istart = istart + 1 + ind = [istart] + endif else begin + istart = istart + 1 + ind = [ind, istart] + endelse + endrep until istart ge Bins + + + K_list = k_list(1:*) + Delta2_list = delta2_list(1:*) + Count_list = count_list(1:*) + Delta2lin_list = Delta2lin_list(1:*) + + ; select the measurement of the range [kmin,kmax] and adopt it for our total measurement + ind = where((K_List ge kmin) and (K_list le kmax)) + + Kall = [Kall, K_list(ind)] + Dall = [Dall, Delta2_list(ind)] + +endfor + +close,1 + +; get rid off the trailing zeros +Kall = Kall[1:*] +Dall = Dall[1:*] + + +;restrict the measurement to be at most a factor 1/2 below the shot noise + +Sall = exp(interpol(alog(shot), alog(k), alog(Kall))) + +ind = where(Dall gt Sall/2) + +; plot it +oplot, Kall(ind), Dall(ind), color=1, thick=4 + + +xyouts, 0.22, 0.76, /normal, tag, color = 3 +xyouts, 0.22, 0.85, /normal, "!7power spectrum, !20z!7 = 0", charsize=1.2 + +device,/close +set_plot,"X" + + +end