1 #pragma rtGlobals=3 // Use modern global access method and strict wave access. 2 #pragma IgorVersion = 6.1 3 #pragma ModuleName = PearlAreaProfiles 54 threadsafe
function /wave
ad_extract_rod(dataset, x1, x2, y1, y2, z1, z2, destname, [noavg, sdev, pscale])
56 variable x1, x2, y1, y2, z1, z2
62 if (wavedims(dataset) != 3)
65 if (ParamIsDefault(noavg))
68 if (ParamIsDefault(sdev))
71 if (ParamIsDefault(pscale))
75 variable p1, p2, q1, q2, r1, r2
84 p1 = round((x1 - DimOffset(dataset, 0)) / DimDelta(dataset, 0))
85 p2 = round((x2 - DimOffset(dataset, 0)) / DimDelta(dataset, 0))
86 q1 = round((y1 - DimOffset(dataset, 1)) / DimDelta(dataset, 1))
87 q2 = round((y2 - DimOffset(dataset, 1)) / DimDelta(dataset, 1))
88 r1 = round((z1 - DimOffset(dataset, 2)) / DimDelta(dataset, 2))
89 r2 = round((z2 - DimOffset(dataset, 2)) / DimDelta(dataset, 2))
92 if ((numtype(p1) == 2) || (numtype(p2) == 2))
93 return
ad_extract_rod_x(dataset, min(q1, q2), max(q1, q2), min(r1, r2), max(r1, r2), destname, noavg=noavg, sdev=sdev)
94 elseif ((numtype(q1) == 2) || (numtype(q2) == 2))
95 return
ad_extract_rod_y(dataset, min(p1, p2), max(p1, p2), min(r1, r2), max(r1, r2), destname, noavg=noavg, sdev=sdev)
96 elseif ((numtype(r1) == 2) || (numtype(r2) == 2))
97 return
ad_extract_rod_z(dataset, min(p1, p2), max(p1, p2), min(q1, q2), max(q1, q2), destname, noavg=noavg, sdev=sdev)
106 threadsafe function /wave
ad_extract_rod_x(dataset, q1, q2, r1, r2, destname, [noavg, sdev])
108 variable q1, q2, r1, r2
114 if (ParamIsDefault(noavg))
117 if (ParamIsDefault(sdev))
120 variable avg = !noavg && !sdev
123 q2 = min(q2, dimsize(dataset, 1) - 1)
125 r2 = min(r2, dimsize(dataset, 2) - 1)
127 if (strlen(destname) > 0)
128 duplicate /r=[][q1,q1][r1,r1]/o dataset, $destname
129 wave w_dest = $destname
131 duplicate /r=[][q1,q1][r1,r1] /free dataset, w_dest
133 redimension /n=(dimsize(w_dest, 0)) w_dest
134 setscale /p x dimoffset(dataset, 0), dimdelta(dataset, 0), waveunits(dataset, 0), w_dest
139 for (qq = q1; qq <= q2; qq += 1)
140 for (rr = r1; rr <= r2; rr += 1)
141 w_dest += dataset[p][qq][rr]
147 duplicate /free w_dest, w_squares
149 for (qq = q1; qq <= q2; qq += 1)
150 for (rr = r1; rr <= r2; rr += 1)
151 w_squares += dataset[p][qq][rr]^2
159 w_dest = sqrt( (w_squares - w_dest^2 / nn) / (nn - 1) )
168 threadsafe function /wave
ad_extract_rod_y(dataset, p1, p2, r1, r2, destname, [noavg, sdev])
170 variable p1, p2, r1, r2
176 if (ParamIsDefault(noavg))
179 if (ParamIsDefault(sdev))
182 variable avg = !noavg && !sdev
185 p2 = min(p2, dimsize(dataset, 0) - 1)
187 r2 = min(r2, dimsize(dataset, 2) - 1)
189 if (strlen(destname) > 0)
190 duplicate /r=[p1,p1][][r1,r1]/o dataset, $destname
191 wave w_dest = $destname
193 duplicate /r=[p1,p1][][r1,r1] /free dataset, w_dest
195 redimension /n=(dimsize(w_dest, 1)) w_dest
196 setscale /p x dimoffset(dataset, 1), dimdelta(dataset, 1), waveunits(dataset, 1), w_dest
201 for (pp = p1; pp <= p2; pp += 1)
202 for (rr = r1; rr <= r2; rr += 1)
203 w_dest += dataset[pp][p][rr]
209 duplicate /free w_dest, w_squares
211 for (pp = p1; pp <= p2; pp += 1)
212 for (rr = r1; rr <= r2; rr += 1)
213 w_squares += dataset[pp][p][rr]^2
222 w_dest = sqrt( (w_squares - w_dest^2 / nn) / (nn - 1) )
231 threadsafe function /wave
ad_extract_rod_z(dataset, p1, p2, q1, q2, destname, [noavg, sdev])
233 variable p1, p2, q1, q2
239 if (ParamIsDefault(noavg))
242 if (ParamIsDefault(sdev))
245 variable avg = !noavg && !sdev
248 p2 = min(p2, dimsize(dataset, 0) - 1)
250 q2 = min(q2, dimsize(dataset, 1) - 1)
252 if (strlen(destname) > 0)
253 duplicate /r=[p1,p1][q1,q1][]/o dataset, $destname
254 wave w_dest = $destname
256 duplicate /r=[p1,p1][q1,q1][] /free dataset, w_dest
258 redimension /n=(dimsize(w_dest, 2)) w_dest
259 setscale /p x dimoffset(dataset, 2), dimdelta(dataset, 2), waveunits(dataset, 2), w_dest
264 for (pp = p1; pp <= p2; pp += 1)
265 for (qq = q1; qq <= q2; qq += 1)
266 w_dest += dataset[pp][qq][p]
272 duplicate /free w_dest, w_squares
274 for (pp = p1; pp <= p2; pp += 1)
275 for (qq = q1; qq <= q2; qq += 1)
276 w_squares += dataset[pp][qq][p]^2
285 w_dest = sqrt( (w_squares - w_dest^2 / nn) / (nn - 1) )
313 threadsafe function /wave
ad_extract_slab(dataset, x1, x2, y1, y2, z1, z2, destname, [noavg, pscale])
315 variable x1, x2, y1, y2, z1, z2
320 if (wavedims(dataset) != 3)
323 if (ParamIsDefault(noavg))
326 if (ParamIsDefault(pscale))
330 variable p1, p2, q1, q2, r1, r2
339 p1 = round((x1 - DimOffset(dataset, 0)) / DimDelta(dataset, 0))
340 p2 = round((x2 - DimOffset(dataset, 0)) / DimDelta(dataset, 0))
341 q1 = round((y1 - DimOffset(dataset, 1)) / DimDelta(dataset, 1))
342 q2 = round((y2 - DimOffset(dataset, 1)) / DimDelta(dataset, 1))
343 r1 = round((z1 - DimOffset(dataset, 2)) / DimDelta(dataset, 2))
344 r2 = round((z2 - DimOffset(dataset, 2)) / DimDelta(dataset, 2))
347 if ((numtype(p1) < 2) && (numtype(p2) < 2))
348 return
ad_extract_slab_x(dataset, min(p1, p2), max(p1, p2), destname, noavg=noavg)
349 elseif ((numtype(q1) < 2) && (numtype(q2) < 2))
350 return
ad_extract_slab_y(dataset, min(q1, q2), max(q1, q2), destname, noavg=noavg)
351 elseif ((numtype(r1) < 2) && (numtype(r2) < 2))
352 return
ad_extract_slab_z(dataset, min(r1, r2), max(r1, r2), destname, noavg=noavg)
367 if (ParamIsDefault(noavg))
371 p2 = min(p2, dimsize(dataset, 0) - 1)
373 if (strlen(destname) > 0)
374 duplicate /r=[p1,p1][][]/o dataset, $destname
375 wave w_dest = $destname
377 duplicate /r=[p1,p1][][] /free dataset, w_dest
379 redimension /n=(dimsize(w_dest, 1), dimsize(w_dest, 2)) w_dest
380 setscale /p x dimoffset(dataset, 1), dimdelta(dataset, 1), waveunits(dataset, 1), w_dest
381 setscale /p y dimoffset(dataset, 2), dimdelta(dataset, 2), waveunits(dataset, 2), w_dest
386 for (pp = p1; pp <= p2; pp += 1)
387 w_dest += dataset[pp][p][q]
407 if (ParamIsDefault(noavg))
411 q2 = min(q2, dimsize(dataset, 1) - 1)
413 if (strlen(destname) > 0)
414 duplicate /r=[][q1,q1][]/o dataset, $destname
415 wave w_dest = $destname
417 duplicate /r=[][q1,q1][] /free dataset, w_dest
419 redimension /n=(dimsize(w_dest, 0), dimsize(w_dest, 2)) w_dest
420 setscale /p x dimoffset(dataset, 0), dimdelta(dataset, 0), waveunits(dataset, 0), w_dest
421 setscale /p y dimoffset(dataset, 2), dimdelta(dataset, 2), waveunits(dataset, 2), w_dest
426 for (qq = q1; qq <= q2; qq += 1)
427 w_dest += dataset[p][qq][q]
447 if (ParamIsDefault(noavg))
451 r2 = min(r2, dimsize(dataset, 2) - 1)
453 if (strlen(destname) > 0)
454 duplicate /r=[][][r1,r1]/o dataset, $destname
455 wave w_dest = $destname
457 duplicate /r=[][][r1,r1] /free dataset, w_dest
459 redimension /n=(dimsize(w_dest, 0), dimsize(w_dest, 1)) w_dest
460 setscale /p x dimoffset(dataset, 0), dimdelta(dataset, 0), waveunits(dataset, 0), w_dest
461 setscale /p y dimoffset(dataset, 1), dimdelta(dataset, 1), waveunits(dataset, 1), w_dest
466 for (rr = r1; rr <= r2; rr += 1)
467 w_dest += dataset[p][q][rr]
480 threadsafe function /wave
ad_profile_x(dataset, q1, q2, destname, [noavg])
488 if (ParamIsDefault(noavg))
492 if (strlen(destname) > 0)
493 duplicate /r=[0,0][] /o dataset, $destname
494 wave w_dest = $destname
496 duplicate /r=[0,0][] /free dataset, w_dest
511 if (ParamIsDefault(noavg))
515 redimension /n=(dimsize(dataset, 0)) destwave
516 setscale /p x dimoffset(dataset, 0), dimdelta(dataset, 0), waveunits(dataset, 0), destwave
517 setscale d 0, 0, waveunits(dataset, -1), destwave
523 q2 = min(q2, dimsize(dataset, 1) - 1)
528 for (qq = q1; qq <= q2; qq += 1)
529 destwave += dataset[p][qq]
542 threadsafe function /wave
ad_profile_y(dataset, p1, p2, destname, [noavg])
550 if (ParamIsDefault(noavg))
554 if (strlen(destname) > 0)
555 duplicate /r=[][0,0] /o dataset, $destname
556 wave w_dest = $destname
558 duplicate /r=[][0,0] /free dataset, w_dest
560 MatrixTranspose w_dest
574 if (ParamIsDefault(noavg))
578 redimension /n=(dimsize(dataset, 1)) destwave
579 setscale /p x dimoffset(dataset, 1), dimdelta(dataset, 1), waveunits(dataset, 1), destwave
580 setscale d 0, 0, waveunits(dataset, -1), destwave
586 p2 = min(p2, dimsize(dataset, 0) - 1)
591 for (pp = p1; pp <= p2; pp += 1)
592 destwave += dataset[pp][p]
607 wave yminlocs =
ad_profile_x(image, 0, 0, "ymins", noavg=1)
608 variable nx = dimsize(image, 0)
610 for (ix = 0; ix < nx; ix += 1)
612 wavestats /q/m=1 profile
613 yminlocs[ix] = v_minloc
627 variable tol = (wavemax(positions) - wavemin(positions)) / numpnts(positions) / 100
629 duplicate /free positions, positions_sorted
630 sort positions_sorted, positions_sorted
631 duplicate /free positions_sorted, positions_diff
632 differentiate /p /meth=2 positions_sorted /d=positions_diff
633 positions_diff[0] = 1
634 extract /free positions_sorted, positions_unique, positions_diff > tol
635 variable n_unique = numpnts(positions_unique)
636 redimension /n=(dimsize(dataset, 0), n_unique) destwave
640 for (i = 0; i < n_unique; i += 1)
641 extract /free dataset, data_extract, abs(positions[q] - positions_unique[i]) < tol
642 nx = dimsize(dataset, 0)
643 ny = dimsize(data_extract, 0) / nx
644 redimension /n=(nx, ny) data_extract
645 wave profile =
ad_profile_x(data_extract, -inf, inf, "", noavg=noavg)
646 destwave[][i] = profile[p]
threadsafe wave ad_extract_slab_x(wave dataset, variable p1, variable p2, string destname, variable noavg=defaultValue)
threadsafe wave ad_extract_rod_x(wave dataset, variable q1, variable q2, variable r1, variable r2, string destname, variable noavg=defaultValue, variable sdev=defaultValue)
1D cut through 3D dataset along X dimension.
threadsafe wave ad_profile_y(wave dataset, variable p1, variable p2, string destname, variable noavg=defaultValue)
1D cut through 2D dataset along Y dimension, new destination wave.
threadsafe wave ad_profile_x_w(wave dataset, variable q1, variable q2, wave destwave, variable noavg=defaultValue)
1D cut through 2D dataset along X dimension, existing destination wave.
threadsafe wave ad_extract_slab_z(wave dataset, variable r1, variable r2, string destname, variable noavg=defaultValue)
variable ad_collect_multiscan_y(wave dataset, wave positions, wave destwave, variable noavg=defaultValue)
collect profiles from a multi-scan.
threadsafe wave ad_extract_slab_y(wave dataset, variable q1, variable q2, string destname, variable noavg=defaultValue)
threadsafe wave ad_extract_rod_z(wave dataset, variable p1, variable p2, variable q1, variable q2, string destname, variable noavg=defaultValue, variable sdev=defaultValue)
1D cut through 3D dataset along Z dimension.
threadsafe wave ad_profile_y_w(wave dataset, variable p1, variable p2, wave destwave, variable noavg=defaultValue)
1D cut through 2D dataset along X dimension, existing destination wave.
threadsafe wave ad_extract_rod_y(wave dataset, variable p1, variable p2, variable r1, variable r2, string destname, variable noavg=defaultValue, variable sdev=defaultValue)
1D cut through 3D dataset along Y dimension.
threadsafe variable calc_y_profile_mins(wave image)
threadsafe wave ad_profile_x(wave dataset, variable q1, variable q2, string destname, variable noavg=defaultValue)
1D cut through 2D dataset along X dimension, new destination wave.
threadsafe wave ad_extract_rod(wave dataset, variable x1, variable x2, variable y1, variable y2, variable z1, variable z2, string destname, variable noavg=defaultValue, variable sdev=defaultValue, variable pscale=defaultValue)
1D cut through 3D dataset, integrate in normal dimensions
threadsafe wave ad_extract_slab(wave dataset, variable x1, variable x2, variable y1, variable y2, variable z1, variable z2, string destname, variable noavg=defaultValue, variable pscale=defaultValue)
2D cut through 3D dataset, integrate in normal dimension