Calculates histogram of facet slopes in atomic force microscopy (AFM) images. See Surface and Interface Analysis 25 (1997) 74.
clperkins
//Calculates a histogram of slopes of facets in AFM images. See Chatelier et al. in Surface and Interface Analysis 25 (1997) 741.
//Similar to the output of Gwyddion image analysis software after selecting Data Process-->Statistics -->Slope Distribution --> Inclination (theta)
//Assumes that the AFM image has been plane filtered, is loaded into a 2D wave, and has heights in nanometers
Function slope_freq(w1)
wave w1
variable X_index, Y_index, totalcycles=0, array_size, mini_wave_scaling=1
Prompt mini_wave_scaling, "Enter nm/point value: " // Set prompt for x-y scaling (example: this should be ~9.78 nm/point for a 512 x 512 pixel image that is 5 microns on a side)
DoPrompt "nm/point", mini_wave_scaling
if (V_Flag)
return -1 // User canceled
endif
RemoveFromTable slopes, mini_x, mini_y //probably could comment out all of the remove/kill statements, but they can be useful. They will cause errors the first time the function is used.
Killwaves slopes, mini_x, mini_y
make/N=3 mini_x
make/N=3 mini_y
SetScale/P x 0,(mini_wave_scaling),"", mini_x
SetScale/P x 0,(mini_wave_scaling),"", mini_y
wavestats/Q w1
array_size=V_npnts
make/N=((array_size^0.5-2)^2) slopes
for (X_index=1; X_index<(array_size^0.5-1); X_index+=1)
for (Y_index=1; Y_index<(array_size^0.5-1); Y_index+=1)
mini_x=w1[Y_index][(p+X_index-1)]
curvefit/Q line mini_x
variable dzdx=k1
mini_y=w1[(p+Y_index-1)][X_index]
curvefit/Q line mini_y
variable dzdy=k1
slopes[totalcycles]=(atan((dzdx^2+dzdy^2)^0.5)/(2*pi))*360 //slopes in degrees are between the normal of the facet and the nominal sample normal
totalcycles+=1
endfor
endfor
AppendToTable slopes
Histogram/B={0,0.1,900} slopes,slopes_Hist //Bin slopes of 0-90 degrees into histogram. Typically need to duplicate slopes and slopes_Hist waves into other wavenames to save results
End
//Similar to the output of Gwyddion image analysis software after selecting Data Process-->Statistics -->Slope Distribution --> Inclination (theta)
//Assumes that the AFM image has been plane filtered, is loaded into a 2D wave, and has heights in nanometers
Function slope_freq(w1)
wave w1
variable X_index, Y_index, totalcycles=0, array_size, mini_wave_scaling=1
Prompt mini_wave_scaling, "Enter nm/point value: " // Set prompt for x-y scaling (example: this should be ~9.78 nm/point for a 512 x 512 pixel image that is 5 microns on a side)
DoPrompt "nm/point", mini_wave_scaling
if (V_Flag)
return -1 // User canceled
endif
RemoveFromTable slopes, mini_x, mini_y //probably could comment out all of the remove/kill statements, but they can be useful. They will cause errors the first time the function is used.
Killwaves slopes, mini_x, mini_y
make/N=3 mini_x
make/N=3 mini_y
SetScale/P x 0,(mini_wave_scaling),"", mini_x
SetScale/P x 0,(mini_wave_scaling),"", mini_y
wavestats/Q w1
array_size=V_npnts
make/N=((array_size^0.5-2)^2) slopes
for (X_index=1; X_index<(array_size^0.5-1); X_index+=1)
for (Y_index=1; Y_index<(array_size^0.5-1); Y_index+=1)
mini_x=w1[Y_index][(p+X_index-1)]
curvefit/Q line mini_x
variable dzdx=k1
mini_y=w1[(p+Y_index-1)][X_index]
curvefit/Q line mini_y
variable dzdy=k1
slopes[totalcycles]=(atan((dzdx^2+dzdy^2)^0.5)/(2*pi))*360 //slopes in degrees are between the normal of the facet and the nominal sample normal
totalcycles+=1
endfor
endfor
AppendToTable slopes
Histogram/B={0,0.1,900} slopes,slopes_Hist //Bin slopes of 0-90 degrees into histogram. Typically need to duplicate slopes and slopes_Hist waves into other wavenames to save results
End
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More