Skip to main content

Units in BMS

Introduction

To create reports on block model data, BMS requires an understanding of the units for each type of data involved, including the following:

  • The size unit for the block model.
  • Density information about the block model.
  • The unit (and unit type) for each column to be reported on.

The API supports retrieving information about available units, and configuring units on the relevant resources.

Units information

The list of supported units can be retrieved from the Request a list of units endpoint. Each unit has the following properties:

  • unit_uuid: UUID; BMS internal identifier.
  • unit_id: String; identifier used in the API. This will match the geoscience unit schema enumeration where available.
  • symbol: String; Unicode display symbol.
  • description: String; short description of the unit.
  • unit_type: The broad type of unit, indicating its dimensionality (mass, mass per unit volume, etc.)
  • conversion_factor: The factor for converting from this unit to the reference unit for this unit type. For example, for grams, this would be 0.001 as 1 gram equals 0.001 kg. This is for internal purposes in reporting, for doing conversions between source and destination units. The reference units are:
    • LENGTH: m (metres)
    • MASS: kg (kilograms)
    • VOLUME: m3 (cubic metres)
    • VALUE: $ (dollars)
    • MASS_PER_VOLUME: kg/m3 (kilograms per cubic metre)
    • VOLUME_PER_VOLUME: m3/m3 (cubic metres per cubic metre, a dimensionless ratio)
    • MASS_PER_MASS: kg/kg (kilograms per kilogram, a dimensionless ratio)
    • VALUE_PER_MASS: $/kg (dollars per kilogram)
GET /orgs/{org_id}/units
[
...
{
"unit_uuid": "1d0d812f-90f5-4857-b22c-40af40e9e2d2",
"unit_id": "g/m3",
"symbol": "g/m³",
"description": "Grams per cubic metre",
"unit_type": "MASS_PER_VOLUME",
"conversion_factor": 0.001
},
{
"unit_uuid": "450d812f-90f5-4857-b22c-40af40e9e2d2",
"unit_id": "cm3",
"symbol": "cm³",
"description": "Cubic centimetres",
"unit_type": "VOLUME",
"conversion_factor": 0.000001
},
{
"unit_uuid": "330d812f-90f5-4857-b22c-40af40e9e2d2",
"unit_id": "g/t",
"symbol": "g/t",
"description": "Grams per tonne",
"unit_type": "MASS_PER_MASS",
"conversion_factor": 0.000000001
}
...
]

Block model size units

The BMS API supports an optional property on block models, size_unit_id. This indicates the unit for the block size. The value should be the unit_id of the relevant unit, and should be of unit_type LENGTH. For existing versions, size_unit_id will default to null.

The size_unit_id property is settable via the following endpoints:

If set, it is visible in the response of the following endpoints:

Column units

The BMS API supports an optional property when configuring version columns, unit_id, indicating the unit for the column's data. The value should be the unit_id of the relevant unit. For existing columns, this will default to null.

The property is settable via the Start a block model data update endpoint.

New columns

For new columns, as a new optional property unit_id in the column definition.

Column updates

For updating the unit_id and title for existing columns, there is an operation called update_metadata. This operation will accept a list of column changes, containing title and unit_id. Both title and unit_id are optional, and the column property will only be updated if set (i.e. non-null). Versioning and validation rules for updating titles are equivalent to a rename operation. A column cannot be modified by both rename and update_metadata.

PATCH /orgs/{org_id}/workspaces/{workspace_id}/block-models/{bm_uuid}/blocks
{
"comment": "Rename and update unit for 'existing title'",
"columns": {
"new": [],
"delete": [],
"update": [],
"rename": [],
"update_metadata": [
{
"title": "existing_title",
"values": {
"title": "new_title",
"unit_id": "g/t"
}
}
]
}
}

For details on allowed combinations with update_metadata, please see Allowed combinations of new, update, rename, delete, and update_metadata.

Version responses

Columns in version responses include the unit_id property. In version listing endpoint responses, there is also a top level property referenced_units, which is a list of all unit objects that are referenced by any column (including all the unit properties).

Example response: List version metadata for all versions of a block model

{
"count": 2,
"total": 2,
"limit": 50,
"offset": 0,
"referenced_units": [
{
"unit_uuid": "1d0d812f-90f5-4857-b22c-40af40e9e2d2",
"unit_id": "g/m3",
"symbol": "g/m³",
"description": "Grams per cubic metre",
"unit_type": "MASS_PER_VOLUME",
"conversion_factor": 0.001
},
{
"unit_uuid": "780d812f-90f5-4857-b22c-40af40e9e2d2",
"unit_id": "ppm",
"symbol": "ppm[mass]",
"description": "Parts per million",
"unit_type": "MASS_PER_MASS",
"conversion_factor": 0.000001
}
],
"results": [
{
"base_version_id": 1,
"bbox": {
"i_minmax": {
"max": 16,
"min": 2
},
"j_minmax": {
"max": 22,
"min": 2
},
"k_minmax": {
"max": 28,
"min": 2
}
},
"bm_uuid": "1d0d812f-90f5-4857-b22c-40af40e9e2d2",
"comment": "Example comment for new version of regular block model",
"created_at": "2023-10-26T03:56:38.320876+00:00",
"created_by": {
"email": "joebloggs@example.com",
"id": "00000000-0000-0000-0000-000000000000",
"name": "Joe Bloggs"
},
"mapping": {
"columns": [
{
"col_id": "i",
"data_type": "UInt32",
"title": "i",
"unit_id": null
},
{
"col_id": "j",
"data_type": "UInt32",
"title": "j",
"unit_id": null
},
{
"col_id": "k",
"data_type": "UInt32",
"title": "k",
"unit_id": null
},
{
"col_id": "version_id",
"data_type": "UInt32",
"title": "version_id",
"unit_id": null
},
{
"col_id": "a11d504f-db6e-487b-af28-bba73a4e5d4a",
"data_type": "Float64",
"title": "silver",
"unit_id": "ppm"
},
{
"col_id": "e20430af-7d55-49bf-bb37-237202de8e9f",
"data_type": "Int64",
"title": "gold",
"unit_id": "ppm"
},
{
"col_id": "891821a5-2a4f-4e6d-9450-e1772c2baec6",
"data_type": "Float64",
"title": "platinum",
"unit_id": "ppm"
},
{
"col_id": "10c3ba83-b274-4a8f-94c7-62f117f007f7",
"data_type": "Float64",
"title": "diorite",
"unit_id": "g/m3"
},
{
"col_id": "4959037f-5070-4d09-8bfb-82e146a4595e",
"data_type": "Utf8",
"title": "redstone",
"unit_id": "g/m3"
}
]
},
"parent_version_id": 1,
"version_id": 2,
"version_uuid": "5bdfb83c-ac40-4b31-a70b-f1f3347c78e3"
},
{
"base_version_id": null,
"bbox": null,
"bm_uuid": "1d0d812f-90f5-4857-b22c-40af40e9e2d2",
"comment": "First revision.",
"created_at": "2023-10-26T03:55:48.851220+00:00",
"created_by": {
"email": "joebloggs@example.com",
"id": "00000000-0000-0000-0000-000000000000",
"name": "Joe Bloggs"
},
"mapping": {
"columns": [
{
"col_id": "i",
"data_type": "UInt32",
"title": "i",
"unit_id": null
},
{
"col_id": "j",
"data_type": "UInt32",
"title": "j",
"unit_id": null
},
{
"col_id": "k",
"data_type": "UInt32",
"title": "k",
"unit_id": null
},
{
"col_id": "version_id",
"data_type": "UInt32",
"title": "version_id",
"unit_id": null
}
]
},
"parent_version_id": 0,
"version_id": 1,
"version_uuid": "367f5aef-9fda-4cea-9b83-46a3ed0d01e9"
}
]
}

© Seequent, The Bentley Subsurface Company