Skip to content

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: C40​H18​N2​
  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.&nbsp;</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