Forums
Bruker Media
Community Media
Bruker AFM Probes
SPM Digest
Application Notes
NanoTheater
Website
中文
Brochures & Datasheets
Publications
Probes Catalog
Events
Manuals & Documentation
Presentations
Guide to AFM Modes
News
Journal Club
Webinars & Video
Nanovations
Other
Normal 0 false false false EN-GB X-NONE X-NONE MicrosoftInternetExplorer4
Dear all, this is a bit of a follow up on a previous post [1].
Normal 0 false false false EN-GB X-NONE X-NONE
We need to know how to read the force curves in our own program.
Our program is cross-platform, it may be used on PowerPC Mac, ARM Linux, x86-64 FreeBSD, etc. We need to be able to compare data from different SPM machines with the same software. Also the software package can do different data sets of different SPM machines (not only Bruker).
Hence our program cannot utilise i386 Windows DLLs, Matlab, NanoscopeAnalysis or any such existing software, even if its license permitted it, because such software is not available for the target systems.
We must implement all reading of the force curves in our program.
Independently.
Of course, we can use the original instrument's software or NanoscopeAnalysis to verify that we read the data correctly.
We are not able to read the force curves (in our program) to match how the original software shows them.
We think we follow the file format documentation but, apparently, we do not follow it correctly.
So what we need is an explanation what we are doing wrong and why.
What we do not need is more opaque software that reads the data correctly. We cannot learn anything more from it since we aleady know we read the data incorrectly.
-----[ example ]---------------------------------------------------
Let's use 120808Bi2Te3.274 as an example. ([2] attached Link only valid for 2 months) How do we read it?
-----[ abscissa ]--------------------------------------------------
Look at the first channel, i.e. first ‘Ciao force image list’
section (with Data offset: 40960).
It says
X Data Type: Ramp
@4:Ramp channel: S [Zsweep] "Z"
so it is a something-Z spectrum.
What is the range of Z? We look at ‘@4:Ramp size’ in the same
section:
@4:Ramp size: V [Sens. Zsens] (0.005035400 V/LSB) 38.98636 V So the hard value is 38.98636 V.
To scale the Z range to physical units we look up ‘@Sens. Zsens’ in ‘Scanner list’, finding:
@Sens. Zsens: V 25.65000 nm/V
Hence the Z range is 25.65*38.98636 nm = 1 µm.
-----[ ordinate 1 ]--------------------------------------------------
Now, we have a something-Z spectrum and must find what is the ‘something’. We look at ‘@4:Image Data’:
@4:Image Data: S [] "Log(Resistance)"
Therefore, the ordinate is ‘Log(Resistance)’.
Indeed, there is a matching scale
@4:Z scale: V [Sens. Log(Resistance)] (0.0003750000 log(Ohm)/LSB) 24.57600 log(Ohm) in the same section.
To resolve the soft scale we look up the corresponding Sens field:
@Sens. Log(Resistance): V 1.000000
Multiplying it: 24.576*1.0 log(Ohm)/V*V = 24.576 log(Ohm).
The LSB terminology is confusing, but we know it means to divide the raw data with 2^{number-of-bits} = 65536.
So the conversion factor for raw data is 24.576/65536 log(Ohm).
-----[ ordinate 2 ]--------------------------------------------------
The next curve has the same abscissa, so the description will not be repeated here. Let's focus on the ordinate.
Again, we look at ‘@4:Image Data’:
@4:Image Data: S [DeflectionError] "Deflection Error"
Therefore, the ordinate is ‘Deflection Error’.
@4:Z scale: V [Sens. DeflSens] (0.0003750000 V/LSB) 2.500000 V in the same section.
@Sens. DeflSens: V 749.0624 nm/V
Multiplying it: 2.500000*749.0624 nm/V*V = 1.87266 µm
So the conversion factor for raw data is 1.87266/65536 µm.
-----[ ordinate 3 ]--------------------------------------------------
@4:Image Data: S [Lateral] "Friction"
Therefore, the ordinate is ‘Friction’.
@4:Z scale: V [Sens. Friction] (0.0003750000 V/LSB) 24.57600 V in the same section.
@Sens. Friction: V 1.000000
Multiplying it: 24.576*1.0 V = 24.576 V
So the conversion factor for raw data is 24.576/65536 V.
-----[ comparison ]--------------------------------------------------
We have read curves 1 and 3 correctly.
But we have read curve 2 completely wrong.
All other software says the ordinate of curve 2 is ‘Force’. Why?
The units of curve 2 are Newtons. Why?
The correct conversion factor for raw data is completely different.
Why?
[1] http://nanoscaleworld.bruker-axs.com/nanoscaleworld/forums/p/991/2538.aspx#2538
[2] http://filexch.npl.co.uk/cgi-bin/download.pl?id=kgimtjoixnvxvhqvcssq
Deflection Error can be multiplied by the cantilever spring constant to get the force acting on the cantilever.
This will give you a relative force value (offset by arbitratry value) because the deflection error is also just relative to some arbitrary baseline.
To get the absolute force, you need to set your baseline to 0. The baseline is the part where no force is acting on the tip (i.e. tip "far away" from surface, at the beginning of a force curve).
Search for the "Spring Constant:" entry in the header to get the spring constant (if you had it set during measurement).
Ok I understand. Maybe somebody else has a better answer, but for me the data type "Deflection Error" is equivalent to Force after a linear transformation.
Janne:data type "Deflection Error" is equivalent to Force after a linear transformation.
Oh, they may be equivalent but Bruker or Veeco software apparently knows there is a rule ‘if you see Deflection Error data perform this transform and show it as Force instead’. So they are equivalent mathematically but not equivalent from the ‘what the user expects to see’ point of view. This is a priori knowledge that does not seem to be derivable if I just get the file with no auxiliary information. So to read the curves as expected I need to know these rules: what transforms to perform on what data, when. Or, alternatively to know that I read the files wrong and how this can be done without a priori rules.
It is kind of funny that every time try to ask this question the answer is of the form ‘you can do ..., this can be converted ...’ while I desperately need an answer ‘you must do ..., you must convert ...’ (or at least should, if not must).
Hi Andres,
hope, you had a nice Christmas time.
You can do the conversion of the ordinates in the following way:
The conversion factors from LSB to volts are already given in the parenthesis of the "Z scale"-parameter line, e.g. of data set 2 ("deflection error") @4:Z scale: V [Sens. DeflSens] (0.0003750000 V/LSB) 2.500000 V. Here, the respective conversion factor is: 0.0003750 V/LSB. If you multiply your 2-byte integers from the raw data with this factor, you get deflection (or more exactly deflection error) in volts. If you want nm, you multiply further with Sens. DeflSens. If you use the 2.5V value to calculate a new hard scale (via 2.5V/2^16), you will obviously be wrong. For the other data sets it worked, because the voltages in the Z scale parameter are given as 24.57V (which is 0.000375*2^16 and therefore will lead to the same scaling factor of 0.000375V/LSB for conversion as is written in parenthesis).
The data can be represented in 3 ways ("plot units"): volt, metric, force. This is set during data acquisition and saved in the "ciao force list" under "unit display". In case, "force" is chosen, deflection data are converted to force data in Newtons via deflection sensitivity and spring constant.
I am curious: What do you mean with "all other software"? Besides Nanoscope Analysis and Gwyddion, did you compare as well with other analysis software?
Regards (and Happy New Year),
Hartmut.