From b5cb7908c31cf1a919fa78148703ec6f61595569 Mon Sep 17 00:00:00 2001 From: Tomas Kral Date: Wed, 16 Jul 2025 15:46:02 +0000 Subject: [PATCH 1/3] ECC-2102: New high-level interface for BUFR --- eccodes/highlevel/__init__.py | 3 +- eccodes/highlevel/_bufr/SNIPPETS.md | 464 +++++++ eccodes/highlevel/_bufr/TOUR.md | 378 +++++ eccodes/highlevel/_bufr/__init__.py | 6 + eccodes/highlevel/_bufr/coder.py | 679 +++++++++ eccodes/highlevel/_bufr/common.py | 258 ++++ eccodes/highlevel/_bufr/data.py | 594 ++++++++ eccodes/highlevel/_bufr/header.py | 282 ++++ eccodes/highlevel/_bufr/helpers.py | 496 +++++++ eccodes/highlevel/_bufr/message.py | 409 ++++++ eccodes/highlevel/_bufr/tables.py | 243 ++++ eccodes/highlevel/_bufr/tree.py | 547 ++++++++ eccodes/highlevel/_bufr/view.py | 104 ++ eccodes/highlevel/message.py | 19 +- tests/examples/__init__.py | 0 tests/examples/attributes.py | 43 + tests/examples/items.py | 44 + tests/sample-data/acars.attributes | 291 ++++ tests/sample-data/acars.bufr | Bin 0 -> 188 bytes tests/sample-data/acars.items | 82 ++ tests/sample-data/ahi-himawari-8.attributes | 181 +++ tests/sample-data/ahi-himawari-8.bufr | Bin 0 -> 3152 bytes tests/sample-data/ahi-himawari-8.items | 614 ++++++++ tests/sample-data/amsu-a-noaa-19.attributes | 241 ++++ tests/sample-data/amsu-a-noaa-19.bufr | Bin 0 -> 1536 bytes tests/sample-data/amsu-a-noaa-19.items | 459 ++++++ tests/sample-data/amv-goes-9.attributes | 331 +++++ tests/sample-data/amv-goes-9.bufr | Bin 0 -> 1706 bytes tests/sample-data/amv-goes-9.items | 763 ++++++++++ tests/sample-data/amv-insat-3d.attributes | 241 ++++ tests/sample-data/amv-insat-3d.bufr | Bin 0 -> 2212 bytes tests/sample-data/amv-insat-3d.items | 906 ++++++++++++ tests/sample-data/amv-meteosat-9.attributes | 331 +++++ tests/sample-data/amv-meteosat-9.bufr | Bin 0 -> 8272 bytes tests/sample-data/amv-meteosat-9.items | 1232 +++++++++++++++++ tests/sample-data/amv-noaa-20.attributes | 326 +++++ tests/sample-data/amv-noaa-20.bufr | Bin 0 -> 3891 bytes tests/sample-data/amv-noaa-20.items | 1008 ++++++++++++++ tests/sample-data/aura-omi-ak.attributes | 191 +++ tests/sample-data/aura-omi-ak.bufr | Bin 0 -> 1684 bytes tests/sample-data/aura-omi-ak.items | 231 ++++ tests/sample-data/buoy-drifting.attributes | 427 ++++++ tests/sample-data/buoy-drifting.bufr | Bin 0 -> 380 bytes tests/sample-data/buoy-drifting.items | 158 +++ tests/sample-data/geos-abi-goes-16.attributes | 296 ++++ tests/sample-data/geos-abi-goes-16.bufr | Bin 0 -> 1542 bytes tests/sample-data/geos-abi-goes-16.items | 520 +++++++ .../geos-mviri-meteosat-7.attributes | 236 ++++ tests/sample-data/geos-mviri-meteosat-7.bufr | Bin 0 -> 824 bytes tests/sample-data/geos-mviri-meteosat-7.items | 205 +++ tests/sample-data/hdob.attributes | 416 ++++++ tests/sample-data/hdob.bufr | Bin 0 -> 434 bytes tests/sample-data/hdob.items | 150 ++ tests/sample-data/rwp.attributes | 151 ++ tests/sample-data/rwp.bufr | Bin 0 -> 398 bytes tests/sample-data/rwp.items | 90 ++ tests/sample-data/rwp_jma.attributes | 96 ++ tests/sample-data/rwp_jma.bufr | Bin 0 -> 3414 bytes tests/sample-data/rwp_jma.items | 233 ++++ tests/sample-data/saral-altika.attributes | 371 +++++ tests/sample-data/saral-altika.bufr | Bin 0 -> 8671 bytes tests/sample-data/saral-altika.items | 905 ++++++++++++ tests/sample-data/sral_sentinel_3a.attributes | 536 +++++++ tests/sample-data/sral_sentinel_3a.bufr | Bin 0 -> 5257 bytes tests/sample-data/sral_sentinel_3a.items | 929 +++++++++++++ tests/sample-data/synop.attributes | 963 +++++++++++++ tests/sample-data/synop.bufr | Bin 0 -> 660 bytes tests/sample-data/synop.items | 348 +++++ .../sample-data/synop_multi_subset.attributes | 266 ++++ tests/sample-data/synop_multi_subset.bufr | Bin 0 -> 1652 bytes tests/sample-data/synop_multi_subset.items | 671 +++++++++ tests/sample-data/temp.attributes | 743 ++++++++++ tests/sample-data/temp.bufr | Bin 0 -> 2484 bytes tests/sample-data/temp.items | 361 +++++ .../terra-modis-aerosol.attributes | 156 +++ tests/sample-data/terra-modis-aerosol.bufr | Bin 0 -> 844 bytes tests/sample-data/terra-modis-aerosol.items | 161 +++ tests/sample-data/wave.attributes | 201 +++ tests/sample-data/wave.bufr | Bin 0 -> 1054 bytes tests/sample-data/wave.items | 128 ++ tests/test_bufr_data.py | 249 ++++ tests/test_bufr_examples.py | 75 + tests/test_bufr_header.py | 78 ++ tests/test_bufr_helpers.py | 186 +++ tests/test_bufr_message.py | 418 ++++++ tests/test_bufr_workarounds.py | 89 ++ tests/test_eccodes.py | 1 + 87 files changed, 22791 insertions(+), 19 deletions(-) create mode 100644 eccodes/highlevel/_bufr/SNIPPETS.md create mode 100644 eccodes/highlevel/_bufr/TOUR.md create mode 100644 eccodes/highlevel/_bufr/__init__.py create mode 100644 eccodes/highlevel/_bufr/coder.py create mode 100644 eccodes/highlevel/_bufr/common.py create mode 100644 eccodes/highlevel/_bufr/data.py create mode 100644 eccodes/highlevel/_bufr/header.py create mode 100644 eccodes/highlevel/_bufr/helpers.py create mode 100644 eccodes/highlevel/_bufr/message.py create mode 100644 eccodes/highlevel/_bufr/tables.py create mode 100644 eccodes/highlevel/_bufr/tree.py create mode 100644 eccodes/highlevel/_bufr/view.py create mode 100644 tests/examples/__init__.py create mode 100755 tests/examples/attributes.py create mode 100755 tests/examples/items.py create mode 100644 tests/sample-data/acars.attributes create mode 100644 tests/sample-data/acars.bufr create mode 100644 tests/sample-data/acars.items create mode 100644 tests/sample-data/ahi-himawari-8.attributes create mode 100644 tests/sample-data/ahi-himawari-8.bufr create mode 100644 tests/sample-data/ahi-himawari-8.items create mode 100644 tests/sample-data/amsu-a-noaa-19.attributes create mode 100644 tests/sample-data/amsu-a-noaa-19.bufr create mode 100644 tests/sample-data/amsu-a-noaa-19.items create mode 100644 tests/sample-data/amv-goes-9.attributes create mode 100644 tests/sample-data/amv-goes-9.bufr create mode 100644 tests/sample-data/amv-goes-9.items create mode 100644 tests/sample-data/amv-insat-3d.attributes create mode 100644 tests/sample-data/amv-insat-3d.bufr create mode 100644 tests/sample-data/amv-insat-3d.items create mode 100644 tests/sample-data/amv-meteosat-9.attributes create mode 100644 tests/sample-data/amv-meteosat-9.bufr create mode 100644 tests/sample-data/amv-meteosat-9.items create mode 100644 tests/sample-data/amv-noaa-20.attributes create mode 100644 tests/sample-data/amv-noaa-20.bufr create mode 100644 tests/sample-data/amv-noaa-20.items create mode 100644 tests/sample-data/aura-omi-ak.attributes create mode 100644 tests/sample-data/aura-omi-ak.bufr create mode 100644 tests/sample-data/aura-omi-ak.items create mode 100644 tests/sample-data/buoy-drifting.attributes create mode 100644 tests/sample-data/buoy-drifting.bufr create mode 100644 tests/sample-data/buoy-drifting.items create mode 100644 tests/sample-data/geos-abi-goes-16.attributes create mode 100644 tests/sample-data/geos-abi-goes-16.bufr create mode 100644 tests/sample-data/geos-abi-goes-16.items create mode 100644 tests/sample-data/geos-mviri-meteosat-7.attributes create mode 100644 tests/sample-data/geos-mviri-meteosat-7.bufr create mode 100644 tests/sample-data/geos-mviri-meteosat-7.items create mode 100644 tests/sample-data/hdob.attributes create mode 100644 tests/sample-data/hdob.bufr create mode 100644 tests/sample-data/hdob.items create mode 100644 tests/sample-data/rwp.attributes create mode 100644 tests/sample-data/rwp.bufr create mode 100644 tests/sample-data/rwp.items create mode 100644 tests/sample-data/rwp_jma.attributes create mode 100644 tests/sample-data/rwp_jma.bufr create mode 100644 tests/sample-data/rwp_jma.items create mode 100644 tests/sample-data/saral-altika.attributes create mode 100644 tests/sample-data/saral-altika.bufr create mode 100644 tests/sample-data/saral-altika.items create mode 100644 tests/sample-data/sral_sentinel_3a.attributes create mode 100644 tests/sample-data/sral_sentinel_3a.bufr create mode 100644 tests/sample-data/sral_sentinel_3a.items create mode 100644 tests/sample-data/synop.attributes create mode 100644 tests/sample-data/synop.bufr create mode 100644 tests/sample-data/synop.items create mode 100644 tests/sample-data/synop_multi_subset.attributes create mode 100644 tests/sample-data/synop_multi_subset.bufr create mode 100644 tests/sample-data/synop_multi_subset.items create mode 100644 tests/sample-data/temp.attributes create mode 100644 tests/sample-data/temp.bufr create mode 100644 tests/sample-data/temp.items create mode 100644 tests/sample-data/terra-modis-aerosol.attributes create mode 100644 tests/sample-data/terra-modis-aerosol.bufr create mode 100644 tests/sample-data/terra-modis-aerosol.items create mode 100644 tests/sample-data/wave.attributes create mode 100644 tests/sample-data/wave.bufr create mode 100644 tests/sample-data/wave.items create mode 100644 tests/test_bufr_data.py create mode 100644 tests/test_bufr_examples.py create mode 100644 tests/test_bufr_header.py create mode 100644 tests/test_bufr_helpers.py create mode 100644 tests/test_bufr_message.py create mode 100644 tests/test_bufr_workarounds.py diff --git a/eccodes/highlevel/__init__.py b/eccodes/highlevel/__init__.py index 64f34b24..d505fda7 100644 --- a/eccodes/highlevel/__init__.py +++ b/eccodes/highlevel/__init__.py @@ -1,2 +1,3 @@ -from .message import BUFRMessage, GRIBMessage, Message # noqa +from .message import GRIBMessage, Message # noqa +from ._bufr import BUFRMessage # noqa from .reader import FileReader, MemoryReader, StreamReader # noqa diff --git a/eccodes/highlevel/_bufr/SNIPPETS.md b/eccodes/highlevel/_bufr/SNIPPETS.md new file mode 100644 index 00000000..c2965454 --- /dev/null +++ b/eccodes/highlevel/_bufr/SNIPPETS.md @@ -0,0 +1,464 @@ +# Snippets + +The aim of this document is to gather a list of code snippets showcasing some +of the most common (but also less common) BUFR-related tasks using both the +low-level and the high-level eccodes-python API. + +## Reading from file + +### The low-level way + +Read a single message: + +```python +bufr = codes_bufr_new_from_file(file) +``` + +Iterate over all messages in the file: + +```python +while bufr := codes_bufr_new_from_file(file): + ... + codes_release(bufr) +``` + +### The high-level way + +Read a single message: + +```python +bufr = BUFRMessage(file) +``` + +Iterate over all messages in the file: + +```python +for bufr in FileReader(path, eccodes.CODES_PRODUCT_BUFR): + ... +``` + +We can also use Python's `with` statement (aka context manager) to ensure +that `BUFRMessage` resources are peroperly released after its use: + +```python +for bufr in FileReader(path, eccodes.CODES_PRODUCT_BUFR): + with bufr: + ... +``` + +## Accessing items + +### The low-level way + +Get value of a header key: + +```python +value = codes_get(bufr, 'numberOfSubsets') +``` + +Get value of a data key: + +```python +codes_set(bufr, 'unpack', 1) +value = codes_get_array(bufr, 'latitude') +``` + +### The high-level way + +Get value of a header key: + +```python +value = bufr['numberOfSubsets'] +``` + +Get value of a data key: + +```python +value = bufr['latitude'] +``` + +Note that we didn't need to do explicit unpacking in order to access data section keys. +This was done for us automatically. +However, had we had a needed for a more precise control over when and where the message +gets unpacked, we could do that manually by calling the `unpack()` method: + +```python +bufr.unpack() +# guaranteed to be in the unpacked state henceforth +``` + +After the first invocation, subsequent calls to `unpack()` will have no effect. + +## Iterating over items + +### The low-level way + +```python +codes_set(bufr, 'unpack', 1) +it = codes_bufr_keys_iterator_new(bufr) +while codes_bufr_keys_iterator_next(it): + key = codes_bufr_keys_iterator_get_name(it) + try: + value = codes_get(bufr, key) + except ArrayTooSmallError: + value = codes_get_array(bufr, key) + ... +codes_bufr_keys_iterator_release(it) +``` + +### The high-level way + +```python +for key, value in bufr.items(): + ... +``` + +## Iterating over data items only + +### The low-level way + +```python +codes_set(bufr, 'unpack', 1) +it = codes_bufr_keys_iterator_new(bufr) +while codes_bufr_keys_iterator_next(it): + key = codes_bufr_keys_iterator_get_name(it) + if codes_bufr_key_is_header(bufr, key): + continue + try: + value = codes_get(bufr, key) + except ArrayTooSmallError: + value = codes_get_array(bufr, key) + ... +codes_bufr_keys_iterator_release(it) +``` + +### The high-level way + +```python +for key, value in bufr.data.items(): + ... +``` + +## Creating a new message from samples + +### The low-level way + +Note that 'numberOfSubsets', 'compressedData' and 'input...ReplicationFactor' must +be set _before_ the 'unexpandedDescriptor' key! + +```python +bufr = codes_bufr_new_from_samples('BUFR4_local') +codes_set('masterTablesVersionNumber', 18) +codes_set('numberOfSubsets', 5) +codes_set('compressedData', 1) +codes_set_array('inputShortDelayedDescriptorReplicationFactor', [1, 1, 1, 1, 1, 1]) +codes_set_array('unexpandedDescriptors', [311010]) +``` + +### The high-level way + +The same restrictions apply in the high-level case: + +```python +bufr = BUFRMessage('BUFR4_local') +bufr['masterTablesVersionNumber'] = 18 +bufr['numberOfSubsets'] = 5 +bufr['compressedData'] = 1 +bufr['inputShortDelayedDescriptorReplicationFactor'] = [1, 1, 1, 1, 1, 1] +bufr['unexpandedDescriptors'] = [311010] +``` + +(In the future version of eccodes-python we are planning to relax some of these restrictions. +Specifically, the need to set 'input...ReplicationFactor' upfront.) + +## Creating a message copy with ECMWF's local section 2 + +### The low-level way + +```python +old = codes_bufr_new_from_file(non_local_file) +new = codes_bufr_new_from_samples('BUFR4_local_satellite') +# Copy header keys (section 1 only) +it = codes_bufr_keys_iterator_new(old) +codes_skip_read_only(it) +while codes_bufr_keys_iterator_next(it): + key = codes_bufr_keys_iterator_get_name(it) + if key == 'unexpandedDescriptors': + break + value = codes_get(old, key) + codes_set(new, value) +# Copy template-related keys +codes_set(old, 'unpack', 1) +value = codes_get_array(old, 'dataPresentIndicator') +codes_set_array(new, 'inputDataPresentIndicator', value) +value = codes_get_array(old, 'delayedDescriptorReplicationFactor') +codes_set_array(new, 'inputDelayedDescriptorReplicationFactor', value) +value = codes_get_array(old, 'unexpandedDescriptors') +codes_set_array(new, 'unexpandedDescriptors', value) +# Copy data keys +codes_copy_data(old, new) +# Set section 2 header keys +... +value = codes_get_array(old, 'latitude')' +codes_set(new, 'localLatitude1', min(value)) +codes_set(new, 'localLatitude2', max(value)) +... +codes_set(new, 'satelliteID', 123) +``` + +### The high-level way + +```python +old = BUFRMessage(foreign_file) +new = BUFRMessage('BUFR4_local_satellite') +old.copy_to(new) +new['satelliteID'] = 123 +``` +Note that unlike in the low-level example, we don't need to set every section 2 key +explicitly. The only exception is the 'satelliteID' (or, in the case of uncompressed +messages, the 'ident' key). +All other section 2 keys are set automatically on message packing. + +## Iterating over subsets of uncompressed multi-subset messages + +### The low-level way + +```python +subset_count = codes_get(bufr, 'numberOfSubsets') +codes_set(bufr, 'unpack', 1) +for n in range(1, subset_count + 1): + print(f'Working on subset {n}') + block_number = codes_get(bufr, f'/subsetNumber={n}/blockNumber') + ... + # BUT THIS IS CURRENTLY NOT ALLOWED + # pressure1 = codes_get(bufr, f'/subsetNumber={n}/#1#pressure') + ... +``` + +### The high-level way + +```python +for n, subset in enumerate(bufr.data, start=1): + print(f'Working on subset {n}') + block_number = subset['blockNumber'] + ... + pressure1 = subset['#1#pressure'] + ... +``` + +## Working with uncompressed multi-subset messages with nested replications + +The following is an example of a BUFR message with wind profiler data (see tests/sample-data/rwp\_jma.bufr). +Each subset in this uncompressed BUFR message represents a unique station. +Within each subset there is one static block at the top which contains some +common metadata, followed by a doubly-nested delayed replication block with +the actual profile data. +The outer replication corresponds to profiles measured at different times, and +the inner replication contains the individual level data for each of the profiles. +The tricky part about this message is that the number of profiles and the number +of levels is not constant, and so we can't navigate the structure by doing a simple +rank arithmetic. +We have to employ more envolved calculations in order to navigate the structure correctly. + +### The low-level way + +```python +subset_count = codes_get(bufr, 'numberOfSubsets') +codes_set(bufr, 'unpack', 1) +for n in range(1, subset_count + 1): + codes_set(bufr, 'extractSubset', n) + codes_set(bufr, 'doExtractSubsets', 1) + sbufr = codes_clone(bufr) + codes_set(sbufr, 'unpack', 1) + # Station info + ... + latitude = codes_get(sbufr, 'latitude') + ... + factors = codes_get_array(sbufr, 'delayedDescriptorReplicationFactor') + station_counts = factors[0] + level_counts = factors[1:] + assert len(level_counts) == station_counts + level_offsets = [0] + list(itertools.accumulate(level_counts[:-1])) + us = codes_get_array(sbufr, 'u') + vs = codes_get_array(sbufr, 'u') + ... + for prof, (off, len) in enumerate(zip(level_offsets, level_counts)): + # Profile info + ... + hour = codes_get_array(sbufr, 'hour')[prof] + ... + # Profile data + ... + u = np.ma.masked_equal(us[off:off+len], CODES_MISSING_DOUBLE) + v = np.ma.masked_equal(vs[off:off+len], CODES_MISSING_DOUBLE) + ... + codes_release(sbufr) +``` + +### The high-level way + +With the high-level interface, navigating the hierarchical structure is much simpler: + +```python +for subset in bufr.data: + station_info, station_profiles = subset + # Station info + ... + latitude = station_info['latitude'] + ... + for (profile_info, profile_data) in station_profiles: + # Profile info + ... + hour = profile_info['hour'] + ... + # Profile data + ... + u = profile_data['u'] + ... +``` + +## Extracting subsets by index + +### The low-level way + +```python +codes_set(bufr, 'unpack', 1) +codes_set(bufr, 'extractSubsetList', [2, 4, 8]) +codes_set(bufr, 'doExtractSubsets', 1) +new = codes_clone(bufr) +``` + +### The high-level way + +```python +new = bufr.copy(subsets=[1, 3, 7]) +``` +Note that unlike in the low-level example where we used 1-based subset +numbers, here we use subset indices which are 0-based! + +## Extracting subsets by range / slice + +### The low-level way + +```python +codes_set(bufr, 'unpack', 1) +codes_set(bufr, 'extractSubsetIntervalStart', 2) +codes_set(bufr, 'extractSubsetIntervalEnd', 8) +codes_set(bufr, 'doExtractSubsets', 1) +new = codes_clone(bufr) +``` + +### The high-level way + +```python +new = bufr.copy(subsets=range(1, 9)) +``` +or +```python +new = bufr.copy(subsets=slice(1, 9)) +``` +Note that the bounds in the high-level example follow the standard Python +convention, whereas in the low-level example they are 1-based and inclusive! + +## Extracting subsets by date & time + +### The low-level way + +```python +codes_set(bufr, 'unpack', 1) +start = datetime(2000, 2, 4, 8, 16) +end = start + timedelta(seconds=32) +for suffix, value in zip(('Start', 'End'), (start, end)): + codes_set(bufr, 'extractDateTimeYear' + suffix, value.year) + codes_set(bufr, 'extractDateTimeMonth' + suffix, value.month) + codes_set(bufr, 'extractDateTimeDay' + suffix, value.day) + codes_set(bufr, 'extractDateTimeHour' + suffix, value.hour) + codes_set(bufr, 'extractDateTimeMinute' + suffix, value.minute) + codes_set(bufr, 'extractDateTimeSecond' + suffix, value.second) +codes_set(bufr, 'doExtractDateTime', 1) +new = codes_clone(bufr) +``` + +### The high-level way + +```python +start = datetime(2000, 2, 4, 8, 16) +end = start + timedelta(seconds=32) +new = bufr.copy(subsets=slice(start, end)) +``` +Note that for datetime slices the bounds are inclusive on both sides! + +## Extracting subsets within a lat-lon area + +### The low-level way + +```python +codes_set(bufr, 'unpack', 1) +codes_set(bufr, 'extractAreaNorthLatitude', 64.0) +codes_set(bufr, 'extractAreaSouthLatitude', 32.0) +codes_set(bufr, 'extractAreaEastLongitude', 16.0) +codes_set(bufr, 'extractAreaWestLongitude', 8.0) +codes_set(bufr, 'doExtractArea', 1) +new = codes_clone(bufr) +``` + +### The high-level way + +Unlike in the previous high-level examples, there is no builtin option to +extract subsets by area directly. +However, we can pass an arbitrary boolean mask argument to the `copy()` +method, which provides unlimited flexibility: + +```python +lat = bufr['latitude'] +lon = bufr['longitude'] +lat_mask = np.logical_and(lat <= 64.0, lat >= 32.0) +lon_mask = np.logical_and(lon <= 16.0, lon >= 8.0) +mask = np.logical_and(lat_mask, lon_mask) +new = bufr.copy(subsets=mask) +``` + +## Thinning subsets + +### The low-level way + +```python +codes_set(bufr, 'unpack', 1) +codes_set(bufr, 'simpleThinningSkip', 4) +codes_set(bufr, 'doSimpleThinning', 1) +new = codes_clone(bufr) +``` +This will extract subset numbers 1, 6, 11, etc. + +### The high-level way + +Although the high-level interface doesn't provide bespoke option for +the thinning, we can achieve the same by using slices: + +```python +new = bufr.copy(subsets=slice(None, None, 5)) +``` +Note that the slice step must be 1 larger than the thinning step to get the +same result. + +## Writing to file + +### The low-level way + +```python +file = open('output.bufr', 'wb') +codes_set(bufr, 'pack', 1) +codes_write(bufr, file) +``` + +### The high-level way + +```python +file = open('output.bufr', 'wb') +bufr.write_to(file) +``` +Notice that in contrast to the the low-level example, we didn't need to +pack the message explictly before writing. +This was done for us automatically. +But, if needed, packing can also be triggered manually at any time by calling +the `pack()` method. diff --git a/eccodes/highlevel/_bufr/TOUR.md b/eccodes/highlevel/_bufr/TOUR.md new file mode 100644 index 00000000..68c16b67 --- /dev/null +++ b/eccodes/highlevel/_bufr/TOUR.md @@ -0,0 +1,378 @@ +## Tour +--- + +This document showcases some of the features of the high-level eccodes-python interface. + +To follow along make sure you've imported `eccodes.highlevel` module: + +```python +>>> from eccodes.highlevel import * +``` + +### Reading messages from a file + +To read a BUFR message from a file, pass the file object to the `BUFRMessage` constructor: + +```python +>>> file = open('sample-data/temp.bufr', 'rb'): +>>> bufr = BUFRMessage(file) +>>> bufr + +``` + +Each time we call the `BUFRMessage` constructor (on the same file) we will get +the next BUFR message; that is until we reached the EOF. + +A more idiomatic way to iterate through a file is to use the `FileReader` class: + +```python +>>> for bufr in FileReader('file.bufr', eccodes.CODES_PRODUCT_BUFR): + ... +``` + +Note that we didn't have to release any resources explicitly. +The `BUFRMessage` object, with its underlying C handle, will be released +automatically when collected by the Python's garbage collector. + + +The `BUFRMessage` object can also be used as a context manager: + +```python +>>> for bufr in FileReader('file.bufr', eccodes.CODE_PRODUCT_BUFR): + with bufr: + ... +``` +This will ensure that `BUFRMessage` resources (including the underlying C handle) +are properly released _right after use_, even in the occurrence of exception. + +### Inspecting messages + +The most straightforward way to inspect the contents of a BUFR message is by +printing it with the builtin `print()` function: + +```python +>>> print(bufr) +... +``` +This pretty prints the message in a dict-like representation which is obtain +via the `as_dict()` method. + +We can call the the `as_dict()` method ourselves, which will return the actuall +dictionary, not a string: + +``` +```python +>>> bufr.as_dict() +... +``` +`as_dict()` provides many useful options such as listing keys with their rank +prefixes or changing the depth of expansion of hierarhical data section blocks. + +### Getting and setting values + +The `BUFRMessage` class provides a dict-like interface for accessing keys and values: + +```python +>>> bufr['stationNumber'] +60 +>>> bufr['someUndefinedKey'] +Traceback (most recent call last): +... +eccodes.KeyValueNotFoundError: 'someUndefinedKey' +>> bufr.get('someUndefinedKey', 12345) +12345 +``` + +Note that array values are always returned as masked arrays: + +```python +>>> bufr['airTemperature'] +masked_array(data=[--, 272.3, --, --, 270.5, --, 266.90000000000003, --, + --, --, --, 257.90000000000003, --, --, --, --, --, --, + --, --, --, 238.70000000000002, --, --, --, --, --, --, + --, 225.3, --], + mask=[ True, False, True, True, False, True, False, True, + True, True, True, False, True, True, True, True, + True, True, True, True, True, False, True, True, + True, True, True, True, True, False, True], + fill_value=-1e+100) +``` + +Individual elements can be accessed using a special key syntax with a rank prefix: + +```python +>>> bufr['#2#airTemperature'] +272.3 +``` + +Setting values is straightforward: + +```python +>>> bufr['airTemperature'] = 273.15 +masked_array(data=[273.15, 273.15, 273.15, 273.15, 273.15, 273.15, 273.15, + 273.15, 273.15, 273.15, 273.15, 273.15, 273.15, 273.15, + 273.15, 273.15, 273.15, 273.15, 273.15, 273.15, 273.15, + 273.15, 273.15, 273.15, 273.15, 273.15, 273.15, 273.15, + 273.15, 273.15, 273.15], + mask=[False, False, False, False, False, False, False, False, + False, False, False, False, False, False, False, False, + False, False, False, False, False, False, False, False, + False, False, False, False, False, False, False], + fill_value=-1e+100) +``` + +We can use the `update()` method to update multiple items at once, for instance: + +```python +>>> bufr.update(year=2022, month=11, day=22) +``` +Mappings and iterables are also supported: + +```python +>>> mapping = {'blockNumber': 12, 'stationNumber': 345} +>>> bufr.update(mapping) +>>> iterable = [('blockNumber', 12), ('stationNumber', 345)] +>>> bufr.update(iterable) +``` +Another common use of the `update()` method is to copy items within a given data block +from one message the another: + +```python +>>> other = BUFRMessage(open('other.bufr', 'rb')) +>>> bufr.data[1].update(other.data[1]) +``` + +### Iterating over keys & values + +We can iterate over the combined header and data keys: + +```python +>>> for key in bufr.keys(): +... print(key) +edition +# more header keys... +unexpandedDescriptors +blockNumber +# more data keys... +windSpeed +``` + +or just over the header (or data) keys separately: + +```python +>>> for key in bufr.header.keys(): +... print(key) +edition +# more header keys... +unexpandedDescriptors +>>> +>>> for key in bufr.data.keys(): +... print(key) +blockNumber +# more data keys... +windSpeed +``` + +We can also iterate over the key-value pairs: + +```python +>>> for item in bufr.data.items(): +... print(item) +('blockNumber', 6) +# more data items... +('windSpeed', masked_array(data=[--, 6.0, 12.0, 16.0, 15.0, 14.0, 14.0, 14.0, 12.0, + 12.0, 12.0, 13.0, 13.0, 13.0, 9.0, 9.0, 9.0, 7.0, 5.0, + 4.0, 7.0, 7.0, 7.0, 6.0, 7.0, 8.0, 6.0, 6.0, 5.0, 4.0, + 3.0], + mask=[ True, False, False, False, False, False, False, False, + False, False, False, False, False, False, False, False, + False, False, False, False, False, False, False, False, + False, False, False, False, False, False, False], + fill_value=-1e+100)) +``` + +### Selecting items in hierarchically structured messages + +If the message contains one or more delayed replications, the data section is divided +into blocks delineated by the replication block bounds. +We can think of blocks as groups of adjacent data section items. +A similar principle applies to uncompressed multi-subset messages where items of +individual subsets are grouped into blocks - one block per subset. +Blocks can also be nested which happens when a message contains nested replications. + +This division into blocks is especially useful when working with complex hierarchical +structures where the same item can appear in multiple places in the message. + +As an example, let's take the following wind profiler message which has 4 outer +replication blocks. +Each of these blocks represents a different station: + +```python +>>> bufr = BUFRMessage(open('sample-data/rwp_jma.bufr', 'rb')) +>>> len(bufr.data) +4 +>>> [each['stationNumber'] for each in bufr.data] +[755, 891, 893, 898] +``` + +Now, each of the outer blocks (stations) has another two inner blocks: + +```python +>>> [len(each) for each in bufr.data] +[2, 2, 2, 2] +``` + +The first sub-block contains station metadata: + + +```python +# 1st station's 1st sub-block (metadata) +>>> list(bufr.data[0][0].keys()) +['blockNumber', 'stationNumber', 'latitude', 'longitude', 'heightOfStation', 'measuringEquipmentType'] +``` +and the second sub-block represents the profile data: + +```python +>>> list(bufr.data[0][1].keys()) +['year', 'month', 'day', 'hour', 'minute', 'timeSignificance', 'timePeriod', 'heightAboveStation', 'u', 'v', 'w', 'signalToNoiseRatio'] +``` + +If we now try to get values of, say, key 'u', from the top-level view, we +will be presented with an array which is a concatenation of all values +across all replication blocks (i.e., all profiles of all stations combined together): + +```python +>>> bufr.data['u'] +masked_array(data=[--, --, --, -6.4, -0.5, --, --, --, -8.5, --, --, --, + --, -3.4000000000000004, --, --, --, + -5.1000000000000005, --, --, --, --, --, --, + 0.7000000000000001, --, -5.4, -9.0, -7.7, --, --, --, +# ... 300 more values +``` +This is not very helpful, though. +In practice, what we really want is values of a particular profile. +The easiest way to do that is to use a subscripting to get hold of the desired data blocks: + +```python +>>> station = bufr.data[0] +>>> station_info = station[0] +>>> profile = station[1] +>>> profile['u'] +masked_array(data=[--, --, --, -6.4, -0.5, --, --, --, -8.5, --, --, --, + --, -3.4000000000000004, --, --, --, + -5.1000000000000005, --, --, --, --, --, --, + 0.7000000000000001], + mask=[ True, True, True, False, False, True, True, True, + False, True, True, True, True, False, True, True, + True, False, True, True, True, True, True, True, + False], + fill_value=-1e+100) +``` +Just a side note: using rank prefix syntax (e.g., '#1#u') wouldn't help in this case +because each profile can have different number of levels, which makes the computation +of the correct ranks more complicated; we won't get away with a simple arithmetic +based on rank offsets in this case. +To make this work we would need to calculate the ranks based on the outer and +the inner replication factors, which is tedious and error prone. + +### Creating a new message + +Let's create a new `BUFRMessage` object from a sample: + +```python +>>> bufr = BUFRMessage('BUFR3_local_satellite') +``` +Before setting keys from the data section we first need to set the relevant template-related keys: + +```python +>>> bufr['masterTablesVersionNumber'] = 18 +>>> bufr['numberOfSubsets'] = 5 +>>> bufr['compressedData'] = 1 +>>> bufr['inputShortDelayedDescriptorReplicationFactor'] = [1, 1, 1, 1, 1, 1] +>>> bufr['unexpandedDescriptors'] = [311010] +``` +Note that once the 'unexpandedDescriptors' key has been set, the template is +"baked" and can't be modified afterwards! + +After this we can finally proceed with setting the data section keys: + +```python +>>> bufr['year'] = 2022 +>>> bufr['latitude'] = [45.61, 45.62, 45.63, 45.64, 45.65] +>>> ... +``` + +Another way of creating new messages is by copying the template from an existing message: + +```python +>>> old = BUFRMessage(open('old.bufr', 'rb')) +>>> new = BUFRMessage('BUFR3_local_satellite') +>>> old.copy_to(new, header_only=True) +>>> old['year'] = 2022 +>>> ... +``` + +### Writing to file + +To write `BUFRMessage` to a file, use the `write_to()` method. + +```python +>>> bufr.write_to(open('output.bufr', 'wb')) +581 +``` + +Use `get_buffer()` to get the contents of the encoded message: + +```python +>>> bufr.get_buffer() +b'BUFR\x00...\xc07777' +``` + +### Copying + +We can create a copy of the entire message with all its subsets by calling the +`copy()` method: + +```python +>>> new = bufr.copy() +>>> bufr['md5Data'] +'8769d91b03a00ee26f1fa1f56bb6284c' +>>> new['md5Data'] +'8769d91b03a00ee26f1fa1f56bb6284c' +``` + +Specific subsets can be extracted by either passing a sequence of (0-based) +subset indices or a slice/range to the `copy()` method: + +```python +>>> new1 = bufr.copy(subsets=np.array([0, 2, 4])) +>>> new2 = bufr.copy(subsets=[8, 16, 32]) +>>> new3 = bufr.copy(subsets=range(0, 32, 4)) +>>> new4 = bufr.copy(subsets=slice(0, 64, 8)) +``` + +For convenience, a subsets slice can also be comprised of built-in `datetime` or numpy +`datetime64` objects, in which case it's interpreted as a date-time range. +Note that that the bounds of such slices are inclusive on both sides. + +```python +>>> new = bufr.copy(subsets=slice(datetime(2000, 2, 4, 8), datetime(2000, 2, 4, 16))) +``` + +### Miscellaneous + +Use `get_datetime()` method to get `numpy.datetime64` array whose values are +derived from datetime-related keys (e.g. 'year', 'month', etc.). + +```python +>>> bufr = BUFRMessage(open('sample-data/hdob.bufr', 'rb')) +>>> bufr.get_datetime() +masked_array(data=[['2022-05-29T16:00:30', '2022-05-29T16:01:00', + '2022-05-29T16:01:30', '2022-05-29T16:02:00', + ... + '2022-05-29T16:08:30', '2022-05-29T16:09:00', + '2022-05-29T16:09:30', '2022-05-29T16:10:00']], + mask=False, + fill_value=numpy.datetime64('NaT'), + dtype='datetime64[s]') +``` diff --git a/eccodes/highlevel/_bufr/__init__.py b/eccodes/highlevel/_bufr/__init__.py new file mode 100644 index 00000000..414896db --- /dev/null +++ b/eccodes/highlevel/_bufr/__init__.py @@ -0,0 +1,6 @@ +""" +A High-level interface for en/decoding of BUFR files. +""" +from .common import change_behaviour, get_behaviour, set_behaviour +from .helpers import missing_of +from .message import BUFRMessage diff --git a/eccodes/highlevel/_bufr/coder.py b/eccodes/highlevel/_bufr/coder.py new file mode 100644 index 00000000..f32a53b8 --- /dev/null +++ b/eccodes/highlevel/_bufr/coder.py @@ -0,0 +1,679 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import io +import warnings + +from .common import * +from .helpers import ensure_array, missing_of +from .tables import Code, Element, Tables, Version + +TEMPLATE_KEYS = dict.fromkeys([ + 'numberOfSubsets', + 'compressedData', + 'dataPresentIndicator', + 'delayedDescriptorAndDataRepetitionFactor', + 'delayedDescriptorReplicationFactor', + 'extendedDelayedDescriptorAndDataRepetitionFactor', + 'extendedDelayedDescriptorReplicationFactor', + 'shortDelayedDescriptorReplicationFactor', + 'unexpandedDescriptors']) + +INPUT_TEMPLATE_KEYS = dict.fromkeys([ # [1] + 'numberOfSubsets', + 'compressedData', + 'inputDataPresentIndicator', + 'inputDelayedDescriptorAndDataRepetitionFactor', + 'inputDelayedDescriptorReplicationFactor', + 'inputExtendedDelayedDescriptorAndDataRepetitionFactor', + 'inputExtendedDelayedDescriptorReplicationFactor', + 'inputShortDelayedDescriptorReplicationFactor', + 'unexpandedDescriptors']) + +# [1] When creating a new message, template keys must be set in a specific +# order. That's why we use a `dict` and not a `set`; `sets` don't +# preserve insertion order. + +ARRAY_KEYS = TEMPLATE_KEYS.copy() +ARRAY_KEYS.update(INPUT_TEMPLATE_KEYS) +ARRAY_KEYS.pop('numberOfSubsets') +ARRAY_KEYS.pop('compressedData') + +class Coder: + + _handle: int = 0 + _unpacked: bool = False + _subset_count: int = 0 + _baked_template: bool = False + _compressed: bool = False + _autorelease: bool = True + _clone_handle: int = 0 # [1] + _clone_retry_count: int = 0 + _last_extract_method: str = '' # [2] + + # [1] We need an extra handle so that we can work around issues with repeated + # subset extractions (see ECC-2015 and ECC-2016). + # + # [2] We are keeping track of the latest extraction method because ecCodes + # currently doesn't handle cases with mixed extractions correctly; that + # is not without creating a new clone of the original handle (see ECC-2016). + + def __init__(self, source) -> None: + if isinstance(source, io.IOBase): + try: + fileno = source.fileno() + except OSError: + fileno = None + if fileno is None: + raise TypeError('Expected file-like object with a file descriptor; got %s' % type(source)) + handle = codes_bufr_new_from_file(source) + if not handle: + raise EOFError() + elif isinstance(source, bytes): + handle = codes_new_from_message(source) + elif isinstance(source, str): + handle = codes_bufr_new_from_samples(source) + elif isinstance(source, int): + handle = source + else: + raise TypeError('Expected file-like object, bytes array or a sample name; got %s' % type(source)) + self._handle = handle + self._autorelease = current_behaviour.autorelease_handle + + def __del__(self) -> None: + if self._autorelease: + self.release() + + def clone(self, subsets=None) -> 'Coder': + self.pack() + if subsets is None: + handle = codes_clone(self._handle) + coder = Coder(handle) + else: + if not self._clone_handle: # [1] + self._clone_handle = codes_clone(self._handle) + codes_set_long(self._clone_handle, 'unpack', 1) + try: # [2] + self._extract(subsets) + handle = codes_clone(self._clone_handle) + except (InternalError, ArrayTooSmallError) as error: # [3] + if self._clone_retry_count > 1: + raise error + else: + codes_release(self._clone_handle) + self._clone_handle = 0 + self._clone_retry_count += 1 + self._last_extract_method = '' + coder = self.clone(subsets) + else: + self._clone_retry_count = 0 + coder = Coder(handle) + return coder + + # [1] We need an extra handle so that we can work around issues with repeated + # subset extractions (see ECC-2015). + # + # [2] This is also related to ECC-2015. If the extraction of subsets fails, + # we try one more time with a new clone of the original handle. If that + # fails too, we raise an exception. + # + # [3] The ArrayTooSmallError is needed because of ECC-2025. + + def _extract(self, subsets): + if isinstance(array := subsets, np.ndarray): + if array.dtype == bool: + subsets = np.arange(array.size)[array] + elif array.dtype != int: + message ='`subsets` must be an array of bool or int; got type %s' + raise TypeError(message % array.dtype) + start, stop = subsets[0], subsets[-1] + 1 + is_interval = subsets.size == stop - start + is_interval = is_interval and np.all(subsets == np.arange(start, stop)) + elif isinstance(subsets, range): + is_interval = subsets.step == 1 + elif isinstance(subsets, Sequence): + subsets = list(subsets) + is_interval = True + for s, r in zip(subsets, range(subsets[0], subsets[0] + len(subsets))): + if s != r: + is_interval = False + break + elif isinstance(subsets, slice): + start = 0 if subsets.start is None else subsets.start + stop = self._subset_count if subsets.stop is None else subsets.stop # [1] + step = 1 if subsets.step is None else subsets.step + subsets = range(start, stop, step) + is_interval = subsets.step == 1 + else: + message = '`subsets` must be an array, sequence, or a slice; got %s' + raise TypeError(message % type(subsets)) + if is_interval: + method = 'SubsetInterval' + start = subsets[0] + 1 + end = subsets[-1] + 1 + codes_set_long(self._clone_handle, 'extractSubsetIntervalStart', start) + codes_set_long(self._clone_handle, 'extractSubsetIntervalEnd', end) + else: + method = 'SubsetList' + codes_set_long_array(self._clone_handle, 'extractSubsetList', [s+1 for s in subsets]) + codes_set_long(self._clone_handle, 'doExtractSubsets', 1) + if (last := self._last_extract_method) and method != last: + codes_release(self._clone_handle) + self._clone_handle = codes_clone(self._handle) + codes_set_long(self._clone_handle, 'unpack', 1) + self._last_extract_method = '' + self._extract(subsets) + self._last_extract_method = method + + # [1] Note that there is a bug in ecCodes where the extraction operation + # resets the original value of 'numberOfSubsets' to the number of + # extracted subsets. That's why it's important to use the subset count + # from the original handle, not the clone! + + def get_buffer(self) -> bytes: + self.pack() + bytes = codes_get_message(self._handle) + return bytes + + def get_bitmap(self) -> NDArray: + """Returns bitmap array as a boolean mask. + + Note that this is a concatenation of all bitmaps into a single, large array. + """ + self.unpack() + try: + bitmap = codes_get_long_array(self._handle, 'dataPresentIndicator') + except NotFoundError: + bitmap = np.array([]) + bitmap[:] = 1 - bitmap[:] # [1] + bitmap = np.ma.make_mask(bitmap, copy=False, shrink=False, dtype=bitmap.dtype) + return bitmap + + # [1] We are flipping zeros and ones to follow the standard convention + # of 1 meaning True, and 0 False, not the other way arround. + + def get_delayed_replication_factors(self) -> Dict[int, NDArray]: + """Returns a `dict` of concatenated delayed replication factors. + """ + self.unpack() + factors = {} + for code, name in [ + (31000, 'shortDelayedDescriptorReplicationFactor'), + (31001, 'delayedDescriptorReplicationFactor'), + (31002, 'extendedDelayedDescriptorReplicationFactor'), + (31011, 'delayedDescriptorAndDataRepetitionFactor'), + (31012, 'extendedDelayedDescriptorAndDataRepetitionFactor')]: + try: + array = codes_get_long_array(self._handle, name) + except NotFoundError: + continue + factors[code] = array + return factors + + def checkout(self, entry: DataEntry): + if entry.flags & FACTOR: + # In principle we shouldn't need this branch as we pre-load all delayed + # replication factor arrays in build_tree(). However, some messages + # can have wrongly encoded bitmap where the factor ends up having an + # associated key (e.g., delayedReplicationFactor->percentConfidence). + # TODO: Should we hide these keys from the user? + array = codes_get_array(self._handle, entry.name) + array = np.reshape(array, entry.shape) + elif entry.flags & BITMAP: + array = codes_get_array(self._handle, entry.name) + entry.shape = (entry.shape[0], array.size) # infer the 2nd dimension earlier TODO + elif entry.association: + if entry.name.find('->associatedField') > 0: + # Note that his works reliably only for ->associatedField keys. + # For bitmap-associated keys, if some of the ranks don't have an associated + # value, this will either fail (ECC-1272), or worse, return an incomplete + # array (ECC-1689). + array = codes_get_array(self._handle, entry.name) + # array = self._ensure_correct_size(entry, array) + else: + assert entry.primary + rank_mask = entry.association.rank_mask(entry.primary.name) + if np.count_nonzero(rank_mask) == 0: + raise NotFoundError(entry.name) + assert len(rank_mask) == entry.primary.shape[0] + dtype = entry.association.element_dtype + array = np.empty(entry.shape, dtype) + fill_value = missing_of(dtype) + for rank, is_set in enumerate(rank_mask, start=1): + if is_set: + # Note: bitmap-associated keys have to be retrieved one + # rank at a time (see ECC-1272). + if not self._compressed or entry.flags & SCALAR: + array[rank-1] = codes_get(self._handle, f'#{rank}#{entry.name}') + else: + array[rank-1,:] = codes_get_array(self._handle, f'#{rank}#{entry.name}') + else: + array[rank-1] = fill_value + elif entry.uniform_element \ + and entry.uniform_element.code == 31021: # [0] + array = np.empty(entry.shape, int) + if not self._compressed or entry.flags & SCALAR: + for rank in range(1, entry.shape[0] + 1): + array[rank-1] = codes_get_long(self._handle, f'#{rank}#{entry.name}') + else: + for rank in range(1, entry.shape[0] + 1): + array[rank-1,:] = codes_get_long_array(self._handle, f'#{rank}#{entry.name}') + else: + ktype = None + if entry.name == 'second': + if entry.uniform_element and entry.uniform_element.scale == 0: + ktype = int # [1] + array_or_list = codes_get_array(self._handle, entry.name, ktype) + if isinstance(array_or_list, list) and isinstance(array_or_list[0], str): + if not entry.uniform_element: + raise NotImplementedError('Non-uniform string keys are not supported yet: %s' % entry.name) + element = self._tables.elements[entry.uniform_element.code] + byte_count, remainder = divmod(element.width, 8) + assert remainder == 0 + dtype = np.dtype(('associatedFieldSignificance + # values (descriptor 31021) with a single call to codes_get_array(), so + # we have to get the values one rank at a time. See ECC-2098. + # + # [1] ecCodes infers native type of key 'second' (descriptor 004006) to + # be float, but this is not quite right. The default scale of this + # descriptor is 0, meaning it can't represent floating-point values. + # So, in the absence of 'Change scale' operator, the default native + # type should be int. + # + # [2] To work around ECC-1624, we have to get 'centre' values rank by rank. + + def commit(self, entry) -> None: + key = entry.name + array = entry.array + array.data[array.mask] = array.fill_value + if entry.association: + a = entry.association + rank_mask = a.rank_mask(entry.primary.name) + array = array.reshape(entry.shape) + for rank, value in enumerate(array, start=1): + if rank_mask[rank-1]: + if value.ndim == 1: + codes_set_array(self._handle, f'#{rank}#{key}', value.data) + else: + codes_set(self._handle, f'#{rank}#{key}', value) + else: + if array.dtype.type == np.str_: + if array.size == 1: # [1] + codes_set(self._handle, key, array.data[0][0]) + elif array.size > 1 and not np.any(array != array.data[0][0]): + codes_set_array(self._handle, key, array.data[0][0:1]) + else: + codes_set_array(self._handle, key, array.data.ravel()) + elif self._compressed: + rank_count = entry.shape[0] + for rank in range(1, rank_count + 1): + rank_array = array.data[rank-1] + if np.any(rank_array != rank_array[0]): + codes_set_array(self._handle, f'#{rank}#{key}', rank_array) + else: + codes_set_array(self._handle, f'#{rank}#{key}', rank_array[0:1]) # [2] + else: + if key == 'centre': # [3] + for rank in range(1, array.size + 1): + codes_set(self._handle, f'#{rank}#{key}', array.data[rank-1]) + else: + try: + codes_set_array(self._handle, key, array.data) + except ArrayTooSmallError as error: # [4] + if entry.uniform_element \ + and entry.uniform_element.code == 31021: + for rank in range(1, array.size + 1): + codes_set(self._handle, f'#{rank}#{key}', array.data[rank-1]) + else: + raise error + + if self._clone_handle: # [5] + codes_release(self._clone_handle) + self._clone_handle = 0 + + # [1] This is a workaround for ECC-1623. + # + # [2] If all values in an array are the same, encode only a single scalar value. + # + # [3] The key 'centre' is also an alias for the header key 'headerCentre', + # and calling codes_set_array() on an array of data elements would treat + # the first element as a header value, which is not what we want. + # To work around this we have to set the values rank by rank. See ECC-1624. + # + # [4] Currently, ecCodes doesn't allow to use codes_set_array() on + # ...->associatedFieldSignificance keys, so we have to set the + # values rank by rank. See ECC-2098. + # + # [5] If there had been any changes to the original handle since the + # last time we created a clone, make sure we re-create the clone + # from scratch next time around so that it picks the latest changes. + # Note that this is only needed as a workarond for ECC-2015 and ECC-2016. + + def _ensure_correct_size(self, entry, array): + if entry.flags & SCALAR: + assert entry.shape[1] == 1 + if array.size == entry.shape[0]: + array = np.reshape(array, entry.shape) + else: + msg = f"'{entry.name}' is assumed to be a scalar element, but it has more than one value per rank" + action = current_behaviour.on_assumed_scalar_element_invalid_size + if action == 'raise': + raise ValueError(msg) + elif action == 'warn': + warnings.warn(msg) + elif action == 'ignore': + pass + else: + msg = f"'{action}' is not a valid action for `on_invalid_assumed_scalar_element_size`" + raise ValueError(msg) + entry.flags = entry.flags & ~Flags.SCALAR + entry.shape = (entry.shape[0], self._subset_count) + array = self._ensure_correct_size(entry, array) + elif self._compressed: + # Workaround for ECC-428 + if array.size == entry.shape[0] and entry.shape[1] > 1: + array = np.expand_dims(array, axis=1) + array = np.broadcast_to(array, entry.shape).copy() # [1] + elif array.size > entry.shape[0] and array.size < entry.size: + new_array = np.empty(entry.shape, array.dtype) + offset = 0 + for rank in range(1, entry.shape[0] + 1): + size = codes_get_size(self._handle, f'#{rank}#{entry.name}') + assert size == entry.shape[1] or size == 1 + new_array[rank-1,:] = array[offset:offset+size] + offset += size + array = new_array + elif array.size == 1 and entry.size > 1: + array = np.full(entry.shape, array[0]) # [2] + else: + array = np.reshape(array, entry.shape) + return array + + # [1], [2] Avoid creating unnecessary copies in read-only mode. TODO + + @cached_property + def _tables(self) -> Tables: return self.get_tables() + + def get(self, key: str, header_only=False, data_only=False, validate=True) -> ValueLike: + if validate: + if header_only and data_only: + raise ValueError("header_only and data_only can't be both True") + if header_only: + if not codes_bufr_key_is_header(self._handle, key): + raise NotFoundError(key) + if key == 'centre': + raise NotFoundError(f"{key}: Did you mean bufrHeaderCentre? (see ECC-1624)") + if '->' in key: # [1] + raise NotFoundError(key) + elif data_only: + if codes_bufr_key_is_header(self._handle, key): + raise NotFoundError(key) + try: + if key in ARRAY_KEYS: + value = codes_get_array(self._handle, key) + else: + try: + value = codes_get(self._handle, key) + except ArrayTooSmallError: + value = codes_get_array(self._handle, key) + except NotFoundError as error: + error.msg = key + raise error + return value + + # [1] Make sure we don't accidentally leak data section keys/values via + # the Header class. This can happen if the user tries to get attribute + # of an associated key, e.g., 'pressure->percentConfidence->code'. + # This should be captured by codes_bufr_key_is_header(), but it's not! + + def get_tables(self) -> Tables: + version = Version() + version.master = cast(int, codes_get_long(self._handle, 'masterTablesVersionNumber')) + version.local = cast(int, codes_get_long(self._handle, 'localTablesVersionNumber')) + version.centre = cast(int, codes_get_long(self._handle, 'bufrHeaderCentre')) + version.subcentre = cast(int, codes_get_long(self._handle, 'bufrHeaderSubCentre')) + tables = Tables(version) + return tables + + def is_defined(self, key: str, header_only=False, data_only=False) -> bool: + assert not (header_only and data_only) + if defined := codes_is_defined(self._handle, key): + if header_only: + defined = codes_bufr_key_is_header(self._handle, key) + elif data_only: + defined = not codes_bufr_key_is_header(self._handle, key) + return defined + + def is_missing(self, entry: DataEntry, slice: slice) -> bool: + assert slice.stop - slice.start > 0 + is_missing = 1 + for rank in range(slice.start + 1, slice.stop + 1): + if not (is_missing := codes_is_missing(self._handle, f'#{rank}#{entry.name}')): + break + return bool(is_missing) + + def set_missing(self, entry: DataEntry, slice): + assert slice.stop - slice.start > 0 + for rank in range(slice.start + 1, slice.stop + 1): + codes_set_missing(self._handle, f'#{rank}#{entry.name}') + + def keys(self, header_only=False, data_only=False, **kwargs) -> Iterator[str]: + assert not (header_only and data_only) + yield from keys_of(self._handle, header_only=header_only, data_only=data_only, **kwargs) + + def pack(self) -> bool: + if self._unpacked: + codes_set_long(self._handle, 'pack', 1) + total_length = codes_get_long(self._handle, 'totalLength') + try: + codes_set_long(self._handle, 'messageLength', min(total_length, 65535)) + except NotFoundError: + pass + return True + else: + return False + + def release(self) -> None: + if self._handle: + codes_release(self._handle) + self._handle = 0 + if self._clone_handle: + codes_release(self._clone_handle) + self._clone_handle = 0 + + def set(self, key: str, value: ValueLike, header_only=False, data_only=False, + validate=True, ignore_read_only_error=False) -> None: + if validate: + if header_only and data_only: + raise ValueError("header_only and data_only can't be both True") + if self._baked_template and key in INPUT_TEMPLATE_KEYS: + raise ReadOnlyError(key) + if key in ('pack', 'unpack'): + message = "%sing via the '%s' key is disallowed. Call %s() method istead." + raise NotFoundError(message % (key.capitalize(), key, key)) + if header_only: + if not codes_bufr_key_is_header(self._handle, key): + raise NotFoundError(key) + if key == 'centre': # [1] + raise NotFoundError(f'{key}: Did you mean bufrHeaderCentre? (see ECC-1624)') + elif data_only: + if codes_bufr_key_is_header(self._handle, key): + raise NotFoundError(key) + if key == 'unexpandedDescriptors': + self._unpacked = True # for messages created from samples + try: + if hasattr(value, '__iter__') and not isinstance(value, str): + codes_set_array(self._handle, key, value) + else: + codes_set(self._handle, key, value) + except ReadOnlyError as error: + if ignore_read_only_error: + pass + else: + error.msg += f': {key}' + raise error + if not header_only: + if self._clone_handle: # [2] + codes_release(self._clone_handle) + self._clone_handle = 0 + + # [1] ecCodes allows use of 'centre' as an alias for 'bufrHeaderCentre', but + # we disallow it because it causes ambiguity when 'centre' simultaneously + # appears in the data section too, such as in the presence of bitmap operator + # for instance. It would be confusing if we returned combined values from + # both the header and the data section in a single array when accessing + # 'centre' from the Message view. Unfortunately, right now this is exactly + # what ecCodes does (see ECC-1624). + # + # [2] If there had been any changes to the original handle's data section + # since the last time we had created the clone, make sure we re-create + # the clone from scratch next time around so that it picks up those changes. + # Note that this is only needed because of ECC-2015 and ECC-2016. + + def unpack(self) -> bool: + if self._unpacked: + return False + else: + codes_set_long(self._handle, 'skipExtraKeyAttributes', 1) # [1] + codes_set_long(self._handle, 'unpack', 1) + self._unpacked = True + return True + + # [1] We don't need to extract key attributes at the library level as we can + # infer all attributes, lazily, from the ElementTable. + + def write(self, file: BinaryIO) -> int: + self.pack() + codes_write(self._handle, file) + size = codes_get_message_size(self._handle) + return size + + +class KeysIterator(object): + """A simple wrapper around `codes_keys_iterator()` function. + + This class is mostly for internal use. Generally speaking, users should + rely on the higher-level interface provided by `Message`, `Header` + and `Data` classes. + """ + def __init__(self, msg_handle, bufr_only=True, skip: FlagsLike = None): + skip_flags = ensure_flags(skip) + if bufr_only: + self._handle = codes_bufr_keys_iterator_new(msg_handle) + self._next = codes_bufr_keys_iterator_next + self._get_name = codes_bufr_keys_iterator_get_name + self._delete = codes_bufr_keys_iterator_delete + else: + self._handle = codes_keys_iterator_new(msg_handle) + self._next = codes_keys_iterator_next + self._get_name = codes_keys_iterator_get_name + self._delete = codes_keys_iterator_delete + + if skip_flags & Flags.CODED: + codes_skip_coded(self._handle) + if skip_flags & Flags.COMPUTED: + codes_skip_computed(self._handle) + if skip_flags & Flags.READ_ONLY: + codes_skip_read_only(self._handle) + + def __del__(self): + self._delete(self._handle) + + def __iter__(self): + return self + + def __next__(self): + if self._next(self._handle): + return self._get_name(self._handle) + else: + raise StopIteration + + +def keys_of(msg_handle, bufr_only=True, header_only=False, data_only=False, + skip: FlagsLike = None) -> Iterator[str]: + """Returns an iterator over the keys of the message. + + By default, the iteration runs over all keys, which includes keys from both + the header and the data section. Optionally, user can constrain the + iterator to only return keys from one of the sections by setting + `header_only` or `data_only` keyword argument. + + Note that in order to access data section keys, the message must be + unpacked. It's user's responsibility to do so before calling this function. + If the message hasn't been unpacked, trying to access data keys will raise + an exception. + + When `bufr_only` is True, the iterator returns BUFR-specific keys only; if + False, all generic keys are returned instead. + + This function is mostly for internal use. Generally speaking, users should + rely on the higher-level interface provided by `Message`, `Header` + and `Data` classes. + """ + if header_only and data_only: + raise ValueError("Keyword arguments `header_only` and `data_only` can't both be True") + + data_keys = False + keys = KeysIterator(msg_handle, bufr_only, skip) + data_keys_unaccessible = "Cannot access data keys because message hasn't been unpacked. " + data_keys_unaccessible += "If you want to access header keys only, set keyword argument `header_only` to True." + + if bufr_only: + for key in keys: + if key == 'unexpandedDescriptors': + next_key = next(keys, None) + if next_key == None: + if not header_only: + raise RuntimeError(data_keys_unaccessible) + else: + data_keys = True + if header_only: + yield key + break + elif data_only: + key = next_key + else: + yield key + key = next_key + if data_only and not data_keys: + continue + yield key + else: + for key in keys: + if key == 'dataKeys': + next_key = next(keys, None) + if next_key == 'section4Padding': + if not header_only: + raise RuntimeError(data_keys_unaccessible) + else: + data_keys = True + if header_only: + yield key + key = next_key + elif data_only: + key = next_key + else: + yield key + key = next_key + elif key == 'section4Padding': + data_keys = False + if (header_only and data_keys) or (data_only and not data_keys): + continue + yield key + diff --git a/eccodes/highlevel/_bufr/common.py b/eccodes/highlevel/_bufr/common.py new file mode 100644 index 00000000..8acd1940 --- /dev/null +++ b/eccodes/highlevel/_bufr/common.py @@ -0,0 +1,258 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import datetime as dt +import re +import sys + +from collections import Counter, abc, defaultdict +from copy import deepcopy +from dataclasses import dataclass, field, fields +from enum import auto; import enum +from functools import cached_property +from pathlib import Path + +from typing import Any, BinaryIO, Callable, Dict, Iterator, List, Optional, Set +from typing import Sequence, Tuple, Union, cast +from numpy.ma import MaskedArray +from numpy.typing import DTypeLike, NDArray + +import eccodes +import numpy; import numpy as np + +from eccodes.eccodes import * +from eccodes.eccodes import KeyValueNotFoundError as NotFoundError + +from .tables import Element + +@dataclass +class Behaviour: + assumed_scalar_elements: Set = field(default_factory=set) # [1] + on_assumed_scalar_element_invalid_size: str = 'warn' # [2] + autorelease_handle: bool = True # [3] + update_header_from_data_before_packing: bool = True # [4] + +# [1] By default, values of data elements in uncompressed, multi-subset messages +# are one-/two-dimensional arrays, even if there is only one common value for +# all subsets. This is done in order to provide "stable" view of data elements +# which doesn't depend on the encoding details. However, for situations where +# the user can guarantee that an element, or a set of elements, will always +# have only a single value (per rank), this option can be used to reduce +# memory usage. +# +# [2] If an assumed scalar element is encoded with more than one value (per rank), +# either print a warning ('warn'), raise an exception ('raise'), or just carry +# on as if nothing hapened ('ignore'). +# +# [3] Whether to release Coder's C handle automatically. The only reason you might +# want to set this option to False is if you need to interoperate with the +# low-level API, but you must know what you're doing. +# +# [4] This option controls whether to call Message's update_header_from_data() +# method automatically before packing. This method sets some of the header +# keys such as 'typicalYear', 'localMonth', 'localLatitude', etc. + + +DEFAULT_BEHAVIOUR = Behaviour(assumed_scalar_elements=set([ + # 'originatorOfRetrievedAtmosphericConstituent', + # 'satelliteChannelBandWidth', + # 'satelliteChannelCentreFrequency', + # 'satelliteIdentifier', + # 'satelliteInstruments', + ])) + +current_behaviour = deepcopy(DEFAULT_BEHAVIOUR) + +def get_behaviour(): + global current_behaviour + return deepcopy(current_behaviour) + +def set_behaviour(new_behaviour): + global current_behaviour + for f in fields(new_behaviour): + setattr(current_behaviour, f.name, getattr(new_behaviour, f.name)) + +from contextlib import contextmanager + +@contextmanager +def change_behaviour(): + global current_behaviour + saved_behaviour = get_behaviour() + try: + yield current_behaviour + finally: + set_behaviour(saved_behaviour) + +MultiIndex = Tuple[int, ...] + +DateLike = Union[dt.date, dt.datetime, np.datetime64, str] +TimeLike = Union[DateLike, dt.timedelta, np.timedelta64] +ValueLike = Union[bool, int, float, str, List, NDArray] + +class Flags(enum.Flag): + CODED = auto() + COMPUTED = auto() + FACTOR = auto() + READ_ONLY = auto() + BITMAP = auto() + SCALAR = auto() + +CODED = Flags.CODED +COMPUTED = Flags.COMPUTED +FACTOR = Flags.FACTOR +READ_ONLY = Flags.READ_ONLY +BITMAP = Flags.BITMAP +SCALAR = Flags.SCALAR + +FLAGS = dict(coded=CODED, computed=COMPUTED, factor=FACTOR, read_only=READ_ONLY, bitmap=BITMAP) + +FlagsLike = Optional[Union[Flags, str, Sequence[str]]] + +def ensure_flags(value: FlagsLike) -> Flags: + if value is None: + flags = Flags(0) + elif isinstance(value, Flags): + flags = value + elif isinstance(name := value, str): + try: + flags = FLAGS[name] + except KeyError: + raise ValueError(f"'{name}' is not a valid flag name") + elif isinstance(value, Sequence): + names = list(value) + flags = Flags(0) + while names: + name = names.pop() + try: + flags |= FLAGS[name] + except KeyError: + raise ValueError(f"'{name}' is not a valid flag name") + else: + raise TypeError("Invalid type: %s", type(value)) + return flags + +@dataclass +class Key: + + name: str + rank: Optional[int] = None + primary: str = "" + secondary: str = "" + attribute: str = "" + string: str = "" + element: Optional[Element] = None + flags: Flags = CODED + + @staticmethod + def from_string(string: str): + name, rank, primary, secondary, attribute = "", None, "", "", "" + if string.startswith('/'): + raise NotFoundError(f"{string}: Search keys with the '//' syntax are not supported yet") + elif string.startswith('#'): + second_hash = string.find('#', 2) + if second_hash == -1: + raise NotFoundError(f"'{string}': Missing second '#' character") + rank = int(string[1:second_hash]) + if rank <= 0: + raise NotFoundError(f"'{string}': Rank must be a positive number") + else: + second_hash = -1 + last_arrow = string.rfind('->', -11, -4) + if last_arrow != -1: + if string[last_arrow+2:] in ('code', 'units', 'reference', 'scale', 'width'): + attribute = string[last_arrow+2:] + else: + last_arrow = -1 + else: + last_arrow = len(string) + first_arrow = string.find('->', second_hash+1, last_arrow) + if first_arrow != -1: + secondary = string[first_arrow+2:last_arrow] + else: + first_arrow = last_arrow + primary = string[second_hash+1:first_arrow] + name = string[second_hash+1:last_arrow] + key = Key(name, rank, primary, secondary, attribute, string) + return key + + def __post_init__(self): + if not self.string: + if self.rank: + self.string = f'#{self.rank}#' + self.string += self.name + if self.attribute: + self.string += f'->{self.attribute}' + if not self.primary: + self.primary = self.name + +@dataclass +class Association: + + element: Element + element_rank: int + element_dtype: DTypeLike + bitmap: NDArray + bitmap_offset: int + indices: Dict[str, NDArray] + slices: Dict[str, slice] = field(init=False, default_factory=dict) # [1] + entries: Dict[str, 'DataEntry'] = field(init=False, default_factory=dict) # [2] + + # [1] Slices of elements sequence numbers which are within the scope of the bitmap. + # + # [2] A dict of secondary/associated entries keyed by the primary group name,. + # Only applies to those primary entries where at least one of the ranks is + # is set in the bitmap. + + def __post_init__(self) -> None: + # Consider only those elements that are within the scope + # of the bitmap. + for key, indices in self.indices.items(): + bitmap_stop = self.bitmap.size + self.bitmap_offset + start = numpy.searchsorted(indices >= self.bitmap_offset, True) + stop = indices.size - numpy.searchsorted(indices[::-1] < bitmap_stop, True) + self.slices[key] = slice(start, stop) + + def rank_mask(self, key: str): + """ Returns a mask indicating which ranks of the given primary key have + an actual associated value. + """ + slice = self.slices[key] + indices = self.indices[key] # all + mask = numpy.repeat(False, len(indices)) # the default for ranks outside bitmap's scope + indices = indices[slice] # only within bitmap's scope + indices = indices - self.bitmap_offset # relative to bitmap + mask[slice] = self.bitmap[indices] + return mask + + def any_rank_set(self, key: str) -> bool: + """ Returns `True` if any rank of the given primary key has an actual + associated value. + """ + try: + mask = self.rank_mask(key) + except KeyError: # key was defined *after* the bitmap association + return False + return bool(numpy.any(mask)) + +@dataclass +class DataEntry: + + name: str + shape: Tuple = () + uniform_element: Optional[Element] = None + elements: List[Element] = field(default_factory=list) + array: Optional[NDArray] = None + association: Optional[Association] = None + primary: Optional['DataEntry'] = None + flags: Flags = CODED + + @property + def size(self) -> int: + assert len(self.shape) == 2 + return self.shape[0] * self.shape[1] + diff --git a/eccodes/highlevel/_bufr/data.py b/eccodes/highlevel/_bufr/data.py new file mode 100644 index 00000000..194136a0 --- /dev/null +++ b/eccodes/highlevel/_bufr/data.py @@ -0,0 +1,594 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from .coder import Coder +from .common import * +from .helpers import ensure_masked_array, flatten, missing_of +from .tree import AssociationNode, LeafNode, Node, ReplicationNode, WrapperNode, build_tree +from .tables import Element +from .view import View + +class Data(View): + + _coder: Coder + _subset_count: int = 0 + _compressed: bool = False + _entries: Dict[str, DataEntry] + _associations: Dict[Tuple[str, int], Association] + + def __init__(self, coder: Coder) -> None: + self._coder = coder + self._entries = {} + + def __contains__(self, key: str) -> bool: + return self._top_view.__contains__(key) + + def __eq__(self, other: object) -> bool: + if isinstance(other, Data): + eq = self._top_view.__eq__(other._top_view) + else: + eq = False + return eq + + def __getitem__(self, subscript: Union[int, str]) -> Union['DataBlock', ValueLike]: + return self._top_view.__getitem__(subscript) + + def __iter__(self) -> Iterator['DataBlock']: + yield from self._top_view.__iter__() + + def __len__(self) -> int: + return self._top_view.__len__() + + def __setitem__(self, key: str, value: ValueLike) -> None: + return self._top_view.__setitem__(key, value) + + def __str__(self) -> str: + return self._top_view.__str__() + + def as_dict(self, ranked=False, depth=0, **kwds) -> Dict: + """Returns dict-like representation of the data section items. + """ + return self._top_view.as_dict(ranked, depth, **kwds) + + def copy_to(self, other: 'Data') -> None: + """Copies common keys/values in this data section to `other`. + """ + self._coder.unpack() + self._commit() + codes_bufr_copy_data(self._coder._handle, other._coder._handle) + # Workaround for ECC-2022 + self._top_view # [1] + for a in self._associations.values(): + if a.element_rank > 1: + for g in a.entries.values(): + other[g.name][:] = self[g.name][:] + + # [1] This ensures that we have built all bitmap associations. + + def get_count(self, key: str) -> int: + """Returns the number of ranked items designated by the given key. + """ + return self._top_view.get_count(key) + + def get_shape(self, key: str) -> Tuple[int, ...]: + return self._top_view.get_shape(key) + + def get_size(self, key: str) -> int: + return self._top_view.get_size(key) + + def is_missing(self, key: str) -> bool: + return self._top_view.is_missing(key) + + def items(self, ranked=False, **kwds) -> Iterator[Tuple[str, ValueLike]]: + yield from self._top_view.items(ranked, **kwds) + + def keys(self, ranked=False, **kwds) -> Iterator[str]: + yield from self._top_view.keys(ranked, **kwds) + + def set(self, key: str, value: ValueLike) -> None: + self._top_view.set(key, value) + + def set_missing(self, key: str) -> None: + self._top_view.set_missing(key) + + def _commit(self) -> None: + for entry in self._entries.values(): + if entry.array is None or entry.flags & (READ_ONLY|COMPUTED): + continue + else: + self._coder.commit(entry) + entry.array = None + + @cached_property + def _top_view(self): + self._subset_count = cast(int, self._coder.get('numberOfSubsets')) + self._compressed = cast(bool, self._coder.get('compressedData')) + root, self._entries, self._associations = build_tree(self._coder) # [1] + top_level = () + top_view = DataBlock(self, root, top_level) + for entry in self._entries.values(): + try: + slice = top_view._slices[entry.name] + except KeyError: + continue + if entry.association: + entry.shape = entry.primary.shape + elif entry.flags & SCALAR: + entry.shape = (slice.stop, 1) + if entry.flags & FACTOR: + assert entry.array is not None # [2] + elif entry.flags & BITMAP: + entry.shape = (slice.stop, None) # [3] + else: + if self._compressed: + entry.shape = (slice.stop, self._subset_count) + else: + entry.shape = (slice.stop,) + self._coder._baked_template = True + self._coder._subset_count = self._subset_count + self._coder._compressed = self._compressed + return top_view + + # [1] Note that it's the call to build_tree() which triggers unpacking! + # Because _top_view() is a cached property (and thus initialized lazily) + # the unpacking will be defered until when actually needed. + # + # [2] Note that arrays of delayed replication factors are constructed in build_tree(). + # + # [3] At the moment the size of bitmap arrays is determined in Coder.checkout(). + # Is there a way to infer it earlier? TODO + +class DataBlock(View): + + def __init__(self, data: Data, node, index: MultiIndex) -> None: + self._data: Data = data + self._node = node + self._index: MultiIndex = index + self._slices: Dict[str, slice] = resolve_slices(node, index) + self._sub_blocks: Dict[int, 'DataBlock'] = {} + + def __contains__(self, subscript: str) -> bool: + key = Key.from_string(subscript) + try: + entry = self._get_entry(key) + except NotFoundError: + contains = False + else: + if key.rank: + slice = self._slices[entry.name] + contains = key.rank <= slice.stop + else: + contains = True + return contains + + def __eq__(self, other: object) -> bool: + if isinstance(other, DataBlock): + eq = False + for (k1, v1), (k2, v2) in zip(self.items(), other.items()): + if k1 != k2: + break + if isinstance(v1, np.ndarray): + if not isinstance(v2, np.ndarray): + break + if v1.dtype.type == np.str_: + if not v2.dtype.type == np.str_: + break + if not np.char.compare_chararrays(v1, v2, '==', rstrip=True): + break + else: + if not np.all(v1.data == v2.data): + break + else: + if v1 != v2: + break + else: + eq = True + else: + eq = False + return eq + + def __len__(self) -> int: + node = self._node + if isinstance(node, AssociationNode): + # Has no children. Should we add an empty list? TODO + return 0 + elif node.children and isinstance(node.children[0], ReplicationNode): + assert len(node.children) == 1 + replication = node.children[0] + return replication.factors[self._index] + else: + return len(node.children) + + def __iter__(self) -> Iterator['DataBlock']: + node = self._node + if node.children and isinstance(node.children[0], ReplicationNode): + assert len(node.children) == 1 + replication = node.children[0] + for factor in range(replication.factors[self._index]): + index = self._index + (factor,) + if len(replication.children) == 1 and isinstance(replication.children[0], LeafNode): + block = DataBlock(self._data, replication.children[0], index) + else: + block = DataBlock(self._data, replication, index) + yield block + else: + for child in node.children: + yield DataBlock(self._data, child, self._index) + + def __getitem__(self, subscript: Union[int, str]) -> Union['DataBlock', ValueLike]: + if isinstance(subscript, str): + key = Key.from_string(subscript) + entry = self._get_entry(key) + sub = self._get_subscript(entry, key) + if key.attribute: + if entry.uniform_element: + value = getattr(entry.uniform_element, key.attribute) + else: + if not entry.elements: + resolve_elements(self._data._entries, self._data._top_view._node) + assert entry.elements + if isinstance(sub, slice): + value = [getattr(e, key.attribute) for e in entry.elements[sub]] + else: + value = getattr(entry.elements[sub], key.attribute) + else: + array = self._get_array(entry) + value = array[sub] + return value + elif type(ordinal := subscript) is int: + node = self._node + if node.children and isinstance(node.children[0], ReplicationNode): + assert len(node.children) == 1 + replication = node.children[0] + factor = replication.factors[self._index] + ordinal = factor + ordinal if ordinal < 0 else ordinal + if ordinal < 0 or ordinal >= factor: + raise IndexError(f"Subscript out of range: {subscript}") + try: + block = self._sub_blocks[ordinal] + except KeyError: + index = self._index + (ordinal,) + if len(replication.children) == 1 and isinstance(replication.children[0], LeafNode): + block = DataBlock(self._data, replication.children[0], index) + else: + block = DataBlock(self._data, replication, index) + self._sub_blocks[ordinal] = block + else: + ordinal = len(node.children) + ordinal if ordinal < 0 else ordinal + if ordinal < 0 or ordinal >= len(node.children): + raise IndexError(f"Subscript out of range: {subscript}") + try: + block = self._sub_blocks[ordinal] + except KeyError: + block = DataBlock(self._data, node.children[ordinal], self._index) + self._sub_blocks[ordinal] = block + return block + else: + raise TypeError("subscript must be either 'int' or 'str'; got %s" % type(subscript)) + + def __setitem__(self, key: str, value: ValueLike) -> None: + key = Key.from_string(key) + value = ensure_masked_array(value) + entry = self._get_entry(key) + if entry.flags & READ_ONLY or key.attribute: + raise ReadOnlyError(f"{key.string}") + array = self._get_array(entry) + subscript = self._get_subscript(entry, key) + if isinstance(subscript, slice): + array[subscript] = value + else: + array[subscript:subscript+1] = value + + def __str__(self) -> str: + import pprint + d = self.as_dict() + return pprint.pformat(d, sort_dicts=False) + + def as_dict(self, ranked=False, depth=0, **kwds) -> Dict: + """Returns dict-like representation of the DataBlock items. + """ + if self._node.depth < depth and len(self) > 0: + d = {} + for i, block in enumerate(self): + # block = cast('DataBlock', self[i]) + d[i] = block.as_dict(ranked, depth, **kwds) + else: + counts_only = kwds.pop('counts_only', False) + shapes_only = kwds.pop('shapes_only', False) + if counts_only: + d = {k: self.get_count(k) for k in self.keys(ranked, **kwds)} + elif shapes_only: + d = {k: self.get_shape(k) for k in self.keys(ranked, **kwds)} + else: + d = dict(self.items(ranked, **kwds)) + return d + + def get_count(self, key: str) -> int: + """Returns the number of elements designated by the given key. + """ + key = Key.from_string(key) + try: + slice = self._slices[key.name] + except KeyError: + raise NotFoundError(key.string) + else: + rank_count = slice.stop - slice.start + if key.rank: + if key.rank <= rank_count: + count = 1 + else: + raise NotFoundError(key.string) + else: + count = rank_count + return count + + def get_shape(self, key: str) -> Tuple[int, ...]: + key = Key.from_string(key) + entry = self._get_entry(key) + subscript = self._get_subscript(entry, key) + if isinstance(subscript, slice): + shape = (subscript.stop - subscript.start,) + else: + shape = () + if key.attribute: + if entry.uniform_element: + shape = () + elif self._data._compressed and not entry.flags & Flags.SCALAR: + shape += (self._data._subset_count,) + return shape + + def get_size(self, key: str) -> int: + shape = self.get_shape(key) + size = 1 + for dim in shape: + size *= dim + return size + + def is_missing(self, key: str) -> bool: + key = Key.from_string(key) + if key.attribute: + is_missing = False + else: + entry = self._get_entry(key) + slice = self._get_slice(entry, key) + if entry.array is None: + is_missing = self._data._coder.is_missing(entry, slice) + else: + array = self._get_array(entry) + array_view = array[slice] + is_missing = np.all(array_view.mask) + return is_missing + + def set(self, key: str, value: ValueLike) -> None: + self.__setitem__(self, key, value) + + def set_missing(self, key: str) -> None: + key = Key.from_string(key) + if key.attribute: + raise ValueCannotBeMissingError(f"Attribute '{key.string}' can't have missing value") + else: + entry = self._get_entry(key) + slice = self._get_slice(entry, key) + if entry.array is None: + self._data._coder.set_missing(entry, slice) + else: + array = self._get_array(entry) + array_view = array[slice] + array_view.mask = True + + def items(self, ranked=False, **kwds) -> Iterator[Tuple[str, ValueLike]]: + for key in self.keys(ranked, **kwds): + yield key, cast(ValueLike, self[key]) + + def keys(self, ranked=False, **kwds) -> Iterator[str]: + only_flags = ensure_flags(kwds.get('only', Flags.CODED)) + skip_flags = ensure_flags(kwds.get('skip', Flags(0))) + if ranked: + ranks = Counter() + for key in iterate_keys(self._node, self._index): + ranks[key.name] += 1 + rank = ranks[key.name] + yield f'#{rank}#{key.name}' + else: + for name, slice in self._slices.items(): + if slice.stop <= slice.start: + continue # Ignore keys inside empty replications + try: + entry = self._data._entries[name] + except KeyError: + continue # Ignore unset associated keys + if not entry.flags & only_flags: + continue + if entry.flags & skip_flags: + continue + yield name + + def _get_entry(self, key: Key) -> DataEntry: + try: + entry = self._data._entries[key.name] + except KeyError: + raise NotFoundError(key.string) + return entry + + def _get_array(self, entry): + if entry.array is None: + array = self._data._coder.checkout(entry) + if not self._data._coder._compressed: # TODO: correct shape in Coder + array = array.ravel() + if array.dtype.type == np.str_ and np.__version__ < '1.24': + array = np.ma.masked_where(array == '', array, copy=False) # [1] + array.fill_value = '' + else: + array = np.ma.masked_equal(array, missing_of(array.dtype), copy=False) + entry.array = array + if entry.flags & Flags.SCALAR: + array = entry.array.ravel() + else: + array = entry.array + return array + + # [1] This is a workaround for old versions of numpy where calling masked_equal() + # on a string array fails with: + # numpy.core._exceptions.UFuncTypeError: ufunc 'equal' did not contain a loop + # with signature matching types (dtype(' dtype('bool') + + def _get_subscript(self, entry, key): + slice = self._get_slice(entry, key) + slice_len = slice.stop - slice.start + if key.rank: + assert slice_len == 1 + subscript = slice.start + elif slice_len == 1: + max_level = self._node.max_levels[entry.name] + if self._node.level == max_level: # [1] + subscript = slice.start + else: + subscript = slice + else: + subscript = slice + return subscript + + # [1] Make sure we don't flatten single-rank array views unless they are + # accessed from the bottom-most DataBlock. This is important because + # otherwise shapes of array views could change depending on the values + # of replication factors. We want to provide 1d array views only in those + # cases where it's guaranteed there is always going to be only one rank for + # the given key in the current DataBlock, irrespective of replication + # factors. + + def _get_slice(self, entry, key): + slice_ = self._slices[entry.name] + if key.rank: + rank_count = slice_.stop - slice_.start + if key.rank > rank_count: + message = f"Rank %d is out of bounds; max. rank of '%s' in this view is %d" + raise NotFoundError(message % (key.rank, entry.name, rank_count)) + start = slice_.start + key.rank - 1 + slice_ = slice(start, start + 1) + return slice_ + +def iterate_keys(node, index: MultiIndex) -> Iterator[Key]: + """Recursively iterates over keys of `node` and all of its sub-nodes given + the replication index. + """ + if isinstance(node, LeafNode): + yield from node.keys + elif isinstance(node, ReplicationNode): + if len(index) == node.factors.ndim + 1: + for child in node.children: + yield from iterate_keys(child, index) + else: + for i in range(node.factors[index]): + child_index = index + (i,) + for child in node.children: + yield from iterate_keys(child, child_index) + elif isinstance(node, WrapperNode): + for child in node.children: + yield from iterate_keys(child, index) + elif isinstance(node, AssociationNode): + yield from node.keys + else: + assert False + +def resolve_slices(node, index: MultiIndex) -> Dict[str, slice]: + """Given the replication index, resolves ranks for each entry in the node. + """ + try: + slices = node.slices[index] + except KeyError: + slices = {} + starts = resolve_starts(node, index) + counts = resolve_counts(node, index) + for name, count in counts.items(): + start = starts[name] + stop = start + count + slices[name] = slice(start, stop) + node.slices[index] = slices + return slices + +def resolve_starts(node, index: MultiIndex) -> Counter: + """Given the replication index, resolves rank starts for each entry in the node. + """ + try: + starts = node.starts[index] + except KeyError: + if not node.parent: + starts = Counter() + elif not isinstance(node, ReplicationNode): + if node.ordinal > 0: + upper_sibling = node.parent.children[node.ordinal-1] + starts = resolve_starts(upper_sibling, index).copy() + counts = resolve_counts(upper_sibling, index) + starts += counts + else: + starts = resolve_starts(node.parent, index) + else: + if index[-1] == 0: + starts = resolve_starts(node.parent, index[:-1]) + else: + lower_index = index[:-1] + (index[-1] - 1,) + starts = resolve_starts(node, lower_index).copy() + counts = resolve_counts(node, lower_index) + starts += counts + node.starts[index] = starts + return starts + +def resolve_counts(node, index: MultiIndex) -> Counter: + """Given the replication index, resolves rank counts for each entry in the node. + """ + try: + counts = node.counts[index] + except KeyError: + if isinstance(node, (LeafNode, AssociationNode)): + counts = Counter((k.name for k in node.keys)) + node.counts[index] = counts + else: + counts = Counter() + for child in node.children: + counts += resolve_counts(child, index) + if len(index) == node.level: + node.counts[index] = counts + if (isinstance(node, LeafNode) + and isinstance(node.parent, ReplicationNode) + and len(index) < node.level): + total_factor = sum(flatten(node.parent.factors[index])) + counts = counts.copy() + for name in counts: + counts[name] *= total_factor + return counts + +def resolve_elements(entries, root: Node): + """Traverses nodes of the data tree and gathers lists of expanded elements + for each of the entries. + """ + def recurse(node, index): + if isinstance(node, WrapperNode): + for child in node.children: + recurse(child, index) + elif isinstance(node, ReplicationNode): + assert node.level == len(index) + for i in range(node.factors[index]): + for child in node.children: + recurse(child, index + (i,)) + elif isinstance(node, (LeafNode, AssociationNode)): + for key in node.keys: + try: + entry = entries[key.name] + except KeyError: # [1] + continue + if not entry.uniform_element: + entry.elements.append(key.element) + else: + assert False + recurse(root, index=()) + + # [1] Currently we append associated keys for each and every primary key + # of the LeafNode, but we add them to entries only if there is at least + # one rank covered by the bitmap. Check if this is OK or whether it needs + # to be optimized. TODO + diff --git a/eccodes/highlevel/_bufr/header.py b/eccodes/highlevel/_bufr/header.py new file mode 100644 index 00000000..c1cfab60 --- /dev/null +++ b/eccodes/highlevel/_bufr/header.py @@ -0,0 +1,282 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from .coder import Coder, INPUT_TEMPLATE_KEYS, TEMPLATE_KEYS +from .common import * +from .helpers import get_datetime, get_date, get_time, set_datetime, set_date, set_time +from .view import View + +@dataclass +class Entry: + name: str = '' + value: Optional[ValueLike] = None + dirty: bool = False + computed: bool = False + derive: Optional[Callable] = None + project: Optional[Callable] = None + +def derive_datetime(header, key): + prefix = key.split('DateTime')[0] + datetime = get_datetime(header, prefix=prefix) + return datetime + +def derive_date(header, key): + prefix = key.split('Date')[0] + date = get_date(header, prefix=prefix) + return date + +def derive_time(header, key): + prefix = key.split('Time')[0] + time = get_time(header, prefix=prefix) + return time + +def derive_rdbtime_datetime(header, key): + date = derive_rdbtime_date(header, 'rdbtimeDate') + time = derive_time(header, 'rdbtimeTime') + datetime = date + time + return datetime + +def derive_rdbtime_date(header, key): + assert key == 'rdbtimeDate' + string = header._coder.get(key, validate=False) + y, m, d = string[0:4], string[4:6], string[6:8] + date = np.datetime64(f'{y}-{m}-{d}', 'D') + return date + +def project_datetime(header, key, value): + prefix = key.split('DateTime')[0] + set_datetime(header, value, prefix=prefix) + +def project_date(header, key, value): + prefix = key.split('Date')[0] + set_date(header, value, prefix=prefix) + +def project_time(header, key, value): + prefix = key.split('Time')[0] + set_time(header, value, prefix=prefix) + +def project_edition_3_typical_year(header, key, value): + assert key == 'typicalYear' + assert header['edition'] == 3 + header['typicalCentury'] = value // 100 + 1 + header['typicalYearOfCentury'] = value % 100 + +COMMON_COMPUTED_KEYS = set([ + 'typicalDateTime', 'typicalDate', 'typicalTime', + 'localDateTime', 'localDate', 'localTime', + 'rdbtimeDateTime', 'rdbtimeDate', 'rdbtimeTime', + 'rectimeTime', + 'md5Data', +]) + +_COMPUTED_ENTRIES = { + None: [Entry(key, computed=True) for key in COMMON_COMPUTED_KEYS], + 3: [Entry('typicalYear', computed=True, project=project_edition_3_typical_year)], + 4: [Entry('typicalCentury', computed=True), Entry('typicalYearOfCentury', computed=True)], +} + +COMPUTED_ENTRIES = {} +for edition in _COMPUTED_ENTRIES.keys(): + COMPUTED_ENTRIES[edition] = {entry.name: entry for entry in _COMPUTED_ENTRIES[edition]} + +for key, entry in COMPUTED_ENTRIES[None].items(): + if key == 'rdbtimeDateTime': + entry.derive = derive_rdbtime_datetime + elif key == 'rdbtimeDate': + entry.derive = derive_rdbtime_date + elif key.endswith('DateTime'): + entry.derive = derive_datetime + entry.project = project_datetime + elif key.endswith('Date'): + entry.derive = derive_date + entry.project = project_date + elif key.endswith('Time'): + entry.derive = derive_time + entry.project = project_time + +class Header(View): + """Provides access to BUFR header entries. + """ + + _coder: Coder + _cache: Dict[str, Entry] + + def __init__(self, coder: Coder) -> None: + self._coder = coder + edition = cast(int, coder.get('edition', validate=False)) + self._cache = COMPUTED_ENTRIES[None].copy() + self._cache.update(COMPUTED_ENTRIES[edition]) + + def __contains__(self, key: str) -> bool: + return (key in self._cache) or self._coder.is_defined(key, header_only=True) + + def __eq__(self, other: object) -> bool: + if isinstance(other, Header): + eq = False + items1 = self.items(skip='read_only') + items2 = other.items(skip='read_only') + for (k1, v1), (k2, v2) in zip(items1, items2): + if k1 != k2: + break + if isinstance(v1, np.ndarray): + if not isinstance(v2, np.ndarray): + break + if not np.all(v1.data == v2.data): + break + else: + if v1 != v2: + break + else: + eq = True + else: + eq = False + return eq + + def __getitem__(self, key: str) -> ValueLike: + try: + entry = self._cache[key] + except KeyError: + value = self._coder.get(key, header_only=True) + self._cache[key] = Entry(key, value) + else: + if entry.computed: + assert entry.value is None + if entry.derive: + value = entry.derive(self, key) + else: + value = self._coder.get(key, validate=False) + else: + assert entry.value is not None + value = entry.value + return value + + def __setitem__(self, key: str, value: ValueLike) -> None: + if key == 'edition': + current_edition = cast(int, self._coder.get('edition', validate=False)) + if value != current_edition: + for k in COMPUTED_ENTRIES[current_edition].keys(): + self._cache.pop(k, None) + assert isinstance(value, int) + self._cache.update(COMPUTED_ENTRIES[value]) + try: + entry = self._cache[key] + except KeyError: + self._coder.set(key, value, header_only=True) + self._cache[key] = Entry(key, value, dirty=True) + else: + if entry.computed: + if entry.project: + entry.project(self, key, value) + else: + self._coder.set(key, value, header_only=True) + else: + self._coder.set(key, value, header_only=True) + entry.value = value + entry.dirty = True + + def __str__(self) -> str: + import pprint + d = self.as_dict() + return pprint.pformat(d, sort_dicts=False) + + def copy_to(self, other: 'Header', skip_template_keys=False) -> None: + """Copies common items from this header to `other`. + """ + for key, value in self.items(skip='read_only'): + if key == 'unexpandedDescriptors': + break + try: + other[key] = value + except NotFoundError: + continue + if not skip_template_keys: + if other._coder._baked_template: + raise EncodingError('Cannot change baked template') + self._coder.unpack() + for skey, okey in zip(TEMPLATE_KEYS, INPUT_TEMPLATE_KEYS): + if okey not in other._cache: + try: + value = self._coder.get(skey, validate=False) + except NotFoundError: + continue + else: + other._coder.set(okey, value) + + def get_count(self, key: str) -> int: + """Returns the number of elements designated by the given key. + """ + self.__getitem__(key) + return 1 + + def get_shape(self, key: str) -> Tuple[int, ...]: + value = self.__getitem__(key) + if isinstance(value, np.ndarray): + shape = value.shape + else: + shape = () + return shape + + def get_size(self, key: str) -> int: + value = self.__getitem__(key) + if isinstance(value, np.ndarray): + size = value.size + else: + size = 1 + return size + + def is_missing(self, key: str) -> bool: + self.__getitem__(key) + return False + + def items(self, ranked=False, **kwds) -> Iterator[Tuple[str, ValueLike]]: + for key in self.keys(**kwds): + yield key, self._coder.get(key, validate=False) + + def keys(self, ranked=False, **kwds) -> Iterator[str]: + yield from self._coder.keys(header_only=True, **kwds) + + def set(self, key: str, value: ValueLike) -> None: + self.__setitem__(key, value) + + def set_missing(self, key: str): + self.__getitem__(key) + raise ValueCannotBeMissingError(f"Header key '{key}' can't have missing value'") + + def as_dict(self, ranked=False, depth=0, **kwds) -> Dict: + """Returns dict-like representation of the header items. + """ + counts_only = kwds.pop('counts_only', False) + shapes_only = kwds.pop('shapes_only', False) + if counts_only: + d = {k: self.get_count(k) for k in self.keys(ranked, **kwds)} + elif shapes_only: + d = {k: self.get_shape(k) for k in self.keys(ranked, **kwds)} + else: + d = dict(self.items(ranked, **kwds)) + return d + + def _commit(self) -> None: + return # [1] + if self._cache: + for key in ['edition', 'bufrHeaderCentre', 'masterTableNumber']: # must be set first + try: + value = self._cache.pop(key) + except KeyError: + continue + self._coder.set(key, value, validate=False) # [2] + for key, value in self._cache.items(): + self._coder.set(key, value, validate=False, ignore_read_only_error=True) # [2] + + # [1] Currently, when setting header keys, we pass the values right through + # into the coder, so there is no need to flush the cache before packing. + # But we will probably need this in the future when adding support for + # dynamically resizeable replication blocks, which will require full + # virtualisation of BUFR messages. TODO + # + # [2] Just a reminder that we don't need to use header_only=True here + # because the keys in the cache are header-only by definition. diff --git a/eccodes/highlevel/_bufr/helpers.py b/eccodes/highlevel/_bufr/helpers.py new file mode 100644 index 00000000..29564992 --- /dev/null +++ b/eccodes/highlevel/_bufr/helpers.py @@ -0,0 +1,496 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from .common import * + +class RaggedArray: + + @staticmethod + def empty(ndim=1): + if ndim > 0: + data = [] + for _ in range(ndim-1): + data = [data] + else: + data = None + return RaggedArray(data, ndim) + + def __init__(self, data, ndim=None): + self.data = data + if ndim is None: + self.ndim = 0 + while True: + try: + data = data[0] + except (IndexError, TypeError): + break + else: + self.ndim += 1 + else: + self.ndim = ndim + + def __repr__(self): + return f'RaggedArray({self.data})' + + def __getitem__(self, index): + try: + value = self.data[index[0]] + except (IndexError, TypeError): + try: + value = self.data[index] + except TypeError: + if index in ((), None): + value = self.data + else: + raise IndexError(f'{index}') + else: + for i in range(1, len(index)): + value = value[index[i]] + return value + + def __setitem__(self, index, value): + data = self.data + try: + for i in range(0, len(index)-1): + data = data[index[i]] + except (IndexError, TypeError): + try: + self.data[index] = value + except TypeError: + if index in ((), None): + self.data = value + else: + raise IndexError(f'{index}') + else: + data[index[-1]] = value + + def __bool__(self): + if isinstance(self.data, list): + def recurse(data): + if not isinstance(data, list): + return True + elif len(data) == 0: + return False + elif len(data) > 1: + return True + else: + return recurse(data[0]) + return recurse(self.data) + else: + return bool(self.data) + + def insert(self, index, value): + data = self.data + try: + for i in range(0, len(index)-1): + data = data[index[i]] + data.insert(index[-1], value) + except (IndexError, TypeError, AttributeError): + try: + data.insert(index, value) + except (IndexError, TypeError): + if index[i] == len(data): + data.append([]) + data = data[index[i]] + data.insert(index[-1], value) + else: + raise IndexError(f'{index}') + except AttributeError: + if index in ((), None): + self.data = value + else: + raise IndexError(f'{index}') + +class SingletonDict: # TODO: UserDict? + """A dict which returns the same value, no matter the key. + + This is a helper class to optimize storage of key counts in leaf nodes + where the counts remain the same for every replication. By using this class + instead of the build-in dict, we save space without having to special-case + access to the leaf nodes' counts in the rest of the code. + """ + def __init__(self): + self._has_value = False + + def __getitem__(self, key): + if self._has_value: + return self._value + else: + raise KeyError(key) + + def __setitem__(self, key, value): + # TODO: allow to set/update value only once + self._value = value + self._has_value = True + +def get_datetime(view: Union['View', abc.Mapping], + rank: Optional[Union[int, slice]] = None, prefix: str = '', + year: Optional[int] = None, month: Optional[int] = None) -> NDArray: + """ + Returns an array of type `datetime64` derived from datetime-related keys/values. + """ + date = get_date(view, rank, prefix, year, month) + time = get_time(view, rank, prefix) + if date is np.ma.masked or time is np.ma.masked: + datetime = np.ma.masked + else: + datetime = date + time + return datetime + +def get_date(view: Union['View', abc.Mapping], + rank: Optional[Union[int, slice]] = None, prefix: str = '', + year: Optional[int] = None, month: Optional[int] = None) -> NDArray: + """ + Returns a `datetime64` array derived from date-related keys/values. + """ + names = ('year', 'month', 'day') + values = (year, month, None) + dtypes = ('M8[Y]', 'm8[M]', 'm8[D]') + offsets = (1970, 1, 1) + parts = [] + for name, value, dtype, offset in zip(names, values, dtypes, offsets): + if prefix: + name = name.capitalize() + key = Key(prefix + name, rank if isinstance(rank, int) else None) + value = view[key.string] if value is None else value + part = ensure_masked_value(value, dtype) + parts.append(part - offset) + for i, part in enumerate(parts): + if part is np.ma.masked: + date = np.ma.masked + break + if isinstance(rank, slice): + slice_ = decrement(rank) + parts[i] = part[slice_] + else: + date = sum(parts) + return date + +def get_time(view: Union['View', abc.Mapping], + rank: Optional[Union[int, slice]] = None, prefix: str = '') -> NDArray: + """ + Returns a `timedelta64` array derived from time-related keys/values. + """ + names = ('hour', 'minute', 'second') + dtypes = ('m8[h]', 'm8[m]', 'm8[s]') + has_seconds = True + parts = [] + for name, dtype in zip(names, dtypes): + if prefix: + name = name.capitalize() + key = Key(prefix + name, rank if isinstance(rank, int) else None) + try: + value = view[key.string] + except (NotFoundError, KeyError) as error: + if name in ('second', 'Second'): + has_seconds = False + break + else: + raise error + if name == 'second': + if value is np.ma.masked: + part = value + else: + array = ensure_masked_array(value) + if array.dtype == np.dtype('f8'): + dtype = 'm8[ms]' + array.fill_value = missing_of(int) + array.data[array.mask] = array.fill_value + array = (array * 1000).astype(dtype) + array.fill_value = np.array('NaT', dtype) + elif array.dtype == np.dtype('i8'): + array = array.view(dtype) + else: + array = cast(MaskedArray, array.astype(dtype)) + if array.dtype == np.dtype('m8[s]'): + max_value = np.array(60 - 1, array.dtype) + elif array.dtype == np.dtype('m8[ms]'): + max_value = np.array(60 * 1000 - 1, array.dtype) + else: + assert False + array[:] = np.ma.where(array > max_value, max_value, array) + if isinstance(value, abc.Iterable): + part = array + else: + part = array[0] + else: + part = ensure_masked_value(value, dtype) + parts.append(part) + if not prefix: + key = Key('secondsWithinAMinuteMicrosecond', rank if isinstance(rank, int) else None) + try: + value = view[key.string] + except (NotFoundError, KeyError): + pass + else: + array = ensure_masked_array(value) + useconds = np.ma.empty(array.shape, dtype='m8[us]') + useconds.fill_value = np.array('NaT', dtype='m8[us]') + useconds[:] = (array * 1000000) + max_useconds = np.array(60 * 1000000 - 1, dtype='m8[us]') # [1] + useconds[:] = np.ma.where(useconds > max_useconds, max_useconds, useconds) + if isinstance(value, abc.Iterable): + part = useconds + else: + part = useconds[0] + if has_seconds: + parts.pop() # [2] + parts.append(part) + for i, part in enumerate(parts): + if part is np.ma.masked: + time = np.ma.masked + break + if isinstance(rank, slice): + slice_ = decrement(rank) + parts[i] = part[slice_] + else: + time = sum(parts) + return time + + # [1] Note that 'seconds...Microsecond' is a floating-point number where the + # whole part is seconds and the decimal part is microseconds. + # + # [2] Because of [1], if the message contains both keys, the 'second' and the + # 'seconds...Microsecond', use the latter. (Yes, such messages do exist!) + +def set_datetime(view: Union['View', abc.MutableMapping], value: Union[DateLike, np.ndarray], + rank: Optional[int] = None, prefix: str = '') -> None: + set_date(view, value, rank, prefix) + set_time(view, value, rank, prefix) + +def set_date(view: Union['View', abc.MutableMapping], value: Union[DateLike, np.ndarray], + rank: Optional[int] = None, prefix: str = '') -> None: + names = ['year', 'month', 'day'] + keys = [] + for i, name in enumerate(names): + if prefix: + name = prefix + name.capitalize() + keys.append(Key(name, rank).string) + year, month, day = keys + if isinstance(value, np.ndarray): + view[year] = value.astype('M8[Y]').astype(int) + 1970 + view[month] = value.astype('M8[M]').astype(int) % 12 + 1 + view[day] = (value.astype('M8[D]') - value.astype('M8[M]')).astype(int) + 1 + else: + date = ensure_date(value) + view[year] = date.year + view[month] = date.month + view[day] = date.day + +def set_time(view: Union['View', abc.MutableMapping], value: Union[TimeLike, np.ndarray], + rank: Optional[int] = None, prefix: str = '') -> None: + keys = ['hour', 'minute', 'second'] + for i, name in enumerate(keys): + if prefix: + name = prefix + name.capitalize() + keys[i] = Key(name, rank).string + hour, minute, second = keys + if isinstance(value, np.ndarray): + delta = (value - value.astype('M8[D]')).astype('timedelta64[s]').view(int) + view[hour] = delta // 3600 + view[minute] = (delta % 3600) // 60 + try: + view[second] = delta % 60 + except (NotFoundError, KeyError): + pass + else: + time = ensure_time(value) + view[hour] = time.hour + view[minute] = time.minute + try: + view[second] = time.second + except (NotFoundError, KeyError): + pass + +def ensure_date(value: DateLike) -> dt.date: + """ Takes a date-like value and converts it to `dt.date`. + """ + date: dt.date + if isinstance(value, dt.date): + date = value + elif isinstance(value, dt.datetime): + date = value.date() + elif isinstance(value, np.datetime64): + date = value.astype('M8[D]').item() + elif isinstance(value, str): + try: + date = dt.datetime.fromisoformat(value).date() + except ValueError: + try: + date = dt.datetime.strptime(value, '%Y%m%d').date() + except ValueError: + raise ValueError(f"Cannot convert string '{value}' to `dt.date`") + else: + raise TypeError('Cannot convert value of type `%s` to `dt.time`' % type(value)) + return date + +def ensure_time(value: TimeLike) -> dt.time: + """ Takes a time-like value and converts it to `dt.time`. + """ + if isinstance(value, dt.time): + time = value + elif isinstance(value, dt.datetime): + time = value.time() + elif isinstance(value, dt.timedelta): + time = (dt.datetime.min + value).time() + elif isinstance(value, np.datetime64): + time = value.astype('M8[s]').item().time() + elif isinstance(value, np.timedelta64): + total_seconds = value.astype('m8[s]').astype(int) + hours = total_seconds // 3600 + minutes = (total_seconds % 3600) // 60 + seconds = total_seconds % 60 + time = dt.time(hours, minutes, seconds) + elif isinstance(value, str): + for format in ['%H:%M:%S', '%H:%M', '%H%M%S', '%H%M']: + try: + time = dt.datetime.strptime(value, format).time() + except ValueError: + continue + else: + break + else: + raise ValueError(f"Cannot convert string '{value}' to `dt.time`") + else: + raise TypeError('Cannot convert value of type `%s` to `dt.time`' % type(value)) + return time + + +def ensure_array(value: Any, dtype: Optional[DTypeLike] = None) -> Union[NDArray, MaskedArray]: + """ Takes a value and converts it to `np.ndarray`. + """ + if isinstance(value, np.ndarray): + array = value + if dtype: + dtype = np.dtype(dtype) + if dtype.type in (np.datetime64, np.timedelta64): + if array.dtype.type == np.int64: + array = array.view(dtype) + else: + array = array.astype(dtype) + else: + array = array.astype(dtype, copy=False) + elif isinstance(value, abc.Iterable): + if isinstance(value, str): + array = np.array([value], dtype=dtype) + else: + array = np.array(value, dtype=dtype) + else: + array = np.array([value], dtype=dtype) + return array + +def ensure_masked_value(value: Any, dtype: Optional[DTypeLike]) -> MaskedArray: + if value is np.ma.masked: + return value + else: + array = ensure_masked_array(value, dtype) + if isinstance(value, abc.Iterable): + return array + else: + assert array.size == 1 + return array[0] + +def ensure_masked_array(value: Any, dtype: Optional[DTypeLike] = None) -> MaskedArray: + """ Takes a value and converts it to `np.ma.MaskedArray`. + """ + array = ensure_array(value, dtype) + if isinstance(value, np.ma.core.MaskedConstant): + masked_array = cast(np.ma.MaskedArray, array.ravel()) # [1] + elif isinstance(array, np.ma.MaskedArray): + masked_array = array + else: + try: + missing = missing_of(array.dtype) + except ValueError: + masked_array = np.ma.array(array, mask=False, copy=False) # [2] + else: + masked_array = np.ma.masked_equal(array, missing, copy=False) + if dtype and np.dtype(dtype).type in (np.datetime64, np.timedelta64): + masked_array.fill_value = np.array('NaT', dtype) + return masked_array + + # [1] We are converting MaskedConstant (i.e., np.ma.masked) into 1d array + # so that we can do a slice assignment. This reduces number of code paths + # later on. + # + # [2] Assume no masked values for non-native types which cannot accomodate + # missing values, such as int16, float32, etc.. + +def decrement(value: Union[int, range, slice]) -> Union[int, range, slice]: + """ Decrements a value by one. + """ + if isinstance(value, int): + value -= 1 + elif isinstance(value, range): + value = range(value.start - 1, value.stop - 1, value.step) + elif isinstance(value, slice): + start = None if value.start is None else value.start - 1 + stop = None if value.stop is None else value.stop - 1 + value = slice(start, stop, value.step) + else: + raise TypeError("Cannot decrement value of type `%s`" % type(value)) + return value + +def flatten(items): + """Flattens arbitrarily nested sequences. + Examples: + >>> list(flatten([1, (2, (3, 4), [[5]])])) + [1, 2, 3, 4, 5] + >>> list(flatten(1)) + [1] + """ + try: + for outer in items: + try: + for inner in flatten(outer): + yield inner + except TypeError: + yield outer + except TypeError: + yield items + +MISSING_OF = { + str: '', + int: CODES_MISSING_LONG, + float: CODES_MISSING_DOUBLE, + np.int32: CODES_MISSING_LONG, + np.int64: CODES_MISSING_LONG, + np.float64: CODES_MISSING_DOUBLE, + np.dtype('i4'): CODES_MISSING_LONG, + np.dtype('i8'): CODES_MISSING_LONG, + np.dtype('f8'): CODES_MISSING_DOUBLE, +} + +def missing_of(obj: Any) -> Union[int, float, str]: + """ Returns corresponding missing value for the given object or type. + """ + try: + missing = MISSING_OF[obj] + except (KeyError, TypeError): + if isinstance(obj, np.ndarray): + try: + missing = missing_of(obj.dtype) + except KeyError: + missing = None + elif isinstance(obj, np.dtype): + if obj.type == np.str_: + missing = '' + elif obj.type in (np.datetime64, np.timedelta64): + missing = np.array(CODES_MISSING_LONG, dtype=obj) + else: + missing = None + elif hasattr(obj, '__iter__') and len(obj) > 0: + missing = missing_of(type(obj[0])) + elif not isinstance(obj, type): + missing = missing_of(type(obj)) + else: + missing = None + if missing is None: + raise ValueError("Object %s has no corresponding missing value" % obj) + return missing + diff --git a/eccodes/highlevel/_bufr/message.py b/eccodes/highlevel/_bufr/message.py new file mode 100644 index 00000000..9cfbbff3 --- /dev/null +++ b/eccodes/highlevel/_bufr/message.py @@ -0,0 +1,409 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import datetime as dt + +from .coder import Coder +from .common import * +from .data import Data +from .header import Header +from .view import View + +class Message(View): + + def __init__(self, source) -> None: + if isinstance(source, Coder): + coder = source + else: + coder = Coder(source) + self.header = Header(coder) + self.data = Data(coder) + self._coder = coder + + def __contains__(self, key: str) -> bool: + """Return True if `key` is defined, otherwise return False. + """ + return (key in self.header) or (key in self.data) + + def __enter__(self): + return self + + def __exit__(self, *args): + self._coder.release() + + def __eq__(self, other: object) -> bool: + if isinstance(other, BUFRMessage): + eq = (self.header == other.header) and (self.data == other.data) + else: + eq = False + return eq + + def __getitem__(self, key: str) -> ValueLike: + if self._coder._unpacked: + try: + value = cast(ValueLike, self.data[key]) + except NotFoundError: + value = self.header[key] + else: + try: + value = self.header[key] + except NotFoundError: + value = cast(ValueLike, self.data[key]) + return value + + def __setitem__(self, key: str, value: ValueLike) -> None: + if self._coder._unpacked: + try: + self.data[key] = value + except NotFoundError: + self.header[key] = value + else: + try: + self.header[key] = value + except NotFoundError: + self.data[key] = value + + def __str__(self) -> str: + import pprint + d = self.as_dict() + return pprint.pformat(d, sort_dicts=False) + + @classmethod + def from_samples(cls, sample_name): + """Creates a new message from the sample. + """ + return cls(Coder(sample_name)) + + def copy(self, *, subsets: Optional[Union[NDArray, Sequence, slice]] = None) -> 'BUFRMessage': + """Returns a new copy of the message. + + If the optional argument `subsets` is specified, only the selected subsets + will be copied. `subsets` can be a mask, an array or a sequence of (0-based) + subset indices, or a slice. For conveniece, `subsets` can also be a slice + with numpy's `datetime64` objects, or with the built-in `datetime` objects. + For such slices the stop bounds are inclusive. + """ + self._commit() # [1] + if subsets is not None\ + and isinstance(subsets, slice) \ + and (isinstance(subsets.start, (np.datetime64, dt.datetime)) or \ + isinstance(subsets.stop, (np.datetime64, dt.datetime))): + datetime = self.data.get_datetime(rank=1) + start = dt.datetime.min if subsets.start is None else subsets.start + stop = dt.datetime.max if subsets.stop is None else subsets.stop + mask = np.logical_and(datetime >= start, datetime <= stop) + coder = self._coder.clone(mask) + else: + coder = self._coder.clone(subsets) + message = BUFRMessage(coder) + return message + + # [1] In theory we could avoid committing (and hence packing) if we + # copied the "original" data plus Data's cache and tree structure. TODO + + def copy_to(self, other: 'BUFRMessage', + header_only=False, data_only=False, + skip_template_keys=False) -> None: + """Copies common keys/values from this message to `other`. + """ + if header_only and data_only: + raise ValueError("`header_only` and `data_only` can't both be true") + if not data_only: + self.header.copy_to(other.header, skip_template_keys) + if not header_only: + self.data.copy_to(other.data) + + def get_count(self, key: str) -> int: + """Returns the number of elements designated by the given key. + """ + if self._coder._unpacked: + try: + count = self.data.get_count(key) + except NotFoundError: + count = self.header.get_count(key) + else: + try: + count = self.header.get_count(key) + except NotFoundError: + count = self.data.get_count(key) + return count + + def get_shape(self, key: str) -> Tuple[int, ...]: + """Returns shape of the given key. + """ + if self._coder._unpacked: + try: + shape = self.data.get_shape(key) + except NotFoundError: + shape = self.header.get_shape(key) + else: + try: + shape = self.header.get_shape(key) + except NotFoundError: + shape = self.data.get_shape(key) + return shape + + def get_size(self, key: str) -> int: + """Returns size of the given key. + """ + if self._coder._unpacked: + try: + size = self.data.get_size(key) + except NotFoundError: + size = self.header.get_size(key) + else: + try: + size = self.header.get_size(key) + except NotFoundError: + size = self.data.get_size(key) + return size + + def is_missing(self, key: str) -> bool: + """Checks the key is set to missing value. + + If the value is an array, returns true only if all elements in the array + are set to missing value. + """ + if self._coder._unpacked: + try: + is_missing = self.data.is_missing(key) + except NotFoundError: + is_missing = self.header.is_missing(key) + else: + try: + is_missing = self.header.is_missing(key) + except NotFoundError: + is_missing = self.data.is_missing(key) + return is_missing + + def set(self, key: str, value: ValueLike) -> None: + if self._coder._unpacked: + try: + self.data.set(key, value) + except NotFoundError: + self.header.set(key, value) + else: + try: + self.header.set(key, value) + except NotFoundError: + self.data.set(key, value) + + def set_missing(self, key: str) -> None: + """Sets the key to missing value. + + If the value is an array, sets all elements to missing value. + """ + if self._coder._unpacked: + try: + self.data.set_missing(key) + except NotFoundError: + self.header.set_missing(key) + else: + try: + self.header.set_missing(key) + except NotFoundError: + self.data.set_missing(key) + + def get_buffer(self) -> bytes: + """Returns a buffer containing the encoded message. + """ + self._commit() + return self._coder.get_buffer() + + def as_dict(self, ranked=False, depth=0, **kwds) -> Dict: + """Returns dict-like representation of the message items. + """ + header_only = kwds.pop('header_only', False) + data_only = kwds.pop('data_only', False) + if not data_only: + h = self.header.as_dict(ranked, depth-1, **kwds) + if not header_only: + d = self.data.as_dict(ranked, depth-1, **kwds) + if header_only: + m = h + elif data_only: + m = d + else: + if depth > 0: + m = {'header': h, 'data': d} + else: + m = h | d + return m + + def items(self, ranked=False, **kwds) -> Iterator[Tuple[str, ValueLike]]: + yield from self.header.items(ranked, **kwds) + yield from self.data.items(ranked, **kwds) + + def keys(self, ranked=False, **kwds) -> Iterator[str]: + yield from self.header.keys(ranked, **kwds) + yield from self.data.keys(ranked, **kwds) + + def pack(self) -> None: + """Encodes the contents of the data section into an internal buffer. + + Note that this happens automatically whenever needed (before writing + to a file, before copying, etc.), so users don't need to call this method + explicitly. + """ + self._commit() + self._coder.pack() + + def unpack(self) -> None: + """Decodes the contents of the data section into an internal representation. + + Note that this happens automatically whenever needed (when accessing data + section keys for the first time, before copying, etc.), so users don't need + to call this method explicitly. + """ + self._coder.unpack() + + def write(self, file: BinaryIO) -> int: + import warnings + warnings.warn("Method write() is deprecated. Use method write_to() instead.", DeprecationWarning) + return self.write_to(file) + + def write_to(self, file: BinaryIO) -> int: + """ Encodes the message (if not already encoded) and writes it to a file. + + Returns the size of the encoded message in bytes. + + `file` must be a file-like object. + """ + self._commit() + size = self._coder.write(file) + return size + + def _commit(self) -> None: + if current_behaviour.update_header_from_data_before_packing: + self.update_header_from_data(skip_dirty=True) + self.header._commit() + self.data._commit() + + @property + def _handle(self) -> int: + return self._coder._handle + + def update_header_from_data(self, skip_dirty=False) -> None: + """Updates some of the header keys based on keys from the data section. + + This method sets header keys such as 'typicalYear', 'localMonth', + 'localLatitude', etc., based on keys from the data section: 'year', + 'month', 'latitude', etc. + + If there are no datetime-related keys in message's data section, or if + some of the keys that are needed to construct a complete datetime object + are missing, the header keys are not updated. + + In the case of multi-subset messages we use the min value across all subsets. + + Note that this method is called automatically before packing, so users typically + don't need to call this method explicitly. However, if this behaviour is not + desirable, it can be switched off by setting the `Behaviour` option + `update_header_from_data_before_packing` to `False`. + """ + datetime_counts = {} + for key in ('year', 'month', 'day', 'hour', 'minute'): + try: + entry = self.data._entries[key] + except KeyError: + has_datetime = False + break + if entry.array is None: + has_datetime = False + break + else: + datetime_counts[key] = self.data.get_count(key) + else: + if all(c == datetime_counts['year'] for c in datetime_counts.values()): + datetime_array = self.data.get_datetime() + else: + max_common_rank = min(datetime_counts.values()) + datetime_array = self.data.get_datetime(rank=slice(1, max_common_rank + 1)) + min_datetime = np.min(datetime_array) + if min_datetime is np.ma.masked: + has_datetime = False + else: + datetime = min_datetime.item() + has_datetime = True + + if has_datetime: + items = ['Year', 'YearOfCentury', 'Day', 'Hour', 'Minute', 'Second'] + if not (_any_dirty(self.header, 'typical', items) and skip_dirty): + if self.header['edition'] == 3: + self.header['typicalYearOfCentury'] = datetime.year % 100 + else: + self.header['typicalYear'] = datetime.year + self.header['typicalMonth'] = datetime.month + self.header['typicalDay'] = datetime.day + self.header['typicalHour'] = datetime.hour + self.header['typicalMinute'] = datetime.minute + self.header['typicalSecond'] = datetime.second + + if self.header['section2Present'] and self.header['bufrHeaderCentre'] == 98: + if has_datetime: + items = ['Year', 'Day', 'Hour', 'Minute', 'Second'] + if not (skip_dirty and _any_dirty(self.header, 'local', items)): + self.header['localYear'] = datetime.year + self.header['localMonth'] = datetime.month + self.header['localDay'] = datetime.day + self.header['localHour'] = datetime.hour + self.header['localMinute'] = datetime.minute + self.header['localSecond'] = datetime.second + now = dt.datetime.now(dt.UTC) + for prefix in ('rdbtime', 'rectime'): + items = ['Day', 'Hour', 'Minute', 'Second'] + if not (skip_dirty and _any_dirty(self.header, prefix, items)): + self.header[f'{prefix}Day'] = now.day + self.header[f'{prefix}Hour'] = now.hour + self.header[f'{prefix}Minute'] = now.minute + self.header[f'{prefix}Second'] = now.second + try: + lat_entry = self.data._entries['latitude'] + lon_entry = self.data._entries['longitude'] + except KeyError: + has_latlon = False + else: + if has_latlon := (lat_entry.array is not None) and (lon_entry.array is not None): + lat = lat_entry.array.ravel() + lon = lon_entry.array.ravel() + if self.header['compressedData']: + if cast(int, self.header['numberOfSubsets']) > 1: + if has_latlon: + items = ['Latitude1', 'Latitude2', 'Longitude1', 'Longitude2'] + if not (skip_dirty and _any_dirty(self.header, 'local', items)): + self.header['localLatitude1'] = numpy.min(lat) + self.header['localLatitude2'] = numpy.max(lat) + self.header['localLongitude1'] = numpy.min(lon) + self.header['localLongitude2'] = numpy.max(lon) + self.header['localNumberOfObservations'] = self.header['numberOfSubsets'] + else: + if has_latlon: + items = ['Latitude1', 'Longitude1'] + if not (skip_dirty and _any_dirty(self.header, 'local', items)): + self.header['localLatitude1'] = lat[0] + self.header['localLongitude1'] = lon[0] + else: + if has_latlon: + items = ['Latitude1', 'Longitude1'] + if not (skip_dirty and _any_dirty(self.header, 'local', items)): + self.header['localLatitude'] = lat[0] + self.header['localLongitude'] = lon[0] + +def _any_dirty(header: Header, prefix: str, keys: Sequence[str]) -> bool: + for key in keys: + try: + entry = header._cache[f'{prefix}{key}'] + except KeyError: + continue + else: + if entry.dirty: + return True + else: + return False + +BUFRMessage = Message diff --git a/eccodes/highlevel/_bufr/tables.py b/eccodes/highlevel/_bufr/tables.py new file mode 100644 index 00000000..9f16ae8f --- /dev/null +++ b/eccodes/highlevel/_bufr/tables.py @@ -0,0 +1,243 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import csv +import re + +from collections import ChainMap, UserDict +from dataclasses import dataclass, field +from pathlib import Path +from typing import Iterator, List, Optional, Tuple, Union + +import eccodes + + +class Code(int): + + def __new__(cls, code: int): + return int.__new__(cls, code) + + def __repr__(self) -> str: + return "'%s'" % str(int(self)).zfill(6) + + @property + def F(self) -> int: + return int(self) // 100000 + + @property + def X(self) -> int: + return int(self) // 1000 % 100 + + @property + def Y(self) -> int: + return int(self) % 1000 + + @property + def FX(self) -> Tuple[int, int]: + return self.F, self.X + +CodeLike = Union[Code, int] + +@dataclass +class Descriptor: + code: Code = 0 + name: str = '' + +@dataclass +class Element(Descriptor): + units: str = '' + scale: int = 0 + reference: int = 0 + width: int = 0 + +@dataclass(unsafe_hash=True) +class Version: + master: int = 0 + local: int = 0 + centre: int = 0 + subcentre: int = 0 + +class _Singleton(type(UserDict)): + + cache = {} + + def __call__(cls, *args): + try: + obj = cls.cache[cls, args] + except KeyError: + obj = super().__call__(*args) + cls.cache[cls, args] = obj + return obj + +class Table(UserDict, metaclass=_Singleton): + + def __init__(self, version: Version, local: bool) -> None: + base_path = Path(eccodes.codes_definition_path(), 'bufr', 'tables', '0') + if local: + dashed_version_number = '%d-%d' % (version.master, version.local) + path = base_path.joinpath('local', dashed_version_number, str(version.centre), str(version.subcentre)) + if not codes_has_file(path / 'element.table'): + path = base_path.joinpath('local', str(version.local), str(version.centre), str(version.subcentre)) + else: + path = base_path.joinpath('wmo', str(version.master)) + self.version = version + self.path = path + self.data = {} + +class ElementTable(Table): + + def __init__(self, version: Version, local: bool) -> None: + super().__init__(version, local) + self.path /= 'element.table' + try: + text = codes_read_file(self.path) + except RuntimeError as e: + if local: + return # ignore non-existing local tables + else: + raise e + reader = csv.reader(text.splitlines(), delimiter='|') + next(reader) # skip header row + for r in reader: + c = Code(int(r[0])) + e = Element(c, r[1], r[4], int(r[5]), int(r[6]), int(r[7])) + self.data[c] = e + + def __getitem__(self, code: CodeLike) -> Element: + try: + return self.data[code] + except KeyError: + message = "No such element in tables version %s (%s): %s" + raise KeyError(message % (self.version, self.path, code)) + +class SequenceTable(Table): + + def __init__(self, version: Version, local: bool) -> None: + super().__init__(version, local) + self.path /= 'sequence.def' + try: + text = codes_read_file(self.path) + except RuntimeError as e: + if local: + return # ignore non-existing local tables + else: + raise e + tokens = re.split(']\n?', text) + tokens = tokens[:-1] # strip the last, empty token + for token in tokens: + pair = token.split('= [') + code = int(pair[0].strip().strip('"')) + sequence = [Code(c) for c in pair[1].split(',')] + self.data[code] = sequence + + def __getitem__(self, code: CodeLike) -> List[Code]: + try: + return self.data[code] + except KeyError: + message = "No such element in tables version %s (%s): %s" + raise KeyError(message % (self.version, self.path, code)) + +class CombinedTable(Table): + + def __init__(self, table_class, version): + self.master = table_class(version, False) + self.local = table_class(version, True) + self.version = version + self.data = ChainMap(self.local.data, self.master.data) # [1] + + # [1] Note that the individual mappings in the ChainMap are searched from first to last. + +class Tables: + + def __init__(self, version): + self.sequences = CombinedTable(SequenceTable, version) + self.elements = CombinedTable(ElementTable, version) + self.version = version + + def expand_codes(self, code_s: Union[CodeLike, List[CodeLike]], recursive=True) -> Iterator[Code]: + if isinstance(code_s, int): + codes = [code_s] + else: + codes = code_s + for c in map(Code, codes): + if c.F == 3: + sequence_codes = self.sequences[c] + if recursive: + yield from self.expand_codes(sequence_codes) + else: + yield from sequence_codes + else: + yield c + + def expand_descriptors(self, codes_s: Union[CodeLike, List[CodeLike]], recursive=True) -> Iterator[Descriptor]: + previous_code = Code(0) + for code in self.expand_codes(codes_s, recursive): + name = None + if code.F == 0: + try: + name = self.elements[code].name + except KeyError as error: + if previous_code.FX == (2, 6): # Operator: Signify data width + # TODO: raise warning + name = '' + else: + raise error + previous_code = code + yield Descriptor(code, name) + +import ctypes +import os + +libc = ctypes.CDLL(None) # automatically finds and loads the C standard library + +fseek = libc.fseek +fseek.argtypes = [ctypes.c_void_p, ctypes.c_long, ctypes.c_int] +fseek.restype = ctypes.c_int +SEEK_SET, SEEK_END = 0, 2 + +ftell = libc.ftell +ftell.argtypes = [ctypes.c_void_p] +ftell.restype = ctypes.c_long + +fread = libc.fread +fread.argtypes = [ctypes.c_void_p, ctypes.c_size_t, ctypes.c_size_t, ctypes.c_void_p] +fread.restype = ctypes.c_size_t + +fclose = libc.fclose +fclose.argtypes = [ctypes.c_void_p] +fclose.restype = ctypes.c_int + +libeccodes = ctypes.CDLL(eccodes.codes_get_library_path()) + +codes_fopen = libeccodes.codes_fopen +codes_fopen.restype = ctypes.c_void_p + +def codes_has_file(path: Union[str, os.PathLike]) -> bool: + stream = libeccodes.codes_fopen(str(path).encode(), b'r') + if stream: + libc.fclose(stream) + has = True + else: + has = False + return has + +def codes_read_file(path: Union[str, os.PathLike]) -> str: + stream = libeccodes.codes_fopen(str(path).encode(), b'r') + if not stream: + raise RuntimeError(f'Tables path does not exist: {path}') + try: + fseek(stream, 0, SEEK_END) + buffer_size = ftell(stream) + buffer = ctypes.create_string_buffer(buffer_size) + fseek(stream, 0, SEEK_SET) + read_size = fread(buffer, ctypes.sizeof(ctypes.c_char), buffer_size, stream) + string = buffer.raw[:read_size].decode() + finally: + fclose(stream) + return string + diff --git a/eccodes/highlevel/_bufr/tree.py b/eccodes/highlevel/_bufr/tree.py new file mode 100644 index 00000000..98464c9d --- /dev/null +++ b/eccodes/highlevel/_bufr/tree.py @@ -0,0 +1,547 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from copy import copy +from itertools import repeat + +from .common import * +from .helpers import RaggedArray, SingletonDict +from .tables import Code, Element + +INT_UNITS = re.compile(r'%|.*CODE TABLE.*|.*FLAG TABLE.*|Numeric|a|d|h|min|mon|s') + +@dataclass +class Node: + parent: Any = field(repr=False) + ordinal: int = 0 # [1] + level: int = 0 # [2] + depth: int = 0 # [3] + children: List = field(default_factory=list) + starts: Dict[MultiIndex, Counter] = field(default_factory=dict) + slices: Dict[MultiIndex, slice] = field(default_factory=dict) + max_levels: Dict[str, int] = field(default_factory=dict) # [4] + + def __post_init__(self): + if self.parent: + self.depth = self.parent.depth + 1 + + # [1] Node's (0-based) ordinal number in its parent's list of children. + # + # [2] Replication level: leaf node(s) of the outer-most replication have + # level=0, in the next inner replication level=1, etc. This level + # also corresponds to the `ndim` of the RaggedArray of replication + # factors. + # + # [3] Distance from the root node. Note that this is not the same as the + # (replication) level! + # + # [4] A dictionary of the max. (replication) level of each key accessible + # from this node. For WrapperNodes this includes keys from all children + # subnodes, and their subnotes, transitively. This is used in DataView + # objects to infer shapes of the respective array views. + +@dataclass +class WrapperNode(Node): + counts: Dict[MultiIndex, Counter] = field(default_factory=dict) + +@dataclass +class ReplicationNode(Node): + counts: Dict[MultiIndex, Counter] = field(default_factory=dict) + element: Element = field(default_factory=Element) + factors: RaggedArray = field(default_factory=RaggedArray.empty) + reset: bool = True + + def __post_init__(self): + super().__post_init__(); + self.factors = RaggedArray.empty(self.level) + +@dataclass +class LeafNode(Node): + keys: List[Key] = field(default_factory=list) + counts: SingletonDict = field(default_factory=SingletonDict) + +@dataclass +class AssociationNode(Node): + operator: int = 0 + reuse_bitmap: bool = False + for_reuse: bool = False + bitmap_size: Optional[int] = None + center: Element = field(default_factory=Element) + generating_application: Element = field(default_factory=Element) + code_table: int = 0 + value_factor: Optional[Code] = None + value_size: Optional[int] = None + element: Element = field(default_factory=Element) + bitmap: Optional[NDArray] = None + bitmap_end: int = 0 + keys: List[Key] = field(default_factory=list) + counts: Dict[MultiIndex, Counter] = field(default_factory=dict) + +def build_tree(coder): + tables = coder.get_tables() + operators = {4: []} # key: Code.X, value: a stack of Code.Y values (aka operands) + + def parse(parent, codes, level=0): + keys = [] + children = [] + change_scale = None + change_width = None + while True: + if not codes: + if keys: + leaf = LeafNode(parent, len(children), level, keys=keys) + children.append(leaf) + break + next = codes.pop(0) + # Sequence + if next.F == 3: + sequence_codes = list(tables.expand_codes(next, recursive=False)) + codes = sequence_codes + codes + # Operator: Cancel reuse of bitmap + elif next == 223255: + next = codes.pop(0) + # Operator: Quality information follows + elif next in (222000, 223000, 224000, 225000): + if keys: + leaf = LeafNode(parent, len(children), level, keys=keys) + children.append(leaf) + keys = [] + node = AssociationNode(parent, len(children), level, operator=next) + next = codes.pop(0) + assert next in [236000, 237000] or next.F == 1 + # Operator: Define bitmap for possible reuse + if next == 236000: + node.for_reuse = True + next = codes.pop(0) + # Process bitmap + if next != 237000: + if next.F == 1: # replication + assert next.X == 1 # replicate only one element + if next.Y == 0: # delayed replication + next = codes.pop(0) + assert next.FX == (0, 31) # delayed replication factor + element = tables.elements[next] + node.keys.append(Key(element.name, element=element, flags=CODED|SCALAR|FACTOR|READ_ONLY)) + else: # fixed replication + node.bitmap_size = next.Y + next = codes.pop(0) + else: # no replication + node.bitmap_size = 1 + assert next == 31031 # dataPresentIndicator + element = tables.elements[next] + # TODO node.keys.append(Key(element.name, element=element, flags=CODED|BITMAP|READ_ONLY)) + # Operator: Reuse bitmap + else: + node.reuse_bitmap = True + # The next element is expected to be 'centre' + next = codes.pop(0) + element = tables.elements[next] + assert element.name == 'centre' + node.center = element + node.keys.append(Key(element.name, element=element, flags=CODED)) + # The next elements are expected to be 'generatingApplication' + # Note that the generalApplication element can show up in + # the local table too (e.g. 001201 from local/1/98/0). + next = codes.pop(0) + element = tables.elements[next] + assert element.name == 'generatingApplication' + node.generating_application = element + node.keys.append(Key(element.name, element=element, flags=CODED)) + next = codes.pop(0) + # Class 8 element (optional) + if next.X == 8: + node.code_table = next + element = tables.elements[next] + node.keys.append(Key(element.name, element=element, flags=CODED)) + next = codes.pop(0) + # Process the actual quality element (e.g. percentConfidence) + if next.F == 1: # replication + assert next.X == 1 # replicate only one element + if next.Y == 0: # delayed replication + next = codes.pop(0) + node.value_factor = next + assert next.FX == (0, 31) # delayed replication factor + element = tables.elements[next] + node.keys.append(Key(element.name, element=element, flags=CODED|SCALAR|FACTOR|READ_ONLY)) + else: # fixed replication + node.value_size = next.Y + next = codes.pop(0) + else: # no replication + pass + if node.operator == 222000: + assert next.FX == (0, 33) # expecting Class 33 element + node.element = tables.elements[next] + else: + if node.operator == 223000: + assert next == 223255 + name = 'substitutedValue' + elif node.operator == 224000: + assert next == 224255 + name = 'firstOrderStatisticalValue' + elif node.operator == 225000: + assert next == 225255 + name = 'differenceStatisticalValue' + node.element = Element(next, name, '', 0, 0, 0) + # When there is no prior replication, the associated element can + # appear two or more times (aka "inlined" replication). + if not node.value_factor and node.value_size is None: + node.value_size = 1 + while codes and codes[0] == node.element.code: + next = codes.pop(0) + node.value_size += 1 + children.append(node) + # Operator + elif next.F == 2: + # Operator: Change width + if next.X == 1: + if next.Y > 0: + change_width = next.Y - 128 + else: + change_width = None + # Operator: Change scale + if next.X == 2: + if next.Y > 0: + change_scale = next.Y - 128 + else: + change_scale = None + # Operator: Add associated field + elif next.X == 4: + if next.Y > 0: + if codes[0] != 31021: # Associated field significance + # TODO: malformed message: raise warning + operators[4].append(8) + else: + next = codes.pop(0) + operators[4].append(next.Y) + else: + operators[4].pop() + # Operator: Signify data width for the following local descriptor + elif next.X == 6: + if codes[0] not in tables.elements: + codes.pop(0) + # Replication + elif next.F == 1: + span = next.X + # Delayed replication + if next.Y == 0: + next = codes.pop(0) + assert next.FX == (0, 31) and next.Y in (0, 1, 2, 11, 12) # delayed repl. factor + element = tables.elements[next] + key = Key(element.name, element=element, flags=CODED|SCALAR|FACTOR|READ_ONLY) + keys.append(key) + leaf = LeafNode(parent, len(children), level, keys=keys) + children.append(leaf) + wrapper = WrapperNode(parent, len(children), level) + replication = ReplicationNode(wrapper, 0, level, element=element) + wrapper.children.append(replication) + parse(replication, codes[:span], level + 1) + children.append(wrapper) + codes = codes[span:] + keys = [] + # Fixed replication + else: + assert next.X <= len(codes) + codes = codes[:next.X] * next.Y + codes[next.X:] + # Element + elif next.F == 0: + element = tables.elements[next] + if change_width or change_scale: + element = copy(element) + if change_width: + element.width += change_width + if change_scale: + element.scale += change_scale + key = Key(element.name, element=element) + keys.append(key) + # Append associated field keys + for Y in operators[4]: + name = f'{element.name}->associatedField' + key = Key(name, element=Element(0, name, 'associated units', 0, 0, 2)) + keys.append(key) + name = f'{name}->associatedFieldSignificance' + key = Key(name, element=tables.elements[31021]) + keys.append(key) + else: + assert False + parent.children = children + + # Parse (unexpanded) descriptors + + codes = coder.get('unexpandedDescriptors') + codes = [Code(c) for c in codes.tolist()] + subset_count = coder.get('numberOfSubsets') + compressed = coder.get('compressedData') + root = WrapperNode(parent=None) + + if compressed or subset_count == 1: + parse(root, codes) + else: + for ordinal in range(subset_count): + node = WrapperNode(root, ordinal) + parse(node, codes.copy()) + root.children.append(node) + + # Assign (delayed replication) factors + + global_factors = coder.get_delayed_replication_factors() + + def assign_factors(root: Node, global_factors: Dict[int, NDArray]) -> None: + counter = Counter() + def recurse(node, index): + if isinstance(node, WrapperNode): + for child in node.children: + recurse(child, index) + elif isinstance(node, ReplicationNode): + assert len(index) == node.level + code = node.element.code + at = counter[code] + counter[code] += 1 + factor = global_factors[code][at] + node.factors.insert(index, factor) + for i in range(factor): + for child in node.children: + recurse(child, index + (i,)) + elif isinstance(node, LeafNode): + pass + elif isinstance(node, AssociationNode): + assert node.level == 0 + if node.reuse_bitmap: + pass + else: + if node.bitmap_size is None: + code = node.keys[0].element.code + assert code.FX == (0, 31) + at = counter[code] + counter[code] += 1 + node.bitmap_size = global_factors[code][at] + if node.value_size is None: + code = node.value_factor + assert code.FX == (0, 31) + at = counter[code] + counter[code] += 1 + node.value_size = global_factors[code][at] + else: + assert False + recurse(root, ()) + for code, count in counter.items(): + if (remaining := len(global_factors[code]) - count): + raise RuntimeError(f'There are {remaining} unprocessed replication factors') + + assign_factors(root, global_factors) + + # Make entries + + def make_entries(root: Node) -> Dict[str, DataEntry]: + entries: Dict[str, DataEntry] = {} + def recurse(node): + if isinstance(node, (WrapperNode, ReplicationNode)): + for child in node.children: + recurse(child) + elif isinstance(node, (LeafNode, AssociationNode)): + for key in node.keys: + try: + entry = entries[key.name] + except: + entry = DataEntry(key.name, flags=key.flags) + if entry.name in current_behaviour.assumed_scalar_elements: + entry.flags |= SCALAR + entry.uniform_element = key.element + entries[entry.name] = entry + else: + if entry.uniform_element: + if entry.uniform_element != key.element: + entry.uniform_element = None + else: + assert False + recurse(root) + return entries + + entries = make_entries(root) + + for code, array in global_factors.items(): + element = tables.elements[code] + entry = entries[element.name] + entry.shape = (array.size, 1) + entry.array = np.reshape(array, entry.shape) + + # Assign bitmaps + + global_bitmap = coder.get_bitmap() + + def assign_bitmaps(root: Node, global_bitmap: NDArray) -> None: + bitmap_for_reuse = None + global_bitmap = copy(global_bitmap) # parameter must be copied to be used as nonlocal + for node in root.children: + if not isinstance(node, AssociationNode): + continue + if node.reuse_bitmap: + assert bitmap_for_reuse is not None + node.bitmap = bitmap_for_reuse + else: + node.bitmap = global_bitmap[:node.bitmap_size] + global_bitmap = global_bitmap[node.bitmap_size:] + if node.for_reuse: + bitmap_for_reuse = node.bitmap + assert node.bitmap is not None + bitmap_count = numpy.count_nonzero(node.bitmap) + assert node.value_size is not None + if node.value_size > bitmap_count: + # Although incorrect, assuming we can access bitmap_count + # associated keys this shouldn't be a problem. + pass + # TODO: Issue a warning? + elif node.value_size < bitmap_count: + indices = numpy.arange(node.bitmap.size) + cutoff = indices[node.bitmap][node.value_size] + node.bitmap[cutoff:] = False + # TODO: Maybe print a warning? + + assign_bitmaps(root, global_bitmap) + + # Resovle elements' (0-based) indices + + def resolve_indices(root: Node) -> Tuple[Dict[str, NDArray], int]: + def extend(this, other): + for k, v in other.items(): + this[k].extend(v) + return this + def recurse(node, counter, index): + indices = defaultdict(list) + if isinstance(node, WrapperNode): + for child in node.children: + child_indices, counter = recurse(child, counter, index) + indices = extend(indices, child_indices) + elif isinstance(node, ReplicationNode): + assert node.level == len(index) + for i in range(node.factors[index]): + for child in node.children: + child_indices, counter = recurse(child, counter, index + (i,)) + indices = extend(indices, child_indices) + elif isinstance(node, LeafNode): + for k in node.keys: + indices[k.name].append(counter) + counter += 1 + elif isinstance(node, AssociationNode): + node.bitmap_end = counter + else: + assert False + return indices, counter + indices, counter = recurse(root, 0, ()) + indices = {k: numpy.array(v) for k, v in indices.items()} + return indices, counter + + if len(global_bitmap) > 0: + indices, next_index = resolve_indices(root) + + # Make associations + + def make_associations(root: Node) -> Dict[Tuple[str, int], Association]: + ranks = Counter() + associations = {} + for node in root.children: + if not isinstance(node, AssociationNode): + continue + dtype: DTypeLike = numpy.dtype(float) + if node.operator == 222000: + e = node.element + if e.scale == 0 and INT_UNITS.match(e.units): + dtype = numpy.dtype(int) + ranks[node.element.name] += 1 + rank = ranks[node.element.name] + assert node.bitmap is not None + bitmap_offset = node.bitmap_end - len(node.bitmap) + a = Association(node.element, rank, dtype, node.bitmap, bitmap_offset, indices) + associations[node.element.name, rank] = a + return associations + + associations = make_associations(root) + + # Do we still need this? TODO + bitmap_nodes = [(i, c) for i, c in enumerate(root.children) if isinstance(c, AssociationNode)] + if bitmap_nodes: + for i, node in reversed(bitmap_nodes): + for element in (node.center, node.generating_application): + if element.name not in indices: + indices[element.name] = numpy.array([next_index]) + else: + indices[element.name] = numpy.append(indices[element.name], next_index) + next_index += 1 + + # Append associated entries + + for a in associations.values(): + for pg in list(entries.values()): + a_name = '->'.join(repeat(a.element.name, a.element_rank)) + # if pg.flags & SCALAR: + # continue # TODO: are there cases where 'center' and 'originatingApplication' appear outside of bitmap sequence? + if a.any_rank_set(pg.name): + name = f'{pg.name}->{a_name}' + ag = DataEntry(name, association=a, primary=pg) + ag.flags = pg.flags + if pg.uniform_element: + if a.element.code.FX != (0, 33): + ag.uniform_element = copy(a.element) + ag.uniform_element.units = pg.uniform_element.units + else: + ag.uniform_element = a.element + entries[name] = ag + a.entries[pg.name] = ag + + # Insert associated keys + + def insert_associated_keys(root: Node, associations) -> None: + def recurse(node, associated): + if isinstance(node, (WrapperNode, ReplicationNode)): + for child in node.children: + recurse(child, associated) + elif isinstance(node, LeafNode): + name_suffix = '->'.join(repeat(associated.element.name, associated.element_rank)) + copy_units = associated.element.code.FX != (0, 33) + keys = [] + for key in node.keys: + keys.append(key) + if key.name in associated.entries: + if copy_units: + element = copy(associated.element) + assert key.element + element.units = key.element.units + else: + element = associated.element + key = Key(f'{key.name}->{name_suffix}', secondary=name_suffix, element=element) + keys.append(key) + node.keys = keys + elif isinstance(node, AssociationNode): + pass + else: + assert False + for each in associations: + recurse(root, each) + + insert_associated_keys(root, associations.values()) + + # Resolve max. replication levels + + def resolve_max_levels(node: Node) -> None: + if isinstance(node, (WrapperNode, ReplicationNode)): + for child in node.children: + resolve_max_levels(child) + for name, child_max_level in child.max_levels.items(): + max_level = node.max_levels.get(name, 0) + node.max_levels[name] = max(max_level, child_max_level) + elif isinstance(node, (LeafNode, AssociationNode)): + for key in node.keys: + node.max_levels[key.name] = node.level + else: + assert False + + resolve_max_levels(root) + + # Return + + return root, entries, associations + diff --git a/eccodes/highlevel/_bufr/view.py b/eccodes/highlevel/_bufr/view.py new file mode 100644 index 00000000..74f47a64 --- /dev/null +++ b/eccodes/highlevel/_bufr/view.py @@ -0,0 +1,104 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import datetime as dt + +from .common import * +from .helpers import get_datetime, set_datetime + +class View: + """A base class with some common methods: getters, setters, etc. + """ + def __contains__(self, key: str) -> bool: + raise NotImplementedError + + def __eq__(self, other: object) -> bool: + raise NotImplementedError + + def __getitem__(self, subscript): + raise NotImplementedError + + def __ne__(self, other: object) -> bool: + return not self.__eq__(other) + + def __setitem__(self, key: str, value) -> None: + raise NotImplementedError + + def get_count(self, key: str) -> int: + raise NotImplementedError + + def as_dict(self, ranked=False, depth=0, **kwds) -> Dict: + raise NotImplementedError + + def get(self, key: str, default: Optional[ValueLike] = None) -> Optional[ValueLike]: + """Returns value of `key`. If `key` is not defined, returns `default`. + + Note this method doesn't raise exception. + """ + try: + value = self[key] + except NotFoundError: + value = default + return value + + def get_datetime(self, rank: Optional[Union[int, slice]] = None, prefix: str = '', + year: Optional[int] = None, month: Optional[int] = None) -> NDArray: + """ + Returns an array of type `datetime64` derived from datetime-related keys/values. + + The keys used are: 'year', 'month', 'day', 'hour', 'minute' and 'second'. If + 'second' is not present then the key 'secondsWithinAMinuteMicrosecond' is + tried instead. The presence of keys 'second' and 'seconds...Microsecond' is + optional. + + If `prefix` is specified, the datetime is derived from keys '{prefix}Year', + '{prefix}Month', etc. + + Optionally, the year and the month can be overwritten/forced to a specific value. + This can be useful, for instance, if there is no dedicated year or month key. + For example, ECMWF's section 2 defines 'rdbtimeDay', 'rdbtimeHour', etc., + but not 'rdbtimeYear' or 'rdbtimeMonth'. + """ + return get_datetime(self, rank, prefix, year, month) + + def items(self, ranked=False, **kwds) -> Iterator[Tuple[str, ValueLike]]: + raise NotImplementedError + + def keys(self, ranked=False, **kwds) -> Iterator[str]: + raise NotImplementedError + + def set(self, key: str, value: ValueLike) -> None: + raise NotImplementedError + + def set_datetime(self, value: Union[DateLike, np.ndarray], + rank: Optional[int] = None, prefix: str = '') -> None: + """ + Sets datetime-related keys (i.e., 'year', 'month', etc.). + + If `prefix` is specified, use the keys '{prefix}Year', '{prefix}Month', etc. + """ + set_datetime(self, value, rank, prefix) + + def update(self, *args, **kwargs) -> None: + if len(args) == 1: + arg = args[0] + if isinstance(arg, View): + for key, value in arg.items(skip='read_only'): + self[key] = value + if isinstance(arg, abc.Mapping): + for key, value in arg.items(): + self[key] = value + elif isinstance(arg, abc.Iterable): + for key, value in arg: + self[key] = value + else: + raise TypeError('Expected a mapping or an iterable of key-value pairs; got %s' % type(arg)) + elif len(args) > 1: + raise ValueError('Expected 1 positional argument; got %d' % len(args)) + else: + self.update(kwargs) diff --git a/eccodes/highlevel/message.py b/eccodes/highlevel/message.py index 54c9f75b..e88a8909 100644 --- a/eccodes/highlevel/message.py +++ b/eccodes/highlevel/message.py @@ -4,6 +4,7 @@ import numpy as np import eccodes +from ._bufr import BUFRMessage _TYPES_MAP = { "float": float, @@ -242,24 +243,6 @@ def get_buffer(self): return eccodes.codes_get_message(self._handle) -class BUFRMessage(Message): - def __init__(self, handle): - super().__init__(handle) - - def pack(self): - """Pack the underlying data""" - self.set("pack", 1, check_values=False) - - def unpack(self): - """Unpack the underlying data""" - self.set("unpack", 1, check_values=False) - - @classmethod - def from_samples(cls, name): - """Create a message from a sample""" - return cls(eccodes.codes_bufr_new_from_samples(name)) - - class GRIBMessage(Message): def __init__(self, handle): super().__init__(handle) diff --git a/tests/examples/__init__.py b/tests/examples/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/examples/attributes.py b/tests/examples/attributes.py new file mode 100755 index 00000000..6a4c9ebc --- /dev/null +++ b/tests/examples/attributes.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +# This example shows how to read key attributes. +# +# Usage: attributes.py input.bufr + +import sys + +from eccodes import * +from eccodes.highlevel import * + +ATTRIBUTES = ['code', 'units', 'scale', 'reference', 'width'] # See BUFR Code Table B + +def run_example(input, output=sys.stdout): + + # Loop over the messages in the file + for number, bufr in enumerate(FileReader(input, CODES_PRODUCT_BUFR), start=1): + + print(f'messageNumber: {number}', file=output) + + # Loop over all keys in the message + for name in bufr.keys(): + + # Print element's attributes. Attributes themselves are keys. + for attribute in ATTRIBUTES: + try: + key = f'{name}->{attribute}' + value = bufr[key] + print(f'{key}: {value}', file=output) + except eccodes.KeyValueNotFoundError: + pass + +if __name__ == '__main__': + run_example(sys.argv[1]) diff --git a/tests/examples/items.py b/tests/examples/items.py new file mode 100755 index 00000000..64dd13a8 --- /dev/null +++ b/tests/examples/items.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 + +# Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +# This example shows how to list all items in a BUFR message. +# +# Usage: ./items.py input.bufr + +import sys + +from eccodes import * +from eccodes.highlevel import * + +def run_example(input, output=sys.stdout): + reader = FileReader(input, CODES_PRODUCT_BUFR) + for i, message in enumerate(reader, start=1): + print('messageNumber', i, file=output) + if message['compressedData'] or message['numberOfSubsets'] == 1: + for k, v in message.items(): + print(k, v, file=output) + else: + for k, v in message.header.items(): + print(k, v, file=output) + # For uncompressed multi-subset messages, print items one subset at a time. [1] + for j, subset in enumerate(message.data, start=1): + print('subsetNumber', j, file=output) + for k, v in subset.items(): + print(k, v, file=output) + +if __name__ == '__main__': + run_example(sys.argv[1]) + +# Footnotes: +# +# [1] This is not stricly necessary but, generally, it's easier to interpret +# contents of ucompressed messages by looking at individual subsets, especially +# so when subsets have different replication factors. diff --git a/tests/sample-data/acars.attributes b/tests/sample-data/acars.attributes new file mode 100644 index 00000000..a74674dc --- /dev/null +++ b/tests/sample-data/acars.attributes @@ -0,0 +1,291 @@ +messageNumber: 1 +aircraftFlightNumber->code: '001006' +aircraftFlightNumber->units: CCITT IA5 +aircraftFlightNumber->scale: 0 +aircraftFlightNumber->reference: 0 +aircraftFlightNumber->width: 64 +aircraftFlightNumber->percentConfidence->code: '033007' +aircraftFlightNumber->percentConfidence->units: % +aircraftFlightNumber->percentConfidence->scale: 0 +aircraftFlightNumber->percentConfidence->reference: 0 +aircraftFlightNumber->percentConfidence->width: 7 +aircraftRegistrationNumberOrOtherIdentification->code: '001008' +aircraftRegistrationNumberOrOtherIdentification->units: CCITT IA5 +aircraftRegistrationNumberOrOtherIdentification->scale: 0 +aircraftRegistrationNumberOrOtherIdentification->reference: 0 +aircraftRegistrationNumberOrOtherIdentification->width: 64 +aircraftRegistrationNumberOrOtherIdentification->percentConfidence->code: '033007' +aircraftRegistrationNumberOrOtherIdentification->percentConfidence->units: % +aircraftRegistrationNumberOrOtherIdentification->percentConfidence->scale: 0 +aircraftRegistrationNumberOrOtherIdentification->percentConfidence->reference: 0 +aircraftRegistrationNumberOrOtherIdentification->percentConfidence->width: 7 +aircraftNavigationalSystem->code: '002061' +aircraftNavigationalSystem->units: CODE TABLE +aircraftNavigationalSystem->scale: 0 +aircraftNavigationalSystem->reference: 0 +aircraftNavigationalSystem->width: 3 +aircraftNavigationalSystem->percentConfidence->code: '033007' +aircraftNavigationalSystem->percentConfidence->units: % +aircraftNavigationalSystem->percentConfidence->scale: 0 +aircraftNavigationalSystem->percentConfidence->reference: 0 +aircraftNavigationalSystem->percentConfidence->width: 7 +aircraftDataRelaySystemType->code: '002062' +aircraftDataRelaySystemType->units: CODE TABLE +aircraftDataRelaySystemType->scale: 0 +aircraftDataRelaySystemType->reference: 0 +aircraftDataRelaySystemType->width: 4 +aircraftDataRelaySystemType->percentConfidence->code: '033007' +aircraftDataRelaySystemType->percentConfidence->units: % +aircraftDataRelaySystemType->percentConfidence->scale: 0 +aircraftDataRelaySystemType->percentConfidence->reference: 0 +aircraftDataRelaySystemType->percentConfidence->width: 7 +instrumentationForWindMeasurement->code: '002002' +instrumentationForWindMeasurement->units: FLAG TABLE +instrumentationForWindMeasurement->scale: 0 +instrumentationForWindMeasurement->reference: 0 +instrumentationForWindMeasurement->width: 4 +instrumentationForWindMeasurement->percentConfidence->code: '033007' +instrumentationForWindMeasurement->percentConfidence->units: % +instrumentationForWindMeasurement->percentConfidence->scale: 0 +instrumentationForWindMeasurement->percentConfidence->reference: 0 +instrumentationForWindMeasurement->percentConfidence->width: 7 +temperatureObservationPrecision->code: '002005' +temperatureObservationPrecision->units: K +temperatureObservationPrecision->scale: 2 +temperatureObservationPrecision->reference: 0 +temperatureObservationPrecision->width: 7 +temperatureObservationPrecision->percentConfidence->code: '033007' +temperatureObservationPrecision->percentConfidence->units: % +temperatureObservationPrecision->percentConfidence->scale: 0 +temperatureObservationPrecision->percentConfidence->reference: 0 +temperatureObservationPrecision->percentConfidence->width: 7 +originalSpecificationOfLatitudeOrLongitude->code: '002070' +originalSpecificationOfLatitudeOrLongitude->units: CODE TABLE +originalSpecificationOfLatitudeOrLongitude->scale: 0 +originalSpecificationOfLatitudeOrLongitude->reference: 0 +originalSpecificationOfLatitudeOrLongitude->width: 4 +originalSpecificationOfLatitudeOrLongitude->percentConfidence->code: '033007' +originalSpecificationOfLatitudeOrLongitude->percentConfidence->units: % +originalSpecificationOfLatitudeOrLongitude->percentConfidence->scale: 0 +originalSpecificationOfLatitudeOrLongitude->percentConfidence->reference: 0 +originalSpecificationOfLatitudeOrLongitude->percentConfidence->width: 7 +aircraftRollAngle->code: '002063' +aircraftRollAngle->units: deg +aircraftRollAngle->scale: 2 +aircraftRollAngle->reference: -18000 +aircraftRollAngle->width: 16 +aircraftRollAngle->percentConfidence->code: '033007' +aircraftRollAngle->percentConfidence->units: % +aircraftRollAngle->percentConfidence->scale: 0 +aircraftRollAngle->percentConfidence->reference: 0 +aircraftRollAngle->percentConfidence->width: 7 +stationType->code: '002001' +stationType->units: CODE TABLE +stationType->scale: 0 +stationType->reference: 0 +stationType->width: 2 +stationType->percentConfidence->code: '033007' +stationType->percentConfidence->units: % +stationType->percentConfidence->scale: 0 +stationType->percentConfidence->reference: 0 +stationType->percentConfidence->width: 7 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +year->percentConfidence->code: '033007' +year->percentConfidence->units: % +year->percentConfidence->scale: 0 +year->percentConfidence->reference: 0 +year->percentConfidence->width: 7 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +month->percentConfidence->code: '033007' +month->percentConfidence->units: % +month->percentConfidence->scale: 0 +month->percentConfidence->reference: 0 +month->percentConfidence->width: 7 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +day->percentConfidence->code: '033007' +day->percentConfidence->units: % +day->percentConfidence->scale: 0 +day->percentConfidence->reference: 0 +day->percentConfidence->width: 7 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +hour->percentConfidence->code: '033007' +hour->percentConfidence->units: % +hour->percentConfidence->scale: 0 +hour->percentConfidence->reference: 0 +hour->percentConfidence->width: 7 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +minute->percentConfidence->code: '033007' +minute->percentConfidence->units: % +minute->percentConfidence->scale: 0 +minute->percentConfidence->reference: 0 +minute->percentConfidence->width: 7 +latitude->code: '005002' +latitude->units: deg +latitude->scale: 2 +latitude->reference: -9000 +latitude->width: 15 +latitude->percentConfidence->code: '033007' +latitude->percentConfidence->units: % +latitude->percentConfidence->scale: 0 +latitude->percentConfidence->reference: 0 +latitude->percentConfidence->width: 7 +longitude->code: '006002' +longitude->units: deg +longitude->scale: 2 +longitude->reference: -18000 +longitude->width: 16 +longitude->percentConfidence->code: '033007' +longitude->percentConfidence->units: % +longitude->percentConfidence->scale: 0 +longitude->percentConfidence->reference: 0 +longitude->percentConfidence->width: 7 +phaseOfAircraftFlight->code: '008004' +phaseOfAircraftFlight->units: CODE TABLE +phaseOfAircraftFlight->scale: 0 +phaseOfAircraftFlight->reference: 0 +phaseOfAircraftFlight->width: 3 +phaseOfAircraftFlight->percentConfidence->code: '033007' +phaseOfAircraftFlight->percentConfidence->units: % +phaseOfAircraftFlight->percentConfidence->scale: 0 +phaseOfAircraftFlight->percentConfidence->reference: 0 +phaseOfAircraftFlight->percentConfidence->width: 7 +pressure->code: '007004' +pressure->units: Pa +pressure->scale: -1 +pressure->reference: 0 +pressure->width: 14 +pressure->percentConfidence->code: '033007' +pressure->percentConfidence->units: % +pressure->percentConfidence->scale: 0 +pressure->percentConfidence->reference: 0 +pressure->percentConfidence->width: 7 +timeSignificance->code: '008021' +timeSignificance->units: CODE TABLE +timeSignificance->scale: 0 +timeSignificance->reference: 0 +timeSignificance->width: 5 +timeSignificance->percentConfidence->code: '033007' +timeSignificance->percentConfidence->units: % +timeSignificance->percentConfidence->scale: 0 +timeSignificance->percentConfidence->reference: 0 +timeSignificance->percentConfidence->width: 7 +windDirection->code: '011001' +windDirection->units: deg +windDirection->scale: 0 +windDirection->reference: 0 +windDirection->width: 9 +windDirection->percentConfidence->code: '033007' +windDirection->percentConfidence->units: % +windDirection->percentConfidence->scale: 0 +windDirection->percentConfidence->reference: 0 +windDirection->percentConfidence->width: 7 +windSpeed->code: '011002' +windSpeed->units: m/s +windSpeed->scale: 1 +windSpeed->reference: 0 +windSpeed->width: 12 +windSpeed->percentConfidence->code: '033007' +windSpeed->percentConfidence->units: % +windSpeed->percentConfidence->scale: 0 +windSpeed->percentConfidence->reference: 0 +windSpeed->percentConfidence->width: 7 +degreeOfTurbulence->code: '011031' +degreeOfTurbulence->units: CODE TABLE +degreeOfTurbulence->scale: 0 +degreeOfTurbulence->reference: 0 +degreeOfTurbulence->width: 4 +degreeOfTurbulence->percentConfidence->code: '033007' +degreeOfTurbulence->percentConfidence->units: % +degreeOfTurbulence->percentConfidence->scale: 0 +degreeOfTurbulence->percentConfidence->reference: 0 +degreeOfTurbulence->percentConfidence->width: 7 +verticalGustVelocity->code: '011034' +verticalGustVelocity->units: m/s +verticalGustVelocity->scale: 1 +verticalGustVelocity->reference: -1024 +verticalGustVelocity->width: 11 +verticalGustVelocity->percentConfidence->code: '033007' +verticalGustVelocity->percentConfidence->units: % +verticalGustVelocity->percentConfidence->scale: 0 +verticalGustVelocity->percentConfidence->reference: 0 +verticalGustVelocity->percentConfidence->width: 7 +verticalGustAcceleration->code: '011035' +verticalGustAcceleration->units: m s-2 +verticalGustAcceleration->scale: 2 +verticalGustAcceleration->reference: -8192 +verticalGustAcceleration->width: 14 +verticalGustAcceleration->percentConfidence->code: '033007' +verticalGustAcceleration->percentConfidence->units: % +verticalGustAcceleration->percentConfidence->scale: 0 +verticalGustAcceleration->percentConfidence->reference: 0 +verticalGustAcceleration->percentConfidence->width: 7 +airTemperature->code: '012001' +airTemperature->units: K +airTemperature->scale: 1 +airTemperature->reference: 0 +airTemperature->width: 12 +airTemperature->percentConfidence->code: '033007' +airTemperature->percentConfidence->units: % +airTemperature->percentConfidence->scale: 0 +airTemperature->percentConfidence->reference: 0 +airTemperature->percentConfidence->width: 7 +dewpointTemperature->code: '012003' +dewpointTemperature->units: K +dewpointTemperature->scale: 1 +dewpointTemperature->reference: 0 +dewpointTemperature->width: 12 +dewpointTemperature->percentConfidence->code: '033007' +dewpointTemperature->percentConfidence->units: % +dewpointTemperature->percentConfidence->scale: 0 +dewpointTemperature->percentConfidence->reference: 0 +dewpointTemperature->percentConfidence->width: 7 +relativeHumidity->code: '013003' +relativeHumidity->units: % +relativeHumidity->scale: 0 +relativeHumidity->reference: 0 +relativeHumidity->width: 7 +relativeHumidity->percentConfidence->code: '033007' +relativeHumidity->percentConfidence->units: % +relativeHumidity->percentConfidence->scale: 0 +relativeHumidity->percentConfidence->reference: 0 +relativeHumidity->percentConfidence->width: 7 +airframeIcing->code: '020041' +airframeIcing->units: CODE TABLE +airframeIcing->scale: 0 +airframeIcing->reference: 0 +airframeIcing->width: 4 +airframeIcing->percentConfidence->code: '033007' +airframeIcing->percentConfidence->units: % +airframeIcing->percentConfidence->scale: 0 +airframeIcing->percentConfidence->reference: 0 +airframeIcing->percentConfidence->width: 7 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +generatingApplication->code: '001201' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 diff --git a/tests/sample-data/acars.bufr b/tests/sample-data/acars.bufr new file mode 100644 index 0000000000000000000000000000000000000000..2d30acf4a36c2d534018025f6276eaf991c89667 GIT binary patch literal 188 zcmZpercentConfidence 70 +aircraftRegistrationNumberOrOtherIdentification 2INHOABA +aircraftRegistrationNumberOrOtherIdentification->percentConfidence 70 +aircraftNavigationalSystem -- +aircraftNavigationalSystem->percentConfidence -- +aircraftDataRelaySystemType 3 +aircraftDataRelaySystemType->percentConfidence 70 +instrumentationForWindMeasurement 4 +instrumentationForWindMeasurement->percentConfidence 70 +temperatureObservationPrecision 0.25 +temperatureObservationPrecision->percentConfidence 70 +originalSpecificationOfLatitudeOrLongitude 10 +originalSpecificationOfLatitudeOrLongitude->percentConfidence 70 +aircraftRollAngle -- +aircraftRollAngle->percentConfidence -- +stationType 0 +stationType->percentConfidence 70 +year 2014 +year->percentConfidence 70 +month 1 +month->percentConfidence 70 +day 28 +day->percentConfidence 70 +hour 3 +hour->percentConfidence 70 +minute 1 +minute->percentConfidence 70 +latitude 30.8 +latitude->percentConfidence 89 +longitude -82.08 +longitude->percentConfidence 89 +phaseOfAircraftFlight 3 +phaseOfAircraftFlight->percentConfidence 70 +pressure 21580.0 +pressure->percentConfidence 79 +timeSignificance -- +timeSignificance->percentConfidence -- +windDirection 270 +windDirection->percentConfidence 70 +windSpeed 62.2 +windSpeed->percentConfidence 70 +degreeOfTurbulence -- +degreeOfTurbulence->percentConfidence -- +verticalGustVelocity -- +verticalGustVelocity->percentConfidence -- +verticalGustAcceleration -- +verticalGustAcceleration->percentConfidence -- +airTemperature 224.4 +airTemperature->percentConfidence 70 +dewpointTemperature -- +dewpointTemperature->percentConfidence -- +relativeHumidity -- +relativeHumidity->percentConfidence -- +airframeIcing -- +airframeIcing->percentConfidence -- +centre 98 +generatingApplication 1 diff --git a/tests/sample-data/ahi-himawari-8.attributes b/tests/sample-data/ahi-himawari-8.attributes new file mode 100644 index 00000000..38d33840 --- /dev/null +++ b/tests/sample-data/ahi-himawari-8.attributes @@ -0,0 +1,181 @@ +messageNumber: 1 +satelliteIdentifier->code: '001007' +satelliteIdentifier->units: CODE TABLE +satelliteIdentifier->scale: 0 +satelliteIdentifier->reference: 0 +satelliteIdentifier->width: 10 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +satelliteClassification->code: '002020' +satelliteClassification->units: CODE TABLE +satelliteClassification->scale: 0 +satelliteClassification->reference: 0 +satelliteClassification->width: 9 +segmentSizeAtNadirInXDirection->code: '002028' +segmentSizeAtNadirInXDirection->units: m +segmentSizeAtNadirInXDirection->scale: 0 +segmentSizeAtNadirInXDirection->reference: 0 +segmentSizeAtNadirInXDirection->width: 18 +segmentSizeAtNadirInYDirection->code: '002029' +segmentSizeAtNadirInYDirection->units: m +segmentSizeAtNadirInYDirection->scale: 0 +segmentSizeAtNadirInYDirection->reference: 0 +segmentSizeAtNadirInYDirection->width: 18 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +second->code: '004006' +second->units: s +second->scale: 0 +second->reference: 0 +second->width: 6 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +numberOfPixelsPerRow->code: '030021' +numberOfPixelsPerRow->units: Numeric +numberOfPixelsPerRow->scale: 0 +numberOfPixelsPerRow->reference: 0 +numberOfPixelsPerRow->width: 12 +numberOfPixelsPerColumn->code: '030022' +numberOfPixelsPerColumn->units: Numeric +numberOfPixelsPerColumn->scale: 0 +numberOfPixelsPerColumn->reference: 0 +numberOfPixelsPerColumn->width: 12 +landOrSeaQualifier->code: '008012' +landOrSeaQualifier->units: CODE TABLE +landOrSeaQualifier->scale: 0 +landOrSeaQualifier->reference: 0 +landOrSeaQualifier->width: 2 +satelliteZenithAngle->code: '007024' +satelliteZenithAngle->units: deg +satelliteZenithAngle->scale: 2 +satelliteZenithAngle->reference: -9000 +satelliteZenithAngle->width: 15 +solarZenithAngle->code: '007025' +solarZenithAngle->units: deg +solarZenithAngle->scale: 2 +solarZenithAngle->reference: -9000 +solarZenithAngle->width: 15 +nonCoordinateHeight->code: '010002' +nonCoordinateHeight->units: m +nonCoordinateHeight->scale: -1 +nonCoordinateHeight->reference: -40 +nonCoordinateHeight->width: 16 +satelliteChannelCentreFrequency->code: '002153' +satelliteChannelCentreFrequency->units: Hz +satelliteChannelCentreFrequency->scale: -8 +satelliteChannelCentreFrequency->reference: 0 +satelliteChannelCentreFrequency->width: 26 +satelliteChannelBandWidth->code: '002154' +satelliteChannelBandWidth->units: Hz +satelliteChannelBandWidth->scale: -8 +satelliteChannelBandWidth->reference: 0 +satelliteChannelBandWidth->width: 26 +cloudAmountInSegment->code: '020081' +cloudAmountInSegment->units: % +cloudAmountInSegment->scale: 0 +cloudAmountInSegment->reference: 0 +cloudAmountInSegment->width: 7 +amountSegmentCloudFree->code: '020082' +amountSegmentCloudFree->units: % +amountSegmentCloudFree->scale: 0 +amountSegmentCloudFree->reference: 0 +amountSegmentCloudFree->width: 7 +cloudType->code: '020012' +cloudType->units: CODE TABLE +cloudType->scale: 0 +cloudType->reference: 0 +cloudType->width: 6 +satelliteInstrumentUsedInDataProcessing->code: '002152' +satelliteInstrumentUsedInDataProcessing->units: FLAG TABLE +satelliteInstrumentUsedInDataProcessing->scale: 0 +satelliteInstrumentUsedInDataProcessing->reference: 0 +satelliteInstrumentUsedInDataProcessing->width: 31 +meanHumidityComputationalMethod->code: '002024' +meanHumidityComputationalMethod->units: CODE TABLE +meanHumidityComputationalMethod->scale: 0 +meanHumidityComputationalMethod->reference: 0 +meanHumidityComputationalMethod->width: 4 +pressure->code: '007004' +pressure->units: Pa +pressure->scale: -1 +pressure->reference: 0 +pressure->width: 14 +relativeHumidity->code: '013003' +relativeHumidity->units: % +relativeHumidity->scale: 0 +relativeHumidity->reference: 0 +relativeHumidity->width: 7 +radianceType->code: '002166' +radianceType->units: CODE TABLE +radianceType->scale: 0 +radianceType->reference: 0 +radianceType->width: 4 +radianceComputationalMethod->code: '002167' +radianceComputationalMethod->units: CODE TABLE +radianceComputationalMethod->scale: 0 +radianceComputationalMethod->reference: 0 +radianceComputationalMethod->width: 4 +spectralRadiance->code: '012075' +spectralRadiance->units: W m-3 sr-1 +spectralRadiance->scale: -3 +spectralRadiance->reference: 0 +spectralRadiance->width: 16 +radiance->code: '012076' +radiance->units: W m-2 sr-1 +radiance->scale: 3 +radiance->reference: 0 +radiance->width: 16 +brightnessTemperature->code: '012063' +brightnessTemperature->units: K +brightnessTemperature->scale: 1 +brightnessTemperature->reference: 0 +brightnessTemperature->width: 12 +brightnessTemperature->firstOrderStatisticalValue->code: '224255' +brightnessTemperature->firstOrderStatisticalValue->units: K +brightnessTemperature->firstOrderStatisticalValue->scale: 0 +brightnessTemperature->firstOrderStatisticalValue->reference: 0 +brightnessTemperature->firstOrderStatisticalValue->width: 0 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 +firstOrderStatistics->code: '008023' +firstOrderStatistics->units: CODE TABLE +firstOrderStatistics->scale: 0 +firstOrderStatistics->reference: 0 +firstOrderStatistics->width: 6 diff --git a/tests/sample-data/ahi-himawari-8.bufr b/tests/sample-data/ahi-himawari-8.bufr new file mode 100644 index 0000000000000000000000000000000000000000..fc4e6db47c672c34cf83ec411427cee0e5c29de7 GIT binary patch literal 3152 zcmc&#dsGuw9=>^yL=2Ebl%TkT$)JKLAp{oj!GI|Q2$n~n1_2=r90eapfu*iOf+z%$ zM-UZI1bL_^ik2uo(4b;@sI6d7YdJ+h*0QxKibadg-U;<=|KB~Q_e|z@@8tfz`ZU^J#&eJ0k_XK?7Y^o;_EA;S2W?ayKmzBgW|LS9o|}3Z z?ExBlamNvMv+QwkZh+l^@*U=84a;hn)Jn_6tJ#?&|2#;|I7{nnwqI~;>`v0pXSW$@ zcNGqTZN>BhSr64mrWb`aZ z>nS@sYv6F*qSWJ?6@lfXf%Bc?E38I9JA0N@*%r5Ddo~}`wA6dGEt&tG#tgM8JUr>P zb;jx1=arp{`tbCS%9l&xlAUKyzLU}J?1(7!P20Mk1M|nN%$pAy?E!rllQun{*pG+!?pS? zd*mgHJ2q5n72IXM&6h0^uDc0q15HoICqRs#)fR`5o_bk>U|oDP$gv;QLmQGfm>Smq z4CJV3%*(Ui3!W=?iTJEUqg1jF%(HAUo_$&-qtlBrHTo}_{WYf86-SBndud{Fly6u32qV4Nbv+8=y zs5#_|6D}3-d>|TCw7dJaXPyE89QT92Nb(E-_7CfglF#iOLp2n%phR?Hbtz!N`uxdM z04UXD4wWl>ne^ZUt|(j`LW z(ZE?woTbm_c>=d7Dnb$tk?G$ySoa}rhe z9{F&|bBSQMOMA#^HRRoPp6Tk-F-bd*ix9ObJaD)OFfp=DqH{Yg_51s&0E6E@CHa6e zA}JP1x@H9EG)BqA#XMN(e*z0Ol5P|2oMxc?|wlk`r62#2YLkFuc7VxY(1`*%}gYT>st&A&sEBSo`f+=~I zQ-kK@S4jXfX@k=d|5N$?4c8aD_c%6mT|)+1JiG50qSK_W&!_;H22?z-KBbv}flK2! zc~|ZV4Qa@}n=_jQvS}QL&>ErZNcT*UI#D-GdsMc^F?H17Bs;FCms;A$I(~1sz2AMO zsinuNL(3rqhXfCRZ!rQ5z>@HfCZ0??D*UV$3owo%Xr)a`plI`TOWpk-*ZZ<${hQ*e z^jEi+m*Req6#P;ByCmIjPhcua1}c)Q)d+(_)+VRNTDyG_cV8ae&>y|;C#_sr=n!8e zS5!%cv{q5kGmF7b_u?81A8ZL27fNWjQX34DB~%h1uPr5DNQ4>_Gb0xswvOy8bKqW+ z>0U&J>U0i{cS85ZytVUVXO=asdv_J)v$9?C00ZU}Gsu7%zl=zSB|vQ!4Ju{w-01l9 zitzY{=?-W<{c*nJNTwtYif?k?x782$EGhDm1SqSo{O%7QTO60}=)BU@pr z(I)2K77#E~HqqG?1tr+3Zywx|Fgrca`CQ}rQ#~h6RgN}R)P3DyE*)fia6hrj!$(B{^mO@azv?Rw1Y z-LblIyp(`>YzpeR*f7zh5OyZqYIH225%dn^SZ&;WS@1h+l%I~P$y5f5hy7oJY6|mz z44+B@AkX5ZDb!e69cqticpLz-r=gaiQQFVf;_uPD8o*{?-%AW)O>kbpjay>LZAJ%` znj^a*jtjnBJ`zj~&cmoaECisTu1XS#jj%bcE&^}Bp1~qng(2~YIUEifp7$(&6Vbr2 zIxSk)y9f=4AJeqq_;|x3F`$b191-Ft;`8}FJeH3u!bj6G)(Ty{K8FVIRmy|_^e)(| z*@$QyIE;8Cz|rw1`x)QiAN$tVVZcWy0gwdS;Q#;t literal 0 HcmV?d00001 diff --git a/tests/sample-data/ahi-himawari-8.items b/tests/sample-data/ahi-himawari-8.items new file mode 100644 index 00000000..fc2636c4 --- /dev/null +++ b/tests/sample-data/ahi-himawari-8.items @@ -0,0 +1,614 @@ +messageNumber 1 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 0 +dataCategory 5 +dataSubCategory 189 +masterTablesVersionNumber 13 +localTablesVersionNumber 1 +typicalYearOfCentury 15 +typicalMonth 12 +typicalDay 31 +typicalHour 21 +typicalMinute 53 +typicalDate 20151231 +typicalTime 215300 +rdbType 3 +oldSubtype 189 +localYear 2015 +localMonth 12 +localDay 31 +localHour 21 +localMinute 53 +localSecond 6 +rdbtimeDay 1 +rdbtimeHour 22 +rdbtimeMinute 40 +rdbtimeSecond 56 +rdbtimeTime 224056 +rectimeDay 10 +rectimeHour 10 +rectimeMinute 0 +rectimeSecond 0 +restricted 0 +correction1 0 +correction1Part 0 +correction2 0 +correction2Part 0 +correction3 0 +correction3Part 0 +correction4 0 +correction4Part 0 +qualityControl 70 +newSubtype 0 +numberOfSubsets 64 +localLongitude1 137.85365 +localLatitude1 17.30117 +localLongitude2 157.99885 +localLatitude2 17.46224 +localNumberOfObservations 64 +satelliteID 173 +observedData 1 +compressedData 1 +unexpandedDescriptors [310023 224000 236000 101185 31031 1031 1032 8023 101010 224255] +satelliteIdentifier [173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 + 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 + 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 + 173 173 173 173 173 173 173 173 173 173] +centre [[34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34] + [34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34]] +satelliteClassification [273 273 273 273 273 273 273 273 273 273 273 273 273 273 273 273 273 273 + 273 273 273 273 273 273 273 273 273 273 273 273 273 273 273 273 273 273 + 273 273 273 273 273 273 273 273 273 273 273 273 273 273 273 273 273 273 + 273 273 273 273 273 273 273 273 273 273] +segmentSizeAtNadirInXDirection [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +segmentSizeAtNadirInYDirection [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +year [2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 + 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 + 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 + 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 + 2015 2015 2015 2015 2015 2015 2015 2015] +month [12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12] +day [31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31] +hour [21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21] +minute [53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 + 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 + 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53] +second [5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8] +latitude [17.30558 17.30468 17.30389 17.3032 17.30261 17.30212 17.30174 17.30145 + 17.30126 17.30117 17.30118 17.3013 17.30151 17.30182 17.30224 17.30275 + 17.30336 17.30408 17.3049 17.30582 17.30683 17.30796 17.30918 17.3105 + 17.31192 17.31345 17.31681 17.31864 17.32057 17.32261 17.32475 17.327 + 17.32935 17.3318 17.33436 17.33703 17.33979 17.34267 17.34565 17.34873 + 17.35523 17.35864 17.36216 17.36579 17.36953 17.37337 17.37733 17.3814 + 17.38558 17.38988 17.39428 17.39881 17.40344 17.4082 17.41306 17.41805 + 17.42315 17.42837 17.43371 17.43917 17.44476 17.45046 17.45629 17.46224] +longitude [137.85365 138.15761 138.46144 138.76519 139.06885 139.3724 139.6759 + 139.97939 140.28281 140.58624 140.88962 141.19306 141.49648 141.79995 + 142.1035 142.40708 142.71075 143.0145 143.31838 143.62235 143.92648 + 144.23075 144.53518 144.83978 145.1446 145.4496 146.06028 146.36598 + 146.67198 146.97822 147.28476 147.59161 147.89878 148.2063 148.51418 + 148.8224 149.13105 149.44008 149.74951 150.05939 150.68052 150.99181 + 151.3036 151.6159 151.92872 152.2421 152.55605 152.8706 153.18574 + 153.50151 153.81792 154.135 154.45275 154.77119 155.09038 155.4103 + 155.73098 156.05244 156.3747 156.69778 157.02172 157.34652 157.67222 + 157.99885] +numberOfPixelsPerRow [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +numberOfPixelsPerColumn [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +landOrSeaQualifier [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] +satelliteZenithAngle [20.45 20.39 20.35 20.3 20.27 20.24 20.21 20.2 20.18 20.18 20.18 20.19 + 20.2 20.22 20.24 20.28 20.31 20.36 20.41 20.46 20.52 20.59 20.66 20.74 + 20.83 20.92 21.12 21.23 21.34 21.46 21.58 21.71 21.84 21.98 22.13 22.28 + 22.43 22.59 22.75 22.92 23.27 23.45 23.64 23.83 24.02 24.22 24.42 24.63 + 24.84 25.06 25.27 25.5 25.72 25.95 26.19 26.42 26.66 26.91 27.15 27.4 + 27.66 27.91 28.17 28.44] +solarZenithAngle [94.81 94.54 94.27 94. 93.74 93.47 93.2 92.94 92.67 92.41 92.14 91.87 + 91.61 91.34 91.08 90.81 90.55 90.28 90.02 89.76 89.49 89.23 88.96 88.7 + 88.44 88.17 87.65 87.38 87.12 86.86 86.59 86.33 86.06 85.8 85.54 85.27 + 85.01 84.75 84.48 84.22 83.69 83.43 83.16 82.9 82.63 82.37 82.11 81.84 + 81.58 81.31 81.04 80.78 80.51 80.25 79.98 79.71 79.45 79.18 78.91 78.65 + 78.38 78.11 77.84 77.57] +nonCoordinateHeight [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +satelliteChannelCentreFrequency [[77160700000000.0 77160700000000.0 77160700000000.0 ... 77160700000000.0 + 77160700000000.0 77160700000000.0] + [48021300000000.0 48021300000000.0 48021300000000.0 ... 48021300000000.0 + 48021300000000.0 48021300000000.0] + [43191500000000.0 43191500000000.0 43191500000000.0 ... 43191500000000.0 + 43191500000000.0 43191500000000.0] + ... + [22573500000000.0 22573500000000.0 22573500000000.0 ... 22573500000000.0 + 22573500000000.0 22573500000000.0] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +satelliteChannelBandWidth [[-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [0.0 0.0 0.0 ... 0.0 0.0 0.0] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +cloudAmountInSegment [[58 47 17 18 18 3 18 35 18 19 37 45 49 19 0 3 0 0 0 17 18 2 2 0 0 0 29 0 + 4 18 2 6 6 47 3 47 81 67 90 98 90 100 71 43 51 35 92 100 95 100 100 100 + 100 100 100 98 93 88 51 45 39 50 63 85] + [0 0 0 0 0 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 + 26 46 21 45 49 26 85 49 4 0 0 50 77 22 69 35 43 55 66 49 6 16 11 2 0 0 + 0 11 36] + [0 0 0 1 0 0 0 0 0 0 4 6 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 1 + 32 56 29 52 58 33 89 50 4 1 0 54 92 41 80 66 83 70 76 62 20 40 37 6 0 0 + 1 16 45] + [17 18 3 8 0 0 6 4 1 1 24 33 43 19 0 3 0 0 0 0 2 0 0 0 0 0 29 0 4 18 2 6 + 6 47 3 47 81 64 87 98 67 100 57 13 4 1 74 100 84 100 100 100 100 100 + 100 98 87 83 40 13 5 20 42 76] + [58 47 17 18 18 3 18 35 18 19 37 45 49 19 0 3 0 0 0 17 18 2 2 0 0 0 29 0 + 4 18 2 6 6 47 3 47 81 67 90 98 90 100 71 43 51 35 92 100 95 100 100 100 + 100 100 100 98 93 88 51 45 39 50 63 85] + [58 47 17 18 18 3 18 35 18 19 37 45 49 19 0 3 0 0 0 17 18 2 2 0 0 0 29 0 + 4 18 2 6 6 47 3 47 81 67 90 98 90 100 71 43 51 35 92 100 95 100 100 100 + 100 100 100 98 93 88 51 45 39 50 63 85] + [58 47 17 18 18 3 18 35 18 19 37 45 49 19 0 3 0 0 0 17 18 2 2 0 0 0 29 0 + 4 18 2 6 6 47 3 47 81 67 90 98 90 100 71 43 51 35 92 100 95 100 100 100 + 100 100 100 98 93 88 51 45 39 50 63 85] + [58 47 17 18 18 3 18 35 18 19 37 45 49 19 0 3 0 0 0 17 18 2 2 0 0 0 29 0 + 4 18 2 6 6 47 3 47 81 67 90 98 90 100 71 43 51 35 92 100 95 100 100 100 + 100 100 100 98 93 88 51 45 39 50 63 85] + [58 47 17 18 18 3 18 35 18 19 37 45 49 19 0 3 0 0 0 17 18 2 2 0 0 0 29 0 + 4 18 2 6 6 47 3 47 81 67 90 98 90 100 71 43 51 35 92 100 95 100 100 100 + 100 100 100 98 93 88 51 45 39 50 63 85] + [58 47 17 18 18 3 18 35 18 19 37 45 49 19 0 3 0 0 0 17 18 2 2 0 0 0 29 0 + 4 18 2 6 6 47 3 47 81 67 90 98 90 100 71 43 51 35 92 100 95 100 100 100 + 100 100 100 98 93 88 51 45 39 50 63 85] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +amountSegmentCloudFree [[42 53 83 82 82 97 82 65 82 81 63 55 51 81 100 97 100 100 100 83 82 98 + 98 100 100 100 71 100 96 82 98 94 94 53 97 53 19 33 10 2 10 0 29 57 49 + 65 8 0 5 0 0 0 0 0 0 2 7 12 49 55 61 50 37 15] + [100 100 100 100 100 100 100 100 100 100 100 98 100 98 100 100 100 100 + 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 92 100 74 + 54 79 55 51 74 15 51 96 100 100 50 23 78 31 65 57 45 34 51 94 84 89 98 + 100 100 100 89 64] + [100 100 100 99 100 100 100 100 100 100 96 94 100 96 100 100 100 100 100 + 100 100 100 100 100 100 100 100 100 100 100 100 100 100 85 99 68 44 71 + 48 42 67 11 50 96 99 100 46 8 59 20 34 17 30 24 38 80 60 63 94 100 100 + 99 84 55] + [83 82 97 92 100 100 94 96 99 99 76 67 57 81 100 97 100 100 100 100 98 + 100 100 100 100 100 71 100 96 82 98 94 94 53 97 53 19 36 13 2 33 0 43 + 87 96 99 26 0 16 0 0 0 0 0 0 2 13 17 60 87 95 80 58 24] + [42 53 83 82 82 97 82 65 82 81 63 55 51 81 100 97 100 100 100 83 82 98 + 98 100 100 100 71 100 96 82 98 94 94 53 97 53 19 33 10 2 10 0 29 57 49 + 65 8 0 5 0 0 0 0 0 0 2 7 12 49 55 61 50 37 15] + [42 53 83 82 82 97 82 65 82 81 63 55 51 81 100 97 100 100 100 83 82 98 + 98 100 100 100 71 100 96 82 98 94 94 53 97 53 19 33 10 2 10 0 29 57 49 + 65 8 0 5 0 0 0 0 0 0 2 7 12 49 55 61 50 37 15] + [42 53 83 82 82 97 82 65 82 81 63 55 51 81 100 97 100 100 100 83 82 98 + 98 100 100 100 71 100 96 82 98 94 94 53 97 53 19 33 10 2 10 0 29 57 49 + 65 8 0 5 0 0 0 0 0 0 2 7 12 49 55 61 50 37 15] + [42 53 83 82 82 97 82 65 82 81 63 55 51 81 100 97 100 100 100 83 82 98 + 98 100 100 100 71 100 96 82 98 94 94 53 97 53 19 33 10 2 10 0 29 57 49 + 65 8 0 5 0 0 0 0 0 0 2 7 12 49 55 61 50 37 15] + [42 53 83 82 82 97 82 65 82 81 63 55 51 81 100 97 100 100 100 83 82 98 + 98 100 100 100 71 100 96 82 98 94 94 53 97 53 19 33 10 2 10 0 29 57 49 + 65 8 0 5 0 0 0 0 0 0 2 7 12 49 55 61 50 37 15] + [42 53 83 82 82 97 82 65 82 81 63 55 51 81 100 97 100 100 100 83 82 98 + 98 100 100 100 71 100 96 82 98 94 94 53 97 53 19 33 10 2 10 0 29 57 49 + 65 8 0 5 0 0 0 0 0 0 2 7 12 49 55 61 50 37 15] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +cloudType [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +satelliteInstrumentUsedInDataProcessing [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9] + [9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9] + [9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9] + [9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9] + [9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9] + [9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9] + [9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9] + [9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9] + [9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9] + [9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +meanHumidityComputationalMethod [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +pressure [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +relativeHumidity [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +radianceType [[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +radianceComputationalMethod [[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +spectralRadiance [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +radiance [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +brightnessTemperature [[297.40000000000003 297.5 297.6 297.6 297.8 297.7 297.5 297.5 297.7 + 297.7 297.5 297.6 297.40000000000003 297.6 297.6 297.7 + 297.90000000000003 298.0 297.90000000000003 297.90000000000003 298.0 + 298.1 298.1 298.0 297.90000000000003 297.90000000000003 298.0 298.0 + 298.0 297.90000000000003 297.90000000000003 297.90000000000003 297.8 + 297.6 297.6 297.6 297.5 297.6 297.40000000000003 297.0 297.3 -- + 297.40000000000003 297.40000000000003 297.6 297.6 297.3 -- + 297.40000000000003 -- -- -- -- -- -- 297.5 297.2 297.1 297.3 + 297.40000000000003 297.3 297.2 297.2 297.3] + [251.4 251.60000000000002 251.3 251.0 250.20000000000002 + 249.70000000000002 249.3 249.0 248.3 247.4 246.9 247.4 + 248.20000000000002 248.9 250.10000000000002 250.60000000000002 250.4 + 250.10000000000002 249.4 248.70000000000002 248.10000000000002 247.5 + 246.60000000000002 246.60000000000002 247.20000000000002 247.9 249.3 + 249.0 248.8 248.60000000000002 248.4 248.5 248.9 248.3 248.4 248.5 + 248.5 249.0 249.10000000000002 249.4 249.3 249.10000000000002 + 249.10000000000002 248.70000000000002 248.5 249.10000000000002 248.0 + 247.0 248.3 249.3 251.10000000000002 250.60000000000002 249.5 + 249.10000000000002 248.8 249.5 250.8 250.9 250.9 250.8 250.4 + 249.60000000000002 249.5 250.10000000000002] + [261.7 262.0 261.8 261.6 261.1 260.90000000000003 260.6 + 260.40000000000003 259.90000000000003 259.0 258.6 259.40000000000003 + 260.2 261.0 262.2 262.7 262.7 262.6 262.40000000000003 262.1 261.7 + 261.3 260.6 260.7 261.2 261.8 263.1 262.90000000000003 262.6 + 262.40000000000003 262.3 262.5 262.8 262.1 262.3 262.5 262.5 + 262.90000000000003 262.8 263.0 262.8 262.8 263.0 262.8 262.8 + 263.40000000000003 262.6 261.40000000000003 262.8 263.5 + 264.90000000000003 264.40000000000003 264.0 264.0 263.2 264.0 265.2 + 265.2 265.2 265.3 265.2 264.40000000000003 264.40000000000003 264.7] + [268.0 268.40000000000003 268.5 268.5 268.5 268.5 268.5 + 268.40000000000003 268.2 267.8 267.6 268.5 268.8 269.40000000000003 + 270.2 270.90000000000003 271.1 271.1 271.2 271.3 271.40000000000003 + 271.1 270.7 270.90000000000003 271.0 271.3 271.90000000000003 + 271.90000000000003 271.7 271.7 271.5 271.90000000000003 271.8 271.1 + 270.90000000000003 270.8 270.6 271.2 270.90000000000003 270.7 270.8 -- + 271.1 271.40000000000003 271.5 272.0 271.5 -- 271.6 -- -- -- -- -- -- + 272.1 272.8 272.3 272.6 272.90000000000003 273.0 272.3 272.3 272.5] + [293.1 293.3 293.5 293.6 294.1 294.1 293.7 293.5 293.8 + 293.90000000000003 293.40000000000003 293.5 293.7 293.90000000000003 + 294.3 294.8 294.90000000000003 294.90000000000003 294.8 294.7 294.6 + 294.90000000000003 294.90000000000003 295.1 294.90000000000003 + 294.90000000000003 294.6 295.1 294.8 294.7 294.7 294.8 294.5 294.1 + 294.0 293.5 292.90000000000003 293.40000000000003 292.8 291.2 292.5 -- + 293.2 293.6 293.8 293.90000000000003 293.3 -- 292.90000000000003 -- -- + -- -- -- -- 292.40000000000003 292.8 292.5 293.0 293.3 + 293.40000000000003 293.0 293.0 293.2] + [274.7 274.8 275.0 275.1 275.5 275.5 275.2 275.1 275.3 275.3 275.0 275.0 + 274.90000000000003 275.1 275.3 275.5 275.6 275.6 275.40000000000003 + 275.3 275.3 275.40000000000003 275.40000000000003 275.5 275.3 275.3 + 275.1 275.40000000000003 275.2 275.1 275.1 275.1 275.0 274.8 274.8 + 274.5 274.1 274.3 274.0 273.5 273.8 -- 274.2 274.40000000000003 + 274.40000000000003 274.40000000000003 274.1 -- 273.90000000000003 -- -- + -- -- -- -- 273.5 273.5 273.40000000000003 273.6 273.6 273.5 273.3 + 273.3 273.40000000000003] + [295.3 295.6 295.8 296.0 296.5 296.5 296.1 295.90000000000003 296.2 + 296.2 295.7 295.8 295.90000000000003 296.1 296.5 297.0 297.2 297.2 + 297.0 296.8 296.7 296.90000000000003 297.0 297.2 297.0 297.0 296.7 + 297.2 296.90000000000003 296.8 296.7 296.8 296.5 296.1 296.0 + 295.40000000000003 294.90000000000003 295.3 294.8 293.6 + 294.40000000000003 -- 295.0 295.5 295.7 295.8 295.3 -- 294.7 -- -- -- + -- -- -- 294.40000000000003 294.6 294.3 294.8 295.1 295.2 294.8 294.7 + 294.8] + [294.6 294.90000000000003 295.2 295.40000000000003 296.1 296.1 295.6 + 295.40000000000003 295.7 295.7 295.1 295.2 295.40000000000003 295.7 + 296.2 296.90000000000003 297.1 297.0 296.7 296.6 296.5 296.8 296.8 + 297.1 296.8 296.8 296.5 297.1 296.7 296.6 296.5 296.6 296.2 295.7 295.5 + 294.8 294.1 294.6 294.1 292.6 293.6 -- 294.5 295.1 295.3 + 295.40000000000003 294.8 -- 294.0 -- -- -- -- -- -- 293.7 + 293.90000000000003 293.5 294.1 294.6 294.8 294.3 294.1 294.2] + [291.3 291.7 292.0 292.2 292.90000000000003 293.0 292.6 + 292.40000000000003 292.6 292.6 292.0 292.2 292.40000000000003 292.7 + 293.40000000000003 294.2 294.5 294.3 294.0 293.90000000000003 + 293.90000000000003 294.1 294.2 294.40000000000003 294.1 294.1 + 293.90000000000003 294.5 294.0 294.0 293.90000000000003 294.0 + 293.40000000000003 292.8 292.6 291.8 291.2 291.7 291.2 289.8 290.6 -- + 291.7 292.40000000000003 292.6 292.6 292.0 -- 291.3 -- -- -- -- -- -- + 291.2 291.2 290.7 291.3 291.90000000000003 292.3 291.6 291.3 + 291.40000000000003] + [277.1 277.40000000000003 277.6 277.8 278.2 278.3 278.1 278.0 278.1 + 278.1 277.7 277.90000000000003 278.0 278.3 278.7 279.3 279.5 279.3 + 279.1 279.1 279.2 279.2 279.2 279.40000000000003 279.2 279.2 279.1 + 279.5 279.2 279.2 279.1 279.2 278.8 278.3 278.2 277.7 277.3 277.7 + 277.40000000000003 276.40000000000003 277.0 -- 277.7 278.1 278.2 278.3 + 277.90000000000003 -- 277.3 -- -- -- -- -- -- 276.6 276.90000000000003 + 276.40000000000003 276.90000000000003 277.40000000000003 277.6 277.2 + 277.1 277.3] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +brightnessTemperature->firstOrderStatisticalValue [[0.2 0.30000000000000004 0.1 0.2 0.0 0.1 0.2 0.2 0.1 0.1 0.2 0.2 0.2 0.2 + 0.1 0.1 0.1 0.0 0.0 0.1 0.1 0.0 0.0 0.0 0.0 0.0 0.1 0.0 0.1 0.0 0.1 0.1 + 0.1 0.1 0.0 0.1 0.2 0.1 0.2 0.2 0.2 -- 0.1 0.1 0.1 0.1 0.1 -- 0.2 -- -- + -- -- -- -- 0.2 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1] + [0.30000000000000004 0.2 0.1 0.4 0.5 0.2 0.30000000000000004 0.4 + 0.6000000000000001 0.6000000000000001 0.2 0.30000000000000004 + 0.30000000000000004 0.6000000000000001 0.5 0.30000000000000004 + 0.30000000000000004 0.30000000000000004 0.4 0.4 0.2 0.4 0.4 0.2 0.2 0.2 + 0.30000000000000004 0.4 0.4 0.5 0.30000000000000004 0.4 0.2 0.5 0.2 0.1 + 0.2 0.30000000000000004 0.2 0.2 0.6000000000000001 0.4 0.2 0.2 0.2 0.2 + 0.9 0.6000000000000001 0.5 0.4 0.4 0.7000000000000001 + 0.7000000000000001 0.8 1.0 1.0 0.5 0.1 0.2 0.2 0.5 0.30000000000000004 + 0.30000000000000004 0.2] + [0.30000000000000004 0.2 0.1 0.30000000000000004 0.30000000000000004 0.1 + 0.1 0.30000000000000004 0.5 0.6000000000000001 0.30000000000000004 0.4 + 0.4 0.7000000000000001 0.5 0.1 0.2 0.1 0.2 0.2 0.2 0.30000000000000004 + 0.30000000000000004 0.2 0.2 0.2 0.30000000000000004 0.4 0.4 0.4 0.2 0.4 + 0.1 0.5 0.2 0.1 0.1 0.2 0.2 0.2 0.4 0.2 0.1 0.1 0.2 0.2 0.8 + 0.6000000000000001 0.4 0.30000000000000004 0.30000000000000004 + 0.7000000000000001 0.6000000000000001 0.7000000000000001 1.1 0.9 0.5 + 0.2 0.30000000000000004 0.2 0.30000000000000004 0.2 0.2 0.1] + [0.4 0.1 0.0 0.1 0.1 0.1 0.0 0.1 0.2 0.30000000000000004 0.2 + 0.30000000000000004 0.30000000000000004 0.5 0.5 0.2 0.1 0.2 0.2 0.2 0.2 + 0.2 0.1 0.1 0.1 0.2 0.2 0.30000000000000004 0.2 0.2 0.1 + 0.30000000000000004 0.2 0.2 0.2 0.1 0.1 0.2 0.30000000000000004 0.1 + 0.30000000000000004 -- 0.1 0.2 0.1 0.1 0.5 -- 0.30000000000000004 -- -- + -- -- -- -- 0.5 0.30000000000000004 0.2 0.30000000000000004 + 0.30000000000000004 0.30000000000000004 0.30000000000000004 0.2 0.1] + [0.4 0.4 0.2 0.30000000000000004 0.1 0.2 0.30000000000000004 0.4 0.2 0.2 + 0.4 0.7000000000000001 0.30000000000000004 0.4 0.2 0.30000000000000004 + 0.2 0.30000000000000004 0.2 0.30000000000000004 0.4 0.2 0.2 0.0 0.1 0.0 + 0.4 0.2 0.30000000000000004 0.30000000000000004 0.2 0.2 0.2 + 0.30000000000000004 0.2 0.4 0.7000000000000001 0.5 0.7000000000000001 + 0.8 0.5 -- 0.30000000000000004 0.2 0.30000000000000004 + 0.30000000000000004 0.30000000000000004 -- 0.4 -- -- -- -- -- -- 0.9 + 0.4 0.6000000000000001 0.6000000000000001 0.4 0.5 0.4 + 0.30000000000000004 0.2] + [0.2 0.2 0.1 0.2 0.1 0.1 0.2 0.2 0.1 0.1 0.30000000000000004 + 0.30000000000000004 0.2 0.2 0.1 0.2 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.0 0.1 + 0.0 0.30000000000000004 0.1 0.2 0.2 0.1 0.1 0.1 0.2 0.1 0.2 0.4 0.2 0.5 + 0.30000000000000004 0.30000000000000004 -- 0.1 0.1 0.2 0.1 0.1 -- 0.1 + -- -- -- -- -- -- 0.30000000000000004 0.2 0.30000000000000004 + 0.30000000000000004 0.2 0.30000000000000004 0.2 0.2 0.1] + [0.2 0.30000000000000004 0.2 0.30000000000000004 0.2 0.2 + 0.30000000000000004 0.30000000000000004 0.2 0.2 0.4 0.6000000000000001 + 0.30000000000000004 0.30000000000000004 0.2 0.30000000000000004 0.2 0.2 + 0.2 0.30000000000000004 0.30000000000000004 0.2 0.2 0.1 0.2 0.0 0.4 0.2 + 0.30000000000000004 0.30000000000000004 0.2 0.2 0.2 0.30000000000000004 + 0.2 0.30000000000000004 0.6000000000000001 0.4 0.6000000000000001 0.5 + 0.4 -- 0.2 0.2 0.30000000000000004 0.2 0.2 -- 0.30000000000000004 -- -- + -- -- -- -- 0.7000000000000001 0.4 0.5 0.5 0.30000000000000004 0.5 0.4 + 0.30000000000000004 0.2] + [0.30000000000000004 0.4 0.2 0.4 0.2 0.2 0.4 0.4 0.2 0.2 0.4 + 0.7000000000000001 0.30000000000000004 0.4 0.2 0.4 0.2 + 0.30000000000000004 0.2 0.4 0.4 0.2 0.2 0.1 0.2 0.1 0.5 0.2 + 0.30000000000000004 0.4 0.30000000000000004 0.2 0.30000000000000004 0.4 + 0.30000000000000004 0.4 0.7000000000000001 0.5 0.8 0.8 0.5 -- + 0.30000000000000004 0.30000000000000004 0.30000000000000004 + 0.30000000000000004 0.2 -- 0.4 -- -- -- -- -- -- 1.0 0.4 + 0.7000000000000001 0.6000000000000001 0.4 0.6000000000000001 0.4 0.4 + 0.30000000000000004] + [0.2 0.30000000000000004 0.2 0.30000000000000004 0.2 0.2 0.2 + 0.30000000000000004 0.2 0.2 0.4 0.6000000000000001 0.30000000000000004 + 0.30000000000000004 0.30000000000000004 0.5 0.30000000000000004 + 0.30000000000000004 0.2 0.30000000000000004 0.30000000000000004 0.2 0.2 + 0.1 0.2 0.1 0.5 0.2 0.30000000000000004 0.4 0.2 0.2 0.30000000000000004 + 0.4 0.30000000000000004 0.30000000000000004 0.6000000000000001 0.4 0.8 + 0.4 0.4 -- 0.30000000000000004 0.30000000000000004 0.2 0.2 0.2 -- 0.2 + -- -- -- -- -- -- 0.7000000000000001 0.4 0.6000000000000001 + 0.6000000000000001 0.4 0.6000000000000001 0.4 0.4 0.2] + [0.1 0.2 0.1 0.2 0.2 0.1 0.1 0.2 0.1 0.1 0.2 0.4 0.2 0.2 0.2 + 0.30000000000000004 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 + 0.30000000000000004 0.1 0.2 0.2 0.2 0.1 0.2 0.30000000000000004 0.2 0.2 + 0.30000000000000004 0.30000000000000004 0.4 0.30000000000000004 0.2 -- + 0.2 0.2 0.2 0.2 0.1 -- 0.2 -- -- -- -- -- -- 0.6000000000000001 0.4 0.4 + 0.5 0.4 0.5 0.4 0.4 0.1] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +generatingApplication [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +firstOrderStatistics [10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10] diff --git a/tests/sample-data/amsu-a-noaa-19.attributes b/tests/sample-data/amsu-a-noaa-19.attributes new file mode 100644 index 00000000..b2d99548 --- /dev/null +++ b/tests/sample-data/amsu-a-noaa-19.attributes @@ -0,0 +1,241 @@ +messageNumber: 1 +tovsOrAtovsProductQualifier->code: '008070' +tovsOrAtovsProductQualifier->units: CODE TABLE +tovsOrAtovsProductQualifier->scale: 0 +tovsOrAtovsProductQualifier->reference: 0 +tovsOrAtovsProductQualifier->width: 4 +tovsOrAtovsProductQualifier->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->code: '033089' +tovsOrAtovsProductQualifier->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->units: K +tovsOrAtovsProductQualifier->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->scale: 2 +tovsOrAtovsProductQualifier->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->reference: 0 +tovsOrAtovsProductQualifier->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->width: 12 +centre->code: ['001033', '001033', '001031'] +centre->units: ['Common CODE TABLE C-1', 'Common CODE TABLE C-1', 'CODE TABLE'] +centre->scale: [0, 0, 0] +centre->reference: [0, 0, 0] +centre->width: [8, 8, 16] +centre->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->code: ['033089', '033089'] +centre->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->units: ['K', 'K'] +centre->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->scale: [2, 2] +centre->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->reference: [0, 0] +centre->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->width: [12, 12] +subCentre->code: '001034' +subCentre->units: Common CODE TABLE C-12 +subCentre->scale: 0 +subCentre->reference: 0 +subCentre->width: 8 +subCentre->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->code: '033089' +subCentre->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->units: K +subCentre->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->scale: 2 +subCentre->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->reference: 0 +subCentre->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->width: 12 +satelliteIdentifier->code: '001007' +satelliteIdentifier->units: CODE TABLE +satelliteIdentifier->scale: 0 +satelliteIdentifier->reference: 0 +satelliteIdentifier->width: 10 +satelliteIdentifier->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->code: '033089' +satelliteIdentifier->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->units: K +satelliteIdentifier->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->scale: 2 +satelliteIdentifier->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->reference: 0 +satelliteIdentifier->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->width: 12 +satelliteSensorIndicator->code: '002048' +satelliteSensorIndicator->units: CODE TABLE +satelliteSensorIndicator->scale: 0 +satelliteSensorIndicator->reference: 0 +satelliteSensorIndicator->width: 4 +satelliteSensorIndicator->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->code: '033089' +satelliteSensorIndicator->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->units: K +satelliteSensorIndicator->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->scale: 2 +satelliteSensorIndicator->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->reference: 0 +satelliteSensorIndicator->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->width: 12 +orbitNumber->code: '005040' +orbitNumber->units: Numeric +orbitNumber->scale: 0 +orbitNumber->reference: 0 +orbitNumber->width: 24 +orbitNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->code: '033089' +orbitNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->units: K +orbitNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->scale: 2 +orbitNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->reference: 0 +orbitNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->width: 12 +satelliteAntennaCorrectionsVersionNumber->code: '025075' +satelliteAntennaCorrectionsVersionNumber->units: Numeric +satelliteAntennaCorrectionsVersionNumber->scale: 0 +satelliteAntennaCorrectionsVersionNumber->reference: 0 +satelliteAntennaCorrectionsVersionNumber->width: 5 +satelliteAntennaCorrectionsVersionNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->code: '033089' +satelliteAntennaCorrectionsVersionNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->units: K +satelliteAntennaCorrectionsVersionNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->scale: 2 +satelliteAntennaCorrectionsVersionNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->reference: 0 +satelliteAntennaCorrectionsVersionNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->width: 12 +scanLineNumber->code: '005041' +scanLineNumber->units: Numeric +scanLineNumber->scale: 0 +scanLineNumber->reference: 0 +scanLineNumber->width: 13 +scanLineNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->code: '033089' +scanLineNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->units: K +scanLineNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->scale: 2 +scanLineNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->reference: 0 +scanLineNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->width: 12 +fieldOfViewNumber->code: '005043' +fieldOfViewNumber->units: Numeric +fieldOfViewNumber->scale: 0 +fieldOfViewNumber->reference: 0 +fieldOfViewNumber->width: 8 +fieldOfViewNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->code: '033089' +fieldOfViewNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->units: K +fieldOfViewNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->scale: 2 +fieldOfViewNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->reference: 0 +fieldOfViewNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->width: 12 +majorFrameCount->code: '025070' +majorFrameCount->units: Numeric +majorFrameCount->scale: 0 +majorFrameCount->reference: 0 +majorFrameCount->width: 4 +majorFrameCount->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->code: '033089' +majorFrameCount->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->units: K +majorFrameCount->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->scale: 2 +majorFrameCount->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->reference: 0 +majorFrameCount->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->width: 12 +scanLineStatusFlagsForAtovs->code: '033030' +scanLineStatusFlagsForAtovs->units: FLAG TABLE +scanLineStatusFlagsForAtovs->scale: 0 +scanLineStatusFlagsForAtovs->reference: 0 +scanLineStatusFlagsForAtovs->width: 24 +scanLineStatusFlagsForAtovs->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->code: '033089' +scanLineStatusFlagsForAtovs->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->units: K +scanLineStatusFlagsForAtovs->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->scale: 2 +scanLineStatusFlagsForAtovs->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->reference: 0 +scanLineStatusFlagsForAtovs->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->width: 12 +scanLineQualityFlagsForAtovs->code: '033031' +scanLineQualityFlagsForAtovs->units: FLAG TABLE +scanLineQualityFlagsForAtovs->scale: 0 +scanLineQualityFlagsForAtovs->reference: 0 +scanLineQualityFlagsForAtovs->width: 24 +scanLineQualityFlagsForAtovs->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->code: '033089' +scanLineQualityFlagsForAtovs->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->units: K +scanLineQualityFlagsForAtovs->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->scale: 2 +scanLineQualityFlagsForAtovs->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->reference: 0 +scanLineQualityFlagsForAtovs->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration->width: 12 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +second->code: '004006' +second->units: s +second->scale: 3 +second->reference: 0 +second->width: 16 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +heightOfStation->code: '007001' +heightOfStation->units: m +heightOfStation->scale: -2 +heightOfStation->reference: -400 +heightOfStation->width: 15 +satelliteZenithAngle->code: '007024' +satelliteZenithAngle->units: deg +satelliteZenithAngle->scale: 2 +satelliteZenithAngle->reference: -9000 +satelliteZenithAngle->width: 15 +bearingOrAzimuth->code: '005021' +bearingOrAzimuth->units: deg +bearingOrAzimuth->scale: 2 +bearingOrAzimuth->reference: 0 +bearingOrAzimuth->width: 16 +solarZenithAngle->code: '007025' +solarZenithAngle->units: deg +solarZenithAngle->scale: 2 +solarZenithAngle->reference: -9000 +solarZenithAngle->width: 15 +solarAzimuth->code: '005022' +solarAzimuth->units: deg +solarAzimuth->scale: 2 +solarAzimuth->reference: 0 +solarAzimuth->width: 16 +fieldOfViewQualityFlagsForAtovs->code: '033033' +fieldOfViewQualityFlagsForAtovs->units: FLAG TABLE +fieldOfViewQualityFlagsForAtovs->scale: 0 +fieldOfViewQualityFlagsForAtovs->reference: 0 +fieldOfViewQualityFlagsForAtovs->width: 24 +radiometerIdentifier->code: '002151' +radiometerIdentifier->units: CODE TABLE +radiometerIdentifier->scale: 0 +radiometerIdentifier->reference: 0 +radiometerIdentifier->width: 11 +instrumentTemperature->code: '012064' +instrumentTemperature->units: K +instrumentTemperature->scale: 1 +instrumentTemperature->reference: 0 +instrumentTemperature->width: 12 +tovsOrAtovsOrAvhrrInstrumentationChannelNumber->code: '002150' +tovsOrAtovsOrAvhrrInstrumentationChannelNumber->units: CODE TABLE +tovsOrAtovsOrAvhrrInstrumentationChannelNumber->scale: 0 +tovsOrAtovsOrAvhrrInstrumentationChannelNumber->reference: 0 +tovsOrAtovsOrAvhrrInstrumentationChannelNumber->width: 6 +log10OfTemperatureRadianceCentralWaveNumberForAtovs->code: '025076' +log10OfTemperatureRadianceCentralWaveNumberForAtovs->units: log (m-1) +log10OfTemperatureRadianceCentralWaveNumberForAtovs->scale: 8 +log10OfTemperatureRadianceCentralWaveNumberForAtovs->reference: 0 +log10OfTemperatureRadianceCentralWaveNumberForAtovs->width: 30 +bandwidthCorrectionCoefficient1ForAtovs->code: '025077' +bandwidthCorrectionCoefficient1ForAtovs->units: Numeric +bandwidthCorrectionCoefficient1ForAtovs->scale: 5 +bandwidthCorrectionCoefficient1ForAtovs->reference: -100000 +bandwidthCorrectionCoefficient1ForAtovs->width: 18 +bandwidthCorrectionCoefficient2ForAtovs->code: '025078' +bandwidthCorrectionCoefficient2ForAtovs->units: Numeric +bandwidthCorrectionCoefficient2ForAtovs->scale: 5 +bandwidthCorrectionCoefficient2ForAtovs->reference: 0 +bandwidthCorrectionCoefficient2ForAtovs->width: 17 +channelQualityFlagsForAtovs->code: '033032' +channelQualityFlagsForAtovs->units: FLAG TABLE +channelQualityFlagsForAtovs->scale: 0 +channelQualityFlagsForAtovs->reference: 0 +channelQualityFlagsForAtovs->width: 24 +brightnessTemperature->code: '012063' +brightnessTemperature->units: K +brightnessTemperature->scale: 2 +brightnessTemperature->reference: 0 +brightnessTemperature->width: 16 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE defined by originating/generating centre +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 +softwareIdentification->code: '025060' +softwareIdentification->units: Numeric +softwareIdentification->scale: 0 +softwareIdentification->reference: 0 +softwareIdentification->width: 14 diff --git a/tests/sample-data/amsu-a-noaa-19.bufr b/tests/sample-data/amsu-a-noaa-19.bufr new file mode 100644 index 0000000000000000000000000000000000000000..97a60f83dc797cda4e5604012bb24086f473d1b4 GIT binary patch literal 1536 zcmcgsX;70_6un6x5KS;5Ws@zGB|(rNK`_wzfou`fn1U0^Vgj-V)QMIRtktlDLDsN^ zML>gyfU-paaX=$cKnSBnS{Biw4WrPaD6JNY(2wa4JI?fP&%AkaXYPCVoO|w@=Mm`5 z0X*OUv;o3Fh;uf?XcI^z3jkmM_UtK|lZ@;ux+IL(>VQC-A~;;z1`_xgO{1_~>(mj8 zuGQFkb%TunCh`G-1Zu$jw5ch^6l3PTjuK?x2I_@C-!8lc!e#6O+({hZ)KrkXf`Auz zZqe!U2xxb@pBBm7H`;sb=5hIIDIF|mJi{Uke6rbwV7w3v_>v8pgBmaW&3nsus_2(q z1ALvT){Adsx0?@nCuY5)?9ro{D9ukCt-8D`$8LF|oX!Tob#vny&N%j88zq^+uX3@S zf!-bM<{7t#MPu%vo)X34iQ>}q!^H#TcKOZHvx=a8Y31(4r`9GT^^2VIoC)$(Y3HnE zu(@)^T(^pgijqAN+07eka|L)Hz4LSg1)ePtPCn^f%hJOm^UeZA5v^y?%Lm|-#G|(HTSA_F;Dfbm9*qHS5zynY}z9DkEuG1?rm(TCf zl+zH1-KONselyfp^}XRtzAvkHxT&xZ$*ftj8gd+`cJ;CTf~>jh*VGm!|{}K90@@+VT1sB z2mAIToUM^Y!nzh_`6s?7SIlf zXfv%IT+sKT4^tTPt@@kx2=Z8S2-Q`6O7S5%FX@Mlw;6YT(%!ejns{03_Ge`L&EkZA zb-lkph*d3k6|^^Ca-Y%?VlQ0DH0f<>7-%ZKY(10flSSDY*~r^hq(vvC{t}E@g(?O) zz?v>qZk{D>uhP@T_fpt>%Oh=CCtc2ssEM(boPK|w@y1R^Lv=H}GNDWO(cu7h#ThWV zo-FFg(sD9jLBidB|3<&)gz~<3 zHsNiyU|NJVFn4-}(myF4&xy^A>Qv3f*p?6!)$TyG#bZ+CSTl=Lbo+IAz8At91NAC! zQLbSh=Y{PbXGhfBs_83>@*z}TFK|%nL28WwTG)CRO3M;bU?np;M{PRlgM7mE5L?&Z z%ZMIJ75qje7D75kldb~tU1{15b(V+xu~SYYAv7{{?7f&&I+yg(G@|45ZhA%06)!5Q zIy0B5$q13~p!Unc)Ps0G-Rb&@=9>B~2}8_lm56atQ~Srap;I|DEcy^;ZcSF<)bOY| z*yx3ats#{I&g^p4gjM^(VOdVz^u*kaj$x|;2Zev!>u>>j>i-003BYt&Vhz!g K8Q?v@8O7gHy*A1K literal 0 HcmV?d00001 diff --git a/tests/sample-data/amsu-a-noaa-19.items b/tests/sample-data/amsu-a-noaa-19.items new file mode 100644 index 00000000..3866f8f5 --- /dev/null +++ b/tests/sample-data/amsu-a-noaa-19.items @@ -0,0 +1,459 @@ +messageNumber 1 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 0 +dataCategory 3 +dataSubCategory 55 +masterTablesVersionNumber 26 +localTablesVersionNumber 1 +typicalYearOfCentury 18 +typicalMonth 9 +typicalDay 13 +typicalHour 13 +typicalMinute 36 +typicalDate 20180913 +typicalTime 133600 +rdbType 2 +oldSubtype 155 +localYear 2018 +localMonth 9 +localDay 13 +localHour 13 +localMinute 36 +localSecond 8 +rdbtimeDay 13 +rdbtimeHour 13 +rdbtimeMinute 46 +rdbtimeSecond 53 +rdbtimeTime 134653 +rectimeDay 13 +rectimeHour 13 +rectimeMinute 46 +rectimeSecond 53 +restricted 0 +correction1 0 +correction1Part 0 +correction2 0 +correction2Part 0 +correction3 0 +correction3Part 0 +correction4 0 +correction4Part 0 +qualityControl 70 +newSubtype 0 +numberOfSubsets 30 +localLongitude1 10.1123 +localLatitude1 51.6331 +localLongitude2 43.2584 +localLatitude2 58.9649 +localNumberOfObservations 150 +satelliteID 223 +observedData 1 +compressedData 1 +unexpandedDescriptors [310009 222000 236000 101127 31031 1031 1032 101015 33089 25060] +tovsOrAtovsProductQualifier [[3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]] +tovsOrAtovsProductQualifier->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --]] +centre [[254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 + 254 254 254 254 254 254 254 254 254 254 254 254] + [254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 + 254 254 254 254 254 254 254 254 254 254 254 254] + [254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 + 254 254 254 254 254 254 254 254 254 254 254 254]] +centre->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --]] +subCentre [[180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 + 180 180 180 180 180 180 180 180 180 180 180 180] + [180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 + 180 180 180 180 180 180 180 180 180 180 180 180]] +subCentre->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --]] +satelliteIdentifier [223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 + 223 223 223 223 223 223 223 223 223 223 223 223] +satelliteIdentifier->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] +satelliteSensorIndicator [3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3] +satelliteSensorIndicator->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] +orbitNumber [49465 49465 49465 49465 49465 49465 49465 49465 49465 49465 49465 49465 + 49465 49465 49465 49465 49465 49465 49465 49465 49465 49465 49465 49465 + 49465 49465 49465 49465 49465 49465] +orbitNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] +satelliteAntennaCorrectionsVersionNumber [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] +satelliteAntennaCorrectionsVersionNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] +scanLineNumber [8180 8180 8180 8180 8180 8180 8180 8180 8180 8180 8180 8180 8180 8180 + 8180 8180 8180 8180 8180 8180 8180 8180 8180 8180 8180 8180 8180 8180 + 8180 8180] +scanLineNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] +fieldOfViewNumber [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 + 25 26 27 28 29 30] +fieldOfViewNumber->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] +majorFrameCount [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] +majorFrameCount->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] +scanLineStatusFlagsForAtovs [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] +scanLineStatusFlagsForAtovs->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] +scanLineQualityFlagsForAtovs [327808 327808 327808 327808 327808 327808 327808 327808 327808 327808 + 327808 327808 327808 327808 327808 327808 327808 327808 327808 327808 + 327808 327808 327808 327808 327808 327808 327808 327808 327808 327808] +scanLineQualityFlagsForAtovs->noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] +year [2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 + 2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 + 2018 2018] +month [9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9] +day [13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13] +hour [13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13] +minute [36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 + 36 36 36 36 36 36] +second [39.64 39.843 40.046 40.249 40.452 40.655 40.858 41.061 41.264 41.467 + 41.67 41.873 42.076 42.279 42.482 42.685 42.888 43.091 43.294 43.497 + 43.7 43.903 44.106 44.309 44.512 44.715 44.918 45.121 45.324 45.527] +latitude [53.2632 53.8759 54.3657 54.7709 55.115 55.4136 55.6773 55.9135 56.128 + 56.3249 56.5075 56.6784 56.8397 56.9931 57.1399 57.2814 57.4185 57.5522 + 57.6831 57.8119 57.9391 58.0651 58.1902 58.3145 58.4377 58.5591 58.6771 + 58.7889 58.8886 58.9649] +longitude [10.1123 11.9438 13.5067 14.8754 16.0985 17.21 18.2343 19.19 20.0919 + 20.9516 21.7789 22.5822 23.3689 24.1459 24.9194 25.6957 26.4812 27.2825 + 28.1066 28.9616 29.8565 30.8023 31.812 32.9018 34.0925 35.4116 36.8959 + 38.5979 40.5944 43.0064] +heightOfStation [850900. 850900. 850900. 850900. 850900. 850900. 850900. 850900. 850900. + 850900. 850900. 850900. 850900. 850900. 850900. 850900. 850900. 850900. + 850900. 850900. 850900. 850900. 850900. 850900. 850900. 850900. 850900. + 850900. 850900. 850900.] +satelliteZenithAngle [57.83 53.24 48.87 44.65 40.53 36.5 32.53 28.61 24.73 20.88 17.05 13.24 + 9.45 5.66 1.88 1.88 5.66 9.45 13.24 17.05 20.88 24.73 28.61 32.53 + 36.5 40.53 44.65 48.87 53.24 57.82] +bearingOrAzimuth [ 60.47 61.94 63.21 64.32 65.33 66.24 67.08 67.87 68.62 69.34 + 70.03 70.7 71.36 72.01 72.66 253.32 253.98 254.66 255.36 256.08 + 256.84 257.64 258.5 259.43 260.45 261.57 262.84 264.3 266.01 268.08] +solarZenithAngle [57.39 58.59 59.59 60.44 61.19 61.87 62.48 63.05 63.58 64.08 64.55 65.01 + 65.46 65.9 66.33 66.76 67.19 67.63 68.07 68.53 69.01 69.51 70.04 70.61 + 71.22 71.9 72.66 73.52 74.53 75.73] +solarAzimuth [223.19 224.88 226.32 227.58 228.7 229.72 230.65 231.52 232.34 233.12 + 233.87 234.59 235.31 236.01 236.71 237.41 238.11 238.84 239.58 240.35 + 241.15 242. 242.91 243.89 244.96 246.14 247.47 248.99 250.78 252.93] +fieldOfViewQualityFlagsForAtovs [6291456 6291456 6291456 6291456 6291456 6291456 6291456 6291456 6291456 + 6291456 6291456 6291456 6291456 6291456 6291456 6291456 6291456 6291456 + 6291456 6291456 6291456 6291456 6291456 6291456 6291456 6291456 6291456 + 6291456 6291456 6291456] +radiometerIdentifier [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3] + [4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4] + [6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6]] +instrumentTemperature [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] + [295.0 295.0 295.0 295.0 295.0 295.0 295.0 295.0 295.0 295.0 295.0 295.0 + 295.0 295.0 295.0 295.0 295.0 295.0 295.0 295.0 295.0 295.0 295.0 295.0 + 295.0 295.0 295.0 295.0 295.0 295.0] + [263.5 263.5 263.5 263.5 263.5 263.5 263.5 263.5 263.5 263.5 263.5 263.5 + 263.5 263.5 263.5 263.5 263.5 263.5 263.5 263.5 263.5 263.5 263.5 263.5 + 263.5 263.5 263.5 263.5 263.5 263.5] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --]] +tovsOrAtovsOrAvhrrInstrumentationChannelNumber [[28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28] + [29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29] + [30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30] + [31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31] + [32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32] + [33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 33 33] + [34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34] + [35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 + 35 35 35 35 35 35] + [36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 + 36 36 36 36 36 36] + [37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37] + [38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 38 38] + [39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 39 39] + [40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 40 40] + [41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 + 41 41 41 41 41 41] + [42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 + 42 42 42 42 42 42]] +log10OfTemperatureRadianceCentralWaveNumberForAtovs [[1.89975643 1.89975643 1.89975643 1.89975643 1.89975643 1.89975643 + 1.89975643 1.89975643 1.89975643 1.89975643 1.89975643 1.89975643 + 1.89975643 1.89975643 1.89975643 1.89975643 1.89975643 1.89975643 + 1.89975643 1.89975643 1.89975643 1.89975643 1.89975643 1.89975643 + 1.89975643 1.89975643 1.89975643 1.89975643 1.89975643 1.89975643] + [2.02010894 2.02010894 2.02010894 2.02010894 2.02010894 2.02010894 + 2.02010894 2.02010894 2.02010894 2.02010894 2.02010894 2.02010894 + 2.02010894 2.02010894 2.02010894 2.02010894 2.02010894 2.02010894 + 2.02010894 2.02010894 2.02010894 2.02010894 2.02010894 2.02010894 + 2.02010894 2.02010894 2.02010894 2.02010894 2.02010894 2.02010894] + [2.22474718 2.22474718 2.22474718 2.22474718 2.22474718 2.22474718 + 2.22474718 2.22474718 2.22474718 2.22474718 2.22474718 2.22474718 + 2.22474718 2.22474718 2.22474718 2.22474718 2.22474718 2.22474718 + 2.22474718 2.22474718 2.22474718 2.22474718 2.22474718 2.22474718 + 2.22474718 2.22474718 2.22474718 2.22474718 2.22474718 2.22474718] + [2.24581313 2.24581313 2.24581313 2.24581313 2.24581313 2.24581313 + 2.24581313 2.24581313 2.24581313 2.24581313 2.24581313 2.24581313 + 2.24581313 2.24581313 2.24581313 2.24581313 2.24581313 2.24581313 + 2.24581313 2.24581313 2.24581313 2.24581313 2.24581313 2.24581313 + 2.24581313 2.24581313 2.24581313 2.24581313 2.24581313 2.24581313] + [2.25231171 2.25231171 2.25231171 2.25231171 2.25231171 2.25231171 + 2.25231171 2.25231171 2.25231171 2.25231171 2.25231171 2.25231171 + 2.25231171 2.25231171 2.25231171 2.25231171 2.25231171 2.25231171 + 2.25231171 2.25231171 2.25231171 2.25231171 2.25231171 2.25231171 + 2.25231171 2.25231171 2.25231171 2.25231171 2.25231171 2.25231171] + [2.25877833 2.25877833 2.25877833 2.25877833 2.25877833 2.25877833 + 2.25877833 2.25877833 2.25877833 2.25877833 2.25877833 2.25877833 + 2.25877833 2.25877833 2.25877833 2.25877833 2.25877833 2.25877833 + 2.25877833 2.25877833 2.25877833 2.25877833 2.25877833 2.25877833 + 2.25877833 2.25877833 2.25877833 2.25877833 2.25877833 2.25877833] + [2.26306796 2.26306796 2.26306796 2.26306796 2.26306796 2.26306796 + 2.26306796 2.26306796 2.26306796 2.26306796 2.26306796 2.26306796 + 2.26306796 2.26306796 2.26306796 2.26306796 2.26306796 2.26306796 + 2.26306796 2.26306796 2.26306796 2.26306796 2.26306796 2.26306796 + 2.26306796 2.26306796 2.26306796 2.26306796 2.26306796 2.26306796] + [2.26747227 2.26747227 2.26747227 2.26747227 2.26747227 2.26747227 + 2.26747227 2.26747227 2.26747227 2.26747227 2.26747227 2.26747227 + 2.26747227 2.26747227 2.26747227 2.26747227 2.26747227 2.26747227 + 2.26747227 2.26747227 2.26747227 2.26747227 2.26747227 2.26747227 + 2.26747227 2.26747227 2.26747227 2.26747227 2.26747227 2.26747227] + [2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073] + [2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073] + [2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073] + [2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073] + [2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073] + [2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 + 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073 2.28126073] + [2.47256923 2.47256923 2.47256923 2.47256923 2.47256923 2.47256923 + 2.47256923 2.47256923 2.47256923 2.47256923 2.47256923 2.47256923 + 2.47256923 2.47256923 2.47256923 2.47256923 2.47256923 2.47256923 + 2.47256923 2.47256923 2.47256923 2.47256923 2.47256923 2.47256923 + 2.47256923 2.47256923 2.47256923 2.47256923 2.47256923 2.47256923]] +bandwidthCorrectionCoefficient1ForAtovs [[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.] + [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. 0. 0. 0. 0.]] +bandwidthCorrectionCoefficient2ForAtovs [[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.] + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1.]] +channelQualityFlagsForAtovs [[3670016 3670016 3670016 3670016 3670016 3670016 3670016 3670016 3670016 + 3670016 3670016 3670016 3670016 3670016 3670016 3670016 3670016 3670016 + 3670016 3670016 3670016 3670016 3670016 3670016 3670016 3670016 3670016 + 3670016 3670016 3670016] + [3670016 3670016 3670016 3670016 3670016 3670016 3670016 3670016 3670016 + 3670016 3670016 3670016 3670016 3670016 3670016 3670016 3670016 3670016 + 3670016 3670016 3670016 3670016 3670016 3670016 3670016 3670016 3670016 + 3670016 3670016 3670016] + [1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864] + [1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864] + [1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864] + [1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864] + [1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864] + [1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864] + [1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864] + [1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864] + [1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864] + [1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864] + [1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864] + [1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864] + [1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 1572864 + 1572864 1572864 1572864]] +brightnessTemperature [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- --] + [271.52 268.36 254.23000000000002 234.31 231.64000000000001 228.35 + 226.65 225.5 223.85 240.84 274.01 276.91 273.59000000000003 259.12 + 274.56 276.12 277.05 276.37 273.90000000000003 276.76 276.61 273.13 + 268.21 274.89 273.51 273.1 270.74 262.73 268.72 268.44] + [255.89000000000001 257.62 257.12 254.96 254.99 254.89000000000001 + 254.67000000000002 254.55 254.39000000000001 258.53000000000003 265.65 + 266.94 266.2 263.18 266.63 266.9 267.06 266.85 266.19 266.44 + 266.09000000000003 264.53000000000003 262.81 263.25 261.86 260.92 + 259.24 256.47 255.45000000000002 253.85] + [240.29 242.18 243.8 244.85 246.27 246.95000000000002 247.63 248.44 + 248.49 250.31 251.69 252.45000000000002 252.67000000000002 251.97 + 252.82 252.66 252.5 252.13 252.01000000000002 251.84 251.05 250.32 + 249.12 248.70000000000002 247.88 246.87 244.65 243.27 241.65 239.53] + [226.89000000000001 228.83 230.21 231.09 232.20000000000002 233.21 + 233.97 234.62 235.36 235.89000000000001 236.67000000000002 236.75 + 237.15 237.42000000000002 237.36 237.37 237.1 237.25 236.79 + 236.20000000000002 235.84 235.25 234.8 233.95000000000002 232.87 232.26 + 231.4 230.31 229.25 228.27] + [220.09 221.94 222.52 222.87 223.08 224.35 225.22 225.8 + 225.39000000000001 226.14000000000001 226.27 226.63 227.21 226.56 + 227.19 227.07 226.93 226.92000000000002 226.70000000000002 226.93 + 226.47 226.20000000000002 225.92000000000002 225.65 225.4 224.18 224.38 + 223.94 223.70000000000002 222.68] + [220.49 221.12 220.71 220.97 221.06 220.25 220.33 221.36 + 221.48000000000002 222.37 222.33 221.65 221.64000000000001 221.26 + 221.15 221.04 221.18 221.51 220.64000000000001 219.91 221.28 221.6 + 221.91 221.43 222.78 221.96 222.1 222.85 221.89000000000001 222.49] + [218.35 218.37 218.28 218.35 218.51 218.36 218.4 218.51 218.33 + 218.39000000000001 218.35 218.41 218.63 218.47 218.63 218.57 218.79 + 218.57 218.57 218.75 218.8 218.68 218.94 218.98000000000002 219.04 + 218.88 218.93 218.54 218.59 218.64000000000001] + [220.88 220.52 220.44 219.9 219.74 219.82 219.86 220.12 + 219.42000000000002 219.78 219.74 219.72 219.86 219.48000000000002 + 219.93 219.64000000000001 219.79 219.65 219.57 219.9 219.65 219.6 + 219.71 219.6 219.89000000000001 220.27 219.71 219.79 219.76 219.88] + [225.53 224.43 224.28 223.34 223.3 223.17000000000002 223.02 223.05 + 222.91 222.71 222.85 222.77 222.33 222.57 222.25 222.19 222.43 222.13 + 222.81 222.22 222.76 222.61 223.07 222.75 223.35 223.51 223.21 223.84 + 223.83 224.92000000000002] + [233.35 232.77 231.94 231.05 230.54 229.9 229.53 228.88 + 228.98000000000002 228.84 229.09 228.49 228.83 228.94 228.69 228.11 + 228.33 228.51 228.57 228.20000000000002 228.65 229.37 229.4 229.56 + 230.25 230.81 231.29 231.36 232.73000000000002 233.58] + [245.08 244.17000000000002 244.20000000000002 242.71 242.48000000000002 + 240.76 240.92000000000002 240.16 240.57 240.48000000000002 239.9 238.6 + 239.87 239.13 238.56 239.23000000000002 239.46 239.53 + 239.23000000000002 238.77 240.04 240.32 240.77 240.70000000000002 + 240.70000000000002 241.78 242.05 242.61 243.33 244.3] + [256.16 255.22 255.77 253.35 255.44 252.56 252.0 252.68 251.04 + 252.48000000000002 250.17000000000002 251.76000000000002 + 251.70000000000002 249.91 250.74 251.16 251.47 251.0 251.22 251.41 + 251.74 251.72 251.97 253.42000000000002 252.84 252.85 253.06 + 254.01000000000002 254.6 256.5] + [278.47 272.44 249.68 217.36 215.67000000000002 213.04 211.59 211.11 + 211.11 235.74 277.44 280.44 275.7 258.6 278.99 279.95 280.91 279.86 + 276.95 280.63 280.54 276.29 271.08 279.5 278.35 278.39 274.8 264.29 + 272.25 274.11]] +generatingApplication [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] +softwareIdentification [801 801 801 801 801 801 801 801 801 801 801 801 801 801 801 801 801 801 + 801 801 801 801 801 801 801 801 801 801 801 801] diff --git a/tests/sample-data/amv-goes-9.attributes b/tests/sample-data/amv-goes-9.attributes new file mode 100644 index 00000000..f894a367 --- /dev/null +++ b/tests/sample-data/amv-goes-9.attributes @@ -0,0 +1,331 @@ +messageNumber: 1 +satelliteIdentifier->code: '001007' +satelliteIdentifier->units: CODE TABLE +satelliteIdentifier->scale: 0 +satelliteIdentifier->reference: 0 +satelliteIdentifier->width: 10 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +satelliteClassification->code: '002020' +satelliteClassification->units: CODE TABLE +satelliteClassification->scale: 0 +satelliteClassification->reference: 0 +satelliteClassification->width: 9 +segmentSizeAtNadirInXDirection->code: '002028' +segmentSizeAtNadirInXDirection->units: m +segmentSizeAtNadirInXDirection->scale: 0 +segmentSizeAtNadirInXDirection->reference: 0 +segmentSizeAtNadirInXDirection->width: 18 +segmentSizeAtNadirInYDirection->code: '002029' +segmentSizeAtNadirInYDirection->units: m +segmentSizeAtNadirInYDirection->scale: 0 +segmentSizeAtNadirInYDirection->reference: 0 +segmentSizeAtNadirInYDirection->width: 18 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +second->code: '004006' +second->units: s +second->scale: 0 +second->reference: 0 +second->width: 6 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +satelliteInstrumentUsedInDataProcessing->code: '002152' +satelliteInstrumentUsedInDataProcessing->units: FLAG TABLE +satelliteInstrumentUsedInDataProcessing->scale: 0 +satelliteInstrumentUsedInDataProcessing->reference: 0 +satelliteInstrumentUsedInDataProcessing->width: 31 +satelliteDerivedWindComputationMethod->code: '002023' +satelliteDerivedWindComputationMethod->units: CODE TABLE +satelliteDerivedWindComputationMethod->scale: 0 +satelliteDerivedWindComputationMethod->reference: 0 +satelliteDerivedWindComputationMethod->width: 4 +pressure->code: '007004' +pressure->units: Pa +pressure->scale: -1 +pressure->reference: 0 +pressure->width: 14 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033036' +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +pressure->qualityControl->qualityControl->qualityControl->code: '033035' +pressure->qualityControl->qualityControl->qualityControl->units: CODE TABLE +pressure->qualityControl->qualityControl->qualityControl->scale: 0 +pressure->qualityControl->qualityControl->qualityControl->reference: 0 +pressure->qualityControl->qualityControl->qualityControl->width: 4 +pressure->percentConfidence->percentConfidence->percentConfidence->code: '033007' +pressure->percentConfidence->percentConfidence->percentConfidence->units: % +pressure->percentConfidence->percentConfidence->percentConfidence->scale: 0 +pressure->percentConfidence->percentConfidence->percentConfidence->reference: 0 +pressure->percentConfidence->percentConfidence->percentConfidence->width: 7 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033036' +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +pressure->qualityControl->qualityControl->code: '033035' +pressure->qualityControl->qualityControl->units: CODE TABLE +pressure->qualityControl->qualityControl->scale: 0 +pressure->qualityControl->qualityControl->reference: 0 +pressure->qualityControl->qualityControl->width: 4 +pressure->percentConfidence->percentConfidence->code: '033007' +pressure->percentConfidence->percentConfidence->units: % +pressure->percentConfidence->percentConfidence->scale: 0 +pressure->percentConfidence->percentConfidence->reference: 0 +pressure->percentConfidence->percentConfidence->width: 7 +pressure->nominalConfidenceThreshold->code: '033036' +pressure->nominalConfidenceThreshold->units: % +pressure->nominalConfidenceThreshold->scale: 0 +pressure->nominalConfidenceThreshold->reference: 0 +pressure->nominalConfidenceThreshold->width: 7 +pressure->qualityControl->code: '033035' +pressure->qualityControl->units: CODE TABLE +pressure->qualityControl->scale: 0 +pressure->qualityControl->reference: 0 +pressure->qualityControl->width: 4 +pressure->percentConfidence->code: '033007' +pressure->percentConfidence->units: % +pressure->percentConfidence->scale: 0 +pressure->percentConfidence->reference: 0 +pressure->percentConfidence->width: 7 +windDirection->code: '011001' +windDirection->units: deg +windDirection->scale: 0 +windDirection->reference: 0 +windDirection->width: 9 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033036' +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +windDirection->qualityControl->qualityControl->qualityControl->code: '033035' +windDirection->qualityControl->qualityControl->qualityControl->units: CODE TABLE +windDirection->qualityControl->qualityControl->qualityControl->scale: 0 +windDirection->qualityControl->qualityControl->qualityControl->reference: 0 +windDirection->qualityControl->qualityControl->qualityControl->width: 4 +windDirection->percentConfidence->percentConfidence->percentConfidence->code: '033007' +windDirection->percentConfidence->percentConfidence->percentConfidence->units: % +windDirection->percentConfidence->percentConfidence->percentConfidence->scale: 0 +windDirection->percentConfidence->percentConfidence->percentConfidence->reference: 0 +windDirection->percentConfidence->percentConfidence->percentConfidence->width: 7 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033036' +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +windDirection->qualityControl->qualityControl->code: '033035' +windDirection->qualityControl->qualityControl->units: CODE TABLE +windDirection->qualityControl->qualityControl->scale: 0 +windDirection->qualityControl->qualityControl->reference: 0 +windDirection->qualityControl->qualityControl->width: 4 +windDirection->percentConfidence->percentConfidence->code: '033007' +windDirection->percentConfidence->percentConfidence->units: % +windDirection->percentConfidence->percentConfidence->scale: 0 +windDirection->percentConfidence->percentConfidence->reference: 0 +windDirection->percentConfidence->percentConfidence->width: 7 +windDirection->nominalConfidenceThreshold->code: '033036' +windDirection->nominalConfidenceThreshold->units: % +windDirection->nominalConfidenceThreshold->scale: 0 +windDirection->nominalConfidenceThreshold->reference: 0 +windDirection->nominalConfidenceThreshold->width: 7 +windDirection->qualityControl->code: '033035' +windDirection->qualityControl->units: CODE TABLE +windDirection->qualityControl->scale: 0 +windDirection->qualityControl->reference: 0 +windDirection->qualityControl->width: 4 +windDirection->percentConfidence->code: '033007' +windDirection->percentConfidence->units: % +windDirection->percentConfidence->scale: 0 +windDirection->percentConfidence->reference: 0 +windDirection->percentConfidence->width: 7 +windSpeed->code: '011002' +windSpeed->units: m/s +windSpeed->scale: 1 +windSpeed->reference: 0 +windSpeed->width: 12 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033036' +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +windSpeed->qualityControl->qualityControl->qualityControl->code: '033035' +windSpeed->qualityControl->qualityControl->qualityControl->units: CODE TABLE +windSpeed->qualityControl->qualityControl->qualityControl->scale: 0 +windSpeed->qualityControl->qualityControl->qualityControl->reference: 0 +windSpeed->qualityControl->qualityControl->qualityControl->width: 4 +windSpeed->percentConfidence->percentConfidence->percentConfidence->code: '033007' +windSpeed->percentConfidence->percentConfidence->percentConfidence->units: % +windSpeed->percentConfidence->percentConfidence->percentConfidence->scale: 0 +windSpeed->percentConfidence->percentConfidence->percentConfidence->reference: 0 +windSpeed->percentConfidence->percentConfidence->percentConfidence->width: 7 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033036' +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +windSpeed->qualityControl->qualityControl->code: '033035' +windSpeed->qualityControl->qualityControl->units: CODE TABLE +windSpeed->qualityControl->qualityControl->scale: 0 +windSpeed->qualityControl->qualityControl->reference: 0 +windSpeed->qualityControl->qualityControl->width: 4 +windSpeed->percentConfidence->percentConfidence->code: '033007' +windSpeed->percentConfidence->percentConfidence->units: % +windSpeed->percentConfidence->percentConfidence->scale: 0 +windSpeed->percentConfidence->percentConfidence->reference: 0 +windSpeed->percentConfidence->percentConfidence->width: 7 +windSpeed->nominalConfidenceThreshold->code: '033036' +windSpeed->nominalConfidenceThreshold->units: % +windSpeed->nominalConfidenceThreshold->scale: 0 +windSpeed->nominalConfidenceThreshold->reference: 0 +windSpeed->nominalConfidenceThreshold->width: 7 +windSpeed->qualityControl->code: '033035' +windSpeed->qualityControl->units: CODE TABLE +windSpeed->qualityControl->scale: 0 +windSpeed->qualityControl->reference: 0 +windSpeed->qualityControl->width: 4 +windSpeed->percentConfidence->code: '033007' +windSpeed->percentConfidence->units: % +windSpeed->percentConfidence->scale: 0 +windSpeed->percentConfidence->reference: 0 +windSpeed->percentConfidence->width: 7 +satelliteChannelCentreFrequency->code: '002153' +satelliteChannelCentreFrequency->units: Hz +satelliteChannelCentreFrequency->scale: -8 +satelliteChannelCentreFrequency->reference: 0 +satelliteChannelCentreFrequency->width: 26 +satelliteChannelBandWidth->code: '002154' +satelliteChannelBandWidth->units: Hz +satelliteChannelBandWidth->scale: -8 +satelliteChannelBandWidth->reference: 0 +satelliteChannelBandWidth->width: 26 +coldestClusterTemperature->code: '012071' +coldestClusterTemperature->units: K +coldestClusterTemperature->scale: 1 +coldestClusterTemperature->reference: 0 +coldestClusterTemperature->width: 12 +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033036' +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +coldestClusterTemperature->qualityControl->qualityControl->qualityControl->code: '033035' +coldestClusterTemperature->qualityControl->qualityControl->qualityControl->units: CODE TABLE +coldestClusterTemperature->qualityControl->qualityControl->qualityControl->scale: 0 +coldestClusterTemperature->qualityControl->qualityControl->qualityControl->reference: 0 +coldestClusterTemperature->qualityControl->qualityControl->qualityControl->width: 4 +coldestClusterTemperature->percentConfidence->percentConfidence->percentConfidence->code: '033007' +coldestClusterTemperature->percentConfidence->percentConfidence->percentConfidence->units: % +coldestClusterTemperature->percentConfidence->percentConfidence->percentConfidence->scale: 0 +coldestClusterTemperature->percentConfidence->percentConfidence->percentConfidence->reference: 0 +coldestClusterTemperature->percentConfidence->percentConfidence->percentConfidence->width: 7 +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033036' +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +coldestClusterTemperature->qualityControl->qualityControl->code: '033035' +coldestClusterTemperature->qualityControl->qualityControl->units: CODE TABLE +coldestClusterTemperature->qualityControl->qualityControl->scale: 0 +coldestClusterTemperature->qualityControl->qualityControl->reference: 0 +coldestClusterTemperature->qualityControl->qualityControl->width: 4 +coldestClusterTemperature->percentConfidence->percentConfidence->code: '033007' +coldestClusterTemperature->percentConfidence->percentConfidence->units: % +coldestClusterTemperature->percentConfidence->percentConfidence->scale: 0 +coldestClusterTemperature->percentConfidence->percentConfidence->reference: 0 +coldestClusterTemperature->percentConfidence->percentConfidence->width: 7 +coldestClusterTemperature->nominalConfidenceThreshold->code: '033036' +coldestClusterTemperature->nominalConfidenceThreshold->units: % +coldestClusterTemperature->nominalConfidenceThreshold->scale: 0 +coldestClusterTemperature->nominalConfidenceThreshold->reference: 0 +coldestClusterTemperature->nominalConfidenceThreshold->width: 7 +coldestClusterTemperature->qualityControl->code: '033035' +coldestClusterTemperature->qualityControl->units: CODE TABLE +coldestClusterTemperature->qualityControl->scale: 0 +coldestClusterTemperature->qualityControl->reference: 0 +coldestClusterTemperature->qualityControl->width: 4 +coldestClusterTemperature->percentConfidence->code: '033007' +coldestClusterTemperature->percentConfidence->units: % +coldestClusterTemperature->percentConfidence->scale: 0 +coldestClusterTemperature->percentConfidence->reference: 0 +coldestClusterTemperature->percentConfidence->width: 7 +heightAssignmentMethod->code: '002163' +heightAssignmentMethod->units: CODE TABLE +heightAssignmentMethod->scale: 0 +heightAssignmentMethod->reference: 0 +heightAssignmentMethod->width: 4 +tracerCorrelationMethod->code: '002164' +tracerCorrelationMethod->units: CODE TABLE +tracerCorrelationMethod->scale: 0 +tracerCorrelationMethod->reference: 0 +tracerCorrelationMethod->width: 3 +landOrSeaQualifier->code: '008012' +landOrSeaQualifier->units: CODE TABLE +landOrSeaQualifier->scale: 0 +landOrSeaQualifier->reference: 0 +landOrSeaQualifier->width: 2 +satelliteZenithAngle->code: '007024' +satelliteZenithAngle->units: deg +satelliteZenithAngle->scale: 2 +satelliteZenithAngle->reference: -9000 +satelliteZenithAngle->width: 15 +originOfFirstGuessInformationForGoesIOrMSoundings->code: '002057' +originOfFirstGuessInformationForGoesIOrMSoundings->units: CODE TABLE +originOfFirstGuessInformationForGoesIOrMSoundings->scale: 0 +originOfFirstGuessInformationForGoesIOrMSoundings->reference: 0 +originOfFirstGuessInformationForGoesIOrMSoundings->width: 4 +timeSignificance->code: '008021' +timeSignificance->units: CODE TABLE +timeSignificance->scale: 0 +timeSignificance->reference: 0 +timeSignificance->width: 5 +timePeriod->code: '004024' +timePeriod->units: h +timePeriod->scale: 0 +timePeriod->reference: -2048 +timePeriod->width: 12 +airTemperature->code: '012001' +airTemperature->units: K +airTemperature->scale: 1 +airTemperature->reference: 0 +airTemperature->width: 12 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 diff --git a/tests/sample-data/amv-goes-9.bufr b/tests/sample-data/amv-goes-9.bufr new file mode 100644 index 0000000000000000000000000000000000000000..0cac44e241b5c529c2c6ea7ebeafcf92588e313d GIT binary patch literal 1706 zcmZ5&ZrGbELm79T>rURJm1}3W*7_<(Y;+w{>guyXgUY=2&QNfW#k$oD&QU)kn z8Hufe#HL6M0|V*py1PngUKzfI{$?A zSGcWBc%|K>5@8+ol67IqJlO^Y2F9ESwoez17BQC{$LdXW_l&ORQ=GnbaJYIXs>A+S4jXgF$AQ$WNhS z#unu*W%6n)-9bP3?0r5h&*M+p0&-41HBUC}xihJ&=|ogiQA9*kR$f)Z zmIDVqiX6Lj<_`~1$!Tt{)V*)S31uNDA5v&e*{eIjV8J#+~I5*#X z)FH?tygxkBpa=^JpAU5Yl03nDOrU9Wz}wCZ@wZ%c{*{wI&Ao zyOpiX*p`^FH6_TZ*9I8W>!a2@{ODORF|~l3v4gGgf*!kr7IQ(h=p$w(fr<|sR$o!^ zSuk;N(;O>7A?5>&Ju)&TTpPOjr4|MpVs-d3@dXFp=ZgKyLvAu?@aX24MH}yuRq84; zbK*Su*}L(x$)f120}Tv{d0$F-PxBsS2Kfo%BjykG59)u&Ge4+f2Z}ZRkZ=6Y{QrQ! zs)kjo7A;!EwQAMs|3Ggua;*R|wX_zjTD5BbU{TP>#KIw<-~gc*7?@ZX;5?`xxfFvS z!zq@=B5QB!Sx*xpKlOc#%@*1A+4|YfbK2S0g|@zzWO`CIt=#m~fz3~4AMLuPnft8# z?B_XQ*Vn0L-!o!8@mA+u_SDAoQ`SdI*96@@^M3Yoi?!=xysqy_;huOa^3HW_rt?$E zyIw~u-9Gca`MJXAxE)j1S2O_aWMBi8a=aTrBm|Hlz$n18z>$eVz@do&$UNX9ws`mZ zj(Mi6nmut__GxoGx;XcBcHH$jD_;8f&(L)*zb|N$#T6{EH?t;8@aSUeYuEO!w+y^A zXTCvH-}`+^6<0)-8CG5Tu|~Put$gj;>bRoCOD*jZw#weGarwAH(h4uk0kV@J0p$AI5HEnq1Q1D@fFQ#emIP%+362B6=r{*91xSFHWCRL^7N9d9 P1TZy-Ff3qTFb4tvKFU;T literal 0 HcmV?d00001 diff --git a/tests/sample-data/amv-goes-9.items b/tests/sample-data/amv-goes-9.items new file mode 100644 index 00000000..442fa39f --- /dev/null +++ b/tests/sample-data/amv-goes-9.items @@ -0,0 +1,763 @@ +messageNumber 1 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 0 +dataCategory 5 +dataSubCategory 87 +masterTablesVersionNumber 13 +localTablesVersionNumber 1 +typicalYearOfCentury 3 +typicalMonth 6 +typicalDay 18 +typicalHour 23 +typicalMinute 25 +typicalDate 20030618 +typicalTime 232500 +rdbType 3 +oldSubtype 87 +localYear 2003 +localMonth 6 +localDay 18 +localHour 23 +localMinute 25 +localSecond 0 +rdbtimeDay 17 +rdbtimeHour 17 +rdbtimeMinute 32 +rdbtimeSecond 11 +rdbtimeTime 173211 +rectimeDay 10 +rectimeHour 10 +rectimeMinute 0 +rectimeSecond 0 +restricted 0 +correction1 0 +correction1Part 0 +correction2 0 +correction2Part 0 +correction3 0 +correction3Part 0 +correction4 0 +correction4Part 0 +qualityControl 70 +newSubtype 0 +numberOfSubsets 42 +localLongitude1 144.1226 +localLatitude1 -57.2345 +localLongitude2 168.97272 +localLatitude2 -55.77964 +localNumberOfObservations 42 +satelliteID 253 +observedData 1 +compressedData 1 +unexpandedDescriptors [310014 222000 236000 101103 31031 1031 1032 101004 33007 222000 + 237000 1031 1032 101004 33035 222000 237000 1031 1032 101004 + 33036 222000 237000 1031 1032 101004 33007 222000 237000 1031 + 1032 101004 33035 222000 237000 1031 1032 101004 33036 222000 + 237000 1031 1032 101004 33007 222000 237000 1031 1032 101004 + 33035 222000 237000 1031 1032 101004 33036] +satelliteIdentifier [253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 + 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 + 253 253 253 253 253 253] +centre [[34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34] + [34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34] + [34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34] + [34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34] + [34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34] + [34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34] + [34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34] + [34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34] + [34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34] + [34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34]] +satelliteClassification [241 241 241 241 241 241 241 241 241 241 241 241 241 241 241 241 241 241 + 241 241 241 241 241 241 241 241 241 241 241 241 241 241 241 241 241 241 + 241 241 241 241 241 241] +segmentSizeAtNadirInXDirection [120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 + 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 + 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 + 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 + 120000 120000] +segmentSizeAtNadirInYDirection [120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 + 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 + 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 + 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 + 120000 120000] +year [[2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 + 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 + 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +month [[6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +day [[18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +hour [[23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22] + [23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23] + [22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22] + [23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +minute [[25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 + 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25] + [13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13] + [22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22] + [49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49] + [58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 + 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +second [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13] + [21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21] + [13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13] + [21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +latitude [-55.77964 -55.7801 -55.78011 -55.78061 -55.78073 -55.78088 -55.78102 + -55.78126 -55.78169 -55.78179 -55.78208 -55.88298 -55.99568 -56.1076 + -56.2693 -56.27152 -56.27182 -56.2721 -56.27371 -56.2743 -56.2745 + -56.27461 -56.27479 -56.2749 -56.27509 -56.27613 -56.27627 -56.27654 + -56.27666 -56.27732 -56.27741 -56.27741 -56.39052 -56.61783 -56.72859 + -56.76814 -56.7684 -56.7701 -56.7702 -56.77073 -57.23097 -57.2345 ] +longitude [168.97272 164.50076 164.0038 151.40358 150.90656 150.40952 149.91248 + 148.9184 146.93012 163.56696 165.55536 168.33232 144.1226 144.58896 + 144.69182 148.16628 148.66278 149.15928 145.56194 153.62904 154.12578 + 150.529 155.43712 154.88068 154.38388 151.40274 150.90584 149.91202 + 149.41508 146.43336 145.9364 164.0636 165.09044 164.65532 151.85902 + 150.65184 151.14832 155.43614 154.87896 151.46264 152.10246 149.84204] +satelliteInstrumentUsedInDataProcessing [4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304] +satelliteDerivedWindComputationMethod [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1] +pressure [[46160.0 50600.0 53950.0 40150.0 44070.0 42690.0 44990.0 45340.0 41950.0 + 54790.0 51630.0 46740.0 48230.0 45000.0 44070.0 43670.0 44100.0 44160.0 + 43910.0 42660.0 43250.0 42320.0 53100.0 51230.0 44470.0 38660.0 40950.0 + 42550.0 43640.0 41610.0 42500.0 54180.0 50080.0 50080.0 41150.0 42510.0 + 41440.0 51930.0 50250.0 41190.0 42800.0 45450.0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold [[80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +pressure->qualityControl->qualityControl->qualityControl [[0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +pressure->percentConfidence->percentConfidence->percentConfidence [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold [[70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +pressure->qualityControl->qualityControl [[0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +pressure->percentConfidence->percentConfidence [[97 79 99 91 99 100 93 83 93 97 76 96 96 100 100 99 97 96 99 100 97 92 + 93 100 98 93 95 99 97 98 98 99 98 99 95 94 96 90 94 95 94 91] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +pressure->nominalConfidenceThreshold [[65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 + 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +pressure->qualityControl [[0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +pressure->percentConfidence [[97 75 94 90 97 99 91 83 90 94 72 94 87 90 89 99 96 93 98 98 96 92 94 99 + 97 91 95 97 95 97 97 96 93 94 95 93 96 90 94 95 95 89] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windDirection [[308 307 288 223 221 224 235 235 225 286 307 304 238 239 240 229 233 234 + 225 248 249 224 254 252 250 220 223 232 234 227 226 284 305 286 241 235 + 233 260 262 232 236 241] + [304 286 280 229 226 226 229 226 223 275 282 300 231 237 238 227 228 229 + 221 249 256 226 245 256 256 229 227 235 230 222 222 281 313 293 236 229 + 228 258 260 227 231 245] + [308 307 288 223 221 224 235 235 225 286 307 304 238 239 240 229 233 234 + 225 248 249 224 254 252 250 220 223 232 234 227 226 284 305 286 241 235 + 233 260 262 232 236 241] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold [[80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windDirection->qualityControl->qualityControl->qualityControl [[0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windDirection->percentConfidence->percentConfidence->percentConfidence [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold [[70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windDirection->qualityControl->qualityControl [[0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windDirection->percentConfidence->percentConfidence [[97 79 99 91 99 100 93 83 93 97 76 96 96 100 100 99 97 96 99 100 97 92 + 93 100 98 93 95 99 97 98 98 99 98 99 95 94 96 90 94 95 94 91] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windDirection->nominalConfidenceThreshold [[65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 + 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windDirection->qualityControl [[0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windDirection->percentConfidence [[97 75 94 90 97 99 91 83 90 94 72 94 87 90 89 99 96 93 98 98 96 92 94 99 + 97 91 95 97 95 97 97 96 93 94 95 93 96 90 94 95 95 89] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windSpeed [[12.200000000000001 6.300000000000001 6.800000000000001 + 30.400000000000002 30.200000000000003 31.5 37.5 39.400000000000006 34.9 + 7.1000000000000005 6.7 10.600000000000001 27.700000000000003 27.8 27.8 + 37.6 38.400000000000006 38.900000000000006 38.6 17.900000000000002 + 16.900000000000002 32.5 13.9 15.600000000000001 16.6 28.5 31.0 36.9 + 38.5 42.6 40.300000000000004 6.9 6.1000000000000005 6.9 + 24.400000000000002 30.5 29.5 11.600000000000001 14.9 28.1 22.1 27.0] + [10.8 7.300000000000001 6.6000000000000005 26.3 30.200000000000003 31.5 + 33.300000000000004 34.2 39.0 6.800000000000001 7.5 9.200000000000001 + 26.6 27.1 26.900000000000002 36.6 36.2 35.4 38.900000000000006 18.6 + 16.7 27.700000000000003 15.4 15.5 16.1 27.3 27.700000000000003 35.4 + 35.5 40.1 39.900000000000006 6.4 6.4 6.7 25.3 27.700000000000003 27.0 + 12.600000000000001 14.600000000000001 25.200000000000003 + 20.900000000000002 26.6] + [12.200000000000001 6.300000000000001 6.800000000000001 + 30.400000000000002 30.200000000000003 31.5 37.5 39.400000000000006 34.9 + 7.1000000000000005 6.7 10.600000000000001 27.700000000000003 27.8 27.8 + 37.6 38.400000000000006 38.900000000000006 38.6 17.900000000000002 + 16.900000000000002 32.5 13.9 15.600000000000001 16.6 28.5 31.0 36.9 + 38.5 42.6 40.300000000000004 6.9 6.1000000000000005 6.9 + 24.400000000000002 30.5 29.5 11.600000000000001 14.9 28.1 22.1 27.0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold [[80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windSpeed->qualityControl->qualityControl->qualityControl [[0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windSpeed->percentConfidence->percentConfidence->percentConfidence [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold [[70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windSpeed->qualityControl->qualityControl [[0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windSpeed->percentConfidence->percentConfidence [[97 79 99 91 99 100 93 83 93 97 76 96 96 100 100 99 97 96 99 100 97 92 + 93 100 98 93 95 99 97 98 98 99 98 99 95 94 96 90 94 95 94 91] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windSpeed->nominalConfidenceThreshold [[65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 + 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windSpeed->qualityControl [[0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windSpeed->percentConfidence [[97 75 94 90 97 99 91 83 90 94 72 94 87 90 89 99 96 93 98 98 96 92 94 99 + 97 91 95 97 95 97 97 96 93 94 95 93 96 90 94 95 95 89] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +satelliteChannelCentreFrequency [2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 + 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 + 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 + 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 + 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 + 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 + 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13 2.77585e+13] +satelliteChannelBandWidth [2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 + 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 + 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 + 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 + 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 + 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 + 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12 2.5757e+12] +coldestClusterTemperature [229.7 232.6 236.3 226.8 231.2 232. 234.4 234.8 233.4 237.2 233.7 229.8 + 242.1 238.5 237.5 233.1 233.5 233.6 235.5 227.9 228.5 229.3 237.6 236.2 + 229.8 226.1 227.7 231.9 233. 233. 234. 236.6 232.7 232.7 226.2 227.7 + 226.5 236.7 235.2 226.2 228. 231.9] +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold [80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80] +coldestClusterTemperature->qualityControl->qualityControl->qualityControl [0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0] +coldestClusterTemperature->percentConfidence->percentConfidence->percentConfidence [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0] +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold [70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70] +coldestClusterTemperature->qualityControl->qualityControl [0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0] +coldestClusterTemperature->percentConfidence->percentConfidence [ 97 79 99 91 99 100 93 83 93 97 76 96 96 100 100 99 97 96 + 99 100 97 92 93 100 98 93 95 99 97 98 98 99 98 99 95 94 + 96 90 94 95 94 91] +coldestClusterTemperature->nominalConfidenceThreshold [65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 + 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65] +coldestClusterTemperature->qualityControl [0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0] +coldestClusterTemperature->percentConfidence [97 75 94 90 97 99 91 83 90 94 72 94 87 90 89 99 96 93 98 98 96 92 94 99 + 97 91 95 97 95 97 97 96 93 94 95 93 96 90 94 95 95 89] +heightAssignmentMethod [[3 3 3 3 1 1 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 1 1 3 3 3 3 3 3 3 + 3 3 3 3 3 3] + [3 3 3 3 1 1 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 1 1 3 3 3 3 3 3 3 + 3 3 3 3 3 3] + [3 3 3 3 1 1 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 1 1 3 3 3 3 3 3 3 + 3 3 3 3 3 3] + [3 3 3 3 1 1 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 1 1 3 3 3 3 3 3 3 + 3 3 3 3 3 3] + [3 3 3 3 1 1 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 1 1 3 3 3 3 3 3 3 + 3 3 3 3 3 3] + [3 3 3 3 1 1 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 1 1 3 3 3 3 3 3 3 + 3 3 3 3 3 3] + [3 3 3 3 1 1 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 1 1 3 3 3 3 3 3 3 + 3 3 3 3 3 3] + [3 3 3 3 1 1 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 1 1 3 3 3 3 3 3 3 + 3 3 3 3 3 3] + [3 3 3 3 1 1 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 1 1 3 3 3 3 3 3 3 + 3 3 3 3 3 3] + [3 3 3 3 1 1 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 1 1 3 3 3 3 3 3 3 + 3 3 3 3 3 3] + [3 3 3 3 1 1 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 1 1 3 3 3 3 3 3 3 + 3 3 3 3 3 3]] +tracerCorrelationMethod [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2] +landOrSeaQualifier [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +satelliteZenithAngle [64.76 64.1 64.05 63.62 63.64 63.67 63.7 63.77 63.95 64. 64.24 64.76 + 64.51 64.56 64.72 64.35 64.31 64.27 64.62 64.07 64.07 64.19 64.06 64.06 + 64.07 64.15 64.17 64.23 64.26 64.52 64.58 64.58 64.82 65. 64.61 64.71 + 64.68 64.59 64.59 64.67 65.14 65.25] +originOfFirstGuessInformationForGoesIOrMSoundings [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +timeSignificance [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28] + [29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29] + [28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28] + [29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +timePeriod [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +airTemperature [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +generatingApplication [[101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 + 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 + 101 101 101 101 101 101] + [101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 + 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 + 101 101 101 101 101 101] + [101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 + 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 + 101 101 101 101 101 101] + [102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 + 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 + 102 102 102 102 102 102] + [102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 + 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 + 102 102 102 102 102 102] + [102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 + 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 + 102 102 102 102 102 102] + [103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 + 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 + 103 103 103 103 103 103] + [103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 + 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 + 103 103 103 103 103 103] + [103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 + 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 + 103 103 103 103 103 103]] diff --git a/tests/sample-data/amv-insat-3d.attributes b/tests/sample-data/amv-insat-3d.attributes new file mode 100644 index 00000000..4296465c --- /dev/null +++ b/tests/sample-data/amv-insat-3d.attributes @@ -0,0 +1,241 @@ +messageNumber: 1 +satelliteIdentifier->code: '001007' +satelliteIdentifier->units: CODE TABLE +satelliteIdentifier->scale: 0 +satelliteIdentifier->reference: 0 +satelliteIdentifier->width: 10 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +satelliteClassification->code: '002196' +satelliteClassification->units: CODE TABLE +satelliteClassification->scale: 0 +satelliteClassification->reference: 0 +satelliteClassification->width: 9 +segmentSizeAtNadirInXDirection->code: '002221' +segmentSizeAtNadirInXDirection->units: m +segmentSizeAtNadirInXDirection->scale: 0 +segmentSizeAtNadirInXDirection->reference: 0 +segmentSizeAtNadirInXDirection->width: 18 +segmentSizeAtNadirInYDirection->code: '002222' +segmentSizeAtNadirInYDirection->units: m +segmentSizeAtNadirInYDirection->scale: 0 +segmentSizeAtNadirInYDirection->reference: 0 +segmentSizeAtNadirInYDirection->width: 18 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +second->code: '004006' +second->units: s +second->scale: 0 +second->reference: 0 +second->width: 6 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +satelliteInstrumentDataUsedInProcessing->code: '002252' +satelliteInstrumentDataUsedInProcessing->units: FLAG TABLE +satelliteInstrumentDataUsedInProcessing->scale: 0 +satelliteInstrumentDataUsedInProcessing->reference: 0 +satelliteInstrumentDataUsedInProcessing->width: 31 +satelliteDerivedWindComputationMethod->code: '002023' +satelliteDerivedWindComputationMethod->units: CODE TABLE +satelliteDerivedWindComputationMethod->scale: 0 +satelliteDerivedWindComputationMethod->reference: 0 +satelliteDerivedWindComputationMethod->width: 4 +pressure->code: '007004' +pressure->units: Pa +pressure->scale: -1 +pressure->reference: 0 +pressure->width: 14 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033253' +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->code: '033252' +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->units: CODE TABLE +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->scale: 0 +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->reference: 0 +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->width: 4 +pressure->percentConfidence->percentConfidence->code: '033007' +pressure->percentConfidence->percentConfidence->units: % +pressure->percentConfidence->percentConfidence->scale: 0 +pressure->percentConfidence->percentConfidence->reference: 0 +pressure->percentConfidence->percentConfidence->width: 7 +pressure->nominalConfidenceThreshold->code: '033253' +pressure->nominalConfidenceThreshold->units: % +pressure->nominalConfidenceThreshold->scale: 0 +pressure->nominalConfidenceThreshold->reference: 0 +pressure->nominalConfidenceThreshold->width: 7 +pressure->manualAutomaticQualityControl->code: '033252' +pressure->manualAutomaticQualityControl->units: CODE TABLE +pressure->manualAutomaticQualityControl->scale: 0 +pressure->manualAutomaticQualityControl->reference: 0 +pressure->manualAutomaticQualityControl->width: 4 +pressure->percentConfidence->code: '033007' +pressure->percentConfidence->units: % +pressure->percentConfidence->scale: 0 +pressure->percentConfidence->reference: 0 +pressure->percentConfidence->width: 7 +windDirection->code: '011001' +windDirection->units: deg +windDirection->scale: 0 +windDirection->reference: 0 +windDirection->width: 9 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033253' +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->code: '033252' +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->units: CODE TABLE +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->scale: 0 +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->reference: 0 +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->width: 4 +windDirection->percentConfidence->percentConfidence->code: '033007' +windDirection->percentConfidence->percentConfidence->units: % +windDirection->percentConfidence->percentConfidence->scale: 0 +windDirection->percentConfidence->percentConfidence->reference: 0 +windDirection->percentConfidence->percentConfidence->width: 7 +windDirection->nominalConfidenceThreshold->code: '033253' +windDirection->nominalConfidenceThreshold->units: % +windDirection->nominalConfidenceThreshold->scale: 0 +windDirection->nominalConfidenceThreshold->reference: 0 +windDirection->nominalConfidenceThreshold->width: 7 +windDirection->manualAutomaticQualityControl->code: '033252' +windDirection->manualAutomaticQualityControl->units: CODE TABLE +windDirection->manualAutomaticQualityControl->scale: 0 +windDirection->manualAutomaticQualityControl->reference: 0 +windDirection->manualAutomaticQualityControl->width: 4 +windDirection->percentConfidence->code: '033007' +windDirection->percentConfidence->units: % +windDirection->percentConfidence->scale: 0 +windDirection->percentConfidence->reference: 0 +windDirection->percentConfidence->width: 7 +windSpeed->code: '011002' +windSpeed->units: m/s +windSpeed->scale: 1 +windSpeed->reference: 0 +windSpeed->width: 12 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033253' +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->code: '033252' +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->units: CODE TABLE +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->scale: 0 +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->reference: 0 +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->width: 4 +windSpeed->percentConfidence->percentConfidence->code: '033007' +windSpeed->percentConfidence->percentConfidence->units: % +windSpeed->percentConfidence->percentConfidence->scale: 0 +windSpeed->percentConfidence->percentConfidence->reference: 0 +windSpeed->percentConfidence->percentConfidence->width: 7 +windSpeed->nominalConfidenceThreshold->code: '033253' +windSpeed->nominalConfidenceThreshold->units: % +windSpeed->nominalConfidenceThreshold->scale: 0 +windSpeed->nominalConfidenceThreshold->reference: 0 +windSpeed->nominalConfidenceThreshold->width: 7 +windSpeed->manualAutomaticQualityControl->code: '033252' +windSpeed->manualAutomaticQualityControl->units: CODE TABLE +windSpeed->manualAutomaticQualityControl->scale: 0 +windSpeed->manualAutomaticQualityControl->reference: 0 +windSpeed->manualAutomaticQualityControl->width: 4 +windSpeed->percentConfidence->code: '033007' +windSpeed->percentConfidence->units: % +windSpeed->percentConfidence->scale: 0 +windSpeed->percentConfidence->reference: 0 +windSpeed->percentConfidence->width: 7 +satelliteChannelCentreFrequency->code: '002197' +satelliteChannelCentreFrequency->units: Hz +satelliteChannelCentreFrequency->scale: -8 +satelliteChannelCentreFrequency->reference: 0 +satelliteChannelCentreFrequency->width: 26 +satelliteChannelBandWidth->code: '002198' +satelliteChannelBandWidth->units: Hz +satelliteChannelBandWidth->scale: -8 +satelliteChannelBandWidth->reference: 0 +satelliteChannelBandWidth->width: 26 +coldestClusterTemperature->code: '012193' +coldestClusterTemperature->units: K +coldestClusterTemperature->scale: 1 +coldestClusterTemperature->reference: 0 +coldestClusterTemperature->width: 12 +heightAssignmentMethod->code: '002231' +heightAssignmentMethod->units: CODE TABLE +heightAssignmentMethod->scale: 0 +heightAssignmentMethod->reference: 0 +heightAssignmentMethod->width: 4 +tracerCorrelationMethod->code: '002232' +tracerCorrelationMethod->units: CODE TABLE +tracerCorrelationMethod->scale: 0 +tracerCorrelationMethod->reference: 0 +tracerCorrelationMethod->width: 3 +landOrSeaQualifier->code: '008012' +landOrSeaQualifier->units: CODE TABLE +landOrSeaQualifier->scale: 0 +landOrSeaQualifier->reference: 0 +landOrSeaQualifier->width: 2 +satelliteZenithAngle->code: '007024' +satelliteZenithAngle->units: deg +satelliteZenithAngle->scale: 2 +satelliteZenithAngle->reference: -9000 +satelliteZenithAngle->width: 15 +originOfFirstGuessInformationForGoesIOrMSoundings->code: '002057' +originOfFirstGuessInformationForGoesIOrMSoundings->units: CODE TABLE +originOfFirstGuessInformationForGoesIOrMSoundings->scale: 0 +originOfFirstGuessInformationForGoesIOrMSoundings->reference: 0 +originOfFirstGuessInformationForGoesIOrMSoundings->width: 4 +timeSignificance->code: '008021' +timeSignificance->units: CODE TABLE +timeSignificance->scale: 0 +timeSignificance->reference: 0 +timeSignificance->width: 5 +timePeriod->code: '004024' +timePeriod->units: h +timePeriod->scale: 0 +timePeriod->reference: -2048 +timePeriod->width: 12 +airTemperature->code: '012001' +airTemperature->units: K +airTemperature->scale: 1 +airTemperature->reference: 0 +airTemperature->width: 12 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 diff --git a/tests/sample-data/amv-insat-3d.bufr b/tests/sample-data/amv-insat-3d.bufr new file mode 100644 index 0000000000000000000000000000000000000000..b4cd3f38eb290763b07f92544fcf92e7aac012c9 GIT binary patch literal 2212 zcmbW34Ny~87RPVCUobHVf*>M!3Ew5umq3P4gc86=Sx`jLV1*43E!ol%TVTV2B`+Wa zixNHxD6W+csjajIrBtiiNuWTGX*W=(tFxQkz_vhJ)<#=wwg$2nadz8Toptt3=6`R_ z`JHpmIWO}j37N7Cfb@_6a0eg{0Loq_fyLl@0l4-6pfz3}ZUsF+`U00r;1W^JnL!pPe7e0Dxei#0Y$e`)ICZ_#u6VYvU+JcpG=G8nXxJZ%Y*8mbHx$w)!#l z(H4CfqDUAq5@)d=2if1qF3tRZXVV!tOn4C- z3#_>|j}7_NIY1r`4fYNJIArKrwV$|P41tg05sN6&`iK0tZ2g>^jXk+g8w>^aA0zet z$Po5K;`W2#!ml1H%wTNl)nCYB2P@0)XyMcgy@&s&#C*H%06g5!gb)oGT>scXLhYk!E!rN)t z6#4oaTiHJmloPX!iJkI+!ctRjbEs41^F_=?#`h{^>%kxBVxRN7>MXZ&vA`*VT!4~- zTDSjgb5Li?7vJfKz&&ff?wLPl`!LqdmCrIMRVJx+T+o`!edX=n7tMPxxPqfzigXE@ z9=NwTML8EiDD%DlR))W*`MI0(`@|g$=QIL0imWNMw<*#z|Cutpqno3dzOnE-5%@Yl zq$NGb80b!4!{{H@<4eyJp0w-}=#}ge?TgzRh;YMSz za{orW@Ys%b#VP%#XG5!xTR(g{bMREgPnGEx#^*0nYx-^^q{)yvX6HcM8nRf(xxvNJZFj+R|X`4D{p-mwf%NZcCa2hHi~`axR_$f z$oYr#BZ)@$p1UfhApCTXR8F?ay9N>xD>Ql%@^SYk`5B=ODV_6F2<6-#yw9$WPF5Wu z?;b*>z1L8(w#!pzD@#EZ7U7$ktR2Jc&pKHodmPQ^vP&ph4FL0A1REg1S2qr=w%2Gz z2N!p6S1`yvAe}6u3wPNnSkV3uafpt~Wx?dmzt1D9&eCKmE#n{x4H>!uho6$k5Y4uLtHJM^-o9)$`IZO2d!BYqREKpZ2MA9v`bU)PU-#g;N-M`g(0Z^dTHW2G(69r2O!>dgm^hoQJckv5)3Ea(!A3tH5c6s#vn z<*SQ4G{#Z-C};?WV}9x4SZ;(4AwK(HRDLwvrU4`^(3+|7B9epavQ^?vmaX#P(WZd} R{A1wY8kcEy7!w88zW}ZygdG3? literal 0 HcmV?d00001 diff --git a/tests/sample-data/amv-insat-3d.items b/tests/sample-data/amv-insat-3d.items new file mode 100644 index 00000000..4d42cd0d --- /dev/null +++ b/tests/sample-data/amv-insat-3d.items @@ -0,0 +1,906 @@ +messageNumber 1 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 0 +dataCategory 5 +dataSubCategory 87 +masterTablesVersionNumber 13 +localTablesVersionNumber 1 +typicalYearOfCentury 15 +typicalMonth 12 +typicalDay 31 +typicalHour 23 +typicalMinute 0 +typicalDate 20151231 +typicalTime 230000 +numberOfSubsets 128 +observedData 1 +compressedData 1 +unexpandedDescriptors [310195 222000 236000 101103 31031 1031 1032 101004 33007 222000 + 237000 1031 1032 101004 33252 222000 237000 1031 1032 101004 + 33253 222000 237000 1031 1032 101004 33007 222000 237000 1031 + 1032 101004 33252 222000 237000 1031 1032 101004 33253] +satelliteIdentifier [471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 + 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 + 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 + 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 + 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 + 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 + 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 471 + 471 471] +centre [[28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28] + [28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28] + [28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28] + [28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +satelliteClassification [301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 + 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 + 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 + 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 + 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 + 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 + 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 301 + 301 301] +segmentSizeAtNadirInXDirection [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +segmentSizeAtNadirInYDirection [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +year [[2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 + 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 + 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 + 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 + 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 + 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 + 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 + 2015 2015] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +month [[12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +day [[31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +hour [[23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22] + [23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +minute [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30] + [30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +second [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +latitude [ 29.77 29.14 17.20999 -1.34 -2.79 -3.51 -9.26 + -27.04 -47.97 32.25 27.87 24.63 17.20999 16.52 + 6.61 -2.06 -8.54 -9.26 32.25 31.02 27.87 + 25.29 17.9 15.12 10.18999 6.61 3.72 0.83 + 0.11 -2.79 -6.39 -7.11 -18.37999 -20.43 -44.99 + -45.5 -48.92 37. 31.63 31.02 24.63 18.58 + 17.9 10.18999 -7.11 -9.97 -29.58 -44.99 38.14 + 37. 31.63 31.02 27.23 26.59 8.76 2.28 + -7.83 -9.26 -28.95 -29.58 -31.45 -33.28 -33.88 + -34.48 -44.99 41.47 38.71 34.06 29.77 29.14 + 27.23 3.72 1.56 -28.95 -32.06 -33.28 -33.88 + 40.91999 28.51 24.63 -9.26 -33.28 -34.48 -47.97 + 40.91999 40.38 36.41999 33.46 30.4 24.63 -6.39 + -8.54 -9.97 -18.37999 -32.66999 44.63 44.11 31.02 + 30.4 0.11 -4.94999 -5.67 -7.11 -9.26 -9.97 + -10.68 -18.37999 -44.48 -44.99 -46.5 43.07 32.86 + 29.14 28.51 25.29 2.28 -4.23 -5.67 -6.39 + -7.11 -9.97 32.25 31.63 29.14 -3.51 -4.23 + -6.39 -7.11 ] +longitude [21.44 21.44 21.44 21.44 21.44 21.44 21.44 21.44 21.44 22.16 22.16 22.16 + 22.16 22.16 22.16 22.16 22.16 22.16 22.87 22.87 22.87 22.87 22.87 22.87 + 22.87 22.87 22.87 22.87 22.87 22.87 22.87 22.87 22.87 22.87 22.87 22.87 + 22.87 23.59 23.59 23.59 23.59 23.59 23.59 23.59 23.59 23.59 23.59 23.59 + 24.31 24.31 24.31 24.31 24.31 24.31 24.31 24.31 24.31 24.31 24.31 24.31 + 24.31 24.31 24.31 24.31 24.31 25.03 25.03 25.03 25.03 25.03 25.03 25.03 + 25.03 25.03 25.03 25.03 25.03 25.75 25.75 25.75 25.75 25.75 25.75 25.75 + 26.47 26.47 26.47 26.47 26.47 26.47 26.47 26.47 26.47 26.47 26.47 27.19 + 27.19 27.19 27.19 27.19 27.19 27.19 27.19 27.19 27.19 27.19 27.19 27.19 + 27.19 27.19 27.91 27.91 27.91 27.91 27.91 27.91 27.91 27.91 27.91 27.91 + 27.91 28.62 28.62 28.62 28.62 28.62 28.62 28.62] +satelliteInstrumentDataUsedInProcessing [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +satelliteDerivedWindComputationMethod [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] +pressure [[69600.0 97500.0 75000.0 ... 29210.0 25650.0 24600.0] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold [[-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl [[-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->percentConfidence->percentConfidence [[-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->nominalConfidenceThreshold [[50 50 50 ... 50 50 50] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->manualAutomaticQualityControl [[-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->percentConfidence [[65 58 76 ... 52 50 58] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +windDirection [[314 319 287 127 97 101 119 248 273 319 317 330 284 280 225 129 119 114 + 321 311 304 318 255 29 223 224 192 124 127 130 108 107 162 160 272 272 + 275 12 305 311 326 260 253 223 112 118 250 271 19 11 311 287 104 269 + 270 271 31 29 354 305 308 306 126 107 105 153 262 329 339 292 308 116 + 129 127 101 118 121 136 146 272 269 269 337 303 317 319 302 163 133 114 + 111 102 121 291 290 295 128 129 133 111] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->percentConfidence->percentConfidence [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->nominalConfidenceThreshold [[50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->manualAutomaticQualityControl [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->percentConfidence [[65 58 76 100 63 76 72 50 64 70 56 62 100 100 77 100 60 60 76 74 78 64 + 78 71 75 77 64 58 100 62 54 65 52 64 68 73 75 65 73 74 63 65 78 75 56 + 52 64 65 75 65 72 58 52 76 60 58 100 100 68 100 70 78 63 51 60 62 60 67 + 54 76 67 100 52 63 57 57 57 54 72 66 76 74 50 78 58 54 67 57 58 77 77 + 61 57 74 69 64 52 52 50 58] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed [[9.600000000000001 10.600000000000001 11.9 7.0 10.5 11.5 12.9 + 12.200000000000001 37.800000000000004 11.5 12.100000000000001 8.5 + 13.600000000000001 11.600000000000001 22.6 7.800000000000001 11.3 9.9 + 12.100000000000001 11.700000000000001 12.700000000000001 + 7.800000000000001 16.900000000000002 3.4000000000000004 35.4 21.3 9.1 + 6.4 4.800000000000001 9.0 13.600000000000001 13.5 6.800000000000001 5.4 + 24.900000000000002 28.0 26.0 12.200000000000001 13.4 11.4 8.3 16.8 17.2 + 34.4 10.5 8.9 28.0 28.900000000000002 10.100000000000001 12.3 + 11.100000000000001 12.4 11.8 30.1 13.3 39.800000000000004 + 8.200000000000001 9.3 14.9 21.1 13.4 10.200000000000001 6.0 11.9 10.8 + 3.6 24.6 9.700000000000001 10.0 17.0 13.9 2.9000000000000004 + 10.600000000000001 6.6000000000000005 7.2 8.0 8.4 5.9 4.2 24.1 31.1 + 40.6 8.9 24.5 13.3 12.700000000000001 13.600000000000001 + 8.700000000000001 9.700000000000001 7.1000000000000005 7.2 + 7.1000000000000005 8.3 23.900000000000002 18.0 11.5 9.1 + 9.600000000000001 4.6000000000000005 4.6000000000000005] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->percentConfidence->percentConfidence [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->nominalConfidenceThreshold [[50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->manualAutomaticQualityControl [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->percentConfidence [[65 58 76 100 63 76 72 50 64 70 56 62 100 100 77 100 60 60 76 74 78 64 + 78 71 75 77 64 58 100 62 54 65 52 64 68 73 75 65 73 74 63 65 78 75 56 + 52 64 65 75 65 72 58 52 76 60 58 100 100 68 100 70 78 63 51 60 62 60 67 + 54 76 67 100 52 63 57 57 57 54 72 66 76 74 50 78 58 54 67 57 58 77 77 + 61 57 74 69 64 52 52 50 58] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +satelliteChannelCentreFrequency [2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 + 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13 2.77e+13] +satelliteChannelBandWidth [3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 3.8e+12 + 3.8e+12 3.8e+12] +coldestClusterTemperature [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +heightAssignmentMethod [[-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [14 14 14 ... 3 3 1] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +tracerCorrelationMethod [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +landOrSeaQualifier [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +satelliteZenithAngle [69.49 69.33 67.01 65.69 65.73 65.75 66.08 68.86 74.75 69.58 68.49 67.76 + 66.39 66.29 65.23 65.05 65.37 65.43 69.08 68.75 67.94 67.33 65.89 65.46 + 64.87 64.58 64.44 64.37 64.37 64.41 64.57 64.62 65.97 66.33 72.98 73.16 + 74.33 69.96 68.37 68.22 66.62 65.39 65.26 64.22 63.95 64.19 67.83 72.58 + 69.83 69.48 67.86 67.69 66.67 66.51 63.42 63.05 63.34 63.47 67.12 67.29 + 67.81 68.33 68.51 68.69 72.17 70.51 69.57 68.06 66.8 66.62 66.11 62.42 + 62.36 66.57 67.46 67.82 68.01 69.87 65.9 64.87 62.13 67.31 67.69 72.5 + 69.43 69.24 67.83 66.86 65.9 64.28 61.21 61.39 61.54 62.86 66.6 70.42 + 70.21 65.55 65.36 60.28 60.43 60.47 60.58 60.79 60.87 60.95 62.23 70.36 + 70.56 71.16 69.39 65.62 64.42 64.23 63.29 59.62 59.7 59.79 59.84 59.9 + 60.19 64.9 64.69 63.88 58.98 59.02 59.16 59.22] +originOfFirstGuessInformationForGoesIOrMSoundings [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +timeSignificance [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28] + [29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +timePeriod [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +airTemperature [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +generatingApplication [[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] + [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] + [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] diff --git a/tests/sample-data/amv-meteosat-9.attributes b/tests/sample-data/amv-meteosat-9.attributes new file mode 100644 index 00000000..4fa9e453 --- /dev/null +++ b/tests/sample-data/amv-meteosat-9.attributes @@ -0,0 +1,331 @@ +messageNumber: 1 +satelliteIdentifier->code: '001007' +satelliteIdentifier->units: CODE TABLE +satelliteIdentifier->scale: 0 +satelliteIdentifier->reference: 0 +satelliteIdentifier->width: 10 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +satelliteClassification->code: '002196' +satelliteClassification->units: CODE TABLE +satelliteClassification->scale: 0 +satelliteClassification->reference: 0 +satelliteClassification->width: 9 +segmentSizeAtNadirInXDirection->code: '002221' +segmentSizeAtNadirInXDirection->units: m +segmentSizeAtNadirInXDirection->scale: 0 +segmentSizeAtNadirInXDirection->reference: 0 +segmentSizeAtNadirInXDirection->width: 18 +segmentSizeAtNadirInYDirection->code: '002222' +segmentSizeAtNadirInYDirection->units: m +segmentSizeAtNadirInYDirection->scale: 0 +segmentSizeAtNadirInYDirection->reference: 0 +segmentSizeAtNadirInYDirection->width: 18 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +second->code: '004006' +second->units: s +second->scale: 0 +second->reference: 0 +second->width: 6 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +satelliteInstrumentDataUsedInProcessing->code: '002252' +satelliteInstrumentDataUsedInProcessing->units: FLAG TABLE +satelliteInstrumentDataUsedInProcessing->scale: 0 +satelliteInstrumentDataUsedInProcessing->reference: 0 +satelliteInstrumentDataUsedInProcessing->width: 31 +satelliteDerivedWindComputationMethod->code: '002023' +satelliteDerivedWindComputationMethod->units: CODE TABLE +satelliteDerivedWindComputationMethod->scale: 0 +satelliteDerivedWindComputationMethod->reference: 0 +satelliteDerivedWindComputationMethod->width: 4 +pressure->code: '007004' +pressure->units: Pa +pressure->scale: -1 +pressure->reference: 0 +pressure->width: 14 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033253' +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->code: '033252' +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->units: CODE TABLE +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->scale: 0 +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->reference: 0 +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->width: 4 +pressure->percentConfidence->percentConfidence->percentConfidence->code: '033007' +pressure->percentConfidence->percentConfidence->percentConfidence->units: % +pressure->percentConfidence->percentConfidence->percentConfidence->scale: 0 +pressure->percentConfidence->percentConfidence->percentConfidence->reference: 0 +pressure->percentConfidence->percentConfidence->percentConfidence->width: 7 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033253' +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->code: '033252' +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->units: CODE TABLE +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->scale: 0 +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->reference: 0 +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->width: 4 +pressure->percentConfidence->percentConfidence->code: '033007' +pressure->percentConfidence->percentConfidence->units: % +pressure->percentConfidence->percentConfidence->scale: 0 +pressure->percentConfidence->percentConfidence->reference: 0 +pressure->percentConfidence->percentConfidence->width: 7 +pressure->nominalConfidenceThreshold->code: '033253' +pressure->nominalConfidenceThreshold->units: % +pressure->nominalConfidenceThreshold->scale: 0 +pressure->nominalConfidenceThreshold->reference: 0 +pressure->nominalConfidenceThreshold->width: 7 +pressure->manualAutomaticQualityControl->code: '033252' +pressure->manualAutomaticQualityControl->units: CODE TABLE +pressure->manualAutomaticQualityControl->scale: 0 +pressure->manualAutomaticQualityControl->reference: 0 +pressure->manualAutomaticQualityControl->width: 4 +pressure->percentConfidence->code: '033007' +pressure->percentConfidence->units: % +pressure->percentConfidence->scale: 0 +pressure->percentConfidence->reference: 0 +pressure->percentConfidence->width: 7 +windDirection->code: '011001' +windDirection->units: deg +windDirection->scale: 0 +windDirection->reference: 0 +windDirection->width: 9 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033253' +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->code: '033252' +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->units: CODE TABLE +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->scale: 0 +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->reference: 0 +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->width: 4 +windDirection->percentConfidence->percentConfidence->percentConfidence->code: '033007' +windDirection->percentConfidence->percentConfidence->percentConfidence->units: % +windDirection->percentConfidence->percentConfidence->percentConfidence->scale: 0 +windDirection->percentConfidence->percentConfidence->percentConfidence->reference: 0 +windDirection->percentConfidence->percentConfidence->percentConfidence->width: 7 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033253' +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->code: '033252' +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->units: CODE TABLE +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->scale: 0 +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->reference: 0 +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->width: 4 +windDirection->percentConfidence->percentConfidence->code: '033007' +windDirection->percentConfidence->percentConfidence->units: % +windDirection->percentConfidence->percentConfidence->scale: 0 +windDirection->percentConfidence->percentConfidence->reference: 0 +windDirection->percentConfidence->percentConfidence->width: 7 +windDirection->nominalConfidenceThreshold->code: '033253' +windDirection->nominalConfidenceThreshold->units: % +windDirection->nominalConfidenceThreshold->scale: 0 +windDirection->nominalConfidenceThreshold->reference: 0 +windDirection->nominalConfidenceThreshold->width: 7 +windDirection->manualAutomaticQualityControl->code: '033252' +windDirection->manualAutomaticQualityControl->units: CODE TABLE +windDirection->manualAutomaticQualityControl->scale: 0 +windDirection->manualAutomaticQualityControl->reference: 0 +windDirection->manualAutomaticQualityControl->width: 4 +windDirection->percentConfidence->code: '033007' +windDirection->percentConfidence->units: % +windDirection->percentConfidence->scale: 0 +windDirection->percentConfidence->reference: 0 +windDirection->percentConfidence->width: 7 +windSpeed->code: '011002' +windSpeed->units: m/s +windSpeed->scale: 1 +windSpeed->reference: 0 +windSpeed->width: 12 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033253' +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->code: '033252' +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->units: CODE TABLE +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->scale: 0 +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->reference: 0 +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->width: 4 +windSpeed->percentConfidence->percentConfidence->percentConfidence->code: '033007' +windSpeed->percentConfidence->percentConfidence->percentConfidence->units: % +windSpeed->percentConfidence->percentConfidence->percentConfidence->scale: 0 +windSpeed->percentConfidence->percentConfidence->percentConfidence->reference: 0 +windSpeed->percentConfidence->percentConfidence->percentConfidence->width: 7 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033253' +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->code: '033252' +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->units: CODE TABLE +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->scale: 0 +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->reference: 0 +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->width: 4 +windSpeed->percentConfidence->percentConfidence->code: '033007' +windSpeed->percentConfidence->percentConfidence->units: % +windSpeed->percentConfidence->percentConfidence->scale: 0 +windSpeed->percentConfidence->percentConfidence->reference: 0 +windSpeed->percentConfidence->percentConfidence->width: 7 +windSpeed->nominalConfidenceThreshold->code: '033253' +windSpeed->nominalConfidenceThreshold->units: % +windSpeed->nominalConfidenceThreshold->scale: 0 +windSpeed->nominalConfidenceThreshold->reference: 0 +windSpeed->nominalConfidenceThreshold->width: 7 +windSpeed->manualAutomaticQualityControl->code: '033252' +windSpeed->manualAutomaticQualityControl->units: CODE TABLE +windSpeed->manualAutomaticQualityControl->scale: 0 +windSpeed->manualAutomaticQualityControl->reference: 0 +windSpeed->manualAutomaticQualityControl->width: 4 +windSpeed->percentConfidence->code: '033007' +windSpeed->percentConfidence->units: % +windSpeed->percentConfidence->scale: 0 +windSpeed->percentConfidence->reference: 0 +windSpeed->percentConfidence->width: 7 +satelliteChannelCentreFrequency->code: '002197' +satelliteChannelCentreFrequency->units: Hz +satelliteChannelCentreFrequency->scale: -8 +satelliteChannelCentreFrequency->reference: 0 +satelliteChannelCentreFrequency->width: 26 +satelliteChannelBandWidth->code: '002198' +satelliteChannelBandWidth->units: Hz +satelliteChannelBandWidth->scale: -8 +satelliteChannelBandWidth->reference: 0 +satelliteChannelBandWidth->width: 26 +coldestClusterTemperature->code: '012193' +coldestClusterTemperature->units: K +coldestClusterTemperature->scale: 1 +coldestClusterTemperature->reference: 0 +coldestClusterTemperature->width: 12 +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033253' +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +coldestClusterTemperature->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->code: '033252' +coldestClusterTemperature->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->units: CODE TABLE +coldestClusterTemperature->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->scale: 0 +coldestClusterTemperature->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->reference: 0 +coldestClusterTemperature->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl->width: 4 +coldestClusterTemperature->percentConfidence->percentConfidence->percentConfidence->code: '033007' +coldestClusterTemperature->percentConfidence->percentConfidence->percentConfidence->units: % +coldestClusterTemperature->percentConfidence->percentConfidence->percentConfidence->scale: 0 +coldestClusterTemperature->percentConfidence->percentConfidence->percentConfidence->reference: 0 +coldestClusterTemperature->percentConfidence->percentConfidence->percentConfidence->width: 7 +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->code: '033253' +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->units: % +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->scale: 0 +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->reference: 0 +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->width: 7 +coldestClusterTemperature->manualAutomaticQualityControl->manualAutomaticQualityControl->code: '033252' +coldestClusterTemperature->manualAutomaticQualityControl->manualAutomaticQualityControl->units: CODE TABLE +coldestClusterTemperature->manualAutomaticQualityControl->manualAutomaticQualityControl->scale: 0 +coldestClusterTemperature->manualAutomaticQualityControl->manualAutomaticQualityControl->reference: 0 +coldestClusterTemperature->manualAutomaticQualityControl->manualAutomaticQualityControl->width: 4 +coldestClusterTemperature->percentConfidence->percentConfidence->code: '033007' +coldestClusterTemperature->percentConfidence->percentConfidence->units: % +coldestClusterTemperature->percentConfidence->percentConfidence->scale: 0 +coldestClusterTemperature->percentConfidence->percentConfidence->reference: 0 +coldestClusterTemperature->percentConfidence->percentConfidence->width: 7 +coldestClusterTemperature->nominalConfidenceThreshold->code: '033253' +coldestClusterTemperature->nominalConfidenceThreshold->units: % +coldestClusterTemperature->nominalConfidenceThreshold->scale: 0 +coldestClusterTemperature->nominalConfidenceThreshold->reference: 0 +coldestClusterTemperature->nominalConfidenceThreshold->width: 7 +coldestClusterTemperature->manualAutomaticQualityControl->code: '033252' +coldestClusterTemperature->manualAutomaticQualityControl->units: CODE TABLE +coldestClusterTemperature->manualAutomaticQualityControl->scale: 0 +coldestClusterTemperature->manualAutomaticQualityControl->reference: 0 +coldestClusterTemperature->manualAutomaticQualityControl->width: 4 +coldestClusterTemperature->percentConfidence->code: '033007' +coldestClusterTemperature->percentConfidence->units: % +coldestClusterTemperature->percentConfidence->scale: 0 +coldestClusterTemperature->percentConfidence->reference: 0 +coldestClusterTemperature->percentConfidence->width: 7 +heightAssignmentMethod->code: '002231' +heightAssignmentMethod->units: CODE TABLE +heightAssignmentMethod->scale: 0 +heightAssignmentMethod->reference: 0 +heightAssignmentMethod->width: 4 +tracerCorrelationMethod->code: '002232' +tracerCorrelationMethod->units: CODE TABLE +tracerCorrelationMethod->scale: 0 +tracerCorrelationMethod->reference: 0 +tracerCorrelationMethod->width: 3 +landOrSeaQualifier->code: '008012' +landOrSeaQualifier->units: CODE TABLE +landOrSeaQualifier->scale: 0 +landOrSeaQualifier->reference: 0 +landOrSeaQualifier->width: 2 +satelliteZenithAngle->code: '007024' +satelliteZenithAngle->units: deg +satelliteZenithAngle->scale: 2 +satelliteZenithAngle->reference: -9000 +satelliteZenithAngle->width: 15 +originOfFirstGuessInformationForGoesIOrMSoundings->code: '002057' +originOfFirstGuessInformationForGoesIOrMSoundings->units: CODE TABLE +originOfFirstGuessInformationForGoesIOrMSoundings->scale: 0 +originOfFirstGuessInformationForGoesIOrMSoundings->reference: 0 +originOfFirstGuessInformationForGoesIOrMSoundings->width: 4 +timeSignificance->code: '008021' +timeSignificance->units: CODE TABLE +timeSignificance->scale: 0 +timeSignificance->reference: 0 +timeSignificance->width: 5 +timePeriod->code: '004024' +timePeriod->units: h +timePeriod->scale: 0 +timePeriod->reference: -2048 +timePeriod->width: 12 +airTemperature->code: '012001' +airTemperature->units: K +airTemperature->scale: 1 +airTemperature->reference: 0 +airTemperature->width: 12 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 diff --git a/tests/sample-data/amv-meteosat-9.bufr b/tests/sample-data/amv-meteosat-9.bufr new file mode 100644 index 0000000000000000000000000000000000000000..2540c5a39676f85fcf68d9ee1eb4cffa282d4782 GIT binary patch literal 8272 zcmd^ic|4Te|MxXxnXxl=24iev31e5vFlcO9BC>_-;T|fv%gxxgvF}SYgwR6TP%+ko ztSOalgA}c#MZ)#FCZ# z0e}zycmos`CoUL*83vaGwxIQWSt205;*J za19D{F}3Lj2>ETLr&Vwz*jeD29 z+`J#SnSPN?IcLfL(inHq#}x0J3(q~hvc$&+MpoEK(ez`+(bA7_-;ZpBANj+{s>B)5> zvPKy%h;ztsx$ah`+Q-Bq0P-F27A zA~V|^y;iC}!F$!Ft%G+&3^woOJdp$ z_o@6ZcS}yLhNr%e898eztDd6w2fQNjORG$4fWPBzRX6@Az2mz3J_XzKkHfE*OMX+p zM#y%huW<^KXbLYbm^-Yd%RPpFT3p*}%#iO7zgT{?qKxYBXXH7vI`!tPi#dZCrv|HvXQe+9c?Z!i=Uq+fgGOOCj~Ouf^c zM$GR@Fb(%x^SS`J-MQDqYt~Ap$r6PULbM?60;nZ^^*;&G@G>?_f$1eH@w3o#X)2;I+)> z9cQ}>-!*^AP+Zi)-6G7q&%#EYYex4?)u^cJo1G@MF1zyq8$@Gyj4PpyokJhbDwuRZ z6Q9SNR%(hWc7D5X+Oj@m!lH>~wE-X8pK7VWpCxp3e^S}SN!A?od!ZII>xikerCy?& z9`-4#UZ8hVO@-{Dt<@2Z$(oyj{OFyhJ_41O_yVL2T1E!Bt#aX6-JXo{*E&-g);ZRu z9;fV>6WY)Grd!tXP_%ou~Jn^C`g@+H8zlZ=NmuiD`_&E|f zX*qqGpZSGT3?+x|x?UQ46Q(;A(z|j}jXSYHgySJU-=CAgI)dcBC=EIO6ymI{vxAT# zGRH_V>x7nmc$?kjVimyw!KN3!T60!yC|ET+p5W>I1e(lkpJucDLH z&7Nc;ZhcB=O6UGK?UB;uz)#%m6{N(|fG;!^3nD*aZn(DRu+*4*** zi&wL;vsKUZIpMFUX&fJL#qv1M#y#0g(t}auvA8G{a|bU8K>=`B_Bh4}h9{9gXXRp| z;QKA`NzGkuUYFG$i5#J7_lnJNh5bKBJcQQ3e-{Hb_O$=5_WwT}%+#_~$$ixRU0TsG zhg+4^&jeK$>Q4LzlH6*Kd!wXKLzdr#h~tuzR21 z!4a=Mv1{Men(3?Ql^3gO1J}Y! znCNIb{xK1;duWAvOQP%j(=UiS**R%UJ4Xs@L}`!57`+;$1D!yO^m5&!^Ruw^+q{$)W-!FT^)?cuqOgdM$9nxzBi z6w>O>sy8om`jgs#+}arxXhW|yg$Ibj8GGU}yAyCHQs}p+jjyx6D)BEK6#hM@bn*U~ zI1X%_mHH{oU9Z1(9`i9rms{QEpJ0h|sS%!w@Kb1QyUeSeK;FlS3_y$&u`}j*@tXN1 z{=#*6r87g4v+R|fRto&mH(%c&Xz`3{Y_iaf=D6f z0H$?Sj7)MYgYcO4!{orhht4Zu9cXR@Q^mu@h}LH#&CPqP@kImksK>!Ktd)xPR$o&_ zhbnL;fHUd~0&vbvu)XHP&M$7dl_vsb63F?SP&eMh61bVb;mOXOiYzSxvrSy% zhr!lNl-YB!Fe#AzT6*bfsdRt^COWN>QJ<6{<27bfl;m}ils%8Dkx8;7Pf4HO=X$YA zO);BFmtkYy4N?>Aalzt#qjX8C7r_F>LTDC)$I`NK+^`NDfg6A!_tKf6kwXx8g(v`% zhWlk*nbfvFL$zbxyg0SH{6Ubh=ZFsb{rU!HmBJ&{W1rGG{Ix0EC&u4yzCU^Atc~-x z`%gZ{-FDB6cpY+MGE`fP6a2ROEF#v>@q%2?Xuu;c^%CWwGTMXF|se4IYd zTna(AZ}cY5ij?P@3JESInv8w^wCkXwRt}%>aOWsoeT34djkO{oLnTSx&XwXwIG2gS zkSGRW!c`uZH=OY*ScBSoV zm6<44JZXkkgQ>r5G!OeECVRA4){P@_Ii-9yb^5TIVe5pOY z_{egdgZwcu&klWpG;QD&!#4*m++g0Mn$CKWfz@L~UHYF)Fe?v#o%G&W?uU?uiA8BJ zUG=86%G}P$mQc+JR`7WjX9fsGeG&W z4=H9@zTbQn^SS{98>ZKef)$;%rD!K6qPn!f_v7P}coJ<&ohA5o27X;UN zVppYNp{2}-My&II00qMsr?uecRVD8*bGM{XieissPRUGnfzlUK%BC{i=4@bEvA!guNKr7gmNk z-ZjN&q`E^AH)m}UXRct@rLGt}QRj&3zM$AY8<`<~)Q3X9Cl z@~C%Oupwg|6mHvn@cnRHaZ&c$!_3&@BU(_vSU7jmM~kL49@X8CPQ)DaAYxU2=Ry3 zsR1c}8FP($L1s3I)0>;REA4N=_wS=m*^Uo+gvDf`vwdX*#(QZQ7$|7fLGcd2CSL@C z11K4gV{aA+mdyuZT<<0$wz7ga zabl|gPW;4o7vjIy{a}GDHKhF;fK2dc7P#II-+(%JR|%a3QUE`wvuitTpV(Ihp$5QN zBSGht%;zDUA%di<)1aXSyFF0g^X$B}a$lRFV*4Q76Z@)2??z&TqB$B_s6E#VHS|1O zadOIvAd~%&8S)S@*Vc6OSN(_E0cFX@Do}`BGvl~sL$OK>*MUev}b3Q%<85-6}u3P zilYU<-h`LFP)zf0hq6Y24pjhvOiB5krj(!9&KeS;p}HRcw$%UPLs95#x(7deAM=VO zaYbKfL>_=CBN{+7U%l|?Zr;jfS+BF2WABJB0>V!SgCBRBlm+Ok(CLSL0K}jI*4by#(R0*#1H>pq{IJ>y?H1RCwYo)2Szd%RIz1JwRLH@ zpu`lDcoBKZqt)n|I$wEt@1z5c*LS=B24%@ZR@K^qMKr6>h#~~YBfuBf#}4@fGYPKL zgd?nS>V@FMfQ~X-Kp9bj>RWlmv+3Xtp#dhZ#;E!{<U)>rSsH%Po7cP zeP8@)Yc=P-#JHL(=J;_oo{$ z9`=5y(5$NPDn4odSlu9)onPP~@HDQdipaCnN>z~s$`he!2(6{oA@p(bvViCCyeZBi zT)?|pJM6-uG8Ws`2xnY-+{dydUZ|1RVfef0+W~L0R8NC3-}H7<(#ETd5mm* zvO~lx;l#Gl^}V^{9wo=_)r4pTp0zrba!y;IF2>)|?dim$(1FOjX+tPWiHh9dxR0HN zT@K&6GQe4R77P;8S~hhcsW0ToA~gm2ca1oBo%9ry4|@=eA>n&`oc&;@Je}nvG!8!c zI0rh|oXh`R31uw1PcR1RyY>DF6&ua$qb5C0538>yA3p27;rr{ z8$ss*K>&dO!F$ke9UV0dUQ`sF1|Pj>=fd*R*#RKC%Slrgdj1yH56&8K5N25;Jmi=v z3IIjwHvQ}S7u$EYolFRZwj-%2LL+K%aYI%{+o@Q_*5sJf2EpH+MpB)<|&i?9dlOv>A5A}T9%>r$8zru|Dc~CA_YCX*~(`<+DuT+2W zfA*Qf{^u-+QQ9|={O>{V71tp-wM|(%l$sy-nqzaX;#=@ydfXSOAKX8cpJSmv{QG3m z&}$`u;Mn%RBp>y`7eNf!>3@p&$$eY>Zm#I`IH>(3|JTN0CJLk#$;x<6)91&H~f zE^#FJxxKw7dip2xqh`C@I0u5arr1tu^r)n5GwUnhQCW7W|55h0cYDiRZ!01EP5ra= z?{iy{a~f>*NtYzBN8_=AYaBoBb-h z{_!4S$hCvU%PhisI$nmrGhFd#tA1Ifsid|hfe2;rKVTF0yc=BoGiw7}E*7U>Q!aO& z{tpp9tN*;kh5Ns7ZljxrK>#iTy@u-k2bgJ)Wl8zxD?x^+eXerVxk$gu#{+)7Dz^hx zY{3AAx6~1@J3C$088iFq<>} zmEb2&hratjI5UzLLx|ljDA1{g7x>}*MgH#=6xcd|MC`@fuTQcnH`N#XC_e+Ed0)R3 zFf2(=6q6++TE|NQM_(@3--_jp=L_sf_mpI+X_Pph;@}b%R8$bc&8g?fCWIwuRE45D zT1l1($Z}vxYcm_{=Ky zHB{&#xtIhmJvEE`%#0hwGAjj(EHRxmG%lDzCWxf(Q*i~BB(y1S4U8+t(;aSK2q1fP z0i-J^Sb+@rg@AAfkAy}(Uj@gkW;BCoHB5r8YK|-n5y^%>zN*P!64I$icepTl)#p;+ zXrE?KMVQ(S;409QQR_XS^jYPxvddN~B@wZVNI;4X#IEx&VwhGT69znMc(kxR+Oyx#7o88lrUHrOWJ8hC8@B~(q zD6ca=DEzi4U-n?OOdQQ5nU5ZjUC|OvxzZSlzM?9|EL_(~C6pYw`$j_J;qoFO$h6k!#>1OGZ3-K9xLzxwB8en|Z*)&~q{G z;pH=D(fN8uyiHO$^GRV?80!s=Nphu0(i$fzy91>P(2a&A&YHrRjnYiCSXGe=*|Wri zLcS(zww=)@1$0NTEIO3H3iFJXqb%Qi=h=jOkc?VB>29)^EH3mAO(j@7S;aCbmgN=s z9Iw2~@;8Llnd`?su0F5maz)9Ke4qj2MQS&CbS0u>bw|8Sl8`xMRycR$n>8FSmeXFE zh9~beNk*Y%8#8hP%*R(oD%w(c6|XT_vs;A>6stW|!;!9H_OcLCxn(G$(!}r$*kR8p zeQ!4{q}u*OkywpKS(7_`K3zCZgHj1&L`ovI)-10SeG{={xMhlLpTmJI^GEt&Khh8A GLijJRdATtF literal 0 HcmV?d00001 diff --git a/tests/sample-data/amv-meteosat-9.items b/tests/sample-data/amv-meteosat-9.items new file mode 100644 index 00000000..6a2da879 --- /dev/null +++ b/tests/sample-data/amv-meteosat-9.items @@ -0,0 +1,1232 @@ +messageNumber 1 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 0 +dataCategory 5 +dataSubCategory 87 +masterTablesVersionNumber 13 +localTablesVersionNumber 1 +typicalYearOfCentury 7 +typicalMonth 4 +typicalDay 1 +typicalHour 2 +typicalMinute 30 +typicalDate 20070401 +typicalTime 023000 +rdbType 3 +oldSubtype 87 +localYear 2007 +localMonth 4 +localDay 1 +localHour 2 +localMinute 30 +localSecond 0 +rdbtimeDay 8 +rdbtimeHour 2 +rdbtimeMinute 33 +rdbtimeSecond 45 +rdbtimeTime 023345 +rectimeDay 10 +rectimeHour 10 +rectimeMinute 0 +rectimeSecond 0 +restricted 0 +correction1 0 +correction1Part 0 +correction2 0 +correction2Part 0 +correction3 0 +correction3Part 0 +correction4 0 +correction4Part 0 +qualityControl 70 +newSubtype 0 +numberOfSubsets 128 +localLongitude1 -54.16368 +localLatitude1 -23.35105 +localLongitude2 -0.04413 +localLatitude2 23.36464 +localNumberOfObservations 128 +satelliteID 56 +observedData 1 +compressedData 1 +unexpandedDescriptors [310195 222000 236000 101103 31031 1031 1032 101004 33007 222000 + 237000 1031 1032 101004 33252 222000 237000 1031 1032 101004 + 33253 222000 237000 1031 1032 101004 33007 222000 237000 1031 + 1032 101004 33252 222000 237000 1031 1032 101004 33253 222000 + 237000 1031 1032 101004 33007 222000 237000 1031 1032 101004 + 33252 222000 237000 1031 1032 101004 33253] +satelliteIdentifier [56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56] +centre [[254 254 254 ... 254 254 254] + [254 254 254 ... 254 254 254] + [254 254 254 ... 254 254 254] + ... + [254 254 254 ... 254 254 254] + [254 254 254 ... 254 254 254] + [254 254 254 ... 254 254 254]] +satelliteClassification [333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 + 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 + 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 + 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 + 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 + 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 + 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 + 333 333] +segmentSizeAtNadirInXDirection [72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000] +segmentSizeAtNadirInYDirection [72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 72000 + 72000 72000 72000 72000 72000 72000 72000 72000] +year [[2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 + 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 + 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 + 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 + 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 + 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 + 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 + 2007 2007] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +month [[4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +day [[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +hour [[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +minute [[30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30] + [15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15] + [45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45] + [30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +second [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +latitude [ 21.73731 21.78789 21.95659 21.94843 22.15286 22.11873 22.23809 + 22.38469 22.28571 22.09408 22.26712 22.20222 22.2104 22.30071 + 22.50147 21.42244 21.85295 21.92395 21.42612 21.58227 22.47158 + 22.05592 21.7581 22.11506 22.05114 21.68357 21.72078 21.52831 + 21.63644 21.77032 21.96458 21.82955 21.94275 21.92804 21.9378 + 21.93353 21.95131 21.9825 22.00146 21.98511 22.05141 22.05106 + 22.05434 22.08421 22.23336 22.1838 22.10537 22.37011 22.59635 + 22.47994 22.82597 22.89624 22.81462 22.8856 22.58859 22.81277 + 22.90599 22.62417 23.23134 22.90709 22.88863 22.11731 22.62062 + 22.66139 22.25601 22.27894 22.712 22.74456 22.66222 22.61409 + 22.5574 22.73435 22.79649 22.8231 22.54971 22.58967 22.68635 + 22.64299 22.65282 22.6601 22.64921 22.72423 22.78481 22.83137 + 22.8585 22.9328 22.89897 22.99615 23.28815 23.32597 23.02937 + 23.18169 23.36464 22.96779 22.92454 22.90706 23.1876 23.00965 + 23.11364 23.24113 23.25286 23.04246 23.18793 23.36429 23.33989 + 23.32959 23.3596 23.34536 -22.96209 -22.85361 -22.80733 -22.83035 + -22.81474 -22.85011 -22.91787 -22.92964 -22.84958 -22.88189 -23.04716 + -23.03791 -23.02296 -23.03617 -23.03255 -23.19291 -23.08657 -23.10534 + -23.08158 -23.35105] +longitude [-3.325834e+01 -3.437898e+01 -3.474412e+01 -3.603752e+01 -3.713806e+01 + -3.760519e+01 -3.913862e+01 -4.162704e+01 -4.310753e+01 -4.365237e+01 + -4.579286e+01 -4.633709e+01 -4.793798e+01 -5.169932e+01 -5.416368e+01 + -2.458914e+01 -2.573121e+01 -2.649312e+01 -3.500800e-01 -1.237590e+00 + -4.053291e+01 -1.620930e+00 -2.509960e+00 -2.602050e+00 -4.961930e+00 + -5.618080e+00 -6.308840e+00 -7.287150e+00 -9.676770e+00 -1.027271e+01 + -1.182140e+01 -1.266023e+01 -1.361482e+01 -1.485469e+01 -1.567291e+01 + -1.632300e+01 -1.709135e+01 -1.794289e+01 -1.866122e+01 -1.949098e+01 + -2.026868e+01 -2.097618e+01 -2.188943e+01 -2.260411e+01 -2.336704e+01 + -2.796504e+01 -2.902795e+01 -3.202988e+01 -3.321489e+01 -3.429049e+01 + -3.543748e+01 -3.641085e+01 -3.668082e+01 -3.770843e+01 -3.940680e+01 + -4.059754e+01 -4.162848e+01 -4.261482e+01 -4.469181e+01 -4.549667e+01 + -4.650942e+01 -2.466344e+01 -2.586206e+01 -2.666123e+01 -1.154590e+00 + -4.531500e+00 -2.071590e+00 -4.459330e+00 -5.565680e+00 -7.220340e+00 + -8.851200e+00 -9.526900e+00 -1.178959e+01 -1.289836e+01 -1.507114e+01 + -1.571783e+01 -1.652065e+01 -1.717446e+01 -1.791675e+01 -1.867211e+01 + -1.959171e+01 -2.040273e+01 -2.110345e+01 -2.195348e+01 -2.276736e+01 + -2.364528e+01 -2.801413e+01 -3.013428e+01 -3.136570e+01 -3.294963e+01 + -3.342652e+01 -3.908730e+01 -2.677502e+01 -1.141400e+00 -5.376560e+00 + -1.363085e+01 -8.308500e-01 -3.116470e+00 -3.667330e+00 -1.770990e+00 + -5.495290e+00 -8.316340e+00 -8.974320e+00 -1.509299e+01 -1.585860e+01 + -1.732933e+01 -1.805444e+01 -2.028325e+01 -4.413000e-02 -7.803100e-01 + -5.115900e+00 -5.804070e+00 -6.487960e+00 -7.239370e+00 -7.869660e+00 + -8.575880e+00 -9.320290e+00 -1.003777e+01 -1.373584e+01 -1.446008e+01 + -1.521692e+01 -1.596983e+01 -1.666163e+01 -1.927627e+01 -2.058524e+01 + -2.138918e+01 -2.232792e+01 -2.258979e+01] +satelliteInstrumentDataUsedInProcessing [4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 4194304 + 4194304 4194304] +satelliteDerivedWindComputationMethod [5 3 3 5 3 3 3 3 3 3 3 3 3 5 5 5 5 5 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 3 3 3 3 3 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 3 3 5 3 3 5 3 3 3 3 3 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 3 3] +pressure [[30660.0 46490.0 40770.0 ... 52200.0 48460.0 52190.0] + [26420.0 64020.0 61020.0 ... 42320.0 -- --] + [43060.0 18030.0 23660.0 ... 70540.0 -- --] + ... + [-- 56590.0 50870.0 ... -- 58560.0 62290.0] + [-- 18380.0 23850.0 ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold [[-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl [[-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->percentConfidence->percentConfidence->percentConfidence [[0 0 0 ... 0 0 0] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->nominalConfidenceThreshold->nominalConfidenceThreshold [[-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->manualAutomaticQualityControl->manualAutomaticQualityControl [[-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->percentConfidence->percentConfidence [[49 98 98 ... 84 89 92] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->nominalConfidenceThreshold [[-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->manualAutomaticQualityControl [[-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +pressure->percentConfidence [[45 80 82 ... 79 72 74] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + ... + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --] + [-- -- -- ... -- -- --]] +windDirection [[290 279 279 279 274 273 271 263 257 258 259 258 257 262 260 317 313 306 + 245 230 263 226 226 228 232 237 237 240 250 242 266 272 36 283 302 305 + 305 301 303 301 302 296 320 298 289 301 315 308 288 282 311 308 307 310 + 297 302 297 312 300 326 296 280 283 266 306 221 226 199 222 229 229 221 + 233 253 266 306 309 314 314 308 64 74 93 99 95 105 325 307 94 70 330 + 345 334 308 303 300 267 255 307 319] + [296 278 -- 280 273 273 272 260 255 258 261 258 256 286 265 316 312 303 + 246 230 263 227 227 227 235 238 236 240 238 241 270 282 18 297 308 306 + 306 299 304 304 304 297 301 305 289 304 325 358 286 278 310 303 310 311 + 286 288 308 312 298 330 277 273 285 265 305 221 224 212 221 227 229 222 + -- 265 258 316 316 317 315 307 64 83 92 103 98 88 3 352 95 86 349 354 + 326 302 297 290 264 265 302 317] + [288 278 279 277 274 273 271 264 -- 257 258 258 257 263 263 316 313 310 + 244 230 264 226 227 229 230 237 237 240 248 244 257 265 51 282 301 302 + 306 290 296 297 301 296 338 294 288 297 312 292 287 282 313 310 306 312 + 295 287 276 322 299 320 294 278 281 264 307 222 229 188 222 231 229 220 + 235 247 270 282 301 312 315 309 69 82 92 102 89 91 309 220 116 57 335 + 343 333 306 296 302 268 249 313 322] + [287 281 279 278 275 273 271 264 259 259 258 258 -- 260 255 318 -- -- + 244 230 263 224 226 229 233 237 238 -- 274 242 272 283 46 258 275 307 + 304 309 306 301 302 295 324 297 290 303 302 298 289 286 310 311 306 308 + 310 330 312 308 302 333 308 287 -- 267 -- 222 -- -- 223 -- 229 -- 230 + 246 270 291 287 313 312 308 56 33 95 91 100 144 292 273 81 74 312 340 + 343 312 316 305 270 254 -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->percentConfidence->percentConfidence->percentConfidence [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->nominalConfidenceThreshold->nominalConfidenceThreshold [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->manualAutomaticQualityControl->manualAutomaticQualityControl [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->percentConfidence->percentConfidence [[49 98 98 76 99 99 99 98 49 99 98 99 99 32 34 76 96 92 98 97 99 99 98 93 + 96 99 99 98 33 49 54 31 55 35 45 91 90 62 65 95 95 99 43 72 39 83 34 42 + 96 45 88 96 94 85 78 51 49 53 81 33 59 41 95 99 98 99 87 37 99 97 98 88 + 94 63 53 58 34 87 88 80 54 37 95 96 92 70 36 43 63 69 76 91 94 79 89 81 + 92 84 89 92] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->nominalConfidenceThreshold [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->manualAutomaticQualityControl [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windDirection->percentConfidence [[45 80 82 69 79 79 85 98 57 98 91 95 84 33 32 61 78 74 84 83 99 89 90 93 + 95 99 97 97 33 50 56 32 44 29 43 91 92 62 66 88 93 97 45 78 40 68 40 40 + 77 36 86 95 94 88 81 59 58 54 66 31 55 37 76 97 80 92 85 29 92 96 97 88 + 93 52 47 62 38 80 81 78 45 30 83 83 80 60 29 35 51 56 69 78 82 66 76 78 + 80 79 72 74] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed [[32.7 41.7 41.900000000000006 39.900000000000006 44.5 43.5 + 44.400000000000006 45.800000000000004 44.400000000000006 + 46.900000000000006 53.0 55.2 55.800000000000004 11.5 30.700000000000003 + 35.5 38.6 39.300000000000004 27.700000000000003 30.3 45.1 32.2 35.9 + 34.2 28.900000000000002 27.5 27.400000000000002 26.5 16.5 24.3 18.5 + 14.5 6.1000000000000005 6.6000000000000005 12.4 20.900000000000002 + 19.900000000000002 15.3 16.0 14.200000000000001 15.5 17.1 13.0 + 14.700000000000001 15.0 34.4 15.700000000000001 23.900000000000002 45.2 + 42.6 24.5 20.400000000000002 17.7 18.0 17.5 13.700000000000001 + 14.100000000000001 10.700000000000001 38.0 15.0 11.3 35.9 + 46.300000000000004 47.7 40.5 39.400000000000006 30.200000000000003 + 10.100000000000001 40.300000000000004 29.700000000000003 32.5 32.6 + 28.900000000000002 10.9 14.600000000000001 14.9 12.100000000000001 25.1 + 27.0 24.900000000000002 5.800000000000001 8.3 5.7 5.9 5.5 5.7 3.6 2.1 + 2.6 3.8000000000000003 4.2 4.4 4.7 3.7 5.2 6.300000000000001 4.5 + 2.4000000000000004 4.7 4.9] + [29.900000000000002 41.400000000000006 -- 41.7 44.1 43.300000000000004 + 45.2 45.2 40.400000000000006 46.900000000000006 52.6 55.6 + 55.900000000000006 1.7000000000000002 22.700000000000003 + 39.900000000000006 38.800000000000004 39.2 28.1 29.5 45.0 32.4 34.6 + 30.0 27.400000000000002 27.8 27.0 27.200000000000003 20.200000000000003 + 24.5 17.7 5.2 7.5 8.8 19.5 20.0 20.1 14.9 19.6 14.600000000000001 + 15.700000000000001 18.0 14.0 11.4 13.3 34.5 20.0 15.5 47.0 41.7 22.1 + 20.6 16.2 15.200000000000001 18.2 10.0 8.8 6.7 38.300000000000004 + 12.700000000000001 8.4 33.1 47.6 48.7 40.7 39.400000000000006 + 32.300000000000004 8.700000000000001 40.1 29.700000000000003 30.6 30.3 + -- 11.700000000000001 15.5 29.3 23.3 23.6 23.5 24.1 7.800000000000001 + 11.600000000000001 5.7 5.4 5.300000000000001 5.9 4.0 3.0 2.2 3.0 3.5 + 3.7 4.5 3.1 5.4 4.9 4.5 1.7000000000000002 5.0 5.2] + [31.8 41.300000000000004 40.7 38.900000000000006 44.6 43.5 44.2 46.5 -- + 46.0 54.900000000000006 55.1 55.7 15.4 28.200000000000003 35.9 + 38.400000000000006 39.5 28.1 30.900000000000002 45.1 32.1 + 36.300000000000004 34.5 29.8 27.900000000000002 27.3 25.8 18.6 + 26.400000000000002 20.1 27.0 5.6000000000000005 5.9 14.3 + 20.200000000000003 20.0 11.600000000000001 12.700000000000001 14.0 + 15.600000000000001 16.8 11.4 13.4 13.700000000000001 33.0 16.5 23.3 + 45.5 44.7 23.200000000000003 20.700000000000003 17.2 17.400000000000002 + 16.3 16.8 16.3 6.800000000000001 37.6 21.6 10.9 34.1 44.900000000000006 + 47.900000000000006 40.2 39.2 28.1 11.5 40.2 29.700000000000003 + 33.300000000000004 34.9 28.3 11.4 18.2 7.300000000000001 8.9 23.0 + 28.900000000000002 25.0 6.1000000000000005 8.5 5.2 5.9 6.0 + 6.1000000000000005 4.4 0.6000000000000001 2.0 4.7 4.5 + 4.6000000000000005 4.7 2.8000000000000003 5.300000000000001 6.4 4.4 + 2.4000000000000004 4.3 4.5] + [36.6 42.5 43.1 39.0 44.900000000000006 43.6 43.7 45.7 + 48.300000000000004 47.800000000000004 51.400000000000006 + 54.900000000000006 -- 17.6 41.400000000000006 30.700000000000003 -- -- + 26.900000000000002 30.6 45.1 32.1 36.9 38.1 29.6 26.900000000000002 + 28.0 -- 10.8 21.900000000000002 17.8 11.200000000000001 5.0 5.2 + 3.4000000000000004 22.5 19.700000000000003 19.400000000000002 15.8 13.9 + 15.200000000000001 16.5 13.5 19.200000000000003 18.0 35.6 10.8 32.9 + 43.2 41.300000000000004 28.1 20.0 19.700000000000003 21.3 18.0 14.4 + 17.1 18.5 38.300000000000004 10.700000000000001 14.600000000000001 40.5 + -- 46.6 -- 39.7 -- -- 40.6 -- 33.7 -- 29.400000000000002 9.8 + 10.100000000000001 8.0 4.1000000000000005 28.8 28.5 25.5 3.6 + 4.800000000000001 6.4 6.300000000000001 5.300000000000001 + 5.1000000000000005 2.4000000000000004 2.7 3.5 3.7 4.6000000000000005 + 4.800000000000001 4.9 5.2 4.9 7.4 4.5 3.2 -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->percentConfidence->percentConfidence->percentConfidence [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->nominalConfidenceThreshold->nominalConfidenceThreshold [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->manualAutomaticQualityControl->manualAutomaticQualityControl [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->percentConfidence->percentConfidence [[49 98 98 76 99 99 99 98 49 99 98 99 99 32 34 76 96 92 98 97 99 99 98 93 + 96 99 99 98 33 49 54 31 55 35 45 91 90 62 65 95 95 99 43 72 39 83 34 42 + 96 45 88 96 94 85 78 51 49 53 81 33 59 41 95 99 98 99 87 37 99 97 98 88 + 94 63 53 58 34 87 88 80 54 37 95 96 92 70 36 43 63 69 76 91 94 79 89 81 + 92 84 89 92] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->nominalConfidenceThreshold [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->manualAutomaticQualityControl [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +windSpeed->percentConfidence [[45 80 82 69 79 79 85 98 57 98 91 95 84 33 32 61 78 74 84 83 99 89 90 93 + 95 99 97 97 33 50 56 32 44 29 43 91 92 62 66 88 93 97 45 78 40 68 40 40 + 77 36 86 95 94 88 81 59 58 54 66 31 55 37 76 97 80 92 85 29 92 96 97 88 + 93 52 47 62 38 80 81 78 45 30 83 83 80 60 29 35 51 56 69 78 82 66 76 78 + 80 79 72 74] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +satelliteChannelCentreFrequency [4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 4.79668e+13 + 4.07881e+13 4.07881e+13 4.07881e+13 4.07881e+13 4.07881e+13 4.07881e+13 + 4.07881e+13 4.07881e+13 4.07881e+13 4.07881e+13 4.07881e+13 4.07881e+13 + 4.07881e+13 4.07881e+13 4.07881e+13 4.07881e+13 4.07881e+13 4.07881e+13 + 4.07881e+13 4.07881e+13] +satelliteChannelBandWidth [1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 1.665514e+14 + 1.665514e+14 1.665514e+14 1.665514e+14 2.997925e+14 2.997925e+14 + 2.997925e+14 2.997925e+14 2.997925e+14 2.997925e+14 2.997925e+14 + 2.997925e+14 2.997925e+14 2.997925e+14 2.997925e+14 2.997925e+14 + 2.997925e+14 2.997925e+14 2.997925e+14 2.997925e+14 2.997925e+14 + 2.997925e+14 2.997925e+14 2.997925e+14] +coldestClusterTemperature [241.7 261.3 254.8 241.3 284.7 281.8 247.2 221.3 214.7 214.1 238.9 233.8 + 245.6 257.5 255.8 246.9 246. 245.7 228.5 225.7 223.5 230.5 229.5 240. + 253.9 248.6 247.3 252.4 252.1 253.3 256.3 258. 259.7 260.7 260.2 258.7 + 256.2 252.9 250.6 249.2 248.6 248.5 248.2 247.2 246.2 245.2 245.3 242. + 269.5 280.7 231. 238.6 251.5 233.9 240.5 223.6 216.8 218.4 282.5 263.3 + 273.8 245.8 245. 245. 225.1 252.8 255.3 239.8 244.6 247.5 250.1 250.9 + 254.9 256.7 261.5 261.1 260.8 258.8 255.3 251.3 248.3 247. 246.4 246. + 245.4 244.9 244.9 244.2 242.2 240.3 267.4 231. 244.3 229.1 243. 258.1 + 227.9 241.9 236.9 253.6 249.8 248.2 249. 260.6 261. 260.7 257.4 246.1 + 282.4 282.6 282.9 282.9 282.3 281.4 281.2 279.7 278.4 277.6 277.2 276.6 + 274.6 271.2 268.4 264.8 264.8 266.8 263.3 267.1] +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold->nominalConfidenceThreshold [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +coldestClusterTemperature->manualAutomaticQualityControl->manualAutomaticQualityControl->manualAutomaticQualityControl [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +coldestClusterTemperature->percentConfidence->percentConfidence->percentConfidence [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] +coldestClusterTemperature->nominalConfidenceThreshold->nominalConfidenceThreshold [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +coldestClusterTemperature->manualAutomaticQualityControl->manualAutomaticQualityControl [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +coldestClusterTemperature->percentConfidence->percentConfidence [49 98 98 76 99 99 99 98 49 99 98 99 99 32 34 76 96 92 98 97 99 99 98 93 + 96 99 99 98 33 49 54 31 55 35 45 91 90 62 65 95 95 99 43 72 39 83 34 42 + 96 45 99 98 99 98 97 68 97 58 49 83 49 89 94 61 97 98 93 99 99 36 58 63 + 44 57 41 69 58 88 88 96 94 85 78 51 49 53 81 33 59 41 95 99 98 99 87 37 + 99 97 98 88 94 63 53 58 34 87 88 80 54 37 95 96 92 70 36 43 63 69 76 91 + 94 79 89 81 92 84 89 92] +coldestClusterTemperature->nominalConfidenceThreshold [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +coldestClusterTemperature->manualAutomaticQualityControl [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +coldestClusterTemperature->percentConfidence [45 80 82 69 79 79 85 98 57 98 91 95 84 33 32 61 78 74 84 83 99 89 90 93 + 95 99 97 97 33 50 56 32 44 29 43 91 92 62 66 88 93 97 45 78 40 68 40 40 + 77 36 93 87 82 93 88 68 97 50 40 68 40 71 76 50 83 96 94 96 96 29 47 51 + 46 45 35 71 64 85 86 95 94 88 81 59 58 54 66 31 55 37 76 97 80 92 85 29 + 92 96 97 88 93 52 47 62 38 80 81 78 45 30 83 83 80 60 29 35 51 56 69 78 + 82 66 76 78 80 79 72 74] +heightAssignmentMethod [[10 2 2 ... 10 2 2] + [2 2 2 ... 2 2 2] + [9 3 3 ... 9 3 3] + ... + [-- 2 2 ... -- 2 2] + [-- 4 4 ... -- 4 4] + [-- -- -- ... -- -- --]] +tracerCorrelationMethod [0 2 2 0 2 2 2 2 2 2 2 2 2 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 2 2 2 2 2 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 2 2 0 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2] +landOrSeaQualifier [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + 0 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 2 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] +satelliteZenithAngle [44.67 45.72 46.15 47.33 48.44 48.86 50.34 52.73 54.08 54.52 56.61 57.1 + 58.63 62.25 64.66 36.91 38.16 38.85 24.76 24.96 51.74 25.53 25.26 25.68 + 26.01 25.76 25.99 26.09 27.15 27.56 28.51 28.82 29.47 30.19 30.72 31.13 + 31.66 32.27 32.79 33.37 33.99 34.52 35.22 35.8 36.52 40.27 41.14 43.93 + 45.11 46.02 47.24 48.15 48.36 49.33 50.75 51.96 52.96 53.76 55.95 56.58 + 57.52 37.47 38.81 39.5 25.73 26.18 26.32 26.69 26.84 27.26 27.78 28.24 + 29.34 29.94 30.91 31.35 31.94 32.33 32.83 33.36 34. 34.64 35.21 35.88 + 36.52 37.26 40.79 42.65 43.9 45.3 45.55 50.74 40.08 26.56 27.09 30.42 + 26.8 26.77 26.97 26.9 27.49 28.11 28.51 31.7 32.13 33.05 33.55 35.07 + 27.19 27.06 27.54 27.73 27.89 28.15 28.43 28.69 28.89 29.22 31.19 31.58 + 32. 32.46 32.89 34.75 35.58 36.17 36.85 37.26] +originOfFirstGuessInformationForGoesIOrMSoundings [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +timeSignificance [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28] + [29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29] + [28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28] + [29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29] + [28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28] + [29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +timePeriod [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- --] +airTemperature [[233.8 276.90000000000003 274.2 232.5 275.2 275.3 265.40000000000003 + 236.4 221.4 225.10000000000002 270.40000000000003 269.3 277.7 + 244.60000000000002 243.70000000000002 239.70000000000002 239.4 238.8 + 230.10000000000002 227.60000000000002 235.10000000000002 234.0 233.4 + 255.9 265.0 255.5 255.4 255.5 245.20000000000002 246.10000000000002 + 247.70000000000002 249.20000000000002 250.4 250.20000000000002 248.0 + 245.0 243.3 242.70000000000002 243.60000000000002 244.10000000000002 + 243.10000000000002 241.10000000000002 240.4 239.9 239.10000000000002 + 238.9 237.9 235.10000000000002 272.3 275.5 242.10000000000002 + 242.10000000000002 243.20000000000002 240.60000000000002 239.8 + 239.10000000000002 238.5 238.10000000000002 238.8 237.20000000000002 + 235.5 232.4 271.40000000000003 247.60000000000002 238.9 234.5 245.5 + 250.60000000000002 232.20000000000002 244.20000000000002 + 241.60000000000002 255.4 253.10000000000002 241.70000000000002 + 242.60000000000002 252.4 251.9 245.10000000000002 241.70000000000002 + 240.20000000000002 269.7 269.90000000000003 269.7 270.40000000000003 + 271.0 270.3 269.2 268.2 267.8 267.5 265.7 264.1 263.40000000000003 + 261.7 259.0 256.6 256.3 256.5 -- --] + [257.7 213.20000000000002 227.8 255.3 -- -- 230.9 226.8 -- + 217.70000000000002 225.20000000000002 -- -- 275.5 273.0 271.6 268.2 + 265.1 -- 230.5 226.9 234.9 -- -- 243.20000000000002 246.3 + 245.10000000000002 -- 267.1 268.90000000000003 270.2 270.6 271.6 273.0 + 273.5 273.6 273.8 273.2 272.7 272.6 271.90000000000003 271.7 272.2 + 272.2 271.40000000000003 260.8 259.2 257.3 230.10000000000002 -- 274.0 + 273.5 272.40000000000003 271.1 270.6 269.6 269.2 267.90000000000003 + 259.40000000000003 258.2 257.0 255.60000000000002 -- 232.4 259.8 -- -- + 270.40000000000003 231.60000000000002 239.9 240.8 245.5 + 240.60000000000002 265.8 267.1 273.2 273.6 274.1 274.1 271.2 287.0 + 287.1 286.40000000000003 286.40000000000003 286.2 286.2 286.3 289.2 + 293.0 291.7 287.5 286.7 287.0 286.90000000000003 286.40000000000003 + 278.6 279.40000000000003 280.40000000000003 -- --] + [241.70000000000002 -- 252.5 241.3 -- -- 242.8 235.20000000000002 -- + 225.4 240.5 -- -- 257.5 255.8 246.9 246.0 245.70000000000002 -- 232.9 + 239.10000000000002 238.8 252.4 250.10000000000002 242.3 + 244.10000000000002 245.3 -- 252.10000000000002 253.3 256.3 258.0 259.7 + 260.7 260.2 258.7 256.2 252.9 250.60000000000002 249.20000000000002 + 248.60000000000002 248.5 248.20000000000002 247.20000000000002 + 246.20000000000002 245.20000000000002 245.3 242.0 255.9 -- 255.3 251.3 + 248.3 247.0 246.4 246.0 245.4 244.9 244.9 244.20000000000002 + 242.20000000000002 240.3 -- 250.0 244.3 -- -- 258.1 230.8 + 237.20000000000002 240.4 244.3 -- 248.20000000000002 249.0 260.6 261.0 + 260.7 257.40000000000003 246.10000000000002 282.40000000000003 282.6 + 282.90000000000003 282.90000000000003 282.3 281.40000000000003 281.2 + 279.7 278.40000000000003 277.6 277.2 276.6 274.6 271.2 + 268.40000000000003 264.8 264.8 266.8 -- --] + [216.5 221.9 229.0 216.20000000000002 234.60000000000002 + 239.10000000000002 234.20000000000002 223.8 215.3 214.20000000000002 + 221.8 217.3 -- 224.0 223.3 222.70000000000002 221.60000000000002 + 220.60000000000002 228.20000000000002 225.8 225.0 229.4 228.3 233.5 + 241.60000000000002 244.60000000000002 244.3 -- 231.60000000000002 + 232.10000000000002 233.9 233.60000000000002 232.20000000000002 + 229.70000000000002 227.60000000000002 226.0 224.10000000000002 + 223.20000000000002 222.8 223.0 223.10000000000002 223.10000000000002 + 223.20000000000002 223.3 223.0 219.60000000000002 219.60000000000002 + 217.3 222.70000000000002 228.9 223.20000000000002 222.5 + 222.10000000000002 222.3 222.5 222.70000000000002 222.5 222.5 219.3 + 218.60000000000002 217.70000000000002 217.0 226.20000000000002 228.5 + 219.70000000000002 228.10000000000002 239.3 233.0 226.8 238.3 238.4 -- + 240.70000000000002 227.5 227.9 231.10000000000002 229.20000000000002 + 224.4 223.20000000000002 221.4 258.0 257.90000000000003 256.5 256.2 + 255.8 255.3 255.20000000000002 254.60000000000002 254.10000000000002 + 253.70000000000002 248.20000000000002 246.5 245.60000000000002 245.5 + 246.10000000000002 242.3 242.0 244.8 -- --] + [245.10000000000002 -- 249.10000000000002 245.70000000000002 + 248.70000000000002 250.70000000000002 245.4 230.8 222.4 + 218.10000000000002 238.3 234.8 -- 260.5 260.0 249.70000000000002 + 250.60000000000002 251.8 231.20000000000002 223.9 232.8 232.5 + 231.20000000000002 237.8 238.3 242.0 244.20000000000002 + 246.10000000000002 255.9 256.5 258.3 259.3 264.90000000000003 268.5 + 269.7 270.5 263.40000000000003 258.2 257.1 256.5 256.0 256.6 256.7 + 250.8 248.70000000000002 254.0 256.40000000000003 249.3 -- 251.8 267.3 + 257.2 254.5 253.0 252.60000000000002 251.60000000000002 + 249.20000000000002 248.20000000000002 253.3 255.8 254.9 + 244.20000000000002 245.5 235.3 250.3 230.0 237.60000000000002 259.6 + 225.3 235.9 238.0 242.70000000000002 235.3 252.8 253.10000000000002 + 266.90000000000003 267.90000000000003 270.7 271.5 250.60000000000002 + 289.90000000000003 290.0 288.90000000000003 288.90000000000003 289.2 + 289.7 289.7 282.7 281.8 281.3 282.6 286.5 286.6 286.40000000000003 + 272.2 271.3 271.90000000000003 273.0 -- --] + [-- 261.3 254.8 -- 284.7 281.8 247.20000000000002 221.3 + 214.70000000000002 214.10000000000002 238.9 233.8 245.60000000000002 -- + -- -- -- -- 228.5 225.70000000000002 223.5 230.5 229.5 240.0 253.9 + 248.60000000000002 247.3 252.4 -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- 269.5 280.7 -- -- -- -- -- -- -- -- -- -- -- -- + 267.40000000000003 231.0 -- 229.10000000000002 243.0 -- 227.9 241.9 + 236.9 253.60000000000002 249.8 -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- 263.3 267.1] + [-- 211.10000000000002 227.0 -- -- 227.20000000000002 228.70000000000002 + 226.10000000000002 -- 214.60000000000002 210.20000000000002 -- -- -- -- + -- -- -- -- 220.3 227.20000000000002 223.60000000000002 230.5 + 241.70000000000002 233.0 238.3 241.60000000000002 -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- 231.10000000000002 -- -- -- + -- -- -- -- -- -- -- -- -- -- -- 234.5 -- -- -- -- 219.70000000000002 + 225.5 223.10000000000002 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- 261.3 254.8 -- 284.7 281.8 247.20000000000002 221.3 + 214.70000000000002 214.10000000000002 238.9 233.8 245.60000000000002 -- + -- -- -- -- 228.5 225.70000000000002 223.5 230.5 229.5 240.0 253.9 + 248.60000000000002 247.3 252.4 -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- 269.5 280.7 -- -- -- -- -- -- -- -- -- -- -- -- + 267.40000000000003 231.0 -- 229.10000000000002 243.0 -- 227.9 241.9 + 236.9 253.60000000000002 249.8 -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- 263.3 267.1] + [-- 214.10000000000002 228.20000000000002 -- -- 232.60000000000002 236.9 + 227.8 -- 217.10000000000002 215.5 -- -- -- -- -- -- -- -- 222.9 230.8 + 227.4 235.60000000000002 246.4 242.8 245.3 250.0 -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- 234.4 -- -- -- -- -- -- -- -- + -- -- -- -- -- -- 238.8 -- -- -- -- 230.4 236.8 227.4 -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- --]] +generatingApplication [[1 1 1 ... 1 1 1] + [1 1 1 ... 1 1 1] + [1 1 1 ... 1 1 1] + ... + [3 3 3 ... 3 3 3] + [3 3 3 ... 3 3 3] + [3 3 3 ... 3 3 3]] diff --git a/tests/sample-data/amv-noaa-20.attributes b/tests/sample-data/amv-noaa-20.attributes new file mode 100644 index 00000000..cdeae3b6 --- /dev/null +++ b/tests/sample-data/amv-noaa-20.attributes @@ -0,0 +1,326 @@ +messageNumber: 1 +centre->code: '001033' +centre->units: Common CODE TABLE C-1 +centre->scale: 0 +centre->reference: 0 +centre->width: 8 +subCentre->code: '001034' +subCentre->units: Common CODE TABLE C-12 +subCentre->scale: 0 +subCentre->reference: 0 +subCentre->width: 8 +softwareVersionNumber->code: '025061' +softwareVersionNumber->units: CCITT IA5 +softwareVersionNumber->scale: 0 +softwareVersionNumber->reference: 0 +softwareVersionNumber->width: 96 +databaseIdentification->code: '025062' +databaseIdentification->units: Numeric +databaseIdentification->scale: 0 +databaseIdentification->reference: 0 +databaseIdentification->width: 14 +satelliteIdentifier->code: '001007' +satelliteIdentifier->units: CODE TABLE +satelliteIdentifier->scale: 0 +satelliteIdentifier->reference: 0 +satelliteIdentifier->width: 10 +satelliteChannelCentreFrequency->code: '002153' +satelliteChannelCentreFrequency->units: Hz +satelliteChannelCentreFrequency->scale: -8 +satelliteChannelCentreFrequency->reference: 0 +satelliteChannelCentreFrequency->width: 26 +directionOfMotionOfMovingObservingPlatform->code: '001012' +directionOfMotionOfMovingObservingPlatform->units: deg +directionOfMotionOfMovingObservingPlatform->scale: 0 +directionOfMotionOfMovingObservingPlatform->reference: 0 +directionOfMotionOfMovingObservingPlatform->width: 9 +crossTrackResolution->code: '002026' +crossTrackResolution->units: m +crossTrackResolution->scale: 2 +crossTrackResolution->reference: 0 +crossTrackResolution->width: 22 +alongTrackResolution->code: '002027' +alongTrackResolution->units: m +alongTrackResolution->scale: 2 +alongTrackResolution->reference: 0 +alongTrackResolution->width: 22 +segmentSizeAtNadirInXDirection->code: '002028' +segmentSizeAtNadirInXDirection->units: m +segmentSizeAtNadirInXDirection->scale: 0 +segmentSizeAtNadirInXDirection->reference: 0 +segmentSizeAtNadirInXDirection->width: 18 +segmentSizeAtNadirInYDirection->code: '002029' +segmentSizeAtNadirInYDirection->units: m +segmentSizeAtNadirInYDirection->scale: 0 +segmentSizeAtNadirInYDirection->reference: 0 +segmentSizeAtNadirInYDirection->width: 18 +windProcessingMethod->code: '002161' +windProcessingMethod->units: FLAG TABLE +windProcessingMethod->scale: 0 +windProcessingMethod->reference: 0 +windProcessingMethod->width: 16 +tracerCorrelationMethod->code: '002164' +tracerCorrelationMethod->units: CODE TABLE +tracerCorrelationMethod->scale: 0 +tracerCorrelationMethod->reference: 0 +tracerCorrelationMethod->width: 3 +satelliteDerivedWindComputationMethod->code: '002023' +satelliteDerivedWindComputationMethod->units: CODE TABLE +satelliteDerivedWindComputationMethod->scale: 0 +satelliteDerivedWindComputationMethod->reference: 0 +satelliteDerivedWindComputationMethod->width: 4 +landOrSeaQualifier->code: '008012' +landOrSeaQualifier->units: CODE TABLE +landOrSeaQualifier->scale: 0 +landOrSeaQualifier->reference: 0 +landOrSeaQualifier->width: 2 +dayOrNightQualifier->code: '008013' +dayOrNightQualifier->units: CODE TABLE +dayOrNightQualifier->scale: 0 +dayOrNightQualifier->reference: 0 +dayOrNightQualifier->width: 2 +gridPointIdentifier->code: '001124' +gridPointIdentifier->units: Numeric +gridPointIdentifier->scale: 0 +gridPointIdentifier->reference: 0 +gridPointIdentifier->width: 24 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +second->code: '004006' +second->units: s +second->scale: 0 +second->reference: 0 +second->width: 6 +timePeriod->code: '004086' +timePeriod->units: s +timePeriod->scale: 0 +timePeriod->reference: -8192 +timePeriod->width: 15 +extendedHeightAssignmentMethod->code: '002162' +extendedHeightAssignmentMethod->units: CODE TABLE +extendedHeightAssignmentMethod->scale: 0 +extendedHeightAssignmentMethod->reference: 0 +extendedHeightAssignmentMethod->width: 6 +pressure->code: '007004' +pressure->units: Pa +pressure->scale: -1 +pressure->reference: 0 +pressure->width: 14 +windDirection->code: '011001' +windDirection->units: deg +windDirection->scale: 0 +windDirection->reference: 0 +windDirection->width: 9 +windSpeed->code: '011002' +windSpeed->units: m/s +windSpeed->scale: 1 +windSpeed->reference: 0 +windSpeed->width: 12 +u->code: ['011003', '011003', '011003', '011003', '011003', '011095', '011095', '011095', '011003'] +u->units: ['m/s', 'm/s', 'm/s', 'm/s', 'm/s', 'm/s', 'm/s', 'm/s', 'm/s'] +u->scale: [1, 1, 1, 1, 1, 1, 1, 1, 1] +u->reference: [-4096, -4096, -4096, -4096, -4096, -4096, -4096, -4096, -4096] +u->width: [13, 13, 13, 13, 13, 13, 13, 13, 13] +v->code: ['011004', '011004', '011004', '011004', '011004', '011096', '011096', '011096', '011004'] +v->units: ['m/s', 'm/s', 'm/s', 'm/s', 'm/s', 'm/s', 'm/s', 'm/s', 'm/s'] +v->scale: [1, 1, 1, 1, 1, 1, 1, 1, 1] +v->reference: [-4096, -4096, -4096, -4096, -4096, -4096, -4096, -4096, -4096] +v->width: [13, 13, 13, 13, 13, 13, 13, 13, 13] +airTemperature->code: '012001' +airTemperature->units: K +airTemperature->scale: 1 +airTemperature->reference: 0 +airTemperature->width: 12 +heightOfTopOfCloud->code: '020014' +heightOfTopOfCloud->units: m +heightOfTopOfCloud->scale: -1 +heightOfTopOfCloud->reference: -40 +heightOfTopOfCloud->width: 11 +satelliteZenithAngle->code: '007024' +satelliteZenithAngle->units: deg +satelliteZenithAngle->scale: 2 +satelliteZenithAngle->reference: -9000 +satelliteZenithAngle->width: 15 +observationSequenceNumber->code: '001023' +observationSequenceNumber->units: Numeric +observationSequenceNumber->scale: 0 +observationSequenceNumber->reference: 0 +observationSequenceNumber->width: 9 +delayedDescriptorReplicationFactor->code: '031001' +delayedDescriptorReplicationFactor->units: Numeric +delayedDescriptorReplicationFactor->scale: 0 +delayedDescriptorReplicationFactor->reference: 0 +delayedDescriptorReplicationFactor->width: 8 +satelliteClassification->code: '002020' +satelliteClassification->units: CODE TABLE +satelliteClassification->scale: 0 +satelliteClassification->reference: 0 +satelliteClassification->width: 9 +satelliteInstruments->code: '002019' +satelliteInstruments->units: CODE TABLE +satelliteInstruments->scale: 0 +satelliteInstruments->reference: 0 +satelliteInstruments->width: 11 +channelNumber->code: '005042' +channelNumber->units: Numeric +channelNumber->scale: 0 +channelNumber->reference: 0 +channelNumber->width: 6 +orbitNumber->code: '005040' +orbitNumber->units: Numeric +orbitNumber->scale: 0 +orbitNumber->reference: 0 +orbitNumber->width: 24 +bearingOrAzimuth->code: '005021' +bearingOrAzimuth->units: deg +bearingOrAzimuth->scale: 2 +bearingOrAzimuth->reference: 0 +bearingOrAzimuth->width: 16 +trackingCorrelationOfVector->code: '011113' +trackingCorrelationOfVector->units: Numeric +trackingCorrelationOfVector->scale: 3 +trackingCorrelationOfVector->reference: -1000 +trackingCorrelationOfVector->width: 12 +coefficientOfVariation->code: '025148' +coefficientOfVariation->units: Numeric +coefficientOfVariation->scale: 2 +coefficientOfVariation->reference: -10000 +coefficientOfVariation->width: 15 +firstOrderStatistics->code: '008023' +firstOrderStatistics->units: CODE TABLE +firstOrderStatistics->scale: 0 +firstOrderStatistics->reference: 0 +firstOrderStatistics->width: 6 +xAxisErrorEllipseMajorComponent->code: '020111' +xAxisErrorEllipseMajorComponent->units: m +xAxisErrorEllipseMajorComponent->scale: -1 +xAxisErrorEllipseMajorComponent->reference: 0 +xAxisErrorEllipseMajorComponent->width: 17 +yAxisErrorEllipseMinorComponent->code: '020112' +yAxisErrorEllipseMinorComponent->units: m +yAxisErrorEllipseMinorComponent->scale: -1 +yAxisErrorEllipseMinorComponent->reference: 0 +yAxisErrorEllipseMinorComponent->width: 17 +angleOfXAxisInErrorEllipse->code: '020114' +angleOfXAxisInErrorEllipse->units: deg +angleOfXAxisInErrorEllipse->scale: 2 +angleOfXAxisInErrorEllipse->reference: -18000 +angleOfXAxisInErrorEllipse->width: 16 +timeSignificance->code: '008021' +timeSignificance->units: CODE TABLE +timeSignificance->scale: 0 +timeSignificance->reference: 0 +timeSignificance->width: 5 +verticalSignificanceForNwp->code: '008086' +verticalSignificanceForNwp->units: FLAG TABLE +verticalSignificanceForNwp->scale: 0 +verticalSignificanceForNwp->reference: 0 +verticalSignificanceForNwp->width: 12 +standardGeneratingApplication->code: '001044' +standardGeneratingApplication->units: CODE TABLE +standardGeneratingApplication->scale: 0 +standardGeneratingApplication->reference: 0 +standardGeneratingApplication->width: 8 +percentConfidence->code: '033007' +percentConfidence->units: % +percentConfidence->scale: 0 +percentConfidence->reference: 0 +percentConfidence->width: 7 +measurementUncertaintyExpression->code: '008092' +measurementUncertaintyExpression->units: CODE TABLE +measurementUncertaintyExpression->scale: 0 +measurementUncertaintyExpression->reference: 0 +measurementUncertaintyExpression->width: 5 +amvQualityFlag->code: '033066' +amvQualityFlag->units: FLAG TABLE +amvQualityFlag->scale: 0 +amvQualityFlag->reference: 0 +amvQualityFlag->width: 24 +cloudAmountInSegment->code: '020081' +cloudAmountInSegment->units: % +cloudAmountInSegment->scale: 0 +cloudAmountInSegment->reference: 0 +cloudAmountInSegment->width: 7 +cloudType->code: '020012' +cloudType->units: CODE TABLE +cloudType->scale: 0 +cloudType->reference: 0 +cloudType->width: 6 +cloudPhase->code: '020056' +cloudPhase->units: CODE TABLE +cloudPhase->scale: 0 +cloudPhase->reference: 0 +cloudPhase->width: 3 +pressureAtTopOfCloud->code: '020016' +pressureAtTopOfCloud->units: Pa +pressureAtTopOfCloud->scale: -1 +pressureAtTopOfCloud->reference: 0 +pressureAtTopOfCloud->width: 14 +verticalSignificanceSatelliteObservations->code: '008003' +verticalSignificanceSatelliteObservations->units: CODE TABLE +verticalSignificanceSatelliteObservations->scale: 0 +verticalSignificanceSatelliteObservations->reference: 0 +verticalSignificanceSatelliteObservations->width: 6 +optimalEstimationCost->code: '025149' +optimalEstimationCost->units: Numeric +optimalEstimationCost->scale: 0 +optimalEstimationCost->reference: 0 +optimalEstimationCost->width: 8 +cloudOpticalThickness->code: '013093' +cloudOpticalThickness->units: Numeric +cloudOpticalThickness->scale: 0 +cloudOpticalThickness->reference: 0 +cloudOpticalThickness->width: 8 +iceOrLiquidWaterPath->code: '013109' +iceOrLiquidWaterPath->units: kg m-2 +iceOrLiquidWaterPath->scale: 3 +iceOrLiquidWaterPath->reference: 0 +iceOrLiquidWaterPath->width: 10 +cloudParticleSize->code: '040038' +cloudParticleSize->units: m +cloudParticleSize->scale: 7 +cloudParticleSize->reference: 0 +cloudParticleSize->width: 28 +meteorologicalFeature->code: '008011' +meteorologicalFeature->units: CODE TABLE +meteorologicalFeature->scale: 0 +meteorologicalFeature->reference: 0 +meteorologicalFeature->width: 6 +emissivity->code: '014050' +emissivity->units: % +emissivity->scale: 1 +emissivity->reference: 0 +emissivity->width: 10 diff --git a/tests/sample-data/amv-noaa-20.bufr b/tests/sample-data/amv-noaa-20.bufr new file mode 100644 index 0000000000000000000000000000000000000000..afcc970f136e6c73ebca54eade81226a7ec30376 GIT binary patch literal 3891 zcmaJ@cT`i`(%(sd1f+x(ibx5eNKu-Ih>&I|QX)knMG*rcMFD9lkf0zPLX#q5KtZI4 z(!_E#fD}P5L_tI^NEgw|rFlU_@*Un?zVE$%-mHCQ&u?b-Icv?HGc!aNiX#v+L;xTG zfHz?ByD9-`Bnqty05Adw*H~99WolAv^E?X~BXA9pl3bBQ^o<27p^HfV0k93&v({orDO6{%8N+90mmW z@c>W(a0dKT0CNEZG~k2I=vnZ1oU9NX3#f_1V<+|VD&yM=hmeO7h-U)mhXSJ8R)BRJwonu9dhwFWJrQo3DQH9RR z#-SY-?XN^w?(S#~+clI@{XXj!+}QJ3IQgLd&ZHNv6T3|{bPP5U*dl>G{YCv!+_Gt# z(cYhud+zzX@yfpVHn`FuWZsEenm_m+{dHy3cFOFh!a+n=ZZEggbn4Hwx^(&J-t^yN z;O!sK&$UXfoV*XeT9w}D zrafrhKwW&c|J&@PMH5An-)7~k5rK+Y?;SMQ-F&Fo-$(4kj#@Jc+{H&LNG1gd=bTNB5MFt5vscX}xH`%u<3-S&x}bOH z7ifiwCK1i2x6|@vuyd%V$+XKbEriyMAor$b=HlSGy)~6tbj{(Y&E2!L{-Cy9tOvow zqv8Gf@E9*7^OVX>lw?62Y{;OMCZZgCGfbwkgWx8rfUX92aj++&gwd#=1?S7eOMB_GD=T=e^QkHif#$r#9a4%)b zonssu=ed^A<)NKlTpv=e$LEKhsP!8qRZ$667gzu4rCgo=`L6L~=W2QNr#?&X@KdOV zhR?V&1GJXw(bE~1E3|J9=G7ni^kCpbgZZ`yNtK$j5%!j6+{+U9RVMLL4?@4I@IS|x zYT^RK`52o>9w)QSZW=r0JK#(xV|^ms^D?1gb9xIlvc6+t%|tJkBLvwmeRQ)$%R|pw z6~yC(GAktfY|V6VnnIVd7o}{K<+rDG+-FU-c+0FYL0nR?r*gXGttHhcErxnlzoy~m z=;jjy_G`g?4x4;}L_d+{fSn$fhCeklt&{KnJ%7@$&_*iZ_gecxnhIWAYp;|u(b$@s+I@~b-x^u}!DQ3SEowh{V;vs%J4#DQkp58k)YiNrX$Kl*58 zeKWq*($q{+QLg`uHJ}`eC#WzXAYlv!RH#rH*~_ti z)B4x?UG3wI{^rM3rRQnypPrl)jy}M;F)!Xv(mw6}#+P!Jaix59=)?BMBnC!X@Ne1@ z*IL0a;PZ|6ZOi_YbJ54`0$$v>H+nua(QVL)&qh-}WTauw>f=7_*8u+rh1fT>Pbwcj z{8~C9^~j3tN24{ACPwyVWf>bBKfF@dxF`{nLCSQoe->F|{z)jHRsFU@Ef>UjaLR|G;2 zWEoebR_=f)15lN~Z>vve5HYSm57x22lbc2m5?)XZ`H{La#5&Z>-0|m+6J%O#dL*ni zqi4cR*Y7N@f3fX&wk=_nqJlIxYSU2N{PDRY@Ld02MIJdj^?p#;4h=6@k)t_U0pHWJ zkj8&J5FhcnC4cR8e$SgxqMX%vJ%?q1V^RCh2(BNH!r_q9j($z~CaXDmVkBUkN7Cco z?z62GKYIavB+c~k3?(mtnEHtNg%cXClYUJ2Ko!?BmOSBu)I@ew(PxCE}Kd;_pPk2D6v5| z!odWYif)!Tw(clspHV7BLs=%J4}Uz_Cu95jQALcD)UX_ONa>X`B1Opg`o{_B5~*}< zx1@8_2EwpC;v9Z`hMWfro+^rmeFZQ_766!WxthKN4t!SBjR`r0i$`^c zolTl-L7U(Ke(D6CzbP9a>9zL90DyO0`a%c#m^`Jdu0_Z zVZEdradwseHl3{dg(^3Q5L#MP?<68Vi#xuMpCz~z45AaXg+;Uzz?cOxQ5)PQW zZTc}{G+(nVb(__Mqmi%Sh5WE)L*N8`SM1zK^p%fpY z#X5Tr?5$_T-^rxVxqKPE7`e#z-kQY|L(_&a4cL+cC+H)o_MZj~Jv<$aPag{Idwbq7 zcvIu~;7DbddOt`sXGsLT5bzJndRzne0;m~>y-JKF|nPw|f_LY{R zAvLwCGLA{>N&~M;e0No{x>e=V7km6vT3(BO)JRyUSAgQkaXGB7+CM4ei3kuCc5DjL z_5*-F%-_;j%bRpD{slzHKNK*-aF z1ocW8^y|wwd83j@pP)>wKbQ6Qhb6|AizOa&Z9ldr>cw56-S~cTrF!Dh*luMv;$XV7 zz9gA7vA5&t2DXdb|OzIeD(W zt%w}56hK$$wSg_kVckR99)ZJm+9thQ#RZ+jhr78jJh(WWgxGGGcza4#2W>L zkp~|=*niBKet}_6t{`9|j+o<|0~jHUJc|pvb@y6e6wjRTieOzOTAY`1-X+gaJEW~^ zEU9E^qb+RghIer|B(AI>?M%{_)z${)m!aGTz_hDhf{cR%d@8!88||`nSHQTl*olM- zVFGIMlr9+!EOv0B{U%Lx#`@eM*X1AR(EA^7einPYJXV@TJgiRT9ZmBC|TkGo$hv6AepNfN88e^;P#PK$P$#%rQel8wI zS&0|N&z*+4b(Np6td6^JjcJarC}y~-BTK`Ufu%?3Uc*OBf4~^aKJ%f3J?J{}JU}u1 zQO1rv8J`^=Bq%)zJ0FLQx6ZJdjgvUpC4|F!jkhN-V=BLCI$eC)xSpr+qEyT1{J_F^ zCMNJ`BfBw=zrA}&wJUQ+@6|d*Qs9eaUmdJT;9|9F2By)kH8gupO4lT*FrM!<&erU- zmseMUtgx&ef-f4Hvy0!5>vy*vVEikV5Ze?OEByzoO~x<&((=|aAaSvjvElrThtc>) zeML&$+wk8WQ2$Q<1v1evudR;#i^ei}YnK?m&_BCd-+yBW{jmR~ii6^~0q_<~A+R`H zN9VvFgllzqv}K#@lq>a^E0z@<*<&A*7AfLUVfJU+w8p1uo6hawSFW|N=iK*&N!_76 z`EoNsqT6;;>Qhoi9{Km&zvnR)Mr{}K)5YQh5NlveSuR4_?ns$u_^_Sd_VYBkl*oyr zM?NGpj(M(@SRZshVp(*$^KE#fa*WG|2!Xr^jHg-%iT^Nfxmw|}vu&idBxMv} z?rY%+zN!z(tK$?ivQEPNBt=QXqwq==N&3cXR+~2#hF3~BM7@%_P?bp7 z>-Y0`!4ATAaicyzL-n@&@MHLp4jO9}S5=`Xu5LcthNzoiWL pAQX=(_nr&{aA*{SZius{G`2NTBR0e!#Nz>u#exN50qlk7{{YvE>wN$K literal 0 HcmV?d00001 diff --git a/tests/sample-data/amv-noaa-20.items b/tests/sample-data/amv-noaa-20.items new file mode 100644 index 00000000..813ac9ea --- /dev/null +++ b/tests/sample-data/amv-noaa-20.items @@ -0,0 +1,1008 @@ +messageNumber 1 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 0 +dataCategory 5 +dataSubCategory 87 +masterTablesVersionNumber 31 +localTablesVersionNumber 0 +typicalYearOfCentury 21 +typicalMonth 7 +typicalDay 8 +typicalHour 16 +typicalMinute 45 +typicalDate 20210708 +typicalTime 164500 +rdbType 3 +oldSubtype 87 +localYear 2021 +localMonth 7 +localDay 8 +localHour 16 +localMinute 45 +localSecond 49 +rdbtimeDay 8 +rdbtimeHour 20 +rdbtimeMinute 16 +rdbtimeSecond 48 +rdbtimeTime 201648 +rectimeDay 8 +rectimeHour 20 +rectimeMinute 16 +rectimeSecond 48 +restricted 0 +correction1 0 +correction1Part 0 +correction2 0 +correction2Part 0 +correction3 0 +correction3Part 0 +correction4 0 +correction4Part 0 +qualityControl 70 +newSubtype 0 +numberOfSubsets 90 +localLongitude1 -68.24827 +localLatitude1 55.48825 +localLongitude2 -61.20619 +localLatitude2 61.32039 +localNumberOfObservations 90 +satelliteID 225 +observedData 1 +compressedData 1 +unexpandedDescriptors [310077] +centre [[160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 + 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 + 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 + 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 + 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160] + [ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7]] +subCentre [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] +softwareVersionNumber [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +databaseIdentification [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +satelliteIdentifier [[225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225] + [225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225] + [225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225] + [225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 + 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225 225]] +satelliteChannelCentreFrequency [[2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13] + [2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13] + [2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13] + [2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 + 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13 2.7854e+13]] +directionOfMotionOfMovingObservingPlatform [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +crossTrackResolution [750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. + 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. + 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. + 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. + 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. + 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. + 750. 750. 750. 750. 750. 750.] +alongTrackResolution [750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. + 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. + 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. + 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. + 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. + 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. 750. + 750. 750. 750. 750. 750. 750.] +segmentSizeAtNadirInXDirection [14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250] +segmentSizeAtNadirInYDirection [14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 14250 + 14250 14250 14250 14250 14250 14250] +windProcessingMethod [52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 60 60 52 52 52 52 52 + 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 + 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 + 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52] +tracerCorrelationMethod [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] +satelliteDerivedWindComputationMethod [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] +landOrSeaQualifier [1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 + 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0] +dayOrNightQualifier [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +gridPointIdentifier [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +latitude [[59.82873 60.3422 60.39189 60.72174 61.05453 61.23521 58.02624 58.36485 + 58.38118 58.67451 58.92597 59.08251 59.49718 59.65085 59.96745 60.28745 + 60.38417 60.74161 60.8877 57.89294 58.16847 58.24947 58.50862 58.76418 + 59.11625 59.33283 59.55968 59.847 59.95312 60.16442 60.57495 60.69565 + 57.79885 57.96489 58.2384 58.49363 58.65543 59.28759 59.657 59.95554 + 60.37218 60.52497 60.95902 57.48835 57.6334 57.83198 58.00572 58.42163 + 58.65712 58.69703 58.95338 59.24186 59.48226 59.86671 59.95417 60.35572 + 60.49905 57.65868 57.69904 58.37852 58.60181 59.12189 57.44727 57.98882 + 58.49773 58.5535 58.84887 56.65026 56.69055 57.11485 57.4324 57.68662 + 57.86894 58.27475 58.4004 58.63152 56.70302 57.07567 57.3216 57.28091 + 57.61412 57.77176 56.46699 56.69613 56.87766 57.18587 57.28864 57.45359 + 56.29208 56.0713 ] + [60.12026 60.51973 60.57059 60.50016 61.10853 61.21054 58.33927 58.69575 + 58.69287 58.87222 58.86107 58.89969 59.21508 59.81717 59.95755 60.50546 + 60.56915 60.69195 60.73127 57.9113 58.22836 58.29151 58.45864 58.71258 + 58.85274 59.3294 59.36115 60.05201 60.01098 60.581 60.85451 60.96848 + 57.84861 57.81255 58.04214 58.24602 58.68258 59.12748 59.70505 60.15353 + 60.4836 60.84393 61.03252 57.53548 57.69759 57.791 58.14289 58.52802 + 58.60183 59.02664 59.02777 59.50532 59.32821 59.97353 60.05751 60.6671 + 60.83238 57.77879 58.1194 58.2581 58.52798 59.33649 57.48077 58.32344 + 58.44396 58.99812 58.71679 57.04346 57.18737 57.27507 57.66097 57.68289 + 57.89103 58.24873 58.73666 59.12461 56.9126 57.21608 57.58414 57.5505 + 57.93737 58.15313 56.87624 57.02584 57.11614 57.31825 57.55856 57.81667 + 56.74244 56.14843] + [59.70193 60.21071 60.18832 60.80159 61.29914 61.32039 58.03727 58.1087 + 58.12476 58.54558 58.73026 59.24471 59.78917 59.90739 60.22648 60.35714 + 60.18011 61.18349 61.31051 57.63452 58.09995 58.1286 58.47342 58.85386 + 59.23062 59.17927 59.34859 60.17781 59.72847 59.76949 60.64245 60.58628 + 57.55452 57.58041 58.11921 58.50172 58.76975 59.32424 59.7718 60.19522 + 60.13469 60.61232 60.63483 57.15175 57.35166 57.59732 57.54295 58.00239 + 58.67684 58.72022 58.89653 59.31068 59.68996 60.10902 59.73099 60.11643 + 60.57966 57.18368 57.5783 58.04801 58.16263 59.23819 57.06806 57.81554 + 58.15039 58.21568 58.55978 56.16853 56.2743 56.92384 57.25557 57.33802 + 57.34809 57.98503 58.31105 58.39872 56.58566 56.92558 57.14963 56.79206 + 57.20447 57.39938 56.0006 56.57592 56.66177 56.8695 56.83704 57.10712 + 55.94421 55.48825]] +longitude [[-65.70385 -64.75242 -64.62437 -64.67136 -64.46929 -64.03946 -66.45721 + -66.32391 -66.31026 -65.72372 -65.54172 -65.28809 -64.87218 -64.76865 + -64.43018 -64.60375 -64.59146 -64.24327 -64.09826 -65.72496 -65.48898 + -65.41875 -65.19147 -65.19118 -65.18104 -64.51854 -64.22628 -64.42602 + -64.20505 -63.67738 -63.22178 -63.13851 -65.65819 -65.29514 -65.13031 + -65.12951 -64.98518 -64.17188 -64.05425 -63.24242 -62.81627 -62.78017 + -62.57042 -65.26637 -65.14144 -65.15256 -64.6666 -64.51616 -63.95678 + -63.95748 -63.79149 -63.59149 -63.35603 -63.05106 -62.84131 -62.75153 + -62.51908 -64.38534 -64.31223 -63.79988 -63.81793 -63.35699 -63.95111 + -63.52501 -62.96169 -62.94551 -62.92519 -64.58502 -64.51452 -63.81429 + -63.67079 -63.28632 -63.07611 -63.02581 -62.67409 -62.63752 -63.89572 + -63.66809 -63.40557 -62.96556 -62.94564 -62.71954 -63.53499 -63.43495 + -63.15984 -62.98162 -62.92143 -62.65316 -62.90905 -62.89857] + [-67.99608 -66.1572 -66.06963 -66.06013 -65.54707 -65.16126 -68.18536 + -68.24827 -68.23812 -67.79108 -67.82658 -67.63138 -66.69244 -66.03319 + -66.43215 -66.04219 -66.04894 -65.18102 -64.91335 -67.11016 -66.86019 + -66.69289 -66.68652 -66.89267 -66.90047 -66.08729 -65.90844 -65.66869 + -65.75597 -65.74732 -65.08695 -65.10895 -66.96174 -66.9248 -67.00723 + -67.02081 -66.67822 -65.64334 -65.2781 -64.50254 -64.22465 -64.28986 + -64.77202 -66.69392 -66.62067 -66.87283 -65.76633 -65.63514 -65.14315 + -65.81403 -64.97885 -65.42059 -65.29663 -64.76051 -64.5293 -64.15767 + -64.07005 -65.50392 -66.09114 -65.12693 -64.98706 -65.18378 -65.96523 + -65.60332 -64.69898 -64.33263 -64.60381 -65.45439 -65.76472 -65.13257 + -64.59338 -64.14034 -63.92022 -64.08076 -64.08076 -64.11295 -65.23255 + -64.97048 -64.30054 -63.56134 -64.38622 -63.25352 -64.04059 -65.06446 + -64.00636 -63.89841 -63.5149 -64.09854 -63.49674 -63.85598] + [-64.22852 -62.27715 -62.22527 -62.6 -62.90817 -62.44434 -64.60204 + -64.37862 -64.36404 -64.04686 -63.90453 -63.83533 -62.9511 -62.92699 + -62.11015 -62.23557 -62.19529 -62.84337 -62.66618 -64.00232 -64.15825 + -64.40205 -64.04414 -62.78658 -63.77204 -62.17696 -61.91029 -62.4939 + -61.71879 -61.57138 -61.25322 -61.81071 -63.91255 -63.23965 -64.11226 + -62.73699 -62.55178 -61.76307 -61.745 -61.42591 -61.3988 -61.46717 + -61.23146 -63.35746 -63.49442 -62.98384 -62.77585 -62.79821 -62.13004 + -62.12312 -62.40046 -61.59286 -61.66576 -61.24798 -61.38419 -61.33001 + -61.20619 -62.46825 -63.20982 -62.52363 -62.20712 -61.45162 -62.91325 + -61.96781 -61.81094 -61.81984 -61.73072 -63.77544 -63.31997 -62.23952 + -62.31482 -61.93346 -61.95108 -62.4464 -61.64454 -61.57493 -62.5248 + -62.11697 -62.04618 -62.16676 -62.14618 -61.82159 -62.11636 -62.39479 + -62.12831 -62.26585 -62.13814 -61.78986 -62.46195 -62.3064 ]] +year [2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 + 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 + 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 + 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 + 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 + 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 + 2021 2021 2021 2021 2021 2021] +month [7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7] +day [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +hour [16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16] +minute [45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45] +second [49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49] +timePeriod [[12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 + 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 + 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 + 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 + 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 + 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 + 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 12204 + 12204 12204 12204 12204 12204 12204] + [-6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060] + [ 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [ 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144] + [-6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 -6060 + -6060 -6060 -6060 -6060 -6060 -6060] + [ 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [ 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0] + [ 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 + 6144 6144 6144 6144 6144 6144]] +extendedHeightAssignmentMethod [[15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +pressure [[40760.0 39270.0 40000.0 35350.0 82080.0 39880.0 41400.0 42010.0 41840.0 + 40570.0 40890.0 34730.0 35260.0 38560.0 38020.0 38940.0 39960.0 87430.0 + 88540.0 40880.0 42050.0 41140.0 40780.0 36700.0 35070.0 38410.0 39660.0 + 40250.0 40240.0 40320.0 39850.0 38660.0 40190.0 38240.0 37810.0 38200.0 + 37810.0 41910.0 41920.0 36120.0 42170.0 40150.0 39060.0 33870.0 34510.0 + 35440.0 37260.0 43800.0 38400.0 35630.0 39080.0 37560.0 35680.0 35550.0 + 36880.0 41160.0 40480.0 38400.0 35760.0 36390.0 38730.0 39300.0 35440.0 + 71670.0 33000.0 33530.0 35990.0 34870.0 35280.0 55920.0 55270.0 55840.0 + 56970.0 56400.0 39880.0 33620.0 60020.0 56670.0 56330.0 60160.0 60420.0 + 60010.0 57580.0 57350.0 57850.0 60290.0 60290.0 61630.0 37080.0 76410.0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [31100.0 32730.0 31430.0 -- -- -- -- -- -- 26190.0 28310.0 -- -- -- -- + 34190.0 31410.0 -- -- -- -- -- -- 30800.0 -- -- 33430.0 -- 31860.0 -- + 32170.0 -- -- -- -- 28980.0 28160.0 30720.0 -- -- -- -- -- -- -- + 26500.0 -- -- -- -- -- 34730.0 25200.0 25090.0 -- -- -- -- -- -- -- + 26520.0 -- 30300.0 -- -- -- -- -- -- -- -- -- 80570.0 -- -- -- -- -- -- + -- -- -- -- -- 94990.0 -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +windDirection [282 279 281 260 262 265 279 286 286 280 274 260 253 267 263 275 282 247 + 242 279 275 278 269 266 257 274 270 266 278 291 277 283 280 277 267 263 + 268 264 268 269 284 280 283 282 282 275 291 289 267 279 276 276 259 266 + 282 292 280 290 289 279 284 273 284 285 281 301 276 313 304 283 288 286 + 297 287 289 299 282 281 290 315 301 315 309 287 294 297 314 300 324 307] +windSpeed [17.7 17.7 17.7 15.7 11.7 11.9 17.5 19.3 19.2 18. 18.6 18.1 18.1 14.3 + 19.8 17.2 17.7 11.3 11.2 15.3 13.1 11.1 12.6 19.4 15.1 18.2 18.5 14.5 + 18.6 20.3 17.2 15.1 15.1 18. 14. 20.6 19.6 18.1 16.2 14. 13.1 12.8 + 16.1 16.7 15.6 19. 15.5 14.4 14.3 17.7 12.2 17.9 17.1 16.1 14.7 13.7 + 13. 15.8 14.9 12.6 13.7 17.5 15.5 18.2 14.1 13.9 13.7 11.6 14.8 14.7 + 11.8 11.2 10.8 8.2 12.3 13.7 13.9 14.4 11.8 9.8 12.8 9.8 12.6 14. + 10.2 9.1 9.5 13.1 9. 9.9] +u [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [21.1 12.700000000000001 13.100000000000001 12.5 9.600000000000001 9.9 + 16.7 18.5 18.5 19.700000000000003 21.700000000000003 22.200000000000003 + 17.0 11.700000000000001 18.400000000000002 13.100000000000001 + 13.200000000000001 8.4 7.300000000000001 13.5 13.3 12.3 14.4 16.2 16.3 + 14.700000000000001 15.700000000000001 11.4 14.3 18.8 16.8 17.6 12.8 + 15.9 18.2 18.2 16.2 13.8 11.3 11.600000000000001 12.8 + 13.600000000000001 19.6 14.100000000000001 14.5 16.8 10.700000000000001 + 10.700000000000001 11.3 17.6 11.200000000000001 17.1 18.1 + 15.700000000000001 15.5 12.700000000000001 14.0 11.0 17.400000000000002 + 12.8 11.200000000000001 17.2 19.900000000000002 20.1 16.7 + 13.200000000000001 16.0 8.700000000000001 12.5 13.100000000000001 9.1 + 8.4 8.200000000000001 10.200000000000001 13.5 14.0 13.4 13.0 8.8 5.9 + 14.100000000000001 5.2 5.1000000000000005 16.400000000000002 8.5 9.1 + 5.9 14.200000000000001 6.0 9.8] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [13.5 22.200000000000003 21.5 18.3 13.600000000000001 13.9 17.8 18.6 + 18.6 15.8 15.4 13.5 17.6 16.8 21.0 21.200000000000003 21.5 12.3 12.5 + 16.6 12.700000000000001 9.700000000000001 10.9 22.6 13.100000000000001 + 21.700000000000003 21.3 17.5 22.6 19.1 17.5 11.8 16.900000000000002 + 19.900000000000002 9.700000000000001 22.700000000000003 + 22.900000000000002 22.3 21.1 16.400000000000002 12.700000000000001 + 11.700000000000001 11.8 18.7 16.0 21.0 18.3 16.400000000000002 17.2 + 17.3 13.0 18.5 15.5 16.3 13.3 12.8 11.700000000000001 18.7 + 10.700000000000001 12.200000000000001 15.3 17.7 10.200000000000001 15.0 + 10.9 10.700000000000001 11.200000000000001 8.1 12.0 15.5 13.3 + 13.200000000000001 10.9 5.5 9.8 10.100000000000001 13.700000000000001 + 15.3 13.3 7.9 7.800000000000001 8.700000000000001 14.3 10.4 + 10.200000000000001 7.1000000000000005 7.7 8.5 4.5 6.0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [16.8 16.8 16.900000000000002 15.600000000000001 11.4 13.100000000000001 + 15.700000000000001 14.100000000000001 14.100000000000001 + 13.700000000000001 13.8 17.0 17.8 16.0 17.7 17.0 16.900000000000002 + 10.700000000000001 10.4 14.700000000000001 14.600000000000001 + 13.700000000000001 13.700000000000001 16.1 17.1 16.900000000000002 + 15.600000000000001 16.5 16.900000000000002 16.400000000000002 15.8 + 14.700000000000001 14.700000000000001 15.700000000000001 + 15.200000000000001 15.0 15.200000000000001 14.200000000000001 + 14.200000000000001 18.1 14.200000000000001 15.600000000000001 14.3 + 17.400000000000002 17.1 16.8 15.5 12.200000000000001 13.8 16.1 + 14.600000000000001 16.400000000000002 17.400000000000002 + 18.400000000000002 17.7 14.9 15.100000000000001 14.600000000000001 + 16.400000000000002 15.100000000000001 13.5 13.600000000000001 15.3 11.3 + 15.600000000000001 15.3 15.100000000000001 12.3 14.100000000000001 + 11.100000000000001 11.3 11.0 11.200000000000001 10.700000000000001 12.9 + 15.100000000000001 10.9 11.0 11.200000000000001 10.8 10.700000000000001 + 10.3 11.100000000000001 10.9 10.5 10.700000000000001 10.700000000000001 + 10.700000000000001 10.4 9.3] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +v [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-5.4 -3.3000000000000003 -3.3000000000000003 4.1000000000000005 -1.0 + 0.5 -5.800000000000001 -6.1000000000000005 -5.7 -3.6 1.2000000000000002 + 3.4000000000000004 5.2 -3.1 0.2 -4.0 -3.4000000000000004 0.9 + 2.9000000000000004 -0.30000000000000004 -1.1 -0.8 0.9 0.9 + 4.800000000000001 0.1 3.6 -3.8000000000000003 -1.1 -7.7 + -5.1000000000000005 -5.0 -0.9 2.8000000000000003 3.6 4.5 -0.5 + 2.9000000000000004 -0.9 -3.6 -2.0 -5.9 -1.4000000000000001 -0.9 + -1.2000000000000002 0.8 -2.5 -2.0 1.0 -6.1000000000000005 + -1.4000000000000001 -4.800000000000001 2.8000000000000003 -2.0 + -1.9000000000000001 -5.7 -6.1000000000000005 -2.2 -7.7 2.2 + 1.4000000000000001 -3.9000000000000004 -0.6000000000000001 + -6.1000000000000005 1.0 -8.200000000000001 2.4000000000000004 -7.2 -9.1 + -2.9000000000000004 -4.2 0.1 -0.4 0.5 -6.2 -9.1 -3.8000000000000003 + -2.6 -4.800000000000001 -5.0 -5.9 -7.0 -7.5 -6.1000000000000005 -4.4 + -2.4000000000000004 -5.0 -6.7 -8.3 -1.4000000000000001] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-2.3000000000000003 -2.4000000000000004 -3.7 1.4000000000000001 4.4 1.5 + 0.2 -4.6000000000000005 -4.6000000000000005 -2.3000000000000003 -3.5 + 2.9000000000000004 5.300000000000001 4.6000000000000005 4.7 1.3 -3.7 + 8.0 7.7 -4.7 -1.2000000000000002 -2.2 -0.6000000000000001 1.6 2.1 + -2.8000000000000003 -3.8000000000000003 6.0 -4.1000000000000005 -7.2 + 1.2000000000000002 -2.0 -4.4 -7.0 -2.2 0.1 2.1 0.7000000000000001 2.1 + 4.3 -4.3 1.6 -5.9 -6.1000000000000005 -5.1000000000000005 -4.3 -8.4 + -7.6000000000000005 0.4 0.4 -1.0 1.2000000000000002 3.8000000000000003 + 4.4 -4.0 -4.3 1.5 -8.6 -2.2 -6.0 -8.0 2.1 -6.9 -3.1 -6.300000000000001 + -6.1000000000000005 -5.2 -8.700000000000001 -7.5 -3.5 -3.2 + -6.300000000000001 -9.4 -5.2 -1.6 -4.2 -2.1 -2.7 -3.1 -8.9 -7.4 -6.7 + -8.5 -2.2 -3.9000000000000004 -5.7 -8.200000000000001 + -6.300000000000001 -6.300000000000001 -10.600000000000001] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [0.9 0.5 0.8 -1.4000000000000001 3.6 1.1 0.4 0.9 0.9 0.4 -0.2 0.5 -0.1 + -0.5 -0.4 0.30000000000000004 0.8 2.2 2.2 -0.4 -0.6000000000000001 0.2 + -0.6000000000000001 0.2 0.7000000000000001 -1.0 -2.3000000000000003 + -0.1 -1.0 -1.9000000000000001 -1.5 -0.4 -0.30000000000000004 -0.4 -0.4 + -0.4 -0.4 -1.8 -1.8 -2.2 -1.5 -1.5 -0.8 -2.1 -2.5 -1.3 -2.1 -2.6 -2.7 + -0.7000000000000001 -1.9000000000000001 -2.1 -1.5 -2.2 -2.2 -1.5 + -1.9000000000000001 -3.0 -2.3000000000000003 -2.3000000000000003 -2.7 + -2.9000000000000004 -3.4000000000000004 -5.2 -3.5 -3.5 -3.0 -4.7 + -4.1000000000000005 -5.6000000000000005 -5.1000000000000005 -4.3 + -5.6000000000000005 -3.9000000000000004 -3.9000000000000004 -3.7 -6.0 + -6.2 -5.300000000000001 -7.2 -7.2 -6.0 -7.0 -6.300000000000001 -7.2 + -7.2 -7.2 -7.5 -6.300000000000001 -6.7] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +airTemperature [[241.10000000000002 238.20000000000002 239.20000000000002 232.5 266.2 + 238.4 243.10000000000002 243.8 243.5 241.60000000000002 241.8 232.4 + 232.8 238.0 236.9 237.9 239.20000000000002 269.90000000000003 270.2 + 242.60000000000002 243.9 242.60000000000002 242.0 235.8 232.9 238.0 + 239.70000000000002 240.4 240.20000000000002 240.10000000000002 + 239.10000000000002 237.20000000000002 241.70000000000002 + 238.70000000000002 237.9 238.20000000000002 237.60000000000002 + 243.20000000000002 242.8 234.20000000000002 242.5 239.70000000000002 + 237.70000000000002 231.9 233.0 234.4 237.20000000000002 246.0 238.4 + 234.10000000000002 239.4 236.9 233.8 233.20000000000002 + 235.20000000000002 241.0 240.20000000000002 239.10000000000002 235.0 + 235.70000000000002 239.20000000000002 239.8 234.70000000000002 278.2 + 230.0 230.8 234.9 233.9 234.60000000000002 258.8 258.2 258.6 259.5 + 259.0 241.10000000000002 231.0 261.90000000000003 259.40000000000003 + 259.1 262.0 262.1 261.8 260.3 260.1 260.40000000000003 262.1 262.1 + 262.8 237.3 270.40000000000003] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +heightOfTopOfCloud [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +satelliteZenithAngle [[78.52 77.51 77.37 77.34 77.06 76.62 79.67 79.46000000000001 79.45 78.83 + 78.60000000000001 78.32000000000001 77.83 77.7 77.3 77.38 77.34 76.93 + 76.76 79.03 78.74 78.66 78.38 78.31 78.21000000000001 77.55 77.22 77.33 + 77.10000000000001 76.55 76.03 75.92 78.99 78.62 78.39 78.33 78.15 77.24 + 77.03 76.21000000000001 75.71000000000001 75.63 75.32000000000001 78.72 + 78.56 78.52 78.03 77.78 77.21000000000001 77.2 76.98 76.72 76.44 76.06 + 75.84 75.65 75.4 77.87 77.8 77.15 77.10000000000001 76.54 77.54 77.0 + 76.35000000000001 76.32000000000001 76.22 78.33 78.26 77.51 77.29 76.88 + 76.64 76.48 76.12 76.02 77.7 77.39 77.09 76.71000000000001 76.59 76.34 + 77.45 77.29 77.0 76.75 76.67 76.38 76.95 77.01] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +observationSequenceNumber [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +delayedDescriptorReplicationFactor [1 3 2 1 1 1 1 2] +satelliteClassification [[3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3] + [3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3] + [3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3]] +satelliteInstruments [[616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 + 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 + 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 + 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 + 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616] + [616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 + 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 + 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 + 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 + 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616] + [616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 + 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 + 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 + 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 + 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616 616]] +channelNumber [[15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15] + [15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15] + [15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15]] +orbitNumber [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +bearingOrAzimuth [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +trackingCorrelationOfVector [[0.0 0.0 0.0 0.0 0.6910000000000001 0.27 0.0 0.148 0.126 0.628 0.626 + 0.684 0.0 0.278 0.0 0.0 0.0 0.309 0.07100000000000001 0.0 0.332 0.383 + 0.101 0.457 0.0 0.651 0.057 0.0 0.123 0.0 0.005 0.297 0.0 0.0 0.091 + 0.529 0.619 0.20700000000000002 0.535 0.0 0.186 0.014 0.362 0.0 0.0 0.0 + 0.468 0.279 0.561 0.271 0.446 0.14200000000000002 0.23800000000000002 + 0.016 0.225 0.0 0.016 0.228 0.389 0.0 0.365 0.402 0.0 + 0.11800000000000001 0.299 0.334 0.376 0.0 0.0 0.71 0.553 0.123 0.098 + 0.07100000000000001 0.163 0.51 0.0 0.733 0.168 0.438 0.12 0.302 0.0 0.0 + 0.417 0.167 0.462 0.078 0.391 0.0] + [0.0 0.0 0.0 0.23500000000000001 0.5 0.073 0.265 0.0 0.0 0.258 0.708 + 0.6910000000000001 0.516 0.34 0.0 0.011 0.0 0.219 0.423 0.333 0.201 + 0.454 0.0 0.322 0.633 0.181 0.26 0.0 -- -- -- 0.0 0.379 0.298 0.016 + 0.028 0.196 2.96 0.492 -- -- -- -- 0.148 0.0 0.14200000000000002 0.0 + 0.494 0.0 0.0 0.323 -- -- -- -- -- -- 0.23800000000000002 0.367 0.273 + 0.367 -- 0.081 2.448 2.455 1.847 2.662 0.0 0.08 0.525 0.212 -- -- 0.132 + 3.023 1.947 0.404 0.56 0.27 0.012 0.0 2.1390000000000002 -- 0.093 0.109 + 0.0 0.0 2.13 0.038 0.07200000000000001]] +coefficientOfVariation [[0.02 0.05 0.04 0.01 0.08 0.06 0.01 0.01 0.01 0.02 0.06 0.02 0.03 0.04 + 0.01 0.05 0.04 0.13 0.04 0.01 0.06 0.05 0.09 0.02 0.03 0.06 0.03 0.03 + 0.02 0.04 0.03 0.04 0.06 0.03 0.06 0.02 0.03 0.03 0.04 0.01 0.02 0.04 + 0.02 0.03 0.03 0.03 0.04 0.06 0.07 0. 0.04 0.03 0.03 0.03 0.03 0.04 + 0.02 0.03 0.02 0.02 0.07 0.02 0. 0.02 0.03 0.04 0.03 0.02 0.02 0.05 + 0.1 0.04 0.06 0.07 0.05 0.01 0.03 0.06 0.11 0.06 0.06 0.04 0.05 0.02 + 0.05 0.08 0.07 0.02 0. 0.02] + [0.03 0.01 0.03 0.01 0.06 0.02 0.04 0.02 0.02 0.03 0.03 0.06 0.02 0.04 + 0. 0.03 0.03 0.03 0.02 0.03 0.03 0.02 0.05 0.02 0.05 0.04 0.02 0.01 + 0.01 0.03 0. 0.01 0.04 0.02 0.04 0.01 0.02 0. 0.01 0.01 0.02 0.02 + 0.01 0.02 0.03 0.02 0.02 0.02 0.01 0.01 0.02 0.02 0.07 0.01 0.04 0.02 + 0.03 0.02 0.01 0.02 0.02 0.01 0.02 0.02 0.04 0.04 0.04 0.02 0.01 0.02 + 0.04 0.1 0.04 0.04 0.01 0.03 0.02 0.03 0.09 0.06 0.08 0.05 0.02 0.06 + 0.05 0.06 0.11 0.03 0.03 0.01]] +firstOrderStatistics [[10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +xAxisErrorEllipseMajorComponent [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +yAxisErrorEllipseMinorComponent [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +angleOfXAxisInErrorEllipse [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +timeSignificance [[27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27] + [4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +verticalSignificanceForNwp [[4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +standardGeneratingApplication [[4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4] + [5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5] + [6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6] + [7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7]] +percentConfidence [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [66 62 65 63 15 58 74 99 100 86 61 63 97 50 80 51 66 48 61 73 98 80 79 + 74 73 68 54 46 64 86 71 68 72 53 45 74 71 61 56 46 94 58 52 64 82 70 59 + 41 70 71 95 73 90 66 90 95 56 56 59 62 44 73 43 35 52 87 53 78 81 93 75 + 49 44 36 49 66 97 94 70 71 59 78 41 63 94 72 75 67 46 16] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [55 56 53 51 53 58 66 55 55 55 57 51 54 64 59 62 53 64 57 66 71 63 66 54 + 53 59 59 65 59 51 64 55 63 62 62 50 52 53 59 53 68 62 58 58 60 59 54 61 + 55 60 64 63 53 55 59 61 64 58 53 61 65 57 61 41 57 49 60 44 48 66 70 71 + 71 63 58 46 66 64 71 63 72 65 69 63 69 66 64 69 32 64]] +measurementUncertaintyExpression [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +amvQualityFlag [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +cloudAmountInSegment [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +cloudType [48 48 48 45 45 48 48 48 48 48 48 48 48 48 48 48 48 45 45 48 48 48 48 48 + 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 + 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 44 48 48 48 48 48 46 46 46 + 46 46 45 48 46 46 46 46 46 46 46 46 46 46 46 46 48 44] +cloudPhase [2 2 2 5 5 2 2 2 2 2 2 2 2 2 2 2 2 5 5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 3 3 3 3 3 + 5 2 3 3 3 3 3 3 3 3 3 3 3 3 2 1] +pressureAtTopOfCloud [[42250.0 86660.0 86660.0 92450.0 98570.0 83000.0 59190.0 78280.0 78280.0 + 46380.0 46960.0 45680.0 44850.0 45090.0 41300.0 86660.0 86660.0 96580.0 + 94810.0 70170.0 81820.0 57410.0 45780.0 42990.0 45160.0 56790.0 45630.0 + 45560.0 43020.0 42600.0 40350.0 40180.0 70170.0 90760.0 45360.0 45780.0 + 44910.0 81400.0 70260.0 77840.0 43570.0 43340.0 39660.0 36940.0 39520.0 + 70420.0 80780.0 90540.0 76380.0 45230.0 48560.0 44830.0 88080.0 63210.0 + 39990.0 42380.0 43340.0 57110.0 63440.0 79240.0 81720.0 43760.0 46220.0 + 86760.0 82960.0 98120.0 39280.0 41990.0 42440.0 86190.0 88390.0 84130.0 + 81800.0 86330.0 85240.0 39280.0 90460.0 86190.0 86660.0 85900.0 85070.0 + 82540.0 74350.0 82840.0 93020.0 85900.0 85900.0 94030.0 75660.0 79450.0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [37920.0 26930.0 28740.0 31690.0 39320.0 39480.0 34720.0 36300.0 36300.0 + 35760.0 34060.0 33170.0 32880.0 33730.0 35140.0 26930.0 28740.0 32590.0 + 39730.0 34930.0 34710.0 34990.0 34290.0 34690.0 33170.0 33060.0 36490.0 + 36310.0 37090.0 37390.0 38240.0 37760.0 35010.0 32390.0 32180.0 34240.0 + 34820.0 36270.0 36100.0 33080.0 39030.0 39080.0 38180.0 29960.0 31330.0 + 32390.0 33080.0 34000.0 33560.0 33560.0 34470.0 33310.0 32770.0 33080.0 + 34170.0 38560.0 39140.0 34620.0 34650.0 33640.0 34110.0 34020.0 32180.0 + 55100.0 32080.0 30780.0 30800.0 33040.0 33640.0 33360.0 34250.0 45240.0 + 53360.0 44760.0 32670.0 32080.0 33610.0 35060.0 35670.0 34910.0 35780.0 + 34720.0 34980.0 31840.0 33860.0 35010.0 34910.0 55450.0 35060.0 72270.0] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +verticalSignificanceSatelliteObservations [[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +optimalEstimationCost [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +cloudOpticalThickness [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +iceOrLiquidWaterPath [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +cloudParticleSize [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +meteorologicalFeature [[12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] +emissivity [[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]] diff --git a/tests/sample-data/aura-omi-ak.attributes b/tests/sample-data/aura-omi-ak.attributes new file mode 100644 index 00000000..55f790dd --- /dev/null +++ b/tests/sample-data/aura-omi-ak.attributes @@ -0,0 +1,191 @@ +messageNumber: 1 +originatorOfRetrievedAtmosphericConstituent->code: '001211' +originatorOfRetrievedAtmosphericConstituent->units: CODE TABLE +originatorOfRetrievedAtmosphericConstituent->scale: 0 +originatorOfRetrievedAtmosphericConstituent->reference: 0 +originatorOfRetrievedAtmosphericConstituent->width: 8 +satelliteIdentifier->code: '001007' +satelliteIdentifier->units: CODE TABLE +satelliteIdentifier->scale: 0 +satelliteIdentifier->reference: 0 +satelliteIdentifier->width: 10 +satelliteInstruments->code: '002019' +satelliteInstruments->units: CODE TABLE +satelliteInstruments->scale: 0 +satelliteInstruments->reference: 0 +satelliteInstruments->width: 11 +centre->code: '001033' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 8 +productTypeForRetrievedAtmosphericGases->code: '002172' +productTypeForRetrievedAtmosphericGases->units: CODE TABLE +productTypeForRetrievedAtmosphericGases->scale: 0 +productTypeForRetrievedAtmosphericGases->reference: 0 +productTypeForRetrievedAtmosphericGases->width: 8 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +second->code: '004006' +second->units: s +second->scale: 0 +second->reference: 0 +second->width: 6 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +nonCoordinateLatitude->code: '027001' +nonCoordinateLatitude->units: deg +nonCoordinateLatitude->scale: 5 +nonCoordinateLatitude->reference: -9000000 +nonCoordinateLatitude->width: 25 +nonCoordinateLongitude->code: '028001' +nonCoordinateLongitude->units: deg +nonCoordinateLongitude->scale: 5 +nonCoordinateLongitude->reference: -18000000 +nonCoordinateLongitude->width: 26 +solarElevation->code: '007022' +solarElevation->units: deg +solarElevation->scale: 2 +solarElevation->reference: -9000 +solarElevation->width: 15 +orbitNumber->code: '005040' +orbitNumber->units: Numeric +orbitNumber->scale: 0 +orbitNumber->reference: 0 +orbitNumber->width: 24 +fieldOfViewNumber->code: '005043' +fieldOfViewNumber->units: Numeric +fieldOfViewNumber->scale: 0 +fieldOfViewNumber->reference: 0 +fieldOfViewNumber->width: 8 +cloudCoverTotal->code: '020010' +cloudCoverTotal->units: % +cloudCoverTotal->scale: 0 +cloudCoverTotal->reference: 0 +cloudCoverTotal->width: 7 +pressureAtTopOfCloud->code: '020016' +pressureAtTopOfCloud->units: Pa +pressureAtTopOfCloud->scale: -1 +pressureAtTopOfCloud->reference: 0 +pressureAtTopOfCloud->width: 14 +surfaceFlag->code: '013040' +surfaceFlag->units: CODE TABLE +surfaceFlag->scale: 0 +surfaceFlag->reference: 0 +surfaceFlag->width: 4 +atmosphericChemical->code: '008043' +atmosphericChemical->units: CODE TABLE +atmosphericChemical->scale: 0 +atmosphericChemical->reference: 0 +atmosphericChemical->width: 8 +casRegistryNumber->code: '008044' +casRegistryNumber->units: CCITT IA5 +casRegistryNumber->scale: 0 +casRegistryNumber->reference: 0 +casRegistryNumber->width: 88 +overallQualityOfRetrievedAtmosphericProfile->code: '033054' +overallQualityOfRetrievedAtmosphericProfile->units: CODE TABLE +overallQualityOfRetrievedAtmosphericProfile->scale: 0 +overallQualityOfRetrievedAtmosphericProfile->reference: 0 +overallQualityOfRetrievedAtmosphericProfile->width: 3 +numberOfRetrievedLayers->code: '010040' +numberOfRetrievedLayers->units: Numeric +numberOfRetrievedLayers->scale: 0 +numberOfRetrievedLayers->reference: 0 +numberOfRetrievedLayers->width: 10 +delayedDescriptorReplicationFactor->code: '031001' +delayedDescriptorReplicationFactor->units: Numeric +delayedDescriptorReplicationFactor->scale: 0 +delayedDescriptorReplicationFactor->reference: 0 +delayedDescriptorReplicationFactor->width: 8 +pressure->code: '007004' +pressure->units: Pa +pressure->scale: -1 +pressure->reference: 0 +pressure->width: 14 +decimalScaleOfFollowingSignificands->code: '008090' +decimalScaleOfFollowingSignificands->units: Numeric +decimalScaleOfFollowingSignificands->scale: 0 +decimalScaleOfFollowingSignificands->reference: -127 +decimalScaleOfFollowingSignificands->width: 8 +decimalScaleOfFollowingSignificands->firstOrderStatisticalValue->firstOrderStatisticalValue->code: '224255' +decimalScaleOfFollowingSignificands->firstOrderStatisticalValue->firstOrderStatisticalValue->units: Numeric +decimalScaleOfFollowingSignificands->firstOrderStatisticalValue->firstOrderStatisticalValue->scale: 0 +decimalScaleOfFollowingSignificands->firstOrderStatisticalValue->firstOrderStatisticalValue->reference: 0 +decimalScaleOfFollowingSignificands->firstOrderStatisticalValue->firstOrderStatisticalValue->width: 0 +decimalScaleOfFollowingSignificands->firstOrderStatisticalValue->code: '224255' +decimalScaleOfFollowingSignificands->firstOrderStatisticalValue->units: Numeric +decimalScaleOfFollowingSignificands->firstOrderStatisticalValue->scale: 0 +decimalScaleOfFollowingSignificands->firstOrderStatisticalValue->reference: 0 +decimalScaleOfFollowingSignificands->firstOrderStatisticalValue->width: 0 +integratedMassDensity->code: '015021' +integratedMassDensity->units: kg m-2 +integratedMassDensity->scale: 0 +integratedMassDensity->reference: 0 +integratedMassDensity->width: 24 +integratedMassDensity->firstOrderStatisticalValue->firstOrderStatisticalValue->code: '224255' +integratedMassDensity->firstOrderStatisticalValue->firstOrderStatisticalValue->units: kg m-2 +integratedMassDensity->firstOrderStatisticalValue->firstOrderStatisticalValue->scale: 0 +integratedMassDensity->firstOrderStatisticalValue->firstOrderStatisticalValue->reference: 0 +integratedMassDensity->firstOrderStatisticalValue->firstOrderStatisticalValue->width: 0 +integratedMassDensity->firstOrderStatisticalValue->code: '224255' +integratedMassDensity->firstOrderStatisticalValue->units: kg m-2 +integratedMassDensity->firstOrderStatisticalValue->scale: 0 +integratedMassDensity->firstOrderStatisticalValue->reference: 0 +integratedMassDensity->firstOrderStatisticalValue->width: 0 +numberOfAveragingKernelLayers->code: '015043' +numberOfAveragingKernelLayers->units: Numeric +numberOfAveragingKernelLayers->scale: 0 +numberOfAveragingKernelLayers->reference: 0 +numberOfAveragingKernelLayers->width: 10 +nonCoordinatePressure->code: '010004' +nonCoordinatePressure->units: Pa +nonCoordinatePressure->scale: -1 +nonCoordinatePressure->reference: 0 +nonCoordinatePressure->width: 14 +averagingKernelValue->code: '015044' +averagingKernelValue->units: Numeric +averagingKernelValue->scale: 6 +averagingKernelValue->reference: -5000000 +averagingKernelValue->width: 31 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 +firstOrderStatistics->code: '008023' +firstOrderStatistics->units: CODE TABLE +firstOrderStatistics->scale: 0 +firstOrderStatistics->reference: 0 +firstOrderStatistics->width: 6 diff --git a/tests/sample-data/aura-omi-ak.bufr b/tests/sample-data/aura-omi-ak.bufr new file mode 100644 index 0000000000000000000000000000000000000000..f1c03317f371c953a6eb03008ef3c1dc679c85e7 GIT binary patch literal 1684 zcmbW1dodYf-wwKrB zm4xKcZtW04ZROFLUZNuMUJ6z~c>| z6FPuI{|zt8<{%6q13a3;?$N4>)VrwSx?73S2cWmb-9^3{O;AUk{t`d>CE6S4a!u!>v?UX3xxO`JOSxGB@1-XIG??%>Yt9RW7? zE2ld>E^{f~4GsAKa0;tQ|YyO=4nRX;v z&MUGlpuOo2Z5;S@Ppbdzl>IWm?R{Uq_M~l)3AtYCB;E%=jjaB3MNW=x5p8|TwQAm4 zw~xB(%QZ?=<$+^)-y)u#xlI0kNL?Mw2xy4l%T zFbX~4Z6vEH?Lr0e3^5<+AN`PFKP@+Fxa$ZURa9OWcNheEOR=%3{8(l=mH@y2(Y&u( z=StbY6n)pY=*z8@wC9U(!kGDfLg($O@dE+6#Md%*EYGQe*E z7V{neT{K6_kvT^0o#X8U9g(Oy9dRDrI^yFdbVSGJ_Vr3)bvnsKt0TEds3X-?tmB+_ zNa}(qVHMjVKhtj5a=jw;*#SdqGj6=5r5a1#W;vsp4?C+&B#Y)#=Jh!|$vrV<6)JP< z)!P(%X88mFLhsdMDup7#=VkeA<{e>5ZPq)2r@W18!-_W5r_N zU9)D9y`RN2dPQzNV&0u(5>s==+CGKK<^yaIKg%Q^*Bey=uXvP2^mblXEY9(bbPIMi z)V`v%8aq%tWdOUQaGABk?s073rMUW|wWWsIjmgrrO_PsVcV8Bbd@CWx7X!pmUC`>O zen&ME2wII=^C2|7iSc`!#6&%VF09&CX#d(-+6}-DY#C9Mro8tIa}mLII#+`Iik&a@ z4Lz*zNVm~UuDZ-Pe#t?ZEzW&HpSFt{=q5Fm0HMn=UjtBU#j_RGj~?GF8=N@)!e*Vz zAU-y zc-R*eG&4D3MMj3P&!yCWlNHNO0dQg*{Z?9D+&#ViK>O_Uj11-#Uh(7t=2e(%0MkTqJ6T z6PN=F?lfw!HgWdU*_z4n=C-2~6<-s&(gkS7^VI0+L{b0OzOXg$MxuiYC$ z#S=E&p1#w(UX_rzIuuLNL`A>LAqCsi79CoQ74KhDa7E5(s1bi1fD_RGl8KmVtR!L zILoP{0;d<&=*My*GG8HepO+cESc#QE2QHfkC|-%mk9gq2d?f;firstOrderStatisticalValue->firstOrderStatisticalValue [[-13.0 -13.0 -13.0 -13.0 -13.0 -13.0 -13.0 -13.0 -13.0 -13.0] + [-- -- -- -- -- -- -- -- -- --]] +decimalScaleOfFollowingSignificands->firstOrderStatisticalValue [[-13.0 -13.0 -13.0 -13.0 -13.0 -13.0 -13.0 -13.0 -13.0 -13.0] + [-- -- -- -- -- -- -- -- -- --]] +integratedMassDensity [[ 3562909 11080484 2215897 11462343 10628126 15156289 2284028 9009153 + 3382334 2236232]] +integratedMassDensity->firstOrderStatisticalValue->firstOrderStatisticalValue [[2416660. 2559035. 2524670. 2954883. 2739439. 2430606. 3073505. 2661318. + 2469972. 2388970.]] +integratedMassDensity->firstOrderStatisticalValue [[2442784. 2788684. 2534377. 2957106. 2739440. 2435327. 3081984. 2809710. + 2470204. 2399416.]] +numberOfAveragingKernelLayers [[34 34 34 34 34 34 34 34 34 34]] +nonCoordinatePressure [[1.070000e+01 1.070000e+01 1.070000e+01 1.070000e+01 1.070000e+01 + 1.070000e+01 1.070000e+01 1.070000e+01 1.070000e+01 1.070000e+01] + [4.880000e+01 4.880000e+01 4.880000e+01 4.880000e+01 4.880000e+01 + 4.880000e+01 4.880000e+01 4.880000e+01 4.880000e+01 4.880000e+01] + [1.404000e+02 1.404000e+02 1.404000e+02 1.404000e+02 1.404000e+02 + 1.404000e+02 1.404000e+02 1.404000e+02 1.404000e+02 1.404000e+02] + [3.277000e+02 3.277000e+02 3.277000e+02 3.277000e+02 3.277000e+02 + 3.277000e+02 3.277000e+02 3.277000e+02 3.277000e+02 3.277000e+02] + [6.543000e+02 6.543000e+02 6.543000e+02 6.543000e+02 6.543000e+02 + 6.543000e+02 6.543000e+02 6.543000e+02 6.543000e+02 6.543000e+02] + [1.160600e+03 1.160600e+03 1.160600e+03 1.160600e+03 1.160600e+03 + 1.160600e+03 1.160600e+03 1.160600e+03 1.160600e+03 1.160600e+03] + [1.877700e+03 1.877700e+03 1.877700e+03 1.877700e+03 1.877700e+03 + 1.877700e+03 1.877700e+03 1.877700e+03 1.877700e+03 1.877700e+03] + [2.825300e+03 2.825300e+03 2.825300e+03 2.825300e+03 2.825300e+03 + 2.825300e+03 2.825300e+03 2.825300e+03 2.825300e+03 2.825300e+03] + [4.011100e+03 4.011100e+03 4.011100e+03 4.011100e+03 4.011100e+03 + 4.011100e+03 4.011100e+03 4.011100e+03 4.011100e+03 4.011100e+03] + [5.431800e+03 5.431800e+03 5.431800e+03 5.431800e+03 5.431800e+03 + 5.431800e+03 5.431800e+03 5.431800e+03 5.431800e+03 5.431800e+03] + [6.770700e+03 6.770700e+03 6.770700e+03 6.770700e+03 6.770700e+03 + 6.770700e+03 6.770700e+03 6.770700e+03 6.770700e+03 6.770700e+03] + [7.955800e+03 7.955800e+03 7.955800e+03 7.955800e+03 7.955800e+03 + 7.955800e+03 7.955800e+03 7.955800e+03 7.955800e+03 7.955800e+03] + [9.236100e+03 9.236100e+03 9.236100e+03 9.236100e+03 9.236100e+03 + 9.236100e+03 9.236100e+03 9.236100e+03 9.236100e+03 9.236100e+03] + [1.063310e+04 1.063320e+04 1.063320e+04 1.063320e+04 1.063320e+04 + 1.063310e+04 1.063320e+04 1.063310e+04 1.063310e+04 1.063310e+04] + [1.217990e+04 1.218000e+04 1.218000e+04 1.218000e+04 1.218000e+04 + 1.217990e+04 1.218000e+04 1.217990e+04 1.217990e+04 1.217990e+04] + [1.391560e+04 1.391580e+04 1.391580e+04 1.391600e+04 1.391600e+04 + 1.391560e+04 1.391590e+04 1.391560e+04 1.391570e+04 1.391560e+04] + [1.587370e+04 1.587410e+04 1.587410e+04 1.587450e+04 1.587450e+04 + 1.587380e+04 1.587440e+04 1.587380e+04 1.587380e+04 1.587370e+04] + [1.808080e+04 1.808150e+04 1.808160e+04 1.808240e+04 1.808230e+04 + 1.808100e+04 1.808210e+04 1.808100e+04 1.808110e+04 1.808070e+04] + [2.056490e+04 2.056610e+04 2.056620e+04 2.056750e+04 2.056730e+04 + 2.056520e+04 2.056710e+04 2.056520e+04 2.056530e+04 2.056480e+04] + [2.335640e+04 2.335830e+04 2.335850e+04 2.336050e+04 2.336030e+04 + 2.335690e+04 2.335990e+04 2.335700e+04 2.335710e+04 2.335620e+04] + [2.648890e+04 2.649180e+04 2.649210e+04 2.649500e+04 2.649470e+04 + 2.648960e+04 2.649410e+04 2.648970e+04 2.649000e+04 2.648870e+04] + [2.999870e+04 3.000280e+04 3.000320e+04 3.000740e+04 3.000690e+04 + 2.999980e+04 3.000610e+04 2.999990e+04 3.000030e+04 2.999840e+04] + [3.505080e+04 3.505700e+04 3.505760e+04 3.506380e+04 3.506310e+04 + 3.505240e+04 3.506190e+04 3.505270e+04 3.505320e+04 3.505040e+04] + [4.201310e+04 4.202230e+04 4.202330e+04 4.203270e+04 4.203160e+04 + 4.201550e+04 4.202980e+04 4.201580e+04 4.201670e+04 4.201240e+04] + [5.002150e+04 5.003480e+04 5.003610e+04 5.004950e+04 5.004800e+04 + 5.002500e+04 5.004530e+04 5.002550e+04 5.002670e+04 5.002060e+04] + [5.864940e+04 5.866720e+04 5.866900e+04 5.868700e+04 5.868500e+04 + 5.865400e+04 5.868140e+04 5.865470e+04 5.865630e+04 5.864810e+04] + [6.729080e+04 6.731340e+04 6.731580e+04 6.733870e+04 6.733610e+04 + 6.729670e+04 6.733150e+04 6.729750e+04 6.729960e+04 6.728920e+04] + [7.549990e+04 7.552730e+04 7.553010e+04 7.555780e+04 7.555470e+04 + 7.550700e+04 7.554920e+04 7.550800e+04 7.551050e+04 7.549790e+04] + [8.293090e+04 8.296260e+04 8.296590e+04 8.299800e+04 8.299440e+04 + 8.293910e+04 8.298800e+04 8.294030e+04 8.294310e+04 8.292860e+04] + [8.928410e+04 8.931960e+04 8.932330e+04 8.935920e+04 8.935510e+04 + 8.929330e+04 8.934800e+04 8.929460e+04 8.929780e+04 8.928150e+04] + [9.433740e+04 9.437590e+04 9.437990e+04 9.441890e+04 9.441440e+04 + 9.434740e+04 9.440670e+04 9.434890e+04 9.435230e+04 9.433460e+04] + [9.798740e+04 9.802800e+04 9.803220e+04 9.807320e+04 9.806860e+04 + 9.799790e+04 9.806040e+04 9.799950e+04 9.800310e+04 9.798440e+04] + [1.003480e+05 1.003898e+05 1.003941e+05 1.004365e+05 1.004317e+05 + 1.003589e+05 1.004233e+05 1.003604e+05 1.003642e+05 1.003450e+05] + [1.015305e+05 1.015729e+05 1.015773e+05 1.016202e+05 1.016153e+05 + 1.015415e+05 1.016068e+05 1.015431e+05 1.015469e+05 1.015274e+05]] +averagingKernelValue [[0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. ] + [0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. ] + [0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. ] + [0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. ] + [0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. ] + [0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. ] + [0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. ] + [0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. ] + [0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. ] + [0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. ] + [0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. ] + [0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. ] + [0. 0. 0. 0. 0. 0. 0. 0. + 0. 0. ] + [1.298375 1.320335 1.319448 1.681019 1.57062 1.316611 1.695109 1.368713 + 1.30037 1.276733] + [1.285137 1.310382 1.309519 1.674284 1.565549 1.302056 1.682963 1.358344 + 1.292721 1.269217] + [1.270797 1.298218 1.297383 1.637916 1.532591 1.287502 1.645174 1.341062 + 1.279608 1.255257] + [1.242115 1.262833 1.263184 1.577302 1.478081 1.257274 1.58849 1.303042 + 1.245733 1.223044] + [1.209022 1.230764 1.23119 1.527464 1.434981 1.222567 1.538555 1.267326 + 1.215136 1.194052] + [1.168206 1.193167 1.193681 1.474932 1.385543 1.178904 1.483221 1.223546 + 1.177982 1.158617] + [1.138422 1.164416 1.164997 1.430482 1.346246 1.147556 1.437334 1.188983 + 1.149571 1.130698] + [1.09871 1.132347 1.133004 1.376604 1.299343 1.106132 1.384699 1.149811 + 1.117881 1.099558] + [1.054585 1.099173 1.102114 1.328113 1.25751 1.057991 1.334764 1.10603 + 1.082913 1.065197] + [0.993913 1.049412 1.054676 1.252682 1.19286 0.993056 1.256486 1.042664 + 1.032647 1.014729] + [0.913385 0.981957 0.988483 1.157047 1.112998 0.907969 1.149867 0.95856 + 0.964896 0.950302] + [0.83396 0.922244 0.931115 1.06276 1.036939 0.822882 1.044598 0.87676 + 0.904795 0.89017 ] + [0.747917 0.861424 0.873748 0.965778 0.959612 0.712045 0.939328 0.788047 + 0.841416 0.82789 ] + [0.665183 0.802816 0.817484 0.863408 0.875947 0.616881 0.823262 0.701638 + 0.780222 0.767758] + [0.486477 0.745314 0.735846 0.703118 0.782141 0.437751 0.705846 0.62099 + 0.723399 0.715142] + [0.348587 0.699976 0.66524 0.56034 0.704814 0.360501 0.610023 0.551863 + 0.676411 0.66897 ] + [0.292327 0.621464 0.465558 0.299027 0.533681 0.300044 0.541193 0.489649 + 0.614124 0.5981 ] + [0.24379 0.23222 0.211818 0.241108 0.162259 0.248544 0.453469 0.426283 + 0.425079 0.258783] + [0.206284 0.194622 0.184237 0.198005 0.131836 0.208239 0.392736 0.38135 + 0.224013 0.159994] + [0.174293 0.166977 0.15776 0.160289 0.105215 0.174652 0.286117 0.33757 + 0.15517 0.137445] + [0.101487 0.096205 0.090464 0.090247 0.05958 0.100761 0.153855 0.13595 + 0.089605 0.07946 ]] +generatingApplication [[81 81 81 81 81 81 81 81 81 81] + [81 81 81 81 81 81 81 81 81 81]] +firstOrderStatistics [[ 9 9 9 9 9 9 9 9 9 9] + [14 14 14 14 14 14 14 14 14 14]] diff --git a/tests/sample-data/buoy-drifting.attributes b/tests/sample-data/buoy-drifting.attributes new file mode 100644 index 00000000..3b315f77 --- /dev/null +++ b/tests/sample-data/buoy-drifting.attributes @@ -0,0 +1,427 @@ +messageNumber: 1 +marineObservingPlatformIdentifier->code: '001087' +marineObservingPlatformIdentifier->units: Numeric +marineObservingPlatformIdentifier->scale: 0 +marineObservingPlatformIdentifier->reference: 0 +marineObservingPlatformIdentifier->width: 23 +longStationName->code: '001019' +longStationName->units: CCITT IA5 +longStationName->scale: 0 +longStationName->reference: 0 +longStationName->width: 256 +dataBuoyType->code: '002149' +dataBuoyType->units: CODE TABLE +dataBuoyType->scale: 0 +dataBuoyType->reference: 0 +dataBuoyType->width: 6 +timeSignificance->code: '008021' +timeSignificance->units: CODE TABLE +timeSignificance->scale: 0 +timeSignificance->reference: 0 +timeSignificance->width: 5 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +platformTransmitterIdNumber->code: '001051' +platformTransmitterIdNumber->units: CCITT IA5 +platformTransmitterIdNumber->scale: 0 +platformTransmitterIdNumber->reference: 0 +platformTransmitterIdNumber->width: 96 +dataCollectionLocationSystem->code: '002148' +dataCollectionLocationSystem->units: CODE TABLE +dataCollectionLocationSystem->scale: 0 +dataCollectionLocationSystem->reference: 0 +dataCollectionLocationSystem->width: 5 +directionOfMotionOfMovingObservingPlatform->code: '001012' +directionOfMotionOfMovingObservingPlatform->units: deg +directionOfMotionOfMovingObservingPlatform->scale: 0 +directionOfMotionOfMovingObservingPlatform->reference: 0 +directionOfMotionOfMovingObservingPlatform->width: 9 +platformDriftSpeed->code: '001014' +platformDriftSpeed->units: m/s +platformDriftSpeed->scale: 2 +platformDriftSpeed->reference: 0 +platformDriftSpeed->width: 10 +qualityOfBuoySatelliteTransmission->code: '033022' +qualityOfBuoySatelliteTransmission->units: CODE TABLE +qualityOfBuoySatelliteTransmission->scale: 0 +qualityOfBuoySatelliteTransmission->reference: 0 +qualityOfBuoySatelliteTransmission->width: 2 +qualityOfBuoyLocation->code: '033023' +qualityOfBuoyLocation->units: CODE TABLE +qualityOfBuoyLocation->scale: 0 +qualityOfBuoyLocation->reference: 0 +qualityOfBuoyLocation->width: 2 +locationQualityClassRangeOfRadiusOf66Confidence->code: '033027' +locationQualityClassRangeOfRadiusOf66Confidence->units: CODE TABLE +locationQualityClassRangeOfRadiusOf66Confidence->scale: 0 +locationQualityClassRangeOfRadiusOf66Confidence->reference: 0 +locationQualityClassRangeOfRadiusOf66Confidence->width: 3 +batteryVoltageLargeRange->code: '025026' +batteryVoltageLargeRange->units: V +batteryVoltageLargeRange->scale: 1 +batteryVoltageLargeRange->reference: 0 +batteryVoltageLargeRange->width: 12 +drogueType->code: '002034' +drogueType->units: CODE TABLE +drogueType->scale: 0 +drogueType->reference: 0 +drogueType->width: 5 +lagrangianDrifterDrogueStatus->code: '022060' +lagrangianDrifterDrogueStatus->units: CODE TABLE +lagrangianDrifterDrogueStatus->scale: 0 +lagrangianDrifterDrogueStatus->reference: 0 +lagrangianDrifterDrogueStatus->width: 3 +drogueDepth->code: '007070' +drogueDepth->units: m +drogueDepth->scale: 0 +drogueDepth->reference: 0 +drogueDepth->width: 10 +lagrangianDrifterSubmergenceTimeSubmerged->code: '002190' +lagrangianDrifterSubmergenceTimeSubmerged->units: % +lagrangianDrifterSubmergenceTimeSubmerged->scale: 0 +lagrangianDrifterSubmergenceTimeSubmerged->reference: 0 +lagrangianDrifterSubmergenceTimeSubmerged->width: 7 +temperatureObservationPrecision->code: '002005' +temperatureObservationPrecision->units: K +temperatureObservationPrecision->scale: 2 +temperatureObservationPrecision->reference: 0 +temperatureObservationPrecision->width: 7 +oceanographicWaterTemperature->code: '022043' +oceanographicWaterTemperature->units: K +oceanographicWaterTemperature->scale: 2 +oceanographicWaterTemperature->reference: 0 +oceanographicWaterTemperature->width: 15 +methodOfSalinityOrDepthMeasurement->code: '002033' +methodOfSalinityOrDepthMeasurement->units: CODE TABLE +methodOfSalinityOrDepthMeasurement->scale: 0 +methodOfSalinityOrDepthMeasurement->reference: 0 +methodOfSalinityOrDepthMeasurement->width: 3 +seaSurfaceSalinity->code: '022059' +seaSurfaceSalinity->units: 0/00 +seaSurfaceSalinity->scale: 2 +seaSurfaceSalinity->reference: 0 +seaSurfaceSalinity->width: 14 +surfaceType->code: '008029' +surfaceType->units: CODE TABLE +surfaceType->scale: 0 +surfaceType->reference: 0 +surfaceType->width: 8 +iceThickness->code: '013115' +iceThickness->units: m +iceThickness->scale: 2 +iceThickness->reference: 0 +iceThickness->width: 19 +shortDelayedDescriptorReplicationFactor->code: '031000' +shortDelayedDescriptorReplicationFactor->units: Numeric +shortDelayedDescriptorReplicationFactor->scale: 0 +shortDelayedDescriptorReplicationFactor->reference: 0 +shortDelayedDescriptorReplicationFactor->width: 1 +indicatorForDigitization->code: '002032' +indicatorForDigitization->units: CODE TABLE +indicatorForDigitization->scale: 0 +indicatorForDigitization->reference: 0 +indicatorForDigitization->width: 2 +delayedDescriptorReplicationFactor->code: '031001' +delayedDescriptorReplicationFactor->units: Numeric +delayedDescriptorReplicationFactor->scale: 0 +delayedDescriptorReplicationFactor->reference: 0 +delayedDescriptorReplicationFactor->width: 8 +depthBelowWaterSurface->code: '007062' +depthBelowWaterSurface->units: m +depthBelowWaterSurface->scale: 1 +depthBelowWaterSurface->reference: 0 +depthBelowWaterSurface->width: 17 +salinity->code: '022062' +salinity->units: 0/00 +salinity->scale: 2 +salinity->reference: 0 +salinity->width: 14 +nonCoordinatePressure->code: '010004' +nonCoordinatePressure->units: Pa +nonCoordinatePressure->scale: -1 +nonCoordinatePressure->reference: 0 +nonCoordinatePressure->width: 14 +pressureReducedToMeanSeaLevel->code: '010051' +pressureReducedToMeanSeaLevel->units: Pa +pressureReducedToMeanSeaLevel->scale: -1 +pressureReducedToMeanSeaLevel->reference: 0 +pressureReducedToMeanSeaLevel->width: 14 +anemometerType->code: '002169' +anemometerType->units: CODE TABLE +anemometerType->scale: 0 +anemometerType->reference: 0 +anemometerType->width: 4 +heightOfSensorAboveWaterSurface->code: '007033' +heightOfSensorAboveWaterSurface->units: m +heightOfSensorAboveWaterSurface->scale: 1 +heightOfSensorAboveWaterSurface->reference: 0 +heightOfSensorAboveWaterSurface->width: 12 +timePeriod->code: '004025' +timePeriod->units: min +timePeriod->scale: 0 +timePeriod->reference: -2048 +timePeriod->width: 12 +windDirection->code: '011001' +windDirection->units: deg +windDirection->scale: 0 +windDirection->reference: 0 +windDirection->width: 9 +windSpeed->code: '011002' +windSpeed->units: m/s +windSpeed->scale: 1 +windSpeed->reference: 0 +windSpeed->width: 12 +durationOfWaveRecord->code: '022078' +durationOfWaveRecord->units: s +durationOfWaveRecord->scale: 0 +durationOfWaveRecord->reference: 0 +durationOfWaveRecord->width: 12 +significantWaveHeight->code: '022070' +significantWaveHeight->units: m +significantWaveHeight->scale: 2 +significantWaveHeight->reference: 0 +significantWaveHeight->width: 13 +maximumWaveHeight->code: '022073' +maximumWaveHeight->units: m +maximumWaveHeight->scale: 2 +maximumWaveHeight->reference: 0 +maximumWaveHeight->width: 13 +averageWavePeriod->code: '022074' +averageWavePeriod->units: s +averageWavePeriod->scale: 1 +averageWavePeriod->reference: 0 +averageWavePeriod->width: 9 +spectralPeakWavePeriod->code: '022071' +spectralPeakWavePeriod->units: s +spectralPeakWavePeriod->scale: 1 +spectralPeakWavePeriod->reference: 0 +spectralPeakWavePeriod->width: 9 +directionFromWhichDominantWavesAreComing->code: '022076' +directionFromWhichDominantWavesAreComing->units: deg +directionFromWhichDominantWavesAreComing->scale: 0 +directionFromWhichDominantWavesAreComing->reference: 0 +directionFromWhichDominantWavesAreComing->width: 9 +directionalSpreadOfDominantWave->code: '022077' +directionalSpreadOfDominantWave->units: deg +directionalSpreadOfDominantWave->scale: 0 +directionalSpreadOfDominantWave->reference: 0 +directionalSpreadOfDominantWave->width: 9 +messageNumber: 2 +marineObservingPlatformIdentifier->code: '001087' +marineObservingPlatformIdentifier->units: Numeric +marineObservingPlatformIdentifier->scale: 0 +marineObservingPlatformIdentifier->reference: 0 +marineObservingPlatformIdentifier->width: 23 +longStationName->code: '001019' +longStationName->units: CCITT IA5 +longStationName->scale: 0 +longStationName->reference: 0 +longStationName->width: 256 +dataBuoyType->code: '002149' +dataBuoyType->units: CODE TABLE +dataBuoyType->scale: 0 +dataBuoyType->reference: 0 +dataBuoyType->width: 6 +timeSignificance->code: '008021' +timeSignificance->units: CODE TABLE +timeSignificance->scale: 0 +timeSignificance->reference: 0 +timeSignificance->width: 5 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +platformTransmitterIdNumber->code: '001051' +platformTransmitterIdNumber->units: CCITT IA5 +platformTransmitterIdNumber->scale: 0 +platformTransmitterIdNumber->reference: 0 +platformTransmitterIdNumber->width: 96 +dataCollectionLocationSystem->code: '002148' +dataCollectionLocationSystem->units: CODE TABLE +dataCollectionLocationSystem->scale: 0 +dataCollectionLocationSystem->reference: 0 +dataCollectionLocationSystem->width: 5 +directionOfMotionOfMovingObservingPlatform->code: '001012' +directionOfMotionOfMovingObservingPlatform->units: deg +directionOfMotionOfMovingObservingPlatform->scale: 0 +directionOfMotionOfMovingObservingPlatform->reference: 0 +directionOfMotionOfMovingObservingPlatform->width: 9 +platformDriftSpeed->code: '001014' +platformDriftSpeed->units: m/s +platformDriftSpeed->scale: 2 +platformDriftSpeed->reference: 0 +platformDriftSpeed->width: 10 +qualityOfBuoySatelliteTransmission->code: '033022' +qualityOfBuoySatelliteTransmission->units: CODE TABLE +qualityOfBuoySatelliteTransmission->scale: 0 +qualityOfBuoySatelliteTransmission->reference: 0 +qualityOfBuoySatelliteTransmission->width: 2 +qualityOfBuoyLocation->code: '033023' +qualityOfBuoyLocation->units: CODE TABLE +qualityOfBuoyLocation->scale: 0 +qualityOfBuoyLocation->reference: 0 +qualityOfBuoyLocation->width: 2 +locationQualityClassRangeOfRadiusOf66Confidence->code: '033027' +locationQualityClassRangeOfRadiusOf66Confidence->units: CODE TABLE +locationQualityClassRangeOfRadiusOf66Confidence->scale: 0 +locationQualityClassRangeOfRadiusOf66Confidence->reference: 0 +locationQualityClassRangeOfRadiusOf66Confidence->width: 3 +batteryVoltageLargeRange->code: '025026' +batteryVoltageLargeRange->units: V +batteryVoltageLargeRange->scale: 1 +batteryVoltageLargeRange->reference: 0 +batteryVoltageLargeRange->width: 12 +drogueType->code: '002034' +drogueType->units: CODE TABLE +drogueType->scale: 0 +drogueType->reference: 0 +drogueType->width: 5 +lagrangianDrifterDrogueStatus->code: '022060' +lagrangianDrifterDrogueStatus->units: CODE TABLE +lagrangianDrifterDrogueStatus->scale: 0 +lagrangianDrifterDrogueStatus->reference: 0 +lagrangianDrifterDrogueStatus->width: 3 +drogueDepth->code: '007070' +drogueDepth->units: m +drogueDepth->scale: 0 +drogueDepth->reference: 0 +drogueDepth->width: 10 +lagrangianDrifterSubmergenceTimeSubmerged->code: '002190' +lagrangianDrifterSubmergenceTimeSubmerged->units: % +lagrangianDrifterSubmergenceTimeSubmerged->scale: 0 +lagrangianDrifterSubmergenceTimeSubmerged->reference: 0 +lagrangianDrifterSubmergenceTimeSubmerged->width: 7 +temperatureObservationPrecision->code: '002005' +temperatureObservationPrecision->units: K +temperatureObservationPrecision->scale: 2 +temperatureObservationPrecision->reference: 0 +temperatureObservationPrecision->width: 7 +oceanographicWaterTemperature->code: '022043' +oceanographicWaterTemperature->units: K +oceanographicWaterTemperature->scale: 2 +oceanographicWaterTemperature->reference: 0 +oceanographicWaterTemperature->width: 15 +methodOfSalinityOrDepthMeasurement->code: '002033' +methodOfSalinityOrDepthMeasurement->units: CODE TABLE +methodOfSalinityOrDepthMeasurement->scale: 0 +methodOfSalinityOrDepthMeasurement->reference: 0 +methodOfSalinityOrDepthMeasurement->width: 3 +seaSurfaceSalinity->code: '022059' +seaSurfaceSalinity->units: 0/00 +seaSurfaceSalinity->scale: 2 +seaSurfaceSalinity->reference: 0 +seaSurfaceSalinity->width: 14 +surfaceType->code: '008029' +surfaceType->units: CODE TABLE +surfaceType->scale: 0 +surfaceType->reference: 0 +surfaceType->width: 8 +iceThickness->code: '013115' +iceThickness->units: m +iceThickness->scale: 2 +iceThickness->reference: 0 +iceThickness->width: 19 +shortDelayedDescriptorReplicationFactor->code: '031000' +shortDelayedDescriptorReplicationFactor->units: Numeric +shortDelayedDescriptorReplicationFactor->scale: 0 +shortDelayedDescriptorReplicationFactor->reference: 0 +shortDelayedDescriptorReplicationFactor->width: 1 +nonCoordinatePressure->code: '010004' +nonCoordinatePressure->units: Pa +nonCoordinatePressure->scale: -1 +nonCoordinatePressure->reference: 0 +nonCoordinatePressure->width: 14 +nonCoordinatePressure->differenceStatisticalValue->code: '225255' +nonCoordinatePressure->differenceStatisticalValue->units: Pa +nonCoordinatePressure->differenceStatisticalValue->scale: 0 +nonCoordinatePressure->differenceStatisticalValue->reference: 0 +nonCoordinatePressure->differenceStatisticalValue->width: 0 +pressureReducedToMeanSeaLevel->code: '010051' +pressureReducedToMeanSeaLevel->units: Pa +pressureReducedToMeanSeaLevel->scale: -1 +pressureReducedToMeanSeaLevel->reference: 0 +pressureReducedToMeanSeaLevel->width: 14 +pressureReducedToMeanSeaLevel->differenceStatisticalValue->code: '225255' +pressureReducedToMeanSeaLevel->differenceStatisticalValue->units: Pa +pressureReducedToMeanSeaLevel->differenceStatisticalValue->scale: 0 +pressureReducedToMeanSeaLevel->differenceStatisticalValue->reference: 0 +pressureReducedToMeanSeaLevel->differenceStatisticalValue->width: 0 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE defined by originating/generating centre +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 +differenceStatistics->code: '008024' +differenceStatistics->units: CODE TABLE +differenceStatistics->scale: 0 +differenceStatistics->reference: 0 +differenceStatistics->width: 6 diff --git a/tests/sample-data/buoy-drifting.bufr b/tests/sample-data/buoy-drifting.bufr new file mode 100644 index 0000000000000000000000000000000000000000..b0b89a32bfffb5e82b533b21807c972b2a2db0af GIT binary patch literal 380 zcmZ4MSsLN82<0t5BAO#iGT!qAnVTq9>differenceStatisticalValue -- +pressureReducedToMeanSeaLevel 102880.0 +pressureReducedToMeanSeaLevel->differenceStatisticalValue -- +centre 98 +generatingApplication 10 +differenceStatistics 40 diff --git a/tests/sample-data/geos-abi-goes-16.attributes b/tests/sample-data/geos-abi-goes-16.attributes new file mode 100644 index 00000000..15d7069e --- /dev/null +++ b/tests/sample-data/geos-abi-goes-16.attributes @@ -0,0 +1,296 @@ +messageNumber: 1 +satelliteIdentifier->code: '001007' +satelliteIdentifier->units: CODE TABLE +satelliteIdentifier->scale: 0 +satelliteIdentifier->reference: 0 +satelliteIdentifier->width: 10 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +satelliteClassification->code: '002020' +satelliteClassification->units: CODE TABLE +satelliteClassification->scale: 0 +satelliteClassification->reference: 0 +satelliteClassification->width: 9 +segmentSizeAtNadirInXDirection->code: '002028' +segmentSizeAtNadirInXDirection->units: m +segmentSizeAtNadirInXDirection->scale: 0 +segmentSizeAtNadirInXDirection->reference: 0 +segmentSizeAtNadirInXDirection->width: 18 +segmentSizeAtNadirInYDirection->code: '002029' +segmentSizeAtNadirInYDirection->units: m +segmentSizeAtNadirInYDirection->scale: 0 +segmentSizeAtNadirInYDirection->reference: 0 +segmentSizeAtNadirInYDirection->width: 18 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +second->code: '004006' +second->units: s +second->scale: 0 +second->reference: 0 +second->width: 6 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +numberOfPixelsPerRow->code: '030021' +numberOfPixelsPerRow->units: Numeric +numberOfPixelsPerRow->scale: 0 +numberOfPixelsPerRow->reference: 0 +numberOfPixelsPerRow->width: 12 +numberOfPixelsPerColumn->code: '030022' +numberOfPixelsPerColumn->units: Numeric +numberOfPixelsPerColumn->scale: 0 +numberOfPixelsPerColumn->reference: 0 +numberOfPixelsPerColumn->width: 12 +landOrSeaQualifier->code: '008012' +landOrSeaQualifier->units: CODE TABLE +landOrSeaQualifier->scale: 0 +landOrSeaQualifier->reference: 0 +landOrSeaQualifier->width: 2 +satelliteZenithAngle->code: '007024' +satelliteZenithAngle->units: deg +satelliteZenithAngle->scale: 2 +satelliteZenithAngle->reference: -9000 +satelliteZenithAngle->width: 15 +bearingOrAzimuth->code: '005021' +bearingOrAzimuth->units: deg +bearingOrAzimuth->scale: 2 +bearingOrAzimuth->reference: 0 +bearingOrAzimuth->width: 16 +solarZenithAngle->code: '007025' +solarZenithAngle->units: deg +solarZenithAngle->scale: 2 +solarZenithAngle->reference: -9000 +solarZenithAngle->width: 15 +solarAzimuth->code: '005022' +solarAzimuth->units: deg +solarAzimuth->scale: 2 +solarAzimuth->reference: 0 +solarAzimuth->width: 16 +nonCoordinateHeight->code: '010002' +nonCoordinateHeight->units: m +nonCoordinateHeight->scale: -1 +nonCoordinateHeight->reference: -40 +nonCoordinateHeight->width: 16 +satelliteChannelCentreFrequency->code: '002153' +satelliteChannelCentreFrequency->units: Hz +satelliteChannelCentreFrequency->scale: -8 +satelliteChannelCentreFrequency->reference: 0 +satelliteChannelCentreFrequency->width: 26 +satelliteChannelBandWidth->code: '002154' +satelliteChannelBandWidth->units: Hz +satelliteChannelBandWidth->scale: -8 +satelliteChannelBandWidth->reference: 0 +satelliteChannelBandWidth->width: 26 +cloudAmountInSegment->code: '020081' +cloudAmountInSegment->units: % +cloudAmountInSegment->scale: 0 +cloudAmountInSegment->reference: 0 +cloudAmountInSegment->width: 7 +amountSegmentCloudFree->code: '020082' +amountSegmentCloudFree->units: % +amountSegmentCloudFree->scale: 0 +amountSegmentCloudFree->reference: 0 +amountSegmentCloudFree->width: 7 +cloudType->code: '020012' +cloudType->units: CODE TABLE +cloudType->scale: 0 +cloudType->reference: 0 +cloudType->width: 6 +satelliteInstrumentUsedInDataProcessing->code: '002152' +satelliteInstrumentUsedInDataProcessing->units: FLAG TABLE +satelliteInstrumentUsedInDataProcessing->scale: 0 +satelliteInstrumentUsedInDataProcessing->reference: 0 +satelliteInstrumentUsedInDataProcessing->width: 31 +meanHumidityComputationalMethod->code: '002024' +meanHumidityComputationalMethod->units: CODE TABLE +meanHumidityComputationalMethod->scale: 0 +meanHumidityComputationalMethod->reference: 0 +meanHumidityComputationalMethod->width: 4 +pressure->code: '007004' +pressure->units: Pa +pressure->scale: -1 +pressure->reference: 0 +pressure->width: 14 +relativeHumidity->code: '013003' +relativeHumidity->units: % +relativeHumidity->scale: 0 +relativeHumidity->reference: 0 +relativeHumidity->width: 7 +radianceType->code: '002166' +radianceType->units: CODE TABLE +radianceType->scale: 0 +radianceType->reference: 0 +radianceType->width: 4 +radianceComputationalMethod->code: '002167' +radianceComputationalMethod->units: CODE TABLE +radianceComputationalMethod->scale: 0 +radianceComputationalMethod->reference: 0 +radianceComputationalMethod->width: 4 +spectralRadiance->code: '012075' +spectralRadiance->units: W m-3 sr-1 +spectralRadiance->scale: -3 +spectralRadiance->reference: 0 +spectralRadiance->width: 16 +spectralRadiance->firstOrderStatisticalValue->firstOrderStatisticalValue->code: '224255' +spectralRadiance->firstOrderStatisticalValue->firstOrderStatisticalValue->units: W m-3 sr-1 +spectralRadiance->firstOrderStatisticalValue->firstOrderStatisticalValue->scale: 0 +spectralRadiance->firstOrderStatisticalValue->firstOrderStatisticalValue->reference: 0 +spectralRadiance->firstOrderStatisticalValue->firstOrderStatisticalValue->width: 0 +spectralRadiance->firstOrderStatisticalValue->code: '224255' +spectralRadiance->firstOrderStatisticalValue->units: W m-3 sr-1 +spectralRadiance->firstOrderStatisticalValue->scale: 0 +spectralRadiance->firstOrderStatisticalValue->reference: 0 +spectralRadiance->firstOrderStatisticalValue->width: 0 +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->code: '033007' +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->units: % +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->scale: 0 +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->reference: 0 +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->width: 7 +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->code: '033007' +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->units: % +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->scale: 0 +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->reference: 0 +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->width: 7 +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->code: '033007' +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->units: % +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->scale: 0 +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->reference: 0 +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->width: 7 +spectralRadiance->percentConfidence->percentConfidence->code: '033007' +spectralRadiance->percentConfidence->percentConfidence->units: % +spectralRadiance->percentConfidence->percentConfidence->scale: 0 +spectralRadiance->percentConfidence->percentConfidence->reference: 0 +spectralRadiance->percentConfidence->percentConfidence->width: 7 +spectralRadiance->percentConfidence->code: '033007' +spectralRadiance->percentConfidence->units: % +spectralRadiance->percentConfidence->scale: 0 +spectralRadiance->percentConfidence->reference: 0 +spectralRadiance->percentConfidence->width: 7 +radiance->code: '012076' +radiance->units: W m-2 sr-1 +radiance->scale: 3 +radiance->reference: 0 +radiance->width: 16 +radiance->firstOrderStatisticalValue->firstOrderStatisticalValue->code: '224255' +radiance->firstOrderStatisticalValue->firstOrderStatisticalValue->units: W m-2 sr-1 +radiance->firstOrderStatisticalValue->firstOrderStatisticalValue->scale: 0 +radiance->firstOrderStatisticalValue->firstOrderStatisticalValue->reference: 0 +radiance->firstOrderStatisticalValue->firstOrderStatisticalValue->width: 0 +radiance->firstOrderStatisticalValue->code: '224255' +radiance->firstOrderStatisticalValue->units: W m-2 sr-1 +radiance->firstOrderStatisticalValue->scale: 0 +radiance->firstOrderStatisticalValue->reference: 0 +radiance->firstOrderStatisticalValue->width: 0 +radiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->code: '033007' +radiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->units: % +radiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->scale: 0 +radiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->reference: 0 +radiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->width: 7 +radiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->code: '033007' +radiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->units: % +radiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->scale: 0 +radiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->reference: 0 +radiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->width: 7 +radiance->percentConfidence->percentConfidence->percentConfidence->code: '033007' +radiance->percentConfidence->percentConfidence->percentConfidence->units: % +radiance->percentConfidence->percentConfidence->percentConfidence->scale: 0 +radiance->percentConfidence->percentConfidence->percentConfidence->reference: 0 +radiance->percentConfidence->percentConfidence->percentConfidence->width: 7 +radiance->percentConfidence->percentConfidence->code: '033007' +radiance->percentConfidence->percentConfidence->units: % +radiance->percentConfidence->percentConfidence->scale: 0 +radiance->percentConfidence->percentConfidence->reference: 0 +radiance->percentConfidence->percentConfidence->width: 7 +radiance->percentConfidence->code: '033007' +radiance->percentConfidence->units: % +radiance->percentConfidence->scale: 0 +radiance->percentConfidence->reference: 0 +radiance->percentConfidence->width: 7 +brightnessTemperature->code: '012063' +brightnessTemperature->units: K +brightnessTemperature->scale: 1 +brightnessTemperature->reference: 0 +brightnessTemperature->width: 12 +brightnessTemperature->firstOrderStatisticalValue->firstOrderStatisticalValue->code: '224255' +brightnessTemperature->firstOrderStatisticalValue->firstOrderStatisticalValue->units: K +brightnessTemperature->firstOrderStatisticalValue->firstOrderStatisticalValue->scale: 0 +brightnessTemperature->firstOrderStatisticalValue->firstOrderStatisticalValue->reference: 0 +brightnessTemperature->firstOrderStatisticalValue->firstOrderStatisticalValue->width: 0 +brightnessTemperature->firstOrderStatisticalValue->code: '224255' +brightnessTemperature->firstOrderStatisticalValue->units: K +brightnessTemperature->firstOrderStatisticalValue->scale: 0 +brightnessTemperature->firstOrderStatisticalValue->reference: 0 +brightnessTemperature->firstOrderStatisticalValue->width: 0 +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->code: '033007' +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->units: % +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->scale: 0 +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->reference: 0 +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence->width: 7 +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->percentConfidence->code: '033007' +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->percentConfidence->units: % +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->percentConfidence->scale: 0 +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->percentConfidence->reference: 0 +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->percentConfidence->width: 7 +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->code: '033007' +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->units: % +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->scale: 0 +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->reference: 0 +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->width: 7 +brightnessTemperature->percentConfidence->percentConfidence->code: '033007' +brightnessTemperature->percentConfidence->percentConfidence->units: % +brightnessTemperature->percentConfidence->percentConfidence->scale: 0 +brightnessTemperature->percentConfidence->percentConfidence->reference: 0 +brightnessTemperature->percentConfidence->percentConfidence->width: 7 +brightnessTemperature->percentConfidence->code: '033007' +brightnessTemperature->percentConfidence->units: % +brightnessTemperature->percentConfidence->scale: 0 +brightnessTemperature->percentConfidence->reference: 0 +brightnessTemperature->percentConfidence->width: 7 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE defined by originating/generating centre +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 +methodOfDerivationOfPercentageConfidence->code: '008033' +methodOfDerivationOfPercentageConfidence->units: CODE TABLE +methodOfDerivationOfPercentageConfidence->scale: 0 +methodOfDerivationOfPercentageConfidence->reference: 0 +methodOfDerivationOfPercentageConfidence->width: 7 +firstOrderStatistics->code: '008023' +firstOrderStatistics->units: CODE TABLE +firstOrderStatistics->scale: 0 +firstOrderStatistics->reference: 0 +firstOrderStatistics->width: 6 diff --git a/tests/sample-data/geos-abi-goes-16.bufr b/tests/sample-data/geos-abi-goes-16.bufr new file mode 100644 index 0000000000000000000000000000000000000000..87286962d41b5423d27c36b51572c6b9895d88c4 GIT binary patch literal 1542 zcmb_bT}TvB6#nka?9Qya>zeED`m?(wYWahZTI7neO1ebBnbI38$dlhguVv~^mLIwG;v`N6iGT=CpBshk2;8Z9{xPJ^t3nmG+ zK?-!;ND_u~0m+jjC{-+nk^M@+U*R10O(QeW+cf5Z%0@ELf%gojY*_<{z-1HxR!<`e>_cMh3e@4(V-ay=T#(0xJZr9BDsmkT)XtPrYPM9i$=|Q2OU;_zWU=^H->*GkiJ)s;8 ztd*trH10DsfRb^AMei%dMh%S>mUMW&$L~|4f}~_@>xUJG$K0+Dh$^pmwRKrH@HJPOCmg+D^m*Tvr$NB$GWJ~sXWSQ#lA literal 0 HcmV?d00001 diff --git a/tests/sample-data/geos-abi-goes-16.items b/tests/sample-data/geos-abi-goes-16.items new file mode 100644 index 00000000..be051dc4 --- /dev/null +++ b/tests/sample-data/geos-abi-goes-16.items @@ -0,0 +1,520 @@ +messageNumber 1 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 0 +dataCategory 5 +dataSubCategory 189 +masterTablesVersionNumber 28 +localTablesVersionNumber 0 +typicalYearOfCentury 18 +typicalMonth 9 +typicalDay 13 +typicalHour 9 +typicalMinute 15 +typicalDate 20180913 +typicalTime 091500 +rdbType 3 +oldSubtype 189 +localYear 2018 +localMonth 9 +localDay 13 +localHour 9 +localMinute 15 +localSecond 30 +rdbtimeDay 13 +rdbtimeHour 10 +rdbtimeMinute 5 +rdbtimeSecond 51 +rdbtimeTime 100551 +rectimeDay 13 +rectimeHour 10 +rectimeMinute 5 +rectimeSecond 51 +restricted 0 +correction1 0 +correction1Part 0 +correction2 0 +correction2Part 0 +correction3 0 +correction3Part 0 +correction4 0 +correction4Part 0 +qualityControl 70 +newSubtype 0 +numberOfSubsets 5 +localLongitude1 -69.03384 +localLatitude1 -51.78396 +localLongitude2 -67.18655 +localLatitude2 -51.71156 +localNumberOfObservations 5 +satelliteID 270 +observedData 1 +compressedData 1 +unexpandedDescriptors [301072 30021 30022 8012 7024 5021 7025 5022 10002 101012 + 304032 105002 2152 2024 7004 7004 13003 101012 304033 222000 + 236000 101187 31031 1031 1032 101036 33007 222000 237000 1031 + 1032 8033 101036 33007 222000 237000 1031 1032 8033 101036 + 33007 222000 237000 1031 1032 8033 101036 33007 222000 237000 + 1031 1032 8033 101036 33007 224000 237000 1031 1032 8023 + 101036 224255 224000 237000 1031 1032 8023 101036 224255] +satelliteIdentifier [270 270 270 270 270] +centre [[160 160 160 160 160] + [160 160 160 160 160] + [160 160 160 160 160] + [160 160 160 160 160] + [160 160 160 160 160] + [160 160 160 160 160] + [160 160 160 160 160] + [160 160 160 160 160]] +satelliteClassification [241 241 241 241 241] +segmentSizeAtNadirInXDirection [30000 30000 30000 30000 30000] +segmentSizeAtNadirInYDirection [30000 30000 30000 30000 30000] +year [2018 2018 2018 2018 2018] +month [9 9 9 9 9] +day [13 13 13 13 13] +hour [9 9 9 9 9] +minute [15 15 15 15 15] +second [30 30 30 30 30] +latitude [-51.78396 -51.76109 -51.74379 -51.7402 -51.71156] +longitude [-69.03384 -68.57714 -68.0531 -67.62113 -67.18655] +numberOfPixelsPerRow [15 15 15 15 15] +numberOfPixelsPerColumn [15 15 15 15 15] +landOrSeaQualifier [-- -- -- -- --] +satelliteZenithAngle [59.85 59.87 59.9 59.95 59.97] +bearingOrAzimuth [352.42 351.84 351.18 350.63 350.08] +solarZenithAngle [105.05 104.78 104.46 104.2 103.94] +solarAzimuth [102.76 102.38 101.95 101.59 101.23] +nonCoordinateHeight [-- -- -- -- --] +satelliteChannelCentreFrequency [[2.19e+14 2.19e+14 2.19e+14 2.19e+14 2.19e+14] + [1.34e+14 1.34e+14 1.34e+14 1.34e+14 1.34e+14] + [7.69e+13 7.69e+13 7.69e+13 7.69e+13 7.69e+13] + [4.84e+13 4.84e+13 4.84e+13 4.84e+13 4.84e+13] + [4.34e+13 4.34e+13 4.34e+13 4.34e+13 4.34e+13] + [4.11e+13 4.11e+13 4.11e+13 4.11e+13 4.11e+13] + [3.57e+13 3.57e+13 3.57e+13 3.57e+13 3.57e+13] + [3.12e+13 3.12e+13 3.12e+13 3.12e+13 3.12e+13] + [2.91e+13 2.91e+13 2.91e+13 2.91e+13 2.91e+13] + [2.68e+13 2.68e+13 2.68e+13 2.68e+13 2.68e+13] + [2.44e+13 2.44e+13 2.44e+13 2.44e+13 2.44e+13] + [2.25e+13 2.25e+13 2.25e+13 2.25e+13 2.25e+13] + [2.19e+14 2.19e+14 2.19e+14 2.19e+14 2.19e+14] + [1.34e+14 1.34e+14 1.34e+14 1.34e+14 1.34e+14] + [7.69e+13 7.69e+13 7.69e+13 7.69e+13 7.69e+13] + [4.84e+13 4.84e+13 4.84e+13 4.84e+13 4.84e+13] + [4.34e+13 4.34e+13 4.34e+13 4.34e+13 4.34e+13] + [4.11e+13 4.11e+13 4.11e+13 4.11e+13 4.11e+13] + [3.57e+13 3.57e+13 3.57e+13 3.57e+13 3.57e+13] + [3.12e+13 3.12e+13 3.12e+13 3.12e+13 3.12e+13] + [2.91e+13 2.91e+13 2.91e+13 2.91e+13 2.91e+13] + [2.68e+13 2.68e+13 2.68e+13 2.68e+13 2.68e+13] + [2.44e+13 2.44e+13 2.44e+13 2.44e+13 2.44e+13] + [2.25e+13 2.25e+13 2.25e+13 2.25e+13 2.25e+13]] +satelliteChannelBandWidth [[3.19e+12 3.19e+12 3.19e+12 3.19e+12 3.19e+12] + [2.97e+12 2.97e+12 2.97e+12 2.97e+12 2.97e+12] + [3.94e+12 3.94e+12 3.94e+12 3.94e+12 3.94e+12] + [6.27e+12 6.27e+12 6.27e+12 6.27e+12 6.27e+12] + [2.52e+12 2.52e+12 2.52e+12 2.52e+12 2.52e+12] + [1.13e+12 1.13e+12 1.13e+12 1.13e+12 1.13e+12] + [2.10e+12 2.10e+12 2.10e+12 2.10e+12 2.10e+12] + [1.30e+12 1.30e+12 1.30e+12 1.30e+12 1.30e+12] + [8.40e+11 8.40e+11 8.40e+11 8.40e+11 8.40e+11] + [1.91e+12 1.91e+12 1.91e+12 1.91e+12 1.91e+12] + [1.98e+12 1.98e+12 1.98e+12 1.98e+12 1.98e+12] + [1.02e+12 1.02e+12 1.02e+12 1.02e+12 1.02e+12] + [3.19e+12 3.19e+12 3.19e+12 3.19e+12 3.19e+12] + [2.97e+12 2.97e+12 2.97e+12 2.97e+12 2.97e+12] + [3.94e+12 3.94e+12 3.94e+12 3.94e+12 3.94e+12] + [6.27e+12 6.27e+12 6.27e+12 6.27e+12 6.27e+12] + [2.52e+12 2.52e+12 2.52e+12 2.52e+12 2.52e+12] + [1.13e+12 1.13e+12 1.13e+12 1.13e+12 1.13e+12] + [2.10e+12 2.10e+12 2.10e+12 2.10e+12 2.10e+12] + [1.30e+12 1.30e+12 1.30e+12 1.30e+12 1.30e+12] + [8.40e+11 8.40e+11 8.40e+11 8.40e+11 8.40e+11] + [1.91e+12 1.91e+12 1.91e+12 1.91e+12 1.91e+12] + [1.98e+12 1.98e+12 1.98e+12 1.98e+12 1.98e+12] + [1.02e+12 1.02e+12 1.02e+12 1.02e+12 1.02e+12]] +cloudAmountInSegment [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +amountSegmentCloudFree [[48 37 24 16 10] + [48 37 24 16 10] + [48 37 24 16 10] + [48 37 24 16 10] + [48 37 24 16 10] + [48 37 24 16 10] + [48 37 24 16 10] + [48 37 24 16 10] + [48 37 24 16 10] + [48 37 24 16 10] + [48 37 24 16 10] + [48 37 24 16 10]] +cloudType [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +satelliteInstrumentUsedInDataProcessing [[4194304 4194304 4194304 4194304 4194304] + [4194304 4194304 4194304 4194304 4194304] + [4194304 4194304 4194304 4194304 4194304] + [4194304 4194304 4194304 4194304 4194304] + [4194304 4194304 4194304 4194304 4194304] + [4194304 4194304 4194304 4194304 4194304] + [4194304 4194304 4194304 4194304 4194304] + [4194304 4194304 4194304 4194304 4194304] + [4194304 4194304 4194304 4194304 4194304] + [4194304 4194304 4194304 4194304 4194304] + [4194304 4194304 4194304 4194304 4194304] + [4194304 4194304 4194304 4194304 4194304] + [4194304 4194304 4194304 4194304 4194304] + [4194304 4194304 4194304 4194304 4194304]] +meanHumidityComputationalMethod [[-- -- -- -- --] + [-- -- -- -- --]] +pressure [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +relativeHumidity [[-- -- -- -- --] + [-- -- -- -- --]] +radianceType [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +radianceComputationalMethod [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +spectralRadiance [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +spectralRadiance->firstOrderStatisticalValue->firstOrderStatisticalValue [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +spectralRadiance->firstOrderStatisticalValue [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +spectralRadiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +spectralRadiance->percentConfidence->percentConfidence->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +spectralRadiance->percentConfidence->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +spectralRadiance->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +radiance [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +radiance->firstOrderStatisticalValue->firstOrderStatisticalValue [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +radiance->firstOrderStatisticalValue [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +radiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +radiance->percentConfidence->percentConfidence->percentConfidence->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +radiance->percentConfidence->percentConfidence->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +radiance->percentConfidence->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +radiance->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +brightnessTemperature [[-- -- -- -- --] + [-- -- -- -- --] + [272.5 273.8 274.3 274.7 275.3] + [230.20000000000002 230.10000000000002 230.3 230.9 231.3] + [240.60000000000002 240.20000000000002 240.10000000000002 240.3 240.4] + [249.10000000000002 248.8 248.4 248.3 248.20000000000002] + [271.40000000000003 271.90000000000003 272.2 272.5 273.0] + [241.9 242.0 242.0 241.9 242.20000000000002] + [273.40000000000003 274.2 274.7 275.1 275.7] + [273.40000000000003 274.2 274.6 275.0 275.6] + [272.6 272.6 272.8 273.0 273.6] + [258.7 258.7 258.7 258.5 258.90000000000003]] +brightnessTemperature->firstOrderStatisticalValue->firstOrderStatisticalValue [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +brightnessTemperature->firstOrderStatisticalValue [[-- -- -- -- --] + [-- -- -- -- --] + [0.7000000000000001 0.30000000000000004 0.2 0.5 0.1] + [0.30000000000000004 0.4 0.30000000000000004 0.4 0.6000000000000001] + [0.30000000000000004 0.30000000000000004 0.2 0.4 0.6000000000000001] + [0.4 0.2 0.2 0.4 0.4] + [0.6000000000000001 0.30000000000000004 0.1 0.5 0.1] + [0.4 0.2 0.1 0.2 0.1] + [0.6000000000000001 0.30000000000000004 0.1 0.5 0.1] + [0.6000000000000001 0.30000000000000004 0.2 0.6000000000000001 0.1] + [0.5 0.30000000000000004 0.2 0.7000000000000001 0.1] + [0.30000000000000004 0.2 0.2 0.5 0.1]] +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->percentConfidence->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +brightnessTemperature->percentConfidence->percentConfidence->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +brightnessTemperature->percentConfidence->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +brightnessTemperature->percentConfidence [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +generatingApplication [[-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --] + [-- -- -- -- --]] +methodOfDerivationOfPercentageConfidence [[1 1 1 1 1] + [2 2 2 2 2] + [3 3 3 3 3] + [4 4 4 4 4]] +firstOrderStatistics [[10 10 10 10 10] + [-- -- -- -- --]] diff --git a/tests/sample-data/geos-mviri-meteosat-7.attributes b/tests/sample-data/geos-mviri-meteosat-7.attributes new file mode 100644 index 00000000..ecb2b889 --- /dev/null +++ b/tests/sample-data/geos-mviri-meteosat-7.attributes @@ -0,0 +1,236 @@ +messageNumber: 1 +satelliteIdentifier->code: '001007' +satelliteIdentifier->units: CODE TABLE +satelliteIdentifier->scale: 0 +satelliteIdentifier->reference: 0 +satelliteIdentifier->width: 10 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +satelliteClassification->code: '002196' +satelliteClassification->units: CODE TABLE +satelliteClassification->scale: 0 +satelliteClassification->reference: 0 +satelliteClassification->width: 9 +segmentSizeAtNadirInXDirection->code: '002221' +segmentSizeAtNadirInXDirection->units: m +segmentSizeAtNadirInXDirection->scale: 0 +segmentSizeAtNadirInXDirection->reference: 0 +segmentSizeAtNadirInXDirection->width: 18 +segmentSizeAtNadirInYDirection->code: '002222' +segmentSizeAtNadirInYDirection->units: m +segmentSizeAtNadirInYDirection->scale: 0 +segmentSizeAtNadirInYDirection->reference: 0 +segmentSizeAtNadirInYDirection->width: 18 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +second->code: '004006' +second->units: s +second->scale: 0 +second->reference: 0 +second->width: 6 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +satelliteZenithAngle->code: '007024' +satelliteZenithAngle->units: deg +satelliteZenithAngle->scale: 2 +satelliteZenithAngle->reference: -9000 +satelliteZenithAngle->width: 15 +nonCoordinateHeight->code: '010002' +nonCoordinateHeight->units: m +nonCoordinateHeight->scale: -1 +nonCoordinateHeight->reference: -40 +nonCoordinateHeight->width: 16 +satelliteInstrumentDataUsedInProcessing->code: '002252' +satelliteInstrumentDataUsedInProcessing->units: FLAG TABLE +satelliteInstrumentDataUsedInProcessing->scale: 0 +satelliteInstrumentDataUsedInProcessing->reference: 0 +satelliteInstrumentDataUsedInProcessing->width: 31 +satelliteDerivedWindComputationMethod->code: '002023' +satelliteDerivedWindComputationMethod->units: CODE TABLE +satelliteDerivedWindComputationMethod->scale: 0 +satelliteDerivedWindComputationMethod->reference: 0 +satelliteDerivedWindComputationMethod->width: 4 +pressure->code: '007004' +pressure->units: Pa +pressure->scale: -1 +pressure->reference: 0 +pressure->width: 14 +windDirection->code: '011001' +windDirection->units: deg +windDirection->scale: 0 +windDirection->reference: 0 +windDirection->width: 9 +windSpeed->code: '011002' +windSpeed->units: m/s +windSpeed->scale: 1 +windSpeed->reference: 0 +windSpeed->width: 12 +satelliteChannelCentreFrequency->code: '002197' +satelliteChannelCentreFrequency->units: Hz +satelliteChannelCentreFrequency->scale: -8 +satelliteChannelCentreFrequency->reference: 0 +satelliteChannelCentreFrequency->width: 26 +satelliteChannelBandWidth->code: '002198' +satelliteChannelBandWidth->units: Hz +satelliteChannelBandWidth->scale: -8 +satelliteChannelBandWidth->reference: 0 +satelliteChannelBandWidth->width: 26 +coldestClusterTemperature->code: '012193' +coldestClusterTemperature->units: K +coldestClusterTemperature->scale: 1 +coldestClusterTemperature->reference: 0 +coldestClusterTemperature->width: 12 +cloudAmountInSegment->code: '020193' +cloudAmountInSegment->units: % +cloudAmountInSegment->scale: 0 +cloudAmountInSegment->reference: 0 +cloudAmountInSegment->width: 7 +amountOfSegmentCloudFree->code: '020194' +amountOfSegmentCloudFree->units: % +amountOfSegmentCloudFree->scale: 0 +amountOfSegmentCloudFree->reference: 0 +amountOfSegmentCloudFree->width: 7 +cloudType->code: '020012' +cloudType->units: CODE TABLE +cloudType->scale: 0 +cloudType->reference: 0 +cloudType->width: 6 +meanHumidityComputationalMethod->code: '002199' +meanHumidityComputationalMethod->units: CODE TABLE +meanHumidityComputationalMethod->scale: 0 +meanHumidityComputationalMethod->reference: 0 +meanHumidityComputationalMethod->width: 4 +relativeHumidity->code: '013003' +relativeHumidity->units: % +relativeHumidity->scale: 0 +relativeHumidity->reference: 0 +relativeHumidity->width: 7 +relativeHumidity->firstOrderStatisticalValue->code: '224255' +relativeHumidity->firstOrderStatisticalValue->units: % +relativeHumidity->firstOrderStatisticalValue->scale: 0 +relativeHumidity->firstOrderStatisticalValue->reference: 0 +relativeHumidity->firstOrderStatisticalValue->width: 0 +relativeHumidity->manualAutomaticQualityControl->code: '033252' +relativeHumidity->manualAutomaticQualityControl->units: CODE TABLE +relativeHumidity->manualAutomaticQualityControl->scale: 0 +relativeHumidity->manualAutomaticQualityControl->reference: 0 +relativeHumidity->manualAutomaticQualityControl->width: 4 +relativeHumidity->percentConfidence->code: '033007' +relativeHumidity->percentConfidence->units: % +relativeHumidity->percentConfidence->scale: 0 +relativeHumidity->percentConfidence->reference: 0 +relativeHumidity->percentConfidence->width: 7 +radianceType->code: '002254' +radianceType->units: CODE TABLE +radianceType->scale: 0 +radianceType->reference: 0 +radianceType->width: 4 +radianceComputationalMethod->code: '002251' +radianceComputationalMethod->units: CODE TABLE +radianceComputationalMethod->scale: 0 +radianceComputationalMethod->reference: 0 +radianceComputationalMethod->width: 4 +spectralRadiance->code: '012195' +spectralRadiance->units: W m-2 sr-1 m +spectralRadiance->scale: 10 +spectralRadiance->reference: 0 +spectralRadiance->width: 31 +spectralRadiance->firstOrderStatisticalValue->code: '224255' +spectralRadiance->firstOrderStatisticalValue->units: W m-2 sr-1 m +spectralRadiance->firstOrderStatisticalValue->scale: 0 +spectralRadiance->firstOrderStatisticalValue->reference: 0 +spectralRadiance->firstOrderStatisticalValue->width: 0 +spectralRadiance->manualAutomaticQualityControl->code: '033252' +spectralRadiance->manualAutomaticQualityControl->units: CODE TABLE +spectralRadiance->manualAutomaticQualityControl->scale: 0 +spectralRadiance->manualAutomaticQualityControl->reference: 0 +spectralRadiance->manualAutomaticQualityControl->width: 4 +spectralRadiance->percentConfidence->code: '033007' +spectralRadiance->percentConfidence->units: % +spectralRadiance->percentConfidence->scale: 0 +spectralRadiance->percentConfidence->reference: 0 +spectralRadiance->percentConfidence->width: 7 +radiance->code: '012196' +radiance->units: W m-2 sr-1 +radiance->scale: 3 +radiance->reference: 0 +radiance->width: 16 +radiance->firstOrderStatisticalValue->code: '224255' +radiance->firstOrderStatisticalValue->units: W m-2 sr-1 +radiance->firstOrderStatisticalValue->scale: 0 +radiance->firstOrderStatisticalValue->reference: 0 +radiance->firstOrderStatisticalValue->width: 0 +radiance->manualAutomaticQualityControl->code: '033252' +radiance->manualAutomaticQualityControl->units: CODE TABLE +radiance->manualAutomaticQualityControl->scale: 0 +radiance->manualAutomaticQualityControl->reference: 0 +radiance->manualAutomaticQualityControl->width: 4 +radiance->percentConfidence->code: '033007' +radiance->percentConfidence->units: % +radiance->percentConfidence->scale: 0 +radiance->percentConfidence->reference: 0 +radiance->percentConfidence->width: 7 +brightnessTemperature->code: '012063' +brightnessTemperature->units: K +brightnessTemperature->scale: 1 +brightnessTemperature->reference: 0 +brightnessTemperature->width: 12 +brightnessTemperature->firstOrderStatisticalValue->code: '224255' +brightnessTemperature->firstOrderStatisticalValue->units: K +brightnessTemperature->firstOrderStatisticalValue->scale: 0 +brightnessTemperature->firstOrderStatisticalValue->reference: 0 +brightnessTemperature->firstOrderStatisticalValue->width: 0 +brightnessTemperature->manualAutomaticQualityControl->code: '033252' +brightnessTemperature->manualAutomaticQualityControl->units: CODE TABLE +brightnessTemperature->manualAutomaticQualityControl->scale: 0 +brightnessTemperature->manualAutomaticQualityControl->reference: 0 +brightnessTemperature->manualAutomaticQualityControl->width: 4 +brightnessTemperature->percentConfidence->code: '033007' +brightnessTemperature->percentConfidence->units: % +brightnessTemperature->percentConfidence->scale: 0 +brightnessTemperature->percentConfidence->reference: 0 +brightnessTemperature->percentConfidence->width: 7 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 +firstOrderStatistics->code: '008023' +firstOrderStatistics->units: CODE TABLE +firstOrderStatistics->scale: 0 +firstOrderStatistics->reference: 0 +firstOrderStatistics->width: 6 diff --git a/tests/sample-data/geos-mviri-meteosat-7.bufr b/tests/sample-data/geos-mviri-meteosat-7.bufr new file mode 100644 index 0000000000000000000000000000000000000000..d6e499f15541c3b433df06c7129b3a400a33d978 GIT binary patch literal 824 zcmb_YziSjh6#nMT?9Gz9N+1GZ_5u*ofNTma47KSCZ7ZQjNu`vha-PTuJvBy@(WF*+ktf=qcZHTa!&dk< zEd0YQqfM=}3M8}k=vSX{z0fX{|94!&E1bD)j4&c9=~1g;75!{h8nOCL)}O4~QR5x` zL=dA#HM$G_<&QWz?Zv#j8}lm%ftTZ7wC2cLYFuLW$u?*1c>CUpX1IX0;q0EY% zB`B7nyw5n?q2!3*fDnt1TfoIru*?N>XHBiPkIlG3pP=$Hz=JoE-%{^_!oAAETJnse ztSFo8hF~G7acXRLw&<#dNDWKj!_7EbbbSLjfk|Jbm2P@F1ZSBiA?1%pbARE`Z{X=% z-;Ud*9lDF?7OL-s-+D?DkET`Wd>zr1Z}7v1F=3gvg6b5I+mH2XzdGb4^9-yF^tiz{ OH!#McOTbC~{O~tA%QvL} literal 0 HcmV?d00001 diff --git a/tests/sample-data/geos-mviri-meteosat-7.items b/tests/sample-data/geos-mviri-meteosat-7.items new file mode 100644 index 00000000..c1a6295b --- /dev/null +++ b/tests/sample-data/geos-mviri-meteosat-7.items @@ -0,0 +1,205 @@ +messageNumber 1 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 0 +dataCategory 5 +dataSubCategory 89 +masterTablesVersionNumber 13 +localTablesVersionNumber 1 +typicalYearOfCentury 13 +typicalMonth 1 +typicalDay 31 +typicalHour 22 +typicalMinute 0 +typicalDate 20130131 +typicalTime 220000 +numberOfSubsets 3 +observedData 1 +compressedData 1 +unexpandedDescriptors [ 1007 1031 2196 2221 2222 4001 4002 4003 4004 4005 + 4006 5001 6001 7024 10002 2252 2023 7004 11001 11002 + 2197 2198 12193 2197 2198 20193 20194 20012 2197 2198 + 20193 20194 20012 2197 2198 20193 20194 20012 2197 2198 + 20193 20194 20012 2197 2198 20193 20194 20012 2197 2198 + 20193 20194 20012 2252 2199 7004 7004 13003 2252 2254 + 2251 2197 2198 12195 12196 12063 2252 2254 2251 2197 + 2198 12195 12196 12063 2252 2254 2251 2197 2198 12195 + 12196 12063 2252 2254 2251 2197 2198 12195 12196 12063 + 2252 2254 2251 2197 2198 12195 12196 12063 2252 2254 + 2251 2197 2198 12195 12196 12063 222000 236000 101106 31031 + 1031 1032 33007 33007 33007 33007 33007 33007 33007 222000 + 237000 1031 1032 33252 33252 33252 33252 33252 33252 33252 + 224000 237000 1031 1032 8023 224255 224255 224255 224255 224255 + 224255 224255] +satelliteIdentifier [54 54 54] +centre [[254 254 254] + [254 254 254] + [254 254 254] + [254 254 254]] +satelliteClassification [331 331 331] +segmentSizeAtNadirInXDirection [80000 80000 80000] +segmentSizeAtNadirInYDirection [80000 80000 80000] +year [2013 2013 2013] +month [1 1 1] +day [31 31 31] +hour [22 22 22] +minute [0 0 0] +second [0 0 0] +latitude [33.6097 34.44459 34.59138] +longitude [4.80789 5.5166 3.71097] +satelliteZenithAngle [62.12 62.12 62.12] +nonCoordinateHeight [-- -- --] +satelliteInstrumentDataUsedInProcessing [[-- -- --] + [4194304 4194304 4194304] + [4194304 4194304 4194304] + [4194304 4194304 4194304] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +satelliteDerivedWindComputationMethod [-- -- --] +pressure [[-- -- --] + [60000.0 60000.0 60000.0] + [30000.0 30000.0 30000.0]] +windDirection [-- -- --] +windSpeed [-- -- --] +satelliteChannelCentreFrequency [[-- -- --] + [47600000000000.0 47600000000000.0 47600000000000.0] + [26500000000000.0 26500000000000.0 26500000000000.0] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --] + [47600000000000.0 47600000000000.0 47600000000000.0] + [26500000000000.0 26500000000000.0 26500000000000.0] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +satelliteChannelBandWidth [[-- -- --] + [7600000000000.0 7600000000000.0 7600000000000.0] + [3090000000000.0 3090000000000.0 3090000000000.0] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --] + [7600000000000.0 7600000000000.0 7600000000000.0] + [3090000000000.0 3090000000000.0 3090000000000.0] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +coldestClusterTemperature [-- -- --] +cloudAmountInSegment [[35 8 61] + [35 8 61] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +amountOfSegmentCloudFree [[65 92 39] + [65 92 39] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +cloudType [[-- -- --] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +meanHumidityComputationalMethod [1 1 1] +relativeHumidity [21 22 20] +relativeHumidity->firstOrderStatisticalValue [-- -- --] +relativeHumidity->manualAutomaticQualityControl [0 0 0] +relativeHumidity->percentConfidence [100 100 100] +radianceType [[2 2 2] + [2 2 2] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +radianceComputationalMethod [[2 2 2] + [2 2 2] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +spectralRadiance [[-- -- --] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +spectralRadiance->firstOrderStatisticalValue [[-- -- --] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +spectralRadiance->manualAutomaticQualityControl [[3 3 3] + [0 3 3] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +spectralRadiance->percentConfidence [[30 12 45] + [81 5 9] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +radiance [[1.014 1.006 1.024] + [10.816 11.044 10.994] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +radiance->firstOrderStatisticalValue [[-- -- --] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +radiance->manualAutomaticQualityControl [[3 3 3] + [0 3 3] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +radiance->percentConfidence [[30 12 45] + [81 5 9] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +brightnessTemperature [[241.9 241.70000000000002 242.20000000000002] + [274.1 275.3 275.0] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +brightnessTemperature->firstOrderStatisticalValue [[0.7000000000000001 0.9 0.5] + [0.5 1.4000000000000001 1.1] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +brightnessTemperature->manualAutomaticQualityControl [[0 0 0] + [0 0 0] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +brightnessTemperature->percentConfidence [[30 12 45] + [81 5 9] + [-- -- --] + [-- -- --] + [-- -- --] + [-- -- --]] +generatingApplication [[1 1 1] + [1 1 1] + [1 1 1]] +firstOrderStatistics [10 10 10] diff --git a/tests/sample-data/hdob.attributes b/tests/sample-data/hdob.attributes new file mode 100644 index 00000000..133751ec --- /dev/null +++ b/tests/sample-data/hdob.attributes @@ -0,0 +1,416 @@ +messageNumber: 1 +aircraftRegistrationNumberOrOtherIdentification->code: '001008' +aircraftRegistrationNumberOrOtherIdentification->units: CCITT IA5 +aircraftRegistrationNumberOrOtherIdentification->scale: 0 +aircraftRegistrationNumberOrOtherIdentification->reference: 0 +aircraftRegistrationNumberOrOtherIdentification->width: 64 +observationSequenceNumber->code: '001023' +observationSequenceNumber->units: Numeric +observationSequenceNumber->scale: 0 +observationSequenceNumber->reference: 0 +observationSequenceNumber->width: 9 +aircraftFlightNumber->code: '001006' +aircraftFlightNumber->units: CCITT IA5 +aircraftFlightNumber->scale: 0 +aircraftFlightNumber->reference: 0 +aircraftFlightNumber->width: 64 +aircraftTailNumber->code: '001110' +aircraftTailNumber->units: CCITT IA5 +aircraftTailNumber->scale: 0 +aircraftTailNumber->reference: 0 +aircraftTailNumber->width: 48 +originationAirport->code: '001111' +originationAirport->units: CCITT IA5 +originationAirport->scale: 0 +originationAirport->reference: 0 +originationAirport->width: 24 +destinationAirport->code: '001112' +destinationAirport->units: CCITT IA5 +destinationAirport->scale: 0 +destinationAirport->reference: 0 +destinationAirport->width: 24 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +year->associatedField->code: 0 +year->associatedField->units: associated units +year->associatedField->scale: 0 +year->associatedField->reference: 0 +year->associatedField->width: 2 +year->associatedField->associatedFieldSignificance->code: '031021' +year->associatedField->associatedFieldSignificance->units: CODE TABLE +year->associatedField->associatedFieldSignificance->scale: 0 +year->associatedField->associatedFieldSignificance->reference: 0 +year->associatedField->associatedFieldSignificance->width: 6 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +month->associatedField->code: 0 +month->associatedField->units: associated units +month->associatedField->scale: 0 +month->associatedField->reference: 0 +month->associatedField->width: 2 +month->associatedField->associatedFieldSignificance->code: '031021' +month->associatedField->associatedFieldSignificance->units: CODE TABLE +month->associatedField->associatedFieldSignificance->scale: 0 +month->associatedField->associatedFieldSignificance->reference: 0 +month->associatedField->associatedFieldSignificance->width: 6 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +day->associatedField->code: 0 +day->associatedField->units: associated units +day->associatedField->scale: 0 +day->associatedField->reference: 0 +day->associatedField->width: 2 +day->associatedField->associatedFieldSignificance->code: '031021' +day->associatedField->associatedFieldSignificance->units: CODE TABLE +day->associatedField->associatedFieldSignificance->scale: 0 +day->associatedField->associatedFieldSignificance->reference: 0 +day->associatedField->associatedFieldSignificance->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +hour->associatedField->code: 0 +hour->associatedField->units: associated units +hour->associatedField->scale: 0 +hour->associatedField->reference: 0 +hour->associatedField->width: 2 +hour->associatedField->associatedFieldSignificance->code: '031021' +hour->associatedField->associatedFieldSignificance->units: CODE TABLE +hour->associatedField->associatedFieldSignificance->scale: 0 +hour->associatedField->associatedFieldSignificance->reference: 0 +hour->associatedField->associatedFieldSignificance->width: 6 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +minute->associatedField->code: 0 +minute->associatedField->units: associated units +minute->associatedField->scale: 0 +minute->associatedField->reference: 0 +minute->associatedField->width: 2 +minute->associatedField->associatedFieldSignificance->code: '031021' +minute->associatedField->associatedFieldSignificance->units: CODE TABLE +minute->associatedField->associatedFieldSignificance->scale: 0 +minute->associatedField->associatedFieldSignificance->reference: 0 +minute->associatedField->associatedFieldSignificance->width: 6 +second->code: '004006' +second->units: s +second->scale: 0 +second->reference: 0 +second->width: 6 +second->associatedField->code: 0 +second->associatedField->units: associated units +second->associatedField->scale: 0 +second->associatedField->reference: 0 +second->associatedField->width: 2 +second->associatedField->associatedFieldSignificance->code: '031021' +second->associatedField->associatedFieldSignificance->units: CODE TABLE +second->associatedField->associatedFieldSignificance->scale: 0 +second->associatedField->associatedFieldSignificance->reference: 0 +second->associatedField->associatedFieldSignificance->width: 6 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +latitude->associatedField->code: 0 +latitude->associatedField->units: associated units +latitude->associatedField->scale: 0 +latitude->associatedField->reference: 0 +latitude->associatedField->width: 2 +latitude->associatedField->associatedFieldSignificance->code: '031021' +latitude->associatedField->associatedFieldSignificance->units: CODE TABLE +latitude->associatedField->associatedFieldSignificance->scale: 0 +latitude->associatedField->associatedFieldSignificance->reference: 0 +latitude->associatedField->associatedFieldSignificance->width: 6 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +longitude->associatedField->code: 0 +longitude->associatedField->units: associated units +longitude->associatedField->scale: 0 +longitude->associatedField->reference: 0 +longitude->associatedField->width: 2 +longitude->associatedField->associatedFieldSignificance->code: '031021' +longitude->associatedField->associatedFieldSignificance->units: CODE TABLE +longitude->associatedField->associatedFieldSignificance->scale: 0 +longitude->associatedField->associatedFieldSignificance->reference: 0 +longitude->associatedField->associatedFieldSignificance->width: 6 +flightLevel->code: '007010' +flightLevel->units: m +flightLevel->scale: 0 +flightLevel->reference: -1024 +flightLevel->width: 16 +flightLevel->associatedField->code: 0 +flightLevel->associatedField->units: associated units +flightLevel->associatedField->scale: 0 +flightLevel->associatedField->reference: 0 +flightLevel->associatedField->width: 2 +flightLevel->associatedField->associatedFieldSignificance->code: '031021' +flightLevel->associatedField->associatedFieldSignificance->units: CODE TABLE +flightLevel->associatedField->associatedFieldSignificance->scale: 0 +flightLevel->associatedField->associatedFieldSignificance->reference: 0 +flightLevel->associatedField->associatedFieldSignificance->width: 6 +globalNavigationSatelliteSystemAltitude->code: '010053' +globalNavigationSatelliteSystemAltitude->units: m +globalNavigationSatelliteSystemAltitude->scale: 0 +globalNavigationSatelliteSystemAltitude->reference: -1000 +globalNavigationSatelliteSystemAltitude->width: 17 +globalNavigationSatelliteSystemAltitude->associatedField->code: 0 +globalNavigationSatelliteSystemAltitude->associatedField->units: associated units +globalNavigationSatelliteSystemAltitude->associatedField->scale: 0 +globalNavigationSatelliteSystemAltitude->associatedField->reference: 0 +globalNavigationSatelliteSystemAltitude->associatedField->width: 2 +globalNavigationSatelliteSystemAltitude->associatedField->associatedFieldSignificance->code: '031021' +globalNavigationSatelliteSystemAltitude->associatedField->associatedFieldSignificance->units: CODE TABLE +globalNavigationSatelliteSystemAltitude->associatedField->associatedFieldSignificance->scale: 0 +globalNavigationSatelliteSystemAltitude->associatedField->associatedFieldSignificance->reference: 0 +globalNavigationSatelliteSystemAltitude->associatedField->associatedFieldSignificance->width: 6 +detailedPhaseOfFlight->code: '008009' +detailedPhaseOfFlight->units: CODE TABLE +detailedPhaseOfFlight->scale: 0 +detailedPhaseOfFlight->reference: 0 +detailedPhaseOfFlight->width: 4 +detailedPhaseOfFlight->associatedField->code: 0 +detailedPhaseOfFlight->associatedField->units: associated units +detailedPhaseOfFlight->associatedField->scale: 0 +detailedPhaseOfFlight->associatedField->reference: 0 +detailedPhaseOfFlight->associatedField->width: 2 +detailedPhaseOfFlight->associatedField->associatedFieldSignificance->code: '031021' +detailedPhaseOfFlight->associatedField->associatedFieldSignificance->units: CODE TABLE +detailedPhaseOfFlight->associatedField->associatedFieldSignificance->scale: 0 +detailedPhaseOfFlight->associatedField->associatedFieldSignificance->reference: 0 +detailedPhaseOfFlight->associatedField->associatedFieldSignificance->width: 6 +windDirection->code: '011001' +windDirection->units: deg +windDirection->scale: 0 +windDirection->reference: 0 +windDirection->width: 9 +windDirection->associatedField->code: 0 +windDirection->associatedField->units: associated units +windDirection->associatedField->scale: 0 +windDirection->associatedField->reference: 0 +windDirection->associatedField->width: 2 +windDirection->associatedField->associatedFieldSignificance->code: '031021' +windDirection->associatedField->associatedFieldSignificance->units: CODE TABLE +windDirection->associatedField->associatedFieldSignificance->scale: 0 +windDirection->associatedField->associatedFieldSignificance->reference: 0 +windDirection->associatedField->associatedFieldSignificance->width: 6 +windSpeed->code: ['011002'] +windSpeed->units: ['m/s'] +windSpeed->scale: [1] +windSpeed->reference: [0] +windSpeed->width: [12] +windSpeed->associatedField->code: 0 +windSpeed->associatedField->units: associated units +windSpeed->associatedField->scale: 0 +windSpeed->associatedField->reference: 0 +windSpeed->associatedField->width: 2 +windSpeed->associatedField->associatedFieldSignificance->code: '031021' +windSpeed->associatedField->associatedFieldSignificance->units: CODE TABLE +windSpeed->associatedField->associatedFieldSignificance->scale: 0 +windSpeed->associatedField->associatedFieldSignificance->reference: 0 +windSpeed->associatedField->associatedFieldSignificance->width: 6 +aircraftRollAngleQuality->code: '002064' +aircraftRollAngleQuality->units: CODE TABLE +aircraftRollAngleQuality->scale: 0 +aircraftRollAngleQuality->reference: 0 +aircraftRollAngleQuality->width: 2 +aircraftRollAngleQuality->associatedField->code: 0 +aircraftRollAngleQuality->associatedField->units: associated units +aircraftRollAngleQuality->associatedField->scale: 0 +aircraftRollAngleQuality->associatedField->reference: 0 +aircraftRollAngleQuality->associatedField->width: 2 +aircraftRollAngleQuality->associatedField->associatedFieldSignificance->code: '031021' +aircraftRollAngleQuality->associatedField->associatedFieldSignificance->units: CODE TABLE +aircraftRollAngleQuality->associatedField->associatedFieldSignificance->scale: 0 +aircraftRollAngleQuality->associatedField->associatedFieldSignificance->reference: 0 +aircraftRollAngleQuality->associatedField->associatedFieldSignificance->width: 6 +aircraftTrueAirspeed->code: '011100' +aircraftTrueAirspeed->units: m/s +aircraftTrueAirspeed->scale: 1 +aircraftTrueAirspeed->reference: 0 +aircraftTrueAirspeed->width: 12 +aircraftTrueAirspeed->associatedField->code: 0 +aircraftTrueAirspeed->associatedField->units: associated units +aircraftTrueAirspeed->associatedField->scale: 0 +aircraftTrueAirspeed->associatedField->reference: 0 +aircraftTrueAirspeed->associatedField->width: 2 +aircraftTrueAirspeed->associatedField->associatedFieldSignificance->code: '031021' +aircraftTrueAirspeed->associatedField->associatedFieldSignificance->units: CODE TABLE +aircraftTrueAirspeed->associatedField->associatedFieldSignificance->scale: 0 +aircraftTrueAirspeed->associatedField->associatedFieldSignificance->reference: 0 +aircraftTrueAirspeed->associatedField->associatedFieldSignificance->width: 6 +aircraftGroundSpeedUComponent->code: '011101' +aircraftGroundSpeedUComponent->units: m/s +aircraftGroundSpeedUComponent->scale: 1 +aircraftGroundSpeedUComponent->reference: -4096 +aircraftGroundSpeedUComponent->width: 13 +aircraftGroundSpeedUComponent->associatedField->code: 0 +aircraftGroundSpeedUComponent->associatedField->units: associated units +aircraftGroundSpeedUComponent->associatedField->scale: 0 +aircraftGroundSpeedUComponent->associatedField->reference: 0 +aircraftGroundSpeedUComponent->associatedField->width: 2 +aircraftGroundSpeedUComponent->associatedField->associatedFieldSignificance->code: '031021' +aircraftGroundSpeedUComponent->associatedField->associatedFieldSignificance->units: CODE TABLE +aircraftGroundSpeedUComponent->associatedField->associatedFieldSignificance->scale: 0 +aircraftGroundSpeedUComponent->associatedField->associatedFieldSignificance->reference: 0 +aircraftGroundSpeedUComponent->associatedField->associatedFieldSignificance->width: 6 +aircraftGroundSpeedVComponent->code: '011102' +aircraftGroundSpeedVComponent->units: m/s +aircraftGroundSpeedVComponent->scale: 1 +aircraftGroundSpeedVComponent->reference: -4096 +aircraftGroundSpeedVComponent->width: 13 +aircraftGroundSpeedVComponent->associatedField->code: 0 +aircraftGroundSpeedVComponent->associatedField->units: associated units +aircraftGroundSpeedVComponent->associatedField->scale: 0 +aircraftGroundSpeedVComponent->associatedField->reference: 0 +aircraftGroundSpeedVComponent->associatedField->width: 2 +aircraftGroundSpeedVComponent->associatedField->associatedFieldSignificance->code: '031021' +aircraftGroundSpeedVComponent->associatedField->associatedFieldSignificance->units: CODE TABLE +aircraftGroundSpeedVComponent->associatedField->associatedFieldSignificance->scale: 0 +aircraftGroundSpeedVComponent->associatedField->associatedFieldSignificance->reference: 0 +aircraftGroundSpeedVComponent->associatedField->associatedFieldSignificance->width: 6 +aircraftGroundSpeedWComponent->code: '011103' +aircraftGroundSpeedWComponent->units: m/s +aircraftGroundSpeedWComponent->scale: 1 +aircraftGroundSpeedWComponent->reference: -512 +aircraftGroundSpeedWComponent->width: 10 +aircraftGroundSpeedWComponent->associatedField->code: 0 +aircraftGroundSpeedWComponent->associatedField->units: associated units +aircraftGroundSpeedWComponent->associatedField->scale: 0 +aircraftGroundSpeedWComponent->associatedField->reference: 0 +aircraftGroundSpeedWComponent->associatedField->width: 2 +aircraftGroundSpeedWComponent->associatedField->associatedFieldSignificance->code: '031021' +aircraftGroundSpeedWComponent->associatedField->associatedFieldSignificance->units: CODE TABLE +aircraftGroundSpeedWComponent->associatedField->associatedFieldSignificance->scale: 0 +aircraftGroundSpeedWComponent->associatedField->associatedFieldSignificance->reference: 0 +aircraftGroundSpeedWComponent->associatedField->associatedFieldSignificance->width: 6 +aircraftTrueHeading->code: '011104' +aircraftTrueHeading->units: deg +aircraftTrueHeading->scale: 0 +aircraftTrueHeading->reference: 0 +aircraftTrueHeading->width: 9 +aircraftTrueHeading->associatedField->code: 0 +aircraftTrueHeading->associatedField->units: associated units +aircraftTrueHeading->associatedField->scale: 0 +aircraftTrueHeading->associatedField->reference: 0 +aircraftTrueHeading->associatedField->width: 2 +aircraftTrueHeading->associatedField->associatedFieldSignificance->code: '031021' +aircraftTrueHeading->associatedField->associatedFieldSignificance->units: CODE TABLE +aircraftTrueHeading->associatedField->associatedFieldSignificance->scale: 0 +aircraftTrueHeading->associatedField->associatedFieldSignificance->reference: 0 +aircraftTrueHeading->associatedField->associatedFieldSignificance->width: 6 +airTemperature->code: '012101' +airTemperature->units: K +airTemperature->scale: 2 +airTemperature->reference: 0 +airTemperature->width: 16 +airTemperature->associatedField->code: 0 +airTemperature->associatedField->units: associated units +airTemperature->associatedField->scale: 0 +airTemperature->associatedField->reference: 0 +airTemperature->associatedField->width: 2 +airTemperature->associatedField->associatedFieldSignificance->code: '031021' +airTemperature->associatedField->associatedFieldSignificance->units: CODE TABLE +airTemperature->associatedField->associatedFieldSignificance->scale: 0 +airTemperature->associatedField->associatedFieldSignificance->reference: 0 +airTemperature->associatedField->associatedFieldSignificance->width: 6 +aircraftHumiditySensors->code: '002170' +aircraftHumiditySensors->units: CODE TABLE +aircraftHumiditySensors->scale: 0 +aircraftHumiditySensors->reference: 0 +aircraftHumiditySensors->width: 6 +aircraftHumiditySensors->associatedField->code: 0 +aircraftHumiditySensors->associatedField->units: associated units +aircraftHumiditySensors->associatedField->scale: 0 +aircraftHumiditySensors->associatedField->reference: 0 +aircraftHumiditySensors->associatedField->width: 2 +aircraftHumiditySensors->associatedField->associatedFieldSignificance->code: '031021' +aircraftHumiditySensors->associatedField->associatedFieldSignificance->units: CODE TABLE +aircraftHumiditySensors->associatedField->associatedFieldSignificance->scale: 0 +aircraftHumiditySensors->associatedField->associatedFieldSignificance->reference: 0 +aircraftHumiditySensors->associatedField->associatedFieldSignificance->width: 6 +mixingRatio->code: '013002' +mixingRatio->units: kg/kg +mixingRatio->scale: 10 +mixingRatio->reference: 0 +mixingRatio->width: 30 +mixingRatio->associatedField->code: 0 +mixingRatio->associatedField->units: associated units +mixingRatio->associatedField->scale: 0 +mixingRatio->associatedField->reference: 0 +mixingRatio->associatedField->width: 2 +mixingRatio->associatedField->associatedFieldSignificance->code: '031021' +mixingRatio->associatedField->associatedFieldSignificance->units: CODE TABLE +mixingRatio->associatedField->associatedFieldSignificance->scale: 0 +mixingRatio->associatedField->associatedFieldSignificance->reference: 0 +mixingRatio->associatedField->associatedFieldSignificance->width: 6 +relativeHumidity->code: '013003' +relativeHumidity->units: % +relativeHumidity->scale: 2 +relativeHumidity->reference: 0 +relativeHumidity->width: 14 +relativeHumidity->associatedField->code: 0 +relativeHumidity->associatedField->units: associated units +relativeHumidity->associatedField->scale: 0 +relativeHumidity->associatedField->reference: 0 +relativeHumidity->associatedField->width: 2 +relativeHumidity->associatedField->associatedFieldSignificance->code: '031021' +relativeHumidity->associatedField->associatedFieldSignificance->units: CODE TABLE +relativeHumidity->associatedField->associatedFieldSignificance->scale: 0 +relativeHumidity->associatedField->associatedFieldSignificance->reference: 0 +relativeHumidity->associatedField->associatedFieldSignificance->width: 6 +shortDelayedDescriptorReplicationFactor->code: '031000' +shortDelayedDescriptorReplicationFactor->units: Numeric +shortDelayedDescriptorReplicationFactor->scale: 0 +shortDelayedDescriptorReplicationFactor->reference: 0 +shortDelayedDescriptorReplicationFactor->width: 1 +moistureQuality->code: '033026' +moistureQuality->units: CODE TABLE +moistureQuality->scale: 0 +moistureQuality->reference: 0 +moistureQuality->width: 6 +moistureQuality->associatedField->code: 0 +moistureQuality->associatedField->units: associated units +moistureQuality->associatedField->scale: 0 +moistureQuality->associatedField->reference: 0 +moistureQuality->associatedField->width: 2 +moistureQuality->associatedField->associatedFieldSignificance->code: '031021' +moistureQuality->associatedField->associatedFieldSignificance->units: CODE TABLE +moistureQuality->associatedField->associatedFieldSignificance->scale: 0 +moistureQuality->associatedField->associatedFieldSignificance->reference: 0 +moistureQuality->associatedField->associatedFieldSignificance->width: 6 +delayedDescriptorReplicationFactor->code: '031001' +delayedDescriptorReplicationFactor->units: Numeric +delayedDescriptorReplicationFactor->scale: 0 +delayedDescriptorReplicationFactor->reference: 0 +delayedDescriptorReplicationFactor->width: 8 +dewpointTemperature->code: '012103' +dewpointTemperature->units: K +dewpointTemperature->scale: 2 +dewpointTemperature->reference: 0 +dewpointTemperature->width: 16 +dewpointTemperature->associatedField->code: 0 +dewpointTemperature->associatedField->units: associated units +dewpointTemperature->associatedField->scale: 0 +dewpointTemperature->associatedField->reference: 0 +dewpointTemperature->associatedField->width: 2 +dewpointTemperature->associatedField->associatedFieldSignificance->code: '031021' +dewpointTemperature->associatedField->associatedFieldSignificance->units: CODE TABLE +dewpointTemperature->associatedField->associatedFieldSignificance->scale: 0 +dewpointTemperature->associatedField->associatedFieldSignificance->reference: 0 +dewpointTemperature->associatedField->associatedFieldSignificance->width: 6 diff --git a/tests/sample-data/hdob.bufr b/tests/sample-data/hdob.bufr new file mode 100644 index 0000000000000000000000000000000000000000..96555f9b15e8849390ee283b14035f0858b9221e GIT binary patch literal 434 zcmZ8uQ8M=6dAZcV6485hjrw&*-!0&;!B(gp)IxU>KZ!vPIu z2B!x*wAAIz-W_BA|A&VkDC+=M0c0@$?w%w34EassociatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +year->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +month [[5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5]] +month->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +month->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +day [[29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29]] +day->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +day->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +hour [[16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16]] +hour->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +hour->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +minute [[ 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10]] +minute->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +minute->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +second [[30 0 30 0 30 0 30 0 30 0 30 0 30 0 30 0 30 0 30 0]] +second->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +second->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +latitude [[30.4 30.4 30.4 30.4 30.4 30.4 30.4 30.4 + 30.4 30.4 30.4 30.4 30.4 30.41667 30.43333 30.45 + 30.46667 30.48333 30.5 30.48333]] +latitude->associatedField [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] +latitude->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +longitude [[-88.91667 -88.91667 -88.91667 -88.91667 -88.91667 -88.93333 -88.93333 + -88.93333 -88.93333 -88.93333 -88.93333 -88.93333 -88.93333 -88.93333 + -88.91667 -88.9 -88.88333 -88.88333 -88.9 -88.93333]] +longitude->associatedField [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] +longitude->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +flightLevel [ 8 8 5 5 5 5 5 5 6 7 8 10 8 7 + 189 373 679 916 1248 1501] +flightLevel->associatedField [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] +flightLevel->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +globalNavigationSatelliteSystemAltitude [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +globalNavigationSatelliteSystemAltitude->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +globalNavigationSatelliteSystemAltitude->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +detailedPhaseOfFlight [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +detailedPhaseOfFlight->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +detailedPhaseOfFlight->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +windDirection [[ 0 0 0 0 0 0 0 0 0 0 0 0 0 127 113 115 130 127 + 193 224]] +windDirection->associatedField [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] +windDirection->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +windSpeed [[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 3.6 4.6 3.6 3.6 4.1 + 4.1 5.7]] +windSpeed->associatedField [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] +windSpeed->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +aircraftRollAngleQuality [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +aircraftRollAngleQuality->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +aircraftRollAngleQuality->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +aircraftTrueAirspeed [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +aircraftTrueAirspeed->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +aircraftTrueAirspeed->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +aircraftGroundSpeedUComponent [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +aircraftGroundSpeedUComponent->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +aircraftGroundSpeedUComponent->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +aircraftGroundSpeedVComponent [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +aircraftGroundSpeedVComponent->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +aircraftGroundSpeedVComponent->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +aircraftGroundSpeedWComponent [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +aircraftGroundSpeedWComponent->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +aircraftGroundSpeedWComponent->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +aircraftTrueHeading [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +aircraftTrueHeading->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +aircraftTrueHeading->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +airTemperature [[309.05 308.95 308.65 308.65 308.15 304.95 301.15 301.55 301.65 302.15 + 301.55 302.95 301.75 299.75 297.15 295.65 292.85 290.25 288.15 286.55]] +airTemperature->associatedField [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] +airTemperature->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +aircraftHumiditySensors [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +aircraftHumiditySensors->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +aircraftHumiditySensors->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +mixingRatio [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +mixingRatio->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +mixingRatio->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +relativeHumidity [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +relativeHumidity->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +relativeHumidity->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +shortDelayedDescriptorReplicationFactor [0 0 0 0 0 0] +moistureQuality [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +moistureQuality->associatedField [3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] +moistureQuality->associatedField->associatedFieldSignificance [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8] +delayedDescriptorReplicationFactor [0 0] +dewpointTemperature [[292.25 292.45 292.25 292.35 292.45 292.45 292.25 290.75 290.05 289.15 + 289.45 287.75 287.75 291.95 290.45 289.05 287.15 285.85 283.55 280.75]] +dewpointTemperature->associatedField [[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]] +dewpointTemperature->associatedField->associatedFieldSignificance [[8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8]] diff --git a/tests/sample-data/rwp.attributes b/tests/sample-data/rwp.attributes new file mode 100644 index 00000000..6462cc28 --- /dev/null +++ b/tests/sample-data/rwp.attributes @@ -0,0 +1,151 @@ +messageNumber: 1 +blockNumber->code: '001001' +blockNumber->units: Numeric +blockNumber->scale: 0 +blockNumber->reference: 0 +blockNumber->width: 7 +stationNumber->code: '001002' +stationNumber->units: Numeric +stationNumber->scale: 0 +stationNumber->reference: 0 +stationNumber->width: 10 +stationType->code: '002001' +stationType->units: CODE TABLE +stationType->scale: 0 +stationType->reference: 0 +stationType->width: 2 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +latitude->code: '005002' +latitude->units: deg +latitude->scale: 2 +latitude->reference: -9000 +latitude->width: 15 +longitude->code: '006002' +longitude->units: deg +longitude->scale: 2 +longitude->reference: -18000 +longitude->width: 16 +heightOfStation->code: '007001' +heightOfStation->units: m +heightOfStation->scale: 0 +heightOfStation->reference: -400 +heightOfStation->width: 15 +measuringEquipmentType->code: '002003' +measuringEquipmentType->units: CODE TABLE +measuringEquipmentType->scale: 0 +measuringEquipmentType->reference: 0 +measuringEquipmentType->width: 4 +antennaType->code: '002101' +antennaType->units: CODE TABLE +antennaType->scale: 0 +antennaType->reference: 0 +antennaType->width: 4 +3DbBeamwidth->code: '002106' +3DbBeamwidth->units: deg +3DbBeamwidth->scale: 1 +3DbBeamwidth->reference: 0 +3DbBeamwidth->width: 6 +meanFrequency->code: '002121' +meanFrequency->units: Hz +meanFrequency->scale: -6 +meanFrequency->reference: 0 +meanFrequency->width: 11 +rangeGateLength->code: '025001' +rangeGateLength->units: m +rangeGateLength->scale: 0 +rangeGateLength->reference: 0 +rangeGateLength->width: 11 +meanSpeedEstimation->code: '025020' +meanSpeedEstimation->units: CODE TABLE +meanSpeedEstimation->scale: 0 +meanSpeedEstimation->reference: 0 +meanSpeedEstimation->width: 2 +windComputationEnhancement->code: '025021' +windComputationEnhancement->units: FLAG TABLE +windComputationEnhancement->scale: 0 +windComputationEnhancement->reference: 0 +windComputationEnhancement->width: 8 +timeSignificance->code: '008021' +timeSignificance->units: CODE TABLE +timeSignificance->scale: 0 +timeSignificance->reference: 0 +timeSignificance->width: 5 +timePeriod->code: '004025' +timePeriod->units: min +timePeriod->scale: 0 +timePeriod->reference: -2048 +timePeriod->width: 12 +delayedDescriptorReplicationFactor->code: '031001' +delayedDescriptorReplicationFactor->units: Numeric +delayedDescriptorReplicationFactor->scale: 0 +delayedDescriptorReplicationFactor->reference: 0 +delayedDescriptorReplicationFactor->width: 8 +height->code: '007007' +height->units: m +height->scale: 0 +height->reference: -1000 +height->width: 17 +windDirection->code: '011001' +windDirection->units: deg +windDirection->scale: 0 +windDirection->reference: 0 +windDirection->width: 9 +windDirection->associatedField->code: 0 +windDirection->associatedField->units: associated units +windDirection->associatedField->scale: 0 +windDirection->associatedField->reference: 0 +windDirection->associatedField->width: 2 +windDirection->associatedField->associatedFieldSignificance->code: '031021' +windDirection->associatedField->associatedFieldSignificance->units: CODE TABLE +windDirection->associatedField->associatedFieldSignificance->scale: 0 +windDirection->associatedField->associatedFieldSignificance->reference: 0 +windDirection->associatedField->associatedFieldSignificance->width: 6 +windSpeed->code: '011002' +windSpeed->units: m/s +windSpeed->scale: 1 +windSpeed->reference: 0 +windSpeed->width: 12 +w->code: '011006' +w->units: m/s +w->scale: 2 +w->reference: -4096 +w->width: 13 +w->associatedField->code: 0 +w->associatedField->units: associated units +w->associatedField->scale: 0 +w->associatedField->reference: 0 +w->associatedField->width: 2 +w->associatedField->associatedFieldSignificance->code: '031021' +w->associatedField->associatedFieldSignificance->units: CODE TABLE +w->associatedField->associatedFieldSignificance->scale: 0 +w->associatedField->associatedFieldSignificance->reference: 0 +w->associatedField->associatedFieldSignificance->width: 6 +signalToNoiseRatio->code: '021030' +signalToNoiseRatio->units: dB +signalToNoiseRatio->scale: 0 +signalToNoiseRatio->reference: -32 +signalToNoiseRatio->width: 8 diff --git a/tests/sample-data/rwp.bufr b/tests/sample-data/rwp.bufr new file mode 100644 index 0000000000000000000000000000000000000000..81f11bbc770d516b29373a2ad1f980fa5b8e7bb8 GIT binary patch literal 398 zcmZ|hv1_n1E29t~p2Njr@nNpdu8e5v0m@1nX8W|c}n;Inin3WJ>=B0pZ^~j7|qF z7^evTKJRe!z??=F&c7W8N(JKo|7ZRG|AX@awFlu%HJLlqVuUA{G1^Cb5iR4qAe%6M zLKXKtkOH7OwuYwv|9|NJ|KHrnSpWZz`2YV0Up(0V{~!1N{}0&~Kn?2204e~f^Ex2B zMUT;b!V&dloDU=%=C3Fc`Nr~rXM+C=V{RU(L9OQ1OLUA{4<%V+Ha^|l5Aiw2Lb?p)}JH* literal 0 HcmV?d00001 diff --git a/tests/sample-data/rwp.items b/tests/sample-data/rwp.items new file mode 100644 index 00000000..d22c593b --- /dev/null +++ b/tests/sample-data/rwp.items @@ -0,0 +1,90 @@ +messageNumber 1 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 0 +dataCategory 2 +dataSubCategory 96 +masterTablesVersionNumber 13 +localTablesVersionNumber 1 +typicalYearOfCentury 17 +typicalMonth 2 +typicalDay 16 +typicalHour 8 +typicalMinute 10 +typicalDate 20170216 +typicalTime 081000 +rdbType 4 +oldSubtype 96 +localYear 2017 +localMonth 2 +localDay 16 +localHour 8 +localMinute 10 +localSecond 0 +rdbtimeDay 16 +rdbtimeHour 9 +rdbtimeMinute 18 +rdbtimeSecond 50 +rdbtimeTime 091850 +rectimeDay 10 +rectimeHour 10 +rectimeMinute 0 +rectimeSecond 0 +restricted 0 +correction1 0 +correction1Part 1 +correction2 0 +correction2Part 0 +correction3 0 +correction3Part 0 +correction4 0 +correction4Part 0 +qualityControl 70 +newSubtype 0 +numberOfSubsets 1 +localLatitude 34.9 +localLongitude 132.07 +ident 47755 +observedData 1 +compressedData 0 +unexpandedDescriptors [301032 2003 2101 2106 201132 202130 2121 202000 201000 201133 + 202129 25001 202000 201000 25020 25021 8021 4025 111000 31001 + 7007 204001 31021 11001 204000 11002 204001 31021 11006 204000 + 21030] +blockNumber 47 +stationNumber 755 +stationType -- +year 2017 +month 2 +day 16 +hour 9 +minute 0 +latitude 34.9 +longitude 132.07 +heightOfStation 20 +measuringEquipmentType 6 +antennaType -- +3DbBeamwidth -- +meanFrequency -- +rangeGateLength -- +meanSpeedEstimation -- +windComputationEnhancement -- +timeSignificance 2 +timePeriod -10 +delayedDescriptorReplicationFactor 24 +height [ 291 582 873 1164 1455 1747 2038 2329 2620 2911 3202 3493 3784 4075 + 4366 4657 4949 5240 5531 5822 6113 6404 6695 6986] +windDirection [224 228 -- 220 228 232 -- -- -- -- -- -- 237 240 240 -- -- -- -- -- 249 + 248 246 245] +windDirection->associatedField [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] +windDirection->associatedField->associatedFieldSignificance [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] +windSpeed [10.100000000000001 13.0 -- 17.5 21.6 23.5 -- -- -- -- -- -- + 18.400000000000002 19.400000000000002 20.1 -- -- -- -- -- + 23.400000000000002 24.3 25.400000000000002 25.1] +w [-0.17 -0.2 -- -1.1500000000000001 -0.42 -0.56 -- -- -- -- -- -- -0.28 + -0.44 -0.24 -- -- -- -- -- -1.1300000000000001 -1.06 -0.93 -0.92] +w->associatedField [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] +w->associatedField->associatedFieldSignificance [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] +signalToNoiseRatio [29 38 -- 23 29 29 -- -- -- -- -- -- 17 25 19 -- -- -- -- -- 22 24 25 19] diff --git a/tests/sample-data/rwp_jma.attributes b/tests/sample-data/rwp_jma.attributes new file mode 100644 index 00000000..44c02aa5 --- /dev/null +++ b/tests/sample-data/rwp_jma.attributes @@ -0,0 +1,96 @@ +messageNumber: 1 +blockNumber->code: '001001' +blockNumber->units: Numeric +blockNumber->scale: 0 +blockNumber->reference: 0 +blockNumber->width: 7 +stationNumber->code: '001002' +stationNumber->units: Numeric +stationNumber->scale: 0 +stationNumber->reference: 0 +stationNumber->width: 10 +latitude->code: '005002' +latitude->units: deg +latitude->scale: 2 +latitude->reference: -9000 +latitude->width: 15 +longitude->code: '006002' +longitude->units: deg +longitude->scale: 2 +longitude->reference: -18000 +longitude->width: 16 +heightOfStation->code: '007001' +heightOfStation->units: m +heightOfStation->scale: 0 +heightOfStation->reference: -400 +heightOfStation->width: 15 +measuringEquipmentType->code: '002003' +measuringEquipmentType->units: CODE TABLE +measuringEquipmentType->scale: 0 +measuringEquipmentType->reference: 0 +measuringEquipmentType->width: 4 +delayedDescriptorReplicationFactor->code: '031001' +delayedDescriptorReplicationFactor->units: Numeric +delayedDescriptorReplicationFactor->scale: 0 +delayedDescriptorReplicationFactor->reference: 0 +delayedDescriptorReplicationFactor->width: 8 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +timeSignificance->code: '008021' +timeSignificance->units: CODE TABLE +timeSignificance->scale: 0 +timeSignificance->reference: 0 +timeSignificance->width: 5 +timePeriod->code: '004025' +timePeriod->units: min +timePeriod->scale: 0 +timePeriod->reference: -2048 +timePeriod->width: 12 +heightAboveStation->code: '007006' +heightAboveStation->units: m +heightAboveStation->scale: 0 +heightAboveStation->reference: 0 +heightAboveStation->width: 15 +u->code: '011003' +u->units: m/s +u->scale: 1 +u->reference: -4096 +u->width: 13 +v->code: '011004' +v->units: m/s +v->scale: 1 +v->reference: -4096 +v->width: 13 +w->code: '011006' +w->units: m/s +w->scale: 2 +w->reference: -4096 +w->width: 13 +signalToNoiseRatio->code: '021030' +signalToNoiseRatio->units: dB +signalToNoiseRatio->scale: 0 +signalToNoiseRatio->reference: -32 +signalToNoiseRatio->width: 8 diff --git a/tests/sample-data/rwp_jma.bufr b/tests/sample-data/rwp_jma.bufr new file mode 100644 index 0000000000000000000000000000000000000000..191dd4a3d442348568cffe7b8bc1360d50f7d1ea GIT binary patch literal 3414 zcma)v2I&i%S;di zTe<|>+O@|$#Di9Q*@6pJds@kW+e+1zXlB@k?%QQ z-g)QE%orXk?K zLJ=h@y&fW0sWAkZhad!lq9_)ENiZpj;TA-P5-5QYI6)90vIrtN7wkwSyJXR<0#^_U zNkj~yyo6Y{H=Wsj12?m^=MFX z3i=}-bP7|pkt?QlMLOZR{!Jtly#Xf_yQAUC$KQp*e+;g|RlP$WCRAN{yYYu^bNU}` z`-)4i7ZzFSyD7O2mUzrA^%;61uR&Ybh5JStd6PUE8Jjo2I&LP=V#)aQr^dvc@MQQ6 zxAX=SgB#&0d~TvL5(E!IPR>UaMJneA@>~`%$FWXWc0RC0^STR;F*T? zsIo{+rQ8~MV{iNnp9aenyN0LWL-lQFihh$(eWYx$%vGL4E&OKGmG+pziU?AF+dq}5 z^|02%_dxM)@y-g`?Qnxz4Od~%Zqd{*SwyYm0-Mo}Hx5!$>(J2dsm>0LUPH{*mm&v~ zVqKaRre9+JB8ttNg}W4~Wlv78l?N)2I+o1iH;>IHUPA&>FBPJlycqBA*(+=_*4fpE z%3kG`ly`~OQ5_a9Odf|~Fph-cvltqRNGD1R`^as5C0ZiJE#pu1wlsm8qToBLN~nx? zB(?r@T^Fi|n#hJItG5ve`UHds&oOGwG8fUud-ml$iP38jgV?Msjv~{?8auNkUn8T# z*Qk#PLkWIU*MOX2#vlJF5o$p_00-dAolp$s)4d3 zye4oF{Z6C#(AMC$OTBEyM}!B@nl=?xbf`!_S64%%6el8?E3X%>vi}CA9@w=Fz;trN z7!ibN^!aP-3-0^CL{T=*_=Nd^FqynU!R>4SQ)rQv%rgL(W;vebQ)~dHcWjFZO9z0d z6|;nqL71LKSjok5>wA)e4jJCc>tmcS^+*0gn9e}Bf$@iSk0WdvBbY9L6!ju;2 zoT>*fJzN|wR1^Z3K45leEOG$TB~;y?Xl-rEe(@#zVHQ|P(0!QjG#N@B5^|Y3hwi69 z2d3Y-fuWxrvHBR`K78Z%Wo;hdJ{(jr7`6a6{PJ%Iw*Me&U$i76(V-<&(wP#(k}K+&d~8#gfSd zVhOz&iYqxZ6t66RE1yt?sayyhigd)wC^mX5_tb{sSOq%C_jXtZQ?X`3{kL1m53z9j z0$M((xhX58@_5O?8nMgkE0{{0x9)v$=~dWnWYq~-iSr|(y7An>=2)`H{(t}!^T0pu zxxK%S+RKR4Tdyn^$Nx38Ic*qL8V9I-6o1QKAEb5;QSW*RP^(pQWw(w#QY2gAY{yPl z#^__W3Z=tSok@FK1mBLBVKbpTN9;Oo%YJi*)JMK6Q957gm+JB{W$1JTD`%)+yp#n3DbO|4tSF38A-w69Nv$iQJ8%dKZY272gEu3Or>SPDZ5p3YDmM$ud@eNz0U1_s(ff4#yqZMmG20meXeL!=%gfeZF-MO6sGEick zLV7hI17jSS2(b=iU?bClsdm37&JsTe1^2=CM569Enwiw)(tJ_222bA(cF7(RF) z*RIK8ny+4{1Th(kb{@zBF-a7KwVu?2n2d0&X>1S1q|~f+ zZiuQA?Q7^6Cmi9-0&$kv^H9a{0d`0Cv7d<~-61S_5=c_2zS|<7f_tnTLq8+nwd`V9 zv#Ze7!jhW;oyBI5r2I|nFTat~}|>@DvClQH<_reg;mu>-Js==`HA zgJ6Gzgk81U zo2g?LdINviQxpXI_?`LxU;x;@p4K0)c>vhA=?3S@@-CMAj=wW!H2@nq?LBE*4!{o8 z{orru1z^v%J$q?SB>>weE%@{v*wr!44N3sErg%r7B^H1^-?r0hk(N+YE3w%V1e-Xa zA+IT`pNDsHD2IgNi~k3^M=Swgx0XFCC>0(yQ#EW(o!p;K+_}7I07d6AG AO#lD@ literal 0 HcmV?d00001 diff --git a/tests/sample-data/rwp_jma.items b/tests/sample-data/rwp_jma.items new file mode 100644 index 00000000..14172d87 --- /dev/null +++ b/tests/sample-data/rwp_jma.items @@ -0,0 +1,233 @@ +messageNumber 1 +edition 4 +masterTableNumber 0 +bufrHeaderCentre 34 +bufrHeaderSubCentre 0 +updateSequenceNumber 0 +dataCategory 2 +internationalDataSubCategory 10 +dataSubCategory 0 +masterTablesVersionNumber 12 +localTablesVersionNumber 1 +typicalYear 2022 +typicalMonth 5 +typicalDay 9 +typicalHour 13 +typicalMinute 15 +typicalSecond 2 +typicalDate 20220509 +typicalTime 131502 +numberOfSubsets 4 +observedData 1 +compressedData 0 +unexpandedDescriptors [ 1001 1002 5002 6002 7001 2003 116000 31001 4001 4002 + 4003 4004 4005 8021 4025 107000 31001 7006 206008 25192 + 11003 11004 11006 21030] +subsetNumber 1 +blockNumber 47 +stationNumber 755 +latitude 34.9 +longitude 132.07 +heightOfStation 20 +measuringEquipmentType 6 +delayedDescriptorReplicationFactor [ 4 5 4 5 11] +year [2022 2022 2022 2022] +month [5 5 5 5] +day [9 9 9 9] +hour [12 12 12 13] +minute [10 20 50 0] +timeSignificance [2 2 2 2] +timePeriod [-10 -10 -10 -10] +heightAboveStation [ 291 582 873 1164 1455 291 582 873 1164 291 582 873 1164 1455 + 291 582 873 1164 1455 1747 2038 2329 2620 2911 3202] +u [-- -- -- -6.4 -0.5 -- -- -- -8.5 -- -- -- -- -3.4000000000000004 -- -- -- + -5.1000000000000005 -- -- -- -- -- -- 0.7000000000000001] +v [-- -- -- 0.5 -0.30000000000000004 -- -- -- 0.9 -- -- -- -- + -1.9000000000000001 -- -- -- -1.5 -- -- -- -- -- -- -0.8] +w [-- -- -- 0.53 0.28 -- -- -- 0.7000000000000001 -- -- -- -- 0.49 -- -- -- + 0.32 -- -- -- -- -- -- -0.59] +signalToNoiseRatio [-- -- -- 36 30 -- -- -- 34 -- -- -- -- 30 -- -- -- 35 -- -- -- -- -- -- + 21] +subsetNumber 2 +blockNumber 47 +stationNumber 891 +latitude 34.32 +longitude 134.05 +heightOfStation 9 +measuringEquipmentType 6 +delayedDescriptorReplicationFactor [ 6 16 16 16 16 16 16] +year [2022 2022 2022 2022 2022 2022] +month [5 5 5 5 5 5] +day [9 9 9 9 9 9] +hour [12 12 12 12 12 13] +minute [10 20 30 40 50 0] +timeSignificance [2 2 2 2 2 2] +timePeriod [-10 -10 -10 -10 -10 -10] +heightAboveStation [ 291 582 873 1164 1455 1747 2038 2329 2620 2911 3202 3493 3784 4075 + 4366 4657 291 582 873 1164 1455 1747 2038 2329 2620 2911 3202 3493 + 3784 4075 4366 4657 291 582 873 1164 1455 1747 2038 2329 2620 2911 + 3202 3493 3784 4075 4366 4657 291 582 873 1164 1455 1747 2038 2329 + 2620 2911 3202 3493 3784 4075 4366 4657 291 582 873 1164 1455 1747 + 2038 2329 2620 2911 3202 3493 3784 4075 4366 4657 291 582 873 1164 + 1455 1747 2038 2329 2620 2911 3202 3493 3784 4075 4366 4657] +u [-- -5.4 -9.0 -7.7 -- -- -- -- -- -- 13.9 18.1 17.8 17.1 + 17.900000000000002 19.700000000000003 -- -5.4 -8.8 -7.5 -1.6 -- -- -- -- + -- 14.0 17.6 17.3 17.2 18.0 20.200000000000003 -4.6000000000000005 + -4.800000000000001 -7.7 -9.1 -- -- -- -- -- 7.9 12.3 17.1 + 16.900000000000002 17.7 18.0 20.3 -- -4.9 -8.1 -9.600000000000001 -- -- + -- -- -- 9.200000000000001 12.3 16.5 17.400000000000002 17.3 18.8 + 20.900000000000002 -- -- -8.1 -8.9 -- -- 3.2 -- -- -- 12.5 16.5 17.0 16.6 + 17.5 19.8 -- -5.0 -8.700000000000001 -8.6 -3.0 -0.5 -0.4 + 5.800000000000001 3.6 10.700000000000001 12.600000000000001 + 15.700000000000001 16.3 15.3 17.2 24.6] +v [-- -3.0 -5.1000000000000005 -3.7 -- -- -- -- -- -- -0.1 2.7 4.9 5.0 3.1 + 3.0 -- -3.2 -5.5 -4.2 -1.5 -- -- -- -- -- 0.8 2.9000000000000004 5.9 + 5.1000000000000005 2.9000000000000004 3.0 -1.3 -2.2 -5.300000000000001 + -4.7 -- -- -- -- -- -2.0 0.4 3.3000000000000003 5.2 3.9000000000000004 + 2.2 2.6 -- -3.5 -5.4 -4.7 -- -- -- -- -- 1.7000000000000002 0.0 + 4.6000000000000005 5.2 3.9000000000000004 2.6 2.3000000000000003 -- -- + -5.5 -5.300000000000001 -- -- -3.1 -- -- -- -0.6000000000000001 4.0 5.2 + 4.1000000000000005 1.8 0.30000000000000004 -- -1.6 -5.800000000000001 + -4.5 -2.4000000000000004 -1.6 -0.30000000000000004 0.7000000000000001 + 0.30000000000000004 0.30000000000000004 0.9 3.8000000000000003 4.5 2.0 + 1.5 0.8] +w [-- -0.08 -0.02 0.4 -- -- -- -- -- -- 0.0 -0.02 -0.11 -0.11 0.03 0.13 -- + 0.19 0.35000000000000003 0.56 1.07 -- -- -- -- -- 0.18 -0.15 -0.14 0.1 + 0.26 0.11 -0.05 0.01 -0.09 -0.15 -- -- -- -- -- -0.35000000000000003 -0.2 + -0.05 -0.08 0.01 0.0 0.05 -- -0.49 0.46 0.12 -- -- -- -- -- 0.31 0.04 + -0.35000000000000003 -0.3 0.03 -0.02 0.04 -- -- 0.21 0.3 -- -- + 0.9400000000000001 -- -- -- -0.22 -0.46 -0.29 0.17 0.14 0.04 -- -0.34 + 0.26 -0.1 0.09 0.0 0.25 -0.1 -0.91 0.46 -0.61 -0.35000000000000003 + -0.5700000000000001 -0.08 0.65 -0.2] +signalToNoiseRatio [-- 32 33 26 -- -- -- -- -- -- 31 32 29 34 35 26 -- 34 34 27 35 -- -- -- + -- -- 28 32 31 35 35 22 26 37 35 26 -- -- -- -- -- 25 30 30 29 35 33 23 + -- 37 33 24 -- -- -- -- -- 23 34 32 32 36 31 21 -- -- 33 24 -- -- 40 -- + -- -- 37 41 40 35 31 17 -- 39 35 24 24 25 46 33 33 25 37 43 40 37 32 15] +subsetNumber 3 +blockNumber 47 +stationNumber 893 +latitude 33.57 +longitude 133.55 +heightOfStation 3 +measuringEquipmentType 6 +delayedDescriptorReplicationFactor [ 6 16 21 20 19 18 16] +year [2022 2022 2022 2022 2022 2022] +month [5 5 5 5 5 5] +day [9 9 9 9 9 9] +hour [12 12 12 12 12 13] +minute [10 20 30 40 50 0] +timeSignificance [2 2 2 2 2 2] +timePeriod [-10 -10 -10 -10 -10 -10] +heightAboveStation [ 291 582 873 1164 1455 1747 2038 2329 2620 2911 3202 3493 3784 4075 + 4366 4657 291 582 873 1164 1455 1747 2038 2329 2620 2911 3202 3493 + 3784 4075 4366 4657 4949 5240 5531 5822 6113 291 582 873 1164 1455 + 1747 2038 2329 2620 2911 3202 3493 3784 4075 4366 4657 4949 5240 5531 + 5822 291 582 873 1164 1455 1747 2038 2329 2620 2911 3202 3493 3784 + 4075 4366 4657 4949 5240 5531 291 582 873 1164 1455 1747 2038 2329 + 2620 2911 3202 3493 3784 4075 4366 4657 4949 5240 291 582 873 1164 + 1455 1747 2038 2329 2620 2911 3202 3493 3784 4075 4366 4657] +u [0.2 -0.9 -1.8 -1.1 -0.8 -- -- -- -- 11.3 13.4 -- 13.9 15.100000000000001 + 16.3 17.1 -- -- -- -- 0.8 3.2 -- -- -- 10.3 14.4 -- 14.700000000000001 + 15.100000000000001 17.3 -- -- -- -- 20.5 24.6 -- -- -2.6 -- -- -- -- -- + -- 9.9 11.600000000000001 -- 14.600000000000001 15.3 15.9 16.7 -- -- -- + 19.700000000000003 -- -- -- -- -- -- -- -- -- 11.0 12.9 13.3 13.9 14.8 + 16.400000000000002 -- 16.0 -- 20.1 -- -- -- -- -- -- -- -- -- 11.0 -- -- + 14.100000000000001 15.600000000000001 16.5 16.0 15.700000000000001 18.5 + -- -- -- -2.0 -- -- -- 4.3 6.6000000000000005 -- -- -- 15.200000000000001 + 15.600000000000001 16.400000000000002 16.2] +v [-2.3000000000000003 -3.6 -2.7 -3.6 -0.5 -- -- -- -- -2.2 2.0 -- 8.4 7.5 + 3.2 3.0 -- -- -- -- -0.30000000000000004 -2.9000000000000004 -- -- -- + -1.1 1.1 -- 7.9 6.4 2.8000000000000003 -- -- -- -- -4.0 -5.2 -- -- -3.0 + -- -- -- -- -- -- -0.2 -0.6000000000000001 -- 7.4 6.6000000000000005 2.2 + 2.9000000000000004 -- -- -- -2.9000000000000004 -- -- -- -- -- -- -- -- + -- 0.0 0.6000000000000001 1.7000000000000002 7.0 6.0 1.8 -- + -0.7000000000000001 -- -1.9000000000000001 -- -- -- -- -- -- -- -- -- 0.0 + -- -- 6.4 5.7 1.8 -0.4 -1.6 -1.0 -- -- -- -2.2 -- -- -- + 0.6000000000000001 0.1 -- -- -- 6.300000000000001 5.6000000000000005 + 3.9000000000000004 1.7000000000000002] +w [-0.06 0.04 -0.05 -0.4 0.24 -- -- -- -- -0.67 -0.22 -- + -0.41000000000000003 -0.26 -0.14 -0.06 -- -- -- -- -0.68 -0.61 -- -- -- + -0.21 -0.7000000000000001 -- -0.21 -0.11 0.02 -- -- -- -- -0.27 -0.2 -- + -- -0.23 -- -- -- -- -- -- -0.02 0.11 -- 0.17 -0.04 -0.08 0.08 -- -- -- + -0.14 -- -- -- -- -- -- -- -- -- -0.31 -0.38 -0.19 -0.21 -0.31 -0.16 -- + -0.53 -- 0.36 -- -- -- -- -- -- -- -- -- -0.21 -- -- 0.19 -0.15 -0.24 + -0.35000000000000003 0.22 -0.18 -- -- -- -0.06 -- -- -- 0.34 0.0 -- -- -- + -0.04 -0.24 -0.31 -0.5700000000000001] +signalToNoiseRatio [28 33 32 30 32 -- -- -- -- 25 30 -- 20 32 17 20 -- -- -- -- 27 30 -- -- + -- 29 32 -- 23 31 19 -- -- -- -- 30 20 -- -- 25 -- -- -- -- -- -- 31 32 + -- 23 33 19 21 -- -- -- 33 -- -- -- -- -- -- -- -- -- 32 30 20 25 30 21 + -- 29 -- 37 -- -- -- -- -- -- -- -- -- 30 -- -- 25 30 19 22 28 27 -- -- + -- 23 -- -- -- 26 29 -- -- -- 25 33 29 28] +subsetNumber 4 +blockNumber 47 +stationNumber 898 +latitude 32.72 +longitude 133.01 +heightOfStation 31 +measuringEquipmentType 6 +delayedDescriptorReplicationFactor [ 6 20 20 20 20 20 22] +year [2022 2022 2022 2022 2022 2022] +month [5 5 5 5 5 5] +day [9 9 9 9 9 9] +hour [12 12 12 12 12 13] +minute [10 20 30 40 50 0] +timeSignificance [2 2 2 2 2 2] +timePeriod [-10 -10 -10 -10 -10 -10] +heightAboveStation [ 291 582 873 1164 1455 1747 2038 2329 2620 2911 3202 3493 3784 4075 + 4366 4657 4949 5240 5531 5822 291 582 873 1164 1455 1747 2038 2329 + 2620 2911 3202 3493 3784 4075 4366 4657 4949 5240 5531 5822 291 582 + 873 1164 1455 1747 2038 2329 2620 2911 3202 3493 3784 4075 4366 4657 + 4949 5240 5531 5822 291 582 873 1164 1455 1747 2038 2329 2620 2911 + 3202 3493 3784 4075 4366 4657 4949 5240 5531 5822 291 582 873 1164 + 1455 1747 2038 2329 2620 2911 3202 3493 3784 4075 4366 4657 4949 5240 + 5531 5822 291 582 873 1164 1455 1747 2038 2329 2620 2911 3202 3493 + 3784 4075 4366 4657 4949 5240 5531 5822 6113 6404] +u [-- -6.1000000000000005 -2.5 -4.0 -1.6 2.9000000000000004 + 5.6000000000000005 4.3 6.1000000000000005 8.0 7.800000000000001 9.0 9.4 + 11.0 11.600000000000001 -- -- -- -- 20.0 -- -5.4 -3.6 -1.6 0.0 2.0 + 5.300000000000001 4.6000000000000005 5.2 7.7 8.4 9.4 9.200000000000001 + 10.0 12.200000000000001 17.5 -- -- 18.8 20.1 -- -- -4.3 -2.1 -0.9 0.9 4.0 + 4.800000000000001 6.800000000000001 6.6000000000000005 6.9 8.6 8.9 + 10.100000000000001 11.600000000000001 -- -- -- 18.7 20.0 + -6.300000000000001 -4.4 -3.7 -1.8 -0.4 1.1 4.0 3.7 5.1000000000000005 + 5.1000000000000005 7.2 7.6000000000000005 8.3 9.5 -- -- -- -- -- 19.5 + -7.1000000000000005 -5.6000000000000005 -3.3000000000000003 + -1.9000000000000001 -0.6000000000000001 0.8 4.1000000000000005 3.5 4.9 + 4.7 7.1000000000000005 5.2 4.7 6.300000000000001 8.3 -- -- -- -- 18.6 + -6.7 -5.300000000000001 -3.7 -2.2 -1.0 1.2000000000000002 4.0 4.3 + 6.1000000000000005 7.2 6.5 5.800000000000001 4.7 7.5 -- -- -- -- -- 19.0 + 19.5 19.3] +v [-- -3.2 -3.2 -2.5 -3.8000000000000003 -4.0 0.4 3.2 4.7 1.8 2.2 5.0 7.2 + 7.0 4.4 -- -- -- -- -4.2 -- -3.0 -3.2 -0.9 0.2 -0.8 -0.7000000000000001 + 2.4000000000000004 3.3000000000000003 0.8 2.1 5.0 7.1000000000000005 + 5.6000000000000005 3.3000000000000003 2.2 -- -- -3.7 -5.300000000000001 + -- -- -1.6 -0.1 -0.7000000000000001 -1.3 -2.0 1.8 2.2 1.4000000000000001 + 2.9000000000000004 4.9 6.7 5.300000000000001 4.1000000000000005 -- -- -- + -3.7 -4.6000000000000005 -2.8000000000000003 -4.2 -1.8 0.5 0.0 -1.6 + -2.3000000000000003 2.5 2.6 1.5 3.4000000000000004 6.300000000000001 6.5 + 5.4 -- -- -- -- -- -3.9000000000000004 -2.2 -3.2 -2.3000000000000003 0.0 + 0.2 -2.3000000000000003 -1.9000000000000001 3.0 4.1000000000000005 3.2 + 5.7 4.800000000000001 7.2 5.1000000000000005 5.4 -- -- -- -- -4.4 -2.1 + -3.4000000000000004 -3.3000000000000003 -1.2000000000000002 -0.9 -2.1 + -1.7000000000000002 4.6000000000000005 5.800000000000001 + 6.1000000000000005 6.2 4.800000000000001 3.5 3.2 -- -- -- -- -- -5.0 + -7.1000000000000005 -6.300000000000001] +w [-- -0.44 -0.03 0.4 -0.88 -1.09 -0.85 -0.68 -0.8200000000000001 -1.23 + -0.98 -0.89 -0.54 -0.37 -0.35000000000000003 -- -- -- -- -0.04 -- -0.29 + -0.58 -1.03 -1.52 -1.6500000000000001 -1.74 -1.6600000000000001 + -1.3900000000000001 -1.44 -0.88 -0.76 -0.22 -0.03 0.0 0.08 -- -- 0.2 0.08 + -- -- -1.86 -1.67 -1.6300000000000001 -1.68 -1.55 -1.34 + -1.1300000000000001 -0.9500000000000001 -0.81 -0.59 -0.6900000000000001 + -0.62 -0.38 -- -- -- 0.31 0.35000000000000003 -2.09 -1.9100000000000001 + -1.6 -1.71 -1.71 -1.93 -1.9100000000000001 -1.69 -1.6500000000000001 + -1.27 -1.0 -0.8200000000000001 -0.53 -0.5700000000000001 -- -- -- -- -- + 0.14 -2.4 -2.37 -3.15 -2.91 -3.11 -3.59 -3.36 -3.0700000000000003 -3.19 + -3.0100000000000002 -2.52 -1.87 -1.47 -0.39 -0.05 -- -- -- -- 0.06 -3.66 + -3.45 -3.22 -2.59 -2.12 -1.6 -1.17 -1.5 -0.68 -0.38 -0.37 -0.43 -0.16 + -0.07 -- -- -- -- -- -0.04 0.11 0.13] +signalToNoiseRatio [-- 33 29 30 31 30 33 33 33 36 37 38 35 39 41 -- -- -- -- 17 -- 35 28 35 + 34 38 43 41 40 41 38 35 34 36 38 22 -- -- 19 18 -- -- 33 37 40 42 44 42 + 42 41 40 35 34 36 38 -- -- -- 22 17 32 42 40 43 48 49 48 47 48 45 43 40 + 38 39 -- -- -- -- -- 20 44 57 61 63 64 64 64 63 62 61 59 56 51 48 44 -- + -- -- -- 19 56 64 63 62 58 53 46 42 40 35 34 32 34 35 -- -- -- -- -- 16 + 15 16] diff --git a/tests/sample-data/saral-altika.attributes b/tests/sample-data/saral-altika.attributes new file mode 100644 index 00000000..dc28ccd1 --- /dev/null +++ b/tests/sample-data/saral-altika.attributes @@ -0,0 +1,371 @@ +messageNumber: 1 +satelliteIdentifier->code: '001007' +satelliteIdentifier->units: CODE TABLE +satelliteIdentifier->scale: 0 +satelliteIdentifier->reference: 0 +satelliteIdentifier->width: 10 +satelliteInstruments->code: '002019' +satelliteInstruments->units: CODE TABLE +satelliteInstruments->scale: 0 +satelliteInstruments->reference: 0 +satelliteInstruments->width: 11 +stationAcquisition->code: '001096' +stationAcquisition->units: CCITT IA5 +stationAcquisition->scale: 0 +stationAcquisition->reference: 0 +stationAcquisition->width: 160 +softwareVersionNumber->code: '025061' +softwareVersionNumber->units: CCITT IA5 +softwareVersionNumber->scale: 0 +softwareVersionNumber->reference: 0 +softwareVersionNumber->width: 96 +satelliteCycleNumber->code: '005044' +satelliteCycleNumber->units: Numeric +satelliteCycleNumber->scale: 0 +satelliteCycleNumber->reference: 0 +satelliteCycleNumber->width: 11 +orbitNumber->code: '005040' +orbitNumber->units: Numeric +orbitNumber->scale: 0 +orbitNumber->reference: 0 +orbitNumber->width: 24 +numericalModelIdentifier->code: '001030' +numericalModelIdentifier->units: CCITT IA5 +numericalModelIdentifier->scale: 0 +numericalModelIdentifier->reference: 0 +numericalModelIdentifier->width: 128 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +secondsWithinAMinuteMicrosecond->code: '004007' +secondsWithinAMinuteMicrosecond->units: s +secondsWithinAMinuteMicrosecond->scale: 6 +secondsWithinAMinuteMicrosecond->reference: 0 +secondsWithinAMinuteMicrosecond->width: 26 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +surfaceType->code: '008029' +surfaceType->units: CODE TABLE +surfaceType->scale: 0 +surfaceType->reference: 0 +surfaceType->width: 8 +radiometerSensedSurfaceType->code: '008077' +radiometerSensedSurfaceType->units: CODE TABLE +radiometerSensedSurfaceType->scale: 0 +radiometerSensedSurfaceType->reference: 0 +radiometerSensedSurfaceType->width: 7 +interpolationFlag->code: '040011' +interpolationFlag->units: FLAG TABLE +interpolationFlag->scale: 0 +interpolationFlag->reference: 0 +interpolationFlag->width: 8 +threeDimensionalErrorEstimateOfNavigatorOrbit->code: '025097' +threeDimensionalErrorEstimateOfNavigatorOrbit->units: CODE TABLE +threeDimensionalErrorEstimateOfNavigatorOrbit->scale: 0 +threeDimensionalErrorEstimateOfNavigatorOrbit->reference: 0 +threeDimensionalErrorEstimateOfNavigatorOrbit->width: 4 +bandSpecificAltimeterDataQualityFlag->code: '025112' +bandSpecificAltimeterDataQualityFlag->units: FLAG TABLE +bandSpecificAltimeterDataQualityFlag->scale: 0 +bandSpecificAltimeterDataQualityFlag->reference: 0 +bandSpecificAltimeterDataQualityFlag->width: 9 +bandSpecificAltimeterCorrectionQualityFlag->code: '025113' +bandSpecificAltimeterCorrectionQualityFlag->units: FLAG TABLE +bandSpecificAltimeterCorrectionQualityFlag->scale: 0 +bandSpecificAltimeterCorrectionQualityFlag->reference: 0 +bandSpecificAltimeterCorrectionQualityFlag->width: 9 +trailingEdgeVariationFlag->code: '021148' +trailingEdgeVariationFlag->units: FLAG TABLE +trailingEdgeVariationFlag->scale: 0 +trailingEdgeVariationFlag->reference: 0 +trailingEdgeVariationFlag->width: 2 +icePresenceIndicator->code: '021169' +icePresenceIndicator->units: CODE TABLE +icePresenceIndicator->scale: 0 +icePresenceIndicator->reference: 0 +icePresenceIndicator->width: 2 +meteorologicalMapAvailability->code: '040024' +meteorologicalMapAvailability->units: CODE TABLE +meteorologicalMapAvailability->scale: 0 +meteorologicalMapAvailability->reference: 0 +meteorologicalMapAvailability->width: 3 +interpolationFlagForMeanDiurnalTide->code: '040025' +interpolationFlagForMeanDiurnalTide->units: CODE TABLE +interpolationFlagForMeanDiurnalTide->scale: 0 +interpolationFlagForMeanDiurnalTide->reference: 0 +interpolationFlagForMeanDiurnalTide->width: 2 +satelliteChannelCentreFrequency->code: '002153' +satelliteChannelCentreFrequency->units: Hz +satelliteChannelCentreFrequency->scale: -8 +satelliteChannelCentreFrequency->reference: 0 +satelliteChannelCentreFrequency->width: 26 +specificBandOceanRange->code: '022188' +specificBandOceanRange->units: m +specificBandOceanRange->scale: 3 +specificBandOceanRange->reference: 0 +specificBandOceanRange->width: 31 +rmsOfSpecificBandOceanRange->code: '022190' +rmsOfSpecificBandOceanRange->units: m +rmsOfSpecificBandOceanRange->scale: 4 +rmsOfSpecificBandOceanRange->reference: 0 +rmsOfSpecificBandOceanRange->width: 16 +numberOfValidPointsForSpecificBand->code: '022191' +numberOfValidPointsForSpecificBand->units: Numeric +numberOfValidPointsForSpecificBand->scale: 0 +numberOfValidPointsForSpecificBand->reference: 0 +numberOfValidPointsForSpecificBand->width: 10 +specificBandNetInstrumentalCorrection->code: '025167' +specificBandNetInstrumentalCorrection->units: m +specificBandNetInstrumentalCorrection->scale: 4 +specificBandNetInstrumentalCorrection->reference: -120000 +specificBandNetInstrumentalCorrection->width: 18 +seaStateBiasCorrectionOnSpecificBand->code: '025166' +seaStateBiasCorrectionOnSpecificBand->units: m +seaStateBiasCorrectionOnSpecificBand->scale: 4 +seaStateBiasCorrectionOnSpecificBand->reference: -32768 +seaStateBiasCorrectionOnSpecificBand->width: 16 +specificBandSignificantWaveHeight->code: '022189' +specificBandSignificantWaveHeight->units: m +specificBandSignificantWaveHeight->scale: 3 +specificBandSignificantWaveHeight->reference: 0 +specificBandSignificantWaveHeight->width: 16 +rmsSpecificBandSignificnatWaveHeight->code: '022192' +rmsSpecificBandSignificnatWaveHeight->units: m +rmsSpecificBandSignificnatWaveHeight->scale: 3 +rmsSpecificBandSignificnatWaveHeight->reference: 0 +rmsSpecificBandSignificnatWaveHeight->width: 16 +numberOfValidPointsForSpecificBandSing->code: '022193' +numberOfValidPointsForSpecificBandSing->units: NUMERIC +numberOfValidPointsForSpecificBandSing->scale: 0 +numberOfValidPointsForSpecificBandSing->reference: 0 +numberOfValidPointsForSpecificBandSing->width: 10 +specificBandNetInstrCorrectionForSigWaveHeight->code: '022194' +specificBandNetInstrCorrectionForSigWaveHeight->units: M +specificBandNetInstrCorrectionForSigWaveHeight->scale: 3 +specificBandNetInstrCorrectionForSigWaveHeight->reference: -1000 +specificBandNetInstrCorrectionForSigWaveHeight->width: 11 +specificBandCorrectedOceanBackscatterCoefficient->code: '021176' +specificBandCorrectedOceanBackscatterCoefficient->units: dB +specificBandCorrectedOceanBackscatterCoefficient->scale: 2 +specificBandCorrectedOceanBackscatterCoefficient->reference: -32768 +specificBandCorrectedOceanBackscatterCoefficient->width: 16 +stdSpecificBandCorrectedOceanBackscatterCoefficient->code: '021177' +stdSpecificBandCorrectedOceanBackscatterCoefficient->units: dB +stdSpecificBandCorrectedOceanBackscatterCoefficient->scale: 2 +stdSpecificBandCorrectedOceanBackscatterCoefficient->reference: -32768 +stdSpecificBandCorrectedOceanBackscatterCoefficient->width: 16 +numberOfValidPointsForSpecificBandBackscatter->code: '022195' +numberOfValidPointsForSpecificBandBackscatter->units: NUMERIC +numberOfValidPointsForSpecificBandBackscatter->scale: 0 +numberOfValidPointsForSpecificBandBackscatter->reference: 0 +numberOfValidPointsForSpecificBandBackscatter->width: 10 +specificBandNetInstrumentalCorrectionForAGC->code: '021178' +specificBandNetInstrumentalCorrectionForAGC->units: DB +specificBandNetInstrumentalCorrectionForAGC->scale: 2 +specificBandNetInstrumentalCorrectionForAGC->reference: -2048 +specificBandNetInstrumentalCorrectionForAGC->width: 12 +attenuationCorrectionOnSigma0->code: '021118' +attenuationCorrectionOnSigma0->units: dB +attenuationCorrectionOnSigma0->scale: 2 +attenuationCorrectionOnSigma0->reference: -10000 +attenuationCorrectionOnSigma0->width: 14 +specificBandAutomaticGainControl->code: '021179' +specificBandAutomaticGainControl->units: dB +specificBandAutomaticGainControl->scale: 2 +specificBandAutomaticGainControl->reference: 0 +specificBandAutomaticGainControl->width: 13 +rmsSpecificBandAutomaticGainControl->code: '021180' +rmsSpecificBandAutomaticGainControl->units: dB +rmsSpecificBandAutomaticGainControl->scale: 2 +rmsSpecificBandAutomaticGainControl->reference: 0 +rmsSpecificBandAutomaticGainControl->width: 8 +numberOfValidPointsForSpecificBandAutomaticGainControl->code: '021181' +numberOfValidPointsForSpecificBandAutomaticGainControl->units: NUMERIC +numberOfValidPointsForSpecificBandAutomaticGainControl->scale: 0 +numberOfValidPointsForSpecificBandAutomaticGainControl->reference: 0 +numberOfValidPointsForSpecificBandAutomaticGainControl->width: 7 +brightnessTemperature->code: '012063' +brightnessTemperature->units: K +brightnessTemperature->scale: 1 +brightnessTemperature->reference: 0 +brightnessTemperature->width: 12 +radiometerWaterVapourContent->code: '013090' +radiometerWaterVapourContent->units: kg m-2 +radiometerWaterVapourContent->scale: 1 +radiometerWaterVapourContent->reference: 0 +radiometerWaterVapourContent->width: 10 +radiometerLiquidContent->code: '013160' +radiometerLiquidContent->units: kg m-2 +radiometerLiquidContent->scale: 2 +radiometerLiquidContent->reference: -350 +radiometerLiquidContent->width: 10 +height->code: '007002' +height->units: m +height->scale: -1 +height->reference: -40 +height->width: 16 +windSpeedFromAltimeter->code: '011097' +windSpeedFromAltimeter->units: m/s +windSpeedFromAltimeter->scale: 2 +windSpeedFromAltimeter->reference: 0 +windSpeedFromAltimeter->width: 12 +u->code: '011095' +u->units: m/s +u->scale: 1 +u->reference: -4096 +u->width: 13 +v->code: '011096' +v->units: m/s +v->scale: 1 +v->reference: -4096 +v->width: 13 +meanDynamicTopography->code: '010096' +meanDynamicTopography->units: m +meanDynamicTopography->scale: 3 +meanDynamicTopography->reference: -131072 +meanDynamicTopography->width: 18 +cogAltitudeAboveReferenceEllipsoid->code: '010081' +cogAltitudeAboveReferenceEllipsoid->units: m +cogAltitudeAboveReferenceEllipsoid->scale: 3 +cogAltitudeAboveReferenceEllipsoid->reference: 0 +cogAltitudeAboveReferenceEllipsoid->width: 31 +instantaneousAltitudeRate->code: '010082' +instantaneousAltitudeRate->units: m/s +instantaneousAltitudeRate->scale: 3 +instantaneousAltitudeRate->reference: -65536 +instantaneousAltitudeRate->width: 17 +squaredOffNadirAngleOfSatelliteFromPlatformData->code: '010083' +squaredOffNadirAngleOfSatelliteFromPlatformData->units: deg2 +squaredOffNadirAngleOfSatelliteFromPlatformData->scale: 2 +squaredOffNadirAngleOfSatelliteFromPlatformData->reference: 0 +squaredOffNadirAngleOfSatelliteFromPlatformData->width: 16 +squaredOffNadirAngleOfSatelliteFromWaveformData->code: '010101' +squaredOffNadirAngleOfSatelliteFromWaveformData->units: deg2 +squaredOffNadirAngleOfSatelliteFromWaveformData->scale: 2 +squaredOffNadirAngleOfSatelliteFromWaveformData->reference: -32768 +squaredOffNadirAngleOfSatelliteFromWaveformData->width: 16 +ionosphericCorrectionFromModelOnSpecificBand->code: '025165' +ionosphericCorrectionFromModelOnSpecificBand->units: m +ionosphericCorrectionFromModelOnSpecificBand->scale: 4 +ionosphericCorrectionFromModelOnSpecificBand->reference: -32768 +ionosphericCorrectionFromModelOnSpecificBand->width: 16 +modelDryTroposphericCorrection->code: '025126' +modelDryTroposphericCorrection->units: m +modelDryTroposphericCorrection->scale: 3 +modelDryTroposphericCorrection->reference: -32768 +modelDryTroposphericCorrection->width: 16 +modelWetTroposphericCorrection->code: '025128' +modelWetTroposphericCorrection->units: m +modelWetTroposphericCorrection->scale: 3 +modelWetTroposphericCorrection->reference: -32768 +modelWetTroposphericCorrection->width: 16 +radiometerWetTroposphericCorrection->code: '025164' +radiometerWetTroposphericCorrection->units: m +radiometerWetTroposphericCorrection->scale: 4 +radiometerWetTroposphericCorrection->reference: -5000 +radiometerWetTroposphericCorrection->width: 13 +meanSeaSurfaceHeight->code: '010085' +meanSeaSurfaceHeight->units: m +meanSeaSurfaceHeight->scale: 3 +meanSeaSurfaceHeight->reference: -131072 +meanSeaSurfaceHeight->width: 18 +geoidHeight->code: '010086' +geoidHeight->units: m +geoidHeight->scale: 3 +geoidHeight->reference: -131072 +geoidHeight->width: 18 +oceanDepthOrLandElevation->code: '010087' +oceanDepthOrLandElevation->units: m +oceanDepthOrLandElevation->scale: 1 +oceanDepthOrLandElevation->reference: -131072 +oceanDepthOrLandElevation->width: 18 +solidEarthTideHeight->code: '010092' +solidEarthTideHeight->units: m +solidEarthTideHeight->scale: 3 +solidEarthTideHeight->reference: -32768 +solidEarthTideHeight->width: 16 +totalGeocentricOceanTideHeightSolution1->code: '010088' +totalGeocentricOceanTideHeightSolution1->units: m +totalGeocentricOceanTideHeightSolution1->scale: 3 +totalGeocentricOceanTideHeightSolution1->reference: -32768 +totalGeocentricOceanTideHeightSolution1->width: 16 +totalGeocentricOceanTideHeightSolution2->code: '010089' +totalGeocentricOceanTideHeightSolution2->units: m +totalGeocentricOceanTideHeightSolution2->scale: 3 +totalGeocentricOceanTideHeightSolution2->reference: -32768 +totalGeocentricOceanTideHeightSolution2->width: 16 +loadingTideHeightGeocentricOceanTideSolution1->code: '010098' +loadingTideHeightGeocentricOceanTideSolution1->units: m +loadingTideHeightGeocentricOceanTideSolution1->scale: 4 +loadingTideHeightGeocentricOceanTideSolution1->reference: -2000 +loadingTideHeightGeocentricOceanTideSolution1->width: 12 +loadingTideHeightGeocentricOceanTideSolution2->code: '010099' +loadingTideHeightGeocentricOceanTideSolution2->units: m +loadingTideHeightGeocentricOceanTideSolution2->scale: 4 +loadingTideHeightGeocentricOceanTideSolution2->reference: -2000 +loadingTideHeightGeocentricOceanTideSolution2->width: 12 +longPeriodTideHeight->code: '010090' +longPeriodTideHeight->units: m +longPeriodTideHeight->scale: 3 +longPeriodTideHeight->reference: -32768 +longPeriodTideHeight->width: 16 +nonEquilibriumLongPeriodTideHeight->code: '010100' +nonEquilibriumLongPeriodTideHeight->units: m +nonEquilibriumLongPeriodTideHeight->scale: 4 +nonEquilibriumLongPeriodTideHeight->reference: -2000 +nonEquilibriumLongPeriodTideHeight->width: 12 +geocentricPoleTideHeight->code: '010093' +geocentricPoleTideHeight->units: m +geocentricPoleTideHeight->scale: 3 +geocentricPoleTideHeight->reference: -32768 +geocentricPoleTideHeight->width: 16 +invertedBarometerCorrection->code: '025127' +invertedBarometerCorrection->units: m +invertedBarometerCorrection->scale: 3 +invertedBarometerCorrection->reference: -32768 +invertedBarometerCorrection->width: 16 +highFrequencyFluctuationsOfSeaSurfaceTopographyCorrection->code: '040014' +highFrequencyFluctuationsOfSeaSurfaceTopographyCorrection->units: m +highFrequencyFluctuationsOfSeaSurfaceTopographyCorrection->scale: 4 +highFrequencyFluctuationsOfSeaSurfaceTopographyCorrection->reference: -3000 +highFrequencyFluctuationsOfSeaSurfaceTopographyCorrection->width: 13 +seaSurfaceHeightAnomaly->code: '010102' +seaSurfaceHeightAnomaly->units: m +seaSurfaceHeightAnomaly->scale: 3 +seaSurfaceHeightAnomaly->reference: -32768 +seaSurfaceHeightAnomaly->width: 16 +radiometerLiquidContentForTest->code: '013161' +radiometerLiquidContentForTest->units: kg m-2 +radiometerLiquidContentForTest->scale: 2 +radiometerLiquidContentForTest->reference: -350 +radiometerLiquidContentForTest->width: 10 diff --git a/tests/sample-data/saral-altika.bufr b/tests/sample-data/saral-altika.bufr new file mode 100644 index 0000000000000000000000000000000000000000..ef41221f0a077357a4d9738766cc194e28d325f9 GIT binary patch literal 8671 zcmdT}2|Sc*+kb|^VC*xNY=aUadzLr`gCV;i9F<*?>=eb2Whlq4bjY5)NVK4kE&Gz9 z&8||i3(0)XP||yx_w9SX_xJt2@A}FxpOJ+*JbC^Ay&6)3`#!56@Bsg!qYv_RVJ>?w44ZbjT|MbMyaMz_!+ut z!z44VPSQ-xHu%tGThA;qTJ~_-u`sD>)+3whJek-7B-0Ez4`#LmaSzWeq@v>0c=83* zJhij-6=b>72^|f&jyNC}(lQ`6CbbYL5uMGmU;5Aj_O|Ss1uqf#aPqXc!w34B$CbP7 z0WnpRaS?6x#c`a0X8(AIskS$+SVETx*T1A+JWk9sI+b+54M( z=AS}ixl)kO_=^^Ye@}dS&L;8-b~WNsO5T$ayHxVQKDz72I98%E%KfahBeA5v5seD$5s_wN^a2>TuJG4>^#_Q%~iy;(l`_ z&BN}<(P|5naW%x$&n(}qQD|Mr(?{vGcIohuzEQ)OUJk=(6P$i|X5t)0veQDl@>Ahq zxz6ZP_ojuDy?ZR4wpnTNOo=0GoIPoJ4jGr)`i3$;I3K-=k%;0AfA>*BbNIB>LY?nB znp^F9GPZ(44BQelJF`j=*XXbS}We<4QnPY~%E35e{x zDrG<={(*pP+x;inhDizlz+gZ1ylL!){Wa=m1Pueo&hs!(U920PJ*)JeRq&e~hCp`o zj7BlSsPLpAC;7aNL1IRY{H-<(5yG-TI z2mnCu+*SYpf+o4Q_LFZM^3%V%^B=~eHZ44m^i#s7vDpu)uPve0|^xz3W-M7((IM^u_*B1I@wd! zZuWc9gu-vyarW%X3ek4#55=NJ@7>rRIclD~k1)y}$Q?d%)r=(+Y0d))96DO_*6+2S z@)P%$&t8|Gwp=bLIA!UZl<8!VtQT!FfSmTRGFwKvT0ZNqID=QIs7Y>og7i6R(*JZx z_K30f1!;{Q84Wu1?(+37%3TQP%60t&MsSo9sinH?@u}(3+ViKAcv_^O=Qx`@&L2f! zdPKFEF=c<2j->y}WPOhrw)n37s#N6NirnCh$Ry4&>lLb#?1juN^oR1zCMqms$oHia zhXI7DuGWbSs^C1R3UQyxclTeU!Z1z5U%+1k)(V1tF><%CT3|bSv61463Nf_j@HjeQ zGjteG`JS=@Fnm{k$Xc*$lo|kX;=0zvn<9hWt3;ySoj3`(A>wRs`j4<(HBv73uAYAZ zj`#)ri-^B-<00QYYt;?!f;NP%N;;WsLc`mWumMng589S^fJQJK4+L$DAn=Tu#!SR7 zChrs&J`h*%>Dw{8DR=;YgJ-!5?bt+q-f>8)76QQ=YJdU{>YKL-poF1p06XJKviIbXt$}4HaTrOFTfPLhSxrPEPz1`BTIXW4aK4-}+(x6K%Un{z=THYuas7tOrvN zXVK)!DxgJ8V&GoJuqnQ=+6=@VKxKYWn2xe*eZSyihIQJV?rps`7O)1VeHYqMKIos^ zDA0nz$wI&iA{F7*jS8r!lEcXNB$cvZt+#gwuo@wNJZuk))8{O=WK*hZg`QsXn*wQW zXG#rg$qt8H3gr~kg+?RSg6?1&9Y@Pl$tfGjx_V5#n#JvA;10n)oGqMfA}-7f~3WR;Oj;u^|xN+n7x%y6zr-!lHY?&sL;XROLC8xy&&Wo^P zm&zuUnsccI8qP=e)E_|azqiW$GBLEP5Q5ff`JB!&>rXGmgl#GQz%?%7!?;Hr8!1e4 zy?oS%CbL?OAk3ZPUHGgw-dMW;x#xE7)2L$~Z38G#4M`+=LWZl-4kLBkgLi|QJ}8!QqGA8Q4GA{8q08t&b%o{B{an&aLkJb4|B}b%Z(+owH}@iYnLU{-m8F46;qaeRy7u_z<-U0 zqbj|sQ-f2isu-$x8mL*QR^j4$C|y@2Jy|P#t0Mb!63UDc%7|hI6?~MyX!sTg%M286IYN72S+on)b$dO4r@8EvA9vf*C+YaHl~3dj&wNS@ES@dW zv7y_fPZKperJ}DSjLEfU8#PxPae3|` zpCXagWI}?SGmU0c>VDbRXH&zJxm4-OG4tyB%+}{P8>~YCh*~C>0JBDU0TQ<-|BQ0H z{ooka)TsGL*K}VlZCO>g5 zUk)HQShr?}4XuCO>E71I8yB;=TBT#WWtL>S8epTc^mf>M9?hP61Bd8Lp0HqIb7aZn z;E$E6W4cV--yNoBu^*6&W^Vta#W0%q;J0>@6euPxyP-p-9a0;?*O8;jp`Fs;!>!4L zpzy{qBvYgxjjVU~L4=O57;}zh)nPLh4EmKEBQ$nggj&te3cP`~Rzi^1mRjwj zQ@8&38^gug0U7v3^spi$lyO#x36ntq|%d8lh%VBn-s+#&APa?25{F6gyAdATnt0pg0hB6~h6|l(N5z1` z#Hmwuq{^RNLpYn{ZTCtXt&eW%CXF=lDR@avwP z8_@{=`qKCE(PHB?ei^JGucG^4wqpl}gmso^E5Jdfc~@?RRuqq7h*uSsw+;Ho^+U#_WZ zE^b+3+!)m_Y}Ju95yh0DysB4Q+oPIU%d~WPOp- zmUksY&yGGHJ{Y35^1B2gH_V+r&Z60k2pGW@DW&+fhBQ<@)irzCx2nJ2dzQoCZ3n!!r>sO6 zXX3Y{k!q?~VN+zb`uak!d4+2Vx25Z`J9sO;ny&oUy%(mg3$mXCw2|3P?q8CDt9k`+k^4L^wu z$tSyzcl(^yX`cv;7nKC5pcJcQL+lB0MwAE{{| zGvJCMHvYA+HctE%BW{3LRuGX@eUBvH zw5rLD=(*8Ta%QRRkh^1743E{?n%_+GnG%JW=edGV?2H+wd}f7<>APmaoVJwXbEP0M zE`K>m$HDUBQ3lUqQRraESo0s?0_@4wgtLp9m#Kx(Fz*G?#}ROL3Byb^C=8UKO$LQg zeJ$gD!!LOA)2Bj5en)EQGksXRbb`6b=js6s zvpXektX8Vt`+Kf8!9QX-ptoBcU-dW?1vs+4*B43y9`yPt&Mm$78hqX={@mJJjWKMM z;g5X{7KARNXE_|&kc0r?z@rC@+rd-j0y0%EhDy<r-~_!6 z*PqJl7r0@g{7*GnhL}ckWVIXOA_WzH5A76w+Ser1Y_e7;Yc*e!6!rm|Y*V6Xg(=TG z=|9-$7uC{lCVa%`T}BzYH!5^iM+k{3&@xFb=CjbLN4n5FV@)h>w)DIgc}8cpakA*O z`9n!}du(?}#u4-757V_=zbo$ZA)B5UN$88HoU!CpRGAO{6KckS(}rc0`Ho{-(N{hk zvi153E3Y}y5VlWuI_&%;*i-TcY!RW4@tEGlNQ+EPC`P<)&J`DJZc)N^t@_=5Cs zdpWZ%Mgn!)^ENdv+f!lm1!y1ZIQY)ywzk~ zG0kH=1LK}@9G4oi(zm^{u>s|@h5lo=A4?!)S5@Vqb zt+x?M)Y-=ziK&k>zjIt_&sH>EjX&KJSN6QJ87qy^UPO?$G~ZvnS(hRn`W>5;RXyw z{hOm2)83B3=(ayDmnzKSClNFKUDA%MUR`s$PV<;b#52glyukLLA_M-&&Ndgc4 zy(;os^R%IKc5bXWhRa$26g%f|LAjYB(p}u=?_y^p*ym=t$5?X& z-Ivd2URU`}cLS!M5Z10f=U9Z@n5A_#vCgn?L*2;yj^~Qhlg|km7C-3+F)Fkdg)-U>_JS$xOGCv^;Mc{++1A#md!2{l0lq035IKox&$63RI&5crfcRP+(S(?jpKYlqSSFmY*s(!x{k%2IOhT0Bc4FahAQ2Zs$Dx-_&P;qsP;b9Kcode: '001007' +satelliteIdentifier->units: CODE TABLE +satelliteIdentifier->scale: 0 +satelliteIdentifier->reference: 0 +satelliteIdentifier->width: 10 +satelliteInstruments->code: '002019' +satelliteInstruments->units: CODE TABLE +satelliteInstruments->scale: 0 +satelliteInstruments->reference: 0 +satelliteInstruments->width: 11 +satelliteCycleNumber->code: '005044' +satelliteCycleNumber->units: Numeric +satelliteCycleNumber->scale: 0 +satelliteCycleNumber->reference: 0 +satelliteCycleNumber->width: 11 +stationAcquisition->code: '001096' +stationAcquisition->units: CCITT IA5 +stationAcquisition->scale: 0 +stationAcquisition->reference: 0 +stationAcquisition->width: 160 +orbitNumber->code: '005040' +orbitNumber->units: Numeric +orbitNumber->scale: 0 +orbitNumber->reference: 0 +orbitNumber->width: 24 +processingCentreIdCode->code: '001040' +processingCentreIdCode->units: CCITT IA5 +processingCentreIdCode->scale: 0 +processingCentreIdCode->reference: 0 +processingCentreIdCode->width: 48 +softwareVersionNumber->code: '025061' +softwareVersionNumber->units: CCITT IA5 +softwareVersionNumber->scale: 0 +softwareVersionNumber->reference: 0 +softwareVersionNumber->width: 96 +l1ProcessingFlag->code: '025182' +l1ProcessingFlag->units: CODE TABLE +l1ProcessingFlag->scale: 0 +l1ProcessingFlag->reference: 0 +l1ProcessingFlag->width: 2 +l1ProcessingQuality->code: '025183' +l1ProcessingQuality->units: % +l1ProcessingQuality->scale: 2 +l1ProcessingQuality->reference: 0 +l1ProcessingQuality->width: 14 +l2ProcessingFlag->code: '025181' +l2ProcessingFlag->units: CODE TABLE +l2ProcessingFlag->scale: 0 +l2ProcessingFlag->reference: 0 +l2ProcessingFlag->width: 2 +l2ProductStatus->code: '025184' +l2ProductStatus->units: CODE TABLE +l2ProductStatus->scale: 0 +l2ProductStatus->reference: 0 +l2ProductStatus->width: 2 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +second->code: '004006' +second->units: s +second->scale: 0 +second->reference: 0 +second->width: 6 +secondsWithinAMinuteMicrosecond->code: '004007' +secondsWithinAMinuteMicrosecond->units: s +secondsWithinAMinuteMicrosecond->scale: 6 +secondsWithinAMinuteMicrosecond->reference: 0 +secondsWithinAMinuteMicrosecond->width: 26 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +spacecraftRoll->code: '005063' +spacecraftRoll->units: deg +spacecraftRoll->scale: 2 +spacecraftRoll->reference: 0 +spacecraftRoll->width: 16 +spacecraftPitch->code: '005064' +spacecraftPitch->units: deg +spacecraftPitch->scale: 2 +spacecraftPitch->reference: 0 +spacecraftPitch->width: 16 +spacecraftYaw->code: '005066' +spacecraftYaw->units: deg +spacecraftYaw->scale: 2 +spacecraftYaw->reference: 0 +spacecraftYaw->width: 16 +cogAltitudeAboveReferenceEllipsoid->code: '010081' +cogAltitudeAboveReferenceEllipsoid->units: m +cogAltitudeAboveReferenceEllipsoid->scale: 3 +cogAltitudeAboveReferenceEllipsoid->reference: 0 +cogAltitudeAboveReferenceEllipsoid->width: 31 +instantaneousAltitudeRate->code: '010082' +instantaneousAltitudeRate->units: m/s +instantaneousAltitudeRate->scale: 3 +instantaneousAltitudeRate->reference: -65536 +instantaneousAltitudeRate->width: 17 +orbitQualifier->code: '008075' +orbitQualifier->units: CODE TABLE +orbitQualifier->scale: 0 +orbitQualifier->reference: 0 +orbitQualifier->width: 2 +orbitStateFlag->code: '025090' +orbitStateFlag->units: CODE TABLE +orbitStateFlag->scale: 0 +orbitStateFlag->reference: 0 +orbitStateFlag->width: 4 +surfaceType->code: '008029' +surfaceType->units: CODE TABLE +surfaceType->scale: 0 +surfaceType->reference: 0 +surfaceType->width: 8 +distance->code: '006021' +distance->units: m +distance->scale: -1 +distance->reference: 0 +distance->width: 13 +oceanDepthOrLandElevation->code: '010087' +oceanDepthOrLandElevation->units: m +oceanDepthOrLandElevation->scale: 1 +oceanDepthOrLandElevation->reference: -131072 +oceanDepthOrLandElevation->width: 18 +radiometerStateFlag->code: '025096' +radiometerStateFlag->units: FLAG TABLE +radiometerStateFlag->scale: 0 +radiometerStateFlag->reference: 0 +radiometerStateFlag->width: 5 +radiometerDataQualityFlag->code: '040012' +radiometerDataQualityFlag->units: FLAG TABLE +radiometerDataQualityFlag->scale: 0 +radiometerDataQualityFlag->reference: 0 +radiometerDataQualityFlag->width: 8 +radiometerSensedSurfaceType->code: '008077' +radiometerSensedSurfaceType->units: CODE TABLE +radiometerSensedSurfaceType->scale: 0 +radiometerSensedSurfaceType->reference: 0 +radiometerSensedSurfaceType->width: 7 +satelliteChannelCentreFrequency->code: '002153' +satelliteChannelCentreFrequency->units: Hz +satelliteChannelCentreFrequency->scale: -8 +satelliteChannelCentreFrequency->reference: 0 +satelliteChannelCentreFrequency->width: 26 +brightnessTemperature->code: '012063' +brightnessTemperature->units: K +brightnessTemperature->scale: 1 +brightnessTemperature->reference: 0 +brightnessTemperature->width: 12 +standardDeviationBrightnessTemperature->code: '012065' +standardDeviationBrightnessTemperature->units: K +standardDeviationBrightnessTemperature->scale: 1 +standardDeviationBrightnessTemperature->reference: 0 +standardDeviationBrightnessTemperature->width: 12 +radiometerBrightnessTemperatureInterpretationFlag->code: '040013' +radiometerBrightnessTemperatureInterpretationFlag->units: CODE TABLE +radiometerBrightnessTemperatureInterpretationFlag->scale: 0 +radiometerBrightnessTemperatureInterpretationFlag->reference: 0 +radiometerBrightnessTemperatureInterpretationFlag->width: 3 +height->code: '007002' +height->units: m +height->scale: -1 +height->reference: -40 +height->width: 16 +windSpeedFromRadiometer->code: '011098' +windSpeedFromRadiometer->units: m/s +windSpeedFromRadiometer->scale: 2 +windSpeedFromRadiometer->reference: 0 +windSpeedFromRadiometer->width: 12 +radiometerWaterVapourContent->code: '013090' +radiometerWaterVapourContent->units: kg m-2 +radiometerWaterVapourContent->scale: 1 +radiometerWaterVapourContent->reference: 0 +radiometerWaterVapourContent->width: 10 +radiometerLiquidContent->code: '013091' +radiometerLiquidContent->units: kg m-2 +radiometerLiquidContent->scale: 2 +radiometerLiquidContent->reference: 0 +radiometerLiquidContent->width: 8 +radiometerWetTroposphericCorrection->code: '025164' +radiometerWetTroposphericCorrection->units: m +radiometerWetTroposphericCorrection->scale: 4 +radiometerWetTroposphericCorrection->reference: -5000 +radiometerWetTroposphericCorrection->width: 13 +altimeterStateFlag->code: '025095' +altimeterStateFlag->units: FLAG TABLE +altimeterStateFlag->scale: 0 +altimeterStateFlag->reference: 0 +altimeterStateFlag->width: 2 +auxiliaryAltimeterStateFlags->code: '040023' +auxiliaryAltimeterStateFlags->units: FLAG TABLE +auxiliaryAltimeterStateFlags->scale: 0 +auxiliaryAltimeterStateFlags->reference: 0 +auxiliaryAltimeterStateFlags->width: 5 +bandSpecificAltimeterCorrectionQualityFlag->code: '025113' +bandSpecificAltimeterCorrectionQualityFlag->units: FLAG TABLE +bandSpecificAltimeterCorrectionQualityFlag->scale: 0 +bandSpecificAltimeterCorrectionQualityFlag->reference: 0 +bandSpecificAltimeterCorrectionQualityFlag->width: 9 +altimeterEchoType->code: '008074' +altimeterEchoType->units: CODE TABLE +altimeterEchoType->scale: 0 +altimeterEchoType->reference: 0 +altimeterEchoType->width: 2 +altimeterEchoProcessingMode->code: '025201' +altimeterEchoProcessingMode->units: Code table +altimeterEchoProcessingMode->scale: 0 +altimeterEchoProcessingMode->reference: 0 +altimeterEchoProcessingMode->width: 8 +altimeterRainFlag->code: '021144' +altimeterRainFlag->units: FLAG TABLE +altimeterRainFlag->scale: 0 +altimeterRainFlag->reference: 0 +altimeterRainFlag->width: 2 +altimeterTrackingMode->code: '025202' +altimeterTrackingMode->units: CODE TABLE +altimeterTrackingMode->scale: 0 +altimeterTrackingMode->reference: 0 +altimeterTrackingMode->width: 8 +kuBandRainAttenuation->code: '021143' +kuBandRainAttenuation->units: dB +kuBandRainAttenuation->scale: 2 +kuBandRainAttenuation->reference: -1073741824 +kuBandRainAttenuation->width: 31 +intensityOfPrecipitation->code: '013055' +intensityOfPrecipitation->units: kg m-2 s-1 +intensityOfPrecipitation->scale: 4 +intensityOfPrecipitation->reference: 0 +intensityOfPrecipitation->width: 8 +icePresenceIndicator->code: '021169' +icePresenceIndicator->units: CODE TABLE +icePresenceIndicator->scale: 0 +icePresenceIndicator->reference: 0 +icePresenceIndicator->width: 2 +squaredOffNadirAngleOfSatelliteFromWaveformData->code: '010101' +squaredOffNadirAngleOfSatelliteFromWaveformData->units: deg2 +squaredOffNadirAngleOfSatelliteFromWaveformData->scale: 2 +squaredOffNadirAngleOfSatelliteFromWaveformData->reference: -32768 +squaredOffNadirAngleOfSatelliteFromWaveformData->width: 16 +totalElectronCountPerSquareMetre->code: '015012' +totalElectronCountPerSquareMetre->units: m-2 +totalElectronCountPerSquareMetre->scale: -16 +totalElectronCountPerSquareMetre->reference: 0 +totalElectronCountPerSquareMetre->width: 6 +windSpeedFromAltimeter->code: '011097' +windSpeedFromAltimeter->units: m/s +windSpeedFromAltimeter->scale: 2 +windSpeedFromAltimeter->reference: 0 +windSpeedFromAltimeter->width: 12 +meteorologicalMapAvailability->code: '040024' +meteorologicalMapAvailability->units: CODE TABLE +meteorologicalMapAvailability->scale: 0 +meteorologicalMapAvailability->reference: 0 +meteorologicalMapAvailability->width: 3 +modelDryTroposphericCorrection->code: '025126' +modelDryTroposphericCorrection->units: m +modelDryTroposphericCorrection->scale: 3 +modelDryTroposphericCorrection->reference: -32768 +modelDryTroposphericCorrection->width: 16 +modelWetTroposphericCorrection->code: '025128' +modelWetTroposphericCorrection->units: m +modelWetTroposphericCorrection->scale: 3 +modelWetTroposphericCorrection->reference: -32768 +modelWetTroposphericCorrection->width: 16 +interpolationFlag->code: '040011' +interpolationFlag->units: FLAG TABLE +interpolationFlag->scale: 0 +interpolationFlag->reference: 0 +interpolationFlag->width: 8 +u->code: '011095' +u->units: m/s +u->scale: 1 +u->reference: -4096 +u->width: 13 +v->code: '011096' +v->units: m/s +v->scale: 1 +v->reference: -4096 +v->width: 13 +totalGeocentricOceanTideHeightSolution1->code: '010088' +totalGeocentricOceanTideHeightSolution1->units: m +totalGeocentricOceanTideHeightSolution1->scale: 3 +totalGeocentricOceanTideHeightSolution1->reference: -32768 +totalGeocentricOceanTideHeightSolution1->width: 16 +totalGeocentricOceanTideHeightSolution2->code: '010089' +totalGeocentricOceanTideHeightSolution2->units: m +totalGeocentricOceanTideHeightSolution2->scale: 3 +totalGeocentricOceanTideHeightSolution2->reference: -32768 +totalGeocentricOceanTideHeightSolution2->width: 16 +longPeriodTideHeight->code: '010090' +longPeriodTideHeight->units: m +longPeriodTideHeight->scale: 3 +longPeriodTideHeight->reference: -32768 +longPeriodTideHeight->width: 16 +solidEarthTideHeight->code: '010092' +solidEarthTideHeight->units: m +solidEarthTideHeight->scale: 3 +solidEarthTideHeight->reference: -32768 +solidEarthTideHeight->width: 16 +geocentricPoleTideHeight->code: '010093' +geocentricPoleTideHeight->units: m +geocentricPoleTideHeight->scale: 3 +geocentricPoleTideHeight->reference: -32768 +geocentricPoleTideHeight->width: 16 +loadingTideHeightGeocentricOceanTideSolution1->code: '010098' +loadingTideHeightGeocentricOceanTideSolution1->units: m +loadingTideHeightGeocentricOceanTideSolution1->scale: 4 +loadingTideHeightGeocentricOceanTideSolution1->reference: -2000 +loadingTideHeightGeocentricOceanTideSolution1->width: 12 +loadingTideHeightGeocentricOceanTideSolution2->code: '010099' +loadingTideHeightGeocentricOceanTideSolution2->units: m +loadingTideHeightGeocentricOceanTideSolution2->scale: 4 +loadingTideHeightGeocentricOceanTideSolution2->reference: -2000 +loadingTideHeightGeocentricOceanTideSolution2->width: 12 +nonEquilibriumLongPeriodTideHeight->code: '010100' +nonEquilibriumLongPeriodTideHeight->units: m +nonEquilibriumLongPeriodTideHeight->scale: 4 +nonEquilibriumLongPeriodTideHeight->reference: -2000 +nonEquilibriumLongPeriodTideHeight->width: 12 +invertedBarometerCorrection->code: '025127' +invertedBarometerCorrection->units: m +invertedBarometerCorrection->scale: 3 +invertedBarometerCorrection->reference: -32768 +invertedBarometerCorrection->width: 16 +highFrequencyFluctuationsOfSeaSurfaceTopographyCorrection->code: '040014' +highFrequencyFluctuationsOfSeaSurfaceTopographyCorrection->units: m +highFrequencyFluctuationsOfSeaSurfaceTopographyCorrection->scale: 4 +highFrequencyFluctuationsOfSeaSurfaceTopographyCorrection->reference: -3000 +highFrequencyFluctuationsOfSeaSurfaceTopographyCorrection->width: 13 +meanSeaSurfaceHeight->code: '010085' +meanSeaSurfaceHeight->units: m +meanSeaSurfaceHeight->scale: 3 +meanSeaSurfaceHeight->reference: -131072 +meanSeaSurfaceHeight->width: 18 +geoidHeight->code: '010086' +geoidHeight->units: m +geoidHeight->scale: 3 +geoidHeight->reference: -131072 +geoidHeight->width: 18 +meanDynamicTopography->code: '010096' +meanDynamicTopography->units: m +meanDynamicTopography->scale: 3 +meanDynamicTopography->reference: -131072 +meanDynamicTopography->width: 18 +meanDynamicTopographyAccuracy->code: '010200' +meanDynamicTopographyAccuracy->units: m +meanDynamicTopographyAccuracy->scale: 3 +meanDynamicTopographyAccuracy->reference: -131072 +meanDynamicTopographyAccuracy->width: 18 +seaSurfaceHeightAnomaly->code: '010102' +seaSurfaceHeightAnomaly->units: m +seaSurfaceHeightAnomaly->scale: 3 +seaSurfaceHeightAnomaly->reference: -32768 +seaSurfaceHeightAnomaly->width: 16 +wavebandCentralFrequency->code: '022080' +wavebandCentralFrequency->units: Hz +wavebandCentralFrequency->scale: 3 +wavebandCentralFrequency->reference: 0 +wavebandCentralFrequency->width: 10 +band->code: '008076' +band->units: CODE TABLE +band->scale: 0 +band->reference: 0 +band->width: 6 +specificBandOceanRange->code: '022189' +specificBandOceanRange->units: m +specificBandOceanRange->scale: 3 +specificBandOceanRange->reference: 0 +specificBandOceanRange->width: 31 +rmsOfSpecificBandOceanRange->code: '022191' +rmsOfSpecificBandOceanRange->units: m +rmsOfSpecificBandOceanRange->scale: 4 +rmsOfSpecificBandOceanRange->reference: 0 +rmsOfSpecificBandOceanRange->width: 16 +numberOfValidPointsForSpecificBand->code: '022130' +numberOfValidPointsForSpecificBand->units: Numeric +numberOfValidPointsForSpecificBand->scale: 0 +numberOfValidPointsForSpecificBand->reference: 0 +numberOfValidPointsForSpecificBand->width: 10 +ionosphericCorrectionFromModelOnSpecificBand->code: '025165' +ionosphericCorrectionFromModelOnSpecificBand->units: m +ionosphericCorrectionFromModelOnSpecificBand->scale: 4 +ionosphericCorrectionFromModelOnSpecificBand->reference: -32768 +ionosphericCorrectionFromModelOnSpecificBand->width: 16 +seaStateBiasCorrectionOnSpecificBand->code: '025166' +seaStateBiasCorrectionOnSpecificBand->units: m +seaStateBiasCorrectionOnSpecificBand->scale: 4 +seaStateBiasCorrectionOnSpecificBand->reference: -32768 +seaStateBiasCorrectionOnSpecificBand->width: 16 +specificBandNetInstrumentalCorrection->code: '025167' +specificBandNetInstrumentalCorrection->units: m +specificBandNetInstrumentalCorrection->scale: 4 +specificBandNetInstrumentalCorrection->reference: -120000 +specificBandNetInstrumentalCorrection->width: 18 +specificBandCorrectedOceanBackscatterCoefficient->code: '021183' +specificBandCorrectedOceanBackscatterCoefficient->units: dB +specificBandCorrectedOceanBackscatterCoefficient->scale: 2 +specificBandCorrectedOceanBackscatterCoefficient->reference: -32768 +specificBandCorrectedOceanBackscatterCoefficient->width: 16 +stdSpecificBandCorrectedOceanBackscatterCoefficient->code: '021184' +stdSpecificBandCorrectedOceanBackscatterCoefficient->units: dB +stdSpecificBandCorrectedOceanBackscatterCoefficient->scale: 2 +stdSpecificBandCorrectedOceanBackscatterCoefficient->reference: -32768 +stdSpecificBandCorrectedOceanBackscatterCoefficient->width: 16 +numberOfValidPointsForSpecificBandBackscatter->code: '022134' +numberOfValidPointsForSpecificBandBackscatter->units: Numeric +numberOfValidPointsForSpecificBandBackscatter->scale: 0 +numberOfValidPointsForSpecificBandBackscatter->reference: 0 +numberOfValidPointsForSpecificBandBackscatter->width: 10 +attenuationCorrectionOnSigma0FromTb->code: '021122' +attenuationCorrectionOnSigma0FromTb->units: dB +attenuationCorrectionOnSigma0FromTb->scale: 2 +attenuationCorrectionOnSigma0FromTb->reference: -10000 +attenuationCorrectionOnSigma0FromTb->width: 14 +specificBandSignificantWaveHeight->code: '022190' +specificBandSignificantWaveHeight->units: m +specificBandSignificantWaveHeight->scale: 3 +specificBandSignificantWaveHeight->reference: 0 +specificBandSignificantWaveHeight->width: 16 +rmsSpecificBandSignificantWaveHeight->code: '022131' +rmsSpecificBandSignificantWaveHeight->units: m +rmsSpecificBandSignificantWaveHeight->scale: 3 +rmsSpecificBandSignificantWaveHeight->reference: 0 +rmsSpecificBandSignificantWaveHeight->width: 16 +numberOfValidPointsForSpecificBandSignificantWaveHeight->code: '022132' +numberOfValidPointsForSpecificBandSignificantWaveHeight->units: Numeric +numberOfValidPointsForSpecificBandSignificantWaveHeight->scale: 0 +numberOfValidPointsForSpecificBandSignificantWaveHeight->reference: 0 +numberOfValidPointsForSpecificBandSignificantWaveHeight->width: 10 +specificBandNetInstrumentCorrectionForSignificantWaveHeight->code: '022133' +specificBandNetInstrumentCorrectionForSignificantWaveHeight->units: m +specificBandNetInstrumentCorrectionForSignificantWaveHeight->scale: 3 +specificBandNetInstrumentCorrectionForSignificantWaveHeight->reference: -1000 +specificBandNetInstrumentCorrectionForSignificantWaveHeight->width: 11 +specificBandAutomaticGainControl->code: '021186' +specificBandAutomaticGainControl->units: dB +specificBandAutomaticGainControl->scale: 2 +specificBandAutomaticGainControl->reference: 0 +specificBandAutomaticGainControl->width: 13 +rmsSpecificBandAutomaticGainControl->code: '021187' +rmsSpecificBandAutomaticGainControl->units: dB +rmsSpecificBandAutomaticGainControl->scale: 2 +rmsSpecificBandAutomaticGainControl->reference: 0 +rmsSpecificBandAutomaticGainControl->width: 8 +numberOfValidPointsForSpecificBandAutomaticGainControl->code: '021188' +numberOfValidPointsForSpecificBandAutomaticGainControl->units: Numeric +numberOfValidPointsForSpecificBandAutomaticGainControl->scale: 0 +numberOfValidPointsForSpecificBandAutomaticGainControl->reference: 0 +numberOfValidPointsForSpecificBandAutomaticGainControl->width: 7 +specificBandNetInstrumentalCorrectionForAgc->code: '021185' +specificBandNetInstrumentalCorrectionForAgc->units: dB +specificBandNetInstrumentalCorrectionForAgc->scale: 2 +specificBandNetInstrumentalCorrectionForAgc->reference: -2048 +specificBandNetInstrumentalCorrectionForAgc->width: 12 +bandSpecificAltimeterDataQualityFlag->code: '025112' +bandSpecificAltimeterDataQualityFlag->units: FLAG TABLE +bandSpecificAltimeterDataQualityFlag->scale: 0 +bandSpecificAltimeterDataQualityFlag->reference: 0 +bandSpecificAltimeterDataQualityFlag->width: 9 +bandSpecificOceanQualityFlag->code: '025200' +bandSpecificOceanQualityFlag->units: Flag table +bandSpecificOceanQualityFlag->scale: 0 +bandSpecificOceanQualityFlag->reference: 0 +bandSpecificOceanQualityFlag->width: 9 +altimeterIonosphericCorrectionOnKuBand->code: '025163' +altimeterIonosphericCorrectionOnKuBand->units: m +altimeterIonosphericCorrectionOnKuBand->scale: 3 +altimeterIonosphericCorrectionOnKuBand->reference: -32768 +altimeterIonosphericCorrectionOnKuBand->width: 16 +numberOfObservations->code: '008049' +numberOfObservations->units: Numeric +numberOfObservations->scale: 0 +numberOfObservations->reference: 0 +numberOfObservations->width: 8 +peakiness->code: '021071' +peakiness->units: Numeric +peakiness->scale: 0 +peakiness->reference: 0 +peakiness->width: 16 +ocogRange->code: '022146' +ocogRange->units: m +ocogRange->scale: 3 +ocogRange->reference: 0 +ocogRange->width: 31 +correctedOcogBackscatterCoefficient->code: '021177' +correctedOcogBackscatterCoefficient->units: dB +correctedOcogBackscatterCoefficient->scale: 2 +correctedOcogBackscatterCoefficient->reference: 0 +correctedOcogBackscatterCoefficient->width: 16 +seaIceFreeboard->code: '025203' +seaIceFreeboard->units: m +seaIceFreeboard->scale: 3 +seaIceFreeboard->reference: -131072 +seaIceFreeboard->width: 18 +seaIceFraction->code: '022046' +seaIceFraction->units: Numeric +seaIceFraction->scale: 2 +seaIceFraction->reference: 0 +seaIceFraction->width: 7 +snowDensityLiquidWaterContent->code: '013117' +snowDensityLiquidWaterContent->units: kg m-3 +snowDensityLiquidWaterContent->scale: 0 +snowDensityLiquidWaterContent->reference: 0 +snowDensityLiquidWaterContent->width: 10 +totalSnowDepth->code: '013013' +totalSnowDepth->units: m +totalSnowDepth->scale: 2 +totalSnowDepth->reference: -2 +totalSnowDepth->width: 16 diff --git a/tests/sample-data/sral_sentinel_3a.bufr b/tests/sample-data/sral_sentinel_3a.bufr new file mode 100644 index 0000000000000000000000000000000000000000..9cb9fd9608ed00e5bbc9f76c68ec2c839f20c341 GIT binary patch literal 5257 zcmb7I2~-o;yZ>e;8zGR01QP`l5ET^_m92HjfUSzy8u_zBHHy2Uh$8+)&9DeASkQ`F zYl#(?f(U9Aa4A7iaRsfYEJ~zqr69qgMhLm@Cf2_8y#IUWyg4T)b7$t>`+eVU`6lrX znG^)}n^^!30CNBz0u&=*6dMAMua;c|rkxVz!%vOG-CL88>S@nq{rxhw~%&k^E@>SNu8r82((T z+Rc_9!Vl%E_*MM*4ocoMhYJqn4k^+@(!4rvY>#b?Fm#OK9j z(m3e~Y1RMdS?M+F+2&})S>jSDBRwe1!@GUh>F|eLKJ4-5%A*{V(c+Iau~Y+B0_QfF zAL3?hnYjZ;h~vYvHi}Q+h;BHHut~77!Sk!Y&ICf*fhNod{D-5@Mk3^sFZ{#;cJMPV zR*Tp`}4NwxCxGz z!FJk@VS4l-G$*a!C?L}_gJ@g%uvd5~hZ<*hhH!bdN6)cm2g(74P)Iv{3P^{CrG6?Q zZZ7d$kP|<($m%($)(H(fnGQ06i_ohy3cQx85tEEecxC(KUQgf0c^7gKAqk&!ZO5~5_7{@7_7x1ArHq-p((K5Dh9 zQih1!EIC1^pZMg^W0%=`UDJr}Fe{p&E^XV+emLC-+rnNkB7!(ua<5*7binP&<`_iK z@?33zh>Lw4JkVC|g2OpV z@}e0kWtCweapGOE0}FU={SBj6=-^Eth>L9RlKt{7&&gMn5-xHGf3r_grQ(cllmqa-mcz_k9mS|!%DbaVA%`PB=1g! z2*7<2D}dC~#J$+UMna_V8X*!XCx}!-uc@fHqmNVuFkxH3ZC(Auad^e1B$#ZS+Zlb-pa=`np2`hj9W2185Z~))9^dt9tGnz{z zC#!(tF1or96V>4DaQ{le#cIS$SvILZb~`i0FGR=Tb$E7m)eo{c^9e~buzFd^$!(*3 z#x5(|-@*V9OGRFYc@dJDu(ZY#z}joy(E?@H{wDXS(X(eWz`lFCMjjCWU;eAOZyXQ| z@qWY3tQ~v0K)7#^{SPo!R&Ju+X4+_llhSlLGg}z^`MYjs?2_KcmyYw!EbJUIf^52+ zHo4=#@HJB-v2Jx0)kl+rwaWtLX+RL}GFt>NynX4=!i?WH2<{Hlv2r>P) zS`r#P99BrR@=hfY4S@~98R+H!Z>a1I}v^}<=C)(EB z864Tg#*;TxASs?SUk(t}_;7j@_kIUH2@x<5<9$Ep~Xwfrw&uhqyws0LpFiP zYaZ~7ZS>mVwWrr80o?VAV+&@yT)wREs6WPO{ut%0&=>v<)d8#Qyd^uD!44y{nfu@# zS*>Y(288RS!s}TYFu9C*23(!m$VIEvdQh8St>*v+ssL~!1Q1>%Ar7cGvB17L>*ma2 zEZw+iVpu%uFIgEl0{71f`A{6h@|f8Jm%NM0 zM0&M!0Or`=k#UX4Eq093$o4PWKZ8npy^6SW3>m@hyQFi5<&(byeqn(((T6QF50G9DUyX+A?q= ziqb@^0?NV4>mH{0+6LZ|nQQA`m_GCK8DI~<0Rj2LjPXfe40gEW|2_a2Uq{O$e?#cLNU+}i$0t|>PZOMMSBo~MB1 zGY5-dXV1KD!I9r?+v;_2{G?m8C9XACac7s#Dm>Pbv*zgV;?S4lZqsB$JRI40RI3 z>q$z=04lE5*WEF09f%l`ljf9r&e31jN5PO1Y4h%Rd9X$Owxv-q1=H!dciH_YH7W_! z;bspfZoR$AEO-p2BnIG5pz{MAN)JA~Ib5KTqhFImprPftuT$#J*V zs!NkgiI>WFs$0&ZA(@Bwv@#P-*sV{oXALGrq*Dd|KuT_qcI7Ud>v5~}h3^)Pa74&B z#kOzaCt|;XJ-F+?a@=v?ad$)Txl)j!6RQ2*IGmFG#WPPAAQK~>Fy%U^u`3(6?9{J? z3@HM7`)V~WZZmvg0-kE|mM{k9r=x~~_=9qQuNv#W3BQ0$kD@Z)V+GaSe-wFRIeK@- zuIA<>wTeQA_G{8Pt&H`st!lm3L7?V5jty1xbdtS@ihY!CInvAWmCInQeP6~@g}0LX z14|D6M)^j~^~SxpMJyAW(OPi!!m?yY~1i zoLXzRn+zj8{Ml0b!g&a3c)}f{8JU)X2}FhJn^Ya7fyg;F_qv1wf9PQ%r^T05v=A*T ztck|15j#vZaG@G?CoEIV#oAle&-M4ja@0g_s(uZNP~ccUfsG$H1bmBhOP(>dMQbMe zp!JZZShX>wm|u+$3B5Tw?g77SVJqVdq&W{@jl9THioWB~yhPT}bpHBjS-Zn=nMz&i z4z}c#u0*IqKA33yHH39M9Ai~c-o0SU?+2js0P;O{B=9&voRXfO$2ocC+Nha?9Nal;sWJ@vw zqz518l_r{#=^ya7Wa^HrqhhzT)0Sku^D-whN!wLh{m*22AG)L^co_KxMV<$>*GC8G z){^vMp-K3*<>El$v^6w zw2P+sM)KR0fZo;cCYq`yj)5YC8P-9Y87BUVVXo%(uh9Junmws~W2RZk?0pmR1GlI# z&4>u6+g{44&loe!`q7EnU3JF|7McysQQ{&uFBKGqVVY6G9Vs7a_URNXT!v&FI@OiR zA&bnKIe(20T)nV6Vfi34vC{e)3!D*F(3HJ}0sdKQ$zgiMq zg0ukQ3XfZ|kb#%6Vm8D4+b{Ya9T>00PIf7CL+j1Ryncg`DOprp ze>MyCv^8eKn{s4gK{kFP^H1@R)tRM& z9W4!bv;OJNxuJ`TvFVzde{H~u>1KcCO)R^TZxvl^_UGn1UmJ!tY;3alGdsftKYHGV zsr|7Db;9ib_UFL?+z&=}M(sL}X%=b;fzXO3?=PPs!=QZci9zw)cXx4PIR+)E0D}^_ z@8N@pA`FTu#4hNJifh`nIz=*Y_EXraFxZ#vTG%S60huM43bs}hra&eNt?{+VMF=Cq zgMT73hpE)fftb=!;qI|fL8TZ&9l+|oyT6&MMy3HMb}Z`BlO^b#(iObu5L1|btY{e=)Xa?o7Pt&|z8rl=W8GA>@NNjL=(eHa^ioCD=<&y}N{n z6@&E3r0zc0kmFDMVi~RM+Ksv&2FQ#IOZMA>g`-jg1B}E; zg;DI8Yapc!=x1h*%rx0RW#Sqqn`fvy1z7eJZY($joQF|qQ@f9%b+y( zc7G6HFTPyYy&W+Ra}6*mjWfVFjwb_37P#ZFm#N!_O%eEA;(?5pX;vJyYwbt!}8T_SPsN{)2#M&aExSqnkOF zQHxJ=6Kaq7T-{Tp1hoZ^VA*?BZ*@xXUi5Y|}!+K#nHl3GS@Mw3j;Bl$xfdW+{F0z=G1&^;k;Blp{+eM*u<|8eU z=@=l>ktH&m$GI$X9&JZ{pJmQ!Shabi&p;zl`{GKZ-=yT?_b`sf=M;jiMS51M!lcu9 z0)AnkM8+Q!TH6hnBto+&k;a$%mX_e(5F!`_RG%l@g|@f3DsEEh>5BS>4%)Ud*`R5= z^zB*h((q}{#3RUdVyI$Usu)&-z_y;!tOi?M3(=5}xL&*Z(N}froGw(S{&eamrwYf^ z;u-qYUBts=x3L!V*{Nq}C%jQHj0LJ3QCg!g*&xI8Hd7p7ZCO4B8Gcxc3^JYCd_CF3 g#pej~4SznIcode: '001001' +blockNumber->units: Numeric +blockNumber->scale: 0 +blockNumber->reference: 0 +blockNumber->width: 7 +blockNumber->percentConfidence->code: '033007' +blockNumber->percentConfidence->units: % +blockNumber->percentConfidence->scale: 0 +blockNumber->percentConfidence->reference: 0 +blockNumber->percentConfidence->width: 7 +stationNumber->code: '001002' +stationNumber->units: Numeric +stationNumber->scale: 0 +stationNumber->reference: 0 +stationNumber->width: 10 +stationNumber->percentConfidence->code: '033007' +stationNumber->percentConfidence->units: % +stationNumber->percentConfidence->scale: 0 +stationNumber->percentConfidence->reference: 0 +stationNumber->percentConfidence->width: 7 +stationType->code: '002001' +stationType->units: CODE TABLE +stationType->scale: 0 +stationType->reference: 0 +stationType->width: 2 +stationType->percentConfidence->code: '033007' +stationType->percentConfidence->units: % +stationType->percentConfidence->scale: 0 +stationType->percentConfidence->reference: 0 +stationType->percentConfidence->width: 7 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +year->percentConfidence->code: '033007' +year->percentConfidence->units: % +year->percentConfidence->scale: 0 +year->percentConfidence->reference: 0 +year->percentConfidence->width: 7 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +month->percentConfidence->code: '033007' +month->percentConfidence->units: % +month->percentConfidence->scale: 0 +month->percentConfidence->reference: 0 +month->percentConfidence->width: 7 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +day->percentConfidence->code: '033007' +day->percentConfidence->units: % +day->percentConfidence->scale: 0 +day->percentConfidence->reference: 0 +day->percentConfidence->width: 7 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +hour->percentConfidence->code: '033007' +hour->percentConfidence->units: % +hour->percentConfidence->scale: 0 +hour->percentConfidence->reference: 0 +hour->percentConfidence->width: 7 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +minute->percentConfidence->code: '033007' +minute->percentConfidence->units: % +minute->percentConfidence->scale: 0 +minute->percentConfidence->reference: 0 +minute->percentConfidence->width: 7 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +latitude->percentConfidence->code: '033007' +latitude->percentConfidence->units: % +latitude->percentConfidence->scale: 0 +latitude->percentConfidence->reference: 0 +latitude->percentConfidence->width: 7 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +longitude->percentConfidence->code: '033007' +longitude->percentConfidence->units: % +longitude->percentConfidence->scale: 0 +longitude->percentConfidence->reference: 0 +longitude->percentConfidence->width: 7 +heightOfStation->code: '007001' +heightOfStation->units: m +heightOfStation->scale: 0 +heightOfStation->reference: -400 +heightOfStation->width: 15 +heightOfStation->percentConfidence->code: '033007' +heightOfStation->percentConfidence->units: % +heightOfStation->percentConfidence->scale: 0 +heightOfStation->percentConfidence->reference: 0 +heightOfStation->percentConfidence->width: 7 +nonCoordinatePressure->code: '010004' +nonCoordinatePressure->units: Pa +nonCoordinatePressure->scale: -1 +nonCoordinatePressure->reference: 0 +nonCoordinatePressure->width: 14 +nonCoordinatePressure->percentConfidence->code: '033007' +nonCoordinatePressure->percentConfidence->units: % +nonCoordinatePressure->percentConfidence->scale: 0 +nonCoordinatePressure->percentConfidence->reference: 0 +nonCoordinatePressure->percentConfidence->width: 7 +pressureReducedToMeanSeaLevel->code: '010051' +pressureReducedToMeanSeaLevel->units: Pa +pressureReducedToMeanSeaLevel->scale: -1 +pressureReducedToMeanSeaLevel->reference: 0 +pressureReducedToMeanSeaLevel->width: 14 +pressureReducedToMeanSeaLevel->percentConfidence->code: '033007' +pressureReducedToMeanSeaLevel->percentConfidence->units: % +pressureReducedToMeanSeaLevel->percentConfidence->scale: 0 +pressureReducedToMeanSeaLevel->percentConfidence->reference: 0 +pressureReducedToMeanSeaLevel->percentConfidence->width: 7 +3HourPressureChange->code: '010061' +3HourPressureChange->units: Pa +3HourPressureChange->scale: -1 +3HourPressureChange->reference: -500 +3HourPressureChange->width: 10 +3HourPressureChange->percentConfidence->code: '033007' +3HourPressureChange->percentConfidence->units: % +3HourPressureChange->percentConfidence->scale: 0 +3HourPressureChange->percentConfidence->reference: 0 +3HourPressureChange->percentConfidence->width: 7 +characteristicOfPressureTendency->code: '010063' +characteristicOfPressureTendency->units: CODE TABLE +characteristicOfPressureTendency->scale: 0 +characteristicOfPressureTendency->reference: 0 +characteristicOfPressureTendency->width: 4 +characteristicOfPressureTendency->percentConfidence->code: '033007' +characteristicOfPressureTendency->percentConfidence->units: % +characteristicOfPressureTendency->percentConfidence->scale: 0 +characteristicOfPressureTendency->percentConfidence->reference: 0 +characteristicOfPressureTendency->percentConfidence->width: 7 +windDirectionAt10M->code: '011011' +windDirectionAt10M->units: deg +windDirectionAt10M->scale: 0 +windDirectionAt10M->reference: 0 +windDirectionAt10M->width: 9 +windDirectionAt10M->percentConfidence->code: '033007' +windDirectionAt10M->percentConfidence->units: % +windDirectionAt10M->percentConfidence->scale: 0 +windDirectionAt10M->percentConfidence->reference: 0 +windDirectionAt10M->percentConfidence->width: 7 +windSpeedAt10M->code: '011012' +windSpeedAt10M->units: m/s +windSpeedAt10M->scale: 1 +windSpeedAt10M->reference: 0 +windSpeedAt10M->width: 12 +windSpeedAt10M->percentConfidence->code: '033007' +windSpeedAt10M->percentConfidence->units: % +windSpeedAt10M->percentConfidence->scale: 0 +windSpeedAt10M->percentConfidence->reference: 0 +windSpeedAt10M->percentConfidence->width: 7 +airTemperatureAt2M->code: '012004' +airTemperatureAt2M->units: K +airTemperatureAt2M->scale: 1 +airTemperatureAt2M->reference: 0 +airTemperatureAt2M->width: 12 +airTemperatureAt2M->percentConfidence->code: '033007' +airTemperatureAt2M->percentConfidence->units: % +airTemperatureAt2M->percentConfidence->scale: 0 +airTemperatureAt2M->percentConfidence->reference: 0 +airTemperatureAt2M->percentConfidence->width: 7 +dewpointTemperatureAt2M->code: '012006' +dewpointTemperatureAt2M->units: K +dewpointTemperatureAt2M->scale: 1 +dewpointTemperatureAt2M->reference: 0 +dewpointTemperatureAt2M->width: 12 +dewpointTemperatureAt2M->percentConfidence->code: '033007' +dewpointTemperatureAt2M->percentConfidence->units: % +dewpointTemperatureAt2M->percentConfidence->scale: 0 +dewpointTemperatureAt2M->percentConfidence->reference: 0 +dewpointTemperatureAt2M->percentConfidence->width: 7 +relativeHumidity->code: '013003' +relativeHumidity->units: % +relativeHumidity->scale: 0 +relativeHumidity->reference: 0 +relativeHumidity->width: 7 +relativeHumidity->percentConfidence->code: '033007' +relativeHumidity->percentConfidence->units: % +relativeHumidity->percentConfidence->scale: 0 +relativeHumidity->percentConfidence->reference: 0 +relativeHumidity->percentConfidence->width: 7 +horizontalVisibility->code: '020001' +horizontalVisibility->units: m +horizontalVisibility->scale: -1 +horizontalVisibility->reference: 0 +horizontalVisibility->width: 13 +horizontalVisibility->percentConfidence->code: '033007' +horizontalVisibility->percentConfidence->units: % +horizontalVisibility->percentConfidence->scale: 0 +horizontalVisibility->percentConfidence->reference: 0 +horizontalVisibility->percentConfidence->width: 7 +presentWeather->code: '020003' +presentWeather->units: CODE TABLE +presentWeather->scale: 0 +presentWeather->reference: 0 +presentWeather->width: 9 +presentWeather->percentConfidence->code: '033007' +presentWeather->percentConfidence->units: % +presentWeather->percentConfidence->scale: 0 +presentWeather->percentConfidence->reference: 0 +presentWeather->percentConfidence->width: 7 +pastWeather1->code: '020004' +pastWeather1->units: CODE TABLE +pastWeather1->scale: 0 +pastWeather1->reference: 0 +pastWeather1->width: 5 +pastWeather1->percentConfidence->code: '033007' +pastWeather1->percentConfidence->units: % +pastWeather1->percentConfidence->scale: 0 +pastWeather1->percentConfidence->reference: 0 +pastWeather1->percentConfidence->width: 7 +pastWeather2->code: '020005' +pastWeather2->units: CODE TABLE +pastWeather2->scale: 0 +pastWeather2->reference: 0 +pastWeather2->width: 5 +pastWeather2->percentConfidence->code: '033007' +pastWeather2->percentConfidence->units: % +pastWeather2->percentConfidence->scale: 0 +pastWeather2->percentConfidence->reference: 0 +pastWeather2->percentConfidence->width: 7 +cloudCoverTotal->code: '020010' +cloudCoverTotal->units: % +cloudCoverTotal->scale: 0 +cloudCoverTotal->reference: 0 +cloudCoverTotal->width: 7 +cloudCoverTotal->percentConfidence->code: '033007' +cloudCoverTotal->percentConfidence->units: % +cloudCoverTotal->percentConfidence->scale: 0 +cloudCoverTotal->percentConfidence->reference: 0 +cloudCoverTotal->percentConfidence->width: 7 +verticalSignificanceSurfaceObservations->code: '008002' +verticalSignificanceSurfaceObservations->units: CODE TABLE +verticalSignificanceSurfaceObservations->scale: 0 +verticalSignificanceSurfaceObservations->reference: 0 +verticalSignificanceSurfaceObservations->width: 6 +verticalSignificanceSurfaceObservations->percentConfidence->code: '033007' +verticalSignificanceSurfaceObservations->percentConfidence->units: % +verticalSignificanceSurfaceObservations->percentConfidence->scale: 0 +verticalSignificanceSurfaceObservations->percentConfidence->reference: 0 +verticalSignificanceSurfaceObservations->percentConfidence->width: 7 +cloudAmount->code: '020011' +cloudAmount->units: CODE TABLE +cloudAmount->scale: 0 +cloudAmount->reference: 0 +cloudAmount->width: 4 +cloudAmount->percentConfidence->code: '033007' +cloudAmount->percentConfidence->units: % +cloudAmount->percentConfidence->scale: 0 +cloudAmount->percentConfidence->reference: 0 +cloudAmount->percentConfidence->width: 7 +heightOfBaseOfCloud->code: '020013' +heightOfBaseOfCloud->units: m +heightOfBaseOfCloud->scale: -1 +heightOfBaseOfCloud->reference: -40 +heightOfBaseOfCloud->width: 11 +heightOfBaseOfCloud->percentConfidence->code: '033007' +heightOfBaseOfCloud->percentConfidence->units: % +heightOfBaseOfCloud->percentConfidence->scale: 0 +heightOfBaseOfCloud->percentConfidence->reference: 0 +heightOfBaseOfCloud->percentConfidence->width: 7 +cloudType->code: '020012' +cloudType->units: CODE TABLE +cloudType->scale: 0 +cloudType->reference: 0 +cloudType->width: 6 +cloudType->percentConfidence->code: '033007' +cloudType->percentConfidence->units: % +cloudType->percentConfidence->scale: 0 +cloudType->percentConfidence->reference: 0 +cloudType->percentConfidence->width: 7 +totalPrecipitationPast6Hours->code: '013021' +totalPrecipitationPast6Hours->units: kg m-2 +totalPrecipitationPast6Hours->scale: 1 +totalPrecipitationPast6Hours->reference: -1 +totalPrecipitationPast6Hours->width: 14 +totalPrecipitationPast6Hours->percentConfidence->code: '033007' +totalPrecipitationPast6Hours->percentConfidence->units: % +totalPrecipitationPast6Hours->percentConfidence->scale: 0 +totalPrecipitationPast6Hours->percentConfidence->reference: 0 +totalPrecipitationPast6Hours->percentConfidence->width: 7 +totalSnowDepth->code: '013013' +totalSnowDepth->units: m +totalSnowDepth->scale: 2 +totalSnowDepth->reference: -2 +totalSnowDepth->width: 16 +totalSnowDepth->percentConfidence->code: '033007' +totalSnowDepth->percentConfidence->units: % +totalSnowDepth->percentConfidence->scale: 0 +totalSnowDepth->percentConfidence->reference: 0 +totalSnowDepth->percentConfidence->width: 7 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 +messageNumber: 2 +blockNumber->code: '001001' +blockNumber->units: Numeric +blockNumber->scale: 0 +blockNumber->reference: 0 +blockNumber->width: 7 +blockNumber->percentConfidence->code: '033007' +blockNumber->percentConfidence->units: % +blockNumber->percentConfidence->scale: 0 +blockNumber->percentConfidence->reference: 0 +blockNumber->percentConfidence->width: 7 +stationNumber->code: '001002' +stationNumber->units: Numeric +stationNumber->scale: 0 +stationNumber->reference: 0 +stationNumber->width: 10 +stationNumber->percentConfidence->code: '033007' +stationNumber->percentConfidence->units: % +stationNumber->percentConfidence->scale: 0 +stationNumber->percentConfidence->reference: 0 +stationNumber->percentConfidence->width: 7 +stationType->code: '002001' +stationType->units: CODE TABLE +stationType->scale: 0 +stationType->reference: 0 +stationType->width: 2 +stationType->percentConfidence->code: '033007' +stationType->percentConfidence->units: % +stationType->percentConfidence->scale: 0 +stationType->percentConfidence->reference: 0 +stationType->percentConfidence->width: 7 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +year->percentConfidence->code: '033007' +year->percentConfidence->units: % +year->percentConfidence->scale: 0 +year->percentConfidence->reference: 0 +year->percentConfidence->width: 7 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +month->percentConfidence->code: '033007' +month->percentConfidence->units: % +month->percentConfidence->scale: 0 +month->percentConfidence->reference: 0 +month->percentConfidence->width: 7 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +day->percentConfidence->code: '033007' +day->percentConfidence->units: % +day->percentConfidence->scale: 0 +day->percentConfidence->reference: 0 +day->percentConfidence->width: 7 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +hour->percentConfidence->code: '033007' +hour->percentConfidence->units: % +hour->percentConfidence->scale: 0 +hour->percentConfidence->reference: 0 +hour->percentConfidence->width: 7 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +minute->percentConfidence->code: '033007' +minute->percentConfidence->units: % +minute->percentConfidence->scale: 0 +minute->percentConfidence->reference: 0 +minute->percentConfidence->width: 7 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +latitude->percentConfidence->code: '033007' +latitude->percentConfidence->units: % +latitude->percentConfidence->scale: 0 +latitude->percentConfidence->reference: 0 +latitude->percentConfidence->width: 7 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +longitude->percentConfidence->code: '033007' +longitude->percentConfidence->units: % +longitude->percentConfidence->scale: 0 +longitude->percentConfidence->reference: 0 +longitude->percentConfidence->width: 7 +heightOfStation->code: '007001' +heightOfStation->units: m +heightOfStation->scale: 0 +heightOfStation->reference: -400 +heightOfStation->width: 15 +heightOfStation->percentConfidence->code: '033007' +heightOfStation->percentConfidence->units: % +heightOfStation->percentConfidence->scale: 0 +heightOfStation->percentConfidence->reference: 0 +heightOfStation->percentConfidence->width: 7 +nonCoordinatePressure->code: '010004' +nonCoordinatePressure->units: Pa +nonCoordinatePressure->scale: -1 +nonCoordinatePressure->reference: 0 +nonCoordinatePressure->width: 14 +nonCoordinatePressure->percentConfidence->code: '033007' +nonCoordinatePressure->percentConfidence->units: % +nonCoordinatePressure->percentConfidence->scale: 0 +nonCoordinatePressure->percentConfidence->reference: 0 +nonCoordinatePressure->percentConfidence->width: 7 +pressureReducedToMeanSeaLevel->code: '010051' +pressureReducedToMeanSeaLevel->units: Pa +pressureReducedToMeanSeaLevel->scale: -1 +pressureReducedToMeanSeaLevel->reference: 0 +pressureReducedToMeanSeaLevel->width: 14 +pressureReducedToMeanSeaLevel->percentConfidence->code: '033007' +pressureReducedToMeanSeaLevel->percentConfidence->units: % +pressureReducedToMeanSeaLevel->percentConfidence->scale: 0 +pressureReducedToMeanSeaLevel->percentConfidence->reference: 0 +pressureReducedToMeanSeaLevel->percentConfidence->width: 7 +3HourPressureChange->code: '010061' +3HourPressureChange->units: Pa +3HourPressureChange->scale: -1 +3HourPressureChange->reference: -500 +3HourPressureChange->width: 10 +3HourPressureChange->percentConfidence->code: '033007' +3HourPressureChange->percentConfidence->units: % +3HourPressureChange->percentConfidence->scale: 0 +3HourPressureChange->percentConfidence->reference: 0 +3HourPressureChange->percentConfidence->width: 7 +characteristicOfPressureTendency->code: '010063' +characteristicOfPressureTendency->units: CODE TABLE +characteristicOfPressureTendency->scale: 0 +characteristicOfPressureTendency->reference: 0 +characteristicOfPressureTendency->width: 4 +characteristicOfPressureTendency->percentConfidence->code: '033007' +characteristicOfPressureTendency->percentConfidence->units: % +characteristicOfPressureTendency->percentConfidence->scale: 0 +characteristicOfPressureTendency->percentConfidence->reference: 0 +characteristicOfPressureTendency->percentConfidence->width: 7 +windDirectionAt10M->code: '011011' +windDirectionAt10M->units: deg +windDirectionAt10M->scale: 0 +windDirectionAt10M->reference: 0 +windDirectionAt10M->width: 9 +windDirectionAt10M->percentConfidence->code: '033007' +windDirectionAt10M->percentConfidence->units: % +windDirectionAt10M->percentConfidence->scale: 0 +windDirectionAt10M->percentConfidence->reference: 0 +windDirectionAt10M->percentConfidence->width: 7 +windSpeedAt10M->code: '011012' +windSpeedAt10M->units: m/s +windSpeedAt10M->scale: 1 +windSpeedAt10M->reference: 0 +windSpeedAt10M->width: 12 +windSpeedAt10M->percentConfidence->code: '033007' +windSpeedAt10M->percentConfidence->units: % +windSpeedAt10M->percentConfidence->scale: 0 +windSpeedAt10M->percentConfidence->reference: 0 +windSpeedAt10M->percentConfidence->width: 7 +airTemperatureAt2M->code: '012004' +airTemperatureAt2M->units: K +airTemperatureAt2M->scale: 1 +airTemperatureAt2M->reference: 0 +airTemperatureAt2M->width: 12 +airTemperatureAt2M->percentConfidence->code: '033007' +airTemperatureAt2M->percentConfidence->units: % +airTemperatureAt2M->percentConfidence->scale: 0 +airTemperatureAt2M->percentConfidence->reference: 0 +airTemperatureAt2M->percentConfidence->width: 7 +dewpointTemperatureAt2M->code: '012006' +dewpointTemperatureAt2M->units: K +dewpointTemperatureAt2M->scale: 1 +dewpointTemperatureAt2M->reference: 0 +dewpointTemperatureAt2M->width: 12 +dewpointTemperatureAt2M->percentConfidence->code: '033007' +dewpointTemperatureAt2M->percentConfidence->units: % +dewpointTemperatureAt2M->percentConfidence->scale: 0 +dewpointTemperatureAt2M->percentConfidence->reference: 0 +dewpointTemperatureAt2M->percentConfidence->width: 7 +relativeHumidity->code: '013003' +relativeHumidity->units: % +relativeHumidity->scale: 0 +relativeHumidity->reference: 0 +relativeHumidity->width: 7 +relativeHumidity->percentConfidence->code: '033007' +relativeHumidity->percentConfidence->units: % +relativeHumidity->percentConfidence->scale: 0 +relativeHumidity->percentConfidence->reference: 0 +relativeHumidity->percentConfidence->width: 7 +horizontalVisibility->code: '020001' +horizontalVisibility->units: m +horizontalVisibility->scale: -1 +horizontalVisibility->reference: 0 +horizontalVisibility->width: 13 +horizontalVisibility->percentConfidence->code: '033007' +horizontalVisibility->percentConfidence->units: % +horizontalVisibility->percentConfidence->scale: 0 +horizontalVisibility->percentConfidence->reference: 0 +horizontalVisibility->percentConfidence->width: 7 +presentWeather->code: '020003' +presentWeather->units: CODE TABLE +presentWeather->scale: 0 +presentWeather->reference: 0 +presentWeather->width: 9 +presentWeather->percentConfidence->code: '033007' +presentWeather->percentConfidence->units: % +presentWeather->percentConfidence->scale: 0 +presentWeather->percentConfidence->reference: 0 +presentWeather->percentConfidence->width: 7 +pastWeather1->code: '020004' +pastWeather1->units: CODE TABLE +pastWeather1->scale: 0 +pastWeather1->reference: 0 +pastWeather1->width: 5 +pastWeather1->percentConfidence->code: '033007' +pastWeather1->percentConfidence->units: % +pastWeather1->percentConfidence->scale: 0 +pastWeather1->percentConfidence->reference: 0 +pastWeather1->percentConfidence->width: 7 +pastWeather2->code: '020005' +pastWeather2->units: CODE TABLE +pastWeather2->scale: 0 +pastWeather2->reference: 0 +pastWeather2->width: 5 +pastWeather2->percentConfidence->code: '033007' +pastWeather2->percentConfidence->units: % +pastWeather2->percentConfidence->scale: 0 +pastWeather2->percentConfidence->reference: 0 +pastWeather2->percentConfidence->width: 7 +cloudCoverTotal->code: '020010' +cloudCoverTotal->units: % +cloudCoverTotal->scale: 0 +cloudCoverTotal->reference: 0 +cloudCoverTotal->width: 7 +cloudCoverTotal->percentConfidence->code: '033007' +cloudCoverTotal->percentConfidence->units: % +cloudCoverTotal->percentConfidence->scale: 0 +cloudCoverTotal->percentConfidence->reference: 0 +cloudCoverTotal->percentConfidence->width: 7 +verticalSignificanceSurfaceObservations->code: '008002' +verticalSignificanceSurfaceObservations->units: CODE TABLE +verticalSignificanceSurfaceObservations->scale: 0 +verticalSignificanceSurfaceObservations->reference: 0 +verticalSignificanceSurfaceObservations->width: 6 +verticalSignificanceSurfaceObservations->percentConfidence->code: '033007' +verticalSignificanceSurfaceObservations->percentConfidence->units: % +verticalSignificanceSurfaceObservations->percentConfidence->scale: 0 +verticalSignificanceSurfaceObservations->percentConfidence->reference: 0 +verticalSignificanceSurfaceObservations->percentConfidence->width: 7 +cloudAmount->code: '020011' +cloudAmount->units: CODE TABLE +cloudAmount->scale: 0 +cloudAmount->reference: 0 +cloudAmount->width: 4 +cloudAmount->percentConfidence->code: '033007' +cloudAmount->percentConfidence->units: % +cloudAmount->percentConfidence->scale: 0 +cloudAmount->percentConfidence->reference: 0 +cloudAmount->percentConfidence->width: 7 +heightOfBaseOfCloud->code: '020013' +heightOfBaseOfCloud->units: m +heightOfBaseOfCloud->scale: -1 +heightOfBaseOfCloud->reference: -40 +heightOfBaseOfCloud->width: 11 +heightOfBaseOfCloud->percentConfidence->code: '033007' +heightOfBaseOfCloud->percentConfidence->units: % +heightOfBaseOfCloud->percentConfidence->scale: 0 +heightOfBaseOfCloud->percentConfidence->reference: 0 +heightOfBaseOfCloud->percentConfidence->width: 7 +cloudType->code: '020012' +cloudType->units: CODE TABLE +cloudType->scale: 0 +cloudType->reference: 0 +cloudType->width: 6 +cloudType->percentConfidence->code: '033007' +cloudType->percentConfidence->units: % +cloudType->percentConfidence->scale: 0 +cloudType->percentConfidence->reference: 0 +cloudType->percentConfidence->width: 7 +totalPrecipitationPast6Hours->code: '013021' +totalPrecipitationPast6Hours->units: kg m-2 +totalPrecipitationPast6Hours->scale: 1 +totalPrecipitationPast6Hours->reference: -1 +totalPrecipitationPast6Hours->width: 14 +totalPrecipitationPast6Hours->percentConfidence->code: '033007' +totalPrecipitationPast6Hours->percentConfidence->units: % +totalPrecipitationPast6Hours->percentConfidence->scale: 0 +totalPrecipitationPast6Hours->percentConfidence->reference: 0 +totalPrecipitationPast6Hours->percentConfidence->width: 7 +totalSnowDepth->code: '013013' +totalSnowDepth->units: m +totalSnowDepth->scale: 2 +totalSnowDepth->reference: -2 +totalSnowDepth->width: 16 +totalSnowDepth->percentConfidence->code: '033007' +totalSnowDepth->percentConfidence->units: % +totalSnowDepth->percentConfidence->scale: 0 +totalSnowDepth->percentConfidence->reference: 0 +totalSnowDepth->percentConfidence->width: 7 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 +messageNumber: 3 +blockNumber->code: '001001' +blockNumber->units: Numeric +blockNumber->scale: 0 +blockNumber->reference: 0 +blockNumber->width: 7 +blockNumber->percentConfidence->code: '033007' +blockNumber->percentConfidence->units: % +blockNumber->percentConfidence->scale: 0 +blockNumber->percentConfidence->reference: 0 +blockNumber->percentConfidence->width: 7 +stationNumber->code: '001002' +stationNumber->units: Numeric +stationNumber->scale: 0 +stationNumber->reference: 0 +stationNumber->width: 10 +stationNumber->percentConfidence->code: '033007' +stationNumber->percentConfidence->units: % +stationNumber->percentConfidence->scale: 0 +stationNumber->percentConfidence->reference: 0 +stationNumber->percentConfidence->width: 7 +stationType->code: '002001' +stationType->units: CODE TABLE +stationType->scale: 0 +stationType->reference: 0 +stationType->width: 2 +stationType->percentConfidence->code: '033007' +stationType->percentConfidence->units: % +stationType->percentConfidence->scale: 0 +stationType->percentConfidence->reference: 0 +stationType->percentConfidence->width: 7 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +year->percentConfidence->code: '033007' +year->percentConfidence->units: % +year->percentConfidence->scale: 0 +year->percentConfidence->reference: 0 +year->percentConfidence->width: 7 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +month->percentConfidence->code: '033007' +month->percentConfidence->units: % +month->percentConfidence->scale: 0 +month->percentConfidence->reference: 0 +month->percentConfidence->width: 7 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +day->percentConfidence->code: '033007' +day->percentConfidence->units: % +day->percentConfidence->scale: 0 +day->percentConfidence->reference: 0 +day->percentConfidence->width: 7 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +hour->percentConfidence->code: '033007' +hour->percentConfidence->units: % +hour->percentConfidence->scale: 0 +hour->percentConfidence->reference: 0 +hour->percentConfidence->width: 7 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +minute->percentConfidence->code: '033007' +minute->percentConfidence->units: % +minute->percentConfidence->scale: 0 +minute->percentConfidence->reference: 0 +minute->percentConfidence->width: 7 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +latitude->percentConfidence->code: '033007' +latitude->percentConfidence->units: % +latitude->percentConfidence->scale: 0 +latitude->percentConfidence->reference: 0 +latitude->percentConfidence->width: 7 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +longitude->percentConfidence->code: '033007' +longitude->percentConfidence->units: % +longitude->percentConfidence->scale: 0 +longitude->percentConfidence->reference: 0 +longitude->percentConfidence->width: 7 +heightOfStation->code: '007001' +heightOfStation->units: m +heightOfStation->scale: 0 +heightOfStation->reference: -400 +heightOfStation->width: 15 +heightOfStation->percentConfidence->code: '033007' +heightOfStation->percentConfidence->units: % +heightOfStation->percentConfidence->scale: 0 +heightOfStation->percentConfidence->reference: 0 +heightOfStation->percentConfidence->width: 7 +nonCoordinatePressure->code: '010004' +nonCoordinatePressure->units: Pa +nonCoordinatePressure->scale: -1 +nonCoordinatePressure->reference: 0 +nonCoordinatePressure->width: 14 +nonCoordinatePressure->percentConfidence->code: '033007' +nonCoordinatePressure->percentConfidence->units: % +nonCoordinatePressure->percentConfidence->scale: 0 +nonCoordinatePressure->percentConfidence->reference: 0 +nonCoordinatePressure->percentConfidence->width: 7 +pressureReducedToMeanSeaLevel->code: '010051' +pressureReducedToMeanSeaLevel->units: Pa +pressureReducedToMeanSeaLevel->scale: -1 +pressureReducedToMeanSeaLevel->reference: 0 +pressureReducedToMeanSeaLevel->width: 14 +pressureReducedToMeanSeaLevel->percentConfidence->code: '033007' +pressureReducedToMeanSeaLevel->percentConfidence->units: % +pressureReducedToMeanSeaLevel->percentConfidence->scale: 0 +pressureReducedToMeanSeaLevel->percentConfidence->reference: 0 +pressureReducedToMeanSeaLevel->percentConfidence->width: 7 +3HourPressureChange->code: '010061' +3HourPressureChange->units: Pa +3HourPressureChange->scale: -1 +3HourPressureChange->reference: -500 +3HourPressureChange->width: 10 +3HourPressureChange->percentConfidence->code: '033007' +3HourPressureChange->percentConfidence->units: % +3HourPressureChange->percentConfidence->scale: 0 +3HourPressureChange->percentConfidence->reference: 0 +3HourPressureChange->percentConfidence->width: 7 +characteristicOfPressureTendency->code: '010063' +characteristicOfPressureTendency->units: CODE TABLE +characteristicOfPressureTendency->scale: 0 +characteristicOfPressureTendency->reference: 0 +characteristicOfPressureTendency->width: 4 +characteristicOfPressureTendency->percentConfidence->code: '033007' +characteristicOfPressureTendency->percentConfidence->units: % +characteristicOfPressureTendency->percentConfidence->scale: 0 +characteristicOfPressureTendency->percentConfidence->reference: 0 +characteristicOfPressureTendency->percentConfidence->width: 7 +windDirectionAt10M->code: '011011' +windDirectionAt10M->units: deg +windDirectionAt10M->scale: 0 +windDirectionAt10M->reference: 0 +windDirectionAt10M->width: 9 +windDirectionAt10M->percentConfidence->code: '033007' +windDirectionAt10M->percentConfidence->units: % +windDirectionAt10M->percentConfidence->scale: 0 +windDirectionAt10M->percentConfidence->reference: 0 +windDirectionAt10M->percentConfidence->width: 7 +windSpeedAt10M->code: '011012' +windSpeedAt10M->units: m/s +windSpeedAt10M->scale: 1 +windSpeedAt10M->reference: 0 +windSpeedAt10M->width: 12 +windSpeedAt10M->percentConfidence->code: '033007' +windSpeedAt10M->percentConfidence->units: % +windSpeedAt10M->percentConfidence->scale: 0 +windSpeedAt10M->percentConfidence->reference: 0 +windSpeedAt10M->percentConfidence->width: 7 +airTemperatureAt2M->code: '012004' +airTemperatureAt2M->units: K +airTemperatureAt2M->scale: 1 +airTemperatureAt2M->reference: 0 +airTemperatureAt2M->width: 12 +airTemperatureAt2M->percentConfidence->code: '033007' +airTemperatureAt2M->percentConfidence->units: % +airTemperatureAt2M->percentConfidence->scale: 0 +airTemperatureAt2M->percentConfidence->reference: 0 +airTemperatureAt2M->percentConfidence->width: 7 +dewpointTemperatureAt2M->code: '012006' +dewpointTemperatureAt2M->units: K +dewpointTemperatureAt2M->scale: 1 +dewpointTemperatureAt2M->reference: 0 +dewpointTemperatureAt2M->width: 12 +dewpointTemperatureAt2M->percentConfidence->code: '033007' +dewpointTemperatureAt2M->percentConfidence->units: % +dewpointTemperatureAt2M->percentConfidence->scale: 0 +dewpointTemperatureAt2M->percentConfidence->reference: 0 +dewpointTemperatureAt2M->percentConfidence->width: 7 +relativeHumidity->code: '013003' +relativeHumidity->units: % +relativeHumidity->scale: 0 +relativeHumidity->reference: 0 +relativeHumidity->width: 7 +relativeHumidity->percentConfidence->code: '033007' +relativeHumidity->percentConfidence->units: % +relativeHumidity->percentConfidence->scale: 0 +relativeHumidity->percentConfidence->reference: 0 +relativeHumidity->percentConfidence->width: 7 +horizontalVisibility->code: '020001' +horizontalVisibility->units: m +horizontalVisibility->scale: -1 +horizontalVisibility->reference: 0 +horizontalVisibility->width: 13 +horizontalVisibility->percentConfidence->code: '033007' +horizontalVisibility->percentConfidence->units: % +horizontalVisibility->percentConfidence->scale: 0 +horizontalVisibility->percentConfidence->reference: 0 +horizontalVisibility->percentConfidence->width: 7 +presentWeather->code: '020003' +presentWeather->units: CODE TABLE +presentWeather->scale: 0 +presentWeather->reference: 0 +presentWeather->width: 9 +presentWeather->percentConfidence->code: '033007' +presentWeather->percentConfidence->units: % +presentWeather->percentConfidence->scale: 0 +presentWeather->percentConfidence->reference: 0 +presentWeather->percentConfidence->width: 7 +pastWeather1->code: '020004' +pastWeather1->units: CODE TABLE +pastWeather1->scale: 0 +pastWeather1->reference: 0 +pastWeather1->width: 5 +pastWeather1->percentConfidence->code: '033007' +pastWeather1->percentConfidence->units: % +pastWeather1->percentConfidence->scale: 0 +pastWeather1->percentConfidence->reference: 0 +pastWeather1->percentConfidence->width: 7 +pastWeather2->code: '020005' +pastWeather2->units: CODE TABLE +pastWeather2->scale: 0 +pastWeather2->reference: 0 +pastWeather2->width: 5 +pastWeather2->percentConfidence->code: '033007' +pastWeather2->percentConfidence->units: % +pastWeather2->percentConfidence->scale: 0 +pastWeather2->percentConfidence->reference: 0 +pastWeather2->percentConfidence->width: 7 +cloudCoverTotal->code: '020010' +cloudCoverTotal->units: % +cloudCoverTotal->scale: 0 +cloudCoverTotal->reference: 0 +cloudCoverTotal->width: 7 +cloudCoverTotal->percentConfidence->code: '033007' +cloudCoverTotal->percentConfidence->units: % +cloudCoverTotal->percentConfidence->scale: 0 +cloudCoverTotal->percentConfidence->reference: 0 +cloudCoverTotal->percentConfidence->width: 7 +verticalSignificanceSurfaceObservations->code: '008002' +verticalSignificanceSurfaceObservations->units: CODE TABLE +verticalSignificanceSurfaceObservations->scale: 0 +verticalSignificanceSurfaceObservations->reference: 0 +verticalSignificanceSurfaceObservations->width: 6 +verticalSignificanceSurfaceObservations->percentConfidence->code: '033007' +verticalSignificanceSurfaceObservations->percentConfidence->units: % +verticalSignificanceSurfaceObservations->percentConfidence->scale: 0 +verticalSignificanceSurfaceObservations->percentConfidence->reference: 0 +verticalSignificanceSurfaceObservations->percentConfidence->width: 7 +cloudAmount->code: '020011' +cloudAmount->units: CODE TABLE +cloudAmount->scale: 0 +cloudAmount->reference: 0 +cloudAmount->width: 4 +cloudAmount->percentConfidence->code: '033007' +cloudAmount->percentConfidence->units: % +cloudAmount->percentConfidence->scale: 0 +cloudAmount->percentConfidence->reference: 0 +cloudAmount->percentConfidence->width: 7 +heightOfBaseOfCloud->code: '020013' +heightOfBaseOfCloud->units: m +heightOfBaseOfCloud->scale: -1 +heightOfBaseOfCloud->reference: -40 +heightOfBaseOfCloud->width: 11 +heightOfBaseOfCloud->percentConfidence->code: '033007' +heightOfBaseOfCloud->percentConfidence->units: % +heightOfBaseOfCloud->percentConfidence->scale: 0 +heightOfBaseOfCloud->percentConfidence->reference: 0 +heightOfBaseOfCloud->percentConfidence->width: 7 +cloudType->code: '020012' +cloudType->units: CODE TABLE +cloudType->scale: 0 +cloudType->reference: 0 +cloudType->width: 6 +cloudType->percentConfidence->code: '033007' +cloudType->percentConfidence->units: % +cloudType->percentConfidence->scale: 0 +cloudType->percentConfidence->reference: 0 +cloudType->percentConfidence->width: 7 +totalPrecipitationPast6Hours->code: '013021' +totalPrecipitationPast6Hours->units: kg m-2 +totalPrecipitationPast6Hours->scale: 1 +totalPrecipitationPast6Hours->reference: -1 +totalPrecipitationPast6Hours->width: 14 +totalPrecipitationPast6Hours->percentConfidence->code: '033007' +totalPrecipitationPast6Hours->percentConfidence->units: % +totalPrecipitationPast6Hours->percentConfidence->scale: 0 +totalPrecipitationPast6Hours->percentConfidence->reference: 0 +totalPrecipitationPast6Hours->percentConfidence->width: 7 +totalSnowDepth->code: '013013' +totalSnowDepth->units: m +totalSnowDepth->scale: 2 +totalSnowDepth->reference: -2 +totalSnowDepth->width: 16 +totalSnowDepth->percentConfidence->code: '033007' +totalSnowDepth->percentConfidence->units: % +totalSnowDepth->percentConfidence->scale: 0 +totalSnowDepth->percentConfidence->reference: 0 +totalSnowDepth->percentConfidence->width: 7 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 diff --git a/tests/sample-data/synop.bufr b/tests/sample-data/synop.bufr new file mode 100644 index 0000000000000000000000000000000000000000..a434f66235cb098ce975229234f45bbafbcc2df5 GIT binary patch literal 660 zcmZV$jivdD8a)31SSlOjI|RJ8yFm;ix{eoFJUk+G%zq! zKmrVR65HJp+qN+QRl9+-Fvu`4Fg6@#G~#Mj=;|;Nm>fh&f;kX45#u+n$!8eqGY!Cg zGe+{70?B@31pDpVWTudL32epxe_mLiq`?qs7wrD!5krf%!;FgFdQ`tL$Yb#v(EU{N zo2R)JL&F1z-^_9O%?2F21mcYu5xKQARPdISA-S^w)Dh8AGFRm?_< WHwFQw2N>~oUd{&Sw~WgK;tc>sjl>K9 literal 0 HcmV?d00001 diff --git a/tests/sample-data/synop.items b/tests/sample-data/synop.items new file mode 100644 index 00000000..3c813a43 --- /dev/null +++ b/tests/sample-data/synop.items @@ -0,0 +1,348 @@ +messageNumber 1 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 1 +dataCategory 0 +dataSubCategory 1 +masterTablesVersionNumber 13 +localTablesVersionNumber 1 +typicalYearOfCentury 9 +typicalMonth 1 +typicalDay 24 +typicalHour 12 +typicalMinute 0 +typicalDate 20090124 +typicalTime 120000 +rdbType 1 +oldSubtype 1 +localYear 2009 +localMonth 1 +localDay 24 +localHour 12 +localMinute 0 +localSecond 0 +rdbtimeDay 24 +rdbtimeHour 12 +rdbtimeMinute 14 +rdbtimeSecond 35 +rdbtimeTime 121435 +rectimeDay 24 +rectimeHour 12 +rectimeMinute 13 +rectimeSecond 27 +restricted 0 +correction1 0 +correction1Part 1 +correction2 0 +correction2Part 0 +correction3 0 +correction3Part 0 +correction4 0 +correction4Part 0 +qualityControl 70 +newSubtype 0 +numberOfSubsets 1 +localLatitude 70.93 +localLongitude -8.67 +ident 01001 +observedData 1 +compressedData 0 +unexpandedDescriptors [307005 13021 13013 222000 101049 31031 1031 1032 101049 33007] +blockNumber 1 +blockNumber->percentConfidence 70 +stationNumber 1 +stationNumber->percentConfidence 70 +stationType 1 +stationType->percentConfidence 70 +year 2009 +year->percentConfidence 70 +month 1 +month->percentConfidence 70 +day 24 +day->percentConfidence 70 +hour 12 +hour->percentConfidence 70 +minute 0 +minute->percentConfidence 70 +latitude 70.93 +latitude->percentConfidence 70 +longitude -8.67 +longitude->percentConfidence 70 +heightOfStation 9 +heightOfStation->percentConfidence 75 +nonCoordinatePressure 99100.0 +nonCoordinatePressure->percentConfidence 74 +pressureReducedToMeanSeaLevel 99220.0 +pressureReducedToMeanSeaLevel->percentConfidence 74 +3HourPressureChange 60.0 +3HourPressureChange->percentConfidence 77 +characteristicOfPressureTendency 0 +characteristicOfPressureTendency->percentConfidence 79 +windDirectionAt10M 80 +windDirectionAt10M->percentConfidence 70 +windSpeedAt10M 7.0 +windSpeedAt10M->percentConfidence 70 +airTemperatureAt2M 274.5 +airTemperatureAt2M->percentConfidence 80 +dewpointTemperatureAt2M 273.40000000000003 +dewpointTemperatureAt2M->percentConfidence 77 +relativeHumidity -- +relativeHumidity->percentConfidence 70 +horizontalVisibility 4500.0 +horizontalVisibility->percentConfidence 82 +presentWeather 61 +presentWeather->percentConfidence 85 +pastWeather1 6 +pastWeather1->percentConfidence 70 +pastWeather2 2 +pastWeather2->percentConfidence 70 +cloudCoverTotal 100 +cloudCoverTotal->percentConfidence 85 +verticalSignificanceSurfaceObservations [1 1 2 3 --] +verticalSignificanceSurfaceObservations->percentConfidence [70 70 70 70 70] +cloudAmount [8 -- -- -- --] +cloudAmount->percentConfidence [85 70 70 70 70] +heightOfBaseOfCloud [250.0 -- -- -- --] +heightOfBaseOfCloud->percentConfidence [84 70 70 70 70] +cloudType [37 61 60 -- -- -- --] +cloudType->percentConfidence [85 85 85 70 70 70 70] +totalPrecipitationPast6Hours 2.0 +totalPrecipitationPast6Hours->percentConfidence 70 +totalSnowDepth -- +totalSnowDepth->percentConfidence 70 +centre 98 +generatingApplication 1 +messageNumber 2 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 1 +dataCategory 0 +dataSubCategory 1 +masterTablesVersionNumber 13 +localTablesVersionNumber 1 +typicalYearOfCentury 9 +typicalMonth 1 +typicalDay 24 +typicalHour 12 +typicalMinute 0 +typicalDate 20090124 +typicalTime 120000 +rdbType 1 +oldSubtype 1 +localYear 2009 +localMonth 1 +localDay 24 +localHour 12 +localMinute 0 +localSecond 0 +rdbtimeDay 24 +rdbtimeHour 12 +rdbtimeMinute 14 +rdbtimeSecond 35 +rdbtimeTime 121435 +rectimeDay 24 +rectimeHour 12 +rectimeMinute 13 +rectimeSecond 27 +restricted 0 +correction1 0 +correction1Part 1 +correction2 0 +correction2Part 0 +correction3 0 +correction3Part 0 +correction4 0 +correction4Part 0 +qualityControl 70 +newSubtype 0 +numberOfSubsets 1 +localLatitude 77.0 +localLongitude 15.5 +ident 01003 +observedData 1 +compressedData 0 +unexpandedDescriptors [307005 13021 13013 222000 101049 31031 1031 1032 101049 33007] +blockNumber 1 +blockNumber->percentConfidence 70 +stationNumber 3 +stationNumber->percentConfidence 70 +stationType 1 +stationType->percentConfidence 70 +year 2009 +year->percentConfidence 70 +month 1 +month->percentConfidence 70 +day 24 +day->percentConfidence 70 +hour 12 +hour->percentConfidence 70 +minute 0 +minute->percentConfidence 70 +latitude 77.0 +latitude->percentConfidence 70 +longitude 15.500000000000002 +longitude->percentConfidence 70 +heightOfStation 12 +heightOfStation->percentConfidence 70 +nonCoordinatePressure -- +nonCoordinatePressure->percentConfidence 70 +pressureReducedToMeanSeaLevel 100500.0 +pressureReducedToMeanSeaLevel->percentConfidence 70 +3HourPressureChange 140.0 +3HourPressureChange->percentConfidence 77 +characteristicOfPressureTendency 2 +characteristicOfPressureTendency->percentConfidence 79 +windDirectionAt10M 80 +windDirectionAt10M->percentConfidence 70 +windSpeedAt10M 1.0 +windSpeedAt10M->percentConfidence 70 +airTemperatureAt2M 268.40000000000003 +airTemperatureAt2M->percentConfidence 80 +dewpointTemperatureAt2M 266.40000000000003 +dewpointTemperatureAt2M->percentConfidence 77 +relativeHumidity -- +relativeHumidity->percentConfidence 70 +horizontalVisibility 25000.0 +horizontalVisibility->percentConfidence 82 +presentWeather 2 +presentWeather->percentConfidence 85 +pastWeather1 2 +pastWeather1->percentConfidence 70 +pastWeather2 2 +pastWeather2->percentConfidence 70 +cloudCoverTotal 90 +cloudCoverTotal->percentConfidence 85 +verticalSignificanceSurfaceObservations [1 1 2 3 --] +verticalSignificanceSurfaceObservations->percentConfidence [70 70 70 70 70] +cloudAmount [3 -- -- -- --] +cloudAmount->percentConfidence [85 70 70 70 70] +heightOfBaseOfCloud [800.0 -- -- -- --] +heightOfBaseOfCloud->percentConfidence [84 70 70 70 70] +cloudType [35 23 60 -- -- -- --] +cloudType->percentConfidence [85 85 85 70 70 70 70] +totalPrecipitationPast6Hours 0.0 +totalPrecipitationPast6Hours->percentConfidence 70 +totalSnowDepth -- +totalSnowDepth->percentConfidence 70 +centre 98 +generatingApplication 1 +messageNumber 3 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 1 +dataCategory 0 +dataSubCategory 1 +masterTablesVersionNumber 13 +localTablesVersionNumber 1 +typicalYearOfCentury 9 +typicalMonth 1 +typicalDay 24 +typicalHour 12 +typicalMinute 0 +typicalDate 20090124 +typicalTime 120000 +rdbType 1 +oldSubtype 1 +localYear 2009 +localMonth 1 +localDay 24 +localHour 12 +localMinute 0 +localSecond 0 +rdbtimeDay 24 +rdbtimeHour 12 +rdbtimeMinute 14 +rdbtimeSecond 35 +rdbtimeTime 121435 +rectimeDay 24 +rectimeHour 12 +rectimeMinute 13 +rectimeSecond 27 +restricted 0 +correction1 0 +correction1Part 1 +correction2 0 +correction2Part 0 +correction3 0 +correction3Part 0 +correction4 0 +correction4Part 0 +qualityControl 60 +newSubtype 0 +numberOfSubsets 1 +localLatitude 78.92 +localLongitude 11.93 +ident 01007 +observedData 1 +compressedData 0 +unexpandedDescriptors [307005 13021 13013 222000 101049 31031 1031 1032 101049 33007] +blockNumber 1 +blockNumber->percentConfidence 70 +stationNumber 7 +stationNumber->percentConfidence 70 +stationType 1 +stationType->percentConfidence 70 +year 2009 +year->percentConfidence 70 +month 1 +month->percentConfidence 70 +day 24 +day->percentConfidence 70 +hour 12 +hour->percentConfidence 70 +minute 0 +minute->percentConfidence 70 +latitude 78.92 +latitude->percentConfidence 70 +longitude 11.930000000000001 +longitude->percentConfidence 70 +heightOfStation 18 +heightOfStation->percentConfidence 60 +nonCoordinatePressure 100470.0 +nonCoordinatePressure->percentConfidence 60 +pressureReducedToMeanSeaLevel 100570.0 +pressureReducedToMeanSeaLevel->percentConfidence 60 +3HourPressureChange 120.0 +3HourPressureChange->percentConfidence 77 +characteristicOfPressureTendency 1 +characteristicOfPressureTendency->percentConfidence 79 +windDirectionAt10M 150 +windDirectionAt10M->percentConfidence 70 +windSpeedAt10M 1.0 +windSpeedAt10M->percentConfidence 70 +airTemperatureAt2M 268.5 +airTemperatureAt2M->percentConfidence 70 +dewpointTemperatureAt2M 266.1 +dewpointTemperatureAt2M->percentConfidence 77 +relativeHumidity -- +relativeHumidity->percentConfidence 70 +horizontalVisibility 30000.0 +horizontalVisibility->percentConfidence 82 +presentWeather 2 +presentWeather->percentConfidence 85 +pastWeather1 2 +pastWeather1->percentConfidence 70 +pastWeather2 2 +pastWeather2->percentConfidence 70 +cloudCoverTotal 100 +cloudCoverTotal->percentConfidence 85 +verticalSignificanceSurfaceObservations [1 1 2 3 --] +verticalSignificanceSurfaceObservations->percentConfidence [70 70 70 70 70] +cloudAmount [8 -- -- -- --] +cloudAmount->percentConfidence [85 70 70 70 70] +heightOfBaseOfCloud [800.0 -- -- -- --] +heightOfBaseOfCloud->percentConfidence [84 70 70 70 70] +cloudType [38 61 60 -- -- -- --] +cloudType->percentConfidence [85 85 85 70 70 70 70] +totalPrecipitationPast6Hours 0.0 +totalPrecipitationPast6Hours->percentConfidence 70 +totalSnowDepth 0.44 +totalSnowDepth->percentConfidence 70 +centre 98 +generatingApplication 1 diff --git a/tests/sample-data/synop_multi_subset.attributes b/tests/sample-data/synop_multi_subset.attributes new file mode 100644 index 00000000..739bf764 --- /dev/null +++ b/tests/sample-data/synop_multi_subset.attributes @@ -0,0 +1,266 @@ +messageNumber: 1 +blockNumber->code: '001001' +blockNumber->units: Numeric +blockNumber->scale: 0 +blockNumber->reference: 0 +blockNumber->width: 7 +stationNumber->code: '001002' +stationNumber->units: Numeric +stationNumber->scale: 0 +stationNumber->reference: 0 +stationNumber->width: 10 +stationOrSiteName->code: '001015' +stationOrSiteName->units: CCITT IA5 +stationOrSiteName->scale: 0 +stationOrSiteName->reference: 0 +stationOrSiteName->width: 160 +stationType->code: '002001' +stationType->units: CODE TABLE +stationType->scale: 0 +stationType->reference: 0 +stationType->width: 2 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +heightOfStationGroundAboveMeanSeaLevel->code: '007030' +heightOfStationGroundAboveMeanSeaLevel->units: m +heightOfStationGroundAboveMeanSeaLevel->scale: 1 +heightOfStationGroundAboveMeanSeaLevel->reference: -4000 +heightOfStationGroundAboveMeanSeaLevel->width: 17 +heightOfBarometerAboveMeanSeaLevel->code: '007031' +heightOfBarometerAboveMeanSeaLevel->units: m +heightOfBarometerAboveMeanSeaLevel->scale: 1 +heightOfBarometerAboveMeanSeaLevel->reference: -4000 +heightOfBarometerAboveMeanSeaLevel->width: 17 +nonCoordinatePressure->code: '010004' +nonCoordinatePressure->units: Pa +nonCoordinatePressure->scale: -1 +nonCoordinatePressure->reference: 0 +nonCoordinatePressure->width: 14 +pressureReducedToMeanSeaLevel->code: '010051' +pressureReducedToMeanSeaLevel->units: Pa +pressureReducedToMeanSeaLevel->scale: -1 +pressureReducedToMeanSeaLevel->reference: 0 +pressureReducedToMeanSeaLevel->width: 14 +3HourPressureChange->code: '010061' +3HourPressureChange->units: Pa +3HourPressureChange->scale: -1 +3HourPressureChange->reference: -500 +3HourPressureChange->width: 10 +characteristicOfPressureTendency->code: '010063' +characteristicOfPressureTendency->units: CODE TABLE +characteristicOfPressureTendency->scale: 0 +characteristicOfPressureTendency->reference: 0 +characteristicOfPressureTendency->width: 4 +24HourPressureChange->code: '010062' +24HourPressureChange->units: Pa +24HourPressureChange->scale: -1 +24HourPressureChange->reference: -1000 +24HourPressureChange->width: 11 +pressure->code: '007004' +pressure->units: Pa +pressure->scale: -1 +pressure->reference: 0 +pressure->width: 14 +nonCoordinateGeopotentialHeight->code: '010009' +nonCoordinateGeopotentialHeight->units: gpm +nonCoordinateGeopotentialHeight->scale: 0 +nonCoordinateGeopotentialHeight->reference: -1000 +nonCoordinateGeopotentialHeight->width: 17 +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform->code: '007032' +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform->units: m +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform->scale: 2 +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform->reference: 0 +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform->width: 16 +airTemperature->code: '012101' +airTemperature->units: K +airTemperature->scale: 2 +airTemperature->reference: 0 +airTemperature->width: 16 +dewpointTemperature->code: '012103' +dewpointTemperature->units: K +dewpointTemperature->scale: 2 +dewpointTemperature->reference: 0 +dewpointTemperature->width: 16 +relativeHumidity->code: '013003' +relativeHumidity->units: % +relativeHumidity->scale: 0 +relativeHumidity->reference: 0 +relativeHumidity->width: 7 +horizontalVisibility->code: '020001' +horizontalVisibility->units: m +horizontalVisibility->scale: -1 +horizontalVisibility->reference: 0 +horizontalVisibility->width: 13 +totalPrecipitationPast24Hours->code: '013023' +totalPrecipitationPast24Hours->units: kg m-2 +totalPrecipitationPast24Hours->scale: 1 +totalPrecipitationPast24Hours->reference: -1 +totalPrecipitationPast24Hours->width: 14 +cloudCoverTotal->code: '020010' +cloudCoverTotal->units: % +cloudCoverTotal->scale: 0 +cloudCoverTotal->reference: 0 +cloudCoverTotal->width: 7 +verticalSignificanceSurfaceObservations->code: '008002' +verticalSignificanceSurfaceObservations->units: CODE TABLE +verticalSignificanceSurfaceObservations->scale: 0 +verticalSignificanceSurfaceObservations->reference: 0 +verticalSignificanceSurfaceObservations->width: 6 +cloudAmount->code: '020011' +cloudAmount->units: CODE TABLE +cloudAmount->scale: 0 +cloudAmount->reference: 0 +cloudAmount->width: 4 +heightOfBaseOfCloud->code: '020013' +heightOfBaseOfCloud->units: m +heightOfBaseOfCloud->scale: -1 +heightOfBaseOfCloud->reference: -40 +heightOfBaseOfCloud->width: 11 +cloudType->code: '020012' +cloudType->units: CODE TABLE +cloudType->scale: 0 +cloudType->reference: 0 +cloudType->width: 6 +delayedDescriptorReplicationFactor->code: '031001' +delayedDescriptorReplicationFactor->units: Numeric +delayedDescriptorReplicationFactor->scale: 0 +delayedDescriptorReplicationFactor->reference: 0 +delayedDescriptorReplicationFactor->width: 8 +shortDelayedDescriptorReplicationFactor->code: '031000' +shortDelayedDescriptorReplicationFactor->units: Numeric +shortDelayedDescriptorReplicationFactor->scale: 0 +shortDelayedDescriptorReplicationFactor->reference: 0 +shortDelayedDescriptorReplicationFactor->width: 1 +stateOfGround->code: '020062' +stateOfGround->units: CODE TABLE +stateOfGround->scale: 0 +stateOfGround->reference: 0 +stateOfGround->width: 5 +totalSnowDepth->code: '013013' +totalSnowDepth->units: m +totalSnowDepth->scale: 2 +totalSnowDepth->reference: -2 +totalSnowDepth->width: 16 +groundMinimumTemperaturePast12Hours->code: '012113' +groundMinimumTemperaturePast12Hours->units: K +groundMinimumTemperaturePast12Hours->scale: 2 +groundMinimumTemperaturePast12Hours->reference: 0 +groundMinimumTemperaturePast12Hours->width: 16 +presentWeather->code: '020003' +presentWeather->units: CODE TABLE +presentWeather->scale: 0 +presentWeather->reference: 0 +presentWeather->width: 9 +timePeriod->code: ['004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004025', '004025', '004025', '004024', '004025', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004025', '004025', '004025', '004024', '004025', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004025', '004025', '004025', '004024', '004025', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004025', '004025', '004025', '004024', '004025', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004025', '004025', '004025', '004024', '004025', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004025', '004025', '004025', '004024', '004025', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004025', '004025', '004025', '004024', '004025', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004025', '004025', '004025', '004024', '004025', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004025', '004025', '004025', '004024', '004025', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004025', '004025', '004025', '004024', '004025', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004025', '004025', '004025', '004024', '004025', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004024', '004025', '004025', '004025', '004024', '004025'] +timePeriod->units: ['h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'min', 'min', 'min', 'h', 'min', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'min', 'min', 'min', 'h', 'min', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'min', 'min', 'min', 'h', 'min', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'min', 'min', 'min', 'h', 'min', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'min', 'min', 'min', 'h', 'min', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'min', 'min', 'min', 'h', 'min', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'min', 'min', 'min', 'h', 'min', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'min', 'min', 'min', 'h', 'min', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'min', 'min', 'min', 'h', 'min', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'min', 'min', 'min', 'h', 'min', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'min', 'min', 'min', 'h', 'min', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'h', 'min', 'min', 'min', 'h', 'min'] +timePeriod->scale: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +timePeriod->reference: [-2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048, -2048] +timePeriod->width: [12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12] +pastWeather1->code: '020004' +pastWeather1->units: CODE TABLE +pastWeather1->scale: 0 +pastWeather1->reference: 0 +pastWeather1->width: 5 +pastWeather2->code: '020005' +pastWeather2->units: CODE TABLE +pastWeather2->scale: 0 +pastWeather2->reference: 0 +pastWeather2->width: 5 +totalSunshine->code: '014031' +totalSunshine->units: min +totalSunshine->scale: 0 +totalSunshine->reference: 0 +totalSunshine->width: 11 +totalPrecipitationOrTotalWaterEquivalent->code: '013011' +totalPrecipitationOrTotalWaterEquivalent->units: kg m-2 +totalPrecipitationOrTotalWaterEquivalent->scale: 1 +totalPrecipitationOrTotalWaterEquivalent->reference: -1 +totalPrecipitationOrTotalWaterEquivalent->width: 14 +maximumTemperatureAtHeightAndOverPeriodSpecified->code: '012111' +maximumTemperatureAtHeightAndOverPeriodSpecified->units: K +maximumTemperatureAtHeightAndOverPeriodSpecified->scale: 2 +maximumTemperatureAtHeightAndOverPeriodSpecified->reference: 0 +maximumTemperatureAtHeightAndOverPeriodSpecified->width: 16 +minimumTemperatureAtHeightAndOverPeriodSpecified->code: '012112' +minimumTemperatureAtHeightAndOverPeriodSpecified->units: K +minimumTemperatureAtHeightAndOverPeriodSpecified->scale: 2 +minimumTemperatureAtHeightAndOverPeriodSpecified->reference: 0 +minimumTemperatureAtHeightAndOverPeriodSpecified->width: 16 +instrumentationForWindMeasurement->code: '002002' +instrumentationForWindMeasurement->units: FLAG TABLE +instrumentationForWindMeasurement->scale: 0 +instrumentationForWindMeasurement->reference: 0 +instrumentationForWindMeasurement->width: 4 +timeSignificance->code: '008021' +timeSignificance->units: CODE TABLE +timeSignificance->scale: 0 +timeSignificance->reference: 0 +timeSignificance->width: 5 +windDirection->code: '011001' +windDirection->units: deg +windDirection->scale: 0 +windDirection->reference: 0 +windDirection->width: 9 +windSpeed->code: '011002' +windSpeed->units: m/s +windSpeed->scale: 1 +windSpeed->reference: 0 +windSpeed->width: 12 +maximumWindGustDirection->code: '011043' +maximumWindGustDirection->units: deg +maximumWindGustDirection->scale: 0 +maximumWindGustDirection->reference: 0 +maximumWindGustDirection->width: 9 +maximumWindGustSpeed->code: '011041' +maximumWindGustSpeed->units: m/s +maximumWindGustSpeed->scale: 1 +maximumWindGustSpeed->reference: 0 +maximumWindGustSpeed->width: 12 +typeOfInstrumentationForEvaporationMeasurement->code: '002004' +typeOfInstrumentationForEvaporationMeasurement->units: CODE TABLE +typeOfInstrumentationForEvaporationMeasurement->scale: 0 +typeOfInstrumentationForEvaporationMeasurement->reference: 0 +typeOfInstrumentationForEvaporationMeasurement->width: 4 +evaporation->code: '013033' +evaporation->units: kg m-2 +evaporation->scale: 1 +evaporation->reference: 0 +evaporation->width: 10 +maximumWindSpeed10MinuteMeanWind->code: '011042' +maximumWindSpeed10MinuteMeanWind->units: m/s +maximumWindSpeed10MinuteMeanWind->scale: 1 +maximumWindSpeed10MinuteMeanWind->reference: 0 +maximumWindSpeed10MinuteMeanWind->width: 12 diff --git a/tests/sample-data/synop_multi_subset.bufr b/tests/sample-data/synop_multi_subset.bufr new file mode 100644 index 0000000000000000000000000000000000000000..17195e3cbf52e5e792f447badbaaf2ef10784d55 GIT binary patch literal 1652 zcmb8veMnPL6aet^+?X~s7lxuKnhMUDA!Z+cZ6l-Ff(*m53{4riM93x~gt0Y?Y<*co ziS*?f(;0o4(jS#>W@KS1{ZR?kmXT%>X&|oD-OhdPy=Gyw^T&PXo_p?nkL|}@o4Y;- zL^>fr1VA3l#zF{mGSOl>2?Yo-Jk1tH1=_C|CJ6`yONooQ6N|%biy%Shaq=zR z#GoL=ZZZYQN}r`@guWs8c0$bzUDgXBrJu7*hzGC`P@gEX$r=-E=4MU=K3Np2UIk>fy$u`k-G(TNQuAZ!QU8TP z%c5wxOi}dAkK)$e<0D#I*McPRvymFLWtIku;zhcoR$dU~>G1gqMA5gocT)+L{6JAM zKv6V8_k1W)zle>p;`)|@#YMachDD+KVNNRPaa{caMdssHixWS>9~2sjV%I-VOkX%> zHO&!$6N)0n@lzF*nx0eb^Gi?^nKz}C3j8;jv;4x}D4-h`ozoy;QPgio6m{kEqi|f0 zzY*V;!CeIpl$;!Wr4YClnw=@CU)7DdszQPe>Xt5Vq`^fYk=b}{zl z#$vH9p+&vpHwk7I#r|bYi4!Z7Gkvs|3%n^lwe=U_)E^Yzorq$9MInKG^em^OAV5JA zH!}{>;OAE3r5e-D)5f|w(-D*9H0y&!alApbXu`GOBkkn^QB+?UAl XrU1bE2`}|7t09mk9;i~nY7Bs11Su1| literal 0 HcmV?d00001 diff --git a/tests/sample-data/synop_multi_subset.items b/tests/sample-data/synop_multi_subset.items new file mode 100644 index 00000000..2e6184ac --- /dev/null +++ b/tests/sample-data/synop_multi_subset.items @@ -0,0 +1,671 @@ +messageNumber 1 +edition 4 +masterTableNumber 0 +bufrHeaderCentre 88 +bufrHeaderSubCentre 0 +updateSequenceNumber 0 +dataCategory 0 +internationalDataSubCategory 0 +dataSubCategory 0 +masterTablesVersionNumber 14 +localTablesVersionNumber 0 +typicalYear 2015 +typicalMonth 1 +typicalDay 26 +typicalHour 10 +typicalMinute 0 +typicalSecond 0 +typicalDate 20150126 +typicalTime 100000 +numberOfSubsets 12 +observedData 1 +compressedData 0 +unexpandedDescriptors [307079 4025 11042] +subsetNumber 1 +blockNumber 1 +stationNumber 27 +stationOrSiteName TROMSO-HOLT +stationType 0 +year 2015 +month 1 +day 26 +hour 10 +minute 0 +latitude 69.65230000000001 +longitude 18.905700000000003 +heightOfStationGroundAboveMeanSeaLevel 20.0 +heightOfBarometerAboveMeanSeaLevel -- +nonCoordinatePressure -- +pressureReducedToMeanSeaLevel -- +3HourPressureChange -- +characteristicOfPressureTendency -- +24HourPressureChange -- +pressure -- +nonCoordinateGeopotentialHeight -- +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform [2.0 -- 2.0 -- 2.0 2.0 2.0 --] +airTemperature 276.45 +dewpointTemperature 271.39 +relativeHumidity 69 +horizontalVisibility -- +totalPrecipitationPast24Hours -- +cloudCoverTotal -- +verticalSignificanceSurfaceObservations [-- --] +cloudAmount [--] +heightOfBaseOfCloud [--] +cloudType [-- -- --] +delayedDescriptorReplicationFactor [0 0 0] +shortDelayedDescriptorReplicationFactor [0 0 0 0 0 0] +stateOfGround -- +totalSnowDepth -- +groundMinimumTemperaturePast12Hours -- +presentWeather -- +timePeriod [-- -- -- -- -1 -1 0 -1 0 -10 -- -- -- --] +pastWeather1 -- +pastWeather2 -- +totalSunshine [-- --] +totalPrecipitationOrTotalWaterEquivalent [-- 0.0] +maximumTemperatureAtHeightAndOverPeriodSpecified 276.55 +minimumTemperatureAtHeightAndOverPeriodSpecified 276.25 +instrumentationForWindMeasurement 8 +timeSignificance [2 --] +windDirection -- +windSpeed -- +maximumWindGustDirection [-- --] +maximumWindGustSpeed [-- --] +typeOfInstrumentationForEvaporationMeasurement -- +evaporation -- +maximumWindSpeed10MinuteMeanWind -- +subsetNumber 2 +blockNumber 1 +stationNumber 84 +stationOrSiteName PASVIK +stationType 0 +year 2015 +month 1 +day 26 +hour 10 +minute 0 +latitude 69.4552 +longitude 30.041000000000004 +heightOfStationGroundAboveMeanSeaLevel 27.0 +heightOfBarometerAboveMeanSeaLevel -- +nonCoordinatePressure -- +pressureReducedToMeanSeaLevel -- +3HourPressureChange -- +characteristicOfPressureTendency -- +24HourPressureChange -- +pressure -- +nonCoordinateGeopotentialHeight -- +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform [2.0 -- 2.0 -- 2.0 2.0 10.0 --] +airTemperature 266.55 +dewpointTemperature 264.83 +relativeHumidity 86 +horizontalVisibility -- +totalPrecipitationPast24Hours -- +cloudCoverTotal -- +verticalSignificanceSurfaceObservations [-- --] +cloudAmount [--] +heightOfBaseOfCloud [--] +cloudType [-- -- --] +delayedDescriptorReplicationFactor [0 0 0] +shortDelayedDescriptorReplicationFactor [0 0 0 0 0 0] +stateOfGround -- +totalSnowDepth -- +groundMinimumTemperaturePast12Hours -- +presentWeather -- +timePeriod [-- -- -- -- -1 -1 0 -1 0 -10 -- -- -- --] +pastWeather1 -- +pastWeather2 -- +totalSunshine [-- --] +totalPrecipitationOrTotalWaterEquivalent [-- 0.0] +maximumTemperatureAtHeightAndOverPeriodSpecified 266.55 +minimumTemperatureAtHeightAndOverPeriodSpecified 265.45 +instrumentationForWindMeasurement 8 +timeSignificance [2 --] +windDirection -- +windSpeed -- +maximumWindGustDirection [-- --] +maximumWindGustSpeed [-- --] +typeOfInstrumentationForEvaporationMeasurement -- +evaporation -- +maximumWindSpeed10MinuteMeanWind -- +subsetNumber 3 +blockNumber 1 +stationNumber 270 +stationOrSiteName KVITHAMAR +stationType 0 +year 2015 +month 1 +day 26 +hour 10 +minute 0 +latitude 63.488200000000006 +longitude 10.8795 +heightOfStationGroundAboveMeanSeaLevel 40.0 +heightOfBarometerAboveMeanSeaLevel -- +nonCoordinatePressure -- +pressureReducedToMeanSeaLevel -- +3HourPressureChange -- +characteristicOfPressureTendency -- +24HourPressureChange -- +pressure -- +nonCoordinateGeopotentialHeight -- +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform [2.0 -- 2.0 -- 2.0 2.0 2.0 --] +airTemperature 275.25 +dewpointTemperature 273.18 +relativeHumidity 86 +horizontalVisibility -- +totalPrecipitationPast24Hours -- +cloudCoverTotal -- +verticalSignificanceSurfaceObservations [-- --] +cloudAmount [--] +heightOfBaseOfCloud [--] +cloudType [-- -- --] +delayedDescriptorReplicationFactor [0 0 0] +shortDelayedDescriptorReplicationFactor [0 0 0 0 0 0] +stateOfGround -- +totalSnowDepth -- +groundMinimumTemperaturePast12Hours -- +presentWeather -- +timePeriod [-- -- -- -- -1 -1 0 -1 0 -10 -- -- -- --] +pastWeather1 -- +pastWeather2 -- +totalSunshine [-- --] +totalPrecipitationOrTotalWaterEquivalent [-- 0.0] +maximumTemperatureAtHeightAndOverPeriodSpecified 275.65000000000003 +minimumTemperatureAtHeightAndOverPeriodSpecified 275.15000000000003 +instrumentationForWindMeasurement 8 +timeSignificance [2 --] +windDirection -- +windSpeed -- +maximumWindGustDirection [-- --] +maximumWindGustSpeed [-- --] +typeOfInstrumentationForEvaporationMeasurement -- +evaporation -- +maximumWindSpeed10MinuteMeanWind -- +subsetNumber 4 +blockNumber 1 +stationNumber 272 +stationOrSiteName FROSTA +stationType 0 +year 2015 +month 1 +day 26 +hour 10 +minute 0 +latitude 63.56570000000001 +longitude 10.694 +heightOfStationGroundAboveMeanSeaLevel 70.0 +heightOfBarometerAboveMeanSeaLevel -- +nonCoordinatePressure -- +pressureReducedToMeanSeaLevel -- +3HourPressureChange -- +characteristicOfPressureTendency -- +24HourPressureChange -- +pressure -- +nonCoordinateGeopotentialHeight -- +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform [2.0 -- -- -- -- 2.0 2.0 --] +airTemperature 276.25 +dewpointTemperature 274.26 +relativeHumidity 87 +horizontalVisibility -- +totalPrecipitationPast24Hours -- +cloudCoverTotal -- +verticalSignificanceSurfaceObservations [-- --] +cloudAmount [--] +heightOfBaseOfCloud [--] +cloudType [-- -- --] +delayedDescriptorReplicationFactor [0 0 0] +shortDelayedDescriptorReplicationFactor [0 0 0 0 0 0] +stateOfGround -- +totalSnowDepth -- +groundMinimumTemperaturePast12Hours -- +presentWeather -- +timePeriod [-- -- -- -- -- -1 0 -1 0 -10 -- -- -- --] +pastWeather1 -- +pastWeather2 -- +totalSunshine [-- --] +totalPrecipitationOrTotalWaterEquivalent [-- --] +maximumTemperatureAtHeightAndOverPeriodSpecified 276.25 +minimumTemperatureAtHeightAndOverPeriodSpecified 275.85 +instrumentationForWindMeasurement 8 +timeSignificance [2 --] +windDirection -- +windSpeed -- +maximumWindGustDirection [-- --] +maximumWindGustSpeed [-- --] +typeOfInstrumentationForEvaporationMeasurement -- +evaporation -- +maximumWindSpeed10MinuteMeanWind -- +subsetNumber 5 +blockNumber 1 +stationNumber 308 +stationOrSiteName FURUNESET +stationType 0 +year 2015 +month 1 +day 26 +hour 10 +minute 0 +latitude 61.29280000000001 +longitude 5.044300000000001 +heightOfStationGroundAboveMeanSeaLevel 7.0 +heightOfBarometerAboveMeanSeaLevel -- +nonCoordinatePressure -- +pressureReducedToMeanSeaLevel -- +3HourPressureChange -- +characteristicOfPressureTendency -- +24HourPressureChange -- +pressure -- +nonCoordinateGeopotentialHeight -- +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform [2.0 -- 2.0 -- 2.0 2.0 2.0 --] +airTemperature 276.85 +dewpointTemperature 274.91 +relativeHumidity 87 +horizontalVisibility -- +totalPrecipitationPast24Hours -- +cloudCoverTotal -- +verticalSignificanceSurfaceObservations [-- --] +cloudAmount [--] +heightOfBaseOfCloud [--] +cloudType [-- -- --] +delayedDescriptorReplicationFactor [0 0 0] +shortDelayedDescriptorReplicationFactor [0 0 0 0 0 0] +stateOfGround -- +totalSnowDepth -- +groundMinimumTemperaturePast12Hours -- +presentWeather -- +timePeriod [-- -- -- -- -1 -1 0 -1 0 -10 -- -- -- --] +pastWeather1 -- +pastWeather2 -- +totalSunshine [-- --] +totalPrecipitationOrTotalWaterEquivalent [-- 2.5] +maximumTemperatureAtHeightAndOverPeriodSpecified 278.15000000000003 +minimumTemperatureAtHeightAndOverPeriodSpecified 276.35 +instrumentationForWindMeasurement 8 +timeSignificance [2 --] +windDirection -- +windSpeed -- +maximumWindGustDirection [-- --] +maximumWindGustSpeed [-- --] +typeOfInstrumentationForEvaporationMeasurement -- +evaporation -- +maximumWindSpeed10MinuteMeanWind -- +subsetNumber 6 +blockNumber 1 +stationNumber 371 +stationOrSiteName LOKEN I VOLBU +stationType 0 +year 2015 +month 1 +day 26 +hour 10 +minute 0 +latitude 61.12200000000001 +longitude 9.063 +heightOfStationGroundAboveMeanSeaLevel 521.0 +heightOfBarometerAboveMeanSeaLevel -- +nonCoordinatePressure -- +pressureReducedToMeanSeaLevel -- +3HourPressureChange -- +characteristicOfPressureTendency -- +24HourPressureChange -- +pressure -- +nonCoordinateGeopotentialHeight -- +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform [2.0 -- 2.0 -- 2.0 2.0 2.0 --] +airTemperature 265.35 +dewpointTemperature 264.05 +relativeHumidity 89 +horizontalVisibility -- +totalPrecipitationPast24Hours -- +cloudCoverTotal -- +verticalSignificanceSurfaceObservations [-- --] +cloudAmount [--] +heightOfBaseOfCloud [--] +cloudType [-- -- --] +delayedDescriptorReplicationFactor [0 0 0] +shortDelayedDescriptorReplicationFactor [0 0 0 0 0 0] +stateOfGround -- +totalSnowDepth -- +groundMinimumTemperaturePast12Hours -- +presentWeather -- +timePeriod [-- -- -- -- -1 -1 0 -1 0 -10 -- -- -- --] +pastWeather1 -- +pastWeather2 -- +totalSunshine [-- --] +totalPrecipitationOrTotalWaterEquivalent [-- 0.0] +maximumTemperatureAtHeightAndOverPeriodSpecified 265.85 +minimumTemperatureAtHeightAndOverPeriodSpecified 265.35 +instrumentationForWindMeasurement 8 +timeSignificance [2 --] +windDirection -- +windSpeed -- +maximumWindGustDirection [-- --] +maximumWindGustSpeed [-- --] +typeOfInstrumentationForEvaporationMeasurement -- +evaporation -- +maximumWindSpeed10MinuteMeanWind -- +subsetNumber 7 +blockNumber 1 +stationNumber 381 +stationOrSiteName APELSVOLL +stationType 0 +year 2015 +month 1 +day 26 +hour 10 +minute 0 +latitude 60.7002 +longitude 10.8695 +heightOfStationGroundAboveMeanSeaLevel 264.0 +heightOfBarometerAboveMeanSeaLevel -- +nonCoordinatePressure -- +pressureReducedToMeanSeaLevel -- +3HourPressureChange -- +characteristicOfPressureTendency -- +24HourPressureChange -- +pressure -- +nonCoordinateGeopotentialHeight -- +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform [2.0 -- 2.0 -- 2.0 2.0 2.0 --] +airTemperature 270.15 +dewpointTemperature 269.53000000000003 +relativeHumidity 95 +horizontalVisibility -- +totalPrecipitationPast24Hours -- +cloudCoverTotal -- +verticalSignificanceSurfaceObservations [-- --] +cloudAmount [--] +heightOfBaseOfCloud [--] +cloudType [-- -- --] +delayedDescriptorReplicationFactor [0 0 0] +shortDelayedDescriptorReplicationFactor [0 0 0 0 0 0] +stateOfGround -- +totalSnowDepth -- +groundMinimumTemperaturePast12Hours -- +presentWeather -- +timePeriod [-- -- -- -- -1 -1 0 -1 0 -10 -- -- -- --] +pastWeather1 -- +pastWeather2 -- +totalSunshine [-- --] +totalPrecipitationOrTotalWaterEquivalent [-- 0.0] +maximumTemperatureAtHeightAndOverPeriodSpecified 270.25 +minimumTemperatureAtHeightAndOverPeriodSpecified 269.95 +instrumentationForWindMeasurement 8 +timeSignificance [2 --] +windDirection -- +windSpeed -- +maximumWindGustDirection [-- --] +maximumWindGustSpeed [-- --] +typeOfInstrumentationForEvaporationMeasurement -- +evaporation -- +maximumWindSpeed10MinuteMeanWind -- +subsetNumber 8 +blockNumber 1 +stationNumber 382 +stationOrSiteName KISE +stationType 0 +year 2015 +month 1 +day 26 +hour 10 +minute 0 +latitude 60.773300000000006 +longitude 10.8055 +heightOfStationGroundAboveMeanSeaLevel 128.0 +heightOfBarometerAboveMeanSeaLevel -- +nonCoordinatePressure -- +pressureReducedToMeanSeaLevel -- +3HourPressureChange -- +characteristicOfPressureTendency -- +24HourPressureChange -- +pressure -- +nonCoordinateGeopotentialHeight -- +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform [2.0 -- 2.0 -- 2.0 2.0 2.0 --] +airTemperature 270.45 +dewpointTemperature 269.47 +relativeHumidity 92 +horizontalVisibility -- +totalPrecipitationPast24Hours -- +cloudCoverTotal -- +verticalSignificanceSurfaceObservations [-- --] +cloudAmount [--] +heightOfBaseOfCloud [--] +cloudType [-- -- --] +delayedDescriptorReplicationFactor [0 0 0] +shortDelayedDescriptorReplicationFactor [0 0 0 0 0 0] +stateOfGround -- +totalSnowDepth -- +groundMinimumTemperaturePast12Hours -- +presentWeather -- +timePeriod [-- -- -- -- -1 -1 0 -1 0 -10 -- -- -- --] +pastWeather1 -- +pastWeather2 -- +totalSunshine [-- --] +totalPrecipitationOrTotalWaterEquivalent [-- 0.0] +maximumTemperatureAtHeightAndOverPeriodSpecified 270.45 +minimumTemperatureAtHeightAndOverPeriodSpecified 270.15 +instrumentationForWindMeasurement 8 +timeSignificance [2 --] +windDirection -- +windSpeed -- +maximumWindGustDirection [-- --] +maximumWindGustSpeed [-- --] +typeOfInstrumentationForEvaporationMeasurement -- +evaporation -- +maximumWindSpeed10MinuteMeanWind -- +subsetNumber 9 +blockNumber 1 +stationNumber 387 +stationOrSiteName FAVANG +stationType 0 +year 2015 +month 1 +day 26 +hour 10 +minute 0 +latitude 61.455000000000005 +longitude 10.1857 +heightOfStationGroundAboveMeanSeaLevel 200.0 +heightOfBarometerAboveMeanSeaLevel -- +nonCoordinatePressure -- +pressureReducedToMeanSeaLevel -- +3HourPressureChange -- +characteristicOfPressureTendency -- +24HourPressureChange -- +pressure -- +nonCoordinateGeopotentialHeight -- +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform [2.0 -- 2.0 -- 2.0 2.0 -- --] +airTemperature 267.55 +dewpointTemperature 266.47 +relativeHumidity 91 +horizontalVisibility -- +totalPrecipitationPast24Hours -- +cloudCoverTotal -- +verticalSignificanceSurfaceObservations [-- --] +cloudAmount [--] +heightOfBaseOfCloud [--] +cloudType [-- -- --] +delayedDescriptorReplicationFactor [0 0 0] +shortDelayedDescriptorReplicationFactor [0 0 0 0 0 0] +stateOfGround -- +totalSnowDepth -- +groundMinimumTemperaturePast12Hours -- +presentWeather -- +timePeriod [-- -- -- -- -1 -1 0 -1 0 -10 -- -- -- --] +pastWeather1 -- +pastWeather2 -- +totalSunshine [-- --] +totalPrecipitationOrTotalWaterEquivalent [-- 0.0] +maximumTemperatureAtHeightAndOverPeriodSpecified 267.85 +minimumTemperatureAtHeightAndOverPeriodSpecified 267.45 +instrumentationForWindMeasurement 8 +timeSignificance [2 --] +windDirection -- +windSpeed -- +maximumWindGustDirection [-- --] +maximumWindGustSpeed [-- --] +typeOfInstrumentationForEvaporationMeasurement -- +evaporation -- +maximumWindSpeed10MinuteMeanWind -- +subsetNumber 10 +blockNumber 1 +stationNumber 413 +stationOrSiteName SAERHEIM +stationType 0 +year 2015 +month 1 +day 26 +hour 10 +minute 0 +latitude 58.76050000000001 +longitude 5.6505 +heightOfStationGroundAboveMeanSeaLevel 87.0 +heightOfBarometerAboveMeanSeaLevel -- +nonCoordinatePressure -- +pressureReducedToMeanSeaLevel -- +3HourPressureChange -- +characteristicOfPressureTendency -- +24HourPressureChange -- +pressure -- +nonCoordinateGeopotentialHeight -- +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform [2.0 -- 2.0 -- 2.0 2.0 2.0 --] +airTemperature 277.45 +dewpointTemperature 275.85 +relativeHumidity 89 +horizontalVisibility -- +totalPrecipitationPast24Hours -- +cloudCoverTotal -- +verticalSignificanceSurfaceObservations [-- --] +cloudAmount [--] +heightOfBaseOfCloud [--] +cloudType [-- -- --] +delayedDescriptorReplicationFactor [0 0 0] +shortDelayedDescriptorReplicationFactor [0 0 0 0 0 0] +stateOfGround -- +totalSnowDepth -- +groundMinimumTemperaturePast12Hours -- +presentWeather -- +timePeriod [-- -- -- -- -1 -1 0 -1 0 -10 -- -60 -- -60] +pastWeather1 -- +pastWeather2 -- +totalSunshine [-- --] +totalPrecipitationOrTotalWaterEquivalent [-- 0.0] +maximumTemperatureAtHeightAndOverPeriodSpecified 277.75 +minimumTemperatureAtHeightAndOverPeriodSpecified 277.15000000000003 +instrumentationForWindMeasurement 8 +timeSignificance [2 --] +windDirection 274 +windSpeed 2.6 +maximumWindGustDirection [-- 312] +maximumWindGustSpeed [-- 4.4] +typeOfInstrumentationForEvaporationMeasurement -- +evaporation -- +maximumWindSpeed10MinuteMeanWind 2.8000000000000003 +subsetNumber 11 +blockNumber 1 +stationNumber 464 +stationOrSiteName LANDVIK +stationType 0 +year 2015 +month 1 +day 26 +hour 10 +minute 0 +latitude 58.34 +longitude 8.5225 +heightOfStationGroundAboveMeanSeaLevel 6.0 +heightOfBarometerAboveMeanSeaLevel -- +nonCoordinatePressure -- +pressureReducedToMeanSeaLevel -- +3HourPressureChange -- +characteristicOfPressureTendency -- +24HourPressureChange -- +pressure -- +nonCoordinateGeopotentialHeight -- +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform [2.0 -- 2.0 -- 2.0 2.0 2.0 --] +airTemperature 275.95 +dewpointTemperature 275.52 +relativeHumidity 97 +horizontalVisibility -- +totalPrecipitationPast24Hours -- +cloudCoverTotal -- +verticalSignificanceSurfaceObservations [-- --] +cloudAmount [--] +heightOfBaseOfCloud [--] +cloudType [-- -- --] +delayedDescriptorReplicationFactor [0 0 0] +shortDelayedDescriptorReplicationFactor [0 0 0 0 0 0] +stateOfGround -- +totalSnowDepth -- +groundMinimumTemperaturePast12Hours -- +presentWeather -- +timePeriod [-- -- -- -- -1 -1 0 -1 0 -10 -- -60 -- -60] +pastWeather1 -- +pastWeather2 -- +totalSunshine [-- --] +totalPrecipitationOrTotalWaterEquivalent [-- 0.0] +maximumTemperatureAtHeightAndOverPeriodSpecified 275.95 +minimumTemperatureAtHeightAndOverPeriodSpecified 274.95 +instrumentationForWindMeasurement 8 +timeSignificance [2 --] +windDirection 272 +windSpeed 0.6000000000000001 +maximumWindGustDirection [-- 47] +maximumWindGustSpeed [-- 1.7000000000000002] +typeOfInstrumentationForEvaporationMeasurement -- +evaporation -- +maximumWindSpeed10MinuteMeanWind 1.0 +subsetNumber 12 +blockNumber 1 +stationNumber 485 +stationOrSiteName SANDE-GALLEBERG +stationType 0 +year 2015 +month 1 +day 26 +hour 10 +minute 0 +latitude 59.6193 +longitude 10.215000000000002 +heightOfStationGroundAboveMeanSeaLevel 60.0 +heightOfBarometerAboveMeanSeaLevel -- +nonCoordinatePressure -- +pressureReducedToMeanSeaLevel -- +3HourPressureChange -- +characteristicOfPressureTendency -- +24HourPressureChange -- +pressure -- +nonCoordinateGeopotentialHeight -- +heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform [2.0 -- 2.0 -- 2.0 2.0 10.0 --] +airTemperature 275.45 +dewpointTemperature 274.90000000000003 +relativeHumidity 96 +horizontalVisibility -- +totalPrecipitationPast24Hours -- +cloudCoverTotal -- +verticalSignificanceSurfaceObservations [-- --] +cloudAmount [--] +heightOfBaseOfCloud [--] +cloudType [-- -- --] +delayedDescriptorReplicationFactor [0 0 0] +shortDelayedDescriptorReplicationFactor [0 0 0 0 0 0] +stateOfGround -- +totalSnowDepth -- +groundMinimumTemperaturePast12Hours -- +presentWeather -- +timePeriod [-- -- -- -- -1 -1 0 -1 0 -10 -- -60 -- -60] +pastWeather1 -- +pastWeather2 -- +totalSunshine [-- --] +totalPrecipitationOrTotalWaterEquivalent [-- 0.0] +maximumTemperatureAtHeightAndOverPeriodSpecified 275.75 +minimumTemperatureAtHeightAndOverPeriodSpecified 275.05 +instrumentationForWindMeasurement 8 +timeSignificance [2 --] +windDirection 0 +windSpeed 0.0 +maximumWindGustDirection [-- 333] +maximumWindGustSpeed [-- 0.0] +typeOfInstrumentationForEvaporationMeasurement -- +evaporation -- +maximumWindSpeed10MinuteMeanWind 0.0 diff --git a/tests/sample-data/temp.attributes b/tests/sample-data/temp.attributes new file mode 100644 index 00000000..d87eec75 --- /dev/null +++ b/tests/sample-data/temp.attributes @@ -0,0 +1,743 @@ +messageNumber: 1 +blockNumber->code: '001001' +blockNumber->units: Numeric +blockNumber->scale: 0 +blockNumber->reference: 0 +blockNumber->width: 7 +blockNumber->percentConfidence->code: '033007' +blockNumber->percentConfidence->units: % +blockNumber->percentConfidence->scale: 0 +blockNumber->percentConfidence->reference: 0 +blockNumber->percentConfidence->width: 7 +stationNumber->code: '001002' +stationNumber->units: Numeric +stationNumber->scale: 0 +stationNumber->reference: 0 +stationNumber->width: 10 +stationNumber->percentConfidence->code: '033007' +stationNumber->percentConfidence->units: % +stationNumber->percentConfidence->scale: 0 +stationNumber->percentConfidence->reference: 0 +stationNumber->percentConfidence->width: 7 +radiosondeType->code: '002011' +radiosondeType->units: CODE TABLE +radiosondeType->scale: 0 +radiosondeType->reference: 0 +radiosondeType->width: 8 +radiosondeType->percentConfidence->code: '033007' +radiosondeType->percentConfidence->units: % +radiosondeType->percentConfidence->scale: 0 +radiosondeType->percentConfidence->reference: 0 +radiosondeType->percentConfidence->width: 7 +radiosondeComputationalMethod->code: '002012' +radiosondeComputationalMethod->units: CODE TABLE +radiosondeComputationalMethod->scale: 0 +radiosondeComputationalMethod->reference: 0 +radiosondeComputationalMethod->width: 4 +radiosondeComputationalMethod->percentConfidence->code: '033007' +radiosondeComputationalMethod->percentConfidence->units: % +radiosondeComputationalMethod->percentConfidence->scale: 0 +radiosondeComputationalMethod->percentConfidence->reference: 0 +radiosondeComputationalMethod->percentConfidence->width: 7 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +year->percentConfidence->code: '033007' +year->percentConfidence->units: % +year->percentConfidence->scale: 0 +year->percentConfidence->reference: 0 +year->percentConfidence->width: 7 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +month->percentConfidence->code: '033007' +month->percentConfidence->units: % +month->percentConfidence->scale: 0 +month->percentConfidence->reference: 0 +month->percentConfidence->width: 7 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +day->percentConfidence->code: '033007' +day->percentConfidence->units: % +day->percentConfidence->scale: 0 +day->percentConfidence->reference: 0 +day->percentConfidence->width: 7 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +hour->percentConfidence->code: '033007' +hour->percentConfidence->units: % +hour->percentConfidence->scale: 0 +hour->percentConfidence->reference: 0 +hour->percentConfidence->width: 7 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +minute->percentConfidence->code: '033007' +minute->percentConfidence->units: % +minute->percentConfidence->scale: 0 +minute->percentConfidence->reference: 0 +minute->percentConfidence->width: 7 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +latitude->percentConfidence->code: '033007' +latitude->percentConfidence->units: % +latitude->percentConfidence->scale: 0 +latitude->percentConfidence->reference: 0 +latitude->percentConfidence->width: 7 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +longitude->percentConfidence->code: '033007' +longitude->percentConfidence->units: % +longitude->percentConfidence->scale: 0 +longitude->percentConfidence->reference: 0 +longitude->percentConfidence->width: 7 +heightOfStation->code: '007001' +heightOfStation->units: m +heightOfStation->scale: 0 +heightOfStation->reference: -400 +heightOfStation->width: 15 +heightOfStation->percentConfidence->code: '033007' +heightOfStation->percentConfidence->units: % +heightOfStation->percentConfidence->scale: 0 +heightOfStation->percentConfidence->reference: 0 +heightOfStation->percentConfidence->width: 7 +cloudCoverTotal->code: '020010' +cloudCoverTotal->units: % +cloudCoverTotal->scale: 0 +cloudCoverTotal->reference: 0 +cloudCoverTotal->width: 7 +verticalSignificanceSurfaceObservations->code: '008002' +verticalSignificanceSurfaceObservations->units: CODE TABLE +verticalSignificanceSurfaceObservations->scale: 0 +verticalSignificanceSurfaceObservations->reference: 0 +verticalSignificanceSurfaceObservations->width: 6 +verticalSignificanceSurfaceObservations->percentConfidence->code: '033007' +verticalSignificanceSurfaceObservations->percentConfidence->units: % +verticalSignificanceSurfaceObservations->percentConfidence->scale: 0 +verticalSignificanceSurfaceObservations->percentConfidence->reference: 0 +verticalSignificanceSurfaceObservations->percentConfidence->width: 7 +cloudAmount->code: '020011' +cloudAmount->units: CODE TABLE +cloudAmount->scale: 0 +cloudAmount->reference: 0 +cloudAmount->width: 4 +cloudAmount->percentConfidence->code: '033007' +cloudAmount->percentConfidence->units: % +cloudAmount->percentConfidence->scale: 0 +cloudAmount->percentConfidence->reference: 0 +cloudAmount->percentConfidence->width: 7 +heightOfBaseOfCloud->code: '020013' +heightOfBaseOfCloud->units: m +heightOfBaseOfCloud->scale: -1 +heightOfBaseOfCloud->reference: -40 +heightOfBaseOfCloud->width: 11 +heightOfBaseOfCloud->percentConfidence->code: '033007' +heightOfBaseOfCloud->percentConfidence->units: % +heightOfBaseOfCloud->percentConfidence->scale: 0 +heightOfBaseOfCloud->percentConfidence->reference: 0 +heightOfBaseOfCloud->percentConfidence->width: 7 +cloudType->code: '020012' +cloudType->units: CODE TABLE +cloudType->scale: 0 +cloudType->reference: 0 +cloudType->width: 6 +cloudType->percentConfidence->code: '033007' +cloudType->percentConfidence->units: % +cloudType->percentConfidence->scale: 0 +cloudType->percentConfidence->reference: 0 +cloudType->percentConfidence->width: 7 +delayedDescriptorReplicationFactor->code: '031001' +delayedDescriptorReplicationFactor->units: Numeric +delayedDescriptorReplicationFactor->scale: 0 +delayedDescriptorReplicationFactor->reference: 0 +delayedDescriptorReplicationFactor->width: 8 +delayedDescriptorReplicationFactor->percentConfidence->code: '033007' +delayedDescriptorReplicationFactor->percentConfidence->units: % +delayedDescriptorReplicationFactor->percentConfidence->scale: 0 +delayedDescriptorReplicationFactor->percentConfidence->reference: 0 +delayedDescriptorReplicationFactor->percentConfidence->width: 7 +pressure->code: '007004' +pressure->units: Pa +pressure->scale: -1 +pressure->reference: 0 +pressure->width: 14 +pressure->percentConfidence->code: '033007' +pressure->percentConfidence->units: % +pressure->percentConfidence->scale: 0 +pressure->percentConfidence->reference: 0 +pressure->percentConfidence->width: 7 +verticalSoundingSignificance->code: '008001' +verticalSoundingSignificance->units: FLAG TABLE +verticalSoundingSignificance->scale: 0 +verticalSoundingSignificance->reference: 0 +verticalSoundingSignificance->width: 7 +verticalSoundingSignificance->percentConfidence->code: '033007' +verticalSoundingSignificance->percentConfidence->units: % +verticalSoundingSignificance->percentConfidence->scale: 0 +verticalSoundingSignificance->percentConfidence->reference: 0 +verticalSoundingSignificance->percentConfidence->width: 7 +nonCoordinateGeopotential->code: '010003' +nonCoordinateGeopotential->units: m2 s-2 +nonCoordinateGeopotential->scale: -1 +nonCoordinateGeopotential->reference: -400 +nonCoordinateGeopotential->width: 17 +nonCoordinateGeopotential->percentConfidence->code: '033007' +nonCoordinateGeopotential->percentConfidence->units: % +nonCoordinateGeopotential->percentConfidence->scale: 0 +nonCoordinateGeopotential->percentConfidence->reference: 0 +nonCoordinateGeopotential->percentConfidence->width: 7 +airTemperature->code: '012001' +airTemperature->units: K +airTemperature->scale: 1 +airTemperature->reference: 0 +airTemperature->width: 12 +airTemperature->percentConfidence->code: '033007' +airTemperature->percentConfidence->units: % +airTemperature->percentConfidence->scale: 0 +airTemperature->percentConfidence->reference: 0 +airTemperature->percentConfidence->width: 7 +dewpointTemperature->code: '012003' +dewpointTemperature->units: K +dewpointTemperature->scale: 1 +dewpointTemperature->reference: 0 +dewpointTemperature->width: 12 +dewpointTemperature->percentConfidence->code: '033007' +dewpointTemperature->percentConfidence->units: % +dewpointTemperature->percentConfidence->scale: 0 +dewpointTemperature->percentConfidence->reference: 0 +dewpointTemperature->percentConfidence->width: 7 +windDirection->code: '011001' +windDirection->units: deg +windDirection->scale: 0 +windDirection->reference: 0 +windDirection->width: 9 +windDirection->percentConfidence->code: '033007' +windDirection->percentConfidence->units: % +windDirection->percentConfidence->scale: 0 +windDirection->percentConfidence->reference: 0 +windDirection->percentConfidence->width: 7 +windSpeed->code: '011002' +windSpeed->units: m/s +windSpeed->scale: 1 +windSpeed->reference: 0 +windSpeed->width: 12 +windSpeed->percentConfidence->code: '033007' +windSpeed->percentConfidence->units: % +windSpeed->percentConfidence->scale: 0 +windSpeed->percentConfidence->reference: 0 +windSpeed->percentConfidence->width: 7 +extendedDelayedDescriptorReplicationFactor->code: '031002' +extendedDelayedDescriptorReplicationFactor->units: Numeric +extendedDelayedDescriptorReplicationFactor->scale: 0 +extendedDelayedDescriptorReplicationFactor->reference: 0 +extendedDelayedDescriptorReplicationFactor->width: 16 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 +messageNumber: 2 +blockNumber->code: '001001' +blockNumber->units: Numeric +blockNumber->scale: 0 +blockNumber->reference: 0 +blockNumber->width: 7 +blockNumber->percentConfidence->code: '033007' +blockNumber->percentConfidence->units: % +blockNumber->percentConfidence->scale: 0 +blockNumber->percentConfidence->reference: 0 +blockNumber->percentConfidence->width: 7 +stationNumber->code: '001002' +stationNumber->units: Numeric +stationNumber->scale: 0 +stationNumber->reference: 0 +stationNumber->width: 10 +stationNumber->percentConfidence->code: '033007' +stationNumber->percentConfidence->units: % +stationNumber->percentConfidence->scale: 0 +stationNumber->percentConfidence->reference: 0 +stationNumber->percentConfidence->width: 7 +radiosondeType->code: '002011' +radiosondeType->units: CODE TABLE +radiosondeType->scale: 0 +radiosondeType->reference: 0 +radiosondeType->width: 8 +radiosondeType->percentConfidence->code: '033007' +radiosondeType->percentConfidence->units: % +radiosondeType->percentConfidence->scale: 0 +radiosondeType->percentConfidence->reference: 0 +radiosondeType->percentConfidence->width: 7 +radiosondeComputationalMethod->code: '002012' +radiosondeComputationalMethod->units: CODE TABLE +radiosondeComputationalMethod->scale: 0 +radiosondeComputationalMethod->reference: 0 +radiosondeComputationalMethod->width: 4 +radiosondeComputationalMethod->percentConfidence->code: '033007' +radiosondeComputationalMethod->percentConfidence->units: % +radiosondeComputationalMethod->percentConfidence->scale: 0 +radiosondeComputationalMethod->percentConfidence->reference: 0 +radiosondeComputationalMethod->percentConfidence->width: 7 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +year->percentConfidence->code: '033007' +year->percentConfidence->units: % +year->percentConfidence->scale: 0 +year->percentConfidence->reference: 0 +year->percentConfidence->width: 7 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +month->percentConfidence->code: '033007' +month->percentConfidence->units: % +month->percentConfidence->scale: 0 +month->percentConfidence->reference: 0 +month->percentConfidence->width: 7 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +day->percentConfidence->code: '033007' +day->percentConfidence->units: % +day->percentConfidence->scale: 0 +day->percentConfidence->reference: 0 +day->percentConfidence->width: 7 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +hour->percentConfidence->code: '033007' +hour->percentConfidence->units: % +hour->percentConfidence->scale: 0 +hour->percentConfidence->reference: 0 +hour->percentConfidence->width: 7 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +minute->percentConfidence->code: '033007' +minute->percentConfidence->units: % +minute->percentConfidence->scale: 0 +minute->percentConfidence->reference: 0 +minute->percentConfidence->width: 7 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +latitude->percentConfidence->code: '033007' +latitude->percentConfidence->units: % +latitude->percentConfidence->scale: 0 +latitude->percentConfidence->reference: 0 +latitude->percentConfidence->width: 7 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +longitude->percentConfidence->code: '033007' +longitude->percentConfidence->units: % +longitude->percentConfidence->scale: 0 +longitude->percentConfidence->reference: 0 +longitude->percentConfidence->width: 7 +heightOfStation->code: '007001' +heightOfStation->units: m +heightOfStation->scale: 0 +heightOfStation->reference: -400 +heightOfStation->width: 15 +heightOfStation->percentConfidence->code: '033007' +heightOfStation->percentConfidence->units: % +heightOfStation->percentConfidence->scale: 0 +heightOfStation->percentConfidence->reference: 0 +heightOfStation->percentConfidence->width: 7 +cloudCoverTotal->code: '020010' +cloudCoverTotal->units: % +cloudCoverTotal->scale: 0 +cloudCoverTotal->reference: 0 +cloudCoverTotal->width: 7 +verticalSignificanceSurfaceObservations->code: '008002' +verticalSignificanceSurfaceObservations->units: CODE TABLE +verticalSignificanceSurfaceObservations->scale: 0 +verticalSignificanceSurfaceObservations->reference: 0 +verticalSignificanceSurfaceObservations->width: 6 +verticalSignificanceSurfaceObservations->percentConfidence->code: '033007' +verticalSignificanceSurfaceObservations->percentConfidence->units: % +verticalSignificanceSurfaceObservations->percentConfidence->scale: 0 +verticalSignificanceSurfaceObservations->percentConfidence->reference: 0 +verticalSignificanceSurfaceObservations->percentConfidence->width: 7 +cloudAmount->code: '020011' +cloudAmount->units: CODE TABLE +cloudAmount->scale: 0 +cloudAmount->reference: 0 +cloudAmount->width: 4 +cloudAmount->percentConfidence->code: '033007' +cloudAmount->percentConfidence->units: % +cloudAmount->percentConfidence->scale: 0 +cloudAmount->percentConfidence->reference: 0 +cloudAmount->percentConfidence->width: 7 +heightOfBaseOfCloud->code: '020013' +heightOfBaseOfCloud->units: m +heightOfBaseOfCloud->scale: -1 +heightOfBaseOfCloud->reference: -40 +heightOfBaseOfCloud->width: 11 +cloudType->code: '020012' +cloudType->units: CODE TABLE +cloudType->scale: 0 +cloudType->reference: 0 +cloudType->width: 6 +delayedDescriptorReplicationFactor->code: '031001' +delayedDescriptorReplicationFactor->units: Numeric +delayedDescriptorReplicationFactor->scale: 0 +delayedDescriptorReplicationFactor->reference: 0 +delayedDescriptorReplicationFactor->width: 8 +delayedDescriptorReplicationFactor->percentConfidence->code: '033007' +delayedDescriptorReplicationFactor->percentConfidence->units: % +delayedDescriptorReplicationFactor->percentConfidence->scale: 0 +delayedDescriptorReplicationFactor->percentConfidence->reference: 0 +delayedDescriptorReplicationFactor->percentConfidence->width: 7 +pressure->code: '007004' +pressure->units: Pa +pressure->scale: -1 +pressure->reference: 0 +pressure->width: 14 +pressure->percentConfidence->code: '033007' +pressure->percentConfidence->units: % +pressure->percentConfidence->scale: 0 +pressure->percentConfidence->reference: 0 +pressure->percentConfidence->width: 7 +verticalSoundingSignificance->code: '008001' +verticalSoundingSignificance->units: FLAG TABLE +verticalSoundingSignificance->scale: 0 +verticalSoundingSignificance->reference: 0 +verticalSoundingSignificance->width: 7 +verticalSoundingSignificance->percentConfidence->code: '033007' +verticalSoundingSignificance->percentConfidence->units: % +verticalSoundingSignificance->percentConfidence->scale: 0 +verticalSoundingSignificance->percentConfidence->reference: 0 +verticalSoundingSignificance->percentConfidence->width: 7 +nonCoordinateGeopotential->code: '010003' +nonCoordinateGeopotential->units: m2 s-2 +nonCoordinateGeopotential->scale: -1 +nonCoordinateGeopotential->reference: -400 +nonCoordinateGeopotential->width: 17 +nonCoordinateGeopotential->substitutedValue->code: '223255' +nonCoordinateGeopotential->substitutedValue->units: m2 s-2 +nonCoordinateGeopotential->substitutedValue->scale: 0 +nonCoordinateGeopotential->substitutedValue->reference: 0 +nonCoordinateGeopotential->substitutedValue->width: 0 +nonCoordinateGeopotential->percentConfidence->code: '033007' +nonCoordinateGeopotential->percentConfidence->units: % +nonCoordinateGeopotential->percentConfidence->scale: 0 +nonCoordinateGeopotential->percentConfidence->reference: 0 +nonCoordinateGeopotential->percentConfidence->width: 7 +airTemperature->code: '012001' +airTemperature->units: K +airTemperature->scale: 1 +airTemperature->reference: 0 +airTemperature->width: 12 +airTemperature->percentConfidence->code: '033007' +airTemperature->percentConfidence->units: % +airTemperature->percentConfidence->scale: 0 +airTemperature->percentConfidence->reference: 0 +airTemperature->percentConfidence->width: 7 +dewpointTemperature->code: '012003' +dewpointTemperature->units: K +dewpointTemperature->scale: 1 +dewpointTemperature->reference: 0 +dewpointTemperature->width: 12 +dewpointTemperature->percentConfidence->code: '033007' +dewpointTemperature->percentConfidence->units: % +dewpointTemperature->percentConfidence->scale: 0 +dewpointTemperature->percentConfidence->reference: 0 +dewpointTemperature->percentConfidence->width: 7 +windDirection->code: '011001' +windDirection->units: deg +windDirection->scale: 0 +windDirection->reference: 0 +windDirection->width: 9 +windDirection->percentConfidence->code: '033007' +windDirection->percentConfidence->units: % +windDirection->percentConfidence->scale: 0 +windDirection->percentConfidence->reference: 0 +windDirection->percentConfidence->width: 7 +windSpeed->code: '011002' +windSpeed->units: m/s +windSpeed->scale: 1 +windSpeed->reference: 0 +windSpeed->width: 12 +windSpeed->percentConfidence->code: '033007' +windSpeed->percentConfidence->units: % +windSpeed->percentConfidence->scale: 0 +windSpeed->percentConfidence->reference: 0 +windSpeed->percentConfidence->width: 7 +extendedDelayedDescriptorReplicationFactor->code: '031002' +extendedDelayedDescriptorReplicationFactor->units: Numeric +extendedDelayedDescriptorReplicationFactor->scale: 0 +extendedDelayedDescriptorReplicationFactor->reference: 0 +extendedDelayedDescriptorReplicationFactor->width: 16 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 +messageNumber: 3 +blockNumber->code: '001001' +blockNumber->units: Numeric +blockNumber->scale: 0 +blockNumber->reference: 0 +blockNumber->width: 7 +blockNumber->percentConfidence->code: '033007' +blockNumber->percentConfidence->units: % +blockNumber->percentConfidence->scale: 0 +blockNumber->percentConfidence->reference: 0 +blockNumber->percentConfidence->width: 7 +stationNumber->code: '001002' +stationNumber->units: Numeric +stationNumber->scale: 0 +stationNumber->reference: 0 +stationNumber->width: 10 +stationNumber->percentConfidence->code: '033007' +stationNumber->percentConfidence->units: % +stationNumber->percentConfidence->scale: 0 +stationNumber->percentConfidence->reference: 0 +stationNumber->percentConfidence->width: 7 +radiosondeType->code: '002011' +radiosondeType->units: CODE TABLE +radiosondeType->scale: 0 +radiosondeType->reference: 0 +radiosondeType->width: 8 +radiosondeType->percentConfidence->code: '033007' +radiosondeType->percentConfidence->units: % +radiosondeType->percentConfidence->scale: 0 +radiosondeType->percentConfidence->reference: 0 +radiosondeType->percentConfidence->width: 7 +radiosondeComputationalMethod->code: '002012' +radiosondeComputationalMethod->units: CODE TABLE +radiosondeComputationalMethod->scale: 0 +radiosondeComputationalMethod->reference: 0 +radiosondeComputationalMethod->width: 4 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +year->percentConfidence->code: '033007' +year->percentConfidence->units: % +year->percentConfidence->scale: 0 +year->percentConfidence->reference: 0 +year->percentConfidence->width: 7 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +month->percentConfidence->code: '033007' +month->percentConfidence->units: % +month->percentConfidence->scale: 0 +month->percentConfidence->reference: 0 +month->percentConfidence->width: 7 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +day->percentConfidence->code: '033007' +day->percentConfidence->units: % +day->percentConfidence->scale: 0 +day->percentConfidence->reference: 0 +day->percentConfidence->width: 7 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +hour->percentConfidence->code: '033007' +hour->percentConfidence->units: % +hour->percentConfidence->scale: 0 +hour->percentConfidence->reference: 0 +hour->percentConfidence->width: 7 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +minute->percentConfidence->code: '033007' +minute->percentConfidence->units: % +minute->percentConfidence->scale: 0 +minute->percentConfidence->reference: 0 +minute->percentConfidence->width: 7 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +latitude->percentConfidence->code: '033007' +latitude->percentConfidence->units: % +latitude->percentConfidence->scale: 0 +latitude->percentConfidence->reference: 0 +latitude->percentConfidence->width: 7 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +longitude->percentConfidence->code: '033007' +longitude->percentConfidence->units: % +longitude->percentConfidence->scale: 0 +longitude->percentConfidence->reference: 0 +longitude->percentConfidence->width: 7 +heightOfStation->code: '007001' +heightOfStation->units: m +heightOfStation->scale: 0 +heightOfStation->reference: -400 +heightOfStation->width: 15 +heightOfStation->percentConfidence->code: '033007' +heightOfStation->percentConfidence->units: % +heightOfStation->percentConfidence->scale: 0 +heightOfStation->percentConfidence->reference: 0 +heightOfStation->percentConfidence->width: 7 +cloudCoverTotal->code: '020010' +cloudCoverTotal->units: % +cloudCoverTotal->scale: 0 +cloudCoverTotal->reference: 0 +cloudCoverTotal->width: 7 +verticalSignificanceSurfaceObservations->code: '008002' +verticalSignificanceSurfaceObservations->units: CODE TABLE +verticalSignificanceSurfaceObservations->scale: 0 +verticalSignificanceSurfaceObservations->reference: 0 +verticalSignificanceSurfaceObservations->width: 6 +cloudAmount->code: '020011' +cloudAmount->units: CODE TABLE +cloudAmount->scale: 0 +cloudAmount->reference: 0 +cloudAmount->width: 4 +heightOfBaseOfCloud->code: '020013' +heightOfBaseOfCloud->units: m +heightOfBaseOfCloud->scale: -1 +heightOfBaseOfCloud->reference: -40 +heightOfBaseOfCloud->width: 11 +cloudType->code: '020012' +cloudType->units: CODE TABLE +cloudType->scale: 0 +cloudType->reference: 0 +cloudType->width: 6 +delayedDescriptorReplicationFactor->code: '031001' +delayedDescriptorReplicationFactor->units: Numeric +delayedDescriptorReplicationFactor->scale: 0 +delayedDescriptorReplicationFactor->reference: 0 +delayedDescriptorReplicationFactor->width: 8 +delayedDescriptorReplicationFactor->percentConfidence->code: '033007' +delayedDescriptorReplicationFactor->percentConfidence->units: % +delayedDescriptorReplicationFactor->percentConfidence->scale: 0 +delayedDescriptorReplicationFactor->percentConfidence->reference: 0 +delayedDescriptorReplicationFactor->percentConfidence->width: 7 +pressure->code: '007004' +pressure->units: Pa +pressure->scale: -1 +pressure->reference: 0 +pressure->width: 14 +pressure->percentConfidence->code: '033007' +pressure->percentConfidence->units: % +pressure->percentConfidence->scale: 0 +pressure->percentConfidence->reference: 0 +pressure->percentConfidence->width: 7 +verticalSoundingSignificance->code: '008001' +verticalSoundingSignificance->units: FLAG TABLE +verticalSoundingSignificance->scale: 0 +verticalSoundingSignificance->reference: 0 +verticalSoundingSignificance->width: 7 +verticalSoundingSignificance->percentConfidence->code: '033007' +verticalSoundingSignificance->percentConfidence->units: % +verticalSoundingSignificance->percentConfidence->scale: 0 +verticalSoundingSignificance->percentConfidence->reference: 0 +verticalSoundingSignificance->percentConfidence->width: 7 +nonCoordinateGeopotential->code: '010003' +nonCoordinateGeopotential->units: m2 s-2 +nonCoordinateGeopotential->scale: -1 +nonCoordinateGeopotential->reference: -400 +nonCoordinateGeopotential->width: 17 +nonCoordinateGeopotential->percentConfidence->code: '033007' +nonCoordinateGeopotential->percentConfidence->units: % +nonCoordinateGeopotential->percentConfidence->scale: 0 +nonCoordinateGeopotential->percentConfidence->reference: 0 +nonCoordinateGeopotential->percentConfidence->width: 7 +airTemperature->code: '012001' +airTemperature->units: K +airTemperature->scale: 1 +airTemperature->reference: 0 +airTemperature->width: 12 +airTemperature->percentConfidence->code: '033007' +airTemperature->percentConfidence->units: % +airTemperature->percentConfidence->scale: 0 +airTemperature->percentConfidence->reference: 0 +airTemperature->percentConfidence->width: 7 +dewpointTemperature->code: '012003' +dewpointTemperature->units: K +dewpointTemperature->scale: 1 +dewpointTemperature->reference: 0 +dewpointTemperature->width: 12 +dewpointTemperature->percentConfidence->code: '033007' +dewpointTemperature->percentConfidence->units: % +dewpointTemperature->percentConfidence->scale: 0 +dewpointTemperature->percentConfidence->reference: 0 +dewpointTemperature->percentConfidence->width: 7 +windDirection->code: '011001' +windDirection->units: deg +windDirection->scale: 0 +windDirection->reference: 0 +windDirection->width: 9 +windSpeed->code: '011002' +windSpeed->units: m/s +windSpeed->scale: 1 +windSpeed->reference: 0 +windSpeed->width: 12 +extendedDelayedDescriptorReplicationFactor->code: '031002' +extendedDelayedDescriptorReplicationFactor->units: Numeric +extendedDelayedDescriptorReplicationFactor->scale: 0 +extendedDelayedDescriptorReplicationFactor->reference: 0 +extendedDelayedDescriptorReplicationFactor->width: 16 +centre->code: '001031' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 16 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 diff --git a/tests/sample-data/temp.bufr b/tests/sample-data/temp.bufr new file mode 100644 index 0000000000000000000000000000000000000000..f6a50fa52edd7cada1768b21e96b24785c2bf1dd GIT binary patch literal 2484 zcma)7eNj zR`6qWMFfjTsan6#+Fh+8K`6=!#ZYUpXS;k=MZ4BO;mAUo**h=NQqHkw=a1aqyL0C^ zcQW^PCp;l)1>!~V5pqQ+jY7QiiIkY~pb-oYgeZNJ;~}I*UOX=^%8OzNn&yZQPlQCC z!qd+t;s=MJC_f(GTGivlMQWUF$_ z%d%6pnJnMjK&dTGE!&gW(q#^08ZXV22vxNNJy~vCqm>f$)0zn}mjwjj({)*ERVf4w zTIS4F*eP4+^hI{c`)F+?%VjyT(OJ@Nr`*g7$`Oru|D2fjuML<=-GD4F4HzcHAiVJb8)$3r#xZUKOp30w4$ZmKZ<`(;Nqtk4|FpQsp+0eZW=O6EvhpIk2k@I z+GYu*>-XP>G9Gp@@E2u|$aEMlGN5A?hQ>v9ChEl^A42t;5wC(@eucBfu|Is*kPBTICwdaPVgGz+v^)o9mMRF!NcIEl)L5Q#{CnIr4&Rz{DXn=fx8 z0w!cHUq__Qg^b&;oXc~Zb6gU?ne~|6e_pJ=4jv7HU7^y&rGteE*m*qHl?vAXMxz^nR<_63)x-e#zL7uu;? zT;ZI#>#oMnd*!4E;dweGEjd2;aQSzM?S4xqx9%Qp%*xRiYI=Lyw{MHs<2~pqDY*V% zp_X(ju2=C)(5vL+&EtAi94(Y`jc3e{+s~MEus>b$?nH*zLukq?hf#4fn|+k>FFoS?$+09lUTNku`Qaa2zgG<1vP4rnfW zwdHu&rxd2o-jYDK=!c6M4Cd+Zqshxawq@byV%a^i`pYdqd88K5@XWd}+<$v2U}!Gc z@5l5wV*IEMD4UYkK$=%`jla8f00QxWeEssp6Ce)vCqR~6Aa87ozTkqbGXUXREKnAN z0U8<>I$VekAWmuTtJvnJ1JwNkD@%wZg0!lSmE)nafNe}GYoOvD)HZ;S*U26eZ zf*AKty8i*lh7eG`cO9TfL-U8+g0xM=;@Fa))Y}IHvC2&kZs+-XT;BAczF3?bvhh2U zn_lJX!@Z_sR6qLe5&^*6Jh{2*BIwor^}?)@n@hNLoF<9DA%t@l{!{T*d}U1fi*@b? TGu!S*z08@l4t8+kUfcfxvAv(c literal 0 HcmV?d00001 diff --git a/tests/sample-data/temp.items b/tests/sample-data/temp.items new file mode 100644 index 00000000..0962c83d --- /dev/null +++ b/tests/sample-data/temp.items @@ -0,0 +1,361 @@ +messageNumber 1 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 1 +dataCategory 2 +dataSubCategory 101 +masterTablesVersionNumber 13 +localTablesVersionNumber 1 +typicalYearOfCentury 14 +typicalMonth 1 +typicalDay 28 +typicalHour 4 +typicalMinute 0 +typicalDate 20140128 +typicalTime 040000 +numberOfSubsets 1 +observedData 1 +compressedData 0 +unexpandedDescriptors [309007 222000 101000 31002 31031 1031 1032 101000 31002 33007] +blockNumber 6 +blockNumber->percentConfidence 70 +stationNumber 60 +stationNumber->percentConfidence 70 +radiosondeType 17 +radiosondeType->percentConfidence 70 +radiosondeComputationalMethod 5 +radiosondeComputationalMethod->percentConfidence 70 +year 2014 +year->percentConfidence 70 +month 1 +month->percentConfidence 70 +day 28 +day->percentConfidence 70 +hour 4 +hour->percentConfidence 70 +minute 0 +minute->percentConfidence 70 +latitude 56.290000000000006 +latitude->percentConfidence 70 +longitude 9.110000000000001 +longitude->percentConfidence 70 +heightOfStation 53 +heightOfStation->percentConfidence 70 +cloudCoverTotal -- +verticalSignificanceSurfaceObservations 1 +verticalSignificanceSurfaceObservations->percentConfidence 70 +cloudAmount 8 +cloudAmount->percentConfidence 70 +heightOfBaseOfCloud 80.0 +heightOfBaseOfCloud->percentConfidence 70 +cloudType [36 -- --] +cloudType->percentConfidence [70 -- --] +delayedDescriptorReplicationFactor 31 +delayedDescriptorReplicationFactor->percentConfidence 70 +pressure [100000. 99500. 96100. 92900. 92500. 88800. 85000. 84400. 80000. + 79600. 75900. 70000. 69900. 62100. 60400. 60000. 57000. 55300. + 53700. 52200. 50800. 50000. 49500. 46700. 45300. 44000. 42700. + 41500. 40200. 40000. 39000.] +pressure->percentConfidence [75 70 75 75 82 75 82 75 75 75 75 82 75 75 75 75 75 75 75 75 75 82 75 75 + 75 75 75 75 75 82 75] +verticalSoundingSignificance [32 70 2 2 32 6 32 2 6 2 2 32 2 2 2 6 2 2 2 2 2 32 2 2 + 2 2 2 2 2 32 2] +verticalSoundingSignificance->percentConfidence [70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70] +nonCoordinateGeopotential [110.0 520.0 -- -- 6160.0 -- 12670.0 -- -- -- -- 27290.0 -- -- -- -- -- -- + -- -- -- 51190.0 -- -- -- -- -- -- -- 66100.0 --] +nonCoordinateGeopotential->percentConfidence [70 70 -- -- 70 -- 70 -- -- -- -- 70 -- -- -- -- -- -- -- -- -- 70 -- -- + -- -- -- -- -- 70 --] +airTemperature [-- 272.3 -- -- 270.5 -- 266.90000000000003 -- -- -- -- 257.90000000000003 + -- -- -- -- -- -- -- -- -- 238.70000000000002 -- -- -- -- -- -- -- 225.3 + --] +airTemperature->percentConfidence [-- 70 -- -- 70 -- 70 -- -- -- -- 70 -- -- -- -- -- -- -- -- -- 70 -- -- + -- -- -- -- -- 70 --] +dewpointTemperature [-- 271.8 -- -- 269.0 -- 264.1 -- -- -- -- 247.9 -- -- -- -- -- -- -- -- + -- 234.8 -- -- -- -- -- -- -- -- --] +dewpointTemperature->percentConfidence [-- 70 -- -- 70 -- 70 -- -- -- -- 70 -- -- -- -- -- -- -- -- -- 70 -- -- + -- -- -- -- -- -- --] +windDirection [-- 110 115 145 145 155 165 170 165 165 150 150 155 165 175 175 190 205 + 200 220 230 235 235 265 260 270 270 295 335 340 340] +windDirection->percentConfidence [-- 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70] +windSpeed [-- 6.0 12.0 16.0 15.0 14.0 14.0 14.0 12.0 12.0 12.0 13.0 13.0 13.0 9.0 + 9.0 9.0 7.0 5.0 4.0 7.0 7.0 7.0 6.0 7.0 8.0 6.0 6.0 5.0 4.0 3.0] +windSpeed->percentConfidence [-- 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70] +extendedDelayedDescriptorReplicationFactor [237 157] +centre 98 +generatingApplication 1 +messageNumber 2 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 1 +dataCategory 2 +dataSubCategory 101 +masterTablesVersionNumber 13 +localTablesVersionNumber 1 +typicalYearOfCentury 16 +typicalMonth 1 +typicalDay 19 +typicalHour 0 +typicalMinute 0 +typicalDate 20160119 +typicalTime 000000 +rdbType 5 +oldSubtype 101 +localYear 2016 +localMonth 1 +localDay 19 +localHour 0 +localMinute 0 +localSecond 0 +rdbtimeDay 19 +rdbtimeHour 0 +rdbtimeMinute 47 +rdbtimeSecond 12 +rdbtimeTime 004712 +rectimeDay 10 +rectimeHour 10 +rectimeMinute 0 +rectimeSecond 0 +restricted 0 +correction1 0 +correction1Part 1 +correction2 0 +correction2Part 1 +correction3 0 +correction3Part 1 +correction4 0 +correction4Part 1 +qualityControl 70 +newSubtype 0 +numberOfSubsets 1 +localLatitude 51.27 +localLongitude -80.65 +ident 71836 +observedData 1 +compressedData 0 +unexpandedDescriptors [309007 222000 101000 31002 31031 1031 1032 101000 31002 33007 + 223000 101000 31002 31031 1031 1032 101000 31002 223255] +blockNumber 71 +blockNumber->percentConfidence 70 +stationNumber 836 +stationNumber->percentConfidence 70 +radiosondeType 80 +radiosondeType->percentConfidence 70 +radiosondeComputationalMethod 4 +radiosondeComputationalMethod->percentConfidence 70 +year 2016 +year->percentConfidence 70 +month 1 +month->percentConfidence 70 +day 19 +day->percentConfidence 70 +hour 0 +hour->percentConfidence 70 +minute 0 +minute->percentConfidence 70 +latitude 51.27 +latitude->percentConfidence 70 +longitude -80.65 +longitude->percentConfidence 70 +heightOfStation 11 +heightOfStation->percentConfidence 70 +cloudCoverTotal -- +verticalSignificanceSurfaceObservations 1 +verticalSignificanceSurfaceObservations->percentConfidence 70 +cloudAmount -- +cloudAmount->percentConfidence 70 +heightOfBaseOfCloud -- +cloudType [-- -- --] +delayedDescriptorReplicationFactor 53 +delayedDescriptorReplicationFactor->percentConfidence 70 +pressure [101500. 101400. 100700. 100000. 92500. 91000. 89100. 85100. 85000. + 81000. 74700. 70000. 68900. 66600. 61200. 59400. 57900. 55300. + 50000. 49900. 46500. 42200. 40000. 36300. 33200. 32900. 32800. + 32000. 31500. 31300. 30500. 30200. 30000. 29700. 29400. 26200. + 25000. 23900. 20700. 20000. 18900. 17200. 15000. 14400. 12500. + 11300. 10000. 7710. 7000. 6330. 5000. 4150. 3930.] +pressure->percentConfidence [70 75 75 82 82 75 75 75 82 75 75 82 75 75 75 75 75 75 82 75 75 75 82 75 + 75 75 75 75 75 75 75 75 82 75 75 79 82 75 75 82 75 75 82 75 75 75 82 75 + 82 75 82 75 75] +verticalSoundingSignificance [68 4 4 32 32 4 4 4 32 4 4 32 4 4 4 4 4 4 32 4 4 4 32 4 + 4 4 4 4 4 4 4 4 32 4 4 20 32 4 4 32 4 4 32 4 4 4 36 4 + 32 4 32 8 4] +verticalSoundingSignificance->percentConfidence [70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70] +nonCoordinateGeopotential [110.0 180.0 690.0 1190.0 6890.0 8080.0 9620.0 13010.0 13100.0 16660.0 + 22630.0 27400.0 28540.0 30990.0 37030.0 39130.0 40920.0 44140.0 51090.0 + 51220.0 55980.0 62430.0 66000.0 72230.0 77910.0 78480.0 78670.0 80220.0 + 81210.0 81610.0 83220.0 83840.0 84340.0 84870.0 85500.0 92610.0 95610.0 + 98240.0 107090.0 109340.0 112710.0 118570.0 127190.0 129700.0 138540.0 + 144860.0 152590.0 168730.0 174750.0 180870.0 195350.0 -- 209840.0] +nonCoordinateGeopotential->substitutedValue [100.0 170.0 680.0 1180.0 6880.0 8070.0 9610.0 13000.0 13090.0 16650.0 + 22630.0 27400.0 28540.0 31000.0 37030.0 39140.0 40930.0 44140.0 51110.0 + 51230.0 56000.0 62460.0 66040.0 72270.0 77950.0 78520.0 78710.0 80260.0 + 81250.0 81650.0 83260.0 83880.0 84380.0 84920.0 85550.0 92690.0 95710.0 + 98330.0 107160.0 109410.0 112790.0 118670.0 127320.0 129840.0 138690.0 + 145020.0 152760.0 168940.0 174980.0 181100.0 195590.0 -- 210140.0] +nonCoordinateGeopotential->percentConfidence [70 70 70 74 74 70 70 70 74 70 70 74 70 70 70 70 70 70 74 70 70 70 74 70 + 70 70 70 70 70 70 70 70 74 70 70 70 74 70 70 74 70 70 74 70 70 70 74 70 + 74 70 74 -- 70] +airTemperature [253.9 253.70000000000002 255.10000000000002 255.10000000000002 253.9 + 253.70000000000002 255.10000000000002 257.90000000000003 + 257.90000000000003 257.90000000000003 256.1 253.9 253.10000000000002 + 251.10000000000002 246.3 244.3 244.10000000000002 242.9 237.5 237.3 233.3 + 230.10000000000002 228.10000000000002 223.3 219.70000000000002 + 219.70000000000002 219.70000000000002 218.5 218.10000000000002 + 217.70000000000002 216.9 216.3 216.3 215.9 215.9 214.10000000000002 214.3 + 213.10000000000002 215.9 215.5 215.10000000000002 217.9 217.9 + 218.70000000000002 216.9 219.10000000000002 218.10000000000002 216.3 + 214.3 212.70000000000002 212.70000000000002 -- 210.9] +airTemperature->percentConfidence [70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 -- 70] +dewpointTemperature [251.60000000000002 249.4 251.4 251.4 248.9 247.70000000000002 + 250.10000000000002 247.9 247.9 236.9 232.10000000000002 235.9 + 237.10000000000002 238.10000000000002 230.3 236.3 242.20000000000002 + 239.4 233.9 233.70000000000002 231.0 225.9 224.60000000000002 220.9 + 214.70000000000002 209.70000000000002 207.70000000000002 208.5 213.3 + 211.70000000000002 211.9 214.0 213.3 209.9 204.9 194.10000000000002 191.3 + 190.10000000000002 186.9 187.5 187.10000000000002 185.9 185.9 + 185.70000000000002 184.9 186.10000000000002 186.10000000000002 184.3 + 183.3 181.70000000000002 181.70000000000002 -- 180.9] +dewpointTemperature->percentConfidence [70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 -- 70] +windDirection [-- -- -- 290 320 -- -- -- 325 -- -- 350 -- -- -- -- -- -- 60 -- -- -- 70 + -- -- -- -- -- -- -- -- -- 75 -- -- 75 65 -- -- 50 -- -- 360 -- -- -- 325 + -- 315 -- 310 310 --] +windDirection->percentConfidence [-- -- -- 70 70 -- -- -- 70 -- -- 70 -- -- -- -- -- -- 70 -- -- -- 70 -- + -- -- -- -- -- -- -- -- 70 -- -- 70 70 -- -- 70 -- -- 70 -- -- -- 70 -- + 70 -- 70 70 --] +windSpeed [-- -- -- 10.0 10.0 -- -- -- 11.0 -- -- 13.0 -- -- -- -- -- -- 18.0 -- -- + -- 25.0 -- -- -- -- -- -- -- -- -- 29.0 -- -- 22.0 19.0 -- -- 17.0 -- -- + 15.0 -- -- -- 20.0 -- 29.0 -- 29.0 34.0 --] +windSpeed->percentConfidence [-- -- -- 70 70 -- -- -- 70 -- -- 70 -- -- -- -- -- -- 70 -- -- -- 70 -- + -- -- -- -- -- -- -- -- 70 -- -- 70 70 -- -- 70 -- -- 70 -- -- -- 70 -- + 70 -- 70 70 --] +extendedDelayedDescriptorReplicationFactor [391 307 391 52] +centre [98 98] +generatingApplication [ 1 10] +messageNumber 3 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 1 +dataCategory 2 +dataSubCategory 101 +masterTablesVersionNumber 13 +localTablesVersionNumber 1 +typicalYearOfCentury 79 +typicalMonth 4 +typicalDay 8 +typicalHour 23 +typicalMinute 0 +typicalDate 20790408 +typicalTime 230000 +rdbType 5 +oldSubtype 101 +localYear 1979 +localMonth 4 +localDay 8 +localHour 23 +localMinute 0 +localSecond 0 +rdbtimeDay 0 +rdbtimeHour 0 +rdbtimeMinute 0 +rdbtimeSecond 0 +rdbtimeTime 000000 +rectimeDay 0 +rectimeHour 0 +rectimeMinute 0 +rectimeSecond 0 +restricted 0 +correction1 0 +correction1Part 1 +correction2 0 +correction2Part 0 +correction3 0 +correction3Part 0 +correction4 0 +correction4Part 0 +qualityControl 50 +newSubtype 0 +numberOfSubsets 1 +localLatitude -54.5 +localLongitude 158.95 +ident 94998 +observedData 1 +compressedData 0 +unexpandedDescriptors [309007 222000 101000 31002 31031 1031 1032 101000 31002 33007] +blockNumber 94 +blockNumber->percentConfidence 70 +stationNumber 998 +stationNumber->percentConfidence 70 +radiosondeType 79 +radiosondeType->percentConfidence 70 +radiosondeComputationalMethod -- +year 1979 +year->percentConfidence 70 +month 4 +month->percentConfidence 70 +day 8 +day->percentConfidence 70 +hour 23 +hour->percentConfidence 70 +minute 0 +minute->percentConfidence 70 +latitude -54.50000000000001 +latitude->percentConfidence 70 +longitude 158.94998 +longitude->percentConfidence 70 +heightOfStation 6 +heightOfStation->percentConfidence 70 +cloudCoverTotal -- +verticalSignificanceSurfaceObservations -- +cloudAmount -- +heightOfBaseOfCloud -- +cloudType [-- -- --] +delayedDescriptorReplicationFactor 36 +delayedDescriptorReplicationFactor->percentConfidence 70 +pressure [101000. 100000. 85100. 85000. 81600. 74800. 70000. 67600. 63900. + 58600. 53400. 50000. 49800. 44300. 40000. 39700. 30000. 25000. + 23900. 23900. 20800. 20000. 15300. 15000. 10500. 10000. 7800. + 7400. 7000. 5300. 5000. 3700. 3000. 2300. 2000. 0.] +pressure->percentConfidence [70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70] +verticalSoundingSignificance [64 32 4 32 4 4 32 4 4 4 4 32 4 4 32 4 36 32 4 16 4 32 4 32 + 4 32 4 4 32 4 32 4 32 4 32 4] +verticalSoundingSignificance->percentConfidence [70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70] +nonCoordinateGeopotential [60.0 830.0 -- 13570.0 -- -- 28460.0 -- -- -- -- 53150.0 -- -- 68650.0 -- + 87480.0 98750.0 -- -- -- 112580.0 -- 130820.0 -- 156710.0 -- -- 179460.0 + -- 200840.0 -- 233500.0 -- 259190.0 --] +nonCoordinateGeopotential->percentConfidence [70 75 -- 75 -- -- 75 -- -- -- -- 75 -- -- 75 -- 75 75 -- -- -- 75 -- 75 + -- 75 -- -- 75 -- 75 -- 75 -- 75 --] +airTemperature [279. 278.2 266.7 266.7 266.3 268.7 265.1 263.5 259.5 255.1 250.1 247.7 + 247.5 240.5 235.1 234.7 219.5 214.1 212.5 212.5 219.5 219.9 222.5 222.5 + 222.1 225.1 221.1 223.5 223.1 220.7 221.3 224.3 222.3 219.7 222.1 228.5] +airTemperature->percentConfidence [70 70 70 70 70 50 50 70 70 70 70 50 50 70 70 70 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 70] +dewpointTemperature [273.90000000000003 273.2 261.7 261.7 261.0 -- -- 249.5 249.5 + 240.10000000000002 236.10000000000002 -- -- 228.5 224.10000000000002 + 223.70000000000002 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- 201.5] +dewpointTemperature->percentConfidence [70 70 70 70 70 -- -- 70 70 70 70 -- -- 70 70 70 -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- 70] +windDirection [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- --] +windSpeed [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- --] +extendedDelayedDescriptorReplicationFactor [272 148] +centre 98 +generatingApplication 1 diff --git a/tests/sample-data/terra-modis-aerosol.attributes b/tests/sample-data/terra-modis-aerosol.attributes new file mode 100644 index 00000000..269c0c2c --- /dev/null +++ b/tests/sample-data/terra-modis-aerosol.attributes @@ -0,0 +1,156 @@ +messageNumber: 1 +satelliteIdentifier->code: '001007' +satelliteIdentifier->units: CODE TABLE +satelliteIdentifier->scale: 0 +satelliteIdentifier->reference: 0 +satelliteIdentifier->width: 10 +satelliteInstruments->code: '002019' +satelliteInstruments->units: CODE TABLE +satelliteInstruments->scale: 0 +satelliteInstruments->reference: 0 +satelliteInstruments->width: 11 +centre->code: '001033' +centre->units: CODE TABLE +centre->scale: 0 +centre->reference: 0 +centre->width: 8 +productTypeForRetrievedAtmosphericGases->code: '002172' +productTypeForRetrievedAtmosphericGases->units: CODE TABLE +productTypeForRetrievedAtmosphericGases->scale: 0 +productTypeForRetrievedAtmosphericGases->reference: 0 +productTypeForRetrievedAtmosphericGases->width: 8 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +second->code: '004006' +second->units: s +second->scale: 0 +second->reference: 0 +second->width: 6 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +satelliteZenithAngle->code: '007024' +satelliteZenithAngle->units: deg +satelliteZenithAngle->scale: 2 +satelliteZenithAngle->reference: -9000 +satelliteZenithAngle->width: 15 +solarZenithAngle->code: '007025' +solarZenithAngle->units: deg +solarZenithAngle->scale: 2 +solarZenithAngle->reference: -9000 +solarZenithAngle->width: 15 +viewingAzimuthAngle->code: '027080' +viewingAzimuthAngle->units: deg +viewingAzimuthAngle->scale: 2 +viewingAzimuthAngle->reference: 0 +viewingAzimuthAngle->width: 16 +solarAzimuth->code: '027193' +solarAzimuth->units: deg +solarAzimuth->scale: 2 +solarAzimuth->reference: 0 +solarAzimuth->width: 16 +snowOrIceCrystalsIndicator->code: '020079' +snowOrIceCrystalsIndicator->units: FLAG TABLE +snowOrIceCrystalsIndicator->scale: 0 +snowOrIceCrystalsIndicator->reference: 0 +snowOrIceCrystalsIndicator->width: 2 +surfaceFlag->code: '013040' +surfaceFlag->units: CODE TABLE +surfaceFlag->scale: 0 +surfaceFlag->reference: 0 +surfaceFlag->width: 4 +cloudCoverTotal->code: '020010' +cloudCoverTotal->units: % +cloudCoverTotal->scale: 0 +cloudCoverTotal->reference: 0 +cloudCoverTotal->width: 7 +spectrographicWavelength->code: '002071' +spectrographicWavelength->units: m +spectrographicWavelength->scale: 13 +spectrographicWavelength->reference: 0 +spectrographicWavelength->width: 30 +instrumentSerialNumberForWaterTemperatureProfile->code: '002171' +instrumentSerialNumberForWaterTemperatureProfile->units: CODE TABLE +instrumentSerialNumberForWaterTemperatureProfile->scale: 0 +instrumentSerialNumberForWaterTemperatureProfile->reference: 0 +instrumentSerialNumberForWaterTemperatureProfile->width: 4 +atmosphericChemical->code: '008043' +atmosphericChemical->units: CODE TABLE +atmosphericChemical->scale: 0 +atmosphericChemical->reference: 0 +atmosphericChemical->width: 8 +opticalDepth->code: '015024' +opticalDepth->units: Numeric +opticalDepth->scale: 4 +opticalDepth->reference: 0 +opticalDepth->width: 24 +opticalDepth->firstOrderStatisticalValue->code: '224255' +opticalDepth->firstOrderStatisticalValue->units: Numeric +opticalDepth->firstOrderStatisticalValue->scale: 0 +opticalDepth->firstOrderStatisticalValue->reference: 0 +opticalDepth->firstOrderStatisticalValue->width: 0 +particulateMatterCharacterization->code: '008045' +particulateMatterCharacterization->units: CODE TABLE +particulateMatterCharacterization->scale: 0 +particulateMatterCharacterization->reference: 0 +particulateMatterCharacterization->width: 8 +totalNumberOfWaveBands->code: '022094' +totalNumberOfWaveBands->units: Numeric +totalNumberOfWaveBands->scale: 0 +totalNumberOfWaveBands->reference: 0 +totalNumberOfWaveBands->width: 7 +delayedDescriptorReplicationFactor->code: '031001' +delayedDescriptorReplicationFactor->units: Numeric +delayedDescriptorReplicationFactor->scale: 0 +delayedDescriptorReplicationFactor->reference: 0 +delayedDescriptorReplicationFactor->width: 8 +reflectance->code: '015042' +reflectance->units: Numeric +reflectance->scale: 6 +reflectance->reference: 0 +reflectance->width: 20 +reflectance->firstOrderStatisticalValue->code: '224255' +reflectance->firstOrderStatisticalValue->units: Numeric +reflectance->firstOrderStatisticalValue->scale: 0 +reflectance->firstOrderStatisticalValue->reference: 0 +reflectance->firstOrderStatisticalValue->width: 0 +generatingApplication->code: '001032' +generatingApplication->units: CODE TABLE +generatingApplication->scale: 0 +generatingApplication->reference: 0 +generatingApplication->width: 8 +firstOrderStatistics->code: '008023' +firstOrderStatistics->units: CODE TABLE +firstOrderStatistics->scale: 0 +firstOrderStatistics->reference: 0 +firstOrderStatistics->width: 6 diff --git a/tests/sample-data/terra-modis-aerosol.bufr b/tests/sample-data/terra-modis-aerosol.bufr new file mode 100644 index 0000000000000000000000000000000000000000..61ccb3139bea4aa18c61fcdd2ca03405628b5863 GIT binary patch literal 844 zcmZuvYfKYa6#izWFk>rLv6O+L)pjh^f)=Ckk*MX-l4=!v5KtqrRidt##TZjb78ym5 zYSa=nR?&!vM6o}bs$ewg6nsVE1EMBAQ#4DA@xcZY8&qaz%>LZ-=bm%!ch3F3drnS~ zV;Lx?0?+~;NJimtLK*#*PGn{pfu(>_c%Y4_A_wJ8fE^%YT$#8ajdQ(8L{ zd;feqr^>|seP&-6Fy?RWS>ld$M^B~SGX3#mQPS$yjhBAxS*iZzb%aTPSh3RFH;((~ z<<&85YX*zUsdYE3pT7-$UlR&aHpKPU=BvicF!HIKCogYpAE^*VHr$orh-*!cwV5VO zFI(cVF6P1N8Qm9Pe4Fv6N$adgL8@O@!agGCq46L@ahQzraK1Fv8y=`Gu^cSQro1&9 z&$rLz3@AMzNJ&XZ-SYa5OpN3~crm}GJDPjs+DFGjZ9iY7U%>xH*i}sHG+@O3+b0Y; zh83*yX+=15Q_?~-@AAu}pmCJh$-KtVMUK9YAa*jl{Wd6WoxRgiz$x7~--Vm)xrdwb z>-I;X7sY6`7*oK;L&4zxk1S$XS`?W-$bHEfh`0Ibvi*5?D!qmcq8O97Zqb0S(~L!! zUq8cqc0z_v#$qUSP(W^$zGjcX-N^)M@firstOrderStatisticalValue [[-- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- --] + [-- -- -- -- -- -- -- -- -- --]] +particulateMatterCharacterization [0 0 0 0 0 0 0 0 0 0] +totalNumberOfWaveBands [8 8 8 8 8 8 8 8 8 8] +delayedDescriptorReplicationFactor [ 8 32 16] +reflectance [[0.12500000000000003 0.09870000000000001 0.09880000000000001 + 0.10750000000000001 0.11650000000000002 0.17420000000000002 + 0.12410000000000002 0.10770000000000002 0.10620000000000002 + 0.09230000000000002] + [0.10750000000000001 0.08280000000000001 0.09080000000000002 + 0.09790000000000001 0.10230000000000002 0.14870000000000003 + 0.10280000000000002 0.10400000000000002 0.10150000000000002 + 0.09460000000000002] + [0.0637 0.049400000000000006 0.0651 0.06770000000000001 + 0.06890000000000002 0.08700000000000001 0.06220000000000001 + 0.06300000000000001 0.06340000000000001 0.06210000000000001] + [0.33510000000000006 0.28920000000000007 0.2649 0.28120000000000006 + 0.28720000000000007 0.43950000000000006 0.29330000000000006 + 0.37660000000000005 0.3582000000000001 0.33890000000000003] + [0.33160000000000006 0.27520000000000006 0.27510000000000007 0.2871 + 0.27910000000000007 0.3995000000000001 0.29240000000000005 + 0.3708000000000001 0.3476000000000001 0.32200000000000006] + [0.18050000000000002 0.14140000000000003 0.18050000000000002 + 0.17910000000000004 0.17840000000000003 0.21770000000000003 + 0.16030000000000003 0.19910000000000003 0.18790000000000004 + 0.18500000000000003] + [0.06990000000000002 0.048900000000000006 0.08780000000000002 + 0.07980000000000001 0.08420000000000001 0.08200000000000002 0.0632 + 0.07100000000000001 0.0675 0.07820000000000002] + [-- -- -- -- -- -- -- -- -- --]] +reflectance->firstOrderStatisticalValue [[0.0025000000000000005 0.0013000000000000002 0.0029000000000000007 + 0.0024000000000000002 0.0017000000000000003 0.0021000000000000003 + 0.0024000000000000002 0.0020000000000000005 0.0028000000000000004 + 0.0024000000000000002] + [0.006800000000000001 0.0016000000000000003 0.006800000000000001 + 0.005200000000000001 0.004400000000000001 0.0021000000000000003 + 0.0037000000000000006 0.0029000000000000007 0.0048000000000000004 + 0.007300000000000001] + [0.004400000000000001 0.0005000000000000001 0.0048000000000000004 + 0.0028000000000000004 0.0014000000000000002 0.0016000000000000003 + 0.0023000000000000004 0.0016000000000000003 0.0026000000000000003 + 0.0029000000000000007] + [0.0636 0.033400000000000006 0.051100000000000007 0.04660000000000001 + 0.05820000000000001 0.029800000000000004 0.04150000000000001 + 0.023900000000000005 0.022800000000000004 0.06190000000000001] + [0.05120000000000001 0.032600000000000004 0.035800000000000005 + 0.038900000000000004 0.04170000000000001 0.028500000000000004 + 0.03640000000000001 0.022400000000000003 0.024400000000000005 + 0.03640000000000001] + [0.030500000000000006 0.013800000000000002 0.022900000000000004 + 0.021000000000000005 0.013300000000000003 0.008100000000000001 + 0.020500000000000004 0.010500000000000002 0.013700000000000002 + 0.012700000000000003] + [0.012100000000000001 0.0045000000000000005 0.025900000000000003 + 0.019200000000000002 0.018900000000000004 0.005600000000000001 + 0.011900000000000003 0.011200000000000002 0.005900000000000001 + 0.015700000000000002] + [-- -- -- -- -- -- -- -- -- --]] +generatingApplication [-- -- -- -- -- -- -- -- -- --] +firstOrderStatistics [9 9 9 9 9 9 9 9 9 9] diff --git a/tests/sample-data/wave.attributes b/tests/sample-data/wave.attributes new file mode 100644 index 00000000..fd28a474 --- /dev/null +++ b/tests/sample-data/wave.attributes @@ -0,0 +1,201 @@ +messageNumber: 1 +regionNumber->code: '001003' +regionNumber->units: CODE TABLE +regionNumber->scale: 0 +regionNumber->reference: 0 +regionNumber->width: 3 +wmoRegionSubArea->code: '001020' +wmoRegionSubArea->units: Numeric +wmoRegionSubArea->scale: 0 +wmoRegionSubArea->reference: 0 +wmoRegionSubArea->width: 4 +buoyOrPlatformIdentifier->code: '001005' +buoyOrPlatformIdentifier->units: Numeric +buoyOrPlatformIdentifier->scale: 0 +buoyOrPlatformIdentifier->reference: 0 +buoyOrPlatformIdentifier->width: 17 +shipOrMobileLandStationIdentifier->code: '001011' +shipOrMobileLandStationIdentifier->units: CCITT IA5 +shipOrMobileLandStationIdentifier->scale: 0 +shipOrMobileLandStationIdentifier->reference: 0 +shipOrMobileLandStationIdentifier->width: 72 +satelliteIdentifier->code: '001007' +satelliteIdentifier->units: CODE TABLE +satelliteIdentifier->scale: 0 +satelliteIdentifier->reference: 0 +satelliteIdentifier->width: 10 +blockNumber->code: '001001' +blockNumber->units: Numeric +blockNumber->scale: 0 +blockNumber->reference: 0 +blockNumber->width: 7 +stationNumber->code: '001002' +stationNumber->units: Numeric +stationNumber->scale: 0 +stationNumber->reference: 0 +stationNumber->width: 10 +indicatorForMethodOfCalculatingSpectralWaveData->code: '002044' +indicatorForMethodOfCalculatingSpectralWaveData->units: CODE TABLE +indicatorForMethodOfCalculatingSpectralWaveData->scale: 0 +indicatorForMethodOfCalculatingSpectralWaveData->reference: 0 +indicatorForMethodOfCalculatingSpectralWaveData->width: 4 +platformType->code: '002045' +platformType->units: CODE TABLE +platformType->scale: 0 +platformType->reference: 0 +platformType->width: 4 +year->code: '004001' +year->units: a +year->scale: 0 +year->reference: 0 +year->width: 12 +month->code: '004002' +month->units: mon +month->scale: 0 +month->reference: 0 +month->width: 4 +day->code: '004003' +day->units: d +day->scale: 0 +day->reference: 0 +day->width: 6 +hour->code: '004004' +hour->units: h +hour->scale: 0 +hour->reference: 0 +hour->width: 5 +minute->code: '004005' +minute->units: min +minute->scale: 0 +minute->reference: 0 +minute->width: 6 +latitude->code: '005001' +latitude->units: deg +latitude->scale: 5 +latitude->reference: -9000000 +latitude->width: 25 +longitude->code: '006001' +longitude->units: deg +longitude->scale: 5 +longitude->reference: -18000000 +longitude->width: 26 +totalWaterDepth->code: '022063' +totalWaterDepth->units: m +totalWaterDepth->scale: 0 +totalWaterDepth->reference: 0 +totalWaterDepth->width: 14 +directionFromWhichDominantWavesAreComing->code: '022076' +directionFromWhichDominantWavesAreComing->units: deg +directionFromWhichDominantWavesAreComing->scale: 0 +directionFromWhichDominantWavesAreComing->reference: 0 +directionFromWhichDominantWavesAreComing->width: 9 +directionalSpreadOfDominantWave->code: '022077' +directionalSpreadOfDominantWave->units: deg +directionalSpreadOfDominantWave->scale: 0 +directionalSpreadOfDominantWave->reference: 0 +directionalSpreadOfDominantWave->width: 9 +totalNumberOfWaveBands->code: '022094' +totalNumberOfWaveBands->units: Numeric +totalNumberOfWaveBands->scale: 0 +totalNumberOfWaveBands->reference: 0 +totalNumberOfWaveBands->width: 7 +waveSamplingIntervalTime->code: '025043' +waveSamplingIntervalTime->units: s +waveSamplingIntervalTime->scale: 4 +waveSamplingIntervalTime->reference: 0 +waveSamplingIntervalTime->width: 15 +durationOfWaveRecord->code: '022078' +durationOfWaveRecord->units: s +durationOfWaveRecord->scale: 0 +durationOfWaveRecord->reference: 0 +durationOfWaveRecord->width: 12 +waveMeasurementInstrumentation->code: '002046' +waveMeasurementInstrumentation->units: CODE TABLE +waveMeasurementInstrumentation->scale: 0 +waveMeasurementInstrumentation->reference: 0 +waveMeasurementInstrumentation->width: 4 +significantWaveHeight->code: '022070' +significantWaveHeight->units: m +significantWaveHeight->scale: 2 +significantWaveHeight->reference: 0 +significantWaveHeight->width: 13 +spectralPeakWavePeriod->code: '022071' +spectralPeakWavePeriod->units: s +spectralPeakWavePeriod->scale: 1 +spectralPeakWavePeriod->reference: 0 +spectralPeakWavePeriod->width: 9 +maximumWaveHeight->code: '022073' +maximumWaveHeight->units: m +maximumWaveHeight->scale: 2 +maximumWaveHeight->reference: 0 +maximumWaveHeight->width: 13 +averageWavePeriod->code: '022074' +averageWavePeriod->units: s +averageWavePeriod->scale: 1 +averageWavePeriod->reference: 0 +averageWavePeriod->width: 9 +delayedDescriptorReplicationFactor->code: '031001' +delayedDescriptorReplicationFactor->units: Numeric +delayedDescriptorReplicationFactor->scale: 0 +delayedDescriptorReplicationFactor->reference: 0 +delayedDescriptorReplicationFactor->width: 8 +decimalScaleOfFollowingSignificands->code: '008090' +decimalScaleOfFollowingSignificands->units: Numeric +decimalScaleOfFollowingSignificands->scale: 0 +decimalScaleOfFollowingSignificands->reference: -127 +decimalScaleOfFollowingSignificands->width: 8 +scaledMaximumNonDirectionalSpectralWaveDensityByFrequency->code: '022102' +scaledMaximumNonDirectionalSpectralWaveDensityByFrequency->units: m2 s +scaledMaximumNonDirectionalSpectralWaveDensityByFrequency->scale: 0 +scaledMaximumNonDirectionalSpectralWaveDensityByFrequency->reference: 0 +scaledMaximumNonDirectionalSpectralWaveDensityByFrequency->width: 14 +bandContainingMaximumNonDirectionalSpectralWaveDensity->code: '022084' +bandContainingMaximumNonDirectionalSpectralWaveDensity->units: Numeric +bandContainingMaximumNonDirectionalSpectralWaveDensity->scale: 0 +bandContainingMaximumNonDirectionalSpectralWaveDensity->reference: 0 +bandContainingMaximumNonDirectionalSpectralWaveDensity->width: 7 +wavebandCentralFrequency->code: '022080' +wavebandCentralFrequency->units: Hz +wavebandCentralFrequency->scale: 3 +wavebandCentralFrequency->reference: 0 +wavebandCentralFrequency->width: 10 +spectralWaveDensityRatio->code: '022108' +spectralWaveDensityRatio->units: % +spectralWaveDensityRatio->scale: 0 +spectralWaveDensityRatio->reference: 0 +spectralWaveDensityRatio->width: 7 +meanDirectionFromWhichWavesAreComing->code: '022086' +meanDirectionFromWhichWavesAreComing->units: deg +meanDirectionFromWhichWavesAreComing->scale: 0 +meanDirectionFromWhichWavesAreComing->reference: 0 +meanDirectionFromWhichWavesAreComing->width: 9 +principalDirectionFromWhichWavesAreComing->code: '022087' +principalDirectionFromWhichWavesAreComing->units: deg +principalDirectionFromWhichWavesAreComing->scale: 0 +principalDirectionFromWhichWavesAreComing->reference: 0 +principalDirectionFromWhichWavesAreComing->width: 9 +firstNormalizedPolarCoordinateFromFourierCoefficients->code: '022088' +firstNormalizedPolarCoordinateFromFourierCoefficients->units: Numeric +firstNormalizedPolarCoordinateFromFourierCoefficients->scale: 2 +firstNormalizedPolarCoordinateFromFourierCoefficients->reference: 0 +firstNormalizedPolarCoordinateFromFourierCoefficients->width: 7 +secondNormalizedPolarCoordinateFromFourierCoefficients->code: '022089' +secondNormalizedPolarCoordinateFromFourierCoefficients->units: Numeric +secondNormalizedPolarCoordinateFromFourierCoefficients->scale: 2 +secondNormalizedPolarCoordinateFromFourierCoefficients->reference: 0 +secondNormalizedPolarCoordinateFromFourierCoefficients->width: 7 +scaledDirectionalSpectralWaveDensityByFrequency->code: '022106' +scaledDirectionalSpectralWaveDensityByFrequency->units: m2 rad-1 s +scaledDirectionalSpectralWaveDensityByFrequency->scale: 0 +scaledDirectionalSpectralWaveDensityByFrequency->reference: 0 +scaledDirectionalSpectralWaveDensityByFrequency->width: 14 +directionFromWhichWavesAreComing->code: '022186' +directionFromWhichWavesAreComing->units: deg +directionFromWhichWavesAreComing->scale: 0 +directionFromWhichWavesAreComing->reference: 0 +directionFromWhichWavesAreComing->width: 9 +directionalSpreadOfWaves->code: '022187' +directionalSpreadOfWaves->units: deg +directionalSpreadOfWaves->scale: 0 +directionalSpreadOfWaves->reference: 0 +directionalSpreadOfWaves->width: 9 diff --git a/tests/sample-data/wave.bufr b/tests/sample-data/wave.bufr new file mode 100644 index 0000000000000000000000000000000000000000..2ffefa0b1742802ec9a6996beccc8affe3e6f2d5 GIT binary patch literal 1054 zcmYk*eMl2=9LMqBZF5tn&8*Zi=PFBEiOZ}RMVnSKYo?TfJL$zFOGQ!U?oE(48P&Q^ljj{M94c}YsyktO4FypJpwrgKV>DXNC{ z0Jc`B3-r&wdQbp&`}ymd^5=ypO!(-f)FsX}{sRX-G!6;ZW@cay;J1#-V41sq9}3_v zXM4z!R+NS!aN>yEkYM#u0X+UxaYfgAsQ^B9t10>o0V;r{dcIbxQKY-vIz@f{r@092QXLQZ-yOo5&^Jjknh!IyJ!jmcSs{Sb=gJ~ tfmxoQ|M7w_6oHA3P}}AN`bh|ku*)5`E0du97C_e|SoK29j1=rxe*k-`D-Qqw literal 0 HcmV?d00001 diff --git a/tests/sample-data/wave.items b/tests/sample-data/wave.items new file mode 100644 index 00000000..9abf5156 --- /dev/null +++ b/tests/sample-data/wave.items @@ -0,0 +1,128 @@ +messageNumber 1 +edition 3 +masterTableNumber 0 +bufrHeaderSubCentre 0 +bufrHeaderCentre 98 +updateSequenceNumber 0 +dataCategory 31 +dataSubCategory 134 +masterTablesVersionNumber 28 +localTablesVersionNumber 0 +typicalYearOfCentury 20 +typicalMonth 9 +typicalDay 14 +typicalHour 10 +typicalMinute 30 +typicalDate 20200914 +typicalTime 103000 +rdbType 6 +oldSubtype 134 +localYear 2020 +localMonth 9 +localDay 14 +localHour 10 +localMinute 30 +localSecond 0 +rdbtimeDay 14 +rdbtimeHour 13 +rdbtimeMinute 2 +rdbtimeSecond 57 +rdbtimeTime 130257 +rectimeDay 14 +rectimeHour 13 +rectimeMinute 2 +rectimeSecond 57 +restricted 0 +correction1 0 +correction1Part 0 +correction2 0 +correction2Part 0 +correction3 0 +correction3Part 0 +correction4 0 +correction4Part 0 +qualityControl 70 +newSubtype 0 +numberOfSubsets 1 +localLatitude -23.88333 +localLongitude 151.5 +ident 55038 +observedData 1 +compressedData 0 +unexpandedDescriptors [308015] +regionNumber 5 +wmoRegionSubArea 5 +buoyOrPlatformIdentifier 55038 +shipOrMobileLandStationIdentifier MOLODEZNA +satelliteIdentifier -- +blockNumber -- +stationNumber -- +indicatorForMethodOfCalculatingSpectralWaveData 1 +platformType 1 +year 2020 +month 9 +day 14 +hour 10 +minute 30 +latitude -23.88333 +longitude 151.5 +totalWaterDepth 16 +directionFromWhichDominantWavesAreComing 68 +directionalSpreadOfDominantWave 18 +totalNumberOfWaveBands 64 +waveSamplingIntervalTime 0.8 +durationOfWaveRecord 1597 +waveMeasurementInstrumentation [1 2 1] +significantWaveHeight [0.72 --] +spectralPeakWavePeriod [8.200000000000001 --] +maximumWaveHeight [1.28 --] +averageWavePeriod [4.5 --] +delayedDescriptorReplicationFactor [ 1 64 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1] +decimalScaleOfFollowingSignificands [-4 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- + -5 -- -5 -- -5 -- -5 -- -5 -- -4 -- -4 -- -4 -- -4 -- -4 -- -5 -- -5 -- + -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- + -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- + -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- -5 -- + -5 -- -5 -- -5 -- -5 -- -5 --] +scaledMaximumNonDirectionalSpectralWaveDensityByFrequency [3890] +bandContainingMaximumNonDirectionalSpectralWaveDensity [18] +wavebandCentralFrequency [0.025 0.03 0.035 0.04 0.045 0.05 0.055 0.06 0.065 0.07 0.075 0.08 + 0.085 0.09 0.095 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 + 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 + 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 + 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 + 0.55 0.56 0.57 0.58 ] +spectralWaveDensityRatio [ 0 0 0 0 0 0 0 0 0 0 1 1 6 19 14 27 90 100 + 97 75 53 40 39 35 31 22 20 24 21 29 25 29 26 24 21 15 + 17 15 18 14 10 12 12 8 7 4 7 8 5 6 5 6 3 3 + 2 2 3 2 1 2 2 1 2 2] +meanDirectionFromWhichWavesAreComing [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +principalDirectionFromWhichWavesAreComing [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +firstNormalizedPolarCoordinateFromFourierCoefficients [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +secondNormalizedPolarCoordinateFromFourierCoefficients [-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --] +scaledDirectionalSpectralWaveDensityByFrequency [ 2 9 80 110 132 127 159 242 318 304 566 523 + 2350 7480 5760 10600 3520 3890 3780 2950 2070 15900 15200 13900 + 12300 8950 8060 9360 8390 11300 9940 11500 10300 9600 8430 5850 + 6900 5910 7040 5650 4180 4690 4980 3320 2870 1560 2960 3420 + 1950 2390 2020 2380 1350 1550 1130 1040 1280 893 757 837 + 871 589 845 967] +directionFromWhichWavesAreComing [148 92 80 112 76 112 88 100 68 80 52 68 80 68 80 76 72 68 + 72 76 72 76 72 72 64 80 72 68 64 68 72 72 76 76 72 68 + 76 76 76 72 76 76 84 92 96 92 84 84 88 96 88 92 108 84 + 100 104 104 88 100 92 108 92 100 100] +directionalSpreadOfWaves [59 68 61 74 69 68 58 54 57 72 70 58 44 26 30 27 19 18 18 19 20 24 27 25 + 24 25 27 26 30 22 22 19 23 24 26 33 21 27 24 27 39 30 26 33 37 49 34 30 + 44 39 39 32 42 36 42 45 43 51 50 45 41 48 42 42] diff --git a/tests/test_bufr_data.py b/tests/test_bufr_data.py new file mode 100644 index 00000000..1b5dc3b3 --- /dev/null +++ b/tests/test_bufr_data.py @@ -0,0 +1,249 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import numpy as np +import pytest as pt +import warnings + +from eccodes import * +from eccodes.highlevel._bufr.message import * + +@pt.fixture(autouse=True) +def fixture(monkeypatch): + import os + this_dir = os.path.dirname(__file__) + monkeypatch.chdir(this_dir) # always run tests from the tests directory + +def test_data_key(): + assert Key.from_string('year') == Key(name='year') + assert Key.from_string('year->code') == Key(name='year', attribute='code') + assert Key.from_string('year->units') == Key(name='year', attribute='units') + assert Key.from_string('year->reference') == Key(name='year', attribute='reference') + assert Key.from_string('year->scale') == Key(name='year', attribute='scale') + assert Key.from_string('year->width') == Key(name='year', attribute='width') + assert Key.from_string('year->percentConfidence') == Key(name='year->percentConfidence', primary='year', secondary='percentConfidence') + assert Key.from_string('year->percentConfidence->code') == Key(name='year->percentConfidence', primary='year', secondary='percentConfidence', attribute='code') + assert Key.from_string('#1#year') == Key(name='year', rank=1) + assert Key.from_string('#1#year->code') == Key(name='year', rank=1, attribute='code') + assert Key.from_string('#1#year->percentConfidence') == Key(name='year->percentConfidence', rank=1, primary='year', secondary='percentConfidence') + assert Key.from_string('#1#year->percentConfidence->code') == Key(name='year->percentConfidence', rank=1, primary='year', secondary='percentConfidence', attribute='code') + assert 'year' == Key(name='year').string + assert 'year->code' == Key(name='year', attribute='code').string + assert 'year->units' == Key(name='year', attribute='units').string + assert 'year->reference' == Key(name='year', attribute='reference').string + assert 'year->scale' == Key(name='year', attribute='scale').string + assert 'year->width' == Key(name='year', attribute='width').string + assert 'year->percentConfidence' == Key(name='year->percentConfidence', primary='year', secondary='percentConfidence').string + assert 'year->percentConfidence->code' == Key(name='year->percentConfidence', primary='year', secondary='percentConfidence', attribute='code').string + assert '#1#year' == Key(name='year', rank=1).string + assert '#1#year->code' == Key(name='year', rank=1, attribute='code').string + assert '#1#year->percentConfidence' == Key(name='year->percentConfidence', rank=1, primary='year', secondary='percentConfidence').string + assert '#1#year->percentConfidence->code' == Key(name='year->percentConfidence', rank=1, primary='year', secondary='percentConfidence', attribute='code').string + with pt.raises(NotFoundError): Key.from_string('/pressure=85000/airTemperature') + +def test_data_accessors(): + bufr = BUFRMessage(open('./sample-data/synop.bufr')) + # Header keys (should not be accessible from the Data class) + assert "edition" not in bufr.data + with pt.raises(NotFoundError): bufr.data['edition'] + with pt.raises(NotFoundError): bufr.data['edition'] = 3 + # Data keys: defined + assert 'year' in bufr.data + assert 'year->code' in bufr.data + assert 'year->percentConfidence' in bufr.data + assert 'year->percentConfidence->code' in bufr.data + assert '#1#year' in bufr.data + assert '#1#year->code' in bufr.data + assert '#1#year->percentConfidence' in bufr.data + assert '#1#year->percentConfidence->code' in bufr.data + assert bufr.data['year'] == 2009 + assert bufr.data['year->code'] == 4001 + assert bufr.data['year->percentConfidence'] == 70 + assert np.all(bufr.data['cloudAmount'] == np.ma.masked_values([8, -1, -1, -1, -1], -1)) + # assert bufr.data['year->percentConfidence->code'] == TODO + assert bufr.data['#1#year'] == 2009 + assert bufr.data['#1#year->code'] == 4001 + assert bufr.data['#1#year->percentConfidence'] == 70 + assert bufr.data['#1#cloudAmount'] == 8 + # assert bufr.data['#1#year->percentConfidence->code'] == TODO + bufr.data['year'] = 2025 + bufr.data['year->percentConfidence'] = 100 + bufr.data['cloudAmount'] = [1, 2, 3, 4, 5] + bufr.data['#1#year'] = 2025 + bufr.data['#1#year->percentConfidence'] = 100 + bufr.data['#1#cloudAmount'] = 8 + with pt.raises(ReadOnlyError): bufr.data['year->code'] = 0 + with pt.raises(ReadOnlyError): bufr.data['#1#year->code'] = 0 + # with pt.raises(ReadOnlyError): bufr.data['#1#year->percentConfidence->code'] = TODO + # Data keys: undefined + assert 'year->code->code' not in bufr.data + assert 'year->percentConfidence->code->code' not in bufr.data + assert '#2#year' not in bufr.data + assert '#2#year->percentConfidence' not in bufr.data + assert '#2#year->percentConfidence->code' not in bufr.data + # Negative subscripts + bufr = BUFRMessage(open('./sample-data/temp.bufr')) + assert 'centre' in bufr.data[-1] + assert np.all(bufr.data[-1]['centre'] == bufr.data[2]['centre']) + assert 'pressure' in bufr.data[-2] + assert np.all(bufr.data[-2]['pressure'] == bufr.data[1]['pressure']) + assert 'blockNumber' in bufr.data[-3] + assert bufr.data[-3]['blockNumber'] == bufr.data[0]['blockNumber'] + with pt.raises(IndexError): bufr.data[-4] + +def test_data_get_count(): + bufr = BUFRMessage(open('./sample-data/synop.bufr')) + with pt.raises(KeyValueNotFoundError): bufr.data.get_count('edition') + assert bufr.get_count('year') == 1 + assert bufr.get_count('year->code') == 1 + assert bufr.get_count('year->percentConfidence') == 1 + assert bufr.get_count('year->percentConfidence->code') == 1 + assert bufr.get_count('#1#year') == 1 + assert bufr.get_count('#1#year->code') == 1 + assert bufr.get_count('#1#year->percentConfidence') == 1 + assert bufr.get_count('#1#year->percentConfidence->code') == 1 + with pt.raises(KeyValueNotFoundError): bufr.get_count('#2#year') + assert bufr.get_count('cloudAmount') == 5 + assert bufr.get_count('cloudAmount->code') == 5 + assert bufr.get_count('cloudAmount->percentConfidence') == 5 + assert bufr.get_count('cloudAmount->percentConfidence->code') == 5 + assert bufr.get_count('#1#cloudAmount') == 1 + assert bufr.get_count('#1#cloudAmount->code') == 1 + assert bufr.get_count('#1#cloudAmount->percentConfidence') == 1 + assert bufr.get_count('#1#cloudAmount->percentConfidence->code') == 1 + with pt.raises(KeyValueNotFoundError): bufr.get_count('#6#cloudAmount') + bufr = BUFRMessage(open('./sample-data/terra-modis-aerosol.bufr')) + assert bufr.get_count('opticalDepth') == 10 + assert bufr.data[0].get_count('opticalDepth') == 2 + assert bufr.data[1].get_count('opticalDepth') == 8 + assert bufr.data.get_count('#1#opticalDepth') == 1 + assert bufr.data[0].get_count('#1#opticalDepth') == 1 + assert bufr.data[1].get_count('#1#opticalDepth') == 1 + with pt.raises(KeyValueNotFoundError): bufr.data.get_count('#11#opticalDepth') + with pt.raises(KeyValueNotFoundError): bufr.data[0].get_count('#3#opticalDepth') + with pt.raises(KeyValueNotFoundError): bufr.data[1].get_count('#9#opticalDepth') + +def test_data_is_missing(): + bufr = BUFRMessage('BUFR3_local_satellite') + bufr['numberOfSubsets'] = 3 + with pt.raises(KeyValueNotFoundError): bufr.data.is_missing('edition') + assert bufr.is_missing('pressure') + assert bufr.is_missing('#1#pressure') + assert bufr.is_missing('#2#pressure') + array = bufr['pressure'] + assert np.all(array.mask) + assert array.shape[0] > 1 + array[0, :] = 1013.25 + assert not np.all(array.mask) + assert not bufr.is_missing('pressure') + assert not bufr.is_missing('#1#pressure') + assert bufr.is_missing('#2#pressure') + bufr.pack() + assert not bufr.is_missing('pressure') + assert not bufr.is_missing('#1#pressure') + assert bufr.is_missing('#2#pressure') + +def test_data_set_missing(): + bufr = BUFRMessage('BUFR3_local_satellite') + bufr['numberOfSubsets'] = 3 + with pt.raises(KeyValueNotFoundError): bufr.data.set_missing('edition') + with pt.raises(ValueCannotBeMissingError): bufr.set_missing('pressure->units') + bufr['pressure'] = 1013.25 + bufr.pack() + bufr.set_missing('pressure') + array = bufr['pressure'] + assert np.all(array.mask) + bufr['pressure'] = 1013.25 + bufr.pack() + bufr.set_missing('#1#pressure') + array = bufr['pressure'] + assert np.all(array[0,:].mask) + assert not np.any(array[1:,:].mask) + bufr.set_missing('#2#pressure') + assert np.all(array[1,:].mask) + assert not np.any(array[2:,:].mask) + bufr.set_missing('pressure') + assert np.all(array.mask) + +def test_data_type_of_seconds(): + # With default, zero scale -> int + bufr = BUFRMessage('BUFR3_local_satellite') + bufr['numberOfSubsets'] = 3 + bufr['unexpandedDescriptors'] = [4006] + assert bufr['second->scale'] == 0 + assert bufr['second'].dtype == np.dtype(int) + assert bufr['second'].data[0] == CODES_MISSING_LONG + assert bufr['second'][0] is np.ma.masked + # With changed, non-zero scale -> float + bufr = BUFRMessage('BUFR3_local_satellite') + bufr['numberOfSubsets'] = 3 + bufr['unexpandedDescriptors'] = [202131, 4006, 202000] + assert bufr['second->scale'] == 3 + assert bufr['second'].dtype == np.dtype(float) + assert bufr['second'].data[0] == CODES_MISSING_DOUBLE + assert bufr['second'][0] is np.ma.masked + +def test_data_assumed_scalar_elements(): + bufr = BUFRMessage('BUFR3_local_satellite') + bufr['numberOfSubsets'] = 3 + bufr['unexpandedDescriptors'] = [1007] + bufr.data['satelliteIdentifier'] = [1, 2, 3] + bytes = bufr.get_buffer() + bufr = BUFRMessage(bytes) + with change_behaviour() as behaviour: + behaviour.assumed_scalar_elements.add('satelliteIdentifier') + with pt.warns(UserWarning): + assert np.all(bufr.data['satelliteIdentifier'] == [1, 2, 3]) + with change_behaviour() as behaviour: + behaviour.on_assumed_scalar_element_invalid_size = 'raise' + bufr = BUFRMessage(bytes) + with pt.raises(ValueError): + assert np.all(bufr.data['satelliteIdentifier'] == [1, 2, 3]) + with change_behaviour() as behaviour: + behaviour.on_assumed_scalar_element_invalid_size = 'ignore' + bufr = BUFRMessage(bytes) + with warnings.catch_warnings(record=True) as ws: + assert np.all(bufr.data['satelliteIdentifier'] == [1, 2, 3]) + assert not ws + with change_behaviour() as behaviour: + behaviour.assumed_scalar_elements.add('satelliteIdentifier') + # Single rank + bufr = BUFRMessage('BUFR3_local_satellite') + bufr['numberOfSubsets'] = 3 + bufr['unexpandedDescriptors'] = [1007] + assert bufr.data['satelliteIdentifier'] is np.ma.masked + assert bufr.data['#1#satelliteIdentifier'] is np.ma.masked + bufr.data['satelliteIdentifier'] = 1 + bufr.data['#1#satelliteIdentifier'] = 1 + bufr.pack() + assert bufr.data['satelliteIdentifier'] == 1 + with pt.raises(ValueError): + bufr.data['satelliteIdentifier'] = [1, 2, 3] + # Multiple ranks + bufr = BUFRMessage('BUFR3_local_satellite') + bufr['numberOfSubsets'] = 3 + bufr['unexpandedDescriptors'] = [1007, 1007] + value = bufr.data['satelliteIdentifier'] + assert isinstance(value, np.ndarray) + assert value.shape == (2,) + assert value.all() is np.ma.masked + value1 = bufr.data['#1#satelliteIdentifier'] + assert value1 is np.ma.masked + bufr.data['satelliteIdentifier'] = [0, 0] + assert np.all(bufr.data['satelliteIdentifier'] == 0) + bufr.data['#1#satelliteIdentifier'] = 1 + bufr.data['#2#satelliteIdentifier'] = 2 + assert np.all(bufr.data['satelliteIdentifier'] == [1, 2]) + +def test_data_assignment_with_non_native_types(): + bufr = BUFRMessage('BUFR3_local_satellite') + bufr['satelliteIdentifier'] = np.int8(0) + bufr['satelliteIdentifier'] = np.int16(0) + bufr['satelliteIdentifier'] = np.int32(0) + bufr['latitude'] = np.float32(0) + diff --git a/tests/test_bufr_examples.py b/tests/test_bufr_examples.py new file mode 100644 index 00000000..620e5555 --- /dev/null +++ b/tests/test_bufr_examples.py @@ -0,0 +1,75 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import io +import pytest + +from pathlib import Path + +@pytest.fixture(autouse=True) +def fixture(monkeypatch): + this_dir = Path(__file__).parent + monkeypatch.syspath_prepend(this_dir.parent) + # monkeypatch.chdir(this_dir.parent / 'data') + monkeypatch.chdir(this_dir / 'sample-data') + +def compare(output: str, reference: Path): + if not reference.exists(): + reference.write_text(output) + try: + assert output == reference.read_text() + except AssertionError as error: + reference.with_suffix(reference.suffix + '.bad').write_text(output) + raise error + else: + reference.with_suffix(reference.suffix + '.bad').unlink(missing_ok=True) + +inputs = [ + 'acars.bufr', + 'ahi-himawari-8.bufr', + 'amsu-a-noaa-19.bufr', + 'amv-goes-9.bufr', + 'amv-insat-3d.bufr', + 'amv-meteosat-9.bufr', + 'amv-noaa-20.bufr', + 'aura-omi-ak.bufr', + 'buoy-drifting.bufr', + 'geos-abi-goes-16.bufr', + 'geos-mviri-meteosat-7.bufr', + 'hdob.bufr', + 'rwp.bufr', + 'rwp_jma.bufr', + 'saral-altika.bufr', + 'sral_sentinel_3a.bufr', + 'synop.bufr', + 'synop_multi_subset.bufr', + 'temp.bufr', + 'terra-modis-aerosol.bufr', + 'wave.bufr', +] + +@pytest.mark.parametrize('input', inputs) +def test_attributes_example(input): + from examples.attributes import run_example + input = Path(input) + stream = io.StringIO() + run_example(input, output=stream) + output = stream.getvalue() + reference = input.with_suffix('.attributes') + compare(output, reference) + + +@pytest.mark.parametrize('input', inputs) +def test_items_example(input): + from examples.items import run_example + input = Path(input) + stream = io.StringIO() + run_example(input, stream) + output = stream.getvalue() + reference = input.with_suffix('.items') + compare(output, reference) diff --git a/tests/test_bufr_header.py b/tests/test_bufr_header.py new file mode 100644 index 00000000..e3f343bb --- /dev/null +++ b/tests/test_bufr_header.py @@ -0,0 +1,78 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import pytest as pt + +from eccodes.highlevel._bufr.message import * + +@pt.fixture(autouse=True) +def fixture(monkeypatch): + import os + this_dir = os.path.dirname(__file__) + monkeypatch.chdir(this_dir) # always run tests from the tests directory + +def test_header_accessors(): + bufr = BUFRMessage(open('./sample-data/synop.bufr')) + # Make sure we can access header section keys + assert 'localYear' in bufr.header + bufr.header['localYear'] = 2025 + assert bufr.header['localYear'] == 2025 + # Make sure we can't access data section keys + assert 'year' not in bufr.header + assert 'year->code' not in bufr.header + assert 'year->percentConfidence' not in bufr.header + assert 'year->percentConfidence->code' not in bufr.header + with pt.raises(KeyValueNotFoundError): bufr.header['year'] + with pt.raises(KeyValueNotFoundError): bufr.header['year->code'] + with pt.raises(KeyValueNotFoundError): bufr.header['year->percentConfidence'] + with pt.raises(KeyValueNotFoundError): bufr.header['year->percentConfidence->code'] + with pt.raises(KeyValueNotFoundError): bufr.header['year'] = 2025 + with pt.raises(KeyValueNotFoundError): bufr.header['year->percentConfidence'] = 100 + +def test_header_get_count(): + bufr = BUFRMessage("BUFR3_local") + assert bufr.get_count('edition') == 1 + with pt.raises(KeyValueNotFoundError): bufr.header.get_count('year') + with pt.raises(KeyValueNotFoundError): bufr.header.get_count('#1#year') + +def test_header_is_missing(): + bufr = BUFRMessage('BUFR3_local') + assert not bufr.is_missing('edition') + with pt.raises(KeyValueNotFoundError): bufr.header.is_missing('year') + +def test_header_set_missing(): + bufr = BUFRMessage('BUFR3_local') + with pt.raises(ValueCannotBeMissingError): bufr.set_missing('edition') + with pt.raises(KeyValueNotFoundError): bufr.header.set_missing('year') + +def test_header_computed_keys(): + bufr = BUFRMessage('BUFR3') + bufr['typicalDate'] = dt.date(2000, 1, 2) + bufr['typicalTime'] = dt.time(3, 4) + assert bufr['typicalDateTime'] == np.datetime64('2000-01-02T03:04') + assert bufr['typicalDate'] == np.datetime64('2000-01-02') + assert bufr['typicalTime'] == np.timedelta64(3*60 + 4, 'm') + bufr['typicalDate'] = dt.datetime(2000, 1, 2) + bufr['typicalTime'] = dt.timedelta(hours=3, minutes=4) + assert bufr['typicalDateTime'] == np.datetime64('2000-01-02T03:04') + bufr['typicalDate'] = np.datetime64('2000-01-02', 'D') + bufr['typicalTime'] = np.timedelta64(3*60 + 4, 'm') + assert bufr['typicalDateTime'] == np.datetime64('2000-01-02T03:04') + bufr['typicalDate'] = '2000-01-02' + bufr['typicalTime'] = '03:04' + assert bufr['typicalDateTime'] == np.datetime64('2000-01-02T03:04') + with pt.raises(NotFoundError): bufr['localDateTime'] + bufr = BUFRMessage('BUFR3_local') + bufr['localYear'] = 2000 + bufr['localMonth'] = 1 + bufr['localDay'] = 2 + bufr['localHour'] = 3 + bufr['localMinute'] = 4 + assert bufr['localDateTime'] == np.datetime64('2000-01-02T03:04') + assert bufr['localDate'] == np.datetime64('2000-01-02') + assert bufr['localTime'] == np.timedelta64(3*60 + 4, 'm') diff --git a/tests/test_bufr_helpers.py b/tests/test_bufr_helpers.py new file mode 100644 index 00000000..1ac41c20 --- /dev/null +++ b/tests/test_bufr_helpers.py @@ -0,0 +1,186 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import numpy as np +import pytest as pt + +from eccodes.highlevel._bufr.helpers import * + +# Test RaggedArray + +def test_ragged_array_getset(): + a0 = RaggedArray(0) + assert a0.ndim == 0 + assert a0[None] == 0 + assert a0[()] == 0 + a1 = RaggedArray([0, 1]) + assert a1.ndim == 1 + assert a1[0] == 0 + assert a1[(1,)] == 1 + a1[0] = -0 + a1[(1,)] = -1 + assert a1[0] == -0 + assert a1[(1,)] == -1 + a2 = RaggedArray([[0], [1, 2]]) + assert a2.ndim == 2 + assert a2[(0, 0)] == 0 + assert a2[(1, 0)] == 1 + assert a2[(1, 1)] == 2 + a2[(0, 0)] = -0 + a2[(1, 0)] = -1 + a2[(1, 1)] = -2 + assert a2[(0, 0)] == -0 + assert a2[(1, 0)] == -1 + assert a2[(1, 1)] == -2 + +def test_ragged_array_insert(): + a0 = RaggedArray.empty(ndim=0) + assert a0.data == None + assert a0.ndim == 0 + a0.insert((), 0) + assert a0[()] == 0 + a1 = RaggedArray.empty(ndim=1) + assert a1.data == [] + assert a1.ndim == 1 + a1.insert(0, 0) + a1.insert((1,), 1) + assert a1.data == [0, 1] + a2 = RaggedArray.empty(ndim=2) + assert a2.data == [[]] + assert a2.ndim == 2 + a2.insert((0, 0), 0) + assert a2.data == [[0]] + a2.insert((1, 0), 1) + a2.insert((1, 1), 2) + assert a2.data == [[0],[1, 2]] + +def test_ragged_array_bool(): + assert bool(RaggedArray(0)) == False + assert bool(RaggedArray([])) == False + assert bool(RaggedArray([[]])) == False + assert bool(RaggedArray(1)) == True + assert bool(RaggedArray([0])) == True + assert bool(RaggedArray([[0]])) == True + +# Test get_datetime() + +def test_get_datetime_with_no_seconds(): + data = dict(year=2000, month=1, day=2, hour=3, minute=4) + datetime = get_datetime(data) + assert not isinstance(datetime, np.ndarray) + assert datetime == np.datetime64('2000-01-02T03:04') + +def test_get_datetime_with_missing_seconds(): + data = dict(year=2000, month=1, day=2, hour=3, minute=4) + data.update(second=CODES_MISSING_LONG) + datetime = get_datetime(data) + assert datetime is np.ma.masked + data.update(second=np.ma.masked) + datetime = get_datetime(data) + assert datetime is np.ma.masked + data.update(second=[5, CODES_MISSING_LONG]) + datetime = get_datetime(data) + assert isinstance(datetime, np.ndarray) + assert datetime.size == 2 + assert datetime[0] == np.datetime64('2000-01-02T03:04:05') + assert datetime[1] is np.ma.masked + assert np.ma.all(datetime == np.array(['2000-01-02T03:04:05', 'NaT'], dtype='M8[s]')) + +def test_get_datetime_with_decimal_seconds(): + data = dict(year=2000, month=1, day=2, hour=3, minute=4) + data.update(second=[5.6, CODES_MISSING_DOUBLE]) + datetime = get_datetime(data) + assert isinstance(datetime, np.ndarray) + assert datetime.size == 2 + assert datetime[0] == np.datetime64('2000-01-02T03:04:05.6') + assert datetime[1] is np.ma.masked + assert np.ma.all(datetime == np.array(['2000-01-02T03:04:05.6', 'NaT'], dtype='M8[ms]')) + +def test_get_datetime_with_out_of_range_seconds(): + data = dict(year=2000, month=1, day=2, hour=3, minute=4) + data.update(second=[5, 60]) + datetime = get_datetime(data) + assert isinstance(datetime, np.ndarray) + assert datetime.size == 2 + assert datetime[0] == np.datetime64('2000-01-02T03:04:05') + assert datetime[1] == np.datetime64('2000-01-02T03:04:59') + +def test_get_datetime_with_int32_seconds(): + data = dict(year=2000, month=1, day=2, hour=3, minute=4) + data.update(second=np.array([5, 6], dtype='int32')) + datetime = get_datetime(data) + assert isinstance(datetime, np.ndarray) + assert datetime.size == 2 + assert datetime[0] == np.datetime64('2000-01-02T03:04:05') + assert datetime[1] == np.datetime64('2000-01-02T03:04:06') + +def test_get_datetime_with_microseconds(): + data = dict(year=2000, month=1, day=2, hour=3, minute=4, secondsWithinAMinuteMicrosecond=5.6789) + datetime = get_datetime(data) + assert not isinstance(datetime, np.ndarray) + assert datetime == numpy.datetime64('2000-01-02T03:04:05.6789') + +def test_get_datetime_with_seconds_and_microseconds(): + data = dict(year=2000, month=1, day=2, hour=3, minute=4, second=5, secondsWithinAMinuteMicrosecond=5.6789) + datetime = get_datetime(data) + assert not isinstance(datetime, np.ndarray) + assert datetime == numpy.datetime64('2000-01-02T03:04:05.6789') + +def test_get_datetime_with_prefix(): + header = dict(rdbtimeDay=2, rdbtimeHour=3, rdbtimeMinute=4, rdbtimeSecond=5) + with pt.raises(KeyError): + datetime = get_datetime(header, prefix='rdbtime') + datetime = get_datetime(header, prefix='rdbtime', year=2000, month=1) + assert not isinstance(datetime, np.ndarray) + assert datetime == numpy.datetime64('2000-01-02T03:04:05') + +def test_get_datetime_with_rank(): + data = dict(year=[2000, 2001, 2002], month=[1, 2, 3], day=[2, 3, 4]) + data.update(hour=[3, 4, 5], minute=[4, 5, 6], second=[5, 6, 7]) + for name, values in list(data.items()): + # data.pop(name) + for rank, value in enumerate(values, 1): + data[f'#{rank}#{name}'] = value + # Number + datetime = get_datetime(data, rank=2) + assert not isinstance(datetime, np.ndarray) + assert datetime == np.datetime64('2001-02-03T04:05:06') + # Slice + datetime = get_datetime(data, rank=slice(2, None)) + assert isinstance(datetime, np.ndarray) + assert np.all(datetime == np.array(['2001-02-03T04:05:06', '2002-03-04T05:06:07'], dtype='M8[s]')) + +# Test missing_of() + +def test_missing_of(): + with pt.raises(ValueError): missing_of(np.int8) + with pt.raises(ValueError): missing_of(np.int16) + assert CODES_MISSING_LONG == missing_of(np.int32) + assert CODES_MISSING_LONG == missing_of(np.int64) + with pt.raises(ValueError): missing_of(np.dtype('i2')) + with pt.raises(ValueError): missing_of(np.dtype('f4')) + assert CODES_MISSING_LONG == missing_of(np.dtype('i4')) + assert CODES_MISSING_LONG == missing_of(np.dtype('i8')) + assert CODES_MISSING_LONG == missing_of(np.array([1])) + assert CODES_MISSING_LONG == missing_of([1]) + assert CODES_MISSING_LONG == missing_of(1) + with pt.raises(ValueError): missing_of(np.float16) + with pt.raises(ValueError): missing_of(np.float32) + assert CODES_MISSING_DOUBLE == missing_of(np.float64) + assert CODES_MISSING_DOUBLE == missing_of(np.dtype('f8')) + assert CODES_MISSING_DOUBLE == missing_of(np.array([1.0])) + assert CODES_MISSING_DOUBLE == missing_of([1.0]) + assert CODES_MISSING_DOUBLE == missing_of(1.0) + assert '' == missing_of(np.dtype('U')) + assert '' == missing_of(np.array(["one"])) + assert '' == missing_of(["one"]) + assert '' == missing_of("one") + assert np.array(CODES_MISSING_LONG, 'M8[D]') == missing_of(np.dtype('M8[D]')) + assert np.array(CODES_MISSING_LONG, 'M8[D]') == missing_of(np.array(1, 'M8[D]')) + assert np.array(CODES_MISSING_LONG, 'm8[h]') == missing_of(np.dtype('m8[h]')) + assert np.array(CODES_MISSING_LONG, 'm8[h]') == missing_of(np.array(1, 'm8[h]')) diff --git a/tests/test_bufr_message.py b/tests/test_bufr_message.py new file mode 100644 index 00000000..ac33e4b6 --- /dev/null +++ b/tests/test_bufr_message.py @@ -0,0 +1,418 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import datetime as dt +import numpy as np +import pytest as pt + +from eccodes import * +from eccodes.highlevel._bufr import * + +@pt.fixture(autouse=True) +def fixture(monkeypatch): + import os + this_dir = os.path.dirname(__file__) + monkeypatch.chdir(this_dir) # always run tests from the tests directory + +def unpacked(bufr): + defined = codes_is_defined(bufr._handle, 'year') + return bool(defined) + +def compare_items(m1, m2, keys=None): + if keys: + keys = list(keys) + i1 = [(k, m1[k]) for k in keys] + i2 = [(k, m2[k]) for k in keys] + else: + i1 = list(m1.items()) + i2 = list(m2.items()) + for (k1, v1), (k2, v2) in zip(i1, i2): + assert k1 == k2 + if isinstance(v1, np.ndarray): + if v1.dtype.type == np.str_: + equal = np.char.compare_chararrays(v1, v2, '==', rstrip=True) + else: + equal = v1.data == v2.data + assert k1 and np.all(equal) + else: + assert k1 and v1 == v2 + +def test_message_uncompressed(): + bufr = BUFRMessage(open('./sample-data/synop_multi_subset.bufr')) + assert bufr['edition'] == 4 + assert np.all(bufr['unexpandedDescriptors'] == [307079, 4025, 11042]) # is always array + assert 'dataCategory' in bufr.header + assert bufr.get_count('dataCategory') == 1 + bufr['dataCategory'] = 11 + assert not unpacked(bufr) + assert not 'underfined' in bufr # triggers unpacking + assert unpacked(bufr) + # Accessing undefined elements raises an exception + with pt.raises(KeyValueNotFoundError): + bufr['undefined'] + with pt.raises(KeyValueNotFoundError): + bufr['undefined'] = 0 + assert 'blockNumber' in bufr + assert bufr.get_count('blockNumber') == 12 + assert len(bufr.data) == 12 # number of subsets + assert len(bufr.data[0]) == 19 # number of data tree nodes per subset + assert np.all(bufr['stationNumber'].data == np.array([27, 84, 270, 272, 308, 371, 381, 382, 387, 413, 464, 485])) + assert bufr['#1#stationNumber'] == 27 + assert bufr.data[0]['stationNumber'] == 27 # of the 1st subset + bufr['stationNumber'][0] = missing_of(int) + assert bufr['stationNumber'].data[0] == missing_of(int) + bufr['stationNumber'] = missing_of(int) + assert np.all(bufr['stationNumber'].data == missing_of(int)) + # Keys can have element attribute as a suffix (à la ecCodes) + assert bufr['stationNumber->units'] == 'Numeric' + # Attempting to modify element attributes raises an exception + with pt.raises(ReadOnlyError): + bufr['stationNumber->units'] = 'Turmeric' + +def test_message_compressed(): + bufr = BUFRMessage(open('./sample-data/sral_sentinel_3a.bufr')) + assert len(bufr.data) == 1 # this message doesn't have any replications, so the structure is flat + year = bufr['year'] + assert year.shape == (22, 5) + assert np.all(year[ 0].data == 2017) + assert np.all(year[-1].data == missing_of(int)) + # Keys can have rank prefix (à la ecCodes) + bufr['#1#year'] = 2018 + assert np.all(bufr['#1#year'].data == 2018) + # Packing the message by setting the 'pack' key is disallowed + with pt.raises(KeyValueNotFoundError): + bufr['pack'] = 1 + # The same goes for unpacking + with pt.raises(KeyValueNotFoundError): + bufr['unpack'] = 1 + +def test_message_sample_defaults(): + bufr = BUFRMessage('BUFR3') + assert bufr['edition'] == 3 + assert bufr['masterTableNumber'] == 0 + assert bufr['masterTablesVersionNumber'] == 24 + assert bufr['localTablesVersionNumber'] == 0 + assert bufr['bufrHeaderCentre'] == 98 + assert bufr['bufrHeaderSubCentre'] == 0 + assert bufr['numberOfSubsets'] == 1 + assert bufr['compressedData'] == False + assert bufr['section2Present'] == False + assert np.all(bufr['unexpandedDescriptors'] == 307080) + bufr = BUFRMessage('BUFR3_local') + assert bufr['edition'] == 3 + assert bufr['masterTableNumber'] == 0 + assert bufr['masterTablesVersionNumber'] == 24 + assert bufr['localTablesVersionNumber'] == 0 + assert bufr['bufrHeaderCentre'] == 98 + assert bufr['bufrHeaderSubCentre'] == 0 + assert bufr['numberOfSubsets'] == 1 + assert bufr['compressedData'] == False + assert bufr['section2Present'] == True + assert np.all(bufr['unexpandedDescriptors'] == 307080) + bufr = BUFRMessage('BUFR4_local') + assert bufr['edition'] == 4 + assert bufr['masterTableNumber'] == 0 + assert bufr['masterTablesVersionNumber'] == 24 + assert bufr['localTablesVersionNumber'] == 0 + assert bufr['bufrHeaderCentre'] == 98 + assert bufr['bufrHeaderSubCentre'] == 0 + assert bufr['numberOfSubsets'] == 1 + assert bufr['compressedData'] == False + assert np.all(bufr['unexpandedDescriptors'] == 307080) + bufr = BUFRMessage('BUFR3_local_satellite') + assert bufr['edition'] == 3 + assert bufr['masterTableNumber'] == 0 + assert bufr['masterTablesVersionNumber'] == 13 + assert bufr['localTablesVersionNumber'] == 1 + assert bufr['bufrHeaderCentre'] == 98 + assert bufr['bufrHeaderSubCentre'] == 0 + assert bufr['numberOfSubsets'] == 128 + assert bufr['compressedData'] == True + assert np.all(bufr['unexpandedDescriptors'] == 310014) + bufr = BUFRMessage('BUFR4_local_satellite') + assert bufr['edition'] == 4 + assert bufr['masterTableNumber'] == 0 + assert bufr['masterTablesVersionNumber'] == 13 + assert bufr['localTablesVersionNumber'] == 1 + assert bufr['bufrHeaderCentre'] == 98 + assert bufr['bufrHeaderSubCentre'] == 0 + assert bufr['numberOfSubsets'] == 128 + assert bufr['compressedData'] == True + assert np.all(bufr['unexpandedDescriptors'] == 310008) + +def test_message_new_from_sample(): + bufr = BUFRMessage('BUFR3_local_satellite') + # If the tables version is not set properly, eccodes fails with + # "HashArrayNoMatchError: Hash array no match" when setting + # unexpandedDescriptors. + bufr['masterTablesVersionNumber'] = 18 + bufr['localTablesVersionNumber'] = 0 + bufr['numberOfSubsets'] = 2 + bufr['compressedData'] = True + # Input replication factors are optional; will default to 0 if not set. + bufr['inputDelayedDescriptorReplicationFactor'] = [0, 0] + bufr['inputShortDelayedDescriptorReplicationFactor'] = [0, 0, 0, 0, 0, 0] + bufr['unexpandedDescriptors'] = [311011] + + bufr['year'] = 2022 + + # Template-related items can't be changed once the header is "baked" in + for key in ('numberOfSubsets', 'compressedData', 'unexpandedDescriptors'): + with pt.raises(ReadOnlyError): + bufr[key] = 1 + # Test that common Section 2 keys are set properly + bufr.pack() + assert bufr['localNumberOfObservations'] == bufr['numberOfSubsets'] + +def test_message_new_from_bytes(): + old = BUFRMessage('BUFR3_local') + bytes = old.get_buffer() + new = BUFRMessage(bytes) + compare_items(old.header, new.header, keys=old.header.keys(skip='read_only')) + compare_items(old.data, new.data) + +def test_message_context_manager(): + bufr = BUFRMessage('BUFR3_local') + assert bufr._handle > 0 + with bufr: + pass + assert bufr._handle == 0 + +def test_message_copy(): + # Copy is the same as the original (note that copying doesn't require unpacking) + old = BUFRMessage(open('./sample-data/synop.bufr')) + assert unpacked(old) is False + new = old.copy() + assert unpacked(old) is False + assert old['md5Data'] == new['md5Data'] + assert old._handle != new._handle + compare_items(old, new) + + # FIXME: The following code doesnt't work because eccodes apparently doesn't + # update typicalDate (which is computed key) when we modify typicalYearOfCentury . + + # After chainging one of the header section keys + # old['typicalYearOfCentury'] = 25 + # new = old.copy() + # assert old['md5Data'] == new['md5Data'] + # compare_items(old, new) + + # After changing one of the data section keys + old['blockNumber'] = 99 + new = old.copy() + assert old['md5Data'] == new['md5Data'] + compare_items(old, new) + +def test_message_copy_subsets(): + old = BUFRMessage(open('./sample-data/ahi-himawari-8.bufr')) + old_count = old['numberOfSubsets'] + old['second'] = range(0, old_count) + # Copy adjacent subsets where mask is True (uses extractSubsetInterval) + mask = np.repeat(False, old_count) + mask[0:3] = True + with old.copy(subsets=mask) as new: + assert new['numberOfSubsets'] == 3 + assert np.all(new['second'] == [0, 1, 2]) + # # Copy adjacent subsets where mask is True (uses extractSubsetList) + mask = np.repeat(False, old_count) + mask[[0, 2, 4]] = True + with old.copy(subsets=mask) as new: + assert new['numberOfSubsets'] == 3 + assert np.all(new['second'] == [0, 2, 4]) + # Copy a range of adjacent subsets (uses extractSubsetInterval) + with old.copy(subsets=range(3)) as new: + assert new['numberOfSubsets'] == 3 + assert np.all(new['second'] == [0, 1, 2]) + # Copy a range of non-adjacent subsets (uses extractSubsetList) + with old.copy(subsets=range(0, 5, 2)) as new: + assert new['numberOfSubsets'] == 3 + assert np.all(new['second'] == [0, 2, 4]) + # Copy a list of adjacent subsets (uses extractSubsetInterval) + with old.copy(subsets=[0, 1, 2]) as new: + assert new['numberOfSubsets'] == 3 + assert np.all(new['second'] == [0, 1, 2]) + # Copy a list of non-adjacent subsets (uses extractSubsetList) + with old.copy(subsets=[0, 2, 4]) as new: + assert new['numberOfSubsets'] == 3 + assert np.all(new['second'] == [0, 2, 4]) + # Copy a full slice of all subsets + # (uses extractSubsetInterval, or no extraction if there were no previous ones) + with old.copy(subsets=slice(None, None, None)) as new: # [1] + assert new['numberOfSubsets'] == old_count + assert np.all(new['second'] == range(0, old_count)) + # Copy every 4th subset (uses extractSubsetInterval) + with old.copy(subsets=slice(None, None, 4)) as new: + assert new['numberOfSubsets'] == divmod(old_count, 4)[0] + assert np.all(new['second'] == range(0, old_count, 4)) + # Copy every 4th subset within a range (uses extractSubsetList) + with old.copy(subsets=slice(16, 32, 4)) as new: + assert new['numberOfSubsets'] == divmod(32 - 16, 4)[0] + assert np.all(new['second'] == old['second'][16:32:4]) + # Copy datetime slice (uses extractSubsetInterval) + old_datetime = old.get_datetime() + start = old_datetime[0].item() + end = start + dt.timedelta(seconds=2) + with old.copy(subsets=slice(None, end)) as new: + assert new['numberOfSubsets'] == 3 + new_datetime = new.get_datetime() + assert np.all(new_datetime == old_datetime[0:3]) + + # [1] Note that this prints a lot of 'ECCODES ERROR' messages due to ECC-2025, + # but otherwise the code works OK because we work around the issue internally. + +def test_message_copy_to(): + old = BUFRMessage(open('./sample-data/aura-omi-ak.bufr')) + new = BUFRMessage('BUFR3_local_satellite') + old.copy_to(new) + compare_items(old.header, new.header, keys=old.header.keys(skip='read_only')) + compare_items(old.data, new.data) + +def test_message_eq(): + bufr1 = BUFRMessage(open('./sample-data/synop.bufr')) + bufr2 = BUFRMessage(open('./sample-data/synop.bufr')) + assert bufr1 == bufr2 + bufr1['typicalDay'] = 1 + bufr2['typicalDay'] = 2 + assert bufr1.header != bufr2.header + assert bufr1.data == bufr2.data + +def test_message_update(): + bufr = BUFRMessage('BUFR3') + bufr.update(year=2000) + bufr.update({'month': 2}) + bufr.update([('day', 4)]) + bufr.update(dict(hour=8, minute=16).items()) + assert bufr['year'] == 2000 + assert bufr['month'] == 2 + assert bufr['day'] == 4 + assert bufr['hour'] == 8 + assert bufr['minute'] == 16 + +def test_message_get_datetime_compressed(): + bufr = BUFRMessage('BUFR4_local_satellite') + bufr.update(numberOfSubsets=2) + datetime = bufr.get_datetime() + assert isinstance(datetime, np.ndarray) + assert datetime.size == 2 + assert datetime.all() is np.ma.masked + bufr.update(year=2000, month=1, day=2, hour=3, minute=4) + bufr.update(second=[5, CODES_MISSING_LONG]) + datetime = bufr.get_datetime() + assert isinstance(datetime, np.ndarray) + assert datetime.size == 2 + assert np.ma.all(datetime == np.array(['2000-01-02T03:04:05', 'NaT'], dtype='M8[s]')) + +def test_message_get_datetime_uncompressed(): + bufr = BUFRMessage('BUFR3') + datetime = bufr.get_datetime() + assert datetime is np.ma.masked + bufr.update(year=2000, month=1, day=2, hour=3, minute=4) + datetime = bufr.get_datetime() + assert not isinstance(datetime, np.ndarray) + assert datetime == np.datetime64('2000-01-02T03:04:00') + datetime = bufr.get_datetime(prefix='typical') + assert datetime == np.datetime64('2012-10-31T00:02:00') + +def test_message_set_datetime_compressed(): + bufr = BUFRMessage('BUFR4_local_satellite') + # bufr.update(numberOfSubsets=3, unexpandedDescriptors=310008) + bufr.update(numberOfSubsets=3) + # Built-in datetime object + datetime = np.datetime64('2000-01-02T03:04:05', 's').item() + bufr.set_datetime(datetime) + assert np.all(bufr['year'] == 2000) + assert np.all(bufr['month'] == 1) + assert np.all(bufr['day'] == 2) + assert np.all(bufr['hour'] == 3) + assert np.all(bufr['minute'] == 4) + assert np.all(bufr['second'] == 5) + # Numpy datetime64 array + values = ['2000-01-02T03:04:05', '2000-01-02T06:07:08', 'NaT'] + array = np.ma.array(values, dtype='M8[s]', mask=[False, False, True]) + bufr.set_datetime(array) + assert np.all(bufr['year'] == 2000) + assert np.all(bufr['month'] == 1) + assert np.all(bufr['day'] == 2) + assert np.all(bufr['hour'] == np.array([3, 6, -1])) + assert np.all(bufr['minute'] == np.array([4, 7, -1])) + assert np.all(bufr['second'] == np.array([5, 8, -1])) + # Unless explicitly set by the user, all datetime-related keys from the header + # section (i.e., typicalYear, typicalMonth, etc.) get updated automatically, + # whilst packing, based on values from the data section. + bufr['typicalYear'] + bufr['localYear'] + bufr.pack() + assert bufr['typicalYear'] == 2000 + assert bufr['typicalMonth'] == 1 + assert bufr['typicalDay'] == 2 + assert bufr['typicalHour'] == 3 + assert bufr['typicalMinute'] == 4 + assert bufr['typicalSecond'] == 5 + assert bufr['localYear'] == 2000 + assert bufr['localMonth'] == 1 + assert bufr['localDay'] == 2 + assert bufr['localHour'] == 3 + assert bufr['localMinute'] == 4 + assert bufr['localSecond'] == 5 + # But respect values of section 1 keys if explicitly set by the user. + bufr.update(typicalMinute=0, typicalSecond=0) + bufr.update(localMinute=0, localSecond=0) + bufr.pack() + assert bufr['typicalMinute'] == 0 + assert bufr['typicalSecond'] == 0 + assert bufr['localMinute'] == 0 + assert bufr['localSecond'] == 0 + +def test_message_set_datetime_compressed_irregular(): + bufr = BUFRMessage('BUFR3_local_satellite') + bufr.update(numberOfSubsets=3) + assert bufr.get_count('year') == 2 + assert bufr.get_count('month') == 2 + assert bufr.get_count('day') == 2 + assert bufr.get_count('hour') == 10 + assert bufr.get_count('minute') == 9 + assert bufr.get_count('second') == 9 + values = ['2000-01-02T03:04:05', '2000-01-02T06:07:08', 'NaT'] + array = np.ma.array(values, dtype='M8[s]', mask=[False, False, True]) + bufr.set_datetime(array, rank=1) + assert np.all(bufr['#1#year'] == 2000) + assert np.all(bufr['#1#month'] == 1) + assert np.all(bufr['#1#day'] == 2) + assert np.all(bufr['#1#hour'] == np.array([3, 6, -1])) + assert np.all(bufr['#1#minute'] == np.array([4, 7, -1])) + assert np.all(bufr['#1#second'] == np.array([5, 8, -1])) + assert np.all(bufr['year'][1:]) is np.ma.masked + assert np.all(bufr['month'][1:]) is np.ma.masked + assert np.all(bufr['day'][1:]) is np.ma.masked + assert np.all(bufr['hour'][1:]) is np.ma.masked + assert np.all(bufr['minute'][1:]) is np.ma.masked + assert np.all(bufr['second'][1:]) is np.ma.masked + # Section 1 keys updated whilst packing + bufr['typicalYearOfCentury'] + bufr.pack() + assert bufr.get_datetime(prefix='typical') == np.datetime64(values[0]) + assert bufr.get_datetime(prefix='local') == np.datetime64(values[0]) + +def test_message_set_datetime_uncompressed(): + bufr = BUFRMessage('BUFR3_local') + datetime = np.datetime64('2000-01-02T03:04:05', 's').item() + bufr.set_datetime(datetime) + assert bufr['year'] == 2000 + assert bufr['month'] == 1 + assert bufr['day'] == 2 + assert bufr['hour'] == 3 + assert bufr['minute'] == 4 + # Section 1 keys updated whilst packing + bufr['typicalYearOfCentury'] + bufr.pack() + assert bufr['typicalYearOfCentury'] == 0 + assert bufr['typicalMonth'] == 1 + assert bufr['typicalDay'] == 2 + assert bufr['typicalHour'] == 3 + assert bufr['typicalMinute'] == 4 + assert bufr['typicalSecond'] == 0 diff --git a/tests/test_bufr_workarounds.py b/tests/test_bufr_workarounds.py new file mode 100644 index 00000000..4dacbf09 --- /dev/null +++ b/tests/test_bufr_workarounds.py @@ -0,0 +1,89 @@ +# Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import numpy as np +import pytest as pt + +import eccodes; from eccodes import * + +from eccodes.highlevel._bufr import * + +@pt.fixture(autouse=True) +def fixture(monkeypatch): + import os + this_dir = os.path.dirname(__file__) + monkeypatch.chdir(this_dir) # always run tests from the tests directory + +@pt.mark.skipif(eccodes.__version__ < '2.41.0', + reason='requires eccodes 2.41.0; otherwise segfaults (see ECC-2024)') +def test_workaround_for_ECC_2015(): + old = BUFRMessage(open('./sample-data/hdob.bufr')) + new = old.copy(subsets=[0]) + new = old.copy(subsets=[1]) # would fail without the workaround + +def test_workaround_for_ECC_1624(): + + # Consider the following message with operator 222000, and thus the 'centre' + # key in the data section. + bufr = BUFRMessage('BUFR3') + bufr['numberOfSubsets'] = 1 + bufr['compressedData'] = 0 + bufr['unexpandedDescriptors'] = [307011, 7006, 10004, 222000, 101023, 31031, 1031, 1032, 101023, 33007] + + # There should be only one element with key 'centre', and its + # initial value should be missing. + assert bufr.get_count('centre') == 1 + assert bufr['centre'] is np.ma.masked + + # Test that setting 'centre' value does the right thing, and doesn't interfere + # with 'bufrHeaderCentre' from section 1. + bufr['centre'] = 42 + bufr.pack() + assert bufr['centre'] == 42 + assert bufr['bufrHeaderCentre'] == 98 + + # Test that setting 'centre' on header raises an exception. + with pt.raises(KeyValueNotFoundError): + bufr.header['centre'] + with pt.raises(KeyValueNotFoundError): + bufr.header['centre'] = 42 + + # Now consider a message *without* operator 222000, and thus *no* 'centre' + # key in the data section. + bufr = BUFRMessage('BUFR3') + bufr['numberOfSubsets'] = 1 + bufr['compressedData'] = 0 + bufr['unexpandedDescriptors'] = [307011] + + # Test that setting 'centre' raises an exception. + with pt.raises(KeyValueNotFoundError): + bufr['centre'] + with pt.raises(KeyValueNotFoundError): + bufr['centre'] = 42 + +def test_workaround_for_ECC_2098(): + bufr = BUFRMessage('BUFR3') + bufr['inputDelayedDescriptorReplicationFactor'] = 3 + bufr['unexpandedDescriptors'] = [ + 104000, # Delayed replication of 4 elements + 31001, # Delayed replication factor + 204001, # Operator: Add associated field + 31021, # Associated field significance + 11001, # Wind speed + 204000, # Operator: Close associated field + ] + bufr['windDirection->associatedField'] = [0, 0, 0] # OK + bufr['windDirection->associatedField->associatedFieldSignificance'] = [1, 1, 1] # Would raise ArrayTooSmallError when packing + bufr.pack() + +def test_workaround_for_ECC_2022(): + old = BUFRMessage(open('./sample-data/amv-goes-9.bufr', 'rb')) + new = old.copy() + old.copy_to(new) + assert old.data == new.data # would fail without the workaround + diff --git a/tests/test_eccodes.py b/tests/test_eccodes.py index 76a41730..91526bb8 100644 --- a/tests/test_eccodes.py +++ b/tests/test_eccodes.py @@ -950,6 +950,7 @@ def test_bufr_multi_element_constant_arrays(): numSubsets = eccodes.codes_get(bid, "numberOfSubsets") assert eccodes.codes_get_size(bid, "satelliteIdentifier") == numSubsets eccodes.codes_release(bid) + eccodes.codes_bufr_multi_element_constant_arrays_off() def test_bufr_new_from_samples_error(): From 662aac2698c4c8940e9a474fec70b3bf7afa41c8 Mon Sep 17 00:00:00 2001 From: Tomas Kral Date: Mon, 15 Sep 2025 08:48:47 +0000 Subject: [PATCH 2/3] Don't use datetime.UTC; use datetime.timezone.utc instead --- eccodes/highlevel/_bufr/message.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eccodes/highlevel/_bufr/message.py b/eccodes/highlevel/_bufr/message.py index 9cfbbff3..f3c8ad93 100644 --- a/eccodes/highlevel/_bufr/message.py +++ b/eccodes/highlevel/_bufr/message.py @@ -354,7 +354,7 @@ def update_header_from_data(self, skip_dirty=False) -> None: self.header['localHour'] = datetime.hour self.header['localMinute'] = datetime.minute self.header['localSecond'] = datetime.second - now = dt.datetime.now(dt.UTC) + now = dt.datetime.now(dt.timezone.utc) for prefix in ('rdbtime', 'rectime'): items = ['Day', 'Hour', 'Minute', 'Second'] if not (skip_dirty and _any_dirty(self.header, prefix, items)): From 6233e5e6a2ab72f584e81d5395548afcd7df42b6 Mon Sep 17 00:00:00 2001 From: Tomas Kral Date: Tue, 23 Sep 2025 10:16:21 +0000 Subject: [PATCH 3/3] Fix a crash when using more than one definition path --- eccodes/highlevel/_bufr/tables.py | 9 +++++---- gribapi/grib_api.h | 1 + gribapi/gribapi.py | 13 +++++++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/eccodes/highlevel/_bufr/tables.py b/eccodes/highlevel/_bufr/tables.py index 9f16ae8f..abc46059 100644 --- a/eccodes/highlevel/_bufr/tables.py +++ b/eccodes/highlevel/_bufr/tables.py @@ -15,7 +15,7 @@ from typing import Iterator, List, Optional, Tuple, Union import eccodes - +import gribapi class Code(int): @@ -77,11 +77,11 @@ def __call__(cls, *args): class Table(UserDict, metaclass=_Singleton): def __init__(self, version: Version, local: bool) -> None: - base_path = Path(eccodes.codes_definition_path(), 'bufr', 'tables', '0') + base_path = Path('bufr', 'tables', '0') if local: dashed_version_number = '%d-%d' % (version.master, version.local) path = base_path.joinpath('local', dashed_version_number, str(version.centre), str(version.subcentre)) - if not codes_has_file(path / 'element.table'): + if not gribapi.grib_full_defs_path(str(path / 'element.table')): path = base_path.joinpath('local', str(version.local), str(version.centre), str(version.subcentre)) else: path = base_path.joinpath('wmo', str(version.master)) @@ -227,7 +227,8 @@ def codes_has_file(path: Union[str, os.PathLike]) -> bool: return has def codes_read_file(path: Union[str, os.PathLike]) -> str: - stream = libeccodes.codes_fopen(str(path).encode(), b'r') + full_path = gribapi.grib_full_defs_path(str(path)) + stream = libeccodes.codes_fopen(full_path.encode(), b'r') if not stream: raise RuntimeError(f'Tables path does not exist: {path}') try: diff --git a/gribapi/grib_api.h b/gribapi/grib_api.h index a78f19b4..0f47da46 100644 --- a/gribapi/grib_api.h +++ b/gribapi/grib_api.h @@ -143,6 +143,7 @@ void grib_context_set_logging_file(grib_context* c, FILE* f); char* grib_samples_path(const grib_context *c); char* grib_definition_path(const grib_context *c); +char* grib_context_full_defs_path(grib_context* c, const char* basename); grib_keys_iterator* grib_keys_iterator_new(grib_handle* h,unsigned long filter_flags, const char* name_space); bufr_keys_iterator* codes_bufr_keys_iterator_new(grib_handle* h, unsigned long filter_flags); diff --git a/gribapi/gribapi.py b/gribapi/gribapi.py index 3efc9573..a2cd6876 100644 --- a/gribapi/gribapi.py +++ b/gribapi/gribapi.py @@ -2470,6 +2470,19 @@ def grib_set_data_quality_checks(val): lib.grib_context_set_data_quality_checks(context, val) +@require(basename=str) +def grib_full_defs_path(basename): + """ + @brief Get the full path of a definition file + """ + context = lib.grib_context_get_default() + path = lib.grib_context_full_defs_path(context, basename.encode(ENC)) + if path: + return ffi.string(path).decode(ENC) + else: + return "" + + @require(defs_path=str) def grib_set_definitions_path(defs_path): """