1 #pragma TextEncoding = "UTF-8"
2 #pragma rtGlobals=3 // Use modern global access method and strict wave access.
3 #include "pearl-area-profiles"
32 dfref savedf = GetDataFolderDFR()
33 dfref datadf = GetWavesDataFolderDFR(data)
36 make /n=5 /d /o w_coef_int
37 make /n=7 /d /o w_coef_curved
41 duplicate /free xint, xint_sig
42 xint_sig = sqrt(xint * 4) / 4
43 variable xmin = wavemin(xint)
44 variable xmax = wavemax(xint)
45 variable xmean = mean(xint)
50 w_coef_int[2] = xmax - xmin
51 w_coef_int[3] = dimoffset(xint, 0) + dimdelta(xint, 0) * dimsize(xint, 0) / 2
53 FuncFit /NTHR=0 FermiFuncLinDOS w_coef_int xint /D /I=1 /W=xint_sig
55 duplicate /o w_sigma, w_sigma_int
59 variable ymean = mean(yavg)
61 duplicate /o data, data_norm, data_sig
62 data_sig = sqrt(data * 4) / 4
63 data_norm = data_norm * ymean / yavg[q]
64 data_sig = data_sig * ymean / yavg[q]
72 w_coef_curved[0] = {0, 0, 1, 95.5, 100, 0, -0.0001}
73 w_coef_curved[0] = xmin
74 w_coef_curved[2] = xmax - xmin
75 w_coef_curved[3] = w_coef_int[3]
76 w_coef_curved[4] = w_coef_int[4]
86 duplicate /o data_norm, fit_data_norm
87 FuncFitMD /X=1 /NTHR=0 FermiFuncLinDOS_2Dcorr w_coef_curved data_norm /D=fit_data_norm /I=1 /W=data_sig
89 duplicate /o w_sigma, w_sigma_curved
91 display /k=1; appendimage data_norm
92 ModifyImage data_norm ctab= {xmin,xmax,Grays,0}
93 AppendMatrixContour fit_data_norm
102 dfref savedf = GetDataFolderDFR()
103 wave /sdfr=root: Tint, Tint_sig, Tcurv, Tcurv_sig, EFcurv, EFcurv_sig
104 wave w_coef_int, w_coef_curved
105 wave w_sigma_int, w_sigma_curved
107 Tint[index] = w_coef_int[4]
108 Tint_sig[index] = w_sigma_int[4]
109 Tcurv[index] = w_coef_curved[4]
110 Tcurv_sig[index] = w_sigma_curved[4]
111 EFcurv[index] = w_coef_curved[3]
112 EFcurv_sig[index] = w_sigma_curved[3]
122 string name = nameofwave(data)
124 duplicate /o data, data_out
125 redimension /n=(dimsize(data,0)) data_out
128 if (waveexists(data_sig))
129 duplicate /o data_sig, sig_out
130 redimension /n=(dimsize(data,0)) sig_out
137 variable sum_ywgt = sum(ywgt)
139 variable nx = dimsize(data, 0)
140 variable ny = dimsize(data, 1)
148 wave PassEnergy = :attr:PassEnergy
149 wave NumSlices = :attr:NumSlices
151 for (iy = 0; iy < ny; iy += 1)
152 dy = dimoffset(data, 1) + dimdelta(data, 1) * iy
153 dy = dy / dimdelta(data, 1)
154 dx =
slit_shift(dy * 902 / NumSlices[0], PassEnergy[0])
155 dp = round(dx / dimdelta(data, 0))
156 dp_min = min(dp_min, dp)
158 data_out[] = p+dp >= 0 ? data_out + data[p+dp][iy] * ywgt[iy] : data_out
160 if (waveexists(data_sig))
161 sig_out = p+dp >= 0 ? sig_out + data_sig[p+dp][iy] * ywgt[iy] : sig_out
166 data_out[0, -dp_min][] = nan
168 if (waveexists(sig_out))
182 if (!WaveExists(data_out))
183 string name = nameofwave(data) + "_corr"
184 duplicate /o data, $name
185 wave data_out = $name
190 variable nx = dimsize(data, 0)
191 variable ny = dimsize(data, 1)
199 for (iy = 0; iy < ny; iy += 1)
200 dy = dimoffset(data, 1) + dimdelta(data, 1) * iy
201 dy = dy / dimdelta(data, 1)
203 dp = round(dx / dimdelta(data, 0))
204 dp_min = min(dp_min, dp)
206 if (wavedims(data_out) >= 2)
207 data_out[][iy] = p+dp >= 0 ? data_out + data[p+dp][iy] : data_out
209 data_out = p+dp >= 0 ? data_out + data[p+dp][iy] : data_out
213 data_out[0, -dp_min][] = nan
223 Wave w; Variable x; variable y
235 variable pos = w[3] +
slit_shift(y * w[9], w[8])
236 variable transm = 1 + w[5] * y + w[6] * y^2 + w[7] * y^3
237 variable fermi = (w[1] * min(x - pos, 0) + w[2]) / ( exp( (x - pos) / (kBoltzmann * w[4]) ) + 1.0 )
238 return transm * (fermi + w[0])
242 threadsafe Function FermiFuncLinDOS_2Dcorr_old(w,x,y) : FitFunc
246 Wave w; Variable x; variable y
255 variable pos = w[3] + w[5] * y + w[6] * y^2
256 return w[0] + (w[1] * min(x - pos, 0) + w[2]) / ( exp( (x - pos) / (kBoltzmann * w[4]) ) + 1.0 )
279 variable isin = asin(ypix / rpix)
280 variable dene = rene * (cos(isin) - 1)
289 variable ny = dimsize(data, 1)
290 make /o /n=(ny) shift_x
291 setscale /i x -ny/2, ny/2, "", shift_x
292 wave PassEnergy = :attr:PassEnergy
293 wave NumSlices = :attr:NumSlices
295 shift_x =
slit_shift(x * 902 / NumSlices[0], PassEnergy[0])
297 variable ecenter = dimoffset(data, 0) + dimdelta(data, 0) * dimsize(data, 0) / 2