Scanning Probe Microscopy (SPM)¶
Scanning Probe Microscopy (SPM) is a high resolution imaging technique used to study material surface at nano scale. The technique can take on a wide range form of experiments categorized by operating environment (e.g., ambient, vacuum) and setup, type of interaction between prob and specimen, number of probe and actuation modes, etc. Therefore, there are many sub-techniques, like STM (Scanning Tunneling Microscopy), AFM (Atomic Force Microscopy), STS (Scanning Probe Spectroscopy). These complex experiments require complex setup of instruments provided by different technology companies which turns out diverse data model (mostly unstructured) and data format. How can we compare the diverged data model and data format? Can we interpret the data in a common data model and format accessible to all SPM community? Does the proposed data model follow FAIR data principle?
We have developed community driven standard application definition, using NeXus data format, for SPM subdomains e.g., STM, STS, AFM and a few base classes to describe instrument components (e.g. Lock-in, Cantilever). Based on our data model, we build the data workflow that connects the data from experiment generated raw files to the standard application definition inscribed in a HDF5 file (as we are using NeXus data format in HDF5 file, later on we also call it NeXus file with '.nxs' extension).
Note
One can use the supper application definition NXspm for any sub technique, but do not warranty the validation of the NeXus data file.
SPM Readers¶
The SPM reader is plugin of material science reader framework pynxtools and anchors a bundle of readers from STM, STS and AFM. The readers follow a common structure that shall allow to extend the reader orchestra by including new readers for different SPM sub-techniques such as spin-polarized STM. For each type of techniques (e.g., STM, STS, and AFM), there might be multiple instruments providers (e.g., Nanonis, Omicron, Bruker) and each vendor favors different data format and data model. Therefore, each reader is designed to be modular and configurable to work with different data formats and data models.
The prime purpose of the readers is to transform data from measurement files into NeXus file according to the SPM community supported schema (NeXus applications and base classes) which allows experimentalists to store, organize, search, analyze, and share experimental data in NOMAD (if plugin pynxtools-spm is integrated with NOMAD) research data management (RDM) platform.
To understand the reader structure, one might start understanding the design pattern of the application definitions NXspm, NXstm, NXsts, and NXafm on the FAIRmat NeXus Proposal page or in the GitHub repository.
Members of pynxtools-spm Reader Orchestra¶
pynxtools-spm includes three readers:
- STS reader
- STM reader
- AFM reader
STS reader¶
The STS reader builds on the NXsts application definition and needs an experimental file, a config file and a ELN (ELN stands for Electronic Lab Notebook) file to transform the experiment generated data (from raw files) and user provided data (from ELN) into NeXus file according to the NXsts application concepts.
STM Reader¶
The STM reader is a part of pynxtools-spm package and builds on the NXstm application definition and needs an experimental file, a config file and a ELN (ELN stands for Electronic Lab Notebook) file to transform the experiment generated data (from raw files) and user provided data (from ELN) into NeXus file according to the NXstm application concepts.
AFM Reader¶
The AFM reader is also part of pynxtools-spm package and builds on the NXafm application definition and needs an experimental file, a config file and a ELN (ELN stands for Electronic Lab Notebook) file to transform the experiment generated data (from raw files) and user provided data (from ELN) into NeXus file according to the NXafm application concepts.
Warning
The configuration file maps the NeXus data model corresponding application definition to the data model from raw file. This implies that raw files from different software versions or vendors require different configuration files. It is most likely that the path referring to the raw data in a input file needs to be updated in the configuration file for different type of instruments.
Supported Vendor Files and Formats¶
Readers support the following vendor files and formats. The version column refers to the version of the instrument software (or of the file format written by it) that the readers have been tested with; files written by neighboring versions usually work as well, but may need an adapted config file (see the warning above).
| Technique | Vendor | Instrument software (flavor) | Tested version | Extension |
|---|---|---|---|---|
STS |
Nanonis | Nanonis SPM control software | Generic 5, Generic 5e | .dat |
STM |
Nanonis | Nanonis SPM control software | Generic 5, Generic 5e | .sxm |
STM |
Omicron | SM4 (read with spym) | not version specific | .sm4 |
AFM |
Nanonis | Nanonis SPM control software | Generic 4 | .sxm |
AFM |
Bruker | Bruker SPMLab (read with gwyddionpy) |
1.00 |
.flt, written by the instrument as .FLT |
AFM |
Bruker | Bruker NanoScope (read with gwyddionpy) |
9.x (Dimension Icon) |
.spm |
AFM (force curve) |
Bruker | Bruker NanoScope ASCII export |
9.x (Dimension Icon) |
.spm.txt |
Each vendor has its own reference page with the supported formats, the default config file, and a runnable conversion command: Nanonis, Omicron, and Bruker.
The version of a Bruker FLT file is stated in the [Data Version] section at the beginning of the file header (Program=SPMLab and Version=1.00), while the Nanonis generic version denotes the generation of the Nanonis control software, not the :NANONIS_VERSION: entry of the file header. The reader compares file extensions case-insensitively, so both .flt and .FLT are accepted.
The version of a Bruker NanoScope file is stated by the \Version key at the top of the ASCII header of both .spm and .spm.txt (\Version: 0x09400105 in the reference files, i.e. NanoScope 9.x). Note that the two NanoScope formats are not two spellings of the same content: .spm is the native binary file of a raster image, whereas .spm.txt is the ASCII export of a force ramp (force-distance curve) and therefore describes a point measurement rather than a scanned area.
One FLT file holds one channel
A Bruker SPMLab FLT file stores a single channel of a single scan direction, e.g. B3320_13_061726074638.SIG_TOPO_FRW.FLT holds the forward (FRW) height (SIG_TOPO) image, while the backward scan (BKW) and the further channels (e.g. SIG_USER2) are written as separate files. Therefore one FLT file is converted into one NeXus file, and the channel name of the file (DataName in the header, e.g. Height) determines the name of the resulting NXdata group.
The FLT header is INI style text, and the image data that follows it is binary. pynxtools-spm reads it via the gwyddionpy package (the spmlabf importer of Gwyddion).
One .spm file holds many channels
A Bruker NanoScope .spm file behaves the other way around: it stores every recorded channel in both scan directions. The parser exposes them as /<Channel>/forward and /<Channel>/backward (e.g. /Height_Sensor/forward, /Phase/backward) and lists the available combinations under /Scan_list, so one .spm file is converted into one NeXus file that contains several NXdata groups.
The .spm header is ASCII (the \Key: value lines up to \*File list end) and the image block that follows it is binary. pynxtools-spm reads it via the gwyddionpy package (the nanoscope importer of Gwyddion), the same package it uses for the .flt format.
A .spm.txt file holds one force curve
The NanoScope ASCII export stores the extend (_Ex) and retract (_Rt) halves of a single force ramp as tab-separated columns behind a quoted "\Key: value" header. It needs no external reader, and it is curated into a point_force_scan group instead of the mesh_scan group used for images.
Input files¶
The readers mainly need three input files to transform the data into the NXsts, NXstm, and NXafm application definitions for STS, STM, and AFM techniques, respectively. The three input files are -
Experimental file¶
The experimental file is the raw data file generated by the instrument software e.g., (file with .dat extension for Nanonis STS files).
Experiment bias spectroscopy
Saved Date 20.04.2023 14:55:09
User
Date
X (m) 153.514E-9
Y (m) -93.4937E-9
Z (m) 62.8795E-9
Z offset (m) 0E+0
Settling time (s) 2E-3
Integration time (s) 1E-3
Z-Ctrl hold TRUE
Final Z (m) N/A
Start time 20.04.2023 14:53:33
Filter type Gaussian
Order 15
Cutoff frq
Bias>Bias (V) -50E-3
Bias>Calibration (V/V) 1E+0
Bias>Offset (V) 0E+0
Bias Spectroscopy>Sweep Start (V) -50E-3
Bias Spectroscopy>Sweep End (V) 50E-3
Bias Spectroscopy>Num Pixel 2048
Bias Spectroscopy>Z Avg time (s) 50E-3
Bias Spectroscopy>Z offset (m) 0E+0
Bias Spectroscopy>1st Settling time (s) 5E-3
Bias Spectroscopy>Settling time (s) 2E-3
Bias Spectroscopy>Integration time (s) 1E-3
Bias Spectroscopy>End Settling time (s) 5E-3
Bias Spectroscopy>Z control time (s) 200E-3
Bias Spectroscopy>Max Slew rate (V/s) Inf
Bias Spectroscopy>backward sweep FALSE
Bias Spectroscopy>Z-controller hold TRUE
Bias Spectroscopy>Number of sweeps 10
Bias Spectroscopy>Channels Current (A);Temperature 1 (K);Bias (V);LI Demod 1 X (A);LI Demod 1 Y (A);LI Demod 2 X (A);LI Demod 2 Y (A)
Bias Spectroscopy>Reset Bias TRUE
Bias Spectroscopy>Record final Z FALSE
Bias Spectroscopy>Lock-In run FALSE
Current>Current (A) -266.337E-12
Current>Calibration (A/V) 1E-9
Current>Offset (A) -113.25E-15
Current>Gain LN 10^9
Kelvin Controller>Demodulation/Control signal OC M1 Freq. Shift (Hz)
Kelvin Controller>AC mode TRUE
Kelvin Controller>Bias modulation on/off FALSE
Kelvin Controller>Bias modulation frequency (Hz) 938E+0
Kelvin Controller>Bias modulation phase (deg) 0E+0
Kelvin Controller>Bias modulation amplitude (V) 500E-3
Kelvin Controller>Setpoint 0E+0
Kelvin Controller>Demodulation/Control amplitude 0E+0
Kelvin Controller>Kelvin Controller on/off FALSE
Kelvin Controller>Slope -1
Kelvin Controller>P gain 100E-3
Kelvin Controller>Time constant (s) 10E-3
Kelvin Controller>Bias upper limit (V) 10E+0
Kelvin Controller>Bias lower limit (V) -10E+0
Lock-in>Lock-in status ON
Lock-in>Modulated signal Bias (V)
Lock-in>Frequency (Hz) 1E+3
Lock-in>Amplitude 2E-3
Lock-in>Demodulated signal Current (A)
Lock-in>HP Filter Cutoff D1 (Hz) 9.71405E+0
Lock-in>HP Filter Cutoff D2 (Hz) 9.71405E+0
Lock-in>HP Filter Order D1 OFF
Lock-in>HP Filter Order D2 OFF
Lock-in>Harmonic D1 1
Lock-in>Harmonic D2 2
Lock-in>Reference phase D1 (deg) 103.281E+0
Lock-in>Reference phase D2 (deg) 40.6287E+0
Lock-in>LP Filter Cutoff D1 (Hz) 621.699E+0
Lock-in>LP Filter Cutoff D2 (Hz) 621.699E+0
Lock-in>LP Filter Order D1 OFF
Lock-in>LP Filter Order D2 OFF
Lock-in>Sync Filter D1 ON
Lock-in>Sync Filter D2 ON
NanonisMain>Session Path D:\Data\20230419
NanonisMain>SW Version Generic 5
NanonisMain>UI Release 7856
NanonisMain>RT Release 7856
NanonisMain>RT Frequency (Hz) 20E+3
NanonisMain>Signals Oversampling 10
NanonisMain>Animations Period (s) 20E-3
NanonisMain>Indicators Period (s) 300E-3
NanonisMain>Measurements Period (s) 500E-3
Oscillation Control>differential input TRUE
Oscillation Control>input 1/10 FALSE
Oscillation Control>Input Calibration (m/V) 120E-9
Oscillation Control>Input Range (m) 10.3268E-9
Oscillation Control>Center Frequency (Hz) 25.0228E+3
Oscillation Control>Range (Hz) 305.176E+0
Oscillation Control>Demod 1 Input 0
Oscillation Control>Demod 2 Input 0
Oscillation Control>Demod 3 Input 0
Oscillation Control>Demod 4 Input 0
Oscillation Control>Demod 1 Frequency 0
Oscillation Control>Demod 2 Frequency 0
Oscillation Control>Demod 3 Frequency 0
Oscillation Control>Demod 4 Frequency 0
Oscillation Control>Demod 1 Reference Phase (deg) 73.55E+0
Oscillation Control>Demod 2 Reference Phase (deg) 0E+0
Oscillation Control>Demod 3 Reference Phase (deg) 0E+0
Oscillation Control>Demod 4 Reference Phase (deg) 0E+0
Oscillation Control>Demod 1 Cut off frq (Hz) 777
Oscillation Control>Demod 2 Cut off frq (Hz) 1.55k
Oscillation Control>Demod 3 Cut off frq (Hz) 1.55k
Oscillation Control>Demod 4 Cut off frq (Hz) 1.55k
Oscillation Control>Demod 1 Harmonic 1
Oscillation Control>Demod 2 Harmonic 1
Oscillation Control>Demod 3 Harmonic 1
Oscillation Control>Demod 4 Harmonic 1
Oscillation Control>Demod 1 Filter Order 2
Oscillation Control>Demod 2 Filter Order 2
Oscillation Control>Demod 3 Filter Order 2
Oscillation Control>Demod 4 Filter Order 2
Oscillation Control>Phase P gain (Hz/rad) 1.74535E+0
Oscillation Control>Phase I gain (Hz/rad/s) 324.603E+0
Oscillation Control>Phase controller on FALSE
Oscillation Control>FrequencyShift (Hz) 0E+0
Oscillation Control>Amplitude Setpoint (m) 300E-12
Oscillation Control>Amplitude P gain (V/nm) 421.415E+6
Oscillation Control>Amplitude I gain (V/nm/s) 78.3758E+9
Oscillation Control>Amplitude controller on FALSE
Oscillation Control>Excitation (V) 200E-3
Oscillation Control>output divider 2
Oscillation Control>output off FALSE
Oscillation Control>output add FALSE
Oscillation Control>PLL-Setup Q-Factor 933E+0
Oscillation Control>PLL-Setup Demod. Bandwidth Amp (Hz) 50.9109E+0
Oscillation Control>PLL-Setup Demod. Bandwidth Pha (Hz) 100.001E+0
Oscillation Control>PLL-Setup amplitude/excitation (m/V) 9.009E-9
Piezo Configuration>Active Calib. LHe
Piezo Configuration>Calib. X (m/V) 3.8E-9
Piezo Configuration>Calib. Y (m/V) 3.8E-9
Piezo Configuration>Calib. Z (m/V) 900E-12
Piezo Configuration>HV Gain X 10
Piezo Configuration>HV Gain Y 10
Piezo Configuration>HV Gain Z 10
Piezo Configuration>Tilt X (deg) -1.59502
Piezo Configuration>Tilt Y (deg) -1.86705
Piezo Configuration>Curvature radius X (m) Inf
Piezo Configuration>Curvature radius Y (m) Inf
Piezo Configuration>2nd order corr X (V/m^2) 0E+0
Piezo Configuration>2nd order corr Y (V/m^2) 0E+0
Piezo Configuration>Drift X (m/s) 0E+0
Piezo Configuration>Drift Y (m/s) 0E+0
Piezo Configuration>Drift Z (m/s) 0E+0
Piezo Configuration>Drift correction status (on/off) FALSE
Scan>Scanfield 153.414E-9;-93.5414E-9;4E-9;4E-9;59E+0
Scan>series name Au_mica_2023_Y_A_diPAMY_154-211C_370C_1min_385C_30min_400C_1min_400C_30min_415_30min_430_30min_11min_30min_30min_20230419_
Scan>channels Current (A);Z (m);LI Demod 1 X (A);LI Demod 2 X (A);LI Demod 2 Y (A)
Scan>pixels/line 256
Scan>lines 256
Scan>speed forw. (m/s) 19.5312E-9
Scan>speed backw. (m/s) 19.5312E-9
Temperature 1>Temperature 1 (K) 2.4591E+0
Temperature 2>Temperature 2 (K) 518.113E+0
Z-Controller>Z (m) 62.8495E-9
Z-Controller>Controller name log Current
Z-Controller>Controller status OFF
Z-Controller>Setpoint 25E-12
Z-Controller>Setpoint unit A
Z-Controller>P gain 3.514E-12
Z-Controller>I gain 34.7921E-9
Z-Controller>Time const (s) 101E-6
Z-Controller>TipLift (m) 0E+0
Z-Controller>Switch off delay (s) 50E-3
[DATA]
Bias calc (V) Current (A) Temperature 1 (K) Bias (V) LI Demod 1 X (A) LI Demod 1 Y (A) LI Demod 2 X (A) LI Demod 2 Y (A) Current (A) [filt] Temperature 1 (K) [filt] Bias (V) [filt] LI Demod 1 X (A) [filt] LI Demod 1 Y (A) [filt] LI Demod 2 X (A) [filt] LI Demod 2 Y (A) [filt]
-5.0000001E-2 -1.4288776E-10 1.6252118E+0 -5.0000001E-2 -2.9149552E-12 -2.4001521E-12 3.1361282E-13 -1.8262286E-13 -1.4288776E-10 1.6252118E+0 -5.0000001E-2 -2.9149552E-12 -2.4001521E-12 3.1361282E-13 -1.8262286E-13
-4.9951147E-2 -1.4346191E-10 1.6252102E+0 -4.9951147E-2 -2.1446237E-12 -3.7221532E-12 2.7779610E-15 7.4294073E-14 -1.4283737E-10 1.6252118E+0 -4.9951147E-2 -2.8900049E-12 -2.4669932E-12 2.7973671E-13 -1.6016545E-13
-4.9902298E-2 -1.4369876E-10 1.6252074E+0 -4.9902298E-2 -3.1126282E-12 -2.9193852E-12 3.3682909E-13 -1.6808104E-13 -1.4278936E-10 1.6252117E+0 -4.9902298E-2 -2.8549446E-12 -2.5168639E-12 2.4648721E-13 -1.4606629E-13
-4.9853444E-2 -1.4269953E-10 1.6252105E+0 -4.9853444E-2 -2.4439749E-12 -3.6114013E-12 1.9321609E-13 3.9136714E-13 -1.4273145E-10 1.6252117E+0 -4.9853444E-2 -2.8326918E-12 -2.5816437E-12 2.0376618E-13 -1.2110958E-13
-4.9804594E-2 -1.4261047E-10 1.6252066E+0 -4.9804594E-2 -2.6221989E-12 -3.9465770E-12 -9.4475019E-14 -1.0480260E-13 -1.4267816E-10 1.6252116E+0 -4.9804594E-2 -2.7935152E-12 -2.6488798E-12 1.6995072E-13 -9.7163427E-14
-4.9755741E-2 -1.4316516E-10 1.6252112E+0 -4.9755741E-2 -2.4876841E-12 -2.9806431E-12 -2.7913430E-13 1.6931428E-13 -1.4260229E-10 1.6252116E+0 -4.9755741E-2 -2.7822991E-12 -2.6910390E-12 1.3847052E-13 -7.6341406E-14
-4.9706887E-2 -1.4259369E-10 1.6252110E+0 -4.9706887E-2 -2.7327786E-12 -3.0913913E-12 -7.9897535E-14 3.1888492E-13 -1.4255383E-10 1.6252115E+0 -4.9706887E-2 -2.7431282E-12 -2.7671955E-12 1.0305365E-13 -6.5633967E-14
-4.9658038E-2 -1.4291839E-10 1.6252106E+0 -4.9658038E-2 -3.0599520E-12 -3.5767652E-12 1.4754625E-13 2.2160633E-13 -1.4247856E-10 1.6252115E+0 -4.9658038E-2 -2.7447489E-12 -2.8158706E-12 6.9952826E-14 -5.2967010E-14
-4.9609184E-2 -1.4325488E-10 1.6252133E+0 -4.9609184E-2 -2.1475129E-12 -3.0740519E-12 1.0480270E-14 -5.3811529E-13 -1.4240342E-10 1.6252115E+0 -4.9609184E-2 -2.7114001E-12 -2.8732819E-12 4.8344490E-14 -4.0015293E-14
-4.9560335E-2 -1.4213530E-10 1.6252133E+0 -4.9560335E-2 -3.4582190E-12 -3.0836609E-12 -3.9569209E-14 -4.4774216E-14 -1.4231331E-10 1.6252114E+0 -4.9560335E-2 -2.7038020E-12 -2.9321107E-12 1.8490218E-14 -2.4028151E-14
... 2038 further data rows are omitted in this documentation excerpt; the complete file is in the repository.
Config file¶
The config file is a json file which maps between the data model (unstructured data) of the raw data file and the data model inscribed in the application definition (e.g., NXsts). Note that, as a intermediate step the corresponding parser (see Reader Structure) generates key-value pair data object (e.g., Python dictionary) from raw data file. The data object organizes raw data path by a forward slash separated string key mapping to the value (e.g., '/Experiment/value': 'bias spectroscopy'). To know how to read this config file and modify it, please follow Config File in Work with Reader guide.
{
"ENTRY[entry]": {
"@default": { "raw_path": "@default:current_filter" },
"definition": { "@version": "" },
"start_time": {
"raw_path": "/Start time/value"
},
"end_time": {
"raw_path": "/Saved Date/value"
},
"INSTRUMENT[instrument]": {
"lockin_amplifier": {
"modulation_status": {
"raw_path": "/Lock-in/Lock-in status/value"
},
"reference_frequency": {
"raw_path": "/Lock-in/Frequency/value",
"@units": "/Lock-in/Frequency/unit"
},
"modulation_signal": {
"raw_path": "@default:Current"
},
"demodulated_signal": {
"raw_path": "@default:Current"
},
"reference_amplitude": {
"raw_path": "/Lock-in/Amplitude/value",
"@units": "/Lock-in/Modulated signal/Bias/unit"
},
"demodulated_frequency": "",
"demodulated_amplitude": "",
"demodulator_channels": "",
"recorded_channels": "",
"active_channel": {
"raw_path": ""
},
"flip_sign": "",
"low_passN": [
{
"d1": {
"raw_path": "/Lock-in/LP Filter Cutoff D1/value",
"@units": "/Lock-in/LP Filter Cutoff D1/unit"
}
},
{
"d2": {
"raw_path": "/Lock-in/LP Filter Cutoff D2/value",
"@units": "/Lock-in/LP Filter Cutoff D2/unit"
}
}
],
"lp_filter_orderN": [
{
"d1": { "raw_path": "/Lock-in/LP Filter Order D1/value" },
"d2": { "raw_path": "/Lock-in/LP Filter Order D2/value" }
}
],
"high_passN": [
{
"d1": {
"raw_path": "/Lock-in/HP Filter Cutoff D1/value",
"@units": "/Lock-in/HP Filter Cutoff D1/unit"
}
},
{
"d2": {
"raw_path": "/Lock-in/HP Filter Cutoff D2/value",
"@units": "/Lock-in/HP Filter Cutoff D2/unit"
}
}
],
"hp_filter_orderN": [
{ "d1": { "raw_path": "/Lock-in/HP Filter Order D1/value" } },
{ "d2": { "raw_path": "/Lock-in/HP Filter Order D2/value" } }
],
"ref_offset_phaseN[ref_offset_phase_n]": [
{
"d1": {
"raw_path": "/Lock-in/Reference phase D1/value",
"@units": "/Lock-in/Reference phase D1/unit"
}
},
{
"d2": {
"raw_path": "/Lock-in/Reference phase D2/value",
"@units": "/Lock-in/Reference phase D2/unit"
}
}
],
"harmonic_orderN[harmonic_order_n]": [
{ "d1": { "raw_path": "/Lock-in/Harmonic D1/value" } },
{ "d2": { "raw_path": "/Lock-in/Harmonic D2/value" } }
],
"dc_offset_valueN": [
{
"d1": {
"raw_path": "",
"@units": ""
}
},
{
"d2": {
"raw_path": "",
"@units": ""
}
}
]
},
"real_time_controller": {
"fabrication": {
"model": {
"raw_path": "/NanonisMain/RT Release/value"
}
},
"frequency": {
"raw_path": "/NanonisMain/RT Frequency/value",
"@units": "/NanonisMain/RT Frequency/unit"
},
"acquisition_time": {
"raw_path": "/NanonisMain/Acquisition Period/value",
"@units": "/NanonisMain/Acquisition Period/unit"
},
"animation_time": {
"raw_path": "/NanonisMain/Animations Period/value",
"@units": "/NanonisMain/Animations Period/unit"
},
"measurement_time": {
"raw_path": "/NanonisMain/Measurements Period/value",
"@units": "/NanonisMain/Measurements Period/unit"
},
"indication_time": {
"raw_path": "/NanonisMain/Indicators Period/value",
"@units": "/NanonisMain/Indicators Period/unit"
}
},
"bias_spectroscopy_environment": {
"SPM_BIAS_SPECTROSCOPY[bias_spectroscopy]": {
"measurement_type": "",
"SPM_POSITIONER[spm_positioner]": {
"z_controller": {
"feedback_on": {
"raw_path": "/Z-Controller/Controller status/value"
},
"set_point": {
"raw_path": "/Z-Controller/Setpoint/value",
"@units": "/Z-Controller/Setpoint unit/value"
},
"tip_lift": {
"raw_path": "/Z-Controller/TipLift/value",
"@units": "/Z-Controller/TipLift/unit"
},
"z": {
"raw_path": "/Z-Controller/Z/value",
"@units": "/Z-Controller/Z/unit"
},
"K_i": {
"raw_path": "/Z-Controller/I gain/value"
},
"K_p": {
"raw_path": "/Z-Controller/P gain/value"
},
"D_t": {
"raw_path": "/Z-Controller/Time const/value",
"@units": "/Z-Controller/Time const/unit"
},
"controller_label": {
"raw_path": "/Z-Controller/Controller name/value"
},
"z_offset_value": {
"raw_path": "/Bias Spectroscopy/Z offset/value",
"@units": "/Bias Spectroscopy/Z offset/unit"
}
}
},
"BIAS_SWEEP[bias_sweep]": {
"#note": "This group will be handled in _construct_bias_sweep_grp.",
"scan_type": "",
"settling_time": {
"raw_path": "/Bias Spectroscopy/Settling time/value",
"@units": "/Bias Spectroscopy/Settling time/unit"
},
"first_settling_time": {
"raw_path": "/Bias Spectroscopy/1st Settling time/value",
"@units": "/Bias Spectroscopy/1st Settling time/unit"
},
"end_settling_time": {
"raw_path": "/Bias Spectroscopy/End Settling time/value",
"@units": "/Bias Spectroscopy/End Settling time/unit"
},
"max_slew_rate": {
"raw_path": "/Bias Spectroscopy/Max Slew rate/value",
"@units": "/Bias Spectroscopy/Max Slew rate/unit"
},
"final_z": "",
"total_spectroscopy_time": "",
"number_of_sweeps": {
"raw_path": "/Bias Spectroscopy/Number of sweeps/value"
},
"scan_region": {
"scan_range_bias": "",
"scan_offset_bias": {
"raw_path": ["/Bias/Offset/value"],
"@units": "/Bias/Offset/unit"
},
"scan_angleN[scan_angle_n]": "",
"scan_start_bias": {
"raw_path": "/Bias Spectroscopy/Sweep Start/value",
"@units": "/Bias Spectroscopy/Sweep Start/unit"
},
"scan_end_bias": {
"raw_path": "/Bias Spectroscopy/Sweep End/value",
"@units": "/Bias Spectroscopy/Sweep End/unit"
}
},
"linear_sweep": {
"scan_speed": "",
"scan_time": "",
"forward_speedN[forward_speed]": {
"raw_path": "/Scan/speed forw./value",
"@units": "/Scan/speed forw./unit"
},
"backward_speedN[backward_speed]": {
"raw_path": "/Scan/speed backw./value",
"@units": "/Scan/speed backw./unit"
},
"scan_points_bias": {
"raw_path": "/Bias Spectroscopy/Num Pixel/value"
},
"step_size_bias": "",
"reset_bias": "",
"backward_sweep": "",
"DATA[scan_data]": [
{
"data": {
"name": "current",
"raw_path": "/dat_mat_components/LI Demod 1 X/value",
"@units": "/dat_mat_components/LI Demod 1 X/unit",
"@long_name": "Lockin Demod 1X"
},
"0": {
"name": "voltage",
"raw_path": [
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
],
"@long_name": "Bias Voltage"
},
"title": { "raw_path": "@default:Lockin Signal 1X" },
"grp_name": "Lockin Demod 1X"
},
{
"data": {
"name": "Lockin Demod 1Y",
"raw_path": "/dat_mat_components/LI Demod 1 Y/value",
"@units": "/dat_mat_components/LI Demod 1 Y/unit"
},
"0": {
"name": "Bias Voltage",
"raw_path": [
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
]
},
"title": { "raw_path": "@default:Lockin Signal 1Y" },
"grp_name": "Lockin Demod 1Y"
},
{
"data": {
"name": "Lockin Demod 2X",
"raw_path": "/dat_mat_components/LI Demod 2 X/value",
"@units": "/dat_mat_components/LI Demod 2 X/unit"
},
"0": {
"name": "Bias Voltage",
"raw_path": [
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
]
},
"title": { "raw_path": "@default:Lockin Signal 2X" },
"grp_name": "Lockin Demod 2X"
},
{
"data": {
"name": "Lockin Demod 2Y",
"raw_path": "/dat_mat_components/LI Demod 2 Y/value",
"@units": "/dat_mat_components/LI Demod 2 Y/unit"
},
"0": {
"name": "Bias Voltage",
"raw_path": [
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
]
},
"title": { "raw_path": "@default:Lockin Signal 2Y" },
"grp_name": "Lockin Demod 2Y"
},
{
"data": {
"name": "Lockin Demod 1X_filter",
"raw_path": "/dat_mat_components/LI Demod 1 X [filt]/value",
"@units": "/dat_mat_components/LI Demod 1 X [filt]/unit"
},
"0": {
"name": "Bias Voltage",
"raw_path": [
"/dat_mat_components/Bias [filt]/value",
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
]
},
"title": { "raw_path": "@default:Lockin Demod 1X(filter)" },
"grp_name": "Lockin_Demod_1X_filter"
},
{
"data": {
"name": "Lockin Demod 1Y_filter",
"raw_path": "/dat_mat_components/LI Demod 1 Y [filt]/value",
"@units": "/dat_mat_components/LI Demod 1 Y [filt]/unit"
},
"0": {
"name": "Bias Voltage",
"raw_path": [
"/dat_mat_components/Bias [filt]/value",
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
]
},
"title": { "raw_path": "@default:Lockin Demod 1Y(filter)" },
"grp_name": "Lockin_Demod_1Y_filter"
},
{
"data": {
"name": "Lockin Demod 2X_filter",
"raw_path": "/dat_mat_components/LI Demod 2 X [filt]/value",
"@units": "/dat_mat_components/LI Demod 2 X [filt]/unit"
},
"0": {
"name": "Bias Voltage",
"raw_path": [
"/dat_mat_components/Bias [filt]/value",
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
]
},
"title": { "raw_path": "@default:Lockin Demod 2X(filter)" },
"grp_name": "Lockin_Demod_2X_filter"
},
{
"data": {
"name": "Lockin Demod 2Y_filter",
"raw_path": "/dat_mat_components/LI Demod 2 Y [filt]/value",
"@units": "/dat_mat_components/LI Demod 2 Y [filt]/unit"
},
"0": {
"name": "Bias Voltage",
"raw_path": [
"/dat_mat_components/Bias [filt]/value",
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
]
},
"title": { "raw_path": "@default:Lockin Demod 2Y(filter)" },
"grp_name": "Lockin_Demod_2Y_filter"
}
]
}
},
"CIRCUIT[circuit]": ""
},
"independent_controllers": "",
"measurement_sensors": ""
},
"current_sensorTAG[current_sensor]": {
"current": {
"raw_path": "/Current/Current/value",
"@units": "/Current/Current/unit"
},
"calibration": {
"calibration_parameters": {
"coefficient": {
"raw_path": "/Current/Calibration/value",
"@units": "/Current/Calibration/unit"
}
}
},
"offset_value": {
"raw_path": "/Current/Offset/value",
"@units": "/Current/Offset/unit"
},
"AMPLIFIER[amplifier]": {
"current_gain": { "raw_path": "" }
}
},
"piezo_sensor": {
"piezo_configuration": {
"calibration": {
"calibration_type": {
"raw_path": "@default:active"
},
"calibration_date": {
"raw_path": ""
},
"rangeN[range_n]": { "x": "", "y": "", "z": "" },
"calibration_parameters": {
"coefficientN[coefficient_n]": [
{
"x": {
"raw_path": "/Piezo Configuration/Calib. X/value",
"@units": "/Piezo Configuration/Calib. X/unit"
}
},
{
"y": {
"raw_path": "/Piezo Configuration/Calib. Y/value",
"@units": "/Piezo Configuration/Calib. Y/unit"
}
},
{
"z": {
"raw_path": "/Piezo Configuration/Calib. Z/value",
"@units": "/Piezo Configuration/Calib. Z/unit"
}
}
],
"second_order_correctionN[second_order_correction_n]": [
{
"x": {
"raw_path": "/Piezo Configuration/2nd order corr X/value",
"@units": "/Piezo Configuration/2nd order corr X/unit"
}
},
{
"y": {
"raw_path": "/Piezo Configuration/2nd order corr Y/value",
"@units": "/Piezo Configuration/2nd order corr Y/unit"
}
}
]
},
"driftN[drift_n]": [
{
"x": {
"raw_path": "/Piezo Configuration/Drift X/value",
"@units": "/Piezo Configuration/Drift X/unit"
}
},
{
"y": {
"raw_path": "/Piezo Configuration/Drift Y/value",
"@units": "/Piezo Configuration/Drift Y/unit"
}
},
{
"z": {
"raw_path": "/Piezo Configuration/Drift Z/value",
"@units": "/Piezo Configuration/Drift Z/unit"
}
}
],
"hv_gainN[hv_gain_n]": [
{ "x": { "raw_path": "/Piezo Configuration/HV Gain X/value" } },
{ "y": { "raw_path": "/Piezo Configuration/HV Gain Y/value" } },
{ "z": { "raw_path": "/Piezo Configuration/HV Gain Z/value" } }
],
"tiltN[tilt_n]": [
{
"x": {
"raw_path": "/Piezo Configuration/Tilt X/value",
"@units": "/Piezo Configuration/Tilt X/unit"
}
},
{
"y": {
"raw_path": "/Piezo Configuration/Tilt Y/value",
"@units": "/Piezo Configuration/Tilt Y/unit"
}
},
{
"z": {
"raw_path": "/Piezo Configuration/Tilt Z/value",
"@units": "/Piezo Configuration/Tilt Z/unit"
}
}
],
"drift_correction_status": {
"raw_path": [
"/Piezo Configuration/Drift correction status/value",
"/Piezo Calibration/Drift correction status/value"
]
}
},
"piezo_material": {
"curvature_radiusN": [
{
"x": {
"raw_path": "/Piezo Configuration/Curvature radius X/value",
"@units": "/Piezo Configuration/Curvature radius X/unit"
}
},
{
"y": {
"raw_path": "/Piezo Configuration/Curvature radius Y/value",
"@units": "/Piezo Configuration/Curvature radius Y/unit"
}
},
{
"z": {
"raw_path": "/Piezo Configuration/Curvature radius Z/value",
"@units": "/Piezo Configuration/Curvature radius Z/unit"
}
}
]
}
},
"SPM_POSITIONER[spm_positioner]": "",
"x": { "raw_path": "/X/value", "@units": "/X/unit" },
"y": { "raw_path": "/Y/value", "@units": "/Y/unit" },
"z": { "raw_path": "/Z/value", "@units": "/Z/unit" },
"AXISoffset_value[x_offset_value]": {
"x": "",
"y": "",
"z": ""
}
},
"sample_bias_voltage": {
"bias_voltage": {
"raw_path": "/Bias/Bias/value",
"@units": "/Bias/Bias/unit"
},
"calibration": {
"calibration_parameters": {
"coefficient": {
"raw_path": "/Bias/Calibration/value",
"@units": "/Bias/Calibration/unit"
}
}
}
},
"SCAN_ENVIRONMENT[scan_environment]": {
"identifier_environment": {
"raw_path": "/Scan/series name/value"
},
"cryo_bottom_temperature": { "@units": "" },
"cryo_shield_temperature": { "@units": "" },
"head_temperature": {
"raw_path": "/Temperature 1/Temperature 1/value",
"@units": "/Temperature 1/Temperature 1/unit"
},
"cryo_shield_temperature_sensor": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/cryo_shield_temperature_sensor",
"cryo_bottom_temperature_sensor": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/cryo_bottom_temperature_sensor",
"head_temperature_sensor": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/head_temperature_sensor"
},
"cryo_shield_temperature_sensor": {
"temp_offset_value": "",
"TEMPERATUREchannel[temperature_channel]": "",
"calibration": {
"calibration_parameters": {
"coefficient": ""
}
},
"temperature_calibration": { "coefficients": "" },
"DATA[data]": ""
},
"cryo_bottom_temperature_sensor": {
"temp_offset_value": "",
"TEMPERATUREchannel[temperature_channel]": "",
"calibration": {
"calibration_parameters": {
"coefficient": ""
}
},
"temperature_calibration": { "coefficients": "" },
"DATA[data]": ""
},
"sample_temperature_sensor": {
"temp_offset_value": "",
"TEMPERATUREchannel[temperature_channel]": "",
"calibration": {
"calibration_parameters": {
"coefficient": ""
}
},
"temperature_calibration": { "coefficients": "" },
"DATA[data]": ""
},
"head_temperature_sensor": {
"temp_offset_value": "",
"TEMPERATUREchannel[temperature_channel]": "",
"calibration": {
"calibration_parameters": {
"coefficient": ""
}
},
"temperature_calibration": { "coefficients": "" },
"DATA[data]": [
{
"data": {
"name": "temperature1",
"raw_path": "/dat_mat_components/Temperature 1/value",
"@units": "/dat_mat_components/Temperature 1/unit"
},
"0": {
"name": "Bias Voltage",
"raw_path": [
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
],
"axis_ind": 0
},
"title": { "raw_path": "@default:Bias Spectroscopy Temperature1" },
"grp_name": "temperature1"
},
{
"data": {
"name": "temperature1_filter",
"raw_path": "/dat_mat_components/Temperature 1 [filt]/value",
"@units": "/dat_mat_components/Temperature 1 [filt]/unit"
},
"0": {
"name": "Bias Voltage",
"raw_path": [
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
],
"axis_ind": 0
},
"title": {
"raw_path": "@default:Bias Spectroscopy Temperature1(filter)"
},
"grp_name": "temperature1_filter"
}
]
}
},
"DATA[data]": [
{
"data": {
"name": "Current",
"raw_path": "/dat_mat_components/Current/value",
"@units": "/dat_mat_components/Current/unit"
},
"0": {
"name": "Bias Voltage",
"raw_path": [
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
]
},
"title": { "raw_path": "@default:Bias Spectroscopy" },
"grp_name": "current"
},
{
"data": {
"name": "Current Filter",
"raw_path": "/dat_mat_components/Current [filt]/value",
"@units": "/dat_mat_components/Current [filt]/unit"
},
"0": {
"name": "Bias Voltage",
"raw_path": [
"/dat_mat_components/Bias [filt]/value",
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
],
"axis_ind": 0
},
"title": { "raw_path": "@default:Bias Spectroscopy(filter)" },
"grp_name": "current_filter"
},
{
"data": {
"name": "Current Filter",
"raw_path": "/dat_mat_components/Current [filt]/value",
"@units": "/dat_mat_components/Current [filt]/unit"
},
"0": {
"name": "Bias Voltage",
"raw_path": [
"/dat_mat_components/Bias [filt]/value",
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
]
},
"title": { "raw_path": "@default:Bias Spectroscopy(filter)" },
"grp_name": "current_filter"
},
{
"data": {
"name": "Current Backward",
"raw_path": "/dat_mat_components/Current [bwd]/value",
"@units": "/dat_mat_components/Current [bwd]/unit"
},
"0": {
"name": "Bias Voltage",
"raw_path": [
"/dat_mat_components/Bias [filt]/value",
"/dat_mat_components/Bias calc/value",
"/dat_mat_components/Bias/value"
],
"@units": [
"/dat_mat_components/Bias calc/unit",
"/dat_mat_components/Bias/unit"
]
},
"title": { "raw_path": "@default:Bias Spectroscopy(Backward)" },
"grp_name": "current_backward"
}
],
"reproducibility_indicators": {
"current": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/current_sensor/current",
"current_gain": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/current_sensor/AMPLIFIER[amplifier]/current_gain",
"current_offset": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/current_sensor/current_offset",
"bias_sweep": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/bias_spectroscopy_environment/BIAS_SPECTROSCOPY[bias_spectroscopy]/BIAS_SWEEP[bias_sweep]",
"reference_frequency": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/lockin_amplifier/reference_frequency",
"modulation_signal": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/lockin_amplifier/modulation_signal"
},
"resolution_indicators": {
"head_temperature": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/scan_environment/head_temperature",
"cryo_bottom_temperature": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/scan_environment/cryo_bottom_temperature",
"cryo_shield_temperature": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/scan_environment/cryo_shield_temperature",
"bias_sweep": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/bias_spectroscopy_environment/BIAS_SPECTROSCOPY[bias_spectroscopy]/BIAS_SWEEP[bias_sweep]",
"reference_frequency": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/lockin_amplifier/reference_frequency",
"modulation_signal": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/lockin_amplifier/modulation_signal"
}
}
}
{
"ENTRY[entry]": {
"@default": { "raw_path": "@default:current_backward" },
"identifier_collection": "",
"start_time": {
"#note": "Handled in function _set_start_end_time"
},
"end_time": {
"#note": "Handled in function _set_start_end_time"
},
"scan_mode": "",
"scan_type": "",
"experiment_description": { "raw_path": "/COMMENT" },
"INSTRUMENT[instrument]": {
"SCAN_ENVIRONMENT[scan_environment]": {
"head_temperature": {
"raw_path": "/Temperature 1/Temperature 1",
"@units": "@default:K"
},
"cryo_bottom_temperature": "",
"cryo_shield_temperature": "",
"identifier_environment": { "raw_path": "/Scan/series name" },
"SPM_SCAN_CONTROL[spm_scan_control]": {
"scanTAG[scan_name]": { "raw_path": "/Scan/series name" },
"meshSCAN[mesh_scan]": {
"backward_speedN[backward_speed_n]": {
"#note": "Derived in construct_scan_pattern_grp",
"raw_path": "/Scan/speed backw.",
"@units": "/Scan/speed backw./@unit"
},
"forward_speedN[forward_speed_n]": {
"#note": "Derived in construct_scan_pattern_grp",
"raw_path": "/Scan/speed forw.",
"@units": "/Scan/speed forw./@unit"
},
"scan_speedN[scan_speed_n]": "",
"channelNAME[scan_name_n]": "",
"scan_pointsN[scan_points_n]": {
"#note": "Derived in construct_scan_pattern_grp",
"raw_path": "/SCAN/PIXELS",
"@units": ""
},
"steppingN[stepping_n]": [
{
"_x": {
"raw_path": "@default:1",
"@units": ""
}
},
{
"_y": {
"raw_path": "@default:1",
"@units": ""
}
}
],
"step_sizeN[step_size_n]": [
{ "x": { "raw_path": "", "@units": "" } },
{ "y": { "raw_path": "", "@units": "" } }
],
"scan_time": "",
"continuousN[continuous]": {
"raw_path": "@default:True"
}
},
"scan_region": {
"scan_angleN[scan_angle_n]": {
"raw_path": "/SCAN/ANGLE",
"@units": "@default:deg"
},
"scan_offset_valueN[scan_offset_value_n]": {
"#note": "Derived in function 'construct_scan_region_grp'.",
"raw_path": "/SCAN/OFFSET",
"@units": "/Z-Controller/Z/@unit"
},
"scan_rangeN[scan_range_n]": {
"#note": "Derived in function 'construct_scan_region_grp'.",
"raw_path": "/SCAN/RANGE",
"@units": "/Z-Controller/Z/@unit"
},
"scan_startN[scan_start_n]": {
"raw_path": "",
"@units": ""
},
"scan_endN[scan_end_n]": {
"raw_path": "",
"@units": ""
}
},
"scan_time_start": "",
"scan_time_end": "",
"independent_scan_axes": {
"#note": "Handled in function _construct_nxscan_controllers",
"raw_path": "/SCAN/DIR",
"@units": ""
},
"scan_resolutionN[scan_resolution_n]": "",
"accuracyN[accuracy_n]": "",
"scan_type": { "raw_path": "@default:mesh", "@units": "" },
"scan_control_type": {
"raw_path": "@default:continuous",
"@units": ""
}
},
"cryo_shield_temperature_sensor": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/cryo_shield_temperature_sensor",
"cryo_bottom_temperature_sensor": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/cryo_bottom_temperature_sensor",
"head_temperature_sensor": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/head_temperature_sensor"
},
"voltage_sensorTAG[voltage_sensor]": {
"voltage": {
"raw_path": "",
"@units": ""
},
"voltage_offset_value": {
"raw_path": "",
"@units": ""
},
"calibration": {
"calibration_parameters": {
"coefficient": ""
},
"calibration_time": ""
},
"AMPLIFIER[amplifier]": {
"voltage_gain": {
"raw_path": ""
}
}
},
"current_sensorTAG[current_sensor]": {
"current": {
"raw_path": "/Current/Current",
"@units": "/Current/Current/@unit"
},
"offset_value": {
"raw_path": "/Current/Offset",
"@units": "/Current/Offset/@unit"
},
"calibration": {
"calibration_parameters": {
"coefficient": {
"raw_path": "/Current/Calibration",
"@units": "/Current/Calibration/@unit"
}
},
"calibration_time": ""
},
"AMPLIFIER[amplifier]": {
"current_gain": {
"raw_path": ""
}
}
},
"lockin_amplifier": {
"reference_frequency": {
"raw_path": "/Lock-in/Frequency",
"@units": "@default:Hz"
},
"reference_amplitude": {
"raw_path": "",
"@units": ""
},
"reference_phase": {
"raw_path": "",
"@units": ""
},
"modulation_signal": {
"raw_path": "/Lock-in/Modulated signal"
},
"demodulated_signal": {
"raw_path": "/Lock-in/Demodulated signal"
},
"modulation_status": { "raw_path": "/Lock-in/Lock-in status" },
"demodulated_frequency": "",
"demodulated_amplitude": "",
"demodulator_channels": "",
"recorded_channels": "",
"active_channel": {
"raw_path": ""
},
"flip_sign": "",
"low_passN": [
{
"d1": {
"raw_path": "/Lock-in/LP Filter Cutoff D1",
"@units": "/Lock-in/LP Filter Cutoff D1/@unit"
}
},
{
"d2": {
"raw_path": "/Lock-in/LP Filter Cutoff D2",
"@units": "/Lock-in/LP Filter Cutoff D2/@unit"
}
}
],
"lp_filter_orderN": [
{
"d1": { "raw_path": "" },
"d2": { "raw_path": "" }
}
],
"high_passN": [
{
"d1": {
"raw_path": "/Lock-in/HP Filter Cutoff D1",
"@units": "/Lock-in/HP Filter Cutoff D1/@unit"
}
},
{
"d2": {
"raw_path": "/Lock-in/HP Filter Cutoff D2",
"@units": "/Lock-in/HP Filter Cutoff D2/@unit"
}
}
],
"hp_filter_orderN": [
{ "d1": { "raw_path": "" } },
{ "d2": { "raw_path": "" } }
],
"ref_offset_phaseN[ref_offset_phase_n]": [
{
"d1": {
"raw_path": "/Lock-in/Reference phase D1",
"@units": "/Lock-in/Reference phase D1/@unit"
}
},
{
"d2": {
"raw_path": "/Lock-in/Reference phase D2",
"@units": "/Lock-in/Reference phase D2/@unit"
}
}
],
"harmonic_orderN[harmonic_order_n]": [
{ "d1": { "raw_path": "/Lock-in/Harmonic D1" } },
{ "d2": { "raw_path": "/Lock-in/Harmonic D2" } }
],
"dc_offset_valueN": [
{
"d1": {
"raw_path": "",
"@units": ""
}
},
{
"d2": {
"raw_path": "",
"@units": ""
}
}
]
},
"bias_spectroscopy_environment": {
"SPM_BIAS_SPECTROSCOPY[spm_bias_spectroscopy]": {
"measurement_type": "",
"SPM_POSITIONER[spm_positioner]": {
"z_controller": {
"z_average_time": {
"raw_path": "/Bias Spectroscopy/Z Avg time",
"@units": "/Bias Spectroscopy/Z Avg time/@unit"
},
"z_controller_time": {
"raw_path": "/Bias Spectroscopy/Z control time",
"@units": "/Bias Spectroscopy/Z control time/@unit"
},
"z_controller_hold": {
"raw_path": "/Bias Spectroscopy/Z-controller hold"
},
"final_z": {
"raw_path": ""
},
"z_offset_value": {
"raw_path": "/Bias Spectroscopy/Z offset",
"@units": "/Bias Spectroscopy/Z offset/@unit"
}
}
},
"BIAS_SWEEP[bias_sweep]": {
"#note": "handled in _construct_bias_sweep_grp function",
"scan_type": "",
"settling_time": {
"raw_path": "/Bias Spectroscopy/Settling time",
"@units": "/Bias Spectroscopy/Settling time/@unit"
},
"first_settling_time": {
"raw_path": "/Bias Spectroscopy/1st Settling time",
"@units": "/Bias Spectroscopy/1st Settling time/@unit"
},
"end_settling_time": {
"raw_path": "/Bias Spectroscopy/End Settling time",
"@units": "/Bias Spectroscopy/End Settling time/@unit"
},
"max_slew_rate": {
"raw_path": "/Bias Spectroscopy/Max Slew rate",
"@units": "/Bias Spectroscopy/Max Slew rate/@unit"
},
"final_z": "",
"total_spectroscopy_time": "",
"sweep_number": {
"raw_path": "/Bias Spectroscopy/Number of sweeps"
},
"scan_region": {
"scan_range_bias": "",
"scan_offset_bias": {
"raw_path": "/Bias/Offset",
"@units": "/Bias/Offset/@unit"
},
"scan_angleN[scan_angle_n]": "",
"scan_start_bias": {
"raw_path": "/Bias Spectroscopy/Sweep Start",
"@units": "/Bias Spectroscopy/Sweep Start/@unit"
},
"scan_end_bias": {
"raw_path": "/Bias Spectroscopy/Sweep End",
"@units": "/Bias Spectroscopy/Sweep End/@unit"
}
},
"linear_sweep": {
"scan_speed": "",
"scan_time": "",
"forward_speedN[forward_speed]": "",
"backward_speedN[backward_speed]": "",
"scan_points_bias": {
"raw_path": "/Bias Spectroscopy/Num Pixel"
},
"step_size_bias": "",
"reset_bias": "",
"backward_sweep": {
"raw_path": "/Bias Spectroscopy/backward sweep"
},
"SCAN_DATA[scan_data]": ""
}
},
"CIRCUIT[circuit]": ""
}
},
"height_piezo_sensor": {
"piezo_configuration": {
"calibration": {
"calibration_type": {
"raw_path": "@default:active"
},
"calibration_date": {
"raw_path": ""
},
"rangeN[range_n]": { "x": "", "y": "", "z": "" },
"calibratedAXIS[calibrated_n]": [
{ "x": "" },
{ "y": "" },
{ "z": "" }
],
"calibration_parameters": {
"coefficientN[coefficient_n]": [
{
"x": {
"raw_path": "/Piezo Configuration/Calib. X",
"@units": "/Piezo Configuration/Calib. X/@unit"
}
},
{
"y": {
"raw_path": "/Piezo Configuration/Calib. Y",
"@units": "/Piezo Configuration/Calib. Y/@unit"
}
},
{
"z": {
"raw_path": "/Piezo Configuration/Calib. Z",
"@units": "/Piezo Configuration/Calib. Z/@unit"
}
}
],
"second_order_correctionN[second_order_correction_n]": [
{
"x": {
"raw_path": "/Piezo Configuration/2nd order corr X",
"@units": "/Piezo Configuration/2nd order corr X/@unit"
}
},
{
"y": {
"raw_path": "/Piezo Configuration/2nd order corr Y",
"@units": "/Piezo Configuration/2nd order corr Y/@unit"
}
},
{
"z": {
"raw_path": "/Piezo Configuration/2nd order corr Z",
"@units": "/Piezo Configuration/2nd order corr Z/@unit"
}
}
]
},
"calibration_name": {
"raw_path": "/Piezo Configuration/Active Calib."
},
"driftN[drift_n]": [
{
"x": {
"raw_path": "/Piezo Configuration/Drift X",
"@units": "/Piezo Configuration/Drift X/@unit"
}
},
{
"y": {
"raw_path": "/Piezo Configuration/Drift Y",
"@units": "/Piezo Configuration/Drift Y/@unit"
}
},
{
"z": {
"raw_path": "/Piezo Configuration/Drift Z",
"@units": "/Piezo Configuration/Drift Z/@unit"
}
}
],
"drift_correction_status": {
"raw_path": [
"/Piezo Configuration/Drift correction status",
"/Piezo Calibration/Drift correction status"
]
},
"hv_gainN[hv_gain_n]": [
{ "x": { "raw_path": "/Piezo Configuration/HV Gain X" } },
{ "y": { "raw_path": "/Piezo Configuration/HV Gain Y" } },
{ "z": { "raw_path": "/Piezo Configuration/HV Gain Z" } }
],
"tiltN[tilt_n]": [
{
"x": {
"raw_path": "/Piezo Configuration/Tilt X",
"@units": "/Piezo Configuration/Tilt X/@unit"
}
},
{
"y": {
"raw_path": "/Piezo Configuration/Tilt Y",
"@units": "/Piezo Configuration/Tilt X/@unit"
}
},
{
"z": {
"raw_path": "/Piezo Configuration/Tilt Z",
"@units": "/Piezo Configuration/Tilt X/@unit"
}
}
]
},
"piezo_material": {
"curvature_radiusN": [
{
"x": {
"raw_path": "/Piezo Configuration/Curvature radius X",
"@units": "/Piezo Configuration/Curvature radius X/@unit"
}
},
{
"y": {
"raw_path": "/Piezo Configuration/Curvature radius Y",
"@units": "/Piezo Configuration/Curvature radius Y/@unit"
}
},
{
"z": {
"raw_path": "/Piezo Configuration/Curvature radius Z",
"@units": "/Piezo Configuration/Curvature radius Z/@unit"
}
}
]
}
},
"SPM_POSITIONER[spm_positioner]": {
"z_controller": {
"K_i": { "raw_path": "/Z-Controller/P gain" },
"K_p": { "raw_path": "/Z-Controller/I gain" },
"set_point": {
"raw_path": "/Z-Controller/Setpoint",
"@units": "/Z-Controller/Setpoint/@unit"
},
"D_t": {
"raw_path": "/Z-Controller/Time const",
"@units": "/Z-Controller/Time const/@unit"
},
"tip_lift": {
"raw_path": "/Z-Controller/TipLift",
"@units": "/Z-Controller/TipLift/@unit"
},
"z": {
"raw_path": "/Z-Controller/Z",
"@units": "/Z-Controller/Z/@unit"
},
"feedback_on": {
"raw_path": "/Z-Controller/Controller status"
},
"switch_off_delay": {
"raw_path": "/Z-Controller/Switch off delay",
"@units": "/Z-Controller/Switch off delay/@unit"
},
"z_offset_value": "",
"controller_label": { "raw_path": "/Z-Controller/Controller name" }
}
},
"x": "",
"y": "",
"z": {
"raw_path": "/Z-Controller/Z",
"@units": "/Z-Controller/Z/@unit"
},
"AXISoffset_value[x_offset_value]": {
"x": "",
"y": "",
"z": ""
}
},
"real_time_controller": {
"fabrication": {
"model": {
"raw_path": "/NanonisMain/RT Release/value"
}
},
"frequency": {
"raw_path": "/NanonisMain/RT Frequency",
"@units": "/NanonisMain/RT Frequency/@unit"
},
"acquisition_time": {
"raw_path": "/NanonisMain/Acquisition Period",
"@units": "/NanonisMain/Acquisition Period/@unit"
},
"animation_time": {
"raw_path": "/NanonisMain/Animations Period",
"@units": "/NanonisMain/Animations Period/@unit"
},
"measurement_time": {
"raw_path": "/NanonisMain/Measurements Period",
"@units": "/NanonisMain/Measurements Period/@unit"
},
"indication_time": {
"raw_path": "/NanonisMain/Indicators Period",
"@units": "/NanonisMain/Indicators Period/@unit"
}
},
"sample_bias_voltage": {
"bias_voltage": {
"raw_path": "/Bias/Bias",
"@units": "/Bias/Bias/@unit"
},
"bias_offset_value": {
"raw_path": "/Bias/Offset",
"@units": "/Bias/Offset/@unit"
},
"calibration": {
"calibration_parameters": {
"coefficient": {
"raw_path": "/Bias/Calibration",
"@units": "/Bias/Calibration/@unit"
}
},
"calibration_time": ""
}
}
},
"PROCESS[process]": { "program": "" },
"SAMPLE[sample]": { "name": "" },
"USER[user]": {
"address": "",
"affiliation": "",
"email": "",
"name": "",
"orcid": "",
"telephone_number": ""
},
"DATA[data]": [
{
"data": {
"name": "Z",
"raw_path": "/Z/forward",
"@units": "@default:m"
},
"title": {
"raw_path": "@default:Height Topography (Forward)"
},
"grp_name": "z_forward"
},
{
"data": {
"name": "Z",
"raw_path": "/Z/backward",
"@units": "@default:m"
},
"title": {
"raw_path": "@default:Height Topography (Backward)"
},
"grp_name": "z_backward"
},
{
"data": {
"name": "Current",
"raw_path": "/Current/forward",
"@units": "@default:A"
},
"title": {
"raw_path": "@default:Current Topography (Forward)"
},
"grp_name": "current_forward"
},
{
"data": {
"name": "Current",
"raw_path": "/Current/backward",
"@units": "@default:A"
},
"title": {
"raw_path": "@default:Current Topography (Backward)"
},
"grp_name": "current_backward"
}
],
"reproducibility_indicators": {
"current": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/current_sensor/current",
"current_gain": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/current_sensor/AMPLIFIER[amplifier]/current_gain",
"current_offset": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/current_sensor/current_offset",
"bias_sweep": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/bias_spectroscopy_environment/BIAS_SPECTROSCOPY[bias_spectroscopy]/BIAS_SWEEP[bias_sweep]",
"reference_frequency": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/lockin_amplifier/reference_frequency",
"modulation_signal": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/lockin_amplifier/modulation_signal"
},
"resolution_indicators": {
"head_temperature": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/scan_environment/head_temperature",
"cryo_bottom_temperature": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/scan_environment/cryo_bottom_temperature",
"cryo_shield_temperature": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/scan_environment/cryo_shield_temperature",
"bias_sweep": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/bias_spectroscopy_environment/BIAS_SPECTROSCOPY[bias_spectroscopy]/BIAS_SWEEP[bias_sweep]",
"reference_frequency": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/lockin_amplifier/reference_frequency",
"modulation_signal": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/lockin_amplifier/modulation_signal"
}
}
}
{
"ENTRY[entry]": {
"@default": {
"raw_path": "@default:amplitude_backward"
},
"definition": { "@version": null },
"identifier_collection": "",
"entry_identifier": "",
"start_time": {
"#note": "Handled in function _set_start_end_time"
},
"end_time": {
"#note": "Handled in function _set_start_end_time"
},
"scan_mode": "",
"scan_type": "",
"identifier_experiment": { "identifier": "" },
"experiment_description": { "raw_path": "/COMMENT" },
"INSTRUMENT[instrument]": {
"SPM_CANTILEVER[spm_cantilever]": {
"cantilever_oscillator": {
"reference_amplitude": {
"raw_path": "/Oscillation Control/Amplitude Setpoint",
"@units": "/Oscillation Control/Amplitude Setpoint/@unit"
},
"reference_frequency": {
"raw_path": "/Oscillation Control/Center Frequency",
"@units": "/Oscillation Control/Center Frequency/@unit"
},
"reference_phase": {
"raw_path": "/Oscillation Control/Reference Phase",
"@units": "/Oscillation Control/Reference Phase/@unit"
},
"frequency_bandwidth": {
"raw_path": "/Oscillation Control/Range",
"@units": "/Oscillation Control/Range/@unit"
},
"frequency_harmonic": { "raw_path": "/Oscillation Control/Harmonic" },
"frequency_shift": {
"raw_path": "/Oscillation Control/FrequencyShift",
"@units": "/Oscillation Control/FrequencyShift/@unit"
},
"frequency_cutoff": {
"raw_path": "/Oscillation Control/Cut off frq",
"@units": "/Oscillation Control/Cut off frq/@unit"
},
"target_amplitude": "",
"active_frequency": ""
},
"cantilever_config": {
"amplitude_excitation": {
"raw_path": "/Oscillation Control/Excitation",
"@units": "/Oscillation Control/Excitation/@unit"
},
"spring_constant": {
"raw_path": "/Oscillation Control/PLL-Setup amplitude/spring_constant",
"@units": "/Oscillation Control/PLL-Setup amplitude/spring_constant/@unit"
}
},
"phase_positioner": {
"actuator": {
"feedback": {
"K_p": {
"raw_path": "/Oscillation Control/Phase P gain"
},
"K_i": {
"raw_path": "/Oscillation Control/Phase I gain"
},
"K_d": "",
"D_t": ""
}
}
},
"amplitude_positioner": {
"actuator": {
"feedback": {
"K_p": {
"raw_path": "/Oscillation Control/Amplitude P gain"
},
"K_i": {
"raw_path": "/Oscillation Control/Amplitude I gain"
},
"K_d": "",
"D_t": ""
}
}
}
},
"phase_lock_loop": {
"loop_filter": {
"Kf_coefficient": {
"raw_path": "/Oscillation Control/PLL-Setup Q-Factor",
"@units": "/Oscillation Control/Sensitivity/@unit"
}
},
"frequency_bandwidth": {
"raw_path": "/Oscillation Control/PLL-Setup Demod. Bandwidth Amp",
"@units": "/Oscillation Control/PLL-Setup Demod. Bandwidth Amp/@unit"
},
"phase_bandwidth": {
"raw_path": "/Oscillation Control/PLL-Setup Demod. Bandwidth Pha",
"@units": "/Oscillation Control/PLL-Setup Demod. Bandwidth Pha/@unit"
}
},
"lockin_amplifier": {
"reference_frequency": {
"raw_path": "/Lock-in/Frequency",
"@units": "@default:Hz"
},
"modulation_signal": {
"raw_path": "/Lock-in/Modulated signal"
},
"demodulated_signal": {
"raw_path": "/Lock-in/Demodulated signal"
},
"modulation_status": { "raw_path": "/Lock-in/Lock-in status" },
"demodulated_frequency": "",
"demodulated_amplitude": "",
"demodulator_channels": "",
"recorded_channels": "",
"ref_offset_phaseN[ref_offset_phase_n]": {
"raw_path": "/Lock-in/Reference phase",
"@units": "/Lock-in/Reference phase/@unit"
},
"harmonic_orderN[harmonic_order_n]": {
"raw_path": "/Lock-in/Harmonic"
}
},
"bias_spectroscopy_environment": {
"BIAS_SPECTROSCOPY[bias_spectroscopy]": {
"bias_sweep": {
"linear_sweep": {
"reset_bias": null,
"scan_points_bias": null,
"step_size_bias": { "@units": null }
},
"scan_region": {
"scan_end_bias": { "@units": null },
"scan_offset_bias": { "@units": null },
"scan_range_bias": { "@units": null },
"scan_start_bias": { "@units": null }
},
"settling_time": { "@units": null }
}
},
"independent_controllers": null,
"measurement_sensors": null
},
"head_temperature_sensor": null,
"cryo_shield_temperature_sensor": null,
"cryo_bottom_temperature_sensor": null,
"height_piezo_sensor": {
"piezo_configuration": {
"calibration": {
"calibration_type": {
"raw_path": "@default:active"
},
"calibration_date": {
"raw_path": ""
},
"calibration_parameters": {
"coefficientN[coefficient_n]": [
{
"x": {
"raw_path": "/Piezo Calibration/Calib. X",
"@units": "/Piezo Calibration/Calib. X/@unit"
}
},
{
"y": {
"raw_path": "/Piezo Calibration/Calib. Y",
"@units": "/Piezo Calibration/Calib. Y/@unit"
}
},
{
"z": {
"raw_path": "/Piezo Calibration/Calib. Z",
"@units": "/Piezo Calibration/Calib. Z/@unit"
}
}
],
"second_order_correctionN[second_order_correction_n]": [
{
"x": {
"raw_path": "/Piezo Calibration/2nd order corr X",
"@units": "/Piezo Calibration/2nd order corr X/@unit"
}
},
{
"y": {
"raw_path": "/Piezo Calibration/2nd order corr Y",
"@units": "/Piezo Calibration/2nd order corr Y/@unit"
}
},
{
"z": {
"raw_path": "/Piezo Calibration/2nd order corr Z",
"@units": "/Piezo Calibration/2nd order corr Z/@unit"
}
}
]
},
"calibration_name": {
"raw_path": "/Piezo Calibration/Active Calib."
},
"driftN[drift_n]": [
{
"x": {
"raw_path": "/Piezo Calibration/Drift X",
"@units": "/Piezo Calibration/Drift X/@unit"
}
},
{
"y": {
"raw_path": "/Piezo Calibration/Drift Y",
"@units": "/Piezo Calibration/Drift Y/@unit"
}
},
{
"z": {
"raw_path": "/Piezo Calibration/Drift Z",
"@units": "/Piezo Calibration/Drift Z/@unit"
}
}
],
"drift_correction_status": {
"raw_path": [
"/Piezo Configuration/Drift correction status",
"/Piezo Calibration/Drift correction status"
]
},
"hv_gainN[hv_gain_n]": [
{ "x": { "raw_path": "/Piezo Calibration/HV Gain X" } },
{ "y": { "raw_path": "/Piezo Calibration/HV Gain Y" } },
{ "z": { "raw_path": "/Piezo Calibration/HV Gain Z" } }
],
"tiltN[tilt_n]": [
{
"x": {
"raw_path": "/Piezo Calibration/Tilt X",
"@units": "/Piezo Calibration/Tilt X/@unit"
}
},
{
"y": {
"raw_path": "/Piezo Calibration/Tilt Y",
"@units": "/Piezo Calibration/Tilt X/@unit"
}
}
]
},
"piezo_material": {
"curvature_radiusN": [
{
"x": {
"raw_path": "/Piezo Calibration/Curvature radius X",
"@units": "/Piezo Calibration/Curvature radius X/@unit"
}
},
{
"y": {
"raw_path": "/Piezo Calibration/Curvature radius Y",
"@units": "/Piezo Calibration/Curvature radius Y/@unit"
}
}
]
}
},
"SPM_POSITIONER[spm_positioner]": {
"z_controller": {
"K_i": { "raw_path": "/Z-Controller/P gain" },
"K_p": { "raw_path": "/Z-Controller/I gain" },
"set_point": {
"raw_path": "/Z-Controller/Setpoint",
"@units": "/Z-Controller/Setpoint unit"
},
"D_t": {
"raw_path": "/Z-Controller/Time const",
"@units": "/Z-Controller/Time const/@unit"
},
"tip_lift": {
"raw_path": "/Z-Controller/TipLift",
"@units": "/Z-Controller/TipLift/@unit"
},
"z": {
"raw_path": "/Z-Controller/Z",
"@units": "/Z-Controller/Z/@unit"
},
"feedback_on": {
"raw_path": "/Z-Controller/Controller status"
},
"switch_off_delay": {
"raw_path": "/Z-Controller/Switch off delay",
"@units": "/Z-Controller/Switch off delay/@unit"
},
"controller_label": { "raw_path": "/Z-Controller/Controller name" }
},
"z_offset_value": "",
"tip_position_z": ""
},
"x": { "@units": null },
"y": { "@units": null },
"z": {
"raw_path": "/Z-Controller/Z",
"@units": "/Z-Controller/Z/@unit"
}
},
"SCAN_ENVIRONMENT[scan_environment]": {
"head_temperature": {
"raw_path": "/Temperature 1/Temperature 1",
"@units": "@default:K"
},
"cryo_bottom_temperature": null,
"cryo_shield_temperature": null,
"identifier_environment": { "raw_path": "/Scan/series name" },
"SPM_SCAN_CONTROL[spm_scan_control]": {
"scanTAG[scan_name]": { "raw_path": "/Scan/series name" },
"scan_region": {
"scan_angleN[scan_angle_n]": {
"raw_path": "/SCAN/ANGLE",
"@units": "@default:deg"
},
"scan_offset_valueN[scan_offset_value_n]": {
"#note": "Derived in function 'construct_scan_region_grp'.",
"raw_path": "/SCAN/OFFSET",
"@units": "/Z-Controller/Z/@unit"
},
"scan_rangeN[scan_range_n]": {
"#note": "Derived in function 'construct_scan_region_grp'.",
"raw_path": "/SCAN/RANGE",
"@units": "/Z-Controller/Z/@unit"
}
},
"meshSCAN[mesh_scan]": {
"backward_speedN[backward_speed_n]": {
"#note": "Derived in construct_scan_pattern_grp",
"raw_path": "/Scan/speed backw.",
"@units": "/Scan/speed backw./@unit"
},
"forward_speedN[forward_speed_n]": {
"#note": "Derived in construct_scan_pattern_grp",
"raw_path": "/Scan/speed forw.",
"@units": "/Scan/speed forw./@unit"
},
"scan_speedN[scan_speed_n]": "",
"channelNAME[scan_name_n]": "",
"scan_pointsN[scan_points_n]": {
"#note": "Derived in construct_scan_pattern_grp",
"raw_path": "/SCAN/PIXELS",
"@units": ""
},
"steppingN[stepping_n]": [
{
"_x": {
"raw_path": "@default:1",
"@units": ""
}
},
{
"_y": {
"raw_path": "@default:1",
"@units": ""
}
}
],
"step_sizeN[step_size_n]": { "raw_path": "", "@units": "" },
"scan_time": "",
"DATA[scan_data]": [
{
"data": {
"name": "input_4",
"raw_path": "/Input_4/forward",
"@units": "/DATA/INFO/Input_4/Unit"
},
"title": {
"raw_path": "@default:Input-4 Plot of AFM Experiment (Forward Direction)"
},
"grp_name": "input_4_forward"
},
{
"data": {
"name": "input_4",
"raw_path": "/Input_4/backward",
"@units": "/DATA/INFO/Input_4/Unit"
},
"title": {
"raw_path": "@default:Input-4 Plot of AFM Experiment (Backward Direction)"
},
"grp_name": "input_4_backward"
},
{
"data": {
"name": "lix_1_omega",
"raw_path": "/LIX_1_omega/forward",
"@units": "/DATA/INFO/LIX_1_omega/Unit"
},
"title": {
"raw_path": "@default:Lockin X-1 Plot of AFM Experiment (Forward Direction)"
},
"grp_name": "lix_1_omega_forward"
},
{
"data": {
"name": "lix_1_omega",
"raw_path": "/LIX_1_omega/backward",
"@units": "/DATA/INFO/LIX_1_omega/Unit"
},
"title": {
"raw_path": "@default:Lockin X-1 Plot of AFM Experiment (Backward Direction)"
},
"grp_name": "lix_1_omega_backward"
},
{
"data": {
"name": "liy_1_omega",
"raw_path": "/LIY_1_omega/forward",
"@units": "/DATA/INFO/LIY_1_omega/Unit"
},
"title": {
"raw_path": "@default:Lockin Y-1 Plot of AFM Experiment (Forward Direction)"
},
"grp_name": "liy_1_omega_forward"
},
{
"data": {
"name": "liy_1_omega",
"raw_path": "/LIY_1_omega/backward",
"@units": "/DATA/INFO/LIY_1_omega/Unit"
},
"title": {
"raw_path": "@default:Lockin Y-1 Plot of AFM Experiment (Backward Direction)"
},
"grp_name": "liy_1_omega_backward"
},
{
"data": {
"name": "frequency_shift",
"raw_path": "/Frequency_Shift/forward",
"@units": "/DATA/INFO/Frequency_Shift/Unit"
},
"title": {
"raw_path": "@default:Frequency Shift Plot of AFM Experiment (Forward Direction)"
},
"grp_name": "frequency_shift_forward"
},
{
"data": {
"name": "frequency_shift",
"raw_path": "/Frequency_Shift/backward",
"@units": "/DATA/INFO/Frequency_Shift/Unit"
},
"title": {
"raw_path": "@default:Frequency Shift Plot of AFM Experiment (Backward Direction)"
},
"grp_name": "frequency_shift_backward"
}
]
},
"independent_scan_axes": {
"#note": "Derived in scan pattern group.",
"raw_path": "/SCAN/DIR",
"@units": ""
},
"scan_resolutionN[scan_resolution_n]": "",
"accuracyN": "",
"scan_type": { "raw_path": "@default:mesh", "@units": "" },
"scan_control_type": {
"raw_path": "@default:continuous",
"@units": ""
}
},
"cryo_shield_temperature_sensor": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/cryo_shield_temperature_sensor",
"cryo_bottom_temperature_sensor": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/cryo_bottom_temperature_sensor",
"head_temperature_sensor": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/head_temperature_sensor"
},
"real_time_controller": {
"fabrication": {
"model": {
"raw_path": "/NanonisMain/RT Release/value"
}
},
"frequency": {
"raw_path": "/NanonisMain/RT Frequency",
"@units": "/NanonisMain/RT Frequency/@unit"
},
"acquisition_time": {
"raw_path": "/NanonisMain/Acquisition Period",
"@units": "/NanonisMain/Acquisition Period/@unit"
},
"animation_time": {
"raw_path": "/NanonisMain/Animations Period",
"@units": "/NanonisMain/Animations Period/@unit"
},
"measurement_time": {
"raw_path": "/NanonisMain/Measurements Period",
"@units": "/NanonisMain/Measurements Period/@unit"
},
"indication_time": {
"raw_path": "/NanonisMain/Indicators Period",
"@units": "/NanonisMain/Indicators Period/@unit"
}
},
"sample_bias_voltage": {
"bias_voltage": {
"raw_path": "/Bias/Bias",
"@units": "/Bias/Bias/@unit"
},
"bias_offset_value": {
"raw_path": "/Bias/Offset",
"@units": "/Bias/Offset/@unit"
},
"calibration": {
"calibration_parameters": {
"coefficient": {
"raw_path": "/Bias/Calibration",
"@units": "/Bias/Calibration/@unit"
}
},
"calibration_time": ""
}
}
},
"DATA[data]": [
{
"data": {
"name": "Z",
"raw_path": "/Z/forward",
"@units": "/DATA/INFO/Z/Unit"
},
"title": {
"raw_path": "@default:Height Plot of AFM Experiment (Forward Direction)"
},
"grp_name": "z_forward"
},
{
"data": {
"name": "Z",
"raw_path": "/Z/backward",
"@units": "/DATA/INFO/Z/Unit"
},
"title": {
"raw_path": "@default:Height Plot of AFM Experiment (Backward Direction)"
},
"grp_name": "z_backward"
},
{
"data": {
"name": "Excitation",
"raw_path": "/Excitation/forward",
"@units": "/DATA/INFO/Excitation/Unit"
},
"title": {
"raw_path": "@default:Excitation (Forward)"
},
"grp_name": "excitation_forward"
},
{
"data": {
"name": "Excitation",
"raw_path": "/Excitation/backward",
"@units": "/DATA/INFO/Excitation/Unit"
},
"title": {
"raw_path": "@default:Excitation (Backward)"
},
"grp_name": "excitation_backward"
},
{
"data": {
"name": "Phase",
"raw_path": "/Phase/Forward",
"@units": "/DATA/INFO/Phase/Unit"
},
"title": {
"raw_path": "@default:Phase (Forward)"
},
"grp_name": "phase_forward"
},
{
"data": {
"name": "Phase",
"raw_path": "/Phase/Backward",
"@units": "/DATA/INFO/Phase/Unit"
},
"title": {
"raw_path": "@default:Phase (Backward)"
},
"grp_name": "phase_backward"
},
{
"data": {
"name": "Current",
"raw_path": "/Current/forward",
"@units": "/DATA/INFO/Current/Unit"
},
"title": {
"raw_path": "@default:Current Topography (Forward)"
},
"grp_name": "current_forward"
},
{
"data": {
"name": "Current",
"raw_path": "/Current/backward",
"@units": "/DATA/INFO/Current/Unit"
},
"title": {
"raw_path": "@default:Current Topography (Backward)"
},
"grp_name": "current_backward"
}
],
"reproducibility_indicators": {
"cantilever_head_temperature": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/scan_environment/head_temperature",
"cryo_bottom_temperature": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/scan_environment/cryo_bottom_temperature",
"cryo_shield_temperature": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/scan_environment/cryo_shield_temperature",
"cantilever_oscillator": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/cantilever_spm/cantilever_oscillator"
},
"resolution_indicators": {
"cantilever_head_temperature": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/scan_environment/head_temperature",
"cryo_bottom_temperature": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/scan_environment/cryo_bottom_temperature",
"cryo_shield_temperature": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/scan_environment/cryo_shield_temperature",
"oscillator_excitation": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/cantilever_spm/cantilever_config/amplitude_excitation",
"amplitude_excitation": "@default_link:/ENTRY[entry]/INSTRUMENT[instrument]/phase_lock_loop/amplitude_excitation"
}
}
}
{
"ENTRY[entry]": {
"@default": {
"raw_path": "@default:height"
},
"start_time": {
"#note": "Handled in function _set_start_end_time. SPMLab writes a non ISO8601 stamp, e.g. 'Jun.17.2026 08:03:43'.",
"raw_path": "/CHANNEL/meta/CreationTime"
},
"end_time": "",
"scan_mode": {
"raw_path": "@default:peak force tapping mode"
},
"scan_type": "",
"identifier_experiment": {
"identifier": ""
},
"experiment_description": "",
"INSTRUMENT[instrument]": {
"height_piezo_sensor": {
"piezo_configuration": {
"calibration": {
"calibration_type": {
"raw_path": "@default:active"
},
"calibration_parameters": {
"coefficientN[coefficient_n]": [
{
"x": {
"raw_path": "/CHANNEL/meta/X Transfer Coefficient",
"@units": "/CHANNEL/meta/X Transfer Coefficient/@unit"
}
},
{
"y": {
"raw_path": "/CHANNEL/meta/Y Transfer Coefficient",
"@units": "/CHANNEL/meta/Y Transfer Coefficient/@unit"
}
},
{
"z": {
"raw_path": "/CHANNEL/meta/Z Transfer Coefficient",
"@units": "/CHANNEL/meta/Z Transfer Coefficient/@unit"
}
}
]
}
}
},
"SPM_POSITIONER[spm_positioner]": {
"z_controller": {
"K_p": {
"raw_path": "/CHANNEL/meta/GainP"
},
"K_i": {
"raw_path": "/CHANNEL/meta/GainI"
},
"K_d": {
"raw_path": "/CHANNEL/meta/GainD"
},
"set_point": {
"raw_path": "/CHANNEL/meta/SetPoint",
"@units": "/CHANNEL/meta/SetPoint/@unit"
},
"controller_label": {
"raw_path": "@default:z_controller"
}
}
}
},
"XYZpiezo_sensor[xy_piezo_sensor]": {
"SPM_POSITIONER[x_positioner]": {
"actuator": {
"feedback": {
"K_p": {
"raw_path": "/CHANNEL/meta/XLinGainP"
},
"K_i": {
"raw_path": "/CHANNEL/meta/XLinGainI"
},
"K_d": {
"raw_path": "/CHANNEL/meta/XLinGainD"
}
}
}
},
"SPM_POSITIONER[y_positioner]": {
"actuator": {
"feedback": {
"K_p": {
"raw_path": "/CHANNEL/meta/YLinGainP"
},
"K_i": {
"raw_path": "/CHANNEL/meta/YLinGainI"
},
"K_d": {
"raw_path": "/CHANNEL/meta/YLinGainD"
}
}
}
}
},
"SCAN_ENVIRONMENT[scan_environment]": {
"identifier_environment": {
"raw_path": "/CHANNEL/meta/DataID"
},
"SPM_SCAN_CONTROL[spm_scan_control]": {
"scanTAG[scan_name]": {
"raw_path": "/CHANNEL/meta/DataID"
},
"scan_region": {
"scan_angleN[scan_angle_n]": [
{
"x": {
"raw_path": "/CHANNEL/meta/Rotation",
"@units": "/CHANNEL/meta/Rotation/@unit"
}
}
],
"scan_rangeN[scan_range_n]": [
{
"x": {
"#note": "Derived in function 'construct_scan_region_grp'.",
"raw_path": "/CHANNEL/header/Data Parameters/ScanRangeX",
"@units": "/CHANNEL/header/Data Parameters/ScanRangeX/@unit"
}
},
{
"y": {
"#note": "Derived in function 'construct_scan_region_grp'.",
"raw_path": "/CHANNEL/header/Data Parameters/ScanRangeY",
"@units": "/CHANNEL/header/Data Parameters/ScanRangeY/@unit"
}
}
],
"scan_offset_valueN[scan_offset_value_n]": [
{
"x": {
"#note": "Derived in function 'construct_scan_region_grp'.",
"raw_path": "/CHANNEL/header/Data Parameters/OffsetX",
"@units": "/CHANNEL/header/Data Parameters/OffsetX/@unit"
}
},
{
"y": {
"#note": "Derived in function 'construct_scan_region_grp'.",
"raw_path": "/CHANNEL/header/Data Parameters/OffsetY",
"@units": "/CHANNEL/header/Data Parameters/OffsetY/@unit"
}
}
],
"scan_startN[scan_start_n]": {
"#note": "Derived in function 'construct_scan_region_grp'.",
"raw_path": "",
"@units": ""
},
"scan_endN[scan_end_n]": {
"#note": "Derived in function 'construct_scan_region_grp'.",
"raw_path": "",
"@units": ""
}
},
"meshSCAN[mesh_scan]": {
"scan_pointsN[scan_points_n]": [
{
"x": {
"raw_path": "/CHANNEL/header/Data Parameters/ResolutionX"
}
},
{
"y": {
"raw_path": "/CHANNEL/header/Data Parameters/ResolutionY"
}
}
],
"forward_speedN[forward_speed_n]": {
"#note": "Decided from ScanDirection and ScanningRate",
"raw_path": "/CHANNEL/meta/ScanningRate",
"@units": "/CHANNEL/meta/ScanningRate/@unit"
},
"backward_speedN[backward_speed_n]": {
"#note": "Decided from ScanDirection and ScanningRate",
"raw_path": "/CHANNEL/meta/ScanningRate",
"@units": "/CHANNEL/meta/ScanningRate/@unit"
},
"scan_speedN[scan_speed_n]": {
"raw_path": "/CHANNEL/meta/ScanningRate",
"@units": "/CHANNEL/meta/ScanningRate/@unit"
},
"steppingN[stepping_n]": [
{
"_x": {
"raw_path": "@default:1",
"@units": ""
}
},
{
"_y": {
"raw_path": "@default:1",
"@units": ""
}
}
],
"scan_time": "",
"DATA[scan_data]": [
{
"data": {
"name": "channel",
"raw_path": "/CHANNEL/data",
"@units": "/CHANNEL/data/@unit"
},
"title": {
"raw_path": "@default:AFM Scan Image"
},
"grp_name": "scan_image"
}
]
},
"scan_type": {
"raw_path": "@default:mesh"
},
"scan_control_type": {
"raw_path": "@default:continuous"
}
}
}
},
"DATA[data]": [
{
"data": {
"name": "height",
"raw_path": "/CHANNEL/data",
"@units": "/CHANNEL/data/@unit"
},
"title": {
"raw_path": "@default:AFM Scan Image"
},
"grp_name": "height"
}
],
"SAMPLE[sample]": {
"name": ""
},
"USER[user]": {
"address": "",
"affiliation": "",
"email": "",
"name": "",
"orcid": "",
"telephone_number": ""
}
}
}
{
"ENTRY[entry]": {
"@default": {
"raw_path": "@default:z_forward"
},
"start_time": {
"#note": "Handled in function _set_start_end_time"
},
"end_time": {
"#note": "Handled in function _set_start_end_time"
},
"scan_mode": "",
"scan_type": "",
"identifier_experiment": { "identifier": "" },
"experiment_description": { "raw_path": "/Text" },
"INSTRUMENT[instrument]": {
"SPM_CANTILEVER[spm_cantilever]": {
"cantilever_oscillator": {
"reference_amplitude": {
"raw_path": "Free Amplitude * Setpoint/Amplitude Ratio * @Sens. AmplSens",
"@units": "Free Amplitide unit from @2:TMSetAmplitude:"
},
"reference_frequency": {
"raw_path": "@2:ReferenceFrequencyTappingMode if experiment in TM else @2:CantFrequencyContactMode",
"@units": "unit comes from raw_path"
},
"reference_phase": {
"raw_path": "@2:CantPhase",
"@units": "@default:deg"
},
"frequency_bandwidth": {
"raw_path": "@2:CantFrequency / Torsional Q",
"@units": "from @2:CantFrequency"
},
"frequency_harmonic": { "raw_path": "Harmonics To Correct" },
"frequency_shift": {
"raw_path": "/Phase Shift",
"@units": ""
},
"frequency_cutoff": {
"raw_path": "Adaptive x CutOffFreq",
"@units": "@default:Hz"
},
"target_amplitude": "",
"active_frequency": ""
},
"cantilever_config": {
"amplitude_excitation": {
"raw_path": "",
"@units": ""
},
"spring_constant": {
"raw_path": "",
"@units": ""
}
},
"phase_positioner": {
"actuator": {
"feedback": {
"K_p": {
"raw_path": ""
},
"K_i": {
"raw_path": ""
},
"K_d": "",
"D_t": ""
}
}
},
"amplitude_positioner": {
"actuator": {
"feedback": {
"K_p": {
"raw_path": "Tapping Engage Fast P Gain"
},
"K_i": {
"raw_path": "Tapping Engage Fast I Gain"
},
"K_d": "",
"D_t": ""
}
}
}
},
"phase_lock_loop": {
"loop_filter": {
"Kf_coefficient": {
"raw_path": "",
"@units": ""
}
},
"frequency_bandwidth": {
"raw_path": "",
"@units": ""
},
"phase_bandwidth": {
"raw_path": "@2:LockInBW1",
"@units": "@default:kHz"
},
"phase_detector": {
"reference_frequency": "dd"
}
},
"lockin_amplifier": {
"reference_frequency": {
"raw_path": "/Scanner_list/0/@2:ReferenceFrequencyTappingMode",
"@units": "@default:Hz"
},
"modulation_signal": {
"raw_path": ""
},
"demodulated_signal": {
"raw_path": ""
},
"modulation_status": { "raw_path": "" },
"demodulated_frequency": "",
"demodulated_amplitude": "",
"demodulator_channels": "",
"recorded_channels": "",
"ref_offset_phaseN[ref_offset_phase_n]": {
"raw_path": "",
"@units": ""
},
"harmonic_orderN[harmonic_order_n]": {
"raw_path": ""
}
},
"bias_spectroscopy_environment": {
"BIAS_SPECTROSCOPY[bias_spectroscopy]": {
"bias_sweep": {
"linear_sweep": {
"reset_bias": null,
"scan_points_bias": null,
"step_size_bias": { "@units": null }
},
"scan_region": {
"scan_end_bias": { "@units": null },
"scan_offset_bias": { "@units": null },
"scan_range_bias": { "@units": null },
"scan_start_bias": { "@units": null }
},
"settling_time": { "@units": null }
}
},
"independent_controllers": null,
"measurement_sensors": null
},
"head_temperature_sensor": null,
"cryo_shield_temperature_sensor": null,
"cryo_bottom_temperature_sensor": null,
"height_piezo_sensor": {
"piezo_configuration": {
"calibration": {
"calibration_type": {
"raw_path": "@default:active"
},
"calibration_date": {
"raw_path": ""
},
"calibration_parameters": {
"coefficientN[coefficient_n]": [
{
"x": {
"raw_path": "",
"@units": ""
}
},
{
"y": {
"raw_path": "",
"@units": ""
}
},
{
"z": {
"raw_path": "",
"@units": ""
}
}
],
"second_order_correctionN[second_order_correction_n]": [
{
"x": {
"raw_path": "",
"@units": ""
}
},
{
"y": {
"raw_path": "",
"@units": ""
}
},
{
"z": {
"raw_path": "",
"@units": ""
}
}
]
},
"calibration_name": {
"raw_path": ""
},
"driftN[drift_n]": [
{
"x": {
"raw_path": "",
"@units": ""
}
},
{
"y": {
"raw_path": "",
"@units": ""
}
},
{
"z": {
"raw_path": "",
"@units": ""
}
}
],
"drift_correction_status": {
"raw_path": ["", ""]
},
"hv_gainN[hv_gain_n]": [
{ "x": { "raw_path": "" } },
{ "y": { "raw_path": "" } },
{ "z": { "raw_path": "" } }
],
"tiltN[tilt_n]": [
{
"x": {
"raw_path": "",
"@units": ""
}
},
{
"y": {
"raw_path": "",
"@units": ""
}
}
]
},
"piezo_material": {
"curvature_radiusN": [
{
"x": {
"raw_path": "",
"@units": ""
}
},
{
"y": {
"raw_path": "",
"@units": ""
}
}
]
}
},
"SPM_POSITIONER[spm_positioner]": {
"z_controller": {
"K_i": { "raw_path": "" },
"K_p": { "raw_path": "" },
"set_point": {
"raw_path": "",
"@units": ""
},
"D_t": {
"raw_path": "",
"@units": ""
},
"tip_lift": {
"raw_path": "",
"@units": ""
},
"z": {
"raw_path": "",
"@units": ""
},
"feedback_on": {
"raw_path": ""
},
"switch_off_delay": {
"raw_path": "",
"@units": ""
},
"controller_label": { "raw_path": "" }
},
"z_offset_value": "",
"tip_position_z": ""
},
"x": { "@units": null },
"y": { "@units": null },
"z": {
"raw_path": "",
"@units": ""
}
},
"SCAN_ENVIRONMENT[scan_environment]": {
"head_temperature": {
"raw_path": "",
"@units": ""
},
"cryo_bottom_temperature": null,
"cryo_shield_temperature": null,
"identifier_environment": { "raw_path": "" },
"SPM_SCAN_CONTROL[spm_scan_control]": {
"#note": "This entire group is handled in _construct_nxscan_controllers",
"scanTAG[scan_name]": { "raw_path": "" },
"scan_region": {
"scan_angleN[scan_angle_n]": {
"raw_path": "/Scanner_list/0/Rotate_Ang.",
"@units": "@default:deg"
},
"scan_offset_valueN[scan_offset_value_n]": [
{
"x": {
"raw_path": "/Scanner_list/0/X_Offset",
"@units": "@default:nm"
}
},
{
"y": {
"raw_path": "/Scanner_list/0/Y_Offset",
"@units": "@default:nm"
}
}
],
"scan_startN[scan_start_n]": [
{
"x": {
"raw_path": "/Scanner_list/0/X_Position",
"@units": "@default:nm"
}
},
{
"y": {
"raw_path": "/Scanner_list/0/Y_Position",
"@units": "@default:nm"
}
}
],
"scan_rangeN[scan_range_n]": {
"#note": "Aspect_Ratio is also needed to calculate the scan range",
"raw_path": "/Scanner_list/0/Scan_Size",
"@units": "@default:nm"
}
},
"meshSCAN[mesh_scan]": {
"backward_speedN[backward_speed_n]": {
"raw_path": "",
"@units": ""
},
"forward_speedN[forward_speed_n]": {
"raw_path": "",
"@units": ""
},
"scan_speedN[scan_speed_n]": "",
"channelNAME[scan_name_n]": "",
"scan_pointsN[scan_points_n]": [
{
"x": {
"raw_path": "/Scanner_list/0/Samps/line"
}
},
{
"y": {
"raw_path": "/Scanner_list/0/Lines"
}
}
],
"steppingN[stepping_n]": [
{
"_x": {
"raw_path": "",
"@units": ""
}
},
{
"_y": {
"raw_path": "",
"@units": ""
}
}
],
"step_sizeN[step_size_n]": "",
"scan_time": "",
"DATA[scan_data]": [
{
"data": {
"name": "",
"raw_path": "",
"@units": ""
},
"title": {
"@default": ""
},
"grp_name": ""
}
]
},
"independent_scan_axes": {
"#note": "",
"raw_path": "",
"@units": ""
},
"scan_resolutionN[scan_resolution_n]": "",
"accuracyN": "",
"scan_type": { "raw_path": "", "@units": "" },
"scan_control_type": {
"raw_path": "",
"@units": ""
}
},
"cryo_shield_temperature_sensor": "",
"cryo_bottom_temperature_sensor": "",
"head_temperature_sensor": ""
}
},
"DATA[data]": [
{
"data": {
"name": "z",
"raw_path": "/Height_Sensor/forward",
"@units": "@default:nm"
},
"title": {
"raw_path": "@default:Height Plot of AFM Experiment (Forward Direction)"
},
"grp_name": "z_forward"
},
{
"data": {
"name": "z",
"raw_path": "/Height_Sensor/backward",
"@units": "@default:nm"
},
"title": {
"raw_path": "@default:Height Plot of AFM Experiment (Backward Direction)"
},
"grp_name": "z_backward"
},
{
"data": {
"name": "amplitude_error",
"raw_path": "/Amplitude_Error/forward",
"@units": "@default:nm"
},
"title": {
"raw_path": "@default:Amplitude Error Plot of AFM Experiment (Forward Direction)"
},
"grp_name": "amplitude_error_forward"
},
{
"data": {
"name": "amplitude_error",
"raw_path": "/Amplitude_Error/backward",
"@units": "@default:nm"
},
"title": {
"raw_path": "@default:Amplitude Error Plot of AFM Experiment (Backward Direction)"
},
"grp_name": "amplitude_error_backward"
},
{
"data": {
"name": "phase",
"raw_path": "/Phase/forward",
"@units": "@default:deg"
},
"title": {
"raw_path": "@default:Phase Plot of AFM Experiment (Forward Direction)"
},
"grp_name": "phase_forward"
},
{
"data": {
"name": "phase",
"raw_path": "/Phase/backward",
"@units": "@default:deg"
},
"title": {
"raw_path": "@default:Phase Plot of AFM Experiment (Backward Direction)"
},
"grp_name": "phase_backward"
},
{
"data": {
"name": "amplitude",
"raw_path": "/Amplitude/forward",
"@units": "@default:nm"
},
"title": {
"raw_path": "@default:Amplitude Plot of AFM Experiment (Forward Direction)"
},
"grp_name": "amplitude_forward"
},
{
"data": {
"name": "amplitude",
"raw_path": "/Amplitude/backward",
"@units": "@default:nm"
},
"title": {
"raw_path": "@default:Amplitude Plot of AFM Experiment (Backward Direction)"
},
"grp_name": "amplitude_backward"
},
{
"data": {
"name": "tm_deflection",
"raw_path": "/TM_Deflection/forward",
"@units": "@default:nm"
},
"title": {
"raw_path": "@default:TM Deflection Plot of AFM Experiment (Forward Direction)"
},
"grp_name": "tm_deflection_forward"
},
{
"data": {
"name": "tm_deflection",
"raw_path": "/TM_Deflection/backward",
"@units": "@default:nm"
},
"title": {
"raw_path": "@default:TM Deflection Plot of AFM Experiment (Backward Direction)"
},
"grp_name": "tm_deflection_backward"
}
]
}
}
{
"ENTRY[entry]": {
"@default": {
"raw_path": "@default:deflection_retrace"
},
"start_time": {
"#note": "Handled in function _set_start_end_time",
"raw_path": "/Force_file_list/0/Date"
},
"end_time": {
"#note": "Handled in function _set_start_end_time"
},
"scan_mode": {
"raw_path": "@default:non-contact mode",
"@units": ""
},
"scan_type": {
"raw_path": "@default:Approach and retrace"
},
"identifier_experiment": { "identifier": "" },
"experiment_description": { "raw_path": "" },
"INSTRUMENT[instrument]": {
"hardware": {
"vendor": { "raw_path": "" },
"model": { "raw_path": "" }
},
"software": {
"vendor": { "raw_path": "" },
"model": { "raw_path": "" }
},
"SPM_CANTILEVER[spm_cantilever]": {
"cantilever_oscillator": {
"reference_amplitude": {
"raw_path": "/Ciao_scan_list/0/Free_Amplitude",
"@units": "@default:mV"
},
"reference_frequency": {
"raw_path": "/Ciao_scan_list/0/@2:CantFrequency",
"@units": "/Ciao_scan_list/0/@2:CantFrequency/unit"
},
"reference_phase": {
"raw_path": "",
"@units": "@default:deg"
},
"frequency_bandwidth": {
"raw_path": "",
"@units": ""
},
"frequency_harmonic": {
"raw_path": "/Ciao_scan_list/0/Harmonics_To_Correct"
},
"frequency_shift": {
"raw_path": "",
"@units": ""
},
"frequency_cutoff": {
"raw_path": "/Scanner_list/0/Adaptive_x_CutOffFreq",
"@units": "@default:Hz"
},
"amplitude_setpoint": {
"#note": "Handled in _construct_cantilever_oscillator: amplitude_setpoint = Amplitude_Ratio x reference_amplitude",
"raw_path": "/Ciao_scan_list/0/Setpoint/Amplitude_Ratio"
},
"active_frequency": ""
},
"cantilever_config": {
"amplitude_excitation": "",
"spring_constant": {
"raw_path": "/Ciao_force_image_list/0/Spring_Constant",
"@units": "@default:N/m"
}
},
"phase_positioner": {
"actuator": {
"feedback": {
"K_p": { "raw_path": "" },
"K_i": { "raw_path": "" },
"K_d": "",
"D_t": ""
}
}
},
"amplitude_positioner": {
"actuator": {
"feedback": {
"K_p": { "raw_path": "" },
"K_i": { "raw_path": "" },
"K_d": "",
"D_t": ""
}
}
}
},
"phase_lock_loop": {
"loop_filter": {
"Kf_coefficient": {
"raw_path": "",
"@units": ""
}
},
"frequency_bandwidth": {
"raw_path": "",
"@units": ""
},
"phase_bandwidth": {
"raw_path": "",
"@units": "@default:Hz"
},
"phase_detector": {
"reference_frequency": ""
}
},
"head_temperature_sensor": null,
"cryo_shield_temperature_sensor": null,
"cryo_bottom_temperature_sensor": null,
"height_piezo_sensor": {
"piezo_configuration": {
"calibration": {
"calibration_type": {
"raw_path": "@default:active"
},
"calibration_date": { "raw_path": "" },
"calibration_parameters": {
"coefficientN[coefficient_n]": [
{ "x": { "raw_path": "", "@units": "" } },
{ "y": { "raw_path": "", "@units": "" } },
{ "z": { "raw_path": "", "@units": "" } }
],
"second_order_correctionN[second_order_correction_n]": [
{ "x": { "raw_path": "", "@units": "" } },
{ "y": { "raw_path": "", "@units": "" } },
{ "z": { "raw_path": "", "@units": "" } }
]
},
"calibration_name": { "raw_path": "" },
"driftN[drift_n]": [
{ "x": { "raw_path": "", "@units": "" } },
{ "y": { "raw_path": "", "@units": "" } },
{ "z": { "raw_path": "", "@units": "" } }
],
"drift_correction_status": { "raw_path": ["", ""] },
"hv_gainN[hv_gain_n]": [
{ "x": { "raw_path": "" } },
{ "y": { "raw_path": "" } },
{ "z": { "raw_path": "" } }
],
"tiltN[tilt_n]": [
{ "x": { "raw_path": "", "@units": "" } },
{ "y": { "raw_path": "", "@units": "" } }
]
},
"piezo_material": {
"curvature_radiusN": [
{ "x": { "raw_path": "", "@units": "" } },
{ "y": { "raw_path": "", "@units": "" } }
]
}
},
"SPM_POSITIONER[spm_positioner]": {
"z_controller": {
"K_i": { "raw_path": "" },
"K_p": { "raw_path": "" },
"set_point": { "raw_path": "", "@units": "" },
"D_t": { "raw_path": "", "@units": "" },
"tip_lift": { "raw_path": "", "@units": "" },
"z": { "raw_path": "", "@units": "" },
"feedback_on": {
"raw_path": ""
},
"switch_off_delay": { "raw_path": "", "@units": "" },
"controller_label": { "raw_path": "" }
},
"z_offset_value": "",
"tip_position_z": ""
},
"x": { "@units": null },
"y": { "@units": null },
"z": { "raw_path": "", "@units": "" }
},
"SCAN_ENVIRONMENT[scan_environment]": {
"head_temperature": {
"raw_path": "/Ciao_force_list/0/Temperature_(Celsius)",
"@units": "@default:°C"
},
"cryo_bottom_temperature": null,
"cryo_shield_temperature": null,
"identifier_environment": { "raw_path": "" },
"SPM_SCAN_CONTROL[spm_scan_control]": {
"scanTAG[scan_name]": { "raw_path": "" },
"scan_region": {
"scan_offset_valueN[scan_offset_value_n]": [
{
"x": {
"raw_path": "/Ciao_scan_list/0/X_Offset",
"@units": "@default:nm"
}
},
{
"y": {
"raw_path": "/Ciao_scan_list/0/Y_Offset",
"@units": "@default:nm"
}
}
],
"scan_startN[scan_start_n]": [
{
"approach": {
"#note2": "handled in construct_scan_region_grp. todo: Collect from array data",
"raw_path": "",
"@units": ""
}
},
{
"retrace": {
"#note": "handled in construct_scan_region_grp. todo: Collect from array data",
"raw_path": "",
"@units": ""
}
}
],
"scan_endN[scan_end_n]": [
{
"approach": {
"raw_path": "",
"@units": ""
}
},
{
"retrace": {
"raw_path": "",
"@units": ""
}
}
]
},
"point_forceSCAN[point_force_scan]": {
"backward_speedN[backward_speed_retrace]": {
"raw_path": "",
"@units": ""
},
"forward_speedN[forward_speed_approach]": {
"raw_path": "",
"@units": ""
},
"scan_speedN[scan_speed_n]": "",
"scan_pointsN[scan_points_n]": [
{
"approach": {
"#note": "handled in construct_scan_pattern_grp",
"raw_path": "/Ciao_force_list/0/Samps/line",
"@units": "@default:dimensionless"
}
},
{
"retrace": {
"#note": "handled in construct_scan_pattern_grp",
"raw_path": "/Ciao_force_list/0/Samps/line",
"@units": "@default:dimensionless"
}
}
],
"steppingN[stepping_n]": [
{ "approach": { "raw_path": "", "@units": "" } },
{ "retrace": { "raw_path": "", "@units": "" } }
],
"step_sizeN[step_size_n]": [
{ "approach": { "raw_path": "", "@units": "" } },
{ "retrace": { "raw_path": "", "@units": "" } }
],
"scan_time": "",
"DATA[scan_data]": [
{
"data": { "name": "", "raw_path": "", "@units": "" },
"title": { "@default": "" },
"grp_name": ""
}
]
}
}
}
},
"DATA[data]": [
{
"data": {
"name": "deflection",
"raw_path": "/Defl_pN_Ex",
"@units": "/Defl_pN_Ex/unit"
},
"0": {
"name": "ramp",
"raw_path": "/Calc_Ramp_Ex_nm",
"@units": "/Calc_Ramp_Ex_nm/unit",
"axis_ind": 0
},
"title": {
"raw_path": "@default:Deflection Force vs Ramp (Extension)"
},
"grp_name": "deflection_extension"
},
{
"data": {
"name": "height_sensor",
"raw_path": "/Height_Sensor_nm_Ex",
"@units": "/Height_Sensor_nm_Ex/unit"
},
"0": {
"name": "ramp",
"raw_path": "/Calc_Ramp_Ex_nm",
"@units": "/Calc_Ramp_Ex_nm/unit",
"axis_ind": 0
},
"title": {
"raw_path": "@default:Height Sensor vs Ramp (Extension)"
},
"grp_name": "height_sensor_extension"
},
{
"data": {
"name": "deflection",
"raw_path": "/Defl_pN_Rt",
"@units": "/Defl_pN_Rt/unit"
},
"0": {
"name": "ramp",
"raw_path": "/Calc_Ramp_Rt_nm",
"@units": "/Calc_Ramp_Rt_nm/unit",
"axis_ind": 0
},
"title": {
"raw_path": "@default:Deflection Force vs Ramp (Retrace)"
},
"grp_name": "deflection_retrace"
},
{
"data": {
"name": "height_sensor",
"raw_path": "/Height_Sensor_nm_Rt",
"@units": "/Height_Sensor_nm_Rt/unit"
},
"0": {
"name": "ramp",
"raw_path": "/Calc_Ramp_Rt_nm",
"@units": "/Calc_Ramp_Rt_nm/unit",
"axis_ind": 0
},
"title": {
"raw_path": "@default:Height Sensor vs Ramp (Retrace)"
},
"grp_name": "height_sensor_retrace"
}
]
}
}
ELN Schema file¶
The ELN schema file is a yaml file which describes the metadata of the experiment. To know how to read this ELN schema file and modify it, please follow the section ELN Schema File in the How to work with readers guide. This file is only usable within the NOMAD RDM system.
definitions:
name: "STS_ELN_Example"
eln:
label: "STS ELN Example"
sections:
ELN_for_STS:
base_sections:
- pynxtools.nomad.schema_packages.dataconverter.NexusDataConverter
- nomad.datamodel.data.EntryData
m_annotations:
template:
reader: spm
nxdl: NXsts
eln:
hide: []
label: "ELN for STS"
quantities:
default:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
The name of the NXdata group that comes as child of the entry group for default plot visualization
to be displayed upon the entry of NeXus file.
definition:
type:
type_kind: Enum
type_data:
- NXsts
m_annotations:
eln:
component: EnumEditQuantity
description: |
Name of the definitions from NeXus app def designed for STS experiments, one can use
NXsts or NXspm, but NXsts is recommended.
experiment_technique:
type:
type_kind: Enum
type_data:
- STS
m_annotations:
eln:
component: EnumEditQuantity
description: |
Name of the technique used for the experiment, e.g. STS.
experiment_description:
type: str
m_annotations:
eln:
component: RichTextEditQuantity
description: |
Descriptive comments for this experiment, added by the experimenter in eln or
coming from the output file, e.g. Comment01 SYNC & Filter LP 8order WITHDRAW
600 steps, locked Au(111), 50pA, 100 mV set point, 1mV DCA, 973Hz,138
1st H, -84 2nd H.
identifier_experiment:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
An unique identifier fot the experiment. e.g. the identifier
could be specific for a lab or experiment team.
identifier_collection:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
An unique identifier of a collection. Use this
if the experiment if part of a collection of experiments
sub_sections:
User:
section:
m_annotations:
eln:
overview: true
quantities:
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the user who performed the experiment.
affiliation:
type: str
shape: "*"
m_annotations:
eln:
component: StringEditQuantity
description: |
Affiliation of the user who performed the experiment.
email:
type: str
shape: "*"
m_annotations:
eln:
component: StringEditQuantity
description: |
List of emails from users who performed the experiment.
Instrument:
section:
m_annotations:
eln:
overview: true
sub_sections:
hardware:
section:
m_annotations:
eln:
overview: true
quantities:
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the hardware. (e.g. Nanonis).
vendor:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the manufacturer of the hardware (e.g. Nanonis).
model:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Version or model of the component named by the manufacturer (e.g. Generic 5e).
model_version:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
If model has a distinguishable version (e.g. BP5e).
software:
section:
m_annotations:
eln:
overview: true
quantities:
vendor:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the manufacturer of the software.
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the software. (e.g. Nanonis).
model:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Version or model, required to choose correct file parser, of the component named
by the manufacturer (e.g. Generic 5e).
Note that model should be exactly the same as the one in the experiment file.
model_version:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
If model has a distinguishable version (e.g. BP5e).
lockin_amplifier:
section:
m_annotations:
eln:
overview: true
quantities:
modulation_signal:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Type of the signal either in voltage or current.
flip_sign:
type: np.float64
m_annotations:
eln:
component: NumberEditQuantity
description: |
The sign (1 or -1) that defines the sign of the lock-in current.
The calibration procedure with retracted tip is normally performed
to compensate for the signal phase delay in SPM. The procedure
yields two possible solutions, this number should be equal to 1 or -1
depending on which solution is chosen (this concept mainly used in
STS experiments, e.g. in Nanonis machine).
Scan_environment:
section:
m_annotations:
eln:
overview: true
quantities:
head_temperature:
type: np.float64
unit: kelvin
m_annotations:
eln:
component: NumberEditQuantity
defaultDisplayUnit: K
description: |
Temperature of STM head. Note: At least one field from head_temperature,
cryo_bottom_temperature and cryo_shield_temperature must be provided.
cryo_bottom_temperature:
type: np.float64
unit: kelvin
m_annotations:
eln:
component: NumberEditQuantity
defaultDisplayUnit: K
description: |
Temperature of the cold tail of the cryostat. Note:
At least one field from head_temperature, cryo_bottom_temperature and cryo_shield_temperature must be provided.
cryo_shield_temperature:
type: np.float64
unit: kelvin
m_annotations:
eln:
component: NumberEditQuantity
defaultDisplayUnit: K
description: |
Temperature of liquid nitrogen shield. Note: At
least one field from head_temperature, cryo_bottom_temperature and cryo_shield_temperature must be provided.
Sample:
section:
m_annotations:
eln:
overview: true
quantities:
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the sample.
chemical_formula:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
The chemical formula specified using CIF conventions.
Abbreviated version of CIF standard:
* Only recognized element symbols may be used.
* Each element symbol is followed by a 'count' number. A count of '1' may be omitted.
* A space or parenthesis must separate each cluster of (element symbol + count).
* Where a group of elements is enclosed in parentheses, the multiplier for the
group must follow the closing parentheses. That is, all element and group
multipliers are assumed to be printed as subscripted numbers.
* Unless the elements are ordered in a manner that corresponds to their chemical
structure, the order of the elements within any group or moiety depends on
whether or not carbon is present.
* If carbon is present, the order should be:
- C, then H, then the other elements in alphabetical order of their symbol.
- If carbon is not present, the elements are listed purely in alphabetic order of their symbol.
* This is the *Hill* system used by Chemical Abstracts.
description:
type: str
m_annotations:
eln:
component: RichTextEditQuantity
description: |
Description of the sample or sample preparation.
sub_sections:
Sample_component:
section:
m_annotations:
eln:
overview: true
description: |
A sample component is a part of the sample that is of interest.
For example, a sample component could be a layer of a multilayer sample.
quantities:
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the sample component.
identifier_component:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
An unique identifier for the sample component.
chemical_formula:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
The chemical formula specified using CIF conventions.
Abbreviated version of CIF standard:
* Only recognized element symbols may be used.
* Each element symbol is followed by a 'count' number. A count of '1' may be omitted.
* A space or parenthesis must separate each cluster of (element symbol + count).
* Where a group of elements is enclosed in parentheses, the multiplier for the
group must follow the closing parentheses. That is, all element and group
multipliers are assumed to be printed as subscripted numbers.
* Unless the elements are ordered in a manner that corresponds to their chemical
structure, the order of the elements within any group or moiety depends on
whether or not carbon is present.
* If carbon is present, the order should be:
- C, then H, then the other elements in alphabetical order of their symbol.
- If carbon is not present, the elements are listed purely in alphabetic order of their symbol.
* This is the *Hill* system used by Chemical Abstracts.
description:
type: str
m_annotations:
eln:
component: RichTextEditQuantity
description: |
Description of the sample component or sample preparation.
history:
section:
m_annotations:
eln:
overview: true
sub_sections:
Note:
section:
m_annotations:
eln:
overview: true
description: |
Notes about the sample history.
quantities:
description:
type: str
m_annotations:
eln:
component: RichTextEditQuantity
description: |
Title of an image or other details of the note.
quantities:
identifier_history:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Identifier for sample history.
definitions:
name: "STM_ELN_Example"
eln:
label: "STM ELN Example"
sections:
ELN_for_STM:
base_sections:
- pynxtools.nomad.schema_packages.dataconverter.NexusDataConverter
- nomad.datamodel.data.EntryData
m_annotations:
template:
reader: spm
nxdl: NXstm
eln:
hide: []
label: "ELN for STM"
quantities:
default:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
The name of the NXdata group that comes as child of the entry group for default plot visualization
to be displayed upon the entry of NeXus file.
definition:
type:
type_kind: Enum
type_data:
- NXstm
m_annotations:
eln:
component: EnumEditQuantity
description: |
Name of the definitions from NeXus app def designed for STM experiments,
e.g. NXstm.
experiment_technique:
type:
type_kind: Enum
type_data:
- STM
m_annotations:
eln:
component: EnumEditQuantity
description: |
Name of the technique used for the experiment, e.g. STM.
scan_mode:
type:
type_kind: Enum
type_data:
- constant height
- constant current
m_annotations:
eln:
component: EnumEditQuantity
description: |
Type of the scan mode to define the type of the interaction between
the tip and the sample.
experiment_description:
type: str
m_annotations:
eln:
component: RichTextEditQuantity
description: |
Descriptive comments for this experiment, added by the experimenter in eln or
coming from the output file, e.g. Comment01 SYNC & Filter LP 8order WITHDRAW
600 steps, locked Au(111), 50pA, 100 mV set point, 1mV DCA, 973Hz,138
1st H, -84 2nd H.
identifier_experiment:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
An unique identifier fot the experiment. e.g. the identifier
could be specific for a lab or experiment team.
identifier_collection:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
An unique identifier of a collection. Use this
if the experiment if part of a collection of experiments
sub_sections:
User:
repeats: True
section:
m_annotations:
eln:
overview: true
quantities:
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the user who performed the experiment.
affiliation:
type: str
shape: "*"
m_annotations:
eln:
component: StringEditQuantity
description: |
Affiliation of the user who performed the experiment.
email:
type: str
shape: "*"
m_annotations:
eln:
component: StringEditQuantity
description: |
List of emails from users who performed the experiment.
Instrument:
section:
m_annotations:
eln:
overview: true
sub_sections:
hardware:
section:
m_annotations:
eln:
overview: true
quantities:
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the hardware. (e.g. Nanonis).
vendor:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the manufacturer of the hardware (e.g. Nanonis).
model:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Version or model of the component named by the manufacturer (e.g. Nanonis).
model_version:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
If model has a distinguishable version (e.g. BP5e).
software:
section:
m_annotations:
eln:
overview: true
quantities:
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the software. (e.g. Nanonis).
vendor:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the manufacturer of the software (e.g. Nanonis).
model:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Version or model, required to choose correct file parser, of the component named
by the manufacturer (e.g. Generic 5e).
Note that the model should be exactly the same as in the experiment file.
model_version:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
If model has a distinguishable version (e.g. BP5e).
height_piezo_sensor:
section:
m_annotations:
eln:
overview: true
sub_sections:
piezo_configuration:
section:
m_annotations:
eln:
overview: true
sub_sections:
piezo_material:
section:
m_annotations:
eln:
overview: true
quantities:
identifier_piezo_material:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
An unique identifier for the piezo material.
lockin_amplifier:
section:
m_annotations:
eln:
overview: true
quantities:
modulation_signal:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Type of the signal either in voltage or current.
Scan_environment:
section:
m_annotations:
eln:
overview: true
quantities:
head_temperature:
type: np.float64
unit: kelvin
m_annotations:
eln:
component: NumberEditQuantity
defaultDisplayUnit: K
description: |
Temperature of STM head. Note: At least one field from head_temperature,
cryo_bottom_temperature and cryo_shield_temperature must be provided.
At least one field from head_temperature, cryo_bottom_temperature and cryo_shield_temperature must be provided.
cryo_bottom_temperature:
type: np.float64
unit: kelvin
m_annotations:
eln:
component: NumberEditQuantity
defaultDisplayUnit: K
description: |
Temperature of the cold tail of the cryostat. Note:
At least one field from head_temperature, cryo_bottom_temperature and cryo_shield_temperature must be provided.
cryo_shield_temperature:
type: np.float64
unit: kelvin
m_annotations:
eln:
component: NumberEditQuantity
defaultDisplayUnit: K
description: |
Temperature of liquid nitrogen shield. Note: At
least one field from head_temperature, cryo_bottom_temperature and cryo_shield_temperature must be provided.
Sample:
section:
m_annotations:
eln:
overview: true
quantities:
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the sample.
chemical_formula:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
The chemical formula specified using CIF conventions.
Abbreviated version of CIF standard:
* Only recognized element symbols may be used.
* Each element symbol is followed by a 'count' number. A count of '1' may be omitted.
* A space or parenthesis must separate each cluster of (element symbol + count).
* Where a group of elements is enclosed in parentheses, the multiplier for the
group must follow the closing parentheses. That is, all element and group
multipliers are assumed to be printed as subscripted numbers.
* Unless the elements are ordered in a manner that corresponds to their chemical
structure, the order of the elements within any group or moiety depends on
whether or not carbon is present.
* If carbon is present, the order should be:
- C, then H, then the other elements in alphabetical order of their symbol.
- If carbon is not present, the elements are listed purely in alphabetic order of their symbol.
* This is the *Hill* system used by Chemical Abstracts.
description:
type: str
m_annotations:
eln:
component: RichTextEditQuantity
description: |
Description of the sample or sample preparation.
sub_sections:
Sample_component:
section:
m_annotations:
eln:
overview: true
description: |
A sample component is a part of the sample that is of interest.
For example, a sample component could be a layer of a multilayer sample.
quantities:
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the sample component.
identifier_component:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
An unique identifier for the sample component.
chemical_formula:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
The chemical formula specified using CIF conventions.
Abbreviated version of CIF standard:
* Only recognized element symbols may be used.
* Each element symbol is followed by a 'count' number. A count of '1' may be omitted.
* A space or parenthesis must separate each cluster of (element symbol + count).
* Where a group of elements is enclosed in parentheses, the multiplier for the
group must follow the closing parentheses. That is, all element and group
multipliers are assumed to be printed as subscripted numbers.
* Unless the elements are ordered in a manner that corresponds to their chemical
structure, the order of the elements within any group or moiety depends on
whether or not carbon is present.
* If carbon is present, the order should be:
- C, then H, then the other elements in alphabetical order of their symbol.
- If carbon is not present, the elements are listed purely in alphabetic order of their symbol.
* This is the *Hill* system used by Chemical Abstracts.
description:
type: str
m_annotations:
eln:
component: RichTextEditQuantity
description: |
Description of the sample component or sample preparation.
history:
section:
m_annotations:
eln:
overview: true
sub_sections:
Note:
section:
m_annotations:
eln:
overview: true
description: |
Notes about the sample history.
quantities:
description:
type: str
m_annotations:
eln:
component: RichTextEditQuantity
description: |
Title of an image or other details of the note.
quantities:
identifier_history:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Identifier for sample history.
definitions:
name: "AFM_ELN_Example"
eln:
label: "AFM ELN Example"
sections:
ELN_for_AFM:
base_sections:
- pynxtools.nomad.schema_packages.dataconverter.NexusDataConverter
- nomad.datamodel.data.EntryData
m_annotations:
template:
reader: spm
nxdl: NXafm
eln:
hide: []
label: "ELN for AFM"
quantities:
default:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
The name of the NXdata group that comes as child of the entry group for default plot
to be displayed upon the entry of NeXus file.
definition:
type:
type_kind: Enum
type_data:
- NXafm
m_annotations:
eln:
component: EnumEditQuantity
description: |
Name of the definitions from NeXus app def designed for STS experiments, one can use
NXsts or NXspm, but NXsts is recommended.
experiment_technique:
type:
type_kind: Enum
type_data:
- AFM
m_annotations:
eln:
component: EnumEditQuantity
description: |
Name of the technique used for the experiment, e.g. AFM.
scan_mode:
type:
type_kind: Enum
type_data:
- contact mode
- tapping mode
- non-contact mode
- Kelvin probe
- electric force
m_annotations:
eln:
component: EnumEditQuantity
description: |
Mode of scan in AFM experiment.
experiment_description:
type: str
m_annotations:
eln:
component: RichTextEditQuantity
description: |
Descriptive comments for this experiment, added by the experimenter in eln or
coming from the output file, e.g. Comment01 SYNC & Filter LP 8order WITHDRAW
600 steps, locked Au(111), 50pA, 100 mV set point, 1mV DCA, 973Hz,138
1st H, -84 2nd H.
identifier_experiment:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
An unique identifier fot the experiment. e.g. the identifier
could be specific for a lab or experiment team.
identifier_collection:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
An unique identifier of a collection. Use this
if the experiment if part of a collection of experiments
sub_sections:
User:
repeats: True
section:
m_annotations:
eln:
overview: true
quantities:
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the user who performed the experiment.
affiliation:
type: str
shape: "*"
m_annotations:
eln:
component: StringEditQuantity
description: |
Affiliation of the user who performed the experiment.
email:
type: str
shape: "*"
m_annotations:
eln:
component: StringEditQuantity
description: |
List of emails from users who performed the experiment.
Instrument:
section:
m_annotations:
eln:
overview: true
sub_sections:
hardware:
section:
m_annotations:
eln:
overview: true
quantities:
vendor:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the vendor of the hardware. (e.g. Nanonis).
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the hardware. (e.g. Nanonis).
model:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Version or model of the component named by the manufacturer (e.g. Nanonis).
model_version:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
If model has a distinguishable version (e.g. BP5e).
software:
section:
m_annotations:
eln:
overview: true
quantities:
vendor:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the vendor of the software. (e.g. Nanonis).
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the software. (e.g. Nanonis).
model:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Version or model of the component named by the manufacturer (e.g. Generic 4).
Note that this should be exactly the same as in experiment file.
model_version:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
If model has a distinguishable version (e.g. BP5e).
height_piezo_sensor:
section:
m_annotations:
eln:
overview: true
sub_sections:
piezo_configuration:
section:
m_annotations:
eln:
overview: true
sub_sections:
piezo_material:
section:
m_annotations:
eln:
overview: true
quantities:
identifier_piezo_material:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
An unique identifier for the piezo material.
Scan_environment:
section:
m_annotations:
eln:
overview: true
quantities:
head_temperature:
type: np.float64
unit: kelvin
m_annotations:
eln:
component: NumberEditQuantity
defaultDisplayUnit: K
description: |
Temperature of STM head. Note: At least one field from head_temperature,
cryo_bottom_temperature and cryo_shield_temperature must be provided.
At least one field from tip_temperature, cryo_bottom_temperature and cryo_shield_temperature must be provided.
cryo_bottom_temperature:
type: np.float64
unit: kelvin
m_annotations:
eln:
component: NumberEditQuantity
defaultDisplayUnit: K
description: |
Temperature of the cold tail of the cryostat. Note:
At least one field from tip_temperature, cryo_bottom_temperature and cryo_shield_temperature must be provided.
cryo_shield_temperature:
type: np.float64
unit: kelvin
m_annotations:
eln:
component: NumberEditQuantity
defaultDisplayUnit: K
description: |
Temperature of liquid nitrogen shield. Note: At
least one field from head_temperature, cryo_bottom_temperature and cryo_shield_temperature must be provided.
Sample:
section:
m_annotations:
eln:
overview: true
quantities:
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the sample.
chemical_formula:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
The chemical formula specified using CIF conventions.
Abbreviated version of CIF standard:
* Only recognized element symbols may be used.
* Each element symbol is followed by a 'count' number. A count of '1' may be omitted.
* A space or parenthesis must separate each cluster of (element symbol + count).
* Where a group of elements is enclosed in parentheses, the multiplier for the
group must follow the closing parentheses. That is, all element and group
multipliers are assumed to be printed as subscripted numbers.
* Unless the elements are ordered in a manner that corresponds to their chemical
structure, the order of the elements within any group or moiety depends on
whether or not carbon is present.
* If carbon is present, the order should be:
- C, then H, then the other elements in alphabetical order of their symbol.
- If carbon is not present, the elements are listed purely in alphabetic order of their symbol.
* This is the *Hill* system used by Chemical Abstracts.
description:
type: str
m_annotations:
eln:
component: RichTextEditQuantity
description: |
Description of the sample or sample preparation.
sub_sections:
Sample_component:
section:
m_annotations:
eln:
overview: true
description: |
A sample component is a part of the sample that is of interest.
For example, a sample component could be a layer of a multilayer sample.
quantities:
name:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Name of the sample component.
identifier_component:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
An unique identifier for the sample component.
chemical_formula:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
The chemical formula specified using CIF conventions.
Abbreviated version of CIF standard:
* Only recognized element symbols may be used.
* Each element symbol is followed by a 'count' number. A count of '1' may be omitted.
* A space or parenthesis must separate each cluster of (element symbol + count).
* Where a group of elements is enclosed in parentheses, the multiplier for the
group must follow the closing parentheses. That is, all element and group
multipliers are assumed to be printed as subscripted numbers.
* Unless the elements are ordered in a manner that corresponds to their chemical
structure, the order of the elements within any group or moiety depends on
whether or not carbon is present.
* If carbon is present, the order should be:
- C, then H, then the other elements in alphabetical order of their symbol.
- If carbon is not present, the elements are listed purely in alphabetic order of their symbol.
* This is the *Hill* system used by Chemical Abstracts.
description:
type: str
m_annotations:
eln:
component: RichTextEditQuantity
description: |
Description of the sample component or sample preparation.
history:
section:
m_annotations:
eln:
overview: true
sub_sections:
Note:
section:
m_annotations:
eln:
overview: true
description: |
Notes about the sample history.
quantities:
description:
type: str
m_annotations:
eln:
component: RichTextEditQuantity
description: |
Title of an image or other details of the note.
quantities:
identifier_history:
type: str
m_annotations:
eln:
component: StringEditQuantity
description: |
Identifier for sample history.
ELN YAML File¶
The ELN YAML file is a human created ELN and can be used to run reader in Jupyter notebook or local Python environment. For more details please follow the section ELN YAML File in Work with Reader guide.
Sample:
name: diPAMY
history:
Note:
description: The experiment was run in Carlos' Lab.
Sample_component:
chemical_formula: Au(KAl3Si3O12H2)
description: 'Substrate:
Two layers stack: Au-Mica'
name: Au(Mica)
default: current_filter_grad
definition: NXsts
scan_mode: constant height
experiment_description: 'The experiment with
Bias: -50mA
Setpoint: 25pA'
Instrument:
hardware:
model: Generic5e
model/@version: 5
name: Nanonis
vendor: Nanonis
lockin_amplifier:
flip_sign: -1.0
modulation_signal: Current
Scan_environment:
head_temperature:
unit: K
value: 10.0
software:
model: Generic5e
model/@version: 5
name: Nanonis
vendor: Nanonis
experiment_technique: STS
identifier_collection: Au_mica_2023_Y_A_diPAMY_154-211C_370C_1min_385C_30min_400C_1min_400C_30min_415_30min_430_30min_11min_30min_30min_20230419_
identifier_experiment: Au_mica_2023_Y_A_diPAMY_154-211C_370C_1min_385C_30min_400C_1min_400C_30min_415_30min_430_30min_11min_30min_30min_20230416_20230420
User:
affiliation:
- Rubel Mozumder
- Dr. Cojal González, José David
- Dr. Carlos-Andres Palma
email:
- ycjin@physik.hu-berlin.de
- rubel.mozumder@physik.hu-berlin.de
- cojal@physik.hu-berlin.de
- palma@physik.hu-berlin.de
name: Yichen Jin
Instrument:
hardware:
model: Generic 4.5
name: Nanonis
vendor: Nanonis
software:
model: Generic 4.5
name: Nanonis
vendor: Nanonis
Sample:
chemical_formula: C40H18N2
description: |
Stack of two layers Au(111) diaza-HBC
(diaza-hexabenzocoronene) derivative
of diPAMY precursor
name: diaza-hexabenzocoronene
User:
- affiliation:
- Institute of Physics, Chinese Academy of Sciences, Beijing 100190, China
name: Yan Wang
- affiliation:
- Department of Physics& IRIS Adlershof, Humboldt-Universität zu Berlin, 12489 Berlin,
Germany
email:
- cojal@physik.hu-berlin.de
name: Cojal González, José David
- affiliation:
- FAIRmat, Humboldt-Universität zu Berlin, Berlin
email:
- rubel.mozumder@physik.hu-berlin.de
name: Rubel Mozumder
- affiliation:
- Institute of Physics, Chinese Academy of Sciences, Beijing 100190, China
- Department of Physics& IRIS Adlershof, Humboldt-Universität zu Berlin, 12489 Berlin,
Germany
email:
- palma@iphy.ac.cn
name: Prof. Carlos-Andres Palma
default: current_forward
definition: NXstm
experiment_description: |
The experiment combines
on-surface synthesis and low-temperature STM. Where the bias voltage is -50mV.
experiment_technique: STM
scan_mode: constant height
Instrument:
hardware:
model: Generic 4
model/@version: '4'
name: Nanonis
vendor: Nanonis
software:
model: Generic 4
model/@version: '4'
name: Nanonis
vendor: Nanonis
Sample:
Sample_component:
chemical_formula: ' KAl₂(AlSi₃O₁₀)(OH)₂)'
description: <p>Gold on Mica.</p>
name: Au(Mica)
history:
Note:
description: "Demo description: This sample is used in Palma's lab."
name: diPAMY
default: current_forward
definition: NXafm
experiment_description: <p>An demo NeXus example for AFM. </p>
experiment_technique: AFM
identifier_collection: D:\\Data\\123306
identifier_experiment: D:\\Data\\123306\A151216.123306-02602
scan_mode: tapping mode
User:
- affiliation:
- Dr. Cojal González, José David (HU)
- Prof. Carlos-Andres Palma (HU)
email:
- cojal@physik.hu-berlin.de
- palma@physik.hu-berlin.de
- mozumder@physik.hu-berlin.de
name: Rubel Mozumder
Instrument:
hardware:
model:
model/@version:
name: bruker
vendor: bruker
software:
model: SPMLab 1.00
model/@version: '1.00'
name: SPMLab
vendor: bruker
Sample:
chemical_formula: (Y2O3)0.085(ZrO2)0.915
description: >-
Single-crystalline yttria-stabilised zirconia (8.5 mol% Y2O3) with fluorite
structure and (100) surface orientation, 10 mm x 10 mm x 0.5 mm.
name: YSZ(100)K_B3320_13
physical_form: single crystal
short_title: YSZ(100)K_B3320_13
situation: air
thickness: 0.5
thickness/@units: mm
default: height
definition: NXafm
experiment_description: >-
Peak Force Tapping AFM height image of a YSZ(100) single crystal, forward scan
direction, exported by Bruker SPMLab as a single-channel FLT file.
experiment_technique: AFM
identifier_collection: B3320_13_061726074638
identifier_experiment: B3320_13_061726074638.SIG_TOPO_FRW.FLT
scan_mode: peak force tapping mode
User:
email:
- mozumder@physik.hu-berlin.de
name:
- Rubel Mozumder
Instrument:
hardware:
model:
model/@version:
name: bruker
vendor: bruker
software:
model:
model/@version:
name: bruker
vendor: bruker
# Sample:
# history:
# Note:
# description: "<p>Demo description: This sample is used in from Tamash.</p>"
# Sample_component:
# chemical_formula:
# description: <p>Unknow sample.</p>
# name: Unknow
# name: Unknow
default: z_forward
definition: NXafm
experiment_description:
experiment_technique: AFM
identifier_collection: Afm_image_with_taping_mode_VGEP-15m-.0_00000.spm
identifier_experiment: VGEP-15m-.0_00000.spm
scan_mode: tapping mode
User:
email:
- mozumder@physik.hu-berlin.de
name:
- Rubel Mozumder
experiment_technique: AFM
definition: NXafm
Instrument:
hardware:
model: NanoScope
name: Bruker
vendor: Bruker
software:
model: NanoScope
vendor: Bruker
# Sample:
# History:
# Note:
# description: "<p>Demo description: This sample is used in from Tamash.</p>"
# Sample_component:
# chemical_formula:
# description: <p>Unknow sample.</p>
# name: Unknow
# name: Unknow
default: deflection_retrace
experiment_description: A demo experiment description
identifier_collection: Afm_single_point_spectroscopy_SB03-MG1.0_00000.spm.txt
identifier_experiment: SB03-MG1.0_00000.spm.txt
scan_mode: peak force tapping mode
User:
email:
- mozumder@physik.hu-berlin.de
name: Rubel Mozumder