diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/airs_aqua.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/airs_aqua.yaml index c488b7a1..3cfacd2d 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/airs_aqua.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/airs_aqua.yaml @@ -9,29 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.airs_aqua.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &airs_aqua_channels - 1, 6, 7, 10, 11, 15, 16, 17, 20, 21, 22, 24, - 27, 28, 30, 36, 39, 40, 42, 51, 52, 54, 55, 56, 59, 62, 63, 68, 69, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 86, 92, 93, 98, 99, 101, - 104, 105, 108, 110, 111, 113, 116, 117, 123, 124, 128, 129, 138, 139, - 144, 145, 150, 151, 156, 157, 159, 162, 165, 168, 169, 170, 172, 173, - 174, 175, 177, 179, 180, 182, 185, 186, 190, 192, 198, 201, 204, 207, - 210, 215, 216, 221, 226, 227, 232, 252, 253, 256, 257, 261, 262, 267, - 272, 295, 299, 300, 305, 310, 321, 325, 333, 338, 355, 362, 375, 453, - 475, 484, 497, 528, 587, 672, 787, 791, 843, 870, 914, 950, 1003, 1012, - 1019, 1024, 1030, 1038, 1048, 1069, 1079, 1082, 1083, 1088, 1090, 1092, - 1095, 1104, 1111, 1115, 1116, 1119, 1120, 1123, 1130, 1138, 1142, 1178, - 1199, 1206, 1221, 1237, 1252, 1260, 1263, 1266, 1285, 1301, 1304, 1329, - 1371, 1382, 1415, 1424, 1449, 1455, 1466, 1477, 1500, 1519, 1538, 1545, - 1565, 1574, 1583, 1593, 1614, 1627, 1636, 1644, 1652, 1669, 1674, 1681, - 1694, 1708, 1717, 1723, 1740, 1748, 1751, 1756, 1763, 1766, 1771, 1777, - 1780, 1783, 1794, 1800, 1803, 1806, 1812, 1826, 1843, 1852, 1865, 1866, - 1868, 1869, 1872, 1873, 1876, 1881, 1882, 1883, 1911, 1917, 1918, 1924, - 1928, 1937, 1941, 2099, 2100, 2101, 2103, 2104, 2106, 2107, 2108, 2109, - 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, - 2122, 2123, 2128, 2134, 2141, 2145, 2149, 2153, 2164, 2189, 2197, 2209, - 2226, 2234, 2280, 2318, 2321, 2325, 2328, 2333, 2339, 2348, 2353, 2355, - 2357, 2363, 2370, 2371, 2377 + channels: &airs_aqua_channels {{airs_aqua_avail_channels}} obs operator: name: CRTM @@ -195,35 +173,7 @@ obs post filters: channels: *airs_aqua_channels options: channels: *airs_aqua_channels - use_flag: &useflag_airs_aqua [ -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, - 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, - -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, - -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, - 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, - -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, - 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, - -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, -1, 1, 1, 1, -1, -1, - 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, - -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, - -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1 ] + use_flag: &useflag_airs_aqua {{airs_aqua_active_channels}} use_flag_clddet: &clddet_airs_aqua [ 1, 1, 1, 1, 1, 1, 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/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_aqua.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_aqua.yaml index d0b1c915..658e88b0 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_aqua.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_aqua.yaml @@ -9,7 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.amsua_aqua.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &amsua_aqua_available_channels 1-15 + channels: &amsua_aqua_available_channels {{amsua_aqua_avail_channels}} obs operator: name: CRTM @@ -190,9 +190,7 @@ obs post filters: channels: *amsua_aqua_available_channels use passive_bc: true sensor: *Sensor_ID - use_flag: [-1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1] + use_flag: &amsua_aqua_use_flag {{amsua_aqua_active_channels}} maxvalue: 1.0e-12 action: name: reject @@ -206,9 +204,7 @@ obs post filters: channels: *amsua_aqua_available_channels options: channels: *amsua_aqua_available_channels - use_flag: [-1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1] + use_flag: *amsua_aqua_use_flag minvalue: 1.0e-12 action: name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-b.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-b.yaml index ce034261..ec556381 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-b.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-b.yaml @@ -9,7 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.amsua_metop-b.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &amsua_metop-b_available_channels 1-15 + channels: &amsua_metop-b_available_channels {{amsua_metopb_avail_channels}} obs operator: name: CRTM @@ -192,9 +192,7 @@ obs post filters: channels: *amsua_metop-b_available_channels use passive_bc: true sensor: *Sensor_ID - use_flag: [-1, -1, -1, -1, -1, - -1, 1, 1, 1, 1, - 1, 1, 1, 1, -1] + use_flag: &amsua_metop-b_use_flag {{amsua_metopb_active_channels}} maxvalue: 1.0e-12 action: name: reject @@ -208,9 +206,7 @@ obs post filters: channels: *amsua_metop-b_available_channels options: channels: *amsua_metop-b_available_channels - use_flag: [-1, -1, -1, -1, -1, - -1, 1, 1, 1, 1, - 1, 1, 1, 1, -1] + use_flag: *amsua_metop-b_use_flag minvalue: 1.0e-12 action: name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-c.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-c.yaml index ce331383..a21a15cf 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-c.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-c.yaml @@ -9,7 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.amsua_metop-c.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &amsua_metop-c_available_channels 1-15 + channels: &amsua_metop-c_available_channels {{amsua_metopc_avail_channels}} obs operator: name: CRTM @@ -192,9 +192,7 @@ obs post filters: channels: *amsua_metop-c_available_channels use passive_bc: true sensor: *Sensor_ID - use_flag: [-1, -1, -1, 1, 1, - 1, 1, 1, 1, 1, - 1, 1, 1, 1, -1] + use_flag: &amsua_metop-c_use_flag {{amsua_metopc_active_channels}} maxvalue: 1.0e-12 action: name: reject @@ -208,9 +206,7 @@ obs post filters: channels: *amsua_metop-c_available_channels options: channels: *amsua_metop-c_available_channels - use_flag: [-1, -1, -1, 1, 1, - 1, 1, 1, 1, 1, - 1, 1, 1, 1, -1] + use_flag: *amsua_metop-c_use_flag minvalue: 1.0e-12 action: name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n15.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n15.yaml index 235623c3..379569ac 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n15.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n15.yaml @@ -9,7 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.amsua_n15.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &amsua_n15_available_channels 1-15 + channels: &amsua_n15_available_channels {{amsua_n15_avail_channels}} obs operator: name: CRTM @@ -192,9 +192,7 @@ obs post filters: channels: *amsua_n15_available_channels use passive_bc: true sensor: *Sensor_ID - use_flag: [-1, -1, -1, 1, 1, - -1, 1, 1, 1, 1, - -1, 1, 1, -1, -1] + use_flag: &amsua_n15_use_flag {{amsua_n15_active_channels}} maxvalue: 1.0e-12 action: name: reject @@ -208,9 +206,7 @@ obs post filters: channels: *amsua_n15_available_channels options: channels: *amsua_n15_available_channels - use_flag: [-1, -1, -1, 1, 1, - -1, 1, 1, 1, 1, - -1, 1, 1, -1, -1] + use_flag: *amsua_n15_use_flag minvalue: 1.0e-12 action: name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n18.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n18.yaml index 0086884d..017511e0 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n18.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n18.yaml @@ -9,7 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.amsua_n18.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &amsua_n18_available_channels 1-15 + channels: &amsua_n18_available_channels {{amsua_n18_avail_channels}} obs operator: name: CRTM @@ -192,9 +192,7 @@ obs post filters: channels: *amsua_n18_available_channels use passive_bc: true sensor: *Sensor_ID - use_flag: [-1, -1, -1, 1, -1, - 1, 1, -1, -1, 1, - 1, 1, 1, 1, -1] + use_flag: &amsua_n18_use_flag {{amsua_n18_active_channels}} maxvalue: 1.0e-12 action: name: reject @@ -208,9 +206,7 @@ obs post filters: channels: *amsua_n18_available_channels options: channels: *amsua_n18_available_channels - use_flag: [-1, -1, -1, 1, -1, - 1, 1, -1, -1, 1, - 1, 1, 1, 1, -1] + use_flag: *amsua_n18_use_flag minvalue: 1.0e-12 action: name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n19.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n19.yaml index 36af8a55..28dd8334 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n19.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n19.yaml @@ -9,7 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.amsua_n19.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &amsua_n19_available_channels 1-15 + channels: &amsua_n19_available_channels {{amsua_n19_avail_channels}} obs operator: name: CRTM diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_n20.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_n20.yaml index 66d7a0a7..ce9ead58 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_n20.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_n20.yaml @@ -9,7 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.atms_n20.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &atms_n20_channels 1-22 + channels: &atms_n20_channels {{atms_n20_avail_channels}} obs operator: name: CRTM @@ -196,11 +196,7 @@ obs post filters: channels: *atms_n20_channels use passive_bc: true sensor: *Sensor_ID - use_flag: [-1, -1, -1, -1, 1, - 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, - 1, 1] + use_flag: &atms_n20_use_flag {{atms_n20_active_channels}} maxvalue: 1.0e-12 action: name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_npp.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_npp.yaml index 257c5882..058ebb06 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_npp.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_npp.yaml @@ -9,7 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.atms_npp.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &atms_npp_channels 1-22 + channels: &atms_npp_channels {{atms_npp_avail_channels}} obs operator: name: CRTM @@ -196,11 +196,7 @@ obs post filters: channels: *atms_npp_channels use passive_bc: true sensor: *Sensor_ID - use_flag: [-1, -1, -1, -1, 1, - 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, - 1, 1] + use_flag: &atms_npp_use_flag {{atms_npp_active_channels}} maxvalue: 1.0e-12 action: name: reject @@ -214,11 +210,7 @@ obs post filters: channels: *atms_npp_channels options: channels: *atms_npp_channels - use_flag: [-1, -1, -1, -1, 1, - 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, - 1, 1] + use_flag: *atms_npp_use_flag minvalue: 1.0e-12 action: name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_metop-b.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_metop-b.yaml index dc88dc69..6d58d75e 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_metop-b.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_metop-b.yaml @@ -9,7 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.avhrr3_metop-b.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &avhrr3_metop-b_channels 3,4,5 + channels: &avhrr3_metop-b_channels {{avhrr3_metopb_avail_channels}} obs operator: name: CRTM @@ -142,7 +142,7 @@ obs post filters: channels: *avhrr3_metop-b_channels options: channels: *avhrr3_metop-b_channels - use_flag: &useflag_avhrr3_metop-b [ -1, 1, 1 ] + use_flag: &useflag_avhrr3_metop-b {{avhrr3_metopb_active_channels}} use_flag_clddet: [ 1, 1, 1 ] obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] maxvalue: 1.0e-12 diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n18.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n18.yaml index 91219b23..bbaba8d7 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n18.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n18.yaml @@ -9,7 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.avhrr3_n18.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &avhrr3_n18_channels 3,4,5 + channels: &avhrr3_n18_channels {{avhrr3_n18_avail_channels}} obs operator: name: CRTM @@ -142,7 +142,7 @@ obs post filters: channels: *avhrr3_n18_channels options: channels: *avhrr3_n18_channels - use_flag: &useflag_avhrr3_n18 [ -1, 1, 1 ] + use_flag: &useflag_avhrr3_n18 {{avhrr3_n18_active_channels}} use_flag_clddet: [ 1, 1, 1 ] obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] maxvalue: 1.0e-12 diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n19.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n19.yaml index d2857363..2eb22e6f 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n19.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n19.yaml @@ -9,7 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.avhrr3_n19.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &avhrr3_n19_channels 3,4,5 + channels: &avhrr3_n19_channels {{avhrr3_n19_avail_channels}} obs operator: name: CRTM @@ -142,7 +142,7 @@ obs post filters: channels: *avhrr3_n19_channels options: channels: *avhrr3_n19_channels - use_flag: &useflag_avhrr3_n19 [ -1, 1, 1 ] + use_flag: &useflag_avhrr3_n19 {{avhrr3_n19_active_channels}} use_flag_clddet: [ 1, 1, 1 ] obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] maxvalue: 1.0e-12 diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_n20.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_n20.yaml index 437a9a02..04cd967b 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_n20.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_n20.yaml @@ -9,39 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.cris-fsr_n20.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &cris-fsr_n20_channels - 19, 24, 26, 27, 28, 31, 32, 33, 37, 39, 42, 44, 47, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 208, - 211, 216, 224, 234, 236, 238, 239, 242, 246, 248, 255, 264, 266, 268, - 275, 279, 283, 285, 291, 295, 301, 305, 311, 332, 342, 389, 400, 402, - 404, 406, 410, 427, 439, 440, 441, 445, 449, 455, 458, 461, 464, 467, - 470, 473, 475, 482, 486, 487, 490, 493, 496, 499, 501, 503, 505, 511, - 513, 514, 518, 519, 520, 522, 529, 534, 563, 568, 575, 592, 594, 596, - 598, 600, 602, 604, 611, 614, 616, 618, 620, 622, 626, 631, 638, 646, - 648, 652, 659, 673, 675, 678, 684, 688, 694, 700, 707, 710, 713, 714, - 718, 720, 722, 725, 728, 735, 742, 748, 753, 762, 780, 784, 798, 849, - 860, 862, 866, 874, 882, 890, 898, 906, 907, 908, 914, 937, 972, 973, - 978, 980, 981, 988, 995, 998, 1000, 1003, 1008, 1009, 1010, 1014, 1017, - 1018, 1020, 1022, 1024, 1026, 1029, 1030, 1032, 1034, 1037, 1038, 1041, - 1042, 1044, 1046, 1049, 1050, 1053, 1054, 1058, 1060, 1062, 1064, 1066, - 1069, 1076, 1077, 1080, 1086, 1091, 1095, 1101, 1109, 1112, 1121, 1128, - 1133, 1163, 1172, 1187, 1189, 1205, 1211, 1219, 1231, 1245, 1271, 1289, - 1300, 1313, 1316, 1325, 1329, 1346, 1347, 1473, 1474, 1491, 1499, 1553, - 1570, 1596, 1602, 1619, 1624, 1635, 1939, 1940, 1941, 1942, 1943, 1944, - 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, - 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, - 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, - 1981, 1982, 1983, 1984, 1985, 1986, 1987, 2119, 2140, 2143, 2147, 2153, - 2158, 2161, 2168, 2171, 2175, 2182 + channels: &cris-fsr_n20_channels {{crisfsr_n20_avail_channels}} obs operator: name: CRTM @@ -218,50 +186,7 @@ obs post filters: channels: *cris-fsr_n20_channels options: channels: *cris-fsr_n20_channels - use_flag: &useflag_cris-fsr_n20 [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, - 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, - -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, - 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, - -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, - -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, - -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1] + use_flag: &useflag_cris-fsr_n20 {{crisfsr_n20_active_channels}} use_flag_clddet: &clddet_cris-fsr_n20 [ 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, diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_npp.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_npp.yaml index 6f839aff..40186303 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_npp.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_npp.yaml @@ -9,39 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.cris-fsr_npp.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &cris-fsr_npp_channels - 19, 24, 26, 27, 28, 31, 32, 33, 37, 39, 42, 44, 47, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 208, - 211, 216, 224, 234, 236, 238, 239, 242, 246, 248, 255, 264, 266, 268, - 275, 279, 283, 285, 291, 295, 301, 305, 311, 332, 342, 389, 400, 402, - 404, 406, 410, 427, 439, 440, 441, 445, 449, 455, 458, 461, 464, 467, - 470, 473, 475, 482, 486, 487, 490, 493, 496, 499, 501, 503, 505, 511, - 513, 514, 518, 519, 520, 522, 529, 534, 563, 568, 575, 592, 594, 596, - 598, 600, 602, 604, 611, 614, 616, 618, 620, 622, 626, 631, 638, 646, - 648, 652, 659, 673, 675, 678, 684, 688, 694, 700, 707, 710, 713, 714, - 718, 720, 722, 725, 728, 735, 742, 748, 753, 762, 780, 784, 798, 849, - 860, 862, 866, 874, 882, 890, 898, 906, 907, 908, 914, 937, 972, 973, - 978, 980, 981, 988, 995, 998, 1000, 1003, 1008, 1009, 1010, 1014, 1017, - 1018, 1020, 1022, 1024, 1026, 1029, 1030, 1032, 1034, 1037, 1038, 1041, - 1042, 1044, 1046, 1049, 1050, 1053, 1054, 1058, 1060, 1062, 1064, 1066, - 1069, 1076, 1077, 1080, 1086, 1091, 1095, 1101, 1109, 1112, 1121, 1128, - 1133, 1163, 1172, 1187, 1189, 1205, 1211, 1219, 1231, 1245, 1271, 1289, - 1300, 1313, 1316, 1325, 1329, 1346, 1347, 1473, 1474, 1491, 1499, 1553, - 1570, 1596, 1602, 1619, 1624, 1635, 1939, 1940, 1941, 1942, 1943, 1944, - 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, - 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, - 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, - 1981, 1982, 1983, 1984, 1985, 1986, 1987, 2119, 2140, 2143, 2147, 2153, - 2158, 2161, 2168, 2171, 2175, 2182 + channels: &cris-fsr_npp_channels {{crisfsr_npp_avail_channels}} obs operator: name: CRTM @@ -218,50 +186,7 @@ obs post filters: channels: *cris-fsr_npp_channels options: channels: *cris-fsr_npp_channels - use_flag: &useflag_cris-fsr_npp [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, - 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, - -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, - 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, - -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, - -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, - -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1] + use_flag: &useflag_cris-fsr_npp {{crisfsr_npp_active_channels}} use_flag_clddet: &clddet_cris-fsr_npp [ 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, diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-b.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-b.yaml index f9f3010e..da48f76e 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-b.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-b.yaml @@ -9,55 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.iasi_metop-b.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &iasi_metop-b_channels 16, 29, 32, 35, 38, 41, 44, 47, 49, 50, 51, 53, - 55, 56, 57, 59, 61, 62, 63, 66, 68, 70, 72, 74, 76, 78, 79, 81, 82, 83, - 84, 85, 86, 87, 89, 92, 93, 95, 97, 99, 101, 103, 104, 106, 109, 110, - 111, 113, 116, 119, 122, 125, 128, 131, 133, 135, 138, 141, 144, 146, - 148, 150, 151, 154, 157, 159, 160, 161, 163, 167, 170, 173, 176, 179, - 180, 185, 187, 191, 193, 197, 199, 200, 202, 203, 205, 207, 210, 212, - 213, 214, 217, 218, 219, 222, 224, 225, 226, 228, 230, 231, 232, 236, - 237, 239, 243, 246, 249, 252, 254, 259, 260, 262, 265, 267, 269, 275, - 279, 282, 285, 294, 296, 299, 300, 303, 306, 309, 313, 320, 323, 326, - 327, 329, 332, 335, 345, 347, 350, 354, 356, 360, 363, 366, 371, 372, - 373, 375, 377, 379, 381, 383, 386, 389, 398, 401, 404, 405, 407, 408, - 410, 411, 414, 416, 418, 423, 426, 428, 432, 433, 434, 439, 442, 445, - 450, 457, 459, 472, 477, 483, 509, 515, 546, 552, 559, 566, 571, 573, - 578, 584, 594, 625, 646, 662, 668, 705, 739, 756, 797, 867, 906, 921, - 1027, 1046, 1090, 1098, 1121, 1133, 1173, 1191, 1194, 1222, 1271, 1283, - 1338, 1409, 1414, 1420, 1424, 1427, 1430, 1434, 1440, 1442, 1445, 1450, - 1454, 1460, 1463, 1469, 1474, 1479, 1483, 1487, 1494, 1496, 1502, 1505, - 1509, 1510, 1513, 1518, 1521, 1526, 1529, 1532, 1536, 1537, 1541, 1545, - 1548, 1553, 1560, 1568, 1574, 1579, 1583, 1585, 1587, 1606, 1626, 1639, - 1643, 1652, 1658, 1659, 1666, 1671, 1675, 1681, 1694, 1697, 1710, 1786, - 1791, 1805, 1839, 1884, 1913, 1946, 1947, 1991, 2019, 2094, 2119, 2213, - 2239, 2271, 2289, 2321, 2333, 2346, 2349, 2352, 2359, 2367, 2374, 2398, - 2426, 2562, 2701, 2741, 2745, 2760, 2819, 2889, 2907, 2910, 2919, 2921, - 2939, 2944, 2945, 2948, 2951, 2958, 2971, 2977, 2985, 2988, 2990, 2991, - 2993, 3002, 3008, 3014, 3027, 3029, 3030, 3036, 3047, 3049, 3052, 3053, - 3055, 3058, 3064, 3069, 3087, 3093, 3098, 3105, 3107, 3110, 3116, 3127, - 3129, 3136, 3146, 3151, 3160, 3165, 3168, 3175, 3178, 3189, 3207, 3228, - 3244, 3248, 3252, 3256, 3263, 3281, 3295, 3303, 3309, 3312, 3322, 3326, - 3354, 3366, 3375, 3378, 3411, 3416, 3432, 3438, 3440, 3442, 3444, 3446, - 3448, 3450, 3452, 3454, 3458, 3467, 3476, 3484, 3491, 3497, 3499, 3504, - 3506, 3509, 3518, 3527, 3555, 3575, 3577, 3580, 3582, 3586, 3589, 3599, - 3610, 3626, 3638, 3646, 3653, 3658, 3661, 3673, 3689, 3700, 3710, 3726, - 3763, 3814, 3841, 3888, 4032, 4059, 4068, 4082, 4095, 4160, 4234, 4257, - 4411, 4498, 4520, 4552, 4567, 4608, 4646, 4698, 4808, 4849, 4920, 4939, - 4947, 4967, 4991, 4996, 5015, 5028, 5056, 5128, 5130, 5144, 5170, 5178, - 5183, 5188, 5191, 5368, 5371, 5379, 5381, 5383, 5397, 5399, 5401, 5403, - 5405, 5446, 5455, 5472, 5480, 5483, 5485, 5492, 5497, 5502, 5507, 5509, - 5517, 5528, 5558, 5697, 5714, 5749, 5766, 5785, 5798, 5799, 5801, 5817, - 5833, 5834, 5836, 5849, 5851, 5852, 5865, 5869, 5881, 5884, 5897, 5900, - 5916, 5932, 5948, 5963, 5968, 5978, 5988, 5992, 5994, 5997, 6003, 6008, - 6023, 6026, 6039, 6053, 6056, 6067, 6071, 6082, 6085, 6098, 6112, 6126, - 6135, 6140, 6149, 6154, 6158, 6161, 6168, 6174, 6182, 6187, 6205, 6209, - 6213, 6317, 6339, 6342, 6366, 6381, 6391, 6489, 6962, 6966, 6970, 6975, - 6977, 6982, 6985, 6987, 6989, 6991, 6993, 6995, 6997, 6999, 7000, 7004, - 7008, 7013, 7016, 7021, 7024, 7027, 7029, 7032, 7038, 7043, 7046, 7049, - 7069, 7072, 7076, 7081, 7084, 7089, 7099, 7209, 7222, 7231, 7235, 7247, - 7267, 7269, 7284, 7389, 7419, 7423, 7424, 7426, 7428, 7431, 7436, 7444, - 7475, 7549, 7584, 7665, 7666, 7831, 7836, 7853, 7865, 7885, 7888, 7912, - 7950, 7972, 7980, 7995, 8007, 8015, 8055, 8078 + channels: &iasi_metop-b_channels {{iasi_metopb_avail_channels}} obs operator: name: CRTM @@ -256,68 +208,7 @@ obs post filters: channels: *iasi_metop-b_channels options: channels: *iasi_metop-b_channels - use_flag: &useflag_iasi_metop-b [ 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, - 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, - -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, - -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, - -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, - 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, - 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, - 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, - 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, - 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, - 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, - 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, - 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, - -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, - 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, - 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, - 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, - 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, - -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, - 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1] + use_flag: &useflag_iasi_metop-b {{iasi_metopb_active_channels}} use_flag_clddet: &clddet_iasi_metop-b [ 1, 1, 1, 1, 1, 1, 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/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-c.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-c.yaml index 5cc0105a..836d229a 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-c.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-c.yaml @@ -9,55 +9,7 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.iasi_metop-c.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &iasi_metop-c_channels 16, 29, 32, 35, 38, 41, 44, 47, 49, 50, 51, 53, - 55, 56, 57, 59, 61, 62, 63, 66, 68, 70, 72, 74, 76, 78, 79, 81, 82, 83, - 84, 85, 86, 87, 89, 92, 93, 95, 97, 99, 101, 103, 104, 106, 109, 110, - 111, 113, 116, 119, 122, 125, 128, 131, 133, 135, 138, 141, 144, 146, - 148, 150, 151, 154, 157, 159, 160, 161, 163, 167, 170, 173, 176, 179, - 180, 185, 187, 191, 193, 197, 199, 200, 202, 203, 205, 207, 210, 212, - 213, 214, 217, 218, 219, 222, 224, 225, 226, 228, 230, 231, 232, 236, - 237, 239, 243, 246, 249, 252, 254, 259, 260, 262, 265, 267, 269, 275, - 279, 282, 285, 294, 296, 299, 300, 303, 306, 309, 313, 320, 323, 326, - 327, 329, 332, 335, 345, 347, 350, 354, 356, 360, 363, 366, 371, 372, - 373, 375, 377, 379, 381, 383, 386, 389, 398, 401, 404, 405, 407, 408, - 410, 411, 414, 416, 418, 423, 426, 428, 432, 433, 434, 439, 442, 445, - 450, 457, 459, 472, 477, 483, 509, 515, 546, 552, 559, 566, 571, 573, - 578, 584, 594, 625, 646, 662, 668, 705, 739, 756, 797, 867, 906, 921, - 1027, 1046, 1090, 1098, 1121, 1133, 1173, 1191, 1194, 1222, 1271, 1283, - 1338, 1409, 1414, 1420, 1424, 1427, 1430, 1434, 1440, 1442, 1445, 1450, - 1454, 1460, 1463, 1469, 1474, 1479, 1483, 1487, 1494, 1496, 1502, 1505, - 1509, 1510, 1513, 1518, 1521, 1526, 1529, 1532, 1536, 1537, 1541, 1545, - 1548, 1553, 1560, 1568, 1574, 1579, 1583, 1585, 1587, 1606, 1626, 1639, - 1643, 1652, 1658, 1659, 1666, 1671, 1675, 1681, 1694, 1697, 1710, 1786, - 1791, 1805, 1839, 1884, 1913, 1946, 1947, 1991, 2019, 2094, 2119, 2213, - 2239, 2271, 2289, 2321, 2333, 2346, 2349, 2352, 2359, 2367, 2374, 2398, - 2426, 2562, 2701, 2741, 2745, 2760, 2819, 2889, 2907, 2910, 2919, 2921, - 2939, 2944, 2945, 2948, 2951, 2958, 2971, 2977, 2985, 2988, 2990, 2991, - 2993, 3002, 3008, 3014, 3027, 3029, 3030, 3036, 3047, 3049, 3052, 3053, - 3055, 3058, 3064, 3069, 3087, 3093, 3098, 3105, 3107, 3110, 3116, 3127, - 3129, 3136, 3146, 3151, 3160, 3165, 3168, 3175, 3178, 3189, 3207, 3228, - 3244, 3248, 3252, 3256, 3263, 3281, 3295, 3303, 3309, 3312, 3322, 3326, - 3354, 3366, 3375, 3378, 3411, 3416, 3432, 3438, 3440, 3442, 3444, 3446, - 3448, 3450, 3452, 3454, 3458, 3467, 3476, 3484, 3491, 3497, 3499, 3504, - 3506, 3509, 3518, 3527, 3555, 3575, 3577, 3580, 3582, 3586, 3589, 3599, - 3610, 3626, 3638, 3646, 3653, 3658, 3661, 3673, 3689, 3700, 3710, 3726, - 3763, 3814, 3841, 3888, 4032, 4059, 4068, 4082, 4095, 4160, 4234, 4257, - 4411, 4498, 4520, 4552, 4567, 4608, 4646, 4698, 4808, 4849, 4920, 4939, - 4947, 4967, 4991, 4996, 5015, 5028, 5056, 5128, 5130, 5144, 5170, 5178, - 5183, 5188, 5191, 5368, 5371, 5379, 5381, 5383, 5397, 5399, 5401, 5403, - 5405, 5446, 5455, 5472, 5480, 5483, 5485, 5492, 5497, 5502, 5507, 5509, - 5517, 5528, 5558, 5697, 5714, 5749, 5766, 5785, 5798, 5799, 5801, 5817, - 5833, 5834, 5836, 5849, 5851, 5852, 5865, 5869, 5881, 5884, 5897, 5900, - 5916, 5932, 5948, 5963, 5968, 5978, 5988, 5992, 5994, 5997, 6003, 6008, - 6023, 6026, 6039, 6053, 6056, 6067, 6071, 6082, 6085, 6098, 6112, 6126, - 6135, 6140, 6149, 6154, 6158, 6161, 6168, 6174, 6182, 6187, 6205, 6209, - 6213, 6317, 6339, 6342, 6366, 6381, 6391, 6489, 6962, 6966, 6970, 6975, - 6977, 6982, 6985, 6987, 6989, 6991, 6993, 6995, 6997, 6999, 7000, 7004, - 7008, 7013, 7016, 7021, 7024, 7027, 7029, 7032, 7038, 7043, 7046, 7049, - 7069, 7072, 7076, 7081, 7084, 7089, 7099, 7209, 7222, 7231, 7235, 7247, - 7267, 7269, 7284, 7389, 7419, 7423, 7424, 7426, 7428, 7431, 7436, 7444, - 7475, 7549, 7584, 7665, 7666, 7831, 7836, 7853, 7865, 7885, 7888, 7912, - 7950, 7972, 7980, 7995, 8007, 8015, 8055, 8078 + channels: &iasi_metop-c_channels {{iasi_metopc_avail_channels}} obs operator: name: CRTM @@ -256,68 +208,7 @@ obs post filters: channels: *iasi_metop-c_channels options: channels: *iasi_metop-c_channels - use_flag: &useflag_iasi_metop-c [ 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, - 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, - -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, - -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, - -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, - 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, - 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, - 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, - 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, - 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, - 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, - 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, - 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, - -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, - 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, - 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, - 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, - 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, - -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, - 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1] + use_flag: &useflag_iasi_metop-c {{iasi_metopc_active_channels}} use_flag_clddet: &clddet_iasi_metop-c [ 1, 1, 1, 1, 1, 1, 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/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ssmis_f17.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ssmis_f17.yaml index dfb20361..94f97356 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ssmis_f17.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ssmis_f17.yaml @@ -19,7 +19,7 @@ type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.ssmis_f17.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &ssmis_f17_channels 1-24 + channels: &ssmis_f17_channels {{ssmis_f17_avail_channels}} obs bias: input file: '{{cycle_dir}}/ssmis_f17.{{background_time}}.satbias.nc4' variational bc: @@ -210,9 +210,7 @@ channels: *ssmis_f17_channels options: channels: *ssmis_f17_channels - use_flag: &useflag_ssmis_f17 [ -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1, 1] + use_flag: &useflag_ssmis_f17 {{ssmis_f17_active_channels}} maxvalue: 1.0e-12 action: name: reject diff --git a/src/swell/test/code_tests/active_channels_test_files/amsua_n19.yaml b/src/swell/test/code_tests/active_channels_test_files/amsua_n19.yaml deleted file mode 100644 index 6b69be8a..00000000 --- a/src/swell/test/code_tests/active_channels_test_files/amsua_n19.yaml +++ /dev/null @@ -1,218 +0,0 @@ -obs space: - name: AMSU-A NOAA-19 - obsdatain: - engine: - type: H5File - obsfile: '{{cycle_dir}}/amsua_n19.{{window_begin}}.nc4' - obsdataout: - engine: - type: H5File - obsfile: '{{cycle_dir}}/{{experiment_id}}.amsua_n19.{{window_begin}}.nc4' - simulated variables: [brightnessTemperature] - channels: &amsua_n19_available_channels 1-15 - -obs operator: - name: CRTM - Absorbers: [H2O,O3,CO2] - obs options: - Sensor_ID: &Sensor_ID amsua_n19 - EndianType: little_endian - CoefficientPath: '{{crtm_coeff_dir}}' - linear obs operator: - Absorbers: [H2O,O3] - -obs bias: - input file: '{{cycle_dir}}/amsua_n19.{{background_time}}.satbias.nc4' - variables without bc: [brightnessTemperature] - channels: 14 - variational bc: - predictors: - - name: constant - - name: cloud_liquid_water - sensor: AMSUA - clwdif_ch238: 1 - clwdif_ch314: 2 - - name: lapse_rate - order: 2 - tlapse: &amsua_n19_tlapse '{{cycle_dir}}/amsua_n19.{{background_time}}.tlapse.txt' - - name: lapse_rate - tlapse: *amsua_n19_tlapse - - name: emissivity - - name: scan_angle - order: 4 - - name: scan_angle - order: 3 - - name: scan_angle - order: 2 - - name: scan_angle - covariance: - minimal required obs number: 20 - variance range: [1.0e-6, 10.0] - step size: 1.0e-4 - largest analysis variance: 10000.0 - prior: - input file: '{{cycle_dir}}/amsua_n19.{{background_time}}.satbias.nc4' - inflation: - ratio: 1.1 - ratio for small dataset: 2.0 - output file: '{{cycle_dir}}/amsua_n19.{{window_begin}}.satbias.nc4' - -obs filters: -# Window and surface-sensitive channels check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: 1-6,15 - test variables: - - name: ObsValue/brightnessTemperature - channels: 1-6,15 - treat missing as out of bounds: true - minvalue: 100.0 - maxvalue: 500.0 - flag all filter variables if any test variable is out of bounds: true -# passedBenchmark: 1500 -# All channels unreasonable values check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *amsua_n19_available_channels - minvalue: 100.0 - maxvalue: 500.0 -# Hydrometeor Check (cloud/precipitation affected chanels) - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *amsua_n19_available_channels - test variables: - - name: ObsFunction/HydrometeorCheckAMSUAclr - channels: *amsua_n19_available_channels - options: - sensor: *Sensor_ID - channels: *amsua_n19_available_channels - test_biaspredictor: cloud_liquid_waterPredictor - maxvalue: 0.0 - action: - name: reject -# Assign obs error - - filter: Perform Action - filter variables: - - name: brightnessTemperature - channels: *amsua_n19_available_channels - action: - name: assign error - error parameter vector: - [2.500, 2.000, 2.000, 0.550, 0.300, - 0.230, 0.230, 0.250, 0.250, 0.350, - 0.400, 0.550, 0.800, 5.000, 2.500] -# Topography check - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: *amsua_n19_available_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTopoRad - channels: *amsua_n19_available_channels - options: - sensor: *Sensor_ID - channels: *amsua_n19_available_channels -# Transmittance Top Check - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: *amsua_n19_available_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: *amsua_n19_available_channels - options: - channels: *amsua_n19_available_channels -# Surface Jacobian check - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: *amsua_n19_available_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: *amsua_n19_available_channels - options: - channels: *amsua_n19_available_channels - sensor: *Sensor_ID - use_biasterm: true - test_biasterm: ObsBiasTerm - obserr_demisf: [0.010, 0.020, 0.015, 0.020, 0.200] - obserr_dtempf: [0.500, 2.000, 1.000, 2.000, 4.500] -# Gross check - - filter: Background Check - filter variables: - - name: brightnessTemperature - channels: *amsua_n19_available_channels - function absolute threshold: - - name: ObsFunction/ObsErrorBoundMW - channels: *amsua_n19_available_channels - options: - sensor: *Sensor_ID - channels: *amsua_n19_available_channels - obserr_bound_latitude: - name: ObsFunction/ObsErrorFactorLatRad - options: - latitude_parameters: [25.0, 0.25, 0.04, 3.0] - obserr_bound_transmittop: - name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: *amsua_n19_available_channels - options: - channels: *amsua_n19_available_channels - obserr_bound_topo: - name: ObsFunction/ObsErrorFactorTopoRad - channels: *amsua_n19_available_channels - options: - channels: *amsua_n19_available_channels - sensor: *Sensor_ID - error parameter vector: - [2.500, 2.000, 2.000, 0.550, 0.300, - 0.230, 0.230, 0.250, 0.250, 0.350, - 0.400, 0.550, 0.800, 5.000, 2.500] - obserr_bound_max: [4.5, 4.5, 4.5, 2.5, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, - 2.5, 3.5, 4.5, 4.5, 4.5] - action: - name: reject -# Inter-channel check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *amsua_n19_available_channels - test variables: - - name: ObsFunction/InterChannelConsistencyCheck - channels: *amsua_n19_available_channels - options: - channels: *amsua_n19_available_channels - use passive_bc: true - sensor: *Sensor_ID - use_flag: [-1, -1, -1, 1, 1, - 1, -1, -1, 1, 1, - 1, 1, 1, 1, -1] - maxvalue: 1.0e-12 - action: - name: reject -# Useflag check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *amsua_n19_available_channels - test variables: - - name: ObsFunction/ChannelUseflagCheckRad - channels: *amsua_n19_available_channels - options: - channels: *amsua_n19_available_channels -# use passive_bc: true - use_flag: [-1, -1, -1, 1, 1, - 1, -1, -1, 1, 1, - 1, 1, 1, 1, -1] - minvalue: 1.0e-12 - action: - name: reject diff --git a/src/swell/test/code_tests/active_channels_test_files/avhrr3_n18_channel_info.yaml b/src/swell/test/code_tests/active_channels_test_files/avhrr3_n18_channel_info.yaml new file mode 100644 index 00000000..5f1439ef --- /dev/null +++ b/src/swell/test/code_tests/active_channels_test_files/avhrr3_n18_channel_info.yaml @@ -0,0 +1,18 @@ +active: +- begin date: '2005-05-20T18:00:00' + channels: + - '4' + - '5' + comments: no comment + end date: '2023-09-12T18:00:00' +- begin date: '2023-09-13T00:00:00' + channels: [] + comments: '# NOAA-18 satellite will be fully transitioned to Parsons' + end date: '2100-12-31T18:00:00' +available: +- begin date: '2005-05-20T00:00:00' + channels: + - '3' + - '4' + - '5' + end date: '2999-12-31T18:00:00' diff --git a/src/swell/test/code_tests/active_channels_test_files/gmi_gpm_channel_info.yaml b/src/swell/test/code_tests/active_channels_test_files/gmi_gpm_channel_info.yaml new file mode 100644 index 00000000..08986b9b --- /dev/null +++ b/src/swell/test/code_tests/active_channels_test_files/gmi_gpm_channel_info.yaml @@ -0,0 +1,28 @@ +active: +- begin date: '2014-03-20T00:00:00' + channels: + - '5' + - '6' + - '7' + - '10' + - '12' + - '13' + comments: no comment + end date: '2999-12-31T18:00:00' +available: +- begin date: '2014-03-20T00:00:00' + channels: + - '1' + - '2' + - '3' + - '4' + - '5' + - '6' + - '7' + - '8' + - '9' + - '10' + - '11' + - '12' + - '13' + end date: '2999-12-31T18:00:00' diff --git a/src/swell/test/code_tests/active_channels_test_files/mhs_metop-c_channel_info.yaml b/src/swell/test/code_tests/active_channels_test_files/mhs_metop-c_channel_info.yaml new file mode 100644 index 00000000..9afa5578 --- /dev/null +++ b/src/swell/test/code_tests/active_channels_test_files/mhs_metop-c_channel_info.yaml @@ -0,0 +1,19 @@ +active: +- begin date: '2019-09-17T00:00:00' + channels: + - '1' + - '2' + - '3' + - '4' + - '5' + comments: '# active for parallel testing' + end date: '2100-12-31T18:00:00' +available: +- begin date: '2019-09-17T00:00:00' + channels: + - '1' + - '2' + - '3' + - '4' + - '5' + end date: '2100-12-31T18:00:00' diff --git a/src/swell/test/code_tests/generate_observing_system_test.py b/src/swell/test/code_tests/generate_observing_system_test.py index ec7e34f1..6d74a7e3 100644 --- a/src/swell/test/code_tests/generate_observing_system_test.py +++ b/src/swell/test/code_tests/generate_observing_system_test.py @@ -1,7 +1,7 @@ import os from swell.utilities.observing_system_records import ObservingSystemRecords -observations = ['amsua_n19'] +observations = ['airs_aqua'] observing_system_records_path = './yaml_output/' # Clone GeosAna diff --git a/src/swell/test/code_tests/get_active_channels_test.py b/src/swell/test/code_tests/get_active_channels_test.py index 4f61ce02..5a5bc6ec 100644 --- a/src/swell/test/code_tests/get_active_channels_test.py +++ b/src/swell/test/code_tests/get_active_channels_test.py @@ -1,12 +1,23 @@ -from swell.utilities.get_active_channels import get_active_channels +from swell.utilities.get_channels import get_channels +from datetime import datetime as dt -use_flags = [-1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1] +# Use flags +amsua_n19_use_flags = [-1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1] +avhrr3_n18_use_flags = [-1, 1, 1] +gmi_gpm_use_flags = [-1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1] +mhs_metop_c_use_flags = [1, 1, 1, 1, 1] + +use_flags = [amsua_n19_use_flags, avhrr3_n18_use_flags, + gmi_gpm_use_flags, mhs_metop_c_use_flags] + +# Observation list +observations = ['amsua_n19', 'avhrr3_n18', 'gmi_gpm', 'mhs_metop-c'] cycle_time = '20211212T000000Z' +dt_cycle_time = dt.strptime(cycle_time, '%Y%m%dT%H%M%SZ') path_to_observing_sys_yamls = 'active_channels_test_files/' -path_to_configs = 'active_channels_test_files/' -observation = 'amsua_n19' -generated_use_flags = get_active_channels(path_to_observing_sys_yamls, - path_to_configs, observation, cycle_time) -assert (use_flags == generated_use_flags) +for idx, _ in enumerate(observations): + avail, generated_use_flags = get_channels(path_to_observing_sys_yamls, + observations[idx], dt_cycle_time) + assert (use_flags[idx] == generated_use_flags) diff --git a/src/swell/utilities/get_active_channels.py b/src/swell/utilities/get_channels.py similarity index 78% rename from src/swell/utilities/get_active_channels.py rename to src/swell/utilities/get_channels.py index 2a6ffb65..7d56abf7 100644 --- a/src/swell/utilities/get_active_channels.py +++ b/src/swell/utilities/get_channels.py @@ -10,6 +10,7 @@ import yaml import os from datetime import datetime as dt +from itertools import groupby # -------------------------------------------------------------------------------------------------- @@ -36,6 +37,22 @@ def process_channel_lists(channel_list): # -------------------------------------------------------------------------------------------------- +def create_range_string(avail_list): + ''' + Function converts integer list into string of ranges + ''' + ranges = [] + for _, g in groupby(enumerate(avail_list), lambda i_x: i_x[0]-i_x[1]): + group = list(map(lambda x: x[1], g)) + if len(group) > 1: + ranges.append(f'{group[0]}-{group[-1]}') + else: + ranges.append(str(group[0])) + return ', '.join(ranges) + +# -------------------------------------------------------------------------------------------------- + + def get_channel_list(input_dict, dt_cycle_time): ''' @@ -51,7 +68,7 @@ def get_channel_list(input_dict, dt_cycle_time): # -------------------------------------------------------------------------------------------------- -def get_active_channels(path_to_observing_sys_yamls, observation, dt_cycle_time): +def get_channels(path_to_observing_sys_yamls, observation, dt_cycle_time): ''' Comparing available channels and active channels from the observing @@ -70,12 +87,13 @@ def get_active_channels(path_to_observing_sys_yamls, observation, dt_cycle_time) active_channels = get_channel_list(data['active'], dt_cycle_time) available_channels_list = process_channel_lists(available_channels) + available_range_string = create_range_string(available_channels_list) active_channels_list = process_channel_lists(active_channels) use_flags = [1 if x in active_channels_list else -1 for x in available_channels_list] - return use_flags + return available_range_string, use_flags else: - return None + return None, None # -------------------------------------------------------------------------------------------------- diff --git a/src/swell/utilities/gsi_record_parser.py b/src/swell/utilities/gsi_record_parser.py index f51c47c0..c0b8a9aa 100644 --- a/src/swell/utilities/gsi_record_parser.py +++ b/src/swell/utilities/gsi_record_parser.py @@ -1,291 +1,138 @@ -# (C) Copyright 2021- United States Government as represented by the Administrator of the -# National Aeronautics and Space Administration. All Rights Reserved. -# -# 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. - -import numpy as np import pandas as pd -import datetime -from datetime import datetime as dt +import numpy as np -def check_end_times(end_times): +def check_end_time(end_time): ''' Checks end times for 24 hour strings and converts them to 18 ''' - new_end_times = [] - - for end_time in end_times: - # Note that python datetime does not allow for times with hour = 24 - hour = end_time[8:10] - if (hour == '24'): - # Subtract 6 hours - tmp = int(end_time) - 60000 - new_end_times.append(str(tmp)) - else: - new_end_times.append(end_time) - - return new_end_times + hour = end_time[8:10] + if (hour == '24'): + # Subtract 6 hours + new_end_time = str(int(end_time) - 60000) + return new_end_time + else: + return end_time class GSIRecordParser: def __init__(self): - - ''' - This class employs a state machine algorithm to process raw data from GSI - .tbl files. The different states work together to parse through an initial - dataframe. The rows of the resulting dataframe correspond to clean entries - for a given instrument and satellite. - - ''' - - self.idx = None - self.main_idx = None - self.start_times = None - self.end_times = None self.instr_df = None - self.compare_channels = None - self.curr_channel_list = None - self.main_channel_list = None self.return_df = None + self.sat = None + self.instr = None - def reset(self): - self.idx = 0 - self.main_idx = 0 - self.start_times = [] - self.end_times = [] - self.compare_channels = [] - self.curr_channel_list = [] - self.main_channel_list = [] + def get_channel_list(self, start): + channel_list = [] + rows = self.instr_df.loc[self.instr_df["start"] == start] + [channel_list.extend(i) for i in rows["channels"].values] + channel_list = list(set(channel_list)) + channel_list.sort(key=int) + return channel_list def run(self, instr_df): - ''' - Effectively state one of the state machine. - Generates an ordered list of start times and corresponding - end times. Checks the end times and then proceeds to condition one. - - input: - instr_df = a dataframe containing raw data for a given satellite and - instrument - ''' - - self.reset() + # Save instrument dataframe self.instr_df = instr_df - self.return_df = pd.DataFrame(columns=list(instr_df.columns.values)) - - self.start_times = list(np.unique(self.instr_df["start"].values)) - self.start_times.sort(key=int) - for start in self.start_times: - self.end_times.append( - self.instr_df.loc[self.instr_df["start"] == start]["end"].values[0]) - - self.end_times = check_end_times(self.end_times) - self.condition_one() - - def condition_one(self): - - ''' - If there is one row for the date range, go to state 2. Otherwise, - go to state 3. - ''' - - start_time_df = self.instr_df.loc[self.instr_df["start"] == self.start_times[self.idx]] - n_curr_start_rows = len(start_time_df) - assert (n_curr_start_rows != 0) - - if (n_curr_start_rows == 1): - self.curr_channel_list = start_time_df["channels"].values[0] - self.state_two() - else: - self.state_three() - - def state_two(self): - - ''' - Update return_df with new row, increment idx, and then go to - condition 4. - ''' - - row = self.instr_df.loc[self.instr_df["start"] == self.start_times[self.idx]] - self.update_return_df(row) - self.idx += 1 - self.condition_four() - - def state_three(self): - - ''' - Gather channels for all rows in current datetime. If there are more - than one end time within the rows, set main_start_idx and - main_channels_list, set compare_channels to the current channel list, - update return_df with a new row, increment index, - and then go to condition 2. - Else, go to state 2 with the updated current channel list. - ''' - - rows = self.instr_df.loc[self.instr_df["start"] == self.start_times[self.idx]] - [self.curr_channel_list.extend(i) for i in rows["channels"].values] - self.curr_channel_list = list(set(self.curr_channel_list)) - self.curr_channel_list.sort(key=int) - - end_times = rows["end"].values - other_end_times = end_times[end_times != end_times[0]] - - if (other_end_times): - - first_end = other_end_times[0] - first_end_row = self.instr_df.loc[self.instr_df["end"] == first_end] - self.compare_channels = first_end_row["channels"].values[0] - - self.main_channel_list = self.curr_channel_list - self.main_idx = self.idx - - self.update_return_df(first_end_row, no_comment=True) - self.idx += 1 - - self.condition_two() - - else: - self.state_two() - def condition_two(self): + # Save satellite and instrument name + self.sat = self.instr_df.iloc[0]['sat'] + self.instr = self.instr_df.iloc[0]['instr'] - ''' - If curr start/end is in main range, go to condition 3. Otherwise - go to state 2 - ''' - - # Return if end of df is reached - if (self.idx == len(self.start_times)): - return - - # Get current and main start and end time - curr_start = self.start_times[self.idx] - curr_end = self.end_times[self.idx] - - main_start = self.start_times[self.main_idx] - main_end = self.end_times[self.main_idx] - - if ((int(curr_start) > int(main_start)) and (int(curr_end) <= int(main_end))): - self.state_four() - else: - self.state_two() - - def state_four(self): - - ''' - Update current channel list by whether values need to be turned - on or turned off. Then update the return df, increment the index - and go to condition 2. - ''' - - row = self.instr_df.loc[self.instr_df["start"] == self.start_times[self.idx]] - row_channel_list = row["channels"].values[0] - - # If these are the same, the logic is off - assert (len(row_channel_list) != len(self.compare_channels)) - self.curr_channel_list = self.main_channel_list - - if (len(row_channel_list) > len(self.compare_channels)): - # Turn on - turn_on = list(set(row_channel_list) - set(self.compare_channels)) - self.curr_channel_list += turn_on - else: - # Turn off - turn_off = list(set(self.compare_channels) - set(row_channel_list)) - self.curr_channel_list = [x for x in self.curr_channel_list if x not in turn_off] - - self.update_return_df(row) - self.idx += 1 - - self.condition_two() - - def condition_four(self): - - ''' - If next date range is right after previous date range, go to - condition one. Otherwise, go to state 6. If there's no next - then return. - ''' - - assert (self.idx != 0) - if (self.idx == len(self.start_times)): - return - else: - assert (self.end_times[self.idx-1] != self.start_times[self.idx]) + # Initialize return dataframe + self.return_df = pd.DataFrame(columns=list(instr_df.columns.values)) - prev_end_dt = dt.strptime(self.end_times[self.idx-1], '%Y%m%d%H%M%S') - next_start_dt = dt.strptime(self.start_times[self.idx], '%Y%m%d%H%M%S') - diff = next_start_dt - prev_end_dt + # Create lists for start and end times + end_times = [] + start_times = list(np.unique(self.instr_df['start'].values)) + start_times.sort(key=int) + for start in start_times: + end_times.append(self.instr_df.loc[self.instr_df['start'] == start]['end'].values[0]) + + done = [] + for idx in range(len(start_times)): + main_start = start_times[idx] + main_end = end_times[idx] + + # If time has already been processed, then skip + if main_start in done: + continue + + start_df = self.instr_df.loc[self.instr_df['start'] == main_start] + if (len(start_df) == 1): + # Only one row to process + channel_list = start_df['channels'].values[0] + comment = start_df['comments'].values[0] + self.update_return_df(main_start, main_end, channel_list, comment) + done.append(main_start) + + elif len(np.unique(start_df['end'].values)) == 1: + # Collect channels and update dataframe with row + channel_list = self.get_channel_list(main_start) + self.update_return_df(main_start, main_end, channel_list, '') + done.append(main_start) - if diff == datetime.timedelta(hours=6): - self.condition_one() else: - self.state_six() + # Collect all channels for main start time + channel_list = self.get_channel_list(main_start) + + inner_start = [] + inner_end = [] + # Get list of remaining start times that fall in range of start and end + for inner_idx in range(idx+1, len(start_times)): + if (int(start_times[inner_idx]) >= int(main_start)) and \ + (int(start_times[inner_idx]) <= int(main_end)): + inner_start.append(start_times[inner_idx]) + inner_end.append(end_times[inner_idx]) + + # Update df for start to first start with all channels + new_end = str(int(inner_start[0])) + self.update_return_df(main_start, new_end, channel_list, '') + + # Get channel list for main start/ main end time + row_channel_list = start_df.loc[start_df["end"] != main_end]["channels"].values[0] + + for inner_idx in range(len(inner_start)): + # Compare channels from next time range + row = self.instr_df.loc[self.instr_df["start"] == inner_start[inner_idx]] + compare_channels = row["channels"].values[0] + + # Turn channels on or off + if (len(row_channel_list) > len(compare_channels)): + # Turn off + turn_off = list(set(row_channel_list) - set(compare_channels)) + channel_list = [x for x in channel_list if x not in turn_off] + else: + # Turn on + turn_on = list(set(compare_channels) - set(row_channel_list)) + channel_list += turn_on + + # Update row + comment = row['comments'].values[0] + # pass dictionary to update return df + self.update_return_df(inner_start[inner_idx], inner_end[inner_idx], + channel_list, comment) + done.append(inner_start[inner_idx]) + + def update_return_df(self, start, end, channel_list, comment): + + # Fix end time if on the 24 hour mark + end = check_end_time(end) + + new_row = pd.DataFrame.from_dict({ + 'sat': [self.sat], + 'start': [start], + 'end': [end], + 'instr': [self.instr], + 'channel_num': [len(channel_list)], + 'channels': [channel_list], + 'comments': [comment]}) - def state_six(self): - - ''' - Create new empty date range, update return df with new row, and then - head over to state one. No update to the index. - ''' - - missing_time = {} - - prev_end = dt.strptime(self.end_times[self.idx-1], '%Y%m%d%H%M%S') - miss_begin_time = prev_end + datetime.timedelta(hours=6) - missing_time['begin_time'] = (miss_begin_time).strftime('%Y%m%d%H%M%S') - - curr_start = dt.strptime(self.start_times[self.idx], '%Y%m%d%H%M%S') - miss_end_time = curr_start - datetime.timedelta(hours=6) - missing_time['end_time'] = (miss_end_time).strftime('%Y%m%d%H%M%S') - - row = self.instr_df.loc[self.instr_df["start"] == self.start_times[self.idx]] - self.update_return_df(row, missing=True, missing_time=missing_time) - - self.condition_one() + self.return_df = pd.concat([self.return_df, new_row], ignore_index=True) def get_instr_df(self): ''' Returns the dataframe that the state machine generated! ''' return self.return_df - - def update_return_df(self, row, no_comment=False, missing=False, missing_time={}): - - ''' Adding rows to final dataframe that will be returned through get_instr_df ''' - - # Updates the return df based on parameters - if (missing): - new_row = pd.DataFrame.from_dict({ - 'sat': [row["sat"].values[0]], - 'start': [missing_time['begin_time']], - 'end': [missing_time['end_time']], - 'instr': [row['instr'].values[0]], - 'channel_num': [0], - 'channels': [[]], - 'comments': ['missing for this period']}) - - elif (no_comment): - new_row = pd.DataFrame.from_dict({ - 'sat': [row["sat"].values[0]], - 'start': [self.start_times[self.idx]], - 'end': [self.end_times[self.idx]], - 'instr': [row['instr'].values[0]], - 'channel_num': [len(self.curr_channel_list)], - 'channels': [self.curr_channel_list], - 'comments': ['']}) - - else: - new_row = pd.DataFrame.from_dict({ - 'sat': [row["sat"].values[0]], - 'start': [self.start_times[self.idx]], - 'end': [self.end_times[self.idx]], - 'instr': [row['instr'].values[0]], - 'channel_num': [len(self.curr_channel_list)], - 'channels': [self.curr_channel_list], - 'comments': [row["comments"].values[0]]}) - - self.return_df = pd.concat([self.return_df, new_row], ignore_index=True) diff --git a/src/swell/utilities/observing_system_records.py b/src/swell/utilities/observing_system_records.py index 3cf6eccd..25c10275 100644 --- a/src/swell/utilities/observing_system_records.py +++ b/src/swell/utilities/observing_system_records.py @@ -11,7 +11,6 @@ def format_date(old_date): ''' Formatting date into expected template ''' - date = dt.datetime.strptime(old_date, '%Y%m%d%H%M%S') return date.isoformat() diff --git a/src/swell/utilities/render_jedi_interface_files.py b/src/swell/utilities/render_jedi_interface_files.py index d508fdbe..2052b6af 100644 --- a/src/swell/utilities/render_jedi_interface_files.py +++ b/src/swell/utilities/render_jedi_interface_files.py @@ -11,7 +11,8 @@ import yaml from swell.utilities.jinja2 import template_string_jinja2 -from swell.utilities.get_active_channels import get_active_channels +from swell.utilities.get_channels import get_channels + # -------------------------------------------------------------------------------------------------- @@ -33,8 +34,10 @@ def __init__(self, logger, experiment_root, experiment_id, cycle_dir, cycle_time # Fields needed for get_active_channels self.cycle_time = None + if cycle_time is not None: self.cycle_time = cycle_time.dto() + self.observing_system_records_path = None # Dictionary to hold things that can be templated @@ -191,12 +194,15 @@ def render_interface_observations(self, config_name): # Check that the config_name is not ufo_tests if config_name != 'ufo_tests': - # Get active channels - active_channels = get_active_channels(self.observing_system_records_path, - config_name, self.cycle_time) + # Get available and active channels + avail_channels, active_channels = get_channels(self.observing_system_records_path, + config_name, self.cycle_time) - # Add active channels to template dictionary - self.__template_dict__[f'{config_name}_active_channels'] = active_channels + # Add available and active channels to template dictionary + # If config_name contains a hyphen, remove for jinja2 templating + new_config_name = config_name.replace('-', '') + self.__template_dict__[f'{new_config_name}_avail_channels'] = avail_channels + self.__template_dict__[f'{new_config_name}_active_channels'] = active_channels # Render templates in file and return dictionary return self.__open_file_render_to_dict__(config_file)