ScanData

The AFM Software Suite stores data from a scan, including all relevant metadata, in one compact file with the file extension .imp (e.g. scan01234.imp). The ScanData class manages the storage and retrival of the data. If you want to write your own Python scripts to analyze multifrequency data taken with the IMP Software Suite, you will need to use the ScanData class. Either copy the file from the IMP Software Suite (default path C:\Program Files\IMP Software Suite\Scanner\ScanData.py) and place in the directory of your own script, or import it using the code below.

>>> import sys
>>> suite_path = r'C:\Program Files\IMP Software Suite'
>>> sys.path.append(suite_path)
>>> from Scanner import ScanData

The documentation below was auto generated from the doc strings in Python code at the time this manual was compiled. You can always see the documentation of the actual class version that you are using in the Python code itself, using auto-complete with any good Python IDE.

ScanData Class

class Scanner.ScanData.ScanData(filename=None)

This class handles the storage and retreval of data to and from a scan file (e.g. scan01234.imp). The class is designed to be easily extendable and new functions will be added as the IMP Suite grows. Most functions set data in, or get data from the containers provided in the class.

Units are specified in square brackets in the doc strings. In additon to SI units (e.g. [Hz], [sec], [Volts], …) some functions use the following native lockin, or digital units:

  • PCU - phase counter units, an integer number between 0 and 2**42.
  • ADU - analog to digital units, integer steps of an AD converter.
  • DAU - digital to analog units, integer steps of a DA converter

Examples

>>> # instanciate class and load data from file
>>> sd = ScanData.ScanData('scan01612.imp')
>>> # get the frequency array, units Hz
>>> freqs = sd.get_karray()*sd.get_df()
>>> # load all image data in to a large array, complex format, untis [ADU]
>>> image_data = sd.get_data()
>>> # pick out the spectrm at one pixel x=100, y=99, and convert to units [nm]
>>> pixel = image_data[:, 99, 100]*sd.get_invOLR()
>>> # convert from complex format to amplitude and phase
>>> amps = np.abs(pixel)
>>> phases = np.arctan2( np.imag(pixel), np.real(pixel) )

Note

Functions in this class do not set or get the actual measurement conditions of the multi-frequency lockin. Setting data read from a file does not change the file on disk, unless the data is written again with ScanData.ScanData.save_to_file()

get_Q(mode_type='flexural', mode_nr=1)

Get the cantilever quality factor.

Parameters:
  • mode_type (str, optional) – Name of mode, i.e. ‘flexural’ or ‘torsional’
  • mode_nr (int, optional) – Mode number, i.e. 1, 2, 3, …
Returns:

mode quality factor

Return type:

float

Raises:

CalibrationError – if the mode was not calibrated

get_amplitudes(unit='digital')

Drive amplitudes for every tone. Undriven tones have zero amplitude.

Parameters:

unit (str, optional) – {‘digital’, ‘ADU’, ‘calibrated’, ‘V’, ‘percent’, ‘%’}

Raises:
  • CalibrationError – if the specified units require conversion, but no MLA calibration was set
  • ValueError – if unknown unit is specified
get_calib_mode_index(mode_type=None, mode_nr=1)

Find the index of calibration (if exist) in self.calib_list. Else return False and index=None.

Parameters:
  • mode_type (str, optional) – type of cantilever mode, flexural or torsional
  • mode_nr (int, optional) – mode number
Returns:

cal_exists, mode_index

bool: True if the calibration was found, False otherwise int: the index of the required calibration. None if not found.

Return type:

tuple

get_cantilever_noise(mode_type='flexural', mode_nr=1)

Get the thermal noise force.

Parameters:
  • mode_type (str, optional) – Name of mode, i.e. ‘flexural’ or ‘torsional’
  • mode_nr (int, optional) – Mode number, i.e. 1, 2, 3, …
Returns:

cantilever thermal noise force in ADU**2 / Hz

Return type:

float

Raises:

CalibrationError – if the mode was not calibrated

Examples

>>> sd = ScanData.ScanData('scan01612.imp')
>>> psd = np.sqrt(sd.get_cantilever_noise()) * sd.get_k() * sd.get_invOLR() * 1e15
>>> print "Cantilever thermal noise force is {:.2f} fN/sqrt(Hz)".format(psd)
Cantilever thermal noise force is 21.90 fN/sqrt(Hz)
get_data(data_slice=(slice(None, None, None), slice(None, None, None), slice(None, None, None)), scan_pass='trace', data_format='complex', unit='ADU')

The data measured during the scan.

Parameters:
  • data_slice (tuple, optional) – tuple of Python slice objects (tone_slice, y_slice, x_slice).
  • scan_pass (str or int, optional) – {‘trace’, ‘retrace’, ‘interleave trace’, ‘interleave retrace’} specifies scan pass.
  • data_format (str, optional) – {‘IQreal’, ‘complex’, ‘amp’, ‘phase’} specifies data type.
  • unit (str, optional) – {‘ADU’, ‘V’, ‘m’, ‘nm’, ‘rad’, ‘deg’} specifies units. ‘rad’ and ‘deg’ only for phase.
Returns:

slice of the 3D data set. The data set has shape [index of tone, pixel y coord , pixel x coord]

Return type:

np.ndarray

Examples

>>> sd = ScanData.ScanData('scan01612.imp')
>>> # get engaged response at pixel x=99 y=88, trace, complex values, in nm.
>>> data = sd.get_data(unit='nm')
>>> pixel = data[ : , 88 , 99 ]
>>> # alternative way, which avoids large object 'data'
>>> data_slice = np.s_[ : , 88 , 99 ]
>>> pixel = sd.get_data( data_slice, unit='nm')
>>> # get phase image at tone number 15, retrace, in degrees.
>>> data_slice = np.s_[ 15 , : , : ]
>>> phase_image = sd.get_data( data_slice, scan_pass='retrace', data_format='phase', unit='deg')
Raises:
  • CalibrationError – if the specified units require conversion, but no MLA calibration was set
  • ValueError – if the specified format and units are incompatible, or the scan pass, format or units are unknown
get_detector_noise(mode_type='flexural', mode_nr=1)

Get the detector noise floor.

Parameters:
  • mode_type (str, optional) – Name of mode, i.e. ‘flexural’ or ‘torsional’
  • mode_nr (int, optional) – Mode number, i.e. 1, 2, 3, …
Returns:

detector noise floor in ADU**2 / Hz

Return type:

float

Raises:

CalibrationError – if the mode was not calibrated

Examples

>>> sd = ScanData.ScanData('scan01612.imp')
>>> psd = np.sqrt(sd.get_detector_noise()) * sd.get_invOLR() * 1e15
>>> print "The detector noise floor is {:.2f} fm/sqrt(Hz)".format(psd)
The detector noise floor is 138.13 fm/sqrt(Hz)
>>> psd = np.sqrt(sd.get_detector_noise()) * sd.get_invOLR() * sd.get_k() * 1e15
>>> print "The equivalent noise force is {:.0f} fN/sqrt(Hz)".format(psd)
The equivalent noise force is 5013 fN/sqrt(Hz)
get_df()

Measurement bandwidth.

Returns:Hertz, Hz
Return type:float

Examples

>>> sd = ScanData.ScanData('scan01612.imp')
>>> df = sd.get_df()
get_drive_amplitudes()

Amplitudes of driven tones.

Returns:lockin output amplitude digital units (LOA)
Return type:np.ndarray(np.int64)

See also

get_drive_karray get_drive_phases

get_drive_karray()

Frequencies of driven tones, as multiples of measurement bandwidth (df).

Returns:frequencies where drive amplitudes are non-zero
Return type:np.ndarray(dtype=np.int64)

Examples

>>> sd = ScanData.ScanData('scan01612.imp')
>>> # create frequency array for drive frequencies, in Hz
>>> freqs = sd.get_drive_karray() * sd.get_df()

See also

get_drive_amplitudes get_drive_phases

get_drive_phases()

Phases of driven tones.

Returns:radians
Return type:np.ndarray(dtype=np.float64)

See also

get_drive_karray get_drive_amplitudes

get_endtime()

Time at end of scan, in seconds since the epoch.

Returns:seconds
Return type:float
get_external_filename()

The filename of an external file associated with this scan.

Returns:filename
Return type:str

Note

Currently not implimented.

get_f0(mode_type='flexural', mode_nr=1)

Get the cantilever resonance frequency.

Parameters:
  • mode_type (str, optional) – Name of mode, i.e. ‘flexural’ or ‘torsional’
  • mode_nr (int, optional) – Mode number, i.e. 1, 2, 3, …
Returns:

mode resonance frequency in Hz

Return type:

float

Raises:

CalibrationError – if the mode was not calibrated

get_feedback()

Feedback gains of the host AFM.

Returns:[i_gain, p_gain] of host AFM. Will return zero if not implimented on host AFM.
Return type:np.ndarray(dtype=float64)
get_free(data_format='complex', unit='ADU')

Spectrum of free cantilever oscillation.

Parameters:
  • data_format (str, optional) – {‘IQreal’, ‘complex’, ‘amp’, ‘phase’} specifies data type.
  • unit (str, optional) – {‘ADU’, ‘V’, ‘m’, ‘nm’, ‘rad’, ‘deg’} specifies units. ‘rad’ and ‘deg’ only for phase.
Returns:

spectrum of free cantilever oscillation, with required data format and units

Return type:

np.ndarray

Raises:
  • CalibrationError – if the specified units require conversion, but no MLA calibration was set
  • ValueError – if the specified format and units are incompatible, or the scan pass, format or units are unknown

See also

get_lift

Examples

>>> sd = ScanData.ScanData('scan01612.imp')
>>> # get free response in nm.
>>> data = sd.get_free(unit='nm')
>>> freqs = sd.get_karray()*sd.get_df()
>>> #plot amplitude vs. frequency
>>> l, = plot(freqs, np.abs(data))
get_frequencies()

Frequencies of the measured tones.

Returns:Hertz, Hz
Return type:np.ndarray(dtype=np.float64
get_fs()

Lockin sampling frequency.

Returns:samples/second, Hz
Return type:float
get_imp_str_list(mode=-1)

Function to create a string list to lable the tones

Parameters:mode (int, optional) – {-1,0,1,2,3}
Returns:strings with names of imp’s, e.g. ‘Drive1’, ‘Drive2’, ‘IMP3L’, etc.
Return type:list
mode Returns
-1 strings as saved in ImageData
0 as mode=-1, but empty strings, automatic mode==2
1 as mode=-1, but empty strings, automatic mode==3
2 strings of karray_imp integers e.g ‘k = 345’
3 strings as defined in ScannerPannel e.g.
To Do:
depreciate this function and have imp_str_list set by user in drive constructor or set to default value in auto setup.
get_input_ports()

Input port for each of the measured tones.

Returns:array of port numbers [1-4] where tones are measured
Return type:np.ndarray(dtype=np.int64)

See also

Zynq.lockin.Lockin.get_port Zynq.lockin.Lockin.set_input_multiplexer

get_invOLR(mode_type='flexural', mode_nr=1)

Get the inverse optical lever responsivity.

Parameters:
  • mode_type (str, optional) – Name of mode, i.e. ‘flexural’ or ‘torsional’
  • mode_nr (int, optional) – Mode number, i.e. 1, 2, 3, …
Returns:

mode invOLR in m/ADU

Return type:

float

Raises:

CalibrationError – if the mode was not calibrated

get_k(mode_type='flexural', mode_nr=1)

Get the cantilever stiffness.

Parameters:
  • mode_type (str, optional) – Name of mode, i.e. ‘flexural’ or ‘torsional’
  • mode_nr (int, optional) – Mode number, i.e. 1, 2, 3, …
Returns:

mode stiffness in N/m

Return type:

float

Raises:

CalibrationError – if the mode was not calibrated

get_karray()

Frequencies of measured tones, as multiples of measurement bandwidth (df).

Returns:
Return type:np.ndarray(dtype=np.int64)

Examples

>>> sd = ScanData.ScanData('scan01612.imp')
>>> # create array of frequencies in [Hz] where response was measured
>>> freqs = sd.get_karray() * sd.get_df()
get_lift(data_format='complex', unit='ADU')

Spectrum of cantilever oscillation at the lifted scanner position.

Parameters:
  • data_format (str, optional) – {‘IQreal’, ‘complex’, ‘amp’, ‘phase’} specifies data type.
  • unit (str, optional) – {‘ADU’, ‘V’, ‘m’, ‘nm’, ‘rad’, ‘deg’} specifies units. ‘rad’ and ‘deg’ only for phase.
Returns:

spectrum of lifted cantilever oscillation, with required data format and units

Return type:

np.ndarray

Raises:
  • CalibrationError – if the specified units require conversion, but no MLA calibration was set
  • ValueError – if the specified format and units are incompatible, or the scan pass, format or units are unknown

Note

Used for separating background forces from nonlinear forces

See also

get_free

get_loaded_filename()

The filename used when loading ScanData from disk.

Returns:filename
Return type:str
get_metadata_ascii()

Return all metadata as a string new-line separated string

Returns:str
Strategy for all following data entries:
IDENTIFIER[UNIT]: DATA
get_mla_calibration()

The hardware calibration of the MLA.

Returns:dict
get_mla_firmware_version()

Version of the firmware loaded into the MLA.

Returns:version number
Return type:int

See also

Zynq.hardware.Hardware.get_firmware_version

get_original_filename()

The file name when the data was first stored.

Returns:filename
Return type:str
get_output_mask()

Each bit in the mask determines weather the corresponing tone should be added to the output.

Returns:a list of int (or long) with the mask for each of the two output ports
Return type:list

See also

Zynq.lockin.Lockin.set_output_mask Zynq.utils.mask_to_int

get_phases(unit='rad')

Drive phases for every tone.

Parameters:unit (str, optional) – {‘rad’, ‘deg’}
Raises:ValueError – if unknown unit is specified
get_resolution()

Get the scan resolution.

Returns:
(nx, ny)
int: number of pixels in fast-scan direction. int: number of pixels in slow-scan direction.
Return type:tuple
get_samples_per_pixel()

Number of samples in time window corresponding to one image pixel, fs/df.

Returns:samples per pixel
Return type:float
get_scan_rate()

Number of scan lines per second (trace + retrace).

Returns:Hertz, Hz
Return type:float
get_scan_size_x()
Returns:scan size in the fast-scan direction x in meters
Return type:float

Note

Scan size is determined by the host AFM. It is either entered manually in the GUI, or automaically when reading in height data. Automatic over-writes manual.

get_scan_size_y()
Returns:scan size in the slow-scan direction y in meters
Return type:float

Note

Scan size is determined by the host AFM. It is either entered manually in the GUI, or automaically when reading in height data. Automatic over-writes manual.

get_scan_subtype()

Additional scan sub-type identifier.

Returns:str
get_scan_type()

Scan type identifier (e.g. ImAFM, ImEFM, ImFFM, …).

Returns:str
get_setpoint()

Amplitude setpoint.

Returns:
value of setpoint (at end of scan). Value between 0 and 1 is
the fraction of free oscillation amplitude at the feedback tone with index 0n (i.e. first element of frequency array and response arrays)
Return type:float
get_starttime()

Time at start of scan, in seconds since the epoch.

Returns:seconds
Return type:float
get_tip_Vac()

AC voltage applied to the tip in ImEFM.

Returns:Volts, V
Return type:float
get_tip_Vdc()

DC voltage applied to the tip in ImEFM.

Returns:Volts, V
Return type:float
given_list_is_empty(lst)
Returns:True if list is [] or only has elements of type ‘’, otherwise False.
Return type:bool
has_calibration(mode_type='flexural', mode_nr=1)

Check if a valid calibration is stored.

Parameters:
  • mode_type (str, optional) – type of cantilever mode, flexural or torsional
  • mode_nr (int, optional) – mode number
Returns:

True for a valid calibration

Return type:

bool

load_from_file(filename, minimal=False)

Summary

Parameters:
  • filename (str) – filename to be opened
  • minimal (bool, optional) – if True, only load parameters
Raises:

FileVersionError – if file version not supported

reset_lift()

Empty previously stored lift data.

save_to_ascii(dirname=None)

Export to a collection of generically named ascii-files in the directory ‘dirname’.

Creates a separate subdirectory for the scan and separate files for each amplitude and phase image for easy import into Matlab or similar.

Parameters:dirname (str, optional) – if None, the directory is automatically named after the ScanData file
save_to_file(filename)

Saves all data in the ScanData class to an hdf5 file.

Parameters:filename (str) – desired filename
set_Q(Q, mode_type='flexural', mode_nr=1, verbose=True)

Set the cantilever quality factor for an existing calibration.

Parameters:
  • Q (float) – quality factor
  • mode_type (str, optional) – Name of mode, i.e. ‘flexural’ or ‘torsional’
  • mode_nr (int, optional) – Mode number, i.e. 1, 2, 3, …
  • verbose (bool, optional) – If True, print a message to the console
Raises:

CalibrationError – if the mode was not calibrated

set_amplitudes(amps_digital)

Drive amplitudes for every tone. Undriven tones have zero amplitude.

Parameters:amps_digital (np.ndarray(dtype=np.int64)) – digital units, ADU
set_calibration(mode_type, mode_nr, file_name, f0, Q, k, invOLR, cantilever_noise, detector_noise)

Set calibration based on mode_type and mode_nr.

Parameters:
  • mode_type (str) – Name of mode, i.e. ‘flexural’ or ‘torsional’
  • mode_nr (int) – Mode number, i.e. 1, 2, 3, …
  • file_name (str) – Name of calibration file belonging to this calibration
  • f0 (float) – Mode resonance frequency in Hz
  • Q (float) – Mode quality factor
  • k (float) – Mode stiffness in N/m
  • invOLR (float) – Inverse optical lever responsitivy in m/ADU
  • cantilever_noise (float) – Cantilever noise in ADU**2/Hz
  • detector_noise (float) – Detector noise in ADU**2/Hz

Note

If mode is already calibrated, overwrite current calibration. If it doesn’t exist, add it to self.calib_list.

set_cantilever_noise(p_thermal, mode_type='flexural', mode_nr=1, verbose=True)

Set the thermal noise force for an existing calibration.

Parameters:
  • p_thermal (float) – thermal noise force in ADU**2 / Hz
  • mode_type (str, optional) – Name of mode, i.e. ‘flexural’ or ‘torsional’
  • mode_nr (int, optional) – Mode number, i.e. 1, 2, 3, …
  • verbose (bool, optional) – If True, print a message to the console
Raises:

CalibrationError – if the mode was not calibrated

set_detector_noise(p_detector_white, mode_type='flexural', mode_nr=1, verbose=True)

Set the detector noise floor for an existing calibration.

Parameters:
  • p_thermal (float) – thermal noise force in ADU**2 / Hz
  • mode_type (str, optional) – Name of mode, i.e. ‘flexural’ or ‘torsional’
  • mode_nr (int, optional) – Mode number, i.e. 1, 2, 3, …
  • verbose (bool, optional) – If True, print a message to the console
Raises:

CalibrationError – if the mode was not calibrated

set_df(df)

Measurement bandwidth.

Parameters:df (float) – Hertz, Hz

See also

set_samples_per_pixel

set_endtime(t0)

Time at end of scan, in seconds since the epoch.

Parameters:t0 (float) – seconds
set_external_filename(filename)

The filename of an external file associated with this scan.

Parameters:filename (str) – filename

Note

Currently not implimented.

set_f0(f0, mode_type='flexural', mode_nr=1, verbose=True)

Set the cantilever resonance frequency for an existing calibration.

Parameters:
  • f0 (float) – resonance frequency in Hz
  • mode_type (str, optional) – Name of mode, i.e. ‘flexural’ or ‘torsional’
  • mode_nr (int, optional) – Mode number, i.e. 1, 2, 3, …
  • verbose (bool, optional) – If True, print a message to the console
Raises:

CalibrationError – if the mode was not calibrated

set_feedback(array)

Feedback gains of the host AFM.

Parameters:np.ndarray (dtype=float64) – feedback parameters of host AFM [i_gain, p_gain]. Not implimented on all host AFMs.
set_free(free, data_format='complex', unit='ADU')

Spectrum of free cantilever oscillation.

Parameters:
  • free (np.ndarray) – spectrum of free cantilever oscillation with specified data format and units
  • data_format (str, optional) – {‘IQreal’, ‘complex’} specifies data type.
  • unit (str, optional) – {‘ADU’, ‘V’, ‘m’, ‘nm’, ‘rad’, ‘deg’} specifies units. ‘rad’ and ‘deg’ only for phase.
Raises:
  • CalibrationError – if the specified units require conversion, but no MLA calibration was set
  • ValueError – if the specified format and units are incompatible, or the scan pass, format or units are unknown

See also

set_lift

Examples

>>> sd = ScanData.ScanData('scan01612.imp')
>>> # get free response in nm.
>>> data = sd.get_free(unit='nm')
>>> freqs = sd.get_karray()*sd.get_df()
>>> #plot amplitude vs. frequency
>>> l, = plot(freqs, np.abs(data))
set_frequencies(freqs_Hz)

Frequencies of the measured tones.

Parameters:freqs_Hz (np.ndarray(dtype=np.float64)) – Hertz, Hz
set_fs(fs)

Lockin sampling frequency.

Parameters:fs (float) – samples/second, Hz
set_input_ports(ports)

Input port for each of the measured tones.

Parameters:np.ndarray (dtype=np.int64) – array of port numbers [1-4] where tones are measured

See also

Zynq.lockin.Lockin.get_port Zynq.lockin.Lockin.set_input_multiplexer

set_invOLR(invOLR, mode_type='flexural', mode_nr=1, verbose=True)

Set the inverse optical lever reposponsivity for an existing calibration.

Parameters:
  • invOLR (float) – inverse optical lever reposponsivity in m/ADU
  • mode_type (str, optional) – Name of mode, i.e. ‘flexural’ or ‘torsional’
  • mode_nr (int, optional) – Mode number, i.e. 1, 2, 3, …
  • verbose (bool, optional) – If True, print a message to the console
Raises:

CalibrationError – if the mode was not calibrated

set_k(k, mode_type='flexural', mode_nr=1, verbose=True)

Set the cantilever stiffness for an existing calibration.

Parameters:
  • k (float) – stiffness in N/m
  • mode_type (str, optional) – Name of mode, i.e. ‘flexural’ or ‘torsional’
  • mode_nr (int, optional) – Mode number, i.e. 1, 2, 3, …
  • verbose (bool, optional) – If True, print a message to the console
Raises:

CalibrationError – if the mode was not calibrated

set_lift(lift, data_format='complex', unit='ADU')

Spectrum of cantilever oscillation at the lifted scanner position.

Parameters:
  • lift (np.ndarray) – spectrum of lift cantilever oscillation with specified data format and units
  • data_format (str, optional) – {‘IQreal’, ‘complex’} specifies data type.
  • unit (str, optional) – {‘ADU’, ‘V’, ‘m’, ‘nm’} specifies units.
Raises:
  • CalibrationError – if the specified units require conversion, but no MLA calibration was set
  • ValueError – if the specified format and units are incompatible, or the scan pass, format or units are unknown

Note

Used for separating background forces from nonlinear forces

See also

set_free

set_mla_all_settings(mla)

Convenience function to set all MLA related settings from a mla instance.

Parameters:mla (Zynq.mla_suite.MLA) – object instance of MLA

Note

It will set
self.nr_input_freq self.nr_output_freq

and call the methods listed in “See also”

See also

set_fs set_mla_calibration set_mla_firmware_version set_samples_per_pixel set_output_mask set_input_ports set_amplitudes set_phases set_frequencies

set_mla_calibration(cal)

The hardware calibration of the MLA.

Parameters:cal (dict) –
set_mla_firmware_version(ver)

Version of the firmware loaded into the MLA.

Parameters:ver (int) – version number

See also

Zynq.hardware.Hardware.get_firmware_version

set_output_mask(mask)

Each bit in the mask determines weather the corresponing tone should be added to the output.

Parameters:mask (list) – a list of int (or long) with the mask for each of the two output ports

See also

Zynq.lockin.Lockin.set_output_mask Zynq.utils.mask_to_int

set_phases(phases_rad)

Drive phases for every tone.

Parameters:phases_rad (np.ndarray(dtype=np.float64)) – radians, rad
set_resolution(nx, ny)

Set the scan resolution.

Parameters:
  • nx (int) – number of pixels in fast-scan direction.
  • ny (int) – number of pixels in slow-scan direction.
set_samples_per_pixel(samples_per_pixel)

Number of samples in time window corresponding to one image pixel, fs/df.

Parameters:samples_per_pixel (float) – samples per pixel
set_scan_rate(scan_rate)

Number of scan lines per second (trace + retrace).

Parameters:scan_rate (float) – Hertz, Hz
set_scan_size_x(value)
Parameters:value (float) – scan size in the fast-scan direction x in meters
set_scan_size_y(value)
Parameters:value (float) – scan size in the slow-scan diretion y in meters
set_scan_subtype(scan_subtype)

Additional scan sub-type identifier.

Parameters:scan_subtype (str) –
set_scan_type(scan_type)

Scan type identifier (e.g. ImAFM, ImEFM, ImFFM, …).

Parameters:scan_type (str) –
set_setpoint(value)

Amplitude setpoint.

Parameters:value (float) – between 0 and 1 is the fraction of free oscillation amplitude at the feedback tone with index 0.
set_starttime(t0)

Time at start of scan, in seconds since the epoch.

Parameters:t0 (float) – seconds
set_tip_Vac(value)

AC voltage applied to the tip in ImEFM.

Parameters:value (float) – Volts, V
set_tip_Vdc(value)

DC voltage applied to the tip in ImEFM.

Parameters:value (float) – Volts, V