From 88d63209ddfde741c6e880465e0738a4e5fc7f00 Mon Sep 17 00:00:00 2001 From: Emily Liu Date: Sat, 22 Feb 2025 00:33:21 +0000 Subject: [PATCH 1/4] Add IASI mapping file and python script --- dump/mapping/bufr_mtiasi.py | 187 +++++++++++++++++++++ dump/mapping/bufr_mtiasi_mapping.yaml | 230 ++++++++++++++++++++++++++ 2 files changed, 417 insertions(+) create mode 100755 dump/mapping/bufr_mtiasi.py create mode 100755 dump/mapping/bufr_mtiasi_mapping.yaml diff --git a/dump/mapping/bufr_mtiasi.py b/dump/mapping/bufr_mtiasi.py new file mode 100755 index 0000000..67d59a6 --- /dev/null +++ b/dump/mapping/bufr_mtiasi.py @@ -0,0 +1,187 @@ +#!/usr/bin/env python3 +import sys +import os +import argparse +import time +import numpy as np +import bufr +from pyioda.ioda.Engines.Bufr import Encoder as iodaEncoder +from bufr.encoders.netcdf import Encoder as netcdfEncoder +from wxflow import Logger + +# Initialize Logger +# Get log level from the environment variable, default to 'INFO it not set +log_level = os.getenv('LOG_LEVEL', 'INFO') +logger = Logger('BUFR2IODA_iasi.py', level=log_level, colored_log=False) + + +def logging(comm, level, message): + """ + Logs a message to the console or log file, based on the specified logging level. + + This function ensures that logging is only performed by the root process (`rank 0`) + in a distributed computing environment. The function maps the logging level to + appropriate logger methods and defaults to the 'INFO' level if an invalid level is provided. + + Parameters: + comm: object + The communicator object, typically from a distributed computing framework + (e.g., MPI). It must have a `rank()` method to determine the process rank. + level: str + The logging level as a string. Supported levels are: + - 'DEBUG' + - 'INFO' + - 'WARNING' + - 'ERROR' + - 'CRITICAL' + If an invalid level is provided, a warning will be logged, and the level + will default to 'INFO'. + message: str + The message to be logged. + + Behavior: + - Logs messages only on the root process (`comm.rank() == 0`). + - Maps the provided logging level to a method of the logger object. + - Defaults to 'INFO' and logs a warning if an invalid logging level is given. + - Supports standard logging levels for granular control over log verbosity. + + Example: + >>> logging(comm, 'DEBUG', 'This is a debug message.') + >>> logging(comm, 'ERROR', 'An error occurred!') + + Notes: + - Ensure that a global `logger` object is configured before using this function. + - The `comm` object should conform to MPI-like conventions (e.g., `rank()` method). + """ + + if comm.rank() == 0: + # Define a dictionary to map levels to logger methods + log_methods = { + 'DEBUG': logger.debug, + 'INFO': logger.info, + 'WARNING': logger.warning, + 'ERROR': logger.error, + 'CRITICAL': logger.critical, + } + + # Get the appropriate logging method, default to 'INFO' + log_method = log_methods.get(level.upper(), logger.info) + + if log_method == logger.info and level.upper() not in log_methods: + # Log a warning if the level is invalid + logger.warning(f'log level = {level}: not a valid level --> set to INFO') + + # Call the logging method + log_method(message) + + +def _make_description(mapping_path, update=False): + + description = bufr.encoders.Description(mapping_path) + + return description + + +def _make_obs(comm, input_path, mapping_path): + + # Get container from mapping file first + logging(comm, 'INFO', 'Get container from bufr') + container = bufr.Parser(input_path, mapping_path).parse(comm) + + logging(comm, 'DEBUG', f'container list (original): {container.list()}') + logging(comm, 'DEBUG', f'all_sub_categories = {container.all_sub_categories()}') + logging(comm, 'DEBUG', f'category map = {container.get_category_map()}') + + # Add new/derived data into container + for cat in container.all_sub_categories(): + + logging(comm, 'DEBUG', f'category = {cat}') + + satid = container.get('variables/satelliteId', cat) + if satid.size == 0: + logging(comm, 'WARNING', f'category {cat[0]} does not exist in input file') + + # Check + logging(comm, 'DEBUG', f'container list (updated): {container.list()}') + logging(comm, 'DEBUG', f'all_sub_categories {container.all_sub_categories()}') + + return container + + +def create_obs_group(input_path, mapping_path, category, env): + + comm = bufr.mpi.Comm(env["comm_name"]) + + description = _make_description(mapping_path, update=False) + + # Check the cache for the data and return it if it exists + logging(comm, 'DEBUG', f'Check if bufr.DataCache exists? {bufr.DataCache.has(input_path, mapping_path)}') + if bufr.DataCache.has(input_path, mapping_path): + container = bufr.DataCache.get(input_path, mapping_path) + logging(comm, 'INFO', f'Encode {category} from cache') + data = iodaEncoder(description).encode(container)[(category,)] + logging(comm, 'INFO', f'Mark {category} as finished in the cache') + bufr.DataCache.mark_finished(input_path, mapping_path, [category]) + logging(comm, 'INFO', f'Return the encoded data for {category}') + return data + + container = _make_obs(comm, input_path, mapping_path) + + # Gather data from all tasks into all tasks. Each task will have the complete record + logging(comm, 'INFO', f'Gather data from all tasks into all tasks') + container.all_gather(comm) + + logging(comm, 'INFO', f'Add container to cache') + # Add the container to the cache + bufr.DataCache.add(input_path, mapping_path, container.all_sub_categories(), container) + + # Encode the data + logging(comm, 'INFO', f'Encode {category}') + data = iodaEncoder(description).encode(container)[(category,)] + + logging(comm, 'INFO', f'Mark {category} as finished in the cache') + # Mark the data as finished in the cache + bufr.DataCache.mark_finished(input_path, mapping_path, [category]) + + logging(comm, 'INFO', f'Return the encoded data for {category}') + return data + + +def create_obs_file(input_path, mapping_path, output_path): + + comm = bufr.mpi.Comm("world") + container = _make_obs(comm, input_path, mapping_path) + container.gather(comm) + + description = _make_description(mapping_path, update=False) + + # Encode the data + if comm.rank() == 0: + netcdfEncoder(description).encode(container, output_path) + + logging(comm, 'INFO', f'Return the encoded data') + + +if __name__ == '__main__': + + start_time = time.time() + + bufr.mpi.App(sys.argv) + comm = bufr.mpi.Comm("world") + + # Required input arguments as positional arguments + parser = argparse.ArgumentParser(description="Convert BUFR to NetCDF using a mapping file.") + parser.add_argument('input', type=str, help='Input BUFR file') + parser.add_argument('mapping', type=str, help='BUFR2IODA Mapping File') + parser.add_argument('output', type=str, help='Output NetCDF file') + + args = parser.parse_args() + mapping = args.mapping + infile = args.input + output = args.output + + create_obs_file(infile, mapping, output) + + end_time = time.time() + running_time = end_time - start_time + logging(comm, 'INFO', f'Total running time: {running_time}') diff --git a/dump/mapping/bufr_mtiasi_mapping.yaml b/dump/mapping/bufr_mtiasi_mapping.yaml new file mode 100755 index 0000000..f28e98f --- /dev/null +++ b/dump/mapping/bufr_mtiasi_mapping.yaml @@ -0,0 +1,230 @@ +bufr: + variables: + # MetaData + timestamp: + datetime: + year: "*/YEAR" + month: "*/MNTH" + day: "*/DAYS" + hour: "*/HOUR" + minute: "*/MINU" + second: "*/SECO" + + latitude: + query: "*/CLATH" + + longitude: + query: "*/CLONH" + + satelliteId: + query: "*/SAID" + + sensorId: + query: "*/SIID[1]" + + scanLineNumber: + query: "*/SLNM" + + gqisFlagQual: + query: "*/QGFQ" + + fieldOfViewNumber: + query: "*/FOVN" + + sensorScanPosition: + sensorScanPosition: + fieldOfViewNumber: "*/FOVN" + sensor: iasi + + solarZenithAngle: + query: "*/SOZA" + + solarAzimuthAngle: + query: "*/SOLAZI" + + sensorZenithAngle: + query: "*/SAZA" + + sensorAzimuthAngle: + query: "*/BEARAZ" + + stationElevation: + query: "*/SELV" + type: float + + sensorViewAngle: + sensorScanAngle: + fieldOfViewNumber: "*/FOVN" + scanStart: -48.330 + scanStep: 3.334 + scanStepAdjust: 0.625 + sensor: iasi + + fractionOfClearPixelsInFOV: + query: "*/IASIL1CS{1}/FCPH" + + sensorChannelNumber: + query: "*/IASICHN/CHNM" + + # ObsValue + spectralRadiance: + spectralRadiance: + sensorChannelNumber: "*/IASICHN/CHNM" + startChannel: "*/IASIL1CB/STCH" + endChannel: "*/IASIL1CB/ENCH" + scaleFactor: "*/IASIL1CB/CHSF" + scaledSpectralRadiance: "*/IASICHN/SCRA" + + splits: + satId: + category: + variable: satelliteId + map: + _3: metop-b + _4: metop-a + _5: metop-c + +encoder: + type: netcdf + + dimensions: + - name: Channel + source: variables/sensorChannelNumber + path: "*/IASICHN" + + - name: Cluster + path: "*/IASIL1CS" + + - name: Band + path: "*/IASIL1CB" + + globals: + - name: "platformCommonName" + type: string + value: "Meteorological Operational Satellite" + + - name: "platformLongDescription" + type: string + value: "EUMETSAT Polar System in sunsynchronous orbit" + + - name: "source" + type: string + value: "MTYP 021-241 IASI 1C RADIANCES (VARIABLE CHNS) (METOP)" + + - name: "sourceFiles" + type: string + value: "gdas.t00z.mtiasi.tm00.bufr_d" + + - name: "datetimeReference" + type: string + value: "2021-08-01T00:00:00Z" + + - name: "sensor" + type: string + value: "IASI" + + - name: "processingLevel" + type: string + value: "Level-1C" + + - name: "converter" + type: string + value: "BUFR" + + variables: + + # MetaData + - name: "MetaData/dateTime" + source: variables/timestamp + longName: "Datetime" + units: "seconds since 1970-01-01T00:00:00Z" + + - name: "MetaData/latitude" + source: variables/latitude + longName: "Latitude" + units: "degrees_north" + range: [ -90, 90 ] + + - name: "MetaData/longitude" + source: variables/longitude + longName: "Longitude" + units: "degrees_east" + range: [ -180, 180 ] + + - name: "MetaData/satelliteIdentifier" + source: variables/satelliteId + longName: "Satellite Identifier" + + - name: "MetaData/instrumentIdentifier" + source: variables/sensorId + longName: "Satellite Instrument Identifier" + + - name: "MetaData/scanLineNumber" + source: variables/scanLineNumber + longName: "Scan Line Number" + + - name: "MetaData/qualityFlags" + source: variables/gqisFlagQual + longName: "Individual IASI-System Quality Flag" + + - name: "MetaData/fieldOfViewNumber" + source: variables/fieldOfViewNumber + longName: "Field of View Number" + + - name: "MetaData/sensorScanPosition" + source: variables/sensorScanPosition + longName: "Sensor Scan Position" + + - name: "MetaData/solarZenithAngle" + source: variables/solarZenithAngle + longName: "Solar Zenith Angle" + units: "degree" + range: [ 0, 180 ] + + - name: "MetaData/solarAzimuthAngle" + source: variables/solarAzimuthAngle + longName: "Solar Azimuth Angle" + units: "degree" + range: [ 0, 360 ] + + - name: "MetaData/sensorZenithAngle" + source: variables/sensorZenithAngle + longName: "Sensor Zenith Angle" + units: "degree" + range: [ 0, 90 ] + + - name: "MetaData/sensorAzimuthAngle" + source: variables/sensorAzimuthAngle + longName: "Sensor Azimuth Angle" + units: "degree" + range: [ 0, 360 ] + + - name: "MetaData/sensorViewAngle" + source: variables/sensorViewAngle + longName: "Sensor View Angle" + units: "degree" + + - name: "MetaData/stationElevation" + source: variables/stationElevation + longName: "Altitude of Satellite" + units: "m" + + - name: "MetaData/sensorChannelNumber" + source: variables/sensorChannelNumber + longName: "Sensor Channel Number" + + - name: "MetaData/fractionOfClearPixelsInFOV" + source: variables/fractionOfClearPixelsInFOV + longName: "Fraction of Clear Pixels in a Field of View" + units: "1" + range: [0, 100] + +# The unit from BUFR is W m-2 sr-1 m -- this is radiance per wavenumber + - name: "ObsValue/radiance" + source: variables/spectralRadiance + longName: "IASI Spectral Radiance" + units: "W m-2 sr-1" # units: "W m-2 sr-1 m-1" +# chunks: [1000, 154] +# chunks: [1000, 616] +# compressionLevel: 4 + From cf38d662f4201230743c5de3ce31c4c802a42cac Mon Sep 17 00:00:00 2001 From: Emily Liu Date: Sat, 22 Feb 2025 00:34:10 +0000 Subject: [PATCH 2/4] Add IASI test configuration YAMLs --- ush/test/config/bufr_bufr4backend_mtiasi.yaml | 67 +++++++++++++++++++ .../config/bufr_script4backend_mtiasi.yaml | 61 +++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 ush/test/config/bufr_bufr4backend_mtiasi.yaml create mode 100644 ush/test/config/bufr_script4backend_mtiasi.yaml diff --git a/ush/test/config/bufr_bufr4backend_mtiasi.yaml b/ush/test/config/bufr_bufr4backend_mtiasi.yaml new file mode 100644 index 0000000..1942442 --- /dev/null +++ b/ush/test/config/bufr_bufr4backend_mtiasi.yaml @@ -0,0 +1,67 @@ +time window: + begin: "2018-04-14T21:00:00Z" + end: "2023-12-15T03:00:00Z" + +observations: +- obs space: + name: "iasi_metop-a" +# observed variables: [radiance] +# simulated variables: [brightnessTemperature] +# derived variables: [brightnessTemperature] + simulated variables: [radiance] + obsdatain: + engine: + type: bufr + obsfile: "./testinput/2021080100/gdas.t00z.iasi.tm00.bufr_d" + mapping file: "./bufr_iasi_mapping.yaml" + category: ["metop-a"] + cache categories: # optional + - ["metop-a"] + - ["metop-b"] + - ["metop-c"] + obsdataout: + engine: + type: H5File + obsfile: "./testoutput/2021080100/bufr4backend/gdas.t00z.iasi_metop-a.tm00.nc" + +- obs space: + name: "iasi_metop-b" +# observed variables: [radiance] +# simulated variables: [brightnessTemperature] +# derived variables: [brightnessTemperature] + simulated variables: [radiance] + obsdatain: + engine: + type: bufr + obsfile: "./testinput/2021080100/gdas.t00z.iasi.tm00.bufr_d" + mapping file: "./bufr_iasi_mapping.yaml" + category: ["metop-b"] + cache categories: # optional + - ["metop-b"] + - ["metop-b"] + - ["metop-c"] + obsdataout: + engine: + type: H5File + obsfile: "./testoutput/2021080100/bufr4backend/gdas.t00z.iasi_metop-b.tm00.nc" + +- obs space: + name: "iasi_metop-c" +# observed variables: [radiance] +# simulated variables: [brightnessTemperature] +# derived variables: [brightnessTemperature] + simulated variables: [radiance] + obsdatain: + engine: + type: bufr + obsfile: "./testinput/2021080100/gdas.t00z.iasi.tm00.bufr_d" + mapping file: "./bufr_iasi_mapping.yaml" + category: ["metop-c"] + cache categories: # optional + - ["metop-a"] + - ["metop-b"] + - ["metop-c"] + obsdataout: + engine: + type: H5File + obsfile: "./testoutput/2021080100/bufr4backend/gdas.t00z.iasi_metop-c.tm00.nc" diff --git a/ush/test/config/bufr_script4backend_mtiasi.yaml b/ush/test/config/bufr_script4backend_mtiasi.yaml new file mode 100644 index 0000000..aeeb887 --- /dev/null +++ b/ush/test/config/bufr_script4backend_mtiasi.yaml @@ -0,0 +1,61 @@ +time window: + begin: "2018-04-14T21:00:00Z" + end: "2023-12-15T03:00:00Z" + +observations: +- obs space: + name: "iasi_metop-a" +# observed variables: [radiance] +# simulated variables: [brightnessTemperature] +# derived variables: [brightnessTemperature] + simulated variables: [radiance] + obsdatain: + engine: + type: script + script file: "bufr_iasi.py" + args: + input_path: "./testinput/2021080100/gdas.t00z.iasi.tm00.bufr_d" + mapping_path: "bufr_iasi_mapping.yaml" + category: "metop-a" + obsdataout: + engine: + type: H5File + obsfile: "./testoutput/2021080100/script4backend/gdas.t00z.iasi_metop-a.tm00.nc" + +- obs space: + name: "iasi_metop-b" +# observed variables: [radiance] +# simulated variables: [brightnessTemperature] +# derived variables: [brightnessTemperature] + simulated variables: [radiance] + obsdatain: + engine: + type: script + script file: "bufr_iasi.py" + args: + input_path: "./testinput/2021080100/gdas.t00z.iasi.tm00.bufr_d" + mapping_path: "bufr_iasi_mapping.yaml" + category: "metop-b" + obsdataout: + engine: + type: H5File + obsfile: "./testoutput/2021080100/script4backend/gdas.t00z.iasi_metop-b.tm00.nc" + +- obs space: + name: "iasi_metop-c" +# observed variables: [radiance] +# simulated variables: [brightnessTemperature] +# derived variables: [brightnessTemperature] + simulated variables: [radiance] + obsdatain: + engine: + type: script + script file: "bufr_iasi.py" + args: + input_path: "./testinput/2021080100/gdas.t00z.iasi.tm00.bufr_d" + mapping_path: "bufr_iasi_mapping.yaml" + category: "metop-c" + obsdataout: + engine: + type: H5File + obsfile: "./testoutput/2021080100/script4backend/gdas.t00z.iasi_metop-c.tm00.nc" From 4d08f55dd4711d7d3743bf25e1e8f1c0c1414a4a Mon Sep 17 00:00:00 2001 From: Emily Liu Date: Sat, 22 Feb 2025 00:34:38 +0000 Subject: [PATCH 3/4] change mode from 644 to 755 for atms --- dump/mapping/bufr_atms.py | 0 dump/mapping/bufr_atms_mapping.yaml | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 dump/mapping/bufr_atms.py mode change 100644 => 100755 dump/mapping/bufr_atms_mapping.yaml diff --git a/dump/mapping/bufr_atms.py b/dump/mapping/bufr_atms.py old mode 100644 new mode 100755 diff --git a/dump/mapping/bufr_atms_mapping.yaml b/dump/mapping/bufr_atms_mapping.yaml old mode 100644 new mode 100755 From f5adf3915992d9c35416ffe91b2b1fb2f1c9eeb8 Mon Sep 17 00:00:00 2001 From: Emily Liu Date: Tue, 25 Feb 2025 17:07:52 +0000 Subject: [PATCH 4/4] add bounds for timet --- ush/test/config/bufr_bufr4backend_mtiasi.yaml | 25 ++++++++------- .../config/bufr_script4backend_mtiasi.yaml | 31 ++++++++++--------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/ush/test/config/bufr_bufr4backend_mtiasi.yaml b/ush/test/config/bufr_bufr4backend_mtiasi.yaml index 1942442..1583913 100644 --- a/ush/test/config/bufr_bufr4backend_mtiasi.yaml +++ b/ush/test/config/bufr_bufr4backend_mtiasi.yaml @@ -1,10 +1,11 @@ time window: begin: "2018-04-14T21:00:00Z" end: "2023-12-15T03:00:00Z" + bound to include: begin observations: - obs space: - name: "iasi_metop-a" + name: "mtiasi_metop-a" # observed variables: [radiance] # simulated variables: [brightnessTemperature] # derived variables: [brightnessTemperature] @@ -12,8 +13,8 @@ observations: obsdatain: engine: type: bufr - obsfile: "./testinput/2021080100/gdas.t00z.iasi.tm00.bufr_d" - mapping file: "./bufr_iasi_mapping.yaml" + obsfile: "./testinput/2021080100/gdas.t00z.mtiasi.tm00.bufr_d" + mapping file: "./bufr_mtiasi_mapping.yaml" category: ["metop-a"] cache categories: # optional - ["metop-a"] @@ -22,10 +23,10 @@ observations: obsdataout: engine: type: H5File - obsfile: "./testoutput/2021080100/bufr4backend/gdas.t00z.iasi_metop-a.tm00.nc" + obsfile: "./testoutput/2021080100/bufr4backend/gdas.t00z.mtiasi_metop-a.tm00.nc" - obs space: - name: "iasi_metop-b" + name: "mtiasi_metop-b" # observed variables: [radiance] # simulated variables: [brightnessTemperature] # derived variables: [brightnessTemperature] @@ -33,8 +34,8 @@ observations: obsdatain: engine: type: bufr - obsfile: "./testinput/2021080100/gdas.t00z.iasi.tm00.bufr_d" - mapping file: "./bufr_iasi_mapping.yaml" + obsfile: "./testinput/2021080100/gdas.t00z.mtiasi.tm00.bufr_d" + mapping file: "./bufr_mtiasi_mapping.yaml" category: ["metop-b"] cache categories: # optional - ["metop-b"] @@ -43,10 +44,10 @@ observations: obsdataout: engine: type: H5File - obsfile: "./testoutput/2021080100/bufr4backend/gdas.t00z.iasi_metop-b.tm00.nc" + obsfile: "./testoutput/2021080100/bufr4backend/gdas.t00z.mtiasi_metop-b.tm00.nc" - obs space: - name: "iasi_metop-c" + name: "mtiasi_metop-c" # observed variables: [radiance] # simulated variables: [brightnessTemperature] # derived variables: [brightnessTemperature] @@ -54,8 +55,8 @@ observations: obsdatain: engine: type: bufr - obsfile: "./testinput/2021080100/gdas.t00z.iasi.tm00.bufr_d" - mapping file: "./bufr_iasi_mapping.yaml" + obsfile: "./testinput/2021080100/gdas.t00z.mtiasi.tm00.bufr_d" + mapping file: "./bufr_mtiasi_mapping.yaml" category: ["metop-c"] cache categories: # optional - ["metop-a"] @@ -64,4 +65,4 @@ observations: obsdataout: engine: type: H5File - obsfile: "./testoutput/2021080100/bufr4backend/gdas.t00z.iasi_metop-c.tm00.nc" + obsfile: "./testoutput/2021080100/bufr4backend/gdas.t00z.mtiasi_metop-c.tm00.nc" diff --git a/ush/test/config/bufr_script4backend_mtiasi.yaml b/ush/test/config/bufr_script4backend_mtiasi.yaml index aeeb887..526731a 100644 --- a/ush/test/config/bufr_script4backend_mtiasi.yaml +++ b/ush/test/config/bufr_script4backend_mtiasi.yaml @@ -1,10 +1,11 @@ time window: begin: "2018-04-14T21:00:00Z" end: "2023-12-15T03:00:00Z" + bound to include: begin observations: - obs space: - name: "iasi_metop-a" + name: "mtiasi_metop-a" # observed variables: [radiance] # simulated variables: [brightnessTemperature] # derived variables: [brightnessTemperature] @@ -12,18 +13,18 @@ observations: obsdatain: engine: type: script - script file: "bufr_iasi.py" + script file: "bufr_mtiasi.py" args: - input_path: "./testinput/2021080100/gdas.t00z.iasi.tm00.bufr_d" - mapping_path: "bufr_iasi_mapping.yaml" + input_path: "./testinput/2021080100/gdas.t00z.mtiasi.tm00.bufr_d" + mapping_path: "bufr_mtiasi_mapping.yaml" category: "metop-a" obsdataout: engine: type: H5File - obsfile: "./testoutput/2021080100/script4backend/gdas.t00z.iasi_metop-a.tm00.nc" + obsfile: "./testoutput/2021080100/script4backend/gdas.t00z.mtiasi_metop-a.tm00.nc" - obs space: - name: "iasi_metop-b" + name: "mtiasi_metop-b" # observed variables: [radiance] # simulated variables: [brightnessTemperature] # derived variables: [brightnessTemperature] @@ -31,18 +32,18 @@ observations: obsdatain: engine: type: script - script file: "bufr_iasi.py" + script file: "bufr_mtiasi.py" args: - input_path: "./testinput/2021080100/gdas.t00z.iasi.tm00.bufr_d" - mapping_path: "bufr_iasi_mapping.yaml" + input_path: "./testinput/2021080100/gdas.t00z.mtiasi.tm00.bufr_d" + mapping_path: "bufr_mtiasi_mapping.yaml" category: "metop-b" obsdataout: engine: type: H5File - obsfile: "./testoutput/2021080100/script4backend/gdas.t00z.iasi_metop-b.tm00.nc" + obsfile: "./testoutput/2021080100/script4backend/gdas.t00z.mtiasi_metop-b.tm00.nc" - obs space: - name: "iasi_metop-c" + name: "mtiasi_metop-c" # observed variables: [radiance] # simulated variables: [brightnessTemperature] # derived variables: [brightnessTemperature] @@ -50,12 +51,12 @@ observations: obsdatain: engine: type: script - script file: "bufr_iasi.py" + script file: "bufr_mtiasi.py" args: - input_path: "./testinput/2021080100/gdas.t00z.iasi.tm00.bufr_d" - mapping_path: "bufr_iasi_mapping.yaml" + input_path: "./testinput/2021080100/gdas.t00z.mtiasi.tm00.bufr_d" + mapping_path: "bufr_mtiasi_mapping.yaml" category: "metop-c" obsdataout: engine: type: H5File - obsfile: "./testoutput/2021080100/script4backend/gdas.t00z.iasi_metop-c.tm00.nc" + obsfile: "./testoutput/2021080100/script4backend/gdas.t00z.mtiasi_metop-c.tm00.nc"