/*
 *******************************************************************************
 *
 *  Copyright 2026 RIEGL Laser Measurement Systems
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *  SPDX-License-Identifier: Apache-2.0
 *
 *******************************************************************************
 */
/*!
 *******************************************************************************
 *
 * \author  RIEGL LMS GmbH, Austria
 * \brief   Description of RIEGL RDB 2 database meta data items.
 * \version 2015-10-27/AW: Initial version
 * \version 2015-11-25/AW: Item "Geo Tag" added
 * \version 2016-10-27/AW: Item "Voxel Information" added
 * \version 2016-11-17/AW: Item "Voxel Information" updated
 * \version 2016-12-12/AW: Item "Range Statistics" added
 * \version 2017-03-08/AW: Item "Plane Patch Statistics" added
 * \version 2017-04-05/AW: Items "Atmosphere" and "Geometric Scale Factor" added
 * \version 2017-08-22/AW: Items for waveform sample block and value files added
 * \version 2017-10-24/AW: Item "Gaussian Decomposition" added
 * \version 2017-11-13/AW: Item "riegl.scan_pattern" updated
 * \version 2017-11-21/AW: Item "riegl.trajectory_info" added
 * \version 2018-01-11/AW: Item "riegl.beam_geometry" added
 * \version 2018-01-15/AW: Item "riegl.reflectance_calculation" added
 * \version 2018-01-15/AW: Item "riegl.near_range_correction" added
 * \version 2018-01-15/AW: Item "riegl.device_geometry" added
 * \version 2018-02-13/AW: Item "riegl.notch_filter" added
 * \version 2018-03-08/AW: Item "riegl.window_echo_correction" added
 * \version 2018-03-15/AW: Item "riegl.pulse_position_modulation" added
 * \version 2018-05-24/AW: Item "riegl.pixel_info" added
 * \version 2018-06-08/AW: Item "riegl.shot_info" added
 * \version 2018-06-08/AW: Item "riegl.echo_info" added
 * \version 2018-06-14/AW: Item "riegl.mta_settings" added
 * \version 2018-06-14/AW: Item "riegl.receiver_internals" added
 * \version 2018-06-14/AW: Item "riegl.device_output_limits" added
 * \version 2018-06-26/AW: Schema: replace "number" with "integer" if applicable
 * \version 2018-07-09/AW: Item "riegl.pose_estimation" added
 * \version 2018-07-09/AW: Item "riegl.pose_sensors" added
 * \version 2018-09-20/AW: Item "riegl.pointcloud_info" added
 * \version 2018-11-08/AW: Item "riegl.scan_pattern" updated
 * \version 2018-11-13/AW: Item "riegl.receiver_internals" updated
 * \version 2019-03-06/AW: Item "riegl.receiver_internals" updated
 * \version 2019-03-21/AW: Item "riegl.device_geometry" updated
 * \version 2019-04-15/AW: Item "riegl.point_attribute_groups" added
 * \version 2019-04-30/AW: Item "riegl.waveform_settings" added
 * \version 2019-10-03/AW: Item "riegl.angular_notch_filter" added
 * \version 2019-10-03/AW: Item "riegl.noise_estimates" added
 * \version 2019-10-25/AW: Item "riegl.window_analysis" added
 * \version 2019-11-06/AW: Item "riegl.georeferencing_parameters" added
 * \version 2019-11-27/AW: Item "riegl.plane_patch_matching" added
 * \version 2019-12-13/AW: Items for tie-/control objects added
 * \version 2019-12-19/AW: Items for tie-/control objects added
 * \version 2020-02-04/AW: Item "riegl.detection_probability" added
 * \version 2020-02-04/AW: Item "riegl.licenses" added
 * \version 2020-04-27/AW: Item "riegl.waveform_info" updated (schema+example)
 * \version 2020-09-03/AW: Item "riegl.reflectance_correction" added
 * \version 2020-09-10/AW: Item "riegl.device_geometry_passive_channel" added
 * \version 2020-09-25/AW: Item "riegl.georeferencing_parameters" updated
 * \version 2020-09-25/AW: Item "riegl.trajectory_info" updated
 * \version 2020-09-29/AW: Item "riegl.temperature_calculation" added
 * \version 2020-10-23/AW: Item "riegl.exponential_decomposition" added (#3709)
 * \version 2020-11-30/AW: Item "riegl.notch_filter" updated (schema)
 * \version 2020-12-02/AW: Item "riegl.georeferencing_parameters" updated (schema)
 * \version 2021-02-02/AW: Item "riegl.plane_slope_class_info" added (rdbplanes/#7)
 * \version 2021-02-16/AW: Item "riegl.device_output_limits" updated (schema, #3811)
 * \version 2021-03-03/AW: Item "riegl.exponential_decomposition" updated (schema, #3822)
 * \version 2021-03-03/AW: Item "riegl.waveform_averaging_settings" added (#3821)
 * \version 2021-04-01/AW: Item "riegl.voxel_info" updated (schema, #3854)
 * \version 2021-04-16/AW: Item "riegl.voxel_info" updated (schema, #3866)
 * \version 2021-09-30/AW: Item "riegl.waveform_info" updated (schema+example, #4016)
 * \version 2021-10-04/AW: Improved spelling of the descriptions of some items
 * \version 2021-11-04/AW: Rename "riegl.record_names" to "riegl.item_names" (#4034)
 * \version 2022-03-11/AW: Item "riegl.devices" added (#4162)
 * \version 2022-03-14/AW: Item "riegl.stored_filters" added (#4164)
 * \version 2022-09-20/AW: Fix typos in schema of "riegl.georeferencing_parameters"
 * \version 2022-09-30/AW: Item "riegl.system_description" added (#4368)
 * \version 2022-10-10/AW: Correction of typos in the titles of some entries
 * \version 2022-10-20/AW: Item "riegl.stored_filters" updated (example, #4164)
 * \version 2023-01-19/AW: Item "riegl.ttip_configuration" added (#4449)
 * \version 2024-09-26/AW: Item "riegl.dyntrig" added (#5310)
 * \version 2025-03-21/AW: Item "riegl.dmi_config" added (#5571)
 * \version 2025-07-01/AW: Item "riegl.gnss_processing_info" added (#5777)
 * \version 2025-07-01/AW: Item "riegl.riloc_processing_info" added (#5777)
 * \version 2025-11-11/AW: Item "riegl.lag_angle_correction" added (#6068)
 * \version 2026-03-09/AW: Item "riegl.tie_object_reference_file" added (#6282)
 * \version 2026-04-02/AW: Item "riegl.imported_control_objects" added (#6282)
 *
 *******************************************************************************
 */

#ifndef RDB_81EBCB65_FE94_471E_8D25_2B4D71CC91B1
#define RDB_81EBCB65_FE94_471E_8D25_2B4D71CC91B1

// Meta data item definition version
const char* const RDB_META_DATA_ITEMS_VERSION = "1.1.58";
const char* const RDB_META_DATA_ITEMS_DATE = "2026-04-02";

// Meta data item states
const unsigned char RDB_STATUS_REQUIRED = 1; // mandatory item
const unsigned char RDB_STATUS_OPTIONAL = 2; // optional item

// Container record for meta data item details
typedef struct MetaDataItemInfo
{
    const char*   name;
    const char*   title;
    const char*   description;
    unsigned char status;
    const char*   schema;
    const char*   example;
} MetaDataItemInfo;

// Angular notch filter parameters for window glass echoes
const MetaDataItemInfo RDB_RIEGL_ANGULAR_NOTCH_FILTER = {
    /* name        */ "riegl.angular_notch_filter",
    /* title       */ "Angular Notch Filter",
    /* description */ "Angular notch filter parameters for window glass echoes",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Angular notch filter parameters for window glass echoe"
    "s\",\"type\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\""
    ",\"title\":\"Angular Notch Filter\",\"required\":[\"angle\",\"range_mean\",\"ampl"
    "itude_mean\"],\"properties\":{\"range_mean\":{\"type\":\"array\",\"description\":"
    "\"Mean range [m]\",\"items\":{\"type\":\"number\"}},\"angle\":{\"type\":\"array\",\"d"
    "escription\":\"Angle [deg]\",\"items\":{\"type\":\"number\"}},\"amplitude_mean\":"
    "{\"type\":\"array\",\"description\":\"Mean amplitude "
    "[dB]\",\"items\":{\"type\":\"number\"}}}}"
    ,
    /* example: */
    "{\"range_mean\":[0.094,0.094,0.09075,0.08675,0.0815,0.0775,0.074,0.071,0"
    ".068,0.0675,0.06475],\"angle\":[14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,"
    "22.0,23.0,24.0],\"amplitude_mean\":[3.780913,3.780913,3.480913,3.120913,"
    "2.850913,2.720913,2.680913,2.610913,2.530913,2.570913,2.570913]}"
};

// Atmospheric parameters
const MetaDataItemInfo RDB_RIEGL_ATMOSPHERE = {
    /* name        */ "riegl.atmosphere",
    /* title       */ "Atmosphere",
    /* description */ "Atmospheric parameters",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Atmospheric parameters\",\"type\":\"object\",\"$schema\":\"htt"
    "p://json-schema.org/draft-04/schema#\",\"title\":\"Atmospheric Parameters\""
    ",\"required\":[\"temperature\",\"pressure\",\"rel_humidity\",\"pressure_sl\",\"am"
    "sl\",\"group_velocity\",\"attenuation\",\"wavelength\"],\"properties\":{\"pressu"
    "re\":{\"type\":\"number\",\"description\":\"Pressure along measurment path "
    "[mbar]\"},\"group_velocity\":{\"type\":\"number\",\"description\":\"Group "
    "velocity of laser beam "
    "[m/s]\"},\"wavelength\":{\"type\":\"number\",\"description\":\"Laser wavelength "
    "[nm]\"},\"attenuation\":{\"type\":\"number\",\"description\":\"Atmospheric "
    "attenuation "
    "[1/km]\"},\"rel_humidity\":{\"type\":\"number\",\"description\":\"Relative "
    "humidity along measurement path "
    "[%]\"},\"amsl\":{\"type\":\"number\",\"description\":\"Height above mean sea "
    "level (AMSL) "
    "[m]\"},\"pressure_sl\":{\"type\":\"number\",\"description\":\"Atmospheric "
    "pressure at sea level "
    "[mbar]\"},\"temperature\":{\"type\":\"number\",\"description\":\"Temperature "
    "along measurement path [\\u00b0C]\"}}}"
    ,
    /* example: */
    "{\"pressure\":970,\"group_velocity\":299711000.0,\"wavelength\":1550,\"attenu"
    "ation\":0.028125,\"rel_humidity\":63,\"amsl\":0,\"pressure_sl\":970,\"temperat"
    "ure\":7}"
};

// Laser beam geometry details
const MetaDataItemInfo RDB_RIEGL_BEAM_GEOMETRY = {
    /* name        */ "riegl.beam_geometry",
    /* title       */ "Beam Geometry",
    /* description */ "Laser beam geometry details",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Laser beam geometry details\",\"type\":\"object\",\"$schema\""
    ":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Beam Geometry\",\"re"
    "quired\":[\"beam_exit_diameter\",\"beam_divergence\"],\"properties\":{\"beam_e"
    "xit_diameter\":{\"description\":\"Beam width at exit aperture [m]\",\"type\":"
    "\"number\",\"minimum\":0,\"exclusiveMinimum\":false},\"beam_divergence\":{\"des"
    "cription\":\"Beam divergence in far field "
    "[rad]\",\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":false}}}"
    ,
    /* example: */
    "{\"beam_exit_diameter\":0.0072,\"beam_divergence\":0.0003}"
};

// List of control object type definitions
const MetaDataItemInfo RDB_RIEGL_CONTROL_OBJECT_CATALOG = {
    /* name        */ "riegl.control_object_catalog",
    /* title       */ "Control Object Catalog",
    /* description */ "List of control object type definitions",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"List of control object type definitions\",\"type\":\"objec"
    "t\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Contro"
    "l Object Catalog\",\"required\":[\"types\"],\"definitions\":{\"chevron\":{\"desc"
    "ription\":\"chevron\",\"type\":\"object\",\"allOf\":[{\"$ref\":\"#/definitions/com"
    "mon\"},{\"description\":\"chevron specific properties\",\"type\":\"object\",\"pr"
    "operties\":{\"shape\":{\"description\":\"shape identifier\",\"type\":\"string\",\""
    "enum\":[\"chevron\"]},\"outside_edge_length\":{\"description\":\"length of the"
    " two outer edges in meters\",\"type\":\"number\",\"minimum\":0,\"exclusiveMini"
    "mum\":true},\"thickness\":{\"description\":\"thickness in meters\",\"type\":\"nu"
    "mber\",\"minimum\":0,\"exclusiveMinimum\":true}},\"required\":[\"shape\",\"outsi"
    "de_edge_length\",\"thickness\"]}]},\"common\":{\"description\":\"common object"
    " properties\",\"type\":\"object\",\"properties\":{\"name\":{\"description\":\"uniq"
    "ue type identifier\",\"type\":\"string\",\"minLength\":3},\"description\":{\"des"
    "cription\":\"string describing the "
    "object\",\"type\":\"string\"},\"shape\":{\"description\":\"shape identifier\",\"ty"
    "pe\":\"string\",\"enum\":[\"rectangle\",\"checkerboard2x2\",\"chevron\",\"circular"
    "_disk\",\"cylinder\",\"sphere\",\"round_corner_cube_prism\"]},\"surface_type\":"
    "{\"description\":\"surface material type\",\"type\":\"string\",\"enum\":[\"retro_"
    "reflective_foil\",\"diffuse\"]}},\"required\":[\"name\",\"shape\"]},\"circular_d"
    "isk\":{\"description\":\"circular disk\",\"type\":\"object\",\"allOf\":[{\"$ref\":\""
    "#/definitions/common\"},{\"description\":\"circular disk specific properti"
    "es\",\"type\":\"object\",\"properties\":{\"diameter\":{\"description\":\"diameter "
    "in meters\",\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":true},\"offse"
    "t\":{\"description\":\"offset in meters, e.g. reflector constant "
    "(optional)\",\"type\":\"number\"},\"shape\":{\"description\":\"shape identifier\""
    ",\"type\":\"string\",\"enum\":[\"circular_disk\"]}},\"required\":[\"shape\",\"diame"
    "ter\"]}]},\"cylinder\":{\"description\":\"cylinder\",\"type\":\"object\",\"allOf\":"
    "[{\"$ref\":\"#/definitions/common\"},{\"description\":\"cylinder specific pro"
    "perties\",\"type\":\"object\",\"properties\":{\"diameter\":{\"description\":\"diam"
    "eter in meters\",\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":true},\""
    "shape\":{\"description\":\"shape identifier\",\"type\":\"string\",\"enum\":[\"cyli"
    "nder\"]},\"height\":{\"description\":\"height in meters\",\"type\":\"number\",\"mi"
    "nimum\":0,\"exclusiveMinimum\":true}},\"required\":[\"shape\",\"diameter\",\"hei"
    "ght\"]}]},\"sphere\":{\"description\":\"sphere\",\"type\":\"object\",\"allOf\":[{\"$"
    "ref\":\"#/definitions/common\"},{\"description\":\"sphere specific propertie"
    "s\",\"type\":\"object\",\"properties\":{\"diameter\":{\"description\":\"diameter "
    "in meters\",\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":true},\"shape"
    "\":{\"description\":\"shape identifier\",\"type\":\"string\",\"enum\":[\"sphere\"]}"
    "},\"required\":[\"shape\",\"diameter\"]}]},\"checkerboard2x2\":{\"description\":"
    "\"checkerboard 2 by 2\",\"type\":\"object\",\"allOf\":[{\"$ref\":\"#/definitions/"
    "common\"},{\"description\":\"checkerboard specific properties\",\"type\":\"obj"
    "ect\",\"properties\":{\"shape\":{\"description\":\"shape identifier\",\"type\":\"s"
    "tring\",\"enum\":[\"checkerboard2x2\"]},\"square_length\":{\"description\":\"len"
    "gth of a square of the checkerboard in meters\",\"type\":\"number\",\"minimu"
    "m\":0,\"exclusiveMinimum\":true}},\"required\":[\"shape\",\"square_length\"]}]}"
    ",\"rectangle\":{\"description\":\"rectangle\",\"type\":\"object\",\"allOf\":[{\"$re"
    "f\":\"#/definitions/common\"},{\"description\":\"rectangle specific properti"
    "es\",\"type\":\"object\",\"properties\":{\"length\":{\"description\":\"length in m"
    "eters\",\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":true},\"shape\":{\""
    "type\":\"string\",\"enum\":[\"rectangle\"]},\"width\":{\"description\":\"width in "
    "meters\",\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":true}},\"require"
    "d\":[\"shape\",\"length\",\"width\"]}]},\"round_corner_cube_prism\":{\"descripti"
    "on\":\"round corner cube prism\",\"type\":\"object\",\"allOf\":[{\"$ref\":\"#/defi"
    "nitions/common\"},{\"description\":\"round corner cube prism specific prop"
    "erties\",\"type\":\"object\",\"properties\":{\"diameter\":{\"description\":\"diame"
    "ter in meters\",\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":true},\"o"
    "ffset\":{\"description\":\"offset in meters, e.g. reflector constant "
    "(optional)\",\"type\":\"number\"},\"shape\":{\"description\":\"shape identifier\""
    ",\"type\":\"string\",\"enum\":[\"round_corner_cube_prism\"]}},\"required\":[\"sha"
    "pe\",\"diameter\"]}]}},\"properties\":{\"types\":{\"type\":\"array\",\"items\":{\"ty"
    "pe\":\"object\",\"oneOf\":[{\"$ref\":\"#/definitions/rectangle\"},{\"$ref\":\"#/de"
    "finitions/checkerboard2x2\"},{\"$ref\":\"#/definitions/chevron\"},{\"$ref\":\""
    "#/definitions/circular_disk\"},{\"$ref\":\"#/definitions/cylinder\"},{\"$ref"
    "\":\"#/definitions/sphere\"},{\"$ref\":\"#/definitions/round_corner_cube_pri"
    "sm\"}]},\"uniqueItems\":true}}}"
    ,
    /* example: */
    "{\"comments\":[\"This file contains a list of control object types (aka. "
    "'catalog').\",\"Each type is described by an object,\",\"which must "
    "contain at least the following parameters:\",\"  - name: unique "
    "identifier of the type\",\"  - shape: one of the following supported "
    "shapes:\",\"      - rectangle\",\"      - checkerboard2x2\",\"      - "
    "chevron\",\"      - circular_disk\",\"      - cylinder\",\"      - sphere\",\""
    "      - round_corner_cube_prism\",\"Depending on 'shape', the following "
    "parameters must/may be specified:\",\"  - rectangle:\",\"      - length: "
    "length in meters\",\"      - width: width in meters\",\"  - "
    "checkerboard2x2:\",\"      - square_length: length of a square of the "
    "checkerboard in meters\",\"  - circular_disk:\",\"      - diameter: "
    "diameter in meters\",\"      - offset: offset in meters, e.g. reflector "
    "constant (optional)\",\"  - chevron:\",\"      - outside_edge_length: "
    "length of the two outer edges in meters\",\"      - thickness: thickness"
    " in meters\",\"  - cylinder:\",\"      - diameter: diameter in meters\",\""
    "      - height: height in meters\",\"  - sphere:\",\"      - diameter: "
    "diameter in meters\",\"  - round_corner_cube_prism:\",\"      - diameter: "
    "diameter in meters\",\"      - offset: offset in meters, e.g. reflector "
    "constant (optional)\",\"Optional parameters:\",\"    - description: string"
    " describing the object\",\"    - surface_type: surface material type "
    "(either 'retro_reflective_foil' or "
    "'diffuse')\"],\"types\":[{\"name\":\"Rectangle "
    "60x30\",\"description\":\"Rectangle (60cm x 30cm)\",\"shape\":\"rectangle\",\"wi"
    "dth\":0.3,\"length\":0.6},{\"name\":\"Rectangle "
    "80x40\",\"description\":\"Rectangle (80cm x 40cm)\",\"shape\":\"rectangle\",\"wi"
    "dth\":0.4,\"length\":0.8},{\"name\":\"Checkerboard2x2 "
    "30\",\"description\":\"Checkerboard (square length: 30cm)\",\"shape\":\"checke"
    "rboard2x2\",\"square_length\":0.3},{\"name\":\"Checkerboard2x2 "
    "50\",\"description\":\"Checkerboard (square length: "
    "50cm)\",\"shape\":\"checkerboard2x2\",\"square_length\":0.5},{\"name\":\"Chevron"
    " 24''/4''\",\"description\":\"Chevron (a=24''; b=4'')\",\"shape\":\"chevron\",\""
    "outside_edge_length\":0.6096,\"thickness\":0.1016},{\"name\":\"Circular Disk"
    " 50\",\"description\":\" Circular Disk (diameter: 50cm)\",\"diameter\":0.5,\"s"
    "hape\":\"circular_disk\",\"surface_type\":\"diffuse\"},{\"description\":\"flat "
    "circular reflector from retro-reflective foil\",\"offset\":0.0,\"surface_t"
    "ype\":\"retro_reflective_foil\",\"name\":\"RIEGL flat reflector 50 "
    "mm\",\"shape\":\"circular_disk\",\"diameter\":0.05},{\"description\":\"flat "
    "circular reflector from retro-reflective foil\",\"offset\":0.0,\"surface_t"
    "ype\":\"retro_reflective_foil\",\"name\":\"RIEGL flat reflector 100 "
    "mm\",\"shape\":\"circular_disk\",\"diameter\":0.1},{\"description\":\"flat "
    "circular reflector from retro-reflective foil\",\"offset\":0.0,\"surface_t"
    "ype\":\"retro_reflective_foil\",\"name\":\"RIEGL flat reflector 150 mm\",\"sha"
    "pe\":\"circular_disk\",\"diameter\":0.15},{\"description\":\"cylindrical "
    "reflector from retro-reflective foil\",\"height\":0.05,\"surface_type\":\"re"
    "tro_reflective_foil\",\"name\":\"RIEGL cylindrical reflector 50 "
    "mm\",\"shape\":\"cylinder\",\"diameter\":0.05},{\"description\":\"cylindrical "
    "reflector from retro-reflective foil\",\"height\":0.1,\"surface_type\":\"ret"
    "ro_reflective_foil\",\"name\":\"RIEGL cylindrical reflector 100 "
    "mm\",\"shape\":\"cylinder\",\"diameter\":0.1},{\"name\":\"Sphere 200 "
    "mm\",\"description\":\"Sphere (diameter: 200 "
    "mm)\",\"diameter\":0.2,\"shape\":\"sphere\"},{\"name\":\"Corner Cube Prism 50 "
    "mm\",\"description\":\"round corner cube prism\",\"diameter\":0.05,\"shape\":\"r"
    "ound_corner_cube_prism\",\"offset\":0.0}]}"
};

// Details about the control object reference file
const MetaDataItemInfo RDB_RIEGL_CONTROL_OBJECT_REFERENCE_FILE = {
    /* name        */ "riegl.control_object_reference_file",
    /* title       */ "Control Object Reference file",
    /* description */ "Details about the control object reference file",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about the control object reference file\",\"type"
    "\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"proper"
    "ties\":{\"reference_file\":{\"type\":\"object\",\"description\":\"Reference to a"
    " control object "
    "file\",\"properties\":{\"file_uuid\":{\"description\":\"Control object file's "
    "Universally Unique Identifier (RFC "
    "4122)\",\"type\":\"string\"},\"file_path\":{\"description\":\"Path of the "
    "control object file relative to referring file\",\"type\":\"string\"}},\"req"
    "uired\":[\"file_uuid\",\"file_path\"]}},\"title\":\"Control Object Reference "
    "file\"}"
    ,
    /* example: */
    "{\"reference_file\":{\"file_uuid\":\"810f5d57-eccf-49ed-b07a-0cdd109b4213\","
    "\"file_path\":\"../../../10_CONTROL_OBJECTS/ControlPoints.cpx\"}}"
};

// Detection probability as a function of amplitude
const MetaDataItemInfo RDB_RIEGL_DETECTION_PROBABILITY = {
    /* name        */ "riegl.detection_probability",
    /* title       */ "Detection Probability",
    /* description */ "Detection probability as a function of amplitude",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Detection probability as a function of amplitude\",\"typ"
    "e\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title"
    "\":\"Detection Probability\",\"required\":[\"amplitude\",\"detection_probabili"
    "ty\"],\"properties\":{\"amplitude\":{\"type\":\"array\",\"description\":\"Amplitud"
    "e [dB]\",\"items\":{\"type\":\"number\"}},\"detection_probability\":{\"type\":\"ar"
    "ray\",\"description\":\"Detection probability "
    "[0..1]\",\"items\":{\"type\":\"number\"}}}}"
    ,
    /* example: */
    "{\"amplitude\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0],\"detection"
    "_probability\":[0.0,0.5,0.8,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]}"
};

// Details about the device used to acquire the point cloud
const MetaDataItemInfo RDB_RIEGL_DEVICE = {
    /* name        */ "riegl.device",
    /* title       */ "Device Information",
    /* description */ "Details about the device used to acquire the point cloud",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about the device used to acquire the point clo"
    "ud\",\"type\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#"
    "\",\"title\":\"Device Information\",\"required\":[\"device_type\",\"serial_numbe"
    "r\"],\"properties\":{\"channel_text\":{\"description\":\"Optional channel "
    "description (e.g. 'Green Channel' for multi-channel "
    "devices)\",\"type\":\"string\"},\"device_name\":{\"description\":\"Optional "
    "device name (e.g. 'Scanner 1' for multi-scanner "
    "systems)\",\"type\":\"string\"},\"device_build\":{\"description\":\"Device build"
    " variant\",\"type\":\"string\"},\"device_type\":{\"description\":\"Device type "
    "identifier (e.g. "
    "VZ-400i)\",\"type\":\"string\"},\"serial_number\":{\"description\":\"Device "
    "serial number (e.g. "
    "S2221234)\",\"type\":\"string\"},\"channel_number\":{\"description\":\"Laser "
    "channel number (not defined or 0: single channel "
    "device)\",\"type\":\"integer\",\"minimum\":0,\"exclusiveMinimum\":false}}}"
    ,
    /* example: */
    "{\"channel_text\":\"\",\"device_name\":\"Scanner 1\",\"device_build\":\"\",\"device"
    "_type\":\"VZ-400i\",\"serial_number\":\"S2221234\",\"channel_number\":0}"
};

// Scanner device geometry details
const MetaDataItemInfo RDB_RIEGL_DEVICE_GEOMETRY = {
    /* name        */ "riegl.device_geometry",
    /* title       */ "Device Geometry",
    /* description */ "Scanner device geometry details",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Scanner device geometry details\",\"type\":\"object\",\"$sch"
    "ema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Device Geometr"
    "y\",\"required\":[\"primary\"],\"properties\":{\"primary\":{\"description\":\"Prim"
    "ary device geometry structure (mandatory)\",\"type\":\"object\",\"properties"
    "\":{\"content\":{\"description\":\"Internal calibration values\",\"type\":\"arra"
    "y\",\"items\":{\"type\":\"number\"}},\"ID\":{\"description\":\"Structure identifie"
    "r\",\"type\":\"array\",\"maxItems\":2,\"items\":{\"type\":\"integer\"},\"minItems\":2"
    "}},\"required\":[\"ID\",\"content\"]},\"secondary\":{\"description\":\"Additional"
    " device geometry structure (optional)\",\"type\":\"object\",\"properties\":{\""
    "content\":{\"description\":\"Internal calibration values\",\"type\":\"array\",\""
    "items\":{\"type\":\"number\"}},\"ID\":{\"description\":\"Structure identifier\",\""
    "type\":\"array\",\"maxItems\":2,\"items\":{\"type\":\"integer\"},\"minItems\":2}},\""
    "required\":[\"ID\",\"content\"]},\"amu\":{\"description\":\"Angle Measurement "
    "Unit\",\"type\":\"object\",\"properties\":{\"frameCC\":{\"description\":\"Frame "
    "Circle Count (number of LSBs per full rotation about frame axis)\",\"typ"
    "e\":\"number\",\"minimum\":0,\"exclusiveMinimum\":false},\"lineCC\":{\"descripti"
    "on\":\"Line Circle Count (number of LSBs per full rotation about line "
    "axis)\",\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":false}}}}}"
    ,
    /* example: */
    "{\"primary\":{\"content\":[0],\"ID\":[4,0]},\"secondary\":{\"content\":[0],\"ID\":"
    "[91,0]},\"amu\":{\"frameCC\":124000,\"lineCC\":124000}}"
};

// Scanner passive channel device geometry details
const MetaDataItemInfo RDB_RIEGL_DEVICE_GEOMETRY_PASSIVE_CHANNEL = {
    /* name        */ "riegl.device_geometry_passive_channel",
    /* title       */ "Device Geometry Passive Channel",
    /* description */ "Scanner passive channel device geometry details",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Scanner passive channel device geometry details\",\"type"
    "\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\""
    ":\"Device Geometry Passive Channel\",\"required\":[\"primary\"],\"properties\""
    ":{\"primary\":{\"description\":\"Primary device geometry structure (mandato"
    "ry)\",\"type\":\"object\",\"properties\":{\"content\":{\"description\":\"Internal "
    "calibration values\",\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"ID\":{\"d"
    "escription\":\"Structure identifier\",\"type\":\"array\",\"maxItems\":2,\"items\""
    ":{\"type\":\"integer\"},\"minItems\":2}},\"required\":[\"ID\",\"content\"]}}}"
    ,
    /* example: */
    "{\"primary\":{\"content\":[0],\"ID\":[143,0]}}"
};

// Limits of the measured values output by the device
const MetaDataItemInfo RDB_RIEGL_DEVICE_OUTPUT_LIMITS = {
    /* name        */ "riegl.device_output_limits",
    /* title       */ "Device Output Limits",
    /* description */ "Limits of the measured values output by the device",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Limits of the measured values output by the device. "
    "The limits depend on the device type, measurement program and/or scan "
    "pattern.\",\"type\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/s"
    "chema#\",\"properties\":{\"amplitude_minimum\":{\"type\":\"number\",\"descriptio"
    "n\":\"Minimum possible amplitude in "
    "dB.\"},\"amplitude_maximum\":{\"type\":\"number\",\"description\":\"Maximum "
    "possible amplitude in dB.\"},\"background_radiation_minimum\":{\"type\":\"nu"
    "mber\",\"description\":\"Minimum possible background radiation.\"},\"deviati"
    "on_minimum\":{\"type\":\"number\",\"description\":\"Minimum possible pulse "
    "shape deviation.\"},\"mta_zone_count_maximum\":{\"type\":\"number\",\"descript"
    "ion\":\"Maximum number of MTA "
    "zones.\"},\"range_minimum\":{\"type\":\"number\",\"description\":\"Minimum "
    "possible range in "
    "meters.\"},\"range_maximum\":{\"type\":\"number\",\"description\":\"Maximum "
    "possible range in meters.\"},\"background_radiation_maximum\":{\"type\":\"nu"
    "mber\",\"description\":\"Maximum possible background radiation.\"},\"echo_co"
    "unt_maximum\":{\"type\":\"number\",\"description\":\"Maximum number of echoes "
    "a laser shot can "
    "have.\"},\"reflectance_maximum\":{\"type\":\"number\",\"description\":\"Maximum "
    "possible reflectance in "
    "dB.\"},\"reflectance_minimum\":{\"type\":\"number\",\"description\":\"Minimum "
    "possible reflectance in "
    "dB.\"},\"deviation_maximum\":{\"type\":\"number\",\"description\":\"Maximum "
    "possible pulse shape deviation.\"}},\"title\":\"Device Output Limits\"}"
    ,
    /* example: */
    "{\"background_radiation_minimum\":0,\"amplitude_minimum\":0.0,\"background_"
    "radiation_maximum\":0,\"deviation_minimum\":-1,\"mta_zone_count_maximum\":7"
    ",\"reflectance_minimum\":-100.0,\"reflectance_maximum\":100.0,\"amplitude_m"
    "aximum\":100.0,\"range_minimum\":2.9,\"range_maximum\":10000.0,\"deviation_m"
    "aximum\":32767}"
};

// Details about the devices used to acquire the point cloud
const MetaDataItemInfo RDB_RIEGL_DEVICES = {
    /* name        */ "riegl.devices",
    /* title       */ "Devices Information",
    /* description */ "Details about the devices used to acquire the point cloud",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about the devices used to acquire the point "
    "cloud (e.g. when merging point clouds of different devices)\",\"type\":\"a"
    "rray\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"items\":{\"ty"
    "pe\":\"object\",\"required\":[\"device_type\",\"serial_number\"],\"properties\":{"
    "\"channel_text\":{\"description\":\"Optional channel description (e.g. "
    "'Green Channel' for multi-channel "
    "devices)\",\"type\":\"string\"},\"signed\":{\"description\":\"Flag that is set "
    "when the original 'riegl.device' entry in the source file was "
    "correctly "
    "signed.\",\"type\":\"boolean\"},\"device_name\":{\"description\":\"Optional "
    "device name (e.g. 'Scanner 1' for multi-scanner "
    "systems)\",\"type\":\"string\"},\"device_build\":{\"description\":\"Device build"
    " variant\",\"type\":\"string\"},\"device_type\":{\"description\":\"Device type "
    "identifier (e.g. "
    "VZ-400i)\",\"type\":\"string\"},\"serial_number\":{\"description\":\"Device "
    "serial number (e.g. "
    "S2221234)\",\"type\":\"string\"},\"channel_number\":{\"description\":\"Laser "
    "channel number (not defined or 0: single channel device)\",\"type\":\"inte"
    "ger\",\"minimum\":0,\"exclusiveMinimum\":false}}},\"title\":\"Devices "
    "Information\"}"
    ,
    /* example: */
    "[{\"channel_text\":\"\",\"signed\":false,\"device_name\":\"Scanner 1\",\"device_b"
    "uild\":\"\",\"device_type\":\"VZ-400i\",\"serial_number\":\"S2221234\",\"channel_n"
    "umber\":0},{\"channel_text\":\"\",\"signed\":true,\"device_name\":\"Scanner 2\",\""
    "device_build\":\"\",\"device_type\":\"VQ-1560i-DW\",\"serial_number\":\"S2222680"
    "\",\"channel_number\":1},{\"channel_text\":\"\",\"signed\":true,\"device_name\":\""
    "Scanner 3\",\"device_build\":\"\",\"device_type\":\"VQ-1560i-DW\",\"serial_numbe"
    "r\":\"S2222680\",\"channel_number\":2}]"
};

// Distance measuring instrument configuration
const MetaDataItemInfo RDB_RIEGL_DMI_CONFIG = {
    /* name        */ "riegl.dmi_config",
    /* title       */ "DMI Configuration",
    /* description */ "Distance measuring instrument configuration",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Distance measuring instrument configuration\",\"type\":\"o"
    "bject\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"DM"
    "I Configuration\",\"required\":[\"dmi_count_dir\",\"dmi_incr\",\"dmi_min_time\""
    ",\"dmi_max_time\",\"dmi_dist_per_tick\"],\"properties\":{\"dmi_max_time\":{\"de"
    "scription\":\"Maximum time interval between trigger events, 0 means "
    "timeout is inactive [0.1 msec]\",\"type\":\"integer\",\"maximum\":65535,\"excl"
    "usiveMinimum\":false,\"minimum\":0,\"exclusiveMaximum\":false},\"dmi_min_tim"
    "e\":{\"description\":\"Minimum time interval between trigger events, 0 "
    "means rate limitation is inactive [0.1 msec]\",\"type\":\"integer\",\"maximu"
    "m\":65535,\"exclusiveMinimum\":false,\"minimum\":0,\"exclusiveMaximum\":false"
    "},\"dmi_count_dir\":{\"description\":\"DMI count direction is inverted\",\"ty"
    "pe\":\"integer\",\"maximum\":1,\"exclusiveMinimum\":false,\"minimum\":0,\"exclus"
    "iveMaximum\":false},\"dmi_dist_per_tick\":{\"description\":\"Distance per "
    "tick, just informative "
    "[m]\",\"type\":\"number\"},\"dmi_incr\":{\"description\":\"Increment in ticks, 0"
    " means distance trigger is deactivated\",\"type\":\"integer\",\"maximum\":214"
    "7483647,\"exclusiveMinimum\":false,\"minimum\":0,\"exclusiveMaximum\":false}"
    "}}"
    ,
    /* example: */
    "{\"dmi_max_time\":100,\"dmi_min_time\":0,\"dmi_count_dir\":0,\"dmi_dist_per_t"
    "ick\":0.00024399999529123306,\"dmi_incr\":0}"
};

// Dyntrig
const MetaDataItemInfo RDB_RIEGL_DYNTRIG = {
    /* name        */ "riegl.dyntrig",
    /* title       */ "Dyntrig",
    /* description */ "Dyntrig",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Dyntrig\",\"$schema\":\"http://json-schema.org/draft-04/sc"
    "hema#\",\"properties\":{\"scale\":{\"type\":\"number\",\"description\":\"Scale in "
    "units of dB, for calculation of line: line number N=(amplitude-offset)"
    "/scale\"},\"offset\":{\"type\":\"number\",\"description\":\"Offset in units of "
    "dB, for calculation of "
    "line\"},\"pre\":{\"type\":\"object\",\"description\":\"Dyntrig pre values\",\"prop"
    "erties\":{\"a\":{\"type\":\"array\",\"minItems\":1,\"description\":\"...\",\"items\":"
    "{\"type\":\"number\"},\"maxItems\":2080},\"nc\":{\"type\":\"integer\",\"description"
    "\":\"Number of entries\",\"maximum\":255,\"minimum\":0}},\"required\":[\"nc\",\"a\""
    "]},\"post\":{\"type\":\"object\",\"description\":\"Dyntrig post values\",\"proper"
    "ties\":{\"a\":{\"type\":\"array\",\"minItems\":1,\"description\":\"...\",\"items\":{\""
    "type\":\"number\"},\"maxItems\":2080},\"nc\":{\"type\":\"integer\",\"description\":"
    "\"Number of entries\",\"maximum\":255,\"minimum\":0}},\"required\":[\"nc\",\"a\"]}"
    ",\"tab\":{\"type\":\"array\",\"minItems\":1,\"description\":\"...\",\"items\":{\"desc"
    "ription\":\"...\",\"type\":\"object\",\"properties\":{\"del2\":{\"description\":\"Le"
    "ngth of constant pre-trigger threshold elevation in units of "
    "m\",\"type\":\"number\"},\"thra2\":{\"description\":\"Pre-trigger threshold in "
    "units of dB\",\"type\":\"number\"},\"thra1\":{\"description\":\"Post-trigger "
    "threshold in units of "
    "dB\",\"type\":\"number\"},\"del1\":{\"description\":\"Length of constant "
    "post-trigger threshold elevation in units of "
    "m\",\"type\":\"number\"},\"dec2\":{\"description\":\"Rise of pre-trigger "
    "threshold after del2 in units of "
    "dB/m\",\"type\":\"number\"},\"dec1\":{\"description\":\"Decay of post-trigger "
    "threshold after del1 in units of dB/m\",\"type\":\"number\"}},\"required\":[\""
    "thra1\",\"del1\",\"dec1\",\"thra2\",\"del2\",\"dec2\"]},\"maxItems\":128}},\"title\":"
    "\"Dyntrig\"}"
    ,
    /* example: */
    "{\"scale\":1.0,\"offset\":0.0,\"pre\":{\"a\":[78,86,126,134,31],\"nc\":128},\"pos"
    "t\":{\"a\":[78,86,126,134,31],\"nc\":128},\"tab\":[{\"del2\":0.0,\"thra2\":0.0,\"t"
    "hra1\":0.0,\"del1\":0.0,\"dec2\":0.0,\"dec1\":0.0}]}"
};

// Details about echo files
const MetaDataItemInfo RDB_RIEGL_ECHO_INFO = {
    /* name        */ "riegl.echo_info",
    /* title       */ "Echo Information",
    /* description */ "Details about echo files",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about echo files\",\"type\":\"object\",\"$schema\":\"h"
    "ttp://json-schema.org/draft-04/schema#\",\"title\":\"Echo Information\",\"re"
    "quired\":[\"echo_file\"],\"properties\":{\"echo_file\":{\"type\":\"object\",\"requ"
    "ired\":[\"file_extension\"],\"properties\":{\"file_extension\":{\"description\""
    ":\"Echo file extension, without the leading "
    "dot\",\"type\":\"string\"},\"file_uuid\":{\"description\":\"File's Universally "
    "Unique Identifier (RFC 4122)\",\"type\":\"string\"}}}}}"
    ,
    /* example: */
    "{\"echo_file\":{\"file_extension\":\"owp\",\"file_uuid\":\"26a03615-67c0-4bea-8"
    "fe8-c577378fe661\"}}"
};

// Details for exponential decomposition of full waveform data
const MetaDataItemInfo RDB_RIEGL_EXPONENTIAL_DECOMPOSITION = {
    /* name        */ "riegl.exponential_decomposition",
    /* title       */ "Exponential Decomposition",
    /* description */ "Details for exponential decomposition of full waveform data",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details for exponential decomposition of full waveform"
    " data\",\"type\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/sche"
    "ma#\",\"title\":\"Exponential Decomposition\",\"definitions\":{\"channel\":{\"ty"
    "pe\":\"object\",\"required\":[\"delay\",\"scale\",\"parameter\"],\"properties\":{\"s"
    "cale\":{\"description\":\"amplitude "
    "calibration\",\"type\":\"number\"},\"delay\":{\"description\":\"delay "
    "calibration in "
    "seconds\",\"type\":\"number\"},\"parameter\":{\"description\":\"parameters of "
    "the syswave exponential "
    "sum\",\"type\":\"object\",\"properties\":{\"B\":{\"description\":\"imaginary part "
    "of amplitude factor in units of full-scale\",\"type\":\"array\",\"items\":{\"t"
    "ype\":\"number\"}},\"gamma\":{\"description\":\"decay in 1/second\",\"type\":\"arr"
    "ay\",\"items\":{\"type\":\"number\"}},\"A\":{\"description\":\"real part of "
    "amplitude factor in units of full-scale\",\"type\":\"array\",\"items\":{\"type"
    "\":\"number\"}},\"omega\":{\"description\":\"angular frequency in Hz\",\"type\":\""
    "array\",\"items\":{\"type\":\"number\"}}},\"required\":[\"A\",\"B\",\"gamma\",\"omega\""
    "]},\"a_lin\":{\"description\":\"relative linear amplitude range [0..1]\",\"ty"
    "pe\":\"number\",\"maximum\":1,\"exclusiveMinimum\":false,\"minimum\":0,\"exclusi"
    "veMaximum\":false}}}},\"additionalProperties\":false,\"patternProperties\":"
    "{\"^[0-9]+$\":{\"description\":\"one field per channel, field name is "
    "channel index\",\"$ref\":\"#/definitions/channel\"}}}"
    ,
    /* example: */
    "{\"1\":{\"scale\":1.0,\"delay\":3.5e-09,\"parameter\":{\"B\":[-3.9,0.0,-0.3],\"ga"
    "mma\":[-1094726528.0,-769562752.0,-848000064.0],\"A\":[0.9,0.3,-1.3],\"ome"
    "ga\":[352020896.0,3647927552.0,-1977987072.0]},\"a_lin\":0.9},\"0\":{\"scale"
    "\":1.0,\"delay\":3.783458418887631e-09,\"parameter\":{\"B\":[-3.9813032150268"
    "555,0.08622030913829803,-0.3152860999107361],\"gamma\":[-1094726528.0,-7"
    "69562752.0,-848000064.0],\"A\":[0.9772450923919678,0.3354335129261017,-1"
    ".312678575515747],\"omega\":[352020896.0,3647927552.0,-1977987072.0]},\"a"
    "_lin\":0.27}}"
};

// Details for Gaussian decomposition of full waveform data
const MetaDataItemInfo RDB_RIEGL_GAUSSIAN_DECOMPOSITION = {
    /* name        */ "riegl.gaussian_decomposition",
    /* title       */ "Gaussian Decomposition",
    /* description */ "Details for Gaussian decomposition of full waveform data",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"riegl.gaussian_decomposition contains information "
    "relevant for extracting calibrated amplitudes and calibrated ranges "
    "from a Gaussian decomposition of full waveform data. This information "
    "is contained in a table with five columns. Two columns are to be used "
    "as input: amplitude_lsb_low_power and amplitude_lsb_high_power. The "
    "other three columns provide the outputs. Amplitude_db gives the "
    "calibrated amplitude in the optical regime in decibels. The range "
    "offset columns provide additive range offsets, given in units of "
    "seconds, for each channel.\",\"type\":\"object\",\"$schema\":\"http://json-sch"
    "ema.org/draft-04/schema#\",\"title\":\"Gaussian Decomposition\",\"required\":"
    "[\"amplitude_lsb_low_power\",\"amplitude_lsb_high_power\",\"amplitude_db\",\""
    "range_offset_sec_low_power\",\"range_offset_sec_high_power\"],\"properties"
    "\":{\"range_offset_sec_low_power\":{\"type\":\"array\",\"items\":{\"type\":\"numbe"
    "r\"}},\"amplitude_db\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"amplit"
    "ude_lsb_high_power\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"range_"
    "offset_sec_high_power\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"amp"
    "litude_lsb_low_power\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}}}}"
    ,
    /* example: */
    "{\"range_offset_sec_low_power\":[],\"amplitude_db\":[],\"amplitude_lsb_high"
    "_power\":[],\"range_offset_sec_high_power\":[],\"amplitude_lsb_low_power\":"
    "[]}"
};

// Point cloud georeferencing information
const MetaDataItemInfo RDB_RIEGL_GEO_TAG = {
    /* name        */ "riegl.geo_tag",
    /* title       */ "Geo Tag",
    /* description */ "Point cloud georeferencing information",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Point cloud georeferencing information\",\"type\":\"object"
    "\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"properties\":{\"p"
    "ose\":{\"type\":\"array\",\"description\":\"Coordinate Transformation Matrix "
    "to transform from File Coordinate System to Global Coordinate "
    "Reference System. 4x4 matrix stored as two dimensional array, row "
    "major order.\",\"minItems\":4,\"items\":{\"description\":\"rows\",\"type\":\"array"
    "\",\"minItems\":4,\"items\":{\"description\":\"columns\",\"type\":\"number\"},\"maxI"
    "tems\":4},\"maxItems\":4},\"crs\":{\"type\":\"object\",\"description\":\"Global "
    "Coordinate Reference System. Please note that only 3D Cartesian "
    "Coordinate Systems are "
    "allowed.\",\"properties\":{\"name\":{\"description\":\"Coordinate reference "
    "system name\",\"type\":\"string\"},\"epsg\":{\"description\":\"EPSG "
    "code\",\"type\":\"integer\",\"minimum\":0},\"wkt\":{\"description\":\"\\\"Well-Known"
    " Text\\\" string, OGC WKT dialect (see http://www.opengeospatial.org/sta"
    "ndards/wkt-crs)\",\"type\":\"string\"}}}},\"title\":\"Geo Tag\"}"
    ,
    /* example: */
    "{\"pose\":[[-0.269827776749716,-0.723017716139738,0.635954678449952,4063"
    "882.500831],[0.962908599449764,-0.20260517250352,0.178208229833847,113"
    "8787.607461],[0.0,0.660451759194338,0.7508684796801,4766084.550196],[0"
    ".0,0.0,0.0,1.0]],\"crs\":{\"name\":\"WGS84 "
    "Geocentric\",\"epsg\":4978,\"wkt\":\"GEOCCS[\\\"WGS84 Geocentric\\\",DATUM[\\\"WGS"
    "84\\\",SPHEROID[\\\"WGS84\\\",6378137.000,298.257223563,AUTHORITY[\\\"EPSG\\\",\\"
    "\"7030\\\"]],AUTHORITY[\\\"EPSG\\\",\\\"6326\\\"]],PRIMEM[\\\"Greenwich\\\",0.0000000"
    "000000000,AUTHORITY[\\\"EPSG\\\",\\\"8901\\\"]],UNIT[\\\"Meter\\\",1.0000000000000"
    "0000000,AUTHORITY[\\\"EPSG\\\",\\\"9001\\\"]],AXIS[\\\"X\\\",OTHER],AXIS[\\\"Y\\\",EAS"
    "T],AXIS[\\\"Z\\\",NORTH],AUTHORITY[\\\"EPSG\\\",\\\"4978\\\"]]\"}}"
};

// Geometric scale factor applied to point coordinates
const MetaDataItemInfo RDB_RIEGL_GEOMETRIC_SCALE_FACTOR = {
    /* name        */ "riegl.geometric_scale_factor",
    /* title       */ "Geometric Scale Factor",
    /* description */ "Geometric scale factor applied to point coordinates",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Geometric scale factor applied to point coordinates\",\""
    "type\":\"number\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"mi"
    "nimum\":0,\"exclusiveMinimum\":true}"
    ,
    /* example: */
    "1.0"
};

// Parameters used for georeferencing of the point cloud
const MetaDataItemInfo RDB_RIEGL_GEOREFERENCING_PARAMETERS = {
    /* name        */ "riegl.georeferencing_parameters",
    /* title       */ "Georeferencing Parameters",
    /* description */ "Parameters used for georeferencing of the point cloud",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Parameters used for georeferencing of the point cloud\""
    ",\"type\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\""
    "properties\":{\"trajectory_file\":{\"type\":\"object\",\"description\":\"Traject"
    "ory data used for georeferencing of the point "
    "cloud\",\"properties\":{\"file_extension\":{\"description\":\"Trajectory file "
    "extension, without the leading "
    "dot\",\"type\":\"string\"},\"file_uuid\":{\"description\":\"File's Universally "
    "Unique Identifier (RFC 4122)\",\"type\":\"string\"}},\"required\":[\"file_exte"
    "nsion\"]},\"socs_to_body_matrix\":{\"type\":\"array\",\"description\":\"Coordina"
    "te Transformation Matrix to transform from Scanner's Own Coordinate "
    "System to Body Coordinate System. 4x4 matrix stored as two dimensional"
    " array, row major order.\",\"minItems\":4,\"items\":{\"description\":\"rows\",\""
    "type\":\"array\",\"minItems\":4,\"items\":{\"description\":\"columns\",\"type\":\"nu"
    "mber\"},\"maxItems\":4},\"maxItems\":4},\"socs_to_rocs_matrix\":{\"type\":\"arra"
    "y\",\"description\":\"Coordinate Transformation Matrix to transform from "
    "Scanner's Own Coordinate System to Record Coordinate System. 4x4 "
    "matrix stored as two dimensional array, row major order.\",\"minItems\":4"
    ",\"items\":{\"description\":\"rows\",\"type\":\"array\",\"minItems\":4,\"items\":{\"d"
    "escription\":\"columns\",\"type\":\"number\"},\"maxItems\":4},\"maxItems\":4},\"bo"
    "dy_coordinate_system_type\":{\"type\":\"string\",\"description\":\"BODY "
    "coordinate frame (NED: North-East-Down, ENU: East-North-Up), default: "
    "NED\",\"enum\":[\"NED\",\"ENU\"]},\"trajectory_offsets\":{\"type\":\"object\",\"desc"
    "ription\":\"Correction offsets applied to the trajectory data\",\"properti"
    "es\":{\"offset_north\":{\"type\":\"number\",\"description\":\"[m]\"},\"offset_roll"
    "\":{\"type\":\"number\",\"description\":\"[deg]\"},\"offset_pitch\":{\"type\":\"numb"
    "er\",\"description\":\"[deg]\"},\"offset_height\":{\"type\":\"number\",\"descripti"
    "on\":\"[m]\"},\"offset_time\":{\"type\":\"number\",\"description\":\"[s]\"},\"offset"
    "_east\":{\"type\":\"number\",\"description\":\"[m]\"},\"version\":{\"type\":\"intege"
    "r\",\"description\":\"Meaning of offset values and how to apply them; "
    "version 0: "
    "Rz(yaw+offset_yaw)*Ry(pitch+offset_pitch)*Rx(roll+offset_roll), "
    "version 1: Rz(yaw)*Ry(pitch)*Rx(roll) * Rz(offset_yaw)*Ry(offset_pitch"
    ")*Rx(offset_roll)\"},\"offset_yaw\":{\"type\":\"number\",\"description\":\"[deg]"
    "\"}}}},\"title\":\"Georeferencing Parameters\"}"
    ,
    /* example: */
    "{\"trajectory_file\":{\"file_extension\":\"pofx\",\"file_uuid\":\"93a03615-66c0"
    "-4bea-8ff8-c577378fe660\"},\"socs_to_body_matrix\":[[-0.269827776749716,-"
    "0.723017716139738,0.635954678449952,0.0],[0.962908599449764,-0.2026051"
    "7250352,0.178208229833847,0.0],[0.0,0.660451759194338,0.7508684796801,"
    "0.0],[0.0,0.0,0.0,1.0]],\"body_coordinate_system_type\":\"NED\",\"trajector"
    "y_offsets\":{\"offset_north\":0.07,\"offset_roll\":0.03,\"offset_pitch\":0.01"
    ",\"offset_height\":-0.2,\"offset_time\":18.007,\"offset_east\":0.15,\"version"
    "\":0,\"offset_yaw\":-0.45}}"
};

// Details about GNSS processing
const MetaDataItemInfo RDB_RIEGL_GNSS_PROCESSING_INFO = {
    /* name        */ "riegl.gnss_processing_info",
    /* title       */ "GNSS Processing Information",
    /* description */ "Details about GNSS processing",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about GNSS processing\",\"type\":\"object\",\"$schem"
    "a\":\"http://json-schema.org/draft-04/schema#\",\"properties\":{\"base_stati"
    "ons\":{\"description\":\"List of GNSS base "
    "stations\",\"type\":\"array\",\"items\":{\"description\":\"GNSS base station det"
    "ails\",\"type\":\"object\",\"properties\":{\"longitude\":{\"description\":\"Longit"
    "ude [deg]\",\"type\":\"number\"},\"altitude\":{\"description\":\"Altitude "
    "[m]\",\"type\":\"number\"},\"latitude\":{\"description\":\"Latitude [deg]\",\"type"
    "\":\"number\"}},\"required\":[\"latitude\",\"longitude\",\"altitude\"]}}},\"title\""
    ":\"GNSS Processing Information\"}"
    ,
    /* example: */
    "{\"base_stations\":[{\"longitude\":15.663389822,\"altitude\":379.80041503906"
    "25,\"latitude\":48.658391162}]}"
};

// Imported control object text files
const MetaDataItemInfo RDB_RIEGL_IMPORTED_CONTROL_OBJECTS = {
    /* name        */ "riegl.imported_control_objects",
    /* title       */ "Imported Control Objects",
    /* description */ "Imported control object text files",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Imported control object text files\",\"type\":\"object\",\"$"
    "schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"riegl.impor"
    "ted_control_objects\",\"required\":[\"control_objects\",\"imported_files\"],\""
    "properties\":{\"control_objects\":{\"type\":\"object\",\"description\":\"One "
    "(optional) field per control object, field name is control object id\","
    "\"patternProperties\":{\"^[0-9]+$\":{\"type\":\"object\",\"required\":[\"file\",\"l"
    "ine_start\",\"line_count\"],\"properties\":{\"file\":{\"type\":\"integer\",\"descr"
    "iption\":\"Index (0-based) of the file in the 'imported_files' "
    "array\"},\"line_count\":{\"type\":\"integer\",\"description\":\"Number of lines "
    "used to import this "
    "object\"},\"line_start\":{\"type\":\"integer\",\"description\":\"Index (0-based)"
    " of the first line used from the 'lines' "
    "array\"}}}}},\"imported_files\":{\"type\":\"array\",\"description\":\"Array of "
    "imported files\",\"items\":{\"type\":\"object\",\"required\":[\"path\",\"lines\"],\""
    "properties\":{\"lines\":{\"type\":\"array\",\"description\":\"Each entry in this"
    " array is a line (string) from the text file\",\"items\":{\"type\":\"string\""
    "}},\"path\":{\"type\":\"string\",\"description\":\"Path of the text file\"}}}}}}"
    ,
    /* example: */
    "{\"control_objects\":{\"1\":{\"file\":0,\"line_count\":1,\"line_start\":1},\"2\":{"
    "\"file\":0,\"line_count\":1,\"line_start\":2}},\"imported_files\":[{\"lines\":[\""
    "Name,X [m],Y [m],Z "
    "[m]\",\"TPL1,799.7932,-19.9762,356.3410,0.000,0.000,2000-01-01,Control "
    "Object,Checker Horz 30 white,0.000 (\\u00b1180.000),0.000 (\\u00b1180.00"
    "0),0.000,0.000\",\"TPL2,305.6387,121.0023,375.2755,0.000,0.000,2000-01-0"
    "1,Control Object,Checker Horz 30 white,0.000 (\\u00b1180.000),0.000 (\\u"
    "00b1180.000),0.000,0.000\",\"TPL3,311.1808,143.9655,376.1465,0.000,0.000"
    ",2000-01-01,Control Object,Checker Horz 30 white,0.000 "
    "(\\u00b1180.000),0.000 (\\u00b1180.000),0.000,0.000\",\"TPL4,233.3328,146."
    "3850,376.3992,0.000,0.000,2000-01-01,Control Object,Checker Horz 30 "
    "white,0.000 (\\u00b1180.000),0.000 (\\u00b1180.000),0.000,0.000\",\"TPL5,8"
    "8.8272,193.0782,377.6008,0.000,0.000,2000-01-01,Control Object,Checker"
    " Horz 30 white,0.000 (\\u00b1180.000),0.000 (\\u00b1180.000),0.000,0.000"
    "\",\"TPL6N,-103.8853,262.5560,376.5860,0.000,0.000,2000-01-01,Control "
    "Object,Checker Horz 30 white,0.000 (\\u00b1180.000),0.000 (\\u00b1180.00"
    "0),0.000,0.000\",\"TPL6S,-103.9598,262.3373,376.5875,0.000,0.000,2000-01"
    "-01,Control Object,Checker Horz 30 white,0.000 (\\u00b1180.000),0.000 ("
    "\\u00b1180.000),0.000,0.000\",\"TPL7,-467.2435,373.6745,376.6268,0.000,0."
    "000,2000-01-01,Control Object,Rail profile RIEGL UIC60,0.000 "
    "(\\u00b1180.000),0.000 "
    "(\\u00b1180.000),0.000,0.000\"],\"path\":\"PRCS.csv\"},{\"lines\":[\"# "
    "Comment\",\"# Comment\",\"TPL1;48.661658680990;15.653506434875;356.3976\",\""
    "TPL2;48.662926800502;15.646798874450;375.2903\",\"TPL3;48.663133282889;1"
    "5.646874117656;376.1622\",\"# Comment\",\"TPL4;48.663155073562;15.64581738"
    "3282;376.4115\",\"TPL5;48.663574975585;15.643855822574;377.6106\",\"TPL6N;"
    "48.664199718144;15.641239835849;376.5986\",\"TPL6S;48.664197751809;15.64"
    "1238823565;376.6001\",\"TPL7;48.665198732983;15.636307251490;376.6612\"],"
    "\"path\":\"TPL_Points_ETRS89_LLA.txt\"}]}"
};

// Map of item names
const MetaDataItemInfo RDB_RIEGL_ITEM_NAMES = {
    /* name        */ "riegl.item_names",
    /* title       */ "Item Names",
    /* description */ "Map of item names",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Map of item names\",\"type\":\"object\",\"$schema\":\"http://j"
    "son-schema.org/draft-04/schema#\",\"title\":\"Item Names\",\"additionalPrope"
    "rties\":false,\"patternProperties\":{\"^-?[0-9]+$\":{\"description\":\"One "
    "field per item, field name is item id, field value is item "
    "name\",\"type\":\"string\"}}}"
    ,
    /* example: */
    "{\"1\":\"Name of item with id 1\",\"47\":\"Name of item with id 47\",\"2\":\"Name"
    " of item with id 2\",\"-1\":\"Name of item with id -1\"}"
};

// Lag angle depended range and reflectance correction
const MetaDataItemInfo RDB_RIEGL_LAG_ANGLE_CORRECTION = {
    /* name        */ "riegl.lag_angle_correction",
    /* title       */ "Lag Angle Correction",
    /* description */ "Lag angle depended range and reflectance correction",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Lag angle depended range and reflectance correction\",\""
    "type\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"ti"
    "tle\":\"Lag Angle Correction\",\"required\":[\"ranges_m\",\"range_correction_m"
    "\",\"reflectance_correction_db\"],\"properties\":{\"reflectance_correction_d"
    "b\":{\"type\":\"array\",\"description\":\"Reflectance correction [db] as a "
    "function of the range and for applied scanrate\",\"items\":{\"type\":\"numbe"
    "r\"}},\"range_correction_m\":{\"type\":\"array\",\"description\":\"Range "
    "correction [m] as a function of the range and for applied scanrate, "
    "which defines the lag angle\",\"items\":{\"type\":\"number\"}},\"ranges_m\":{\"t"
    "ype\":\"array\",\"description\":\"Range [m]\",\"items\":{\"type\":\"number\"}}}}"
    ,
    /* example: */
    "{\"reflectance_correction_db\":[0.0,0.0,0.16,0.46,1.18,2.97,2.97],\"range"
    "_correction_m\":[0.0,0.0,0.0004,0.0023,0.0039,0.0053,0.0053],\"ranges_m\""
    ":[0.0,4.795,31.964,63.928,95.892,127.856,10000.0]}"
};

// License keys for software features
const MetaDataItemInfo RDB_RIEGL_LICENSES = {
    /* name        */ "riegl.licenses",
    /* title       */ "Software License Keys",
    /* description */ "License keys for software features",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"License keys for software features\",\"type\":\"object\",\"$"
    "schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Software "
    "License Keys\",\"additionalProperties\":false,\"patternProperties\":{\"^.*$\""
    ":{\"description\":\"Each field of the object represents a feature and "
    "holds a list of license keys, where the field name is the feature "
    "name.\",\"type\":\"array\",\"items\":{\"description\":\"License key (example: "
    "'46AE032A - 39882AC4 - 9EC0A184 - "
    "6F163D73')\",\"type\":\"string\"},\"minItems\":1}}}"
    ,
    /* example: */
    "{\"Georeferencing\":[\"46AE032A - 39882AC4 - 9EC0A184 - 6F163D73\"],\"Full "
    "Waveform Analysis Topography with GPU support\":[\"8AB44126 - 23B92250 -"
    " 16E2689F - 34EF7E7B\"],\"MTA resolution\":[\"468E020A - 39A922E4 - "
    "B681A184 - 673E3D72\"],\"Full Waveform Analysis Topography\":[\"0FD5FF07 -"
    " 011A1255 - 9F76CACA - 8D2ED557\"]}"
};

// Parameters for MTA processing
const MetaDataItemInfo RDB_RIEGL_MTA_SETTINGS = {
    /* name        */ "riegl.mta_settings",
    /* title       */ "MTA Settings",
    /* description */ "Parameters for MTA processing",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Parameters for MTA processing\",\"type\":\"object\",\"$schem"
    "a\":\"http://json-schema.org/draft-04/schema#\",\"properties\":{\"modulation"
    "_depth\":{\"type\":\"number\",\"description\":\"Depth of pulse position "
    "modulation in meter.\",\"minimum\":0},\"zone_width\":{\"type\":\"number\",\"desc"
    "ription\":\"Width of a MTA zone in meter.\",\"minimum\":0},\"zone_count\":{\"t"
    "ype\":\"integer\",\"description\":\"Maximum number of MTA "
    "zones.\",\"maximum\":255,\"minimum\":0}},\"title\":\"MTA Settings\"}"
    ,
    /* example: */
    "{\"modulation_depth\":9.368514,\"zone_width\":149.896225,\"zone_count\":23}"
};

// Lookup table for range correction based on raw range
const MetaDataItemInfo RDB_RIEGL_NEAR_RANGE_CORRECTION = {
    /* name        */ "riegl.near_range_correction",
    /* title       */ "Near Range Correction Table",
    /* description */ "Lookup table for range correction based on raw range",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Lookup table for range correction based on raw range\","
    "\"type\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"t"
    "itle\":\"Near Range Correction Table\",\"required\":[\"delta\",\"content\"],\"pr"
    "operties\":{\"delta\":{\"description\":\"Delta between table entries [m], "
    "first entry is at range = 0 "
    "m\",\"type\":\"number\"},\"content\":{\"description\":\"Correction value [m] to "
    "be added to the raw range\",\"type\":\"array\",\"maxItems\":2000,\"items\":{\"ty"
    "pe\":\"number\"},\"minItems\":1}}}"
    ,
    /* example: */
    "{\"delta\":0.512,\"content\":[0.0]}"
};

// Standard deviation for range and amplitude as a function of amplitude
const MetaDataItemInfo RDB_RIEGL_NOISE_ESTIMATES = {
    /* name        */ "riegl.noise_estimates",
    /* title       */ "Noise Estimates",
    /* description */ "Standard deviation for range and amplitude as a function of amplitude",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Standard deviation for range and amplitude as a "
    "function of amplitude\",\"type\":\"object\",\"$schema\":\"http://json-schema.o"
    "rg/draft-04/schema#\",\"title\":\"Noise Estimates\",\"required\":[\"amplitude\""
    ",\"range_sigma\",\"amplitude_sigma\"],\"properties\":{\"range_sigma\":{\"type\":"
    "\"array\",\"description\":\"Sigma range [m]\",\"items\":{\"type\":\"number\"}},\"am"
    "plitude\":{\"type\":\"array\",\"description\":\"Amplitude [dB]\",\"items\":{\"type"
    "\":\"number\"}},\"amplitude_sigma\":{\"type\":\"array\",\"description\":\"Sigma "
    "amplitude [dB]\",\"items\":{\"type\":\"number\"}}}}"
    ,
    /* example: */
    "{\"range_sigma\":[0.065,0.056,0.046,0.038,0.032,0.027,0.024,0.021,0.018,"
    "0.016,0.014],\"amplitude\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0"
    "],\"amplitude_sigma\":[0.988,0.988,0.875,0.774,0.686,0.608,0.54,0.482,0."
    "432,0.39,0.354]}"
};

// Notch filter parameters for window glass echoes
const MetaDataItemInfo RDB_RIEGL_NOTCH_FILTER = {
    /* name        */ "riegl.notch_filter",
    /* title       */ "Notch Filter",
    /* description */ "Notch filter parameters for window glass echoes",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Notch filter parameters for window glass echoes\",\"type"
    "\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\""
    ":\"Notch Filter\",\"required\":[\"range_minimum\",\"range_maximum\",\"amplitude"
    "_maximum\"],\"properties\":{\"range_maximum\":{\"type\":\"number\",\"description"
    "\":\"Maximum range "
    "[m]\"},\"amplitude_maximum\":{\"type\":\"number\",\"description\":\"Maximum "
    "amplitude [dB]\",\"minimum\":0},\"range_minimum\":{\"type\":\"number\",\"descrip"
    "tion\":\"Minimum range [m]\"}}}"
    ,
    /* example: */
    "{\"range_maximum\":0.2,\"amplitude_maximum\":18.0,\"range_minimum\":-0.5}"
};

// Details about the pixels contained in the file
const MetaDataItemInfo RDB_RIEGL_PIXEL_INFO = {
    /* name        */ "riegl.pixel_info",
    /* title       */ "Pixel Information",
    /* description */ "Details about the pixels contained in the file",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about the pixels contained in the file\",\"type\""
    ":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":"
    "\"Pixel Information\",\"required\":[\"size\"],\"definitions\":{\"pixel_size\":{\""
    "type\":\"array\",\"description\":\"Size of "
    "pixels.\",\"minItems\":2,\"items\":{\"type\":\"number\",\"description\":\"Length "
    "of pixel edge [m].\",\"minimum\":0},\"maxItems\":2}},\"properties\":{\"size\":{"
    "\"description\":\"Size of pixels in file coordinate system.\",\"$ref\":\"#/de"
    "finitions/pixel_size\"},\"size_llcs\":{\"description\":\"Size of pixels in a"
    " locally levelled cartesian coordinate system (xy). This is only used "
    "for pixels based on a map "
    "projection.\",\"$ref\":\"#/definitions/pixel_size\"}}}"
    ,
    /* example: */
    "{\"size\":[0.5971642834779395,0.5971642834779395],\"size_llcs\":[0.5156575"
    "252891171,0.5130835356683303]}"
};

// Details about the plane patch matching process
const MetaDataItemInfo RDB_RIEGL_PLANE_PATCH_MATCHING = {
    /* name        */ "riegl.plane_patch_matching",
    /* title       */ "Plane Patch Matching",
    /* description */ "Details about the plane patch matching process",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about the plane patch matching process\",\"type\""
    ":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":"
    "\"Plane Patch Matching\",\"required\":[\"plane_patch_file_one\",\"plane_patch"
    "_file_two\"],\"definitions\":{\"file_reference\":{\"type\":\"object\",\"descript"
    "ion\":\"Reference to a plane patch "
    "file\",\"properties\":{\"file_uuid\":{\"description\":\"Plane patch file's "
    "Universally Unique Identifier (RFC "
    "4122)\",\"type\":\"string\"},\"file_path\":{\"description\":\"Path of the plane "
    "patch file relative to the match file\",\"type\":\"string\"}},\"required\":[\""
    "file_uuid\",\"file_path\"]}},\"properties\":{\"plane_patch_file_one\":{\"descr"
    "iption\":\"Reference to the plane patch file one\",\"$ref\":\"#/definitions/"
    "file_reference\"},\"plane_patch_file_two\":{\"description\":\"Reference to "
    "the plane patch file two\",\"$ref\":\"#/definitions/file_reference\"}}}"
    ,
    /* example: */
    "{\"plane_patch_file_one\":{\"file_uuid\":\"810f5d57-eccf-49ed-b07a-0cdd109b"
    "4213\",\"file_path\":\"Record009_Line001/191025_121410_Scanner_1.ptch\"},\"p"
    "lane_patch_file_two\":{\"file_uuid\":\"fa47d509-a64e-49ce-8b14-ff3130fbefa"
    "9\",\"file_path\":\"project.ptch\"}}"
};

// Statistics about plane patches found by plane patch extractor
const MetaDataItemInfo RDB_RIEGL_PLANE_PATCH_STATISTICS = {
    /* name        */ "riegl.plane_patch_statistics",
    /* title       */ "Plane Patch Statistics",
    /* description */ "Statistics about plane patches found by plane patch extractor",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Statistics about plane patches found by plane patch ex"
    "tractor\",\"type\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/sc"
    "hema#\",\"properties\":{\"total_area\":{\"type\":\"number\",\"description\":\"sum "
    "of all plane patch areas [m\\u00b2]\"},\"total_horizontal_area\":{\"type\":\""
    "number\",\"description\":\"sum of all plane patch areas projected to "
    "horizontal plane [m\\u00b2]\"}},\"title\":\"Plane Patch Statistics\"}"
    ,
    /* example: */
    "{\"total_area\":14007.965,\"total_horizontal_area\":13954.601}"
};

// Settings and classes for plane slope classification
const MetaDataItemInfo RDB_RIEGL_PLANE_SLOPE_CLASS_INFO = {
    /* name        */ "riegl.plane_slope_class_info",
    /* title       */ "Plane Slope Class Info",
    /* description */ "Settings and classes for plane slope classification",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Settings and classes for plane slope classification\",\""
    "type\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"ti"
    "tle\":\"Plane Slope Class Info\",\"required\":[\"settings\",\"classes\"],\"defin"
    "itions\":{\"method-2\":{\"type\":\"object\",\"description\":\"Classification "
    "method 2\",\"properties\":{\"sloping_plane_classes_maximum_angle\":{\"type\":"
    "\"number\",\"description\":\"maximum inclination angle of sloping plane "
    "patches [deg]\",\"maximum\":360.0,\"minimum\":-360.0},\"sloping_plane_classe"
    "s_minimum_angle\":{\"type\":\"number\",\"description\":\"minimum inclination "
    "angle of sloping plane patches [deg]\",\"maximum\":360.0,\"minimum\":-360.0"
    "},\"plane_classification_method\":{\"type\":\"integer\",\"description\":\"metho"
    "d ID (=2)\",\"maximum\":2,\"minimum\":2}},\"required\":[\"plane_classification"
    "_method\",\"sloping_plane_classes_minimum_angle\",\"sloping_plane_classes_"
    "maximum_angle\"]},\"method-1\":{\"type\":\"object\",\"description\":\"Classifica"
    "tion method 1\",\"properties\":{\"maximum_inclination_angle_horizontal\":{\""
    "type\":\"number\",\"description\":\"maximum inclination angle of horizontal "
    "plane patches [deg]\",\"maximum\":360.0,\"minimum\":-360.0},\"plane_classifi"
    "cation_method\":{\"type\":\"integer\",\"description\":\"method ID (=1)\",\"maxim"
    "um\":1,\"minimum\":1}},\"required\":[\"plane_classification_method\",\"maximum"
    "_inclination_angle_horizontal\"]}},\"properties\":{\"classes\":{\"type\":\"obj"
    "ect\",\"description\":\"Class definition table\",\"additionalProperties\":fal"
    "se,\"patternProperties\":{\"^[0-9]+$\":{\"description\":\"one field per "
    "class, field name is class number, field value is class name\",\"type\":\""
    "string\"}}},\"settings\":{\"type\":\"object\",\"description\":\"Classification "
    "settings, details see documentation of rdbplanes\",\"oneOf\":[{\"$ref\":\"#/"
    "definitions/method-1\"},{\"$ref\":\"#/definitions/method-2\"}]}}}"
    ,
    /* example: */
    "{\"classes\":{\"8\":\"vertical, pointing north\",\"14\":\"horizontal, pointing "
    "down\",\"4\":\"sloping, pointing up and north\",\"13\":\"sloping, pointing "
    "down and west\",\"5\":\"sloping, pointing up and west\",\"11\":\"sloping, "
    "pointing down and south\",\"9\":\"vertical, pointing west\",\"12\":\"sloping, "
    "pointing down and north\",\"7\":\"vertical, pointing south\",\"6\":\"vertical,"
    " pointing east\",\"1\":\"horizontal, pointing up\",\"2\":\"sloping, pointing "
    "up and east\",\"3\":\"sloping, pointing up and south\",\"10\":\"sloping, "
    "pointing down and east\"},\"settings\":{\"sloping_plane_classes_maximum_an"
    "gle\":70.0,\"sloping_plane_classes_minimum_angle\":10.0,\"plane_classifica"
    "tion_method\":2}}"
};

// Grouping and sorting of point attributes for visualization purposes
const MetaDataItemInfo RDB_RIEGL_POINT_ATTRIBUTE_GROUPS = {
    /* name        */ "riegl.point_attribute_groups",
    /* title       */ "Point Attribute Groups",
    /* description */ "Grouping and sorting of point attributes for visualization purposes",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Grouping and sorting of point attributes for "
    "visualization purposes\",\"type\":\"object\",\"$schema\":\"http://json-schema."
    "org/draft-04/schema#\",\"title\":\"Point Attribute Groups\",\"additionalProp"
    "erties\":false,\"patternProperties\":{\"^.*$\":{\"description\":\"Each field "
    "of the object represents a point attribute group and holds a list of "
    "point attributes, where the field name is the group "
    "name.\",\"type\":\"array\",\"items\":{\"description\":\"Point attribute full "
    "name or name pattern (perl regular expression "
    "syntax)\",\"type\":\"string\"},\"minItems\":1}}}"
    ,
    /* example: */
    "{\"Primary Attributes\":[\"riegl.reflectance\",\"riegl.amplitude\",\"riegl.de"
    "viation\"],\"Other Attributes\":[\"riegl.selected\",\"riegl.visible\"],\"Coord"
    "inates/Vectors\":[\"riegl.xyz\",\"riegl.range\",\"riegl.theta\",\"riegl.phi\"],"
    "\"Secondary Attributes\":[\"riegl.mirror_facet\",\"riegl.waveform_available"
    "\"],\"Time\":[\"riegl.timestamp\"]}"
};

// Details about point cloud files
const MetaDataItemInfo RDB_RIEGL_POINTCLOUD_INFO = {
    /* name        */ "riegl.pointcloud_info",
    /* title       */ "Point Cloud Information",
    /* description */ "Details about point cloud files",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about point cloud files\",\"type\":\"object\",\"$sch"
    "ema\":\"http://json-schema.org/draft-04/schema#\",\"properties\":{\"field_of"
    "_application\":{\"description\":\"Field of application\",\"type\":\"string\",\"e"
    "num\":[\"unknown\",\"SLS\",\"TLS\",\"KLS\",\"MLS\",\"ULS\",\"ALS\",\"BLS\",\"ILS\"]},\"com"
    "ments\":{\"description\":\"Comments\",\"type\":\"string\"},\"project\":{\"descript"
    "ion\":\"Project name\",\"type\":\"string\"}},\"title\":\"Point Cloud "
    "Information\"}"
    ,
    /* example: */
    "{\"field_of_application\":\"ALS\",\"comments\":\"Line 3\",\"project\":\"Campaign "
    "4\"}"
};

// Estimated position and orientation information
const MetaDataItemInfo RDB_RIEGL_POSE_ESTIMATION = {
    /* name        */ "riegl.pose_estimation",
    /* title       */ "Pose Estimation",
    /* description */ "Estimated position and orientation information",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Estimated position and orientation information as "
    "measured by GNSS, IMU or inclination sensors\",\"type\":\"object\",\"$schema"
    "\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Pose Estimation\","
    "\"required\":[\"orientation\"],\"properties\":{\"position\":{\"description\":\"Po"
    "sition coordinates and position accuracy values as measured by GNSS in"
    " the specified Coordinate Reference System (CRS)\",\"type\":\"object\",\"pro"
    "perties\":{\"coordinate_1\":{\"description\":\"Coordinate 1 as defined by "
    "axis 1 of the specified CRS (e.g., X, "
    "Latitude)\",\"type\":\"number\"},\"coordinate_2\":{\"description\":\"Coordinate "
    "2 as defined by axis 2 of the specified CRS (e.g., Y, Longitude)\",\"typ"
    "e\":\"number\"},\"vertical_accuracy\":{\"description\":\"Vertical accuracy [m]"
    "\",\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":true},\"coordinate_3\":"
    "{\"description\":\"Coordinate 3 as defined by axis 3 of the specified CRS"
    " (e.g., Z, Altitude)\",\"type\":\"number\"},\"crs\":{\"type\":\"object\",\"descrip"
    "tion\":\"Global Coordinate Reference "
    "System\",\"properties\":{\"epsg\":{\"description\":\"EPSG "
    "code\",\"type\":\"integer\",\"minimum\":0},\"wkt\":{\"description\":\"\\\"Well-Known"
    " Text\\\" string, OGC WKT dialect (see http://www.opengeospatial.org/sta"
    "ndards/wkt-crs)\",\"type\":\"string\"}},\"required\":[\"epsg\"]},\"horizontal_ac"
    "curacy\":{\"description\":\"Horizontal accuracy [m]\",\"type\":\"number\",\"mini"
    "mum\":0,\"exclusiveMinimum\":true}},\"required\":[\"coordinate_1\",\"coordinat"
    "e_2\",\"coordinate_3\",\"horizontal_accuracy\",\"vertical_accuracy\",\"crs\"]},"
    "\"orientation\":{\"description\":\"Orientation values and orientation "
    "accuracies, measured with IMU or inclination "
    "sensors.\",\"type\":\"object\",\"properties\":{\"yaw\":{\"description\":\"Yaw "
    "angle about scanner Z-axis [deg]\",\"type\":\"number\",\"maximum\":360,\"minim"
    "um\":-360},\"pitch\":{\"description\":\"Pitch angle about scanner Y-axis [de"
    "g]\",\"type\":\"number\",\"maximum\":360,\"minimum\":-360},\"roll_accuracy\":{\"de"
    "scription\":\"Roll angle accuracy [deg]\",\"type\":\"number\",\"minimum\":0,\"ex"
    "clusiveMinimum\":true},\"pitch_accuracy\":{\"description\":\"Pitch angle "
    "accuracy [deg]\",\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":true},\""
    "yaw_accuracy\":{\"description\":\"Yaw angle accuracy [deg]\",\"type\":\"number"
    "\",\"minimum\":0,\"exclusiveMinimum\":true},\"roll\":{\"description\":\"Roll "
    "angle about scanner X-axis [deg]\",\"type\":\"number\",\"maximum\":360,\"minim"
    "um\":-360}},\"required\":[\"roll\",\"pitch\",\"yaw\",\"roll_accuracy\",\"pitch_acc"
    "uracy\",\"yaw_accuracy\"]},\"barometric_height_amsl\":{\"description\":\"Altit"
    "ude determined based on the atmospheric pressure according to the "
    "standard atmosphere laws [m].\",\"type\":\"number\"}}}"
    ,
    /* example: */
    "{\"position\":{\"coordinate_1\":48.655799473,\"coordinate_2\":15.645033406,\""
    "vertical_accuracy\":1.3314999341964722,\"coordinate_3\":362.7124938964844"
    ",\"crs\":{\"epsg\":4979,\"wkt\":\"GEOGCS[\\\"WGS84 / Geographic\\\",DATUM[\\\"WGS84"
    "\\\",SPHEROID[\\\"WGS84\\\",6378137.000,298.257223563,AUTHORITY[\\\"EPSG\\\",\\\"7"
    "030\\\"]],AUTHORITY[\\\"EPSG\\\",\\\"6326\\\"]],PRIMEM[\\\"Greenwich\\\",0.000000000"
    "0000000,AUTHORITY[\\\"EPSG\\\",\\\"8901\\\"]],UNIT[\\\"Degree\\\",0.01745329251994"
    "329547,AUTHORITY[\\\"EPSG\\\",\\\"9102\\\"]],AXIS[\\\"Latitude\\\",NORTH],AXIS[\\\"L"
    "ongitude\\\",EAST],AUTHORITY[\\\"EPSG\\\",\\\"4979\\\"]]\"},\"horizontal_accuracy\""
    ":0.810699999332428},\"orientation\":{\"yaw\":101.87293630292045,\"pitch\":1."
    "509153024827064,\"roll_accuracy\":0.009433783936875745,\"pitch_accuracy\":"
    "0.009433783936875745,\"yaw_accuracy\":1.0094337839368757,\"roll\":3.147430"
    "73066123},\"barometric_height_amsl\":386.7457796227932}"
};

// Details on position and orientation sensors
const MetaDataItemInfo RDB_RIEGL_POSE_SENSORS = {
    /* name        */ "riegl.pose_sensors",
    /* title       */ "Pose Sensors",
    /* description */ "Details on position and orientation sensors",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details on position and orientation sensors\",\"type\":\"o"
    "bject\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Po"
    "se Sensors\",\"required\":[\"gyroscope\",\"accelerometer\",\"magnetic_field_se"
    "nsor\"],\"definitions\":{\"vector\":{\"type\":\"array\",\"minItems\":3,\"items\":{\""
    "type\":\"number\",\"description\":\"Index 0=X, 1=Y, 2=Z component\"},\"maxItem"
    "s\":3}},\"properties\":{\"magnetic_field_sensor\":{\"type\":\"object\",\"descrip"
    "tion\":\"Magnetic Field Sensor "
    "details\",\"properties\":{\"z_axis\":{\"description\":\"Sensitive Z axis of "
    "sensor at frame angle = "
    "0\",\"$ref\":\"#/definitions/vector\"},\"fixed\":{\"description\":\"Distortion "
    "of magnetic field caused by non-rotating scanner "
    "part\",\"$ref\":\"#/definitions/vector\"},\"offset\":{\"description\":\"Value to"
    " be subtracted from raw measurement values\",\"$ref\":\"#/definitions/vect"
    "or\"},\"y_axis\":{\"description\":\"Sensitive Y axis of sensor at frame "
    "angle = "
    "0\",\"$ref\":\"#/definitions/vector\"},\"x_axis\":{\"description\":\"Sensitive X"
    " axis of sensor at frame angle = 0\",\"$ref\":\"#/definitions/vector\"},\"re"
    "lative_nonlinearity\":{\"description\":\"Relative nonlinearity, dimensionl"
    "ess\",\"$ref\":\"#/definitions/vector\"},\"unit\":{\"type\":\"number\",\"descripti"
    "on\":\"Unit of raw data and calibration values, 1 LSB in nT\",\"minimum\":0"
    ",\"exclusiveMinimum\":true}},\"required\":[\"unit\",\"x_axis\",\"y_axis\",\"z_axi"
    "s\",\"offset\",\"fixed\",\"relative_nonlinearity\"]},\"gyroscope\":{\"type\":\"obj"
    "ect\",\"description\":\"Gyroscope "
    "details\",\"properties\":{\"z_axis\":{\"description\":\"Sensitive Z axis of "
    "sensor at frame angle = "
    "0\",\"$ref\":\"#/definitions/vector\"},\"origin\":{\"description\":\"Sensor "
    "origin in SOCS [m] at frame angle = "
    "0\",\"$ref\":\"#/definitions/vector\"},\"offset\":{\"description\":\"Value to be"
    " subtracted from raw measurement values\",\"$ref\":\"#/definitions/vector\""
    "},\"y_axis\":{\"description\":\"Sensitive Y axis of sensor at frame angle ="
    " 0\",\"$ref\":\"#/definitions/vector\"},\"x_axis\":{\"description\":\"Sensitive "
    "X axis of sensor at frame angle = 0\",\"$ref\":\"#/definitions/vector\"},\"r"
    "elative_nonlinearity\":{\"description\":\"Relative nonlinearity, dimension"
    "less\",\"$ref\":\"#/definitions/vector\"},\"unit\":{\"type\":\"number\",\"descript"
    "ion\":\"Unit of raw data and calibration values, 1 LSB in rad/s\",\"minimu"
    "m\":0,\"exclusiveMinimum\":true}},\"required\":[\"unit\",\"x_axis\",\"y_axis\",\"z"
    "_axis\",\"offset\",\"origin\",\"relative_nonlinearity\"]},\"accelerometer\":{\"t"
    "ype\":\"object\",\"description\":\"Accelerometer "
    "details\",\"properties\":{\"z_axis\":{\"description\":\"Sensitive Z axis of "
    "sensor at frame angle = "
    "0\",\"$ref\":\"#/definitions/vector\"},\"origin\":{\"description\":\"Sensor "
    "origin in SOCS [m] at frame angle = "
    "0\",\"$ref\":\"#/definitions/vector\"},\"offset\":{\"description\":\"Value to be"
    " subtracted from raw measurement values\",\"$ref\":\"#/definitions/vector\""
    "},\"y_axis\":{\"description\":\"Sensitive Y axis of sensor at frame angle ="
    " 0\",\"$ref\":\"#/definitions/vector\"},\"x_axis\":{\"description\":\"Sensitive "
    "X axis of sensor at frame angle = 0\",\"$ref\":\"#/definitions/vector\"},\"r"
    "elative_nonlinearity\":{\"description\":\"Relative nonlinearity, dimension"
    "less\",\"$ref\":\"#/definitions/vector\"},\"unit\":{\"type\":\"number\",\"descript"
    "ion\":\"Unit of raw data and calibration values, 1 LSB in 9.81 m/s\\u00b2"
    "\",\"minimum\":0,\"exclusiveMinimum\":true}},\"required\":[\"unit\",\"x_axis\",\"y"
    "_axis\",\"z_axis\",\"offset\",\"origin\",\"relative_nonlinearity\"]}}}"
    ,
    /* example: */
    "{\"magnetic_field_sensor\":{\"z_axis\":[0.00041987866279669106,7.876977906"
    "562388e-05,0.011407104320824146],\"fixed\":[-1576.010498046875,1596.0817"
    "87109375,0.0],\"offset\":[-23812.052734375,5606.57666015625,2493.28125],"
    "\"y_axis\":[0.00027888521435670555,-0.011427424848079681,-5.204829722060"
    "822e-05],\"x_axis\":[-0.011162743903696537,-2.315962774446234e-05,0.0001"
    "6818844596855342],\"relative_nonlinearity\":[0.0,0.0,0.0],\"unit\":91.7431"
    "1828613281},\"gyroscope\":{\"z_axis\":[0.555869996547699,119.2213516235351"
    "6,0.467585027217865],\"origin\":[0.026900000870227814,-0.039999999105930"
    "33,-0.08950000256299973],\"offset\":[-50.92609786987305,146.156433105468"
    "75,62.4327278137207],\"y_axis\":[-0.440765917301178,-0.7897399663925171,"
    "119.5894775390625],\"x_axis\":[-121.195556640625,0.8219714164733887,0.23"
    "13031703233719],\"relative_nonlinearity\":[2.888176311444113e-07,1.06274"
    "164579645e-07,-1.7186295080634935e-39],\"unit\":0.00014544410805683583},"
    "\"accelerometer\":{\"z_axis\":[1.639882206916809,15166.744140625,-116.9974"
    "2889404297],\"origin\":[0.026900000870227814,-0.03999999910593033,-0.089"
    "50000256299973],\"offset\":[-733.3636474609375,58.969032287597656,1060.2"
    "550048828125],\"y_axis\":[-7.027288913726807,-44.12333679199219,14952.37"
    "01171875],\"x_axis\":[-15008.123046875,56.956390380859375,-60.5175666809"
    "082],\"relative_nonlinearity\":[0.0,0.0,0.0],\"unit\":6.666666740784422e-0"
    "5}}"
};

// Laser pulse position modulation used for MTA resolution
const MetaDataItemInfo RDB_RIEGL_PULSE_POSITION_MODULATION = {
    /* name        */ "riegl.pulse_position_modulation",
    /* title       */ "Pulse Position Modulation",
    /* description */ "Laser pulse position modulation used for MTA resolution",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Laser pulse position modulation used for MTA resolutio"
    "n\",\"type\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\""
    ",\"title\":\"Pulse Position Modulation\",\"required\":[\"length\",\"num_mod_amp"
    "l\",\"pulse_interval\"],\"properties\":{\"length\":{\"type\":\"integer\",\"descrip"
    "tion\":\"Length of code\",\"maximum\":255,\"minimum\":0},\"pulse_interval\":{\"t"
    "ype\":\"array\",\"description\":\"Explicit table of the pulse position "
    "modulation used for MTA resolution. Table gives times between "
    "successive laser pulses in seconds.\",\"items\":{\"type\":\"number\",\"minimum"
    "\":0}},\"phase_step\":{\"type\":\"integer\",\"description\":\"Step width in "
    "phase of modulation code from line to line\",\"maximum\":255,\"minimum\":0}"
    ",\"code_phase_mode\":{\"type\":\"integer\",\"description\":\"0: no "
    "synchronization, 1: toggle between 2 phases, 2: increment with phase_i"
    "ncrement\",\"maximum\":255,\"minimum\":0},\"num_mod_ampl\":{\"type\":\"integer\","
    "\"description\":\"Number of different modulation amplitudes (2: binary "
    "modulation)\",\"maximum\":255,\"minimum\":0}}}"
    ,
    /* example: */
    "{\"length\":31,\"pulse_interval\":[2.759375e-06,2.759375e-06,2.759375e-06,"
    "2.759375e-06,2.821875e-06,2.759375e-06,2.759375e-06,2.821875e-06,2.759"
    "375e-06,2.821875e-06,2.821875e-06,2.759375e-06,2.759375e-06,2.821875e-"
    "06,2.821875e-06,2.821875e-06,2.821875e-06,2.821875e-06,2.759375e-06,2."
    "759375e-06,2.759375e-06,2.821875e-06,2.821875e-06,2.759375e-06,2.82187"
    "5e-06,2.821875e-06,2.821875e-06,2.759375e-06,2.821875e-06,2.759375e-06"
    ",2.821875e-06],\"phase_step\":5,\"code_phase_mode\":2,\"num_mod_ampl\":2}"
};

// Statistics about target distance wrt. SOCS origin
const MetaDataItemInfo RDB_RIEGL_RANGE_STATISTICS = {
    /* name        */ "riegl.range_statistics",
    /* title       */ "Range Statistics",
    /* description */ "Statistics about target distance wrt. SOCS origin",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Statistics about target distance wrt. SOCS origin\",\"ty"
    "pe\":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"titl"
    "e\":\"Range Statistics\",\"required\":[\"minimum\",\"average\",\"maximum\",\"std_d"
    "ev\"],\"properties\":{\"std_dev\":{\"type\":\"number\",\"description\":\"Standard "
    "deviation\"},\"maximum\":{\"type\":\"number\",\"description\":\"Maximum "
    "value\"},\"minimum\":{\"type\":\"number\",\"description\":\"Minimum "
    "value\"},\"average\":{\"type\":\"number\",\"description\":\"Average value\"}}}"
    ,
    /* example: */
    "{\"std_dev\":24.349,\"maximum\":574.35,\"minimum\":0.919,\"average\":15.49738}"
};

// Receiver Internals
const MetaDataItemInfo RDB_RIEGL_RECEIVER_INTERNALS = {
    /* name        */ "riegl.receiver_internals",
    /* title       */ "Receiver Internals",
    /* description */ "Receiver Internals",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Receiver Internals\",\"type\":\"object\",\"$schema\":\"http://"
    "json-schema.org/draft-04/schema#\",\"title\":\"Receiver Internals\",\"defini"
    "tions\":{\"fp_table_row\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"type\":\"n"
    "umber\"},\"maxItems\":2048},\"fp_table\":{\"type\":\"object\",\"desription\":\"sca"
    "nner internal data\",\"properties\":{\"ch\":{\"type\":\"integer\",\"max\":255,\"mi"
    "n\":0,\"description\":\"channel "
    "number\"},\"tc\":{\"type\":\"integer\",\"max\":255,\"min\":0,\"description\":\"table"
    " data type "
    "code\"},\"ny\":{\"type\":\"integer\",\"max\":2048,\"min\":1,\"description\":\"number"
    " of y entries\"},\"tv\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"oneOf\":[{\""
    "$ref\":\"#/definitions/fp_table_row\"},{\"type\":\"number\"}]},\"maxItems\":204"
    "8},\"nx\":{\"type\":\"integer\",\"max\":2048,\"min\":1,\"description\":\"number of "
    "x entries\"}},\"required\":[\"ch\",\"tc\",\"nx\",\"ny\",\"tv\"]},\"fp\":{\"type\":\"obje"
    "ct\",\"description\":\"Fingerprint values\",\"properties\":{\"s\":{\"type\":\"arra"
    "y\",\"minItems\":1,\"items\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"type\":\""
    "number\"},\"maxItems\":4096},\"maxItems\":256},\"w\":{\"type\":\"array\",\"minItem"
    "s\":1,\"items\":{\"type\":\"array\",\"minItems\":5,\"items\":{\"type\":\"number\"},\"m"
    "axItems\":5},\"maxItems\":256}},\"required\":[\"s\",\"w\"]}},\"properties\":{\"a\":"
    "{\"type\":\"array\",\"minItems\":1,\"description\":\"Amplitude [dB]\",\"items\":{\""
    "type\":\"number\"},\"maxItems\":256},\"tbl\":{\"type\":\"array\",\"minItems\":1,\"it"
    "ems\":{\"$ref\":\"#/definitions/fp_table\"},\"description\":\"various internal"
    " data\"},\"sr\":{\"type\":\"number\",\"exclusiveMinimum\":true,\"minimum\":0,\"des"
    "cription\":\"Sample rate [Hz]\"},\"mw\":{\"type\":\"number\",\"exclusiveMinimum\""
    ":true,\"maximum\":4095,\"minimum\":0,\"description\":\"Maximum "
    "weight\"},\"ex\":{\"type\":\"object\",\"description\":\"DEPRECATED, use "
    "'riegl.exponential_decomposition' "
    "instead\"},\"ns\":{\"type\":\"integer\",\"description\":\"Number of samples\",\"ma"
    "ximum\":4095,\"minimum\":0},\"nt\":{\"type\":\"integer\",\"description\":\"Number "
    "of traces\",\"maximum\":255,\"minimum\":0},\"t\":{\"type\":\"object\",\"additional"
    "Properties\":false,\"patternProperties\":{\"^[0-9]+$\":{\"description\":\"one "
    "field per channel, field name is channel index\",\"$ref\":\"#/definitions/"
    "fp\"}}},\"si\":{\"type\":\"number\",\"description\":\"Start index "
    "(hw_start)\",\"maximum\":255,\"minimum\":0}}}"
    ,
    /* example: */
    "{\"a\":[-1.55],\"tbl\":[{\"ch\":0,\"tc\":1,\"ny\":2,\"tv\":[[1,2,3,4,5],[1.1,2.2,3"
    ".3,4.4,5.5]],\"nx\":5}],\"sr\":7959997000.0,\"mw\":31,\"ns\":400,\"nt\":128,\"t\":"
    "{\"1\":{\"s\":[[1.23,4.56],[7.89,0.12]],\"w\":[[78,86,126,134,31],[78,86,126"
    ",134,31]]},\"0\":{\"s\":[[1.23,4.56],[7.89,0.12]],\"w\":[[78,86,126,134,31],"
    "[78,86,126,134,31]]}},\"si\":48}"
};

// Lookup table for reflectance calculation based on amplitude and range
const MetaDataItemInfo RDB_RIEGL_REFLECTANCE_CALCULATION = {
    /* name        */ "riegl.reflectance_calculation",
    /* title       */ "Reflectance Calculation Table",
    /* description */ "Lookup table for reflectance calculation based on amplitude and range",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Lookup table for reflectance calculation based on "
    "amplitude and range\",\"type\":\"object\",\"$schema\":\"http://json-schema.org"
    "/draft-04/schema#\",\"title\":\"Reflectance Calculation Table\",\"required\":"
    "[\"delta\",\"content\"],\"properties\":{\"delta\":{\"description\":\"Delta "
    "between table entries [m], first entry is at range = 0 "
    "m\",\"type\":\"number\"},\"content\":{\"description\":\"Correction value [dB] to"
    " be added to the amplitude\",\"type\":\"array\",\"maxItems\":2000,\"items\":{\"t"
    "ype\":\"number\"},\"minItems\":1}}}"
    ,
    /* example: */
    "{\"delta\":0.150918,\"content\":[-33.01]}"
};

// Range-dependent and scan-angle-dependent correction of reflectance reading
const MetaDataItemInfo RDB_RIEGL_REFLECTANCE_CORRECTION = {
    /* name        */ "riegl.reflectance_correction",
    /* title       */ "Near-Range Reflectance Correction",
    /* description */ "Range-dependent and scan-angle-dependent correction of reflectance reading",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Range-dependent and scan-angle-dependent correction of"
    " reflectance reading\",\"type\":\"object\",\"$schema\":\"http://json-schema.or"
    "g/draft-04/schema#\",\"title\":\"Near-range reflectance correction\",\"requi"
    "red\":[\"ranges_m\",\"line_angles_deg\",\"reflectance_correction_db\"],\"prope"
    "rties\":{\"line_angles_deg\":{\"type\":\"array\",\"description\":\"Angle [deg]\","
    "\"items\":{\"type\":\"number\"}},\"reflectance_correction_db\":{\"type\":\"array\""
    ",\"description\":\"Near range reflectance correction in dB as a function "
    "of range over angle\",\"items\":{\"description\":\"rows (each array "
    "corresponds to a "
    "range)\",\"type\":\"array\",\"items\":{\"description\":\"columns (each value "
    "corresponds to an angle)\",\"type\":\"number\"}}},\"ranges_m\":{\"type\":\"array"
    "\",\"description\":\"Range [m]\",\"items\":{\"type\":\"number\"}}}}"
    ,
    /* example: */
    "{\"line_angles_deg\":[0.0,0.5,1.0,1.5,1.0,2.0,2.5,3.0,3.5,4.0],\"reflecta"
    "nce_correction_db\":[[0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0.05,0.01],[0.8,0"
    ".7,0.6,0.5,0.4,0.3,0.2,0.1,0.05,0.01],[0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1"
    ",0.05,0.01],[0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0.05,0.01]],\"ranges_m\":[0"
    ".0,1.0,2.0,3.0]}"
};

// Details about RiLOC processing
const MetaDataItemInfo RDB_RIEGL_RILOC_PROCESSING_INFO = {
    /* name        */ "riegl.riloc_processing_info",
    /* title       */ "RiLOC Processing Information",
    /* description */ "Details about RiLOC processing",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about RiLOC processing\",\"type\":\"object\",\"$sche"
    "ma\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"RiLOC "
    "Processing Information\",\"required\":[\"trajectory\",\"optimizer\",\"georefer"
    "encing\"],\"properties\":{\"planes\":{\"description\":\"Information on plane "
    "correspondences and used extraction/matching templates.\",\"type\":\"objec"
    "t\",\"properties\":{}},\"optimizer\":{\"description\":\"Optimization result "
    "information and statistics.\",\"type\":\"object\",\"properties\":{}},\"traject"
    "ory\":{\"description\":\"Trajectory information and statistics.\",\"type\":\"o"
    "bject\",\"properties\":{}},\"georeferencing\":{\"description\":\"Internal "
    "georeferencing parameters.\",\"type\":\"object\",\"properties\":{}}}}"
    ,
    /* example: */
    "{\"planes\":{},\"optimizer\":{},\"trajectory\":{},\"georeferencing\":{}}"
};

// Scan pattern description
const MetaDataItemInfo RDB_RIEGL_SCAN_PATTERN = {
    /* name        */ "riegl.scan_pattern",
    /* title       */ "Scan Pattern",
    /* description */ "Scan pattern description",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Scan pattern description\",\"$schema\":\"http://json-schem"
    "a.org/draft-04/schema#\",\"properties\":{\"rectangular\":{\"description\":\"Re"
    "ctangular Field Of View Scan Pattern\",\"type\":\"object\",\"properties\":{\"p"
    "hi_start\":{\"description\":\"Start phi angle in SOCS [deg]\",\"type\":\"numbe"
    "r\",\"maximum\":360.0,\"minimum\":0.0},\"theta_increment\":{\"description\":\"In"
    "crement of theta angle in SOCS [deg]\",\"type\":\"number\",\"maximum\":90.0,\""
    "minimum\":0.0},\"program\":{\"$ref\":\"#/definitions/program\"},\"phi_incremen"
    "t\":{\"description\":\"Increment of phi angle in SOCS [deg]\",\"type\":\"numbe"
    "r\",\"maximum\":90.0,\"minimum\":0.0},\"theta_start\":{\"description\":\"Start "
    "theta angle in SOCS [deg]\",\"type\":\"number\",\"maximum\":180.0,\"minimum\":0"
    ".0},\"theta_stop\":{\"description\":\"Stop theta angle in SOCS [deg]\",\"type"
    "\":\"number\",\"maximum\":180.0,\"minimum\":0.0},\"phi_stop\":{\"description\":\"S"
    "top phi angle in SOCS [deg]\",\"type\":\"number\",\"maximum\":720.0,\"minimum\""
    ":0.0}},\"required\":[\"phi_start\",\"phi_stop\",\"phi_increment\",\"theta_start"
    "\",\"theta_stop\",\"theta_increment\"]},\"line\":{\"description\":\"Line Scan "
    "Pattern\",\"type\":\"object\",\"properties\":{\"stop\":{\"description\":\"Stop "
    "angle in SOCS [deg]\",\"type\":\"number\",\"maximum\":720.0,\"minimum\":0.0},\"i"
    "ncrement\":{\"description\":\"Increment of angle in SOCS [deg]\",\"type\":\"nu"
    "mber\",\"maximum\":90.0,\"minimum\":0.0},\"program\":{\"$ref\":\"#/definitions/p"
    "rogram\"},\"start\":{\"description\":\"Start angle in SOCS [deg]\",\"type\":\"nu"
    "mber\",\"maximum\":360.0,\"minimum\":0.0}},\"required\":[\"start\",\"stop\",\"incr"
    "ement\"]},\"segments\":{\"description\":\"Segmented Line Scan Pattern\",\"type"
    "\":\"object\",\"properties\":{\"list\":{\"type\":\"array\",\"items\":{\"description\""
    ":\"Line Scan "
    "Segment\",\"type\":\"object\",\"properties\":{\"stop\":{\"description\":\"Stop "
    "angle in SOCS [deg]\",\"type\":\"number\",\"maximum\":720.0,\"minimum\":0.0},\"i"
    "ncrement\":{\"description\":\"Increment of angle in SOCS [deg]\",\"type\":\"nu"
    "mber\",\"maximum\":90.0,\"minimum\":0.0},\"start\":{\"description\":\"Start "
    "angle in SOCS [deg]\",\"type\":\"number\",\"maximum\":360.0,\"minimum\":0.0}},\""
    "required\":[\"start\",\"stop\",\"increment\"]}},\"program\":{\"$ref\":\"#/definiti"
    "ons/program\"}},\"required\":[\"list\"]}},\"definitions\":{\"program\":{\"descri"
    "ption\":\"Measurement "
    "program\",\"type\":\"object\",\"properties\":{\"name\":{\"description\":\"Name of "
    "measurement "
    "program\",\"type\":\"string\"},\"laser_prr\":{\"description\":\"Laser Pulse "
    "Repetition Rate [Hz]\",\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":f"
    "alse}},\"required\":[\"name\"]}},\"title\":\"Scan Pattern\"}"
    ,
    /* example: */
    "{\"rectangular\":{\"phi_start\":45.0,\"theta_increment\":0.04,\"program\":{\"na"
    "me\":\"High Speed\",\"laser_prr\":100000.0},\"phi_increment\":0.04,\"theta_sta"
    "rt\":30.0,\"theta_stop\":130.0,\"phi_stop\":270.0}}"
};

// Details about laser shot files
const MetaDataItemInfo RDB_RIEGL_SHOT_INFO = {
    /* name        */ "riegl.shot_info",
    /* title       */ "Shot Information",
    /* description */ "Details about laser shot files",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about laser shot files\",\"type\":\"object\",\"$sche"
    "ma\":\"http://json-schema.org/draft-04/schema#\",\"properties\":{\"shot_file"
    "\":{\"type\":\"object\",\"required\":[\"file_extension\"],\"properties\":{\"file_e"
    "xtension\":{\"description\":\"Shot file extension, without the leading "
    "dot\",\"type\":\"string\"},\"file_uuid\":{\"description\":\"File's Universally "
    "Unique Identifier (RFC 4122)\",\"type\":\"string\"}}}},\"title\":\"Shot "
    "Information\"}"
    ,
    /* example: */
    "{\"shot_file\":{\"file_extension\":\"sodx\",\"file_uuid\":\"26a00815-67c0-4bff-"
    "8fe8-c577378fe663\"}}"
};

// Point filters applied in addition to the application-defined filters
const MetaDataItemInfo RDB_RIEGL_STORED_FILTERS = {
    /* name        */ "riegl.stored_filters",
    /* title       */ "Stored Filters",
    /* description */ "Point filters applied in addition to the application-defined filters",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Point filters applied in addition to the "
    "application-defined filters\",\"type\":\"object\",\"$schema\":\"http://json-sc"
    "hema.org/draft-04/schema#\",\"title\":\"Stored filters\",\"required\":[\"activ"
    "ated\",\"filters\"],\"properties\":{\"activated\":{\"description\":\"Apply "
    "('true') or ignore ('false') all "
    "filters\",\"type\":\"boolean\"},\"filters\":{\"description\":\"List of point "
    "filters\",\"type\":\"array\",\"items\":{\"description\":\"Point filter definitio"
    "n\",\"type\":\"object\",\"properties\":{\"activated\":{\"description\":\"Apply "
    "('true') or ignore ('false') this "
    "filter\",\"type\":\"boolean\"},\"description\":{\"description\":\"A brief "
    "description of the filter (e.g. for display in a "
    "tooltip)\",\"type\":\"string\"},\"title\":{\"description\":\"A short filter "
    "title (e.g. for display in a selection "
    "list)\",\"type\":\"string\"},\"filter\":{\"description\":\"The RDB filter string"
    " to apply (e.g. when reading points or index), details see "
    "documentation of function select()\",\"type\":\"string\"}},\"required\":[\"act"
    "ivated\",\"title\",\"description\",\"filter\"]}}}}"
    ,
    /* example: */
    "{\"activated\":true,\"filters\":[{\"activated\":false,\"description\":\"Ignore "
    "points with uncertain MTA zone assignment\",\"title\":\"Ignore uncertain "
    "points from MTA resolution\",\"filter\":\"riegl.mta_uncertain_point == "
    "0\"},{\"activated\":false,\"description\":\"Ignore points with an echo "
    "signal amplitude below the dynamic trigger\",\"title\":\"Ignore points "
    "below dynamic trigger level\",\"filter\":\"riegl.dyntrig_uncertain_point "
    "== 0\"},{\"activated\":false,\"description\":\"Ignore points that are "
    "outside the outer AABB in BOCS\",\"title\":\"Ignore points outside outer "
    "AABB\",\"filter\":\"riegl.point_outside_aabb_bocs == "
    "0\"},{\"activated\":false,\"description\":\"Ignore points that are inside "
    "the inner AABB in BOCS\",\"title\":\"Ignore points inside inner "
    "AABB\",\"filter\":\"riegl.point_inside_aabb_bocs == 0\"}]}"
};

// Details of major system components like lidar sensors, cameras and navigation devices
const MetaDataItemInfo RDB_RIEGL_SYSTEM_DESCRIPTION = {
    /* name        */ "riegl.system_description",
    /* title       */ "System Description",
    /* description */ "Details of major system components like lidar sensors, cameras and navigation devices",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details of major system components like lidar sensors,"
    " cameras and navigation devices\",\"type\":\"object\",\"$schema\":\"http://jso"
    "n-schema.org/draft-04/schema#\",\"title\":\"System Description\",\"required\""
    ":[\"$class\",\"version\",\"author\",\"timestamp\",\"system\"],\"properties\":{\"$cl"
    "ass\":{\"description\":\"Object class name\",\"type\":\"string\",\"enum\":[\"Docum"
    "ent\"]},\"timestamp\":{\"description\":\"Date and time of creation (e.g. 201"
    "9-06-19T13:32:10+02:00)\",\"type\":\"string\"},\"system\":{\"description\":\"The"
    " actual system description, details see documentation of RIEGL System "
    "Description\",\"type\":\"object\"},\"author\":{\"description\":\"Name of the "
    "author that created the "
    "document\",\"type\":\"string\"},\"version\":{\"description\":\"Document format "
    "version\",\"type\":\"string\"}}}"
    ,
    /* example: */
    "{\"$class\":\"Document\",\"timestamp\":\"2022-09-30T11:56:26+00:00\",\"system\":"
    "{\"details\":\"see documentation of RIEGL System "
    "Description\"},\"author\":\"RIEGL LMS GmbH, Austria\",\"version\":\"1.2.1\"}"
};

// Conversion of background radiation raw values to temperatures in °C
const MetaDataItemInfo RDB_RIEGL_TEMPERATURE_CALCULATION = {
    /* name        */ "riegl.temperature_calculation",
    /* title       */ "Temperature Calculation Table",
    /* description */ "Conversion of background radiation raw values to temperatures in °C",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Conversion of background radiation raw values to "
    "temperatures in \\u00b0C\",\"type\":\"object\",\"$schema\":\"http://json-schema"
    ".org/draft-04/schema#\",\"title\":\"Temperature Calculation Table\",\"defini"
    "tions\":{\"conversion_table\":{\"type\":\"object\",\"required\":[\"value\",\"tempe"
    "rature\"],\"properties\":{\"value\":{\"type\":\"array\",\"description\":\"LSB [1]\""
    ",\"items\":{\"type\":\"number\"}},\"temperature\":{\"type\":\"array\",\"description"
    "\":\"Temperature [\\u00b0C]\",\"items\":{\"type\":\"number\"}}}}},\"properties\":{"
    "\"InGaAs_Si_Difference\":{\"description\":\"Conversion table for InGaAs - "
    "Si difference\",\"$ref\":\"#/definitions/conversion_table\"},\"Si\":{\"descrip"
    "tion\":\"Conversion table for Si channel\",\"$ref\":\"#/definitions/conversi"
    "on_table\"},\"InGaAs\":{\"description\":\"Conversion table for InGaAs "
    "channel\",\"$ref\":\"#/definitions/conversion_table\"}}}"
    ,
    /* example: */
    "{\"InGaAs_Si_Difference\":{\"value\":[1000.0,1100.090029602954,1200.044251"
    "83874,1300.1342814416948,1400.0885036774805,1500.0427259132668,1600.13"
    "27555162209,1700.0869777520065,1800.0411999877924],\"temperature\":[1749"
    ".977111117893,1749.977111117893,1749.977111117893,1749.977111117893,17"
    "49.977111117893,1749.977111117893,1744.7813348796044,1681.997131260109"
    "2,1622.3944822534868]},\"Si\":{\"value\":[0.0,64.00097659230323,128.001953"
    "1846065,192.0029297769097,256.0039063692129,320.00488296151616,384.005"
    "8595538194,448.0068361461226,512.0078127384259],\"temperature\":[546.300"
    "048828125,548.8164051212026,551.3143938500972,554.0144257850053,556.60"
    "4252334815,559.2124464488079,561.8022729986177,564.4104671126105,567.0"
    "002936624203]},\"InGaAs\":{\"value\":[0.0,64.00097659230323,128.0019531846"
    "065,192.0029297769097,256.0039063692129,320.00488296151616,384.0058595"
    "538194,448.0068361461226,512.0078127384259],\"temperature\":[307.2219672"
    "2535614,309.1153478247277,311.1188086915047,313.10025350480055,315.213"
    "7946389828,317.2172555057597,319.2207163725366,321.2021611858325,323.3"
    "157023200148]}}"
};

// Details about the tie object reference file
const MetaDataItemInfo RDB_RIEGL_TIE_OBJECT_REFERENCE_FILE = {
    /* name        */ "riegl.tie_object_reference_file",
    /* title       */ "Tie Object Reference file",
    /* description */ "Details about the tie object reference file",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about the tie object reference file\",\"type\":\"o"
    "bject\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"properties"
    "\":{\"reference_file\":{\"type\":\"object\",\"description\":\"Reference to a tie"
    " object file\",\"properties\":{\"file_uuid\":{\"description\":\"Tie object "
    "file's Universally Unique Identifier (RFC "
    "4122)\",\"type\":\"string\"},\"file_path\":{\"description\":\"Path of the tie "
    "object file relative to referring file\",\"type\":\"string\"}},\"required\":["
    "\"file_uuid\",\"file_path\"]}},\"title\":\"Tie Object Reference file\"}"
    ,
    /* example: */
    "{\"reference_file\":{\"file_uuid\":\"7f5f3f4b-3747-41ee-9669-ffed723ef17f\","
    "\"file_path\":\"../../../11_TIE_OBJECTS/TiePoints.tpx\"}}"
};

// Base of timestamps (epoch)
const MetaDataItemInfo RDB_RIEGL_TIME_BASE = {
    /* name        */ "riegl.time_base",
    /* title       */ "Time Base",
    /* description */ "Base of timestamps (epoch)",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Base of timestamps (epoch)\",\"type\":\"object\",\"$schema\":"
    "\"http://json-schema.org/draft-04/schema#\",\"title\":\"Time Base\",\"require"
    "d\":[\"epoch\",\"source\"],\"properties\":{\"source\":{\"description\":\"Timestamp"
    " source\",\"type\":\"string\",\"enum\":[\"unknown\",\"RTC\",\"GNSS\"]},\"epoch\":{\"de"
    "scription\":\"Date and time of timestamp '0' as proposed by RFC 3339 "
    "(e.g. 2015-10-27T00:00:00+01:00).\",\"type\":\"string\"},\"system\":{\"descrip"
    "tion\":\"Time system (time "
    "standard)\",\"type\":\"string\",\"enum\":[\"unknown\",\"UTC\",\"GPS\"]}}}"
    ,
    /* example: */
    "{\"source\":\"GNSS\",\"epoch\":\"2015-10-27T00:00:00+00:00\",\"system\":\"UTC\"}"
};

// Details about position+orientation files
const MetaDataItemInfo RDB_RIEGL_TRAJECTORY_INFO = {
    /* name        */ "riegl.trajectory_info",
    /* title       */ "Trajectory Information",
    /* description */ "Details about position+orientation files",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about position+orientation files\",\"type\":\"obje"
    "ct\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Traje"
    "ctory Information\",\"required\":[\"time_interval\",\"navigation_frame\"],\"pr"
    "operties\":{\"location\":{\"description\":\"Project location, e.g. city/stat"
    "e/country\",\"type\":\"string\"},\"time_interval\":{\"description\":\"Time "
    "interval statistics\",\"type\":\"object\",\"properties\":{\"std_dev\":{\"descrip"
    "tion\":\"Standard deviation of intervals "
    "[s]\",\"type\":\"number\"},\"maximum\":{\"description\":\"Maximum time interval "
    "[s]\",\"type\":\"number\"},\"minimum\":{\"description\":\"Minimum time interval "
    "[s]\",\"type\":\"number\"},\"average\":{\"description\":\"Average time interval "
    "[s]\",\"type\":\"number\"}},\"required\":[\"minimum\",\"average\",\"maximum\",\"std_"
    "dev\"]},\"device\":{\"description\":\"Navigation device, e.g. name/type/seri"
    "al\",\"type\":\"string\"},\"navigation_frame\":{\"description\":\"Navigation "
    "frame (NED: North-East-Down, ENU: East-North-Up)\",\"type\":\"string\",\"enu"
    "m\":[\"unknown\",\"NED\",\"ENU\"]},\"company\":{\"description\":\"Company "
    "name\",\"type\":\"string\"},\"field_of_application\":{\"description\":\"Field of"
    " application\",\"type\":\"string\",\"enum\":[\"unknown\",\"SLS\",\"TLS\",\"KLS\",\"MLS"
    "\",\"ULS\",\"ALS\",\"BLS\",\"ILS\"]},\"software\":{\"description\":\"Software that "
    "calculated the trajectory (this may be the same or different software "
    "than the one that created the "
    "file)\",\"type\":\"string\"},\"project\":{\"description\":\"Project "
    "name\",\"type\":\"string\"},\"settings\":{\"description\":\"Settings used to "
    "calculate the trajectory (descriptive text)\",\"type\":\"string\"}}}"
    ,
    /* example: */
    "{\"location\":\"Horn\",\"time_interval\":{\"std_dev\":5.51e-07,\"maximum\":0.005"
    "004883,\"minimum\":0.00500032,\"average\":0.00500053},\"device\":\"IMU Model "
    "12/1, Serial# 12345\",\"navigation_frame\":\"NED\",\"company\":\"RIEGL "
    "LMS\",\"field_of_application\":\"MLS\",\"software\":\"Navigation Software "
    "XYZ\",\"project\":\"Campaign 3\",\"settings\":\"default\"}"
};

// Trigger-Timestamping-Unit/IP configuration
const MetaDataItemInfo RDB_RIEGL_TTIP_CONFIGURATION = {
    /* name        */ "riegl.ttip_configuration",
    /* title       */ "TTIP Configuration",
    /* description */ "Trigger-Timestamping-Unit/IP configuration",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Trigger-Timestamping-Unit/IP configuration\",\"type\":\"ob"
    "ject\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"TTI"
    "P Configuration\",\"required\":[\"ttip_version\",\"num_channel\",\"ext_channel"
    "\",\"ext_signal\",\"ext_delay\",\"ext_subdivider\",\"ext_bitmask\",\"dmi_incr\",\""
    "dmi_min_time\",\"dmi_max_time\",\"dmi_dist_per_tick\",\"channel\",\"output_des"
    "cr\",\"input_descr\",\"output_usage\",\"input_usage\",\"out_polarity\",\"out_dur"
    "ation\",\"out_interval\",\"out_delay\",\"out_num_pulses\",\"in_polarity\",\"in_m"
    "in_duration\",\"in_max_duration\",\"in_max_delay\"],\"properties\":{\"ext_subd"
    "ivider\":{\"description\":\"reduces the frequency, default 1\",\"type\":\"inte"
    "ger\",\"minimum\":0},\"in_min_duration\":{\"description\":\"input signals with"
    " smaller pulse durations are ignored [0.1 msec]\",\"type\":\"integer\",\"min"
    "imum\":0},\"dmi_dist_per_tick\":{\"description\":\"dmi, distance per tick, "
    "just informative [m]\",\"type\":\"number\"},\"input_usage\":{\"description\":\"0"
    " .. deactivated, 1 .. just detecting and timestamping\",\"type\":\"integer"
    "\",\"minimum\":0},\"ttip_version\":{\"description\":\"following main.sub.ss.ss"
    "s\",\"type\":\"integer\",\"minimum\":0},\"dmi_incr\":{\"description\":\"dmi, "
    "increment in "
    "ticks\",\"type\":\"integer\"},\"in_max_delay\":{\"description\":\"maximum delay "
    "to output pulse before fake event is generated [0.1 msec], zero "
    "indicates that no fake events are generated\",\"type\":\"integer\",\"minimum"
    "\":0},\"out_interval\":{\"description\":\"output pulse interval [0.1 msec]\","
    "\"type\":\"integer\",\"minimum\":0},\"out_num_pulses\":{\"description\":\"number "
    "of output pulses to be generated, 0 .. infinite\",\"type\":\"integer\",\"min"
    "imum\":0},\"out_polarity\":{\"description\":\"0 .. positive edge, 1 .. "
    "negative "
    "edge\",\"type\":\"integer\",\"minimum\":0},\"channel\":{\"description\":\"ID of "
    "input/output channel\",\"type\":\"integer\",\"minimum\":0},\"out_delay\":{\"desc"
    "ription\":\"output pulse initial delay after start [0.1 "
    "msec]\",\"type\":\"integer\",\"minimum\":0},\"ext_channel\":{\"description\":\"ID "
    "of channel used as external trigger input, 32 indicates none\",\"type\":\""
    "integer\",\"minimum\":0},\"output_descr\":{\"description\":\"descriptive "
    "string\",\"type\":\"string\"},\"num_channel\":{\"description\":\"number of "
    "input/output channels\",\"type\":\"integer\",\"minimum\":0},\"ext_bitmask\":{\"d"
    "escription\":\"defines which of the internal pulse generators are to be "
    "started\",\"type\":\"integer\",\"minimum\":0},\"dmi_min_time\":{\"description\":\""
    "dmi, minimum time interval between trigger events [0.1 "
    "msec]\",\"type\":\"integer\",\"minimum\":0},\"ext_signal\":{\"description\":\"0 .."
    " use input signal, 1 .. use output signal of channel\",\"type\":\"integer\""
    ",\"minimum\":0},\"ext_delay\":{\"description\":\"external trigger, time delay"
    " [0.1 msec]\",\"type\":\"integer\",\"minimum\":0},\"out_duration\":{\"descriptio"
    "n\":\"output pulse duration [0.1 msec]\",\"type\":\"integer\",\"minimum\":0},\"d"
    "mi_max_time\":{\"description\":\"dmi, maximum time interval between "
    "trigger events [0.1 msec]\",\"type\":\"integer\",\"minimum\":0},\"in_max_durat"
    "ion\":{\"description\":\"stops measurement of pulse duration of input "
    "signal [0.1 "
    "msec]\",\"type\":\"integer\",\"minimum\":0},\"output_usage\":{\"description\":\"0 "
    ".. no output, 1 .. output derived from internal clock, 2 .. output "
    "derived from dmi, 3 .. output derived from external signal, 4 .. "
    "output static low, 5 .. output static high\",\"type\":\"integer\",\"minimum\""
    ":0},\"input_descr\":{\"description\":\"descriptive "
    "string\",\"type\":\"string\"},\"in_polarity\":{\"description\":\"0 .. positive "
    "edge, 1 .. negative edge\",\"type\":\"integer\",\"minimum\":0}}}"
    ,
    /* example: */
    "{\"ext_subdivider\":1,\"in_min_duration\":0,\"dmi_dist_per_tick\":0.0,\"input"
    "_usage\":1,\"ttip_version\":1,\"dmi_incr\":0,\"in_max_delay\":9990,\"out_inter"
    "val\":10000,\"out_num_pulses\":1,\"out_polarity\":0,\"channel\":0,\"out_delay\""
    ":0,\"ext_channel\":32,\"output_descr\":\"Port 1 - Trigger\",\"num_channel\":9,"
    "\"ext_bitmask\":0,\"dmi_min_time\":0,\"ext_signal\":0,\"ext_delay\":0,\"out_dur"
    "ation\":300,\"dmi_max_time\":0,\"in_max_duration\":10000,\"output_usage\":1,\""
    "input_descr\":\"Port 1 - Exposure\",\"in_polarity\":0}"
};

// Details about vertex file
const MetaDataItemInfo RDB_RIEGL_VERTEX_INFO = {
    /* name        */ "riegl.vertex_info",
    /* title       */ "Vertex Information",
    /* description */ "Details about vertex file",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about vertex file\",\"type\":\"object\",\"$schema\":\""
    "http://json-schema.org/draft-04/schema#\",\"properties\":{\"vertex_file\":{"
    "\"type\":\"object\",\"required\":[\"file_extension\"],\"properties\":{\"file_exte"
    "nsion\":{\"description\":\"Vertex file extension, without the leading "
    "dot\",\"type\":\"string\"},\"file_uuid\":{\"description\":\"File's Universally "
    "Unique Identifier (RFC 4122)\",\"type\":\"string\"}}}},\"title\":\"Vertex "
    "Information\"}"
    ,
    /* example: */
    "{\"vertex_file\":{\"file_extension\":\"vtx\",\"file_uuid\":\"51534d95-d71f-4f36"
    "-ae1a-3e63a21fd1c7\"}}"
};

// Details about the voxels contained in the file
const MetaDataItemInfo RDB_RIEGL_VOXEL_INFO = {
    /* name        */ "riegl.voxel_info",
    /* title       */ "Voxel Information",
    /* description */ "Details about the voxels contained in the file",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Details about the voxels contained in the file\",\"type\""
    ":\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":"
    "\"Voxel Information\",\"oneOf\":[{\"required\":[\"size\",\"voxel_origin\",\"voxel"
    "_type\"],\"additionalProperties\":false,\"properties\":{\"shape_thresholds\":"
    "{\"$ref\":\"#/definitions/shape_thresholds\"},\"voxel_type\":{\"$ref\":\"#/defi"
    "nitions/voxel_type\"},\"voxel_origin\":{\"$ref\":\"#/definitions/voxel_origi"
    "n_enum\"},\"size\":{\"description\":\"Size of voxels in file coordinate syst"
    "em.\",\"oneOf\":[{\"$ref\":\"#/definitions/voxel_size\"},{\"$ref\":\"#/definitio"
    "ns/voxel_size_cubic\"}]}}},{\"required\":[\"reference_point\",\"size_llcs\",\""
    "size\",\"voxel_origin\",\"voxel_type\"],\"additionalProperties\":false,\"prope"
    "rties\":{\"voxel_origin\":{\"oneOf\":[{\"$ref\":\"#/definitions/voxel_origin_e"
    "num\"},{\"description\":\"The base point of the voxel grid. Used together "
    "with <tt>voxel_size</tt> and <tt>voxel_index</tt> to compute actual "
    "point coordinates.\",\"$ref\":\"#/definitions/voxel_origin_point\"}]},\"refe"
    "rence_point\":{\"description\":\"Point in WGS84 geodetic decimal degree "
    "(EPSG:4326) that was used to compute the projection distortion "
    "parameters. The coefficient order is latitude, longitude. Only voxels "
    "with corresponding geo_tag, voxel_size and reference_point can be "
    "reliably processed together. This entry is available for voxel files "
    "in projected CRS only.\",\"type\":\"array\",\"maxItems\":2,\"items\":{\"type\":\"n"
    "umber\",\"maximum\":180,\"minimum\":-180},\"minItems\":2},\"size\":{\"descriptio"
    "n\":\"Size of voxels in file coordinate system.\",\"$ref\":\"#/definitions/v"
    "oxel_size\"},\"shape_thresholds\":{\"$ref\":\"#/definitions/shape_thresholds"
    "\"},\"size_llcs\":{\"description\":\"Size of voxels in a locally levelled "
    "cartesian coordinate system (xyz). This is only used for voxels based "
    "on a map projection.\",\"$ref\":\"#/definitions/voxel_size\"},\"voxel_type\":"
    "{\"$ref\":\"#/definitions/voxel_type\"}}}],\"definitions\":{\"edge_length\":{\""
    "description\":\"Length of voxel edge [m].\",\"exclusiveMinimum\":true,\"mini"
    "mum\":0,\"type\":\"number\"},\"voxel_origin_enum\":{\"description\":\"Defines "
    "whether the voxel's center or a corner is placed on CRS origin <tt>(0/"
    "0/0)</tt>.\",\"enum\":[\"center\",\"corner\"],\"default\":\"corner\"},\"shape_thre"
    "sholds\":{\"description\":\"Thresholds used to compute the voxel's "
    "shape_id value.\",\"required\":[\"plane\",\"line\"],\"properties\":{\"line\":{\"de"
    "scription\":\"If the biggest eigenvalue is bigger than the median "
    "eigenvalue * line_threshold, the voxel is considered a line.\",\"exclusi"
    "veMinimum\":true,\"minimum\":1,\"type\":\"number\"},\"plane\":{\"description\":\"I"
    "f the smallest eigenvalue is smaller than the median eigenvalue * "
    "plane_threshold, the voxel is considered a plane.\",\"type\":\"number\",\"ma"
    "ximum\":1,\"exclusiveMinimum\":true,\"minimum\":0,\"exclusiveMaximum\":true}}"
    ",\"type\":\"object\"},\"voxel_origin_point\":{\"description\":\"Origin point "
    "for all voxel indices in voxel CRS.\",\"type\":\"array\",\"maxItems\":3,\"item"
    "s\":{\"type\":\"number\"},\"minItems\":3},\"voxel_type\":{\"description\":\"Whethe"
    "r a point in a voxel represents its center or its centroid. If type is"
    " <tt>index</tt> there is no point but only an integer voxel index.\",\"e"
    "num\":[\"center\",\"centroid\",\"index\"],\"default\":\"centroid\"},\"voxel_size\":"
    "{\"description\":\"Size of voxels.\",\"type\":\"array\",\"maxItems\":3,\"items\":{"
    "\"$ref\":\"#/definitions/edge_length\"},\"minItems\":3},\"voxel_size_cubic\":{"
    "\"type\":\"number\",\"$ref\":\"#/definitions/edge_length\"}}}"
    ,
    /* example: */
    "{\"voxel_origin\":\"corner\",\"shape_thresholds\":{\"line\":6,\"plane\":0.16},\"s"
    "ize\":[0.5971642834779395,0.5971642834779395,0.5143705304787237],\"refer"
    "ence_point\":[48,16],\"size_llcs\":[0.5156575252891171,0.5130835356683303"
    ",0.5143705304787237],\"voxel_type\":\"centroid\"}"
};

// Settings for waveform averaging
const MetaDataItemInfo RDB_RIEGL_WAVEFORM_AVERAGING_SETTINGS = {
    /* name        */ "riegl.waveform_averaging_settings",
    /* title       */ "Waveform Averaging Settings",
    /* description */ "Settings for waveform averaging",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Settings for waveform averaging\",\"type\":\"object\",\"$sch"
    "ema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Waveform "
    "Averaging Settings\",\"required\":[\"num_shots\",\"mta_zone\"],\"properties\":{"
    "\"num_shots\":{\"type\":\"integer\",\"description\":\"Number of consecutive "
    "shots to be used for averaging.\",\"minimum\":1},\"mta_zone\":{\"type\":\"inte"
    "ger\",\"description\":\"Fixed MTA zone for averaging.\",\"minimum\":1},\"trim\""
    ":{\"type\":\"number\",\"description\":\"Percentage for robust "
    "averaging.\",\"maximum\":0.5,\"minimum\":0,\"default\":0}}}"
    ,
    /* example: */
    "{\"num_shots\":7,\"mta_zone\":1,\"trim\":0.05}"
};

// Details about waveform files
const MetaDataItemInfo RDB_RIEGL_WAVEFORM_INFO = {
    /* name        */ "riegl.waveform_info",
    /* title       */ "Waveform Information",
    /* description */ "Details about waveform files",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"type\":\"object\",\"description\":\"Details about waveform files\",\"$schema"
    "\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Waveform Informat"
    "ion\",\"required\":[\"sample_block_file\",\"sample_data_files\"],\"properties\""
    ":{\"sample_data_files\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"requir"
    "ed\":[\"channel\",\"channel_name\",\"sample_interval\",\"sample_bits\",\"laser_w"
    "avelength\",\"delta_st\",\"file_extension\"],\"properties\":{\"file_extension\""
    ":{\"description\":\"Sample data file extension, without the leading dot\","
    "\"type\":\"string\"},\"sample_bits\":{\"type\":\"integer\",\"description\":\"Bitwid"
    "th of samples (e.g. 10 bit, 12 bit)\",\"maximum\":32,\"exclusiveMinimum\":f"
    "alse,\"minimum\":0,\"exclusiveMaximum\":false},\"laser_wavelength\":{\"descri"
    "ption\":\"Laser wavelength in meters (0 = unknown)\",\"type\":\"number\",\"min"
    "imum\":0,\"exclusiveMinimum\":false},\"delta_st\":{\"description\":\"reserved\""
    ",\"type\":\"number\"},\"sample_interval\":{\"description\":\"Sampling interval "
    "in seconds\",\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":false},\"fil"
    "e_uuid\":{\"description\":\"File's Universally Unique Identifier (RFC "
    "4122)\",\"type\":\"string\"},\"channel_name\":{\"description\":\"Sample block "
    "channel name\",\"type\":\"string\"},\"channel\":{\"type\":\"integer\",\"descriptio"
    "n\":\"Sample block channel number (255 = invalid)\",\"maximum\":255,\"exclus"
    "iveMinimum\":false,\"minimum\":0,\"exclusiveMaximum\":false}}}},\"range_offs"
    "et_m\":{\"description\":\"Calibrated device specific range offset for "
    "waveform analysis by system response fitting in meters.\",\"type\":\"numbe"
    "r\"},\"sample_block_file\":{\"type\":\"object\",\"required\":[\"file_extension\"]"
    ",\"properties\":{\"file_extension\":{\"description\":\"Sample block file "
    "extension, without the leading "
    "dot\",\"type\":\"string\"},\"file_uuid\":{\"description\":\"File's Universally "
    "Unique Identifier (RFC 4122)\",\"type\":\"string\"}}},\"range_offset_wavefor"
    "m_samples_m\":{\"description\":\"Calibrated device specific range offset "
    "for waveform samples in meters.\",\"type\":\"number\"}}}"
    ,
    /* example: */
    "{\"sample_data_files\":[{\"file_extension\":\"sp0\",\"sample_bits\":12,\"laser_"
    "wavelength\":0,\"delta_st\":0,\"channel_name\":\"high_power\",\"file_uuid\":\"da"
    "084413-e3e8-4655-a122-071de8490d8e\",\"sample_interval\":1.00503e-09,\"cha"
    "nnel\":0},{\"file_extension\":\"sp1\",\"sample_bits\":12,\"laser_wavelength\":0"
    ",\"delta_st\":0,\"channel_name\":\"low_power\",\"file_uuid\":\"93585b5e-5ea9-43"
    "a1-947b-e7ba3be642d2\",\"sample_interval\":1.00503e-09,\"channel\":1},{\"fil"
    "e_extension\":\"sp5\",\"sample_bits\":12,\"laser_wavelength\":0,\"delta_st\":0,"
    "\"channel_name\":\"wwf\",\"file_uuid\":\"9d2298c4-1036-464f-b5cb-1cf8e517f3a0"
    "\",\"sample_interval\":1.00503e-09,\"channel\":5}],\"range_offset_waveform_s"
    "amples_m \":7.283,\"range_offset_m\":3.1415,\"sample_block_file\":{\"file_ex"
    "tension\":\"sbx\",\"file_uuid\":\"93a03615-66c0-4bea-8ff8-c577378fe660\"}}"
};

// Scanner settings for waveform output
const MetaDataItemInfo RDB_RIEGL_WAVEFORM_SETTINGS = {
    /* name        */ "riegl.waveform_settings",
    /* title       */ "Waveform Settings",
    /* description */ "Scanner settings for waveform output",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Scanner settings for waveform output\",\"type\":\"array\",\""
    "$schema\":\"http://json-schema.org/draft-04/schema#\",\"items\":{\"type\":\"ob"
    "ject\",\"required\":[\"sbl_name\",\"enabled\",\"channel_idx_mask\"],\"properties"
    "\":{\"enabled\":{\"description\":\"Waveform output enabled\",\"type\":\"boolean\""
    "},\"pass_dev_greater\":{\"description\":\"Threshold for deviation greater "
    "than "
    "[1]\",\"type\":\"integer\"},\"pass_rng_greater\":{\"description\":\"Threshold "
    "for range greater than "
    "[m]\",\"type\":\"number\"},\"smart_enabled\":{\"description\":\"Smart waveform "
    "output "
    "enabled\",\"type\":\"boolean\"},\"channel_idx_mask\":{\"description\":\"Bit mask"
    " for channels which belong to sbl_name: Channel 0 = Bit0, Channel 1 = "
    "Bit1, ...\",\"type\":\"integer\"},\"pass_rng_less\":{\"description\":\"Threshold"
    " for range less than "
    "[m]\",\"type\":\"number\"},\"pass_ampl_less\":{\"description\":\"Threshold for "
    "amplitude less than "
    "[dB]\",\"type\":\"number\"},\"pass_ampl_greater\":{\"description\":\"Threshold "
    "for amplitude greater than "
    "[dB]\",\"type\":\"number\"},\"logic_expression\":{\"description\":\"Logic "
    "expression of smart waveforms "
    "filter\",\"type\":\"string\"},\"sbl_name\":{\"description\":\"Name of sample "
    "block, e.g.: wfm, "
    "wwf\",\"type\":\"string\"},\"pass_dev_less\":{\"description\":\"Threshold for "
    "deviation less than [1]\",\"type\":\"integer\"}}},\"title\":\"Waveform "
    "Settings\"}"
    ,
    /* example: */
    "[{\"enabled\":true,\"pass_rng_greater\":9.27,\"smart_enabled\":true,\"channel"
    "_idx_mask\":11,\"pass_rng_less\":13.11,\"pass_ampl_less\":5.0,\"pass_ampl_gr"
    "eater\":1.0,\"sbl_name\":\"wfm\"},{\"enabled\":false,\"sbl_name\":\"wwf\",\"channe"
    "l_idx_mask\":32}]"
};

// Window analysis data estimated from scandata and resulting filter parameters
const MetaDataItemInfo RDB_RIEGL_WINDOW_ANALYSIS = {
    /* name        */ "riegl.window_analysis",
    /* title       */ "Window Analysis",
    /* description */ "Window analysis data estimated from scandata and resulting filter parameters",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Window analysis data estimated from scandata and "
    "resulting filter parameters\",\"type\":\"object\",\"$schema\":\"http://json-sc"
    "hema.org/draft-04/schema#\",\"title\":\"Window Analysis\",\"required\":[\"resu"
    "lt\",\"filter\",\"settings\"],\"properties\":{\"result\":{\"type\":\"object\",\"requ"
    "ired\":[\"angle\",\"range_mean\",\"range_sigma\",\"amplitude_mean\",\"amplitude_"
    "sigma\",\"amplitude_offset\"],\"properties\":{\"range_mean\":{\"type\":\"array\","
    "\"description\":\"[m]\",\"items\":{\"type\":\"number\"}},\"range_sigma\":{\"type\":\""
    "array\",\"description\":\"[m]\",\"items\":{\"type\":\"number\"}},\"amplitude_sigma"
    "\":{\"type\":\"array\",\"description\":\"[dB]\",\"items\":{\"type\":\"number\"}},\"tim"
    "estamp\":{\"type\":\"array\",\"description\":\"[s]\",\"items\":{\"type\":\"number\"}}"
    ",\"amplitude_offset\":{\"type\":\"array\",\"description\":\"[dB]\",\"items\":{\"typ"
    "e\":\"number\"}},\"angle\":{\"type\":\"array\",\"description\":\"[deg]\",\"items\":{\""
    "type\":\"number\"}},\"amplitude_mean\":{\"type\":\"array\",\"description\":\"[dB]\""
    ",\"items\":{\"type\":\"number\"}}}},\"settings\":{\"type\":\"object\",\"required\":["
    "\"range\",\"amplitude\"],\"properties\":{\"range\":{\"type\":\"object\",\"required\""
    ":[\"sigma_factor\",\"additive_value\"],\"properties\":{\"additive_value\":{\"ty"
    "pe\":\"number\"},\"sigma_factor\":{\"type\":\"number\"}}},\"amplitude\":{\"type\":\""
    "object\",\"required\":[\"sigma_factor\",\"additive_value\"],\"properties\":{\"ad"
    "ditive_value\":{\"type\":\"number\"},\"sigma_factor\":{\"type\":\"number\"}}}}},\""
    "filter\":{\"type\":\"object\",\"required\":[\"angle\",\"range_min\",\"range_max\",\""
    "amplitude_max\"],\"properties\":{\"range_max\":{\"type\":\"array\",\"description"
    "\":\"[m]\",\"items\":{\"type\":\"number\"}},\"amplitude_max\":{\"type\":\"array\",\"de"
    "scription\":\"[dB]\",\"items\":{\"type\":\"number\"}},\"angle\":{\"type\":\"array\",\""
    "description\":\"[deg]\",\"items\":{\"type\":\"number\"}},\"range_min\":{\"type\":\"a"
    "rray\",\"description\":\"[m]\",\"items\":{\"type\":\"number\"}}}}}}"
    ,
    /* example: */
    "{\"result\":{\"range_mean\":[0.1105621,0.1079564,0.1087088,0.1067261,0.105"
    "4582,0.1090412,0.102871,0.1019044,0.1051523,0.1058445,0.1031261],\"rang"
    "e_sigma\":[0.01869652,0.02151435,0.01747969,0.01918765,0.01945776,0.019"
    "34862,0.01955329,0.02225589,0.02229977,0.01899122,0.02009433],\"amplitu"
    "de_sigma\":[0.4272844,0.4298479,0.4236816,0.4283583,0.4362353,0.4315141"
    ",0.4373984,0.4472798,0.4346001,0.4345487,0.4540681],\"timestamp\":[408.4"
    "441,411.4443],\"amplitude_offset\":[1.9,1.9],\"angle\":[14.9,15.0,15.1,15."
    "2,15.3,15.4,15.5,15.6,15.7,15.8,15.9],\"amplitude_mean\":[5.347396,5.263"
    "155,5.224655,5.179926,5.097782,5.116479,5.051756,4.983473,5.007885,5.0"
    "02441,4.982]},\"settings\":{\"range\":{\"additive_value\":0.1,\"sigma_factor\""
    ":8},\"amplitude\":{\"additive_value\":1.0,\"sigma_factor\":4}},\"filter\":{\"ra"
    "nge_max\":[0.424,0.425,0.426,0.427,0.428,0.428,0.429,0.43,0.431,0.431,0"
    ".432],\"amplitude_max\":[8.04,8.01,7.99,7.96,7.93,7.9,7.88,7.85,7.83,7.8"
    ",7.78],\"angle\":[14.9,15.0,15.1,15.2,15.3,15.4,15.5,15.6,15.7,15.8,15.9"
    "],\"range_min\":[-0.208,-0.21,-0.212,-0.214,-0.216,-0.218,-0.219,-0.221,"
    "-0.223,-0.225,-0.227]}}"
};

// Correction parameters for window glass echoes
const MetaDataItemInfo RDB_RIEGL_WINDOW_ECHO_CORRECTION = {
    /* name        */ "riegl.window_echo_correction",
    /* title       */ "Window Echo Correction",
    /* description */ "Correction parameters for window glass echoes",
    /* status      */ RDB_STATUS_OPTIONAL,

    /* schema: */
    "{\"description\":\"Correction parameters for window glass echoes\",\"type\":"
    "\"object\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\""
    "Window Echo Correction\",\"required\":[\"amplitude\",\"range\",\"slices\"],\"pro"
    "perties\":{\"range\":{\"type\":\"object\",\"description\":\"Range axis of "
    "correction "
    "table\",\"properties\":{\"maximum\":{\"type\":\"number\",\"description\":\"Maximum"
    " range in m\",\"maximum\":2.0,\"minimum\":-2.0},\"minimum\":{\"type\":\"number\","
    "\"description\":\"Minimum range in m\",\"maximum\":2.0,\"minimum\":-2.0},\"entr"
    "ies\":{\"type\":\"integer\",\"description\":\"Number of range entries\",\"minimu"
    "m\":1}},\"required\":[\"minimum\",\"maximum\",\"entries\"]},\"amplitude\":{\"type\""
    ":\"object\",\"description\":\"Amplitude axis of correction "
    "table\",\"properties\":{\"maximum\":{\"type\":\"number\",\"description\":\"Maximum"
    " amplitude in "
    "dB\",\"minimum\":0.0},\"minimum\":{\"type\":\"number\",\"description\":\"Minimum "
    "amplitude in "
    "dB\",\"minimum\":0.0},\"entries\":{\"type\":\"integer\",\"description\":\"Number "
    "of amplitude entries\",\"minimum\":1}},\"required\":[\"minimum\",\"maximum\",\"e"
    "ntries\"]},\"slices\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"descripti"
    "on\":\"Window echo correction parameter slice\",\"properties\":{\"amplitude\""
    ":{\"type\":\"number\",\"description\":\"Window echo amplitude of slice in "
    "dB\"},\"table\":{\"type\":\"array\",\"description\":\"Correction table "
    "(dimension defined by the 'amplitude' and 'range' "
    "objects)\",\"items\":{\"type\":\"array\",\"description\":\"Table row (= "
    "amplitude axis)\",\"items\":{\"type\":\"array\",\"description\":\"Table column "
    "(= range axis)\",\"maxItems\":3,\"items\":{\"description\":\"Table cell (item "
    "0: amplitude in dB, 1: range in m, 2: flags)\",\"type\":\"number\"},\"minIte"
    "ms\":3},\"minItems\":1},\"minItems\":1}},\"required\":[\"amplitude\",\"table\"]}}"
    "}}"
    ,
    /* example: */
    "{\"range\":{\"maximum\":1.5060822940732335,\"minimum\":-1.5060822940732335,\""
    "entries\":128},\"amplitude\":{\"maximum\":20,\"minimum\":2,\"entries\":128},\"sl"
    "ices\":[{\"amplitude\":1.5,\"table\":[[[6.23,0.3535,1]],[[5.54,0.72375,1]]]"
    "},{\"amplitude\":2.0,\"table\":[[[6.23,0.3535,1]],[[5.54,0.72375,1]]]}]}"
};

// Table of all meta data item details records
const MetaDataItemInfo* const RDB_META_DATA_ITEMS[] = {
    &RDB_RIEGL_ANGULAR_NOTCH_FILTER,
    &RDB_RIEGL_ATMOSPHERE,
    &RDB_RIEGL_BEAM_GEOMETRY,
    &RDB_RIEGL_CONTROL_OBJECT_CATALOG,
    &RDB_RIEGL_CONTROL_OBJECT_REFERENCE_FILE,
    &RDB_RIEGL_DETECTION_PROBABILITY,
    &RDB_RIEGL_DEVICE,
    &RDB_RIEGL_DEVICE_GEOMETRY,
    &RDB_RIEGL_DEVICE_GEOMETRY_PASSIVE_CHANNEL,
    &RDB_RIEGL_DEVICE_OUTPUT_LIMITS,
    &RDB_RIEGL_DEVICES,
    &RDB_RIEGL_DMI_CONFIG,
    &RDB_RIEGL_DYNTRIG,
    &RDB_RIEGL_ECHO_INFO,
    &RDB_RIEGL_EXPONENTIAL_DECOMPOSITION,
    &RDB_RIEGL_GAUSSIAN_DECOMPOSITION,
    &RDB_RIEGL_GEO_TAG,
    &RDB_RIEGL_GEOMETRIC_SCALE_FACTOR,
    &RDB_RIEGL_GEOREFERENCING_PARAMETERS,
    &RDB_RIEGL_GNSS_PROCESSING_INFO,
    &RDB_RIEGL_IMPORTED_CONTROL_OBJECTS,
    &RDB_RIEGL_ITEM_NAMES,
    &RDB_RIEGL_LAG_ANGLE_CORRECTION,
    &RDB_RIEGL_LICENSES,
    &RDB_RIEGL_MTA_SETTINGS,
    &RDB_RIEGL_NEAR_RANGE_CORRECTION,
    &RDB_RIEGL_NOISE_ESTIMATES,
    &RDB_RIEGL_NOTCH_FILTER,
    &RDB_RIEGL_PIXEL_INFO,
    &RDB_RIEGL_PLANE_PATCH_MATCHING,
    &RDB_RIEGL_PLANE_PATCH_STATISTICS,
    &RDB_RIEGL_PLANE_SLOPE_CLASS_INFO,
    &RDB_RIEGL_POINT_ATTRIBUTE_GROUPS,
    &RDB_RIEGL_POINTCLOUD_INFO,
    &RDB_RIEGL_POSE_ESTIMATION,
    &RDB_RIEGL_POSE_SENSORS,
    &RDB_RIEGL_PULSE_POSITION_MODULATION,
    &RDB_RIEGL_RANGE_STATISTICS,
    &RDB_RIEGL_RECEIVER_INTERNALS,
    &RDB_RIEGL_REFLECTANCE_CALCULATION,
    &RDB_RIEGL_REFLECTANCE_CORRECTION,
    &RDB_RIEGL_RILOC_PROCESSING_INFO,
    &RDB_RIEGL_SCAN_PATTERN,
    &RDB_RIEGL_SHOT_INFO,
    &RDB_RIEGL_STORED_FILTERS,
    &RDB_RIEGL_SYSTEM_DESCRIPTION,
    &RDB_RIEGL_TEMPERATURE_CALCULATION,
    &RDB_RIEGL_TIE_OBJECT_REFERENCE_FILE,
    &RDB_RIEGL_TIME_BASE,
    &RDB_RIEGL_TRAJECTORY_INFO,
    &RDB_RIEGL_TTIP_CONFIGURATION,
    &RDB_RIEGL_VERTEX_INFO,
    &RDB_RIEGL_VOXEL_INFO,
    &RDB_RIEGL_WAVEFORM_AVERAGING_SETTINGS,
    &RDB_RIEGL_WAVEFORM_INFO,
    &RDB_RIEGL_WAVEFORM_SETTINGS,
    &RDB_RIEGL_WINDOW_ANALYSIS,
    &RDB_RIEGL_WINDOW_ECHO_CORRECTION
};
const size_t RDB_META_DATA_ITEM_COUNT(
    sizeof(RDB_META_DATA_ITEMS) / sizeof(RDB_META_DATA_ITEMS[0])
);

#endif // RDB_81EBCB65_FE94_471E_8D25_2B4D71CC91B1
