Skip to content

Commit

Permalink
Merge pull request #2780 from ameraner/feature_add_fci_composites
Browse files Browse the repository at this point in the history
Add new (Eumetrain) FCI RGB composites
  • Loading branch information
mraspaud committed Apr 17, 2024
2 parents 2e5136c + 20fd4c1 commit 23af5d4
Show file tree
Hide file tree
Showing 4 changed files with 315 additions and 14 deletions.
234 changes: 220 additions & 14 deletions satpy/etc/composites/fci.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,47 @@
sensor_name: visir/fci


composites:
### L2
binary_cloud_mask:
# This will set all clear pixels to '0', all pixels with cloudy features (meteorological/dust/ash clouds) to '1' and
# missing/undefined pixels to 'nan'. This can be used for the official EUMETSAT cloud mask product (CLM).
compositor: !!python/name:satpy.composites.CategoricalDataCompositor
prerequisites:
- name: 'cloud_state'
lut: [ .nan, 0, 1, 1, 1, 1, 1, 1, 0, .nan ]
standard_name: binary_cloud_mask

### Night Layers
night_ir105:
compositor: !!python/name:satpy.composites.SingleBandCompositor
prerequisites:
- name: ir_105
standard_name: night_ir105

night_ir_alpha:
compositor: !!python/name:satpy.composites.GenericCompositor
standard_name: night_ir_alpha
prerequisites:
- name: ir_38
- name: ir_105
- name: ir_123
- name: ir_105

night_ir_with_background:
compositor: !!python/name:satpy.composites.BackgroundCompositor
standard_name: night_ir_with_background
prerequisites:
- night_ir_alpha
- _night_background

night_ir_with_background_hires:
compositor: !!python/name:satpy.composites.BackgroundCompositor
standard_name: night_ir_with_background
prerequisites:
- night_ir_alpha
- _night_background_hires

### Green Corrections
ndvi_hybrid_green:
description: >
The FCI green band at 0.51 µm deliberately misses the chlorophyll band, such that
Expand Down Expand Up @@ -47,15 +87,7 @@ composites:
modifiers: [ sunz_corrected ]
standard_name: toa_bidirectional_reflectance

binary_cloud_mask:
# This will set all clear pixels to '0', all pixles with cloudy features (meteorological/dust/ash clouds) to '1' and
# missing/undefined pixels to 'nan'. This can be used for the the official EUMETSAT cloud mask product (CLM).
compositor: !!python/name:satpy.composites.CategoricalDataCompositor
prerequisites:
- name: 'cloud_state'
lut: [.nan, 0, 1, 1, 1, 1, 1, 1, 0, .nan]
standard_name: binary_cloud_mask

### True Color
true_color:
compositor: !!python/name:satpy.composites.SelfSharpenedRGB
description: >
Expand Down Expand Up @@ -94,13 +126,46 @@ composites:
- name: vis_04
standard_name: true_color_raw

true_color_with_night_ir105:
description: >
True Color during daytime, and a simple IR105 layer during nighttime.
compositor: !!python/name:satpy.composites.DayNightCompositor
standard_name: fci_day_night_blend
lim_low: 78
lim_high: 88
prerequisites:
- true_color
- night_ir105

true_color_with_night_ir:
description: >
True Color during daytime, and a simple IR105 layer during nighttime.
compositor: !!python/name:satpy.composites.DayNightCompositor
standard_name: fci_day_night_blend
lim_low: 78
lim_high: 88
prerequisites:
- true_color
- night_ir_with_background

true_color_with_night_ir_hires:
description: >
True Color during daytime, and a simple IR105 layer during nighttime.
compositor: !!python/name:satpy.composites.DayNightCompositor
standard_name: fci_day_night_blend
lim_low: 78
lim_high: 88
prerequisites:
- true_color
- night_ir_with_background_hires

true_color_reproduction:
# JMA True Color Reproduction complete composite with corrected and uncorrected blend.
# http://www.jma.go.jp/jma/jma-eng/satellite/introduction/TCR.html
compositor: !!python/name:satpy.composites.DayNightCompositor
standard_name: true_color_reproduction
lim_low: 73.
lim_high: 85.
lim_low: 73
lim_high: 85
prerequisites:
- true_color_reproduction_corr
- true_color_reproduction_uncorr
Expand All @@ -125,7 +190,7 @@ composites:
- name: vis_04
standard_name: true_color_reproduction_color_stretch

# GeoColor
### GeoColor
geo_color:
compositor: !!python/name:satpy.composites.DayNightCompositor
description: >
Expand All @@ -142,7 +207,6 @@ composites:
- true_color
- geo_color_night

# GeoColor Night-time
geo_color_high_clouds:
standard_name: geo_color_high_clouds
compositor: !!python/name:satpy.composites.HighCloudCompositor
Expand Down Expand Up @@ -180,3 +244,145 @@ composites:
prerequisites:
- geo_color_high_clouds
- geo_color_background_with_low_clouds

### IR-Sandwich
ir_sandwich:
compositor: !!python/name:satpy.composites.SandwichCompositor
standard_name: ir_sandwich
prerequisites:
- name: 'vis_06'
modifiers: [ sunz_corrected ]
- name: colorized_ir_clouds

colorized_ir_clouds:
compositor: !!python/name:satpy.composites.SingleBandCompositor
prerequisites:
- name: 'ir_105'
standard_name: colorized_ir_clouds

ir_sandwich_with_night_colorized_ir_clouds:
compositor: !!python/name:satpy.composites.DayNightCompositor
standard_name: fci_day_night_blend
lim_low: 78
lim_high: 88
prerequisites:
- ir_sandwich
- colorized_ir_clouds

### other RGBs
cloud_type:
description: >
Equal to cimss_cloud_type recipe, but with additional sunz_reducer modifier to avoid saturation at the terminator.
references:
EUMETRAIN Quick Guide: https://resources.eumetrain.org/rgb_quick_guides/quick_guides/CloudTypeRGB.pdf
Recipe: https://resources.eumetrain.org/RGBguide/recipes/RGB_recipes.pdf
compositor: !!python/name:satpy.composites.GenericCompositor
prerequisites:
- name: nir_13
modifiers: [ sunz_corrected, sunz_reduced ]
- name: vis_06
modifiers: [ sunz_corrected, sunz_reduced ]
- name: nir_16
modifiers: [ sunz_corrected, sunz_reduced ]
standard_name: cimss_cloud_type

cloud_type_with_night_ir105:
description: >
Combines the cloud_type during daytime with the simple 10.5µm night_ir105 layer during nighttime
compositor: !!python/name:satpy.composites.DayNightCompositor
standard_name: fci_day_night_blend
lim_low: 78
lim_high: 88
prerequisites:
- cloud_type
- night_ir105

cloud_phase:
description: >
Equal to cloud_phase recipe, but with additional sunz_reducer modifier to avoid saturation at the terminator.
references:
EUMETRAIN Quick Guide: https://resources.eumetrain.org/rgb_quick_guides/quick_guides/CloudPhaseRGB.pdf
Recipe: https://resources.eumetrain.org/RGBguide/recipes/RGB_recipes.pdf
compositor: !!python/name:satpy.composites.GenericCompositor
prerequisites:
- name: nir_16
modifiers: [sunz_corrected, sunz_reduced]
- name: nir_22
modifiers: [sunz_corrected, sunz_reduced]
- name: vis_06
modifiers: [sunz_corrected, rayleigh_corrected, sunz_reduced]
standard_name: cloud_phase

cloud_phase_with_night_ir105:
description: >
Combines the cloud_phase during daytime with the simple 10.5µm night_ir105 layer during nighttime
compositor: !!python/name:satpy.composites.DayNightCompositor
standard_name: fci_day_night_blend
lim_low: 78
lim_high: 88
prerequisites:
- cloud_phase
- night_ir105

fire_temperature:
standard_name: fire_temperature_fci
compositor: !!python/name:satpy.composites.GenericCompositor
description: >
The fire temperature RGB highlights intense fires and differentiate these
from low temperature fires. Small low temperature fires will only show up at 3.9 μm and
appear red. With the increasing intensity and temperature the fires will also be detected
by the 2.2 μm and 1.6 μm bands resulting very intense fires in white.
Note: the EUM, CIRA and AWIPS recipes are identical (apart from neglectable 0.15K difference due to
unprecise C->K conversion)
references:
Recipe: https://resources.eumetrain.org/RGBguide/recipes/RGB_recipes.pdf
Cira Quick Guide: https://rammb.cira.colostate.edu/training/visit/quick_guides/Fire_Temperature_RGB.pdf
Eumetrain Quick Guide: https://resources.eumetrain.org/rgb_quick_guides/quick_guides/FireTemperatureRGB.pdf
prerequisites:
- name: ir_38
- name: nir_22
- name: nir_16

fire_temperature_38refl:
standard_name: fire_temperature_fci_38refl
compositor: !!python/name:satpy.composites.GenericCompositor
description: >
Same as fire_temperature, but uses only reflective part of 3.8
references:
discussion: See https://github.com/pytroll/satpy/pull/728
prerequisites:
- name: ir_38
modifiers: [nir_reflectance]
- name: nir_22
modifiers: [sunz_corrected]
- name: nir_16
modifiers: [sunz_corrected]

fire_temperature_rad:
standard_name: fire_temperature_fci_rad
compositor: !!python/name:satpy.composites.GenericCompositor
description: >
Same as fire_temperature, but uses the channels in radiance units. This is the original VIIRS recipe.
references:
discussion: See https://github.com/pytroll/satpy/pull/728
prerequisites:
- name: ir_38
calibration: radiance
- name: nir_22
calibration: radiance
- name: nir_16
calibration: radiance

snow:
references:
EUMETRAIN Quick Guide: https://resources.eumetrain.org/rgb_quick_guides/quick_guides/SnowRGB.pdf
Recipe: https://resources.eumetrain.org/RGBguide/recipes/RGB_recipes.pdf
compositor: !!python/name:satpy.composites.GenericCompositor
prerequisites:
- name: vis_08
modifiers: [sunz_corrected]
- name: nir_16
modifiers: [sunz_corrected]
- name: ir_38
modifiers: [nir_reflectance]
standard_name: snow
17 changes: 17 additions & 0 deletions satpy/etc/composites/visir.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,23 @@ composites:
- 10.8
standard_name: night_microphysics

24h_microphysics:
references:
EUMETRAIN Quick Guide: https://eumetrain.org/sites/default/files/2021-05/24MicroRGB.pdf
Recipe: https://resources.eumetrain.org/RGBguide/recipes/RGB_recipes.pdf
compositor: !!python/name:satpy.composites.GenericCompositor
prerequisites:
- compositor: !!python/name:satpy.composites.DifferenceCompositor
prerequisites:
- 12.0
- 10.8
- compositor: !!python/name:satpy.composites.DifferenceCompositor
prerequisites:
- 10.8
- 8.7
- 10.8
standard_name: 24h_microphysics

ir108_3d:
compositor: !!python/name:satpy.composites.GenericCompositor
standard_name: ir108_3d
Expand Down
62 changes: 62 additions & 0 deletions satpy/etc/enhancements/fci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
enhancements:
fci_day_night_blend:
standard_name: fci_day_night_blend
operations:
- name: stretch
method: !!python/name:satpy.enhancements.stretch
kwargs:
stretch: crude
min_stretch: [ 0,0,0 ]
max_stretch: [ 1,1,1 ]

night_ir105:
standard_name: night_ir105
operations:
- name: colorize
method: !!python/name:satpy.enhancements.colorize
kwargs:
palettes:
- { colors: greys, min_value: 190, max_value: 295 }

fire_temperature_fci:
standard_name: fire_temperature_fci
operations:
- name: stretch
method: !!python/name:satpy.enhancements.stretch
kwargs:
stretch: crude
min_stretch: [273.15, 0.0, 0.0]
max_stretch: [333.15, 100.0, 75.0]
- name: gamma
method: !!python/name:satpy.enhancements.gamma
kwargs:
gamma: [0.4, 1, 1]

fire_temperature_fci_38refl:
standard_name: fire_temperature_fci_38refl
operations:
- name: stretch
method: !!python/name:satpy.enhancements.stretch
kwargs:
stretch: crude
min_stretch: [0, 0.0, 0.0]
max_stretch: [50, 100.0, 75.0]
- name: gamma
method: !!python/name:satpy.enhancements.gamma
kwargs:
gamma: [1, 1, 1]

fire_temperature_fci_rad:
standard_name: fire_temperature_fci_rad
operations:
# note: the stretch parameters have been converted to wavelength units
# compared to e.g. the VIIRS recipe
- name: stretch
method: !!python/name:satpy.enhancements.stretch
kwargs:
stretch: crude
min_stretch: [0, 0, 0]
max_stretch: [5.1, 17.7, 22.0]
- name: gamma
method: !!python/name:satpy.enhancements.gamma
kwargs: {gamma: [1.0, 1.0, 1.0]}
16 changes: 16 additions & 0 deletions satpy/etc/enhancements/generic.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -929,6 +929,7 @@ enhancements:
[252, 254, 254], [253, 254, 254], [253, 254, 254], [
253, 254, 254], [253, 254, 254],
[254, 254, 254], [254, 254, 254], [254, 254, 254], [254, 254, 254], [255, 255, 255]]

night_microphysics_default:
standard_name: night_microphysics
operations:
Expand All @@ -938,6 +939,21 @@ enhancements:
stretch: crude
min_stretch: [-4, 0, 243]
max_stretch: [2, 10, 293]

24h_microphysics_default:
standard_name: 24h_microphysics
operations:
- name: stretch
method: !!python/name:satpy.enhancements.stretch
kwargs:
stretch: crude
min_stretch: [-4, 0, 248]
max_stretch: [2, 6, 303]
- name: gamma
method: !!python/name:satpy.enhancements.gamma
kwargs:
gamma: [ 1, 1.2, 1 ]

ir_overview_default:
standard_name: ir_overview
operations:
Expand Down

0 comments on commit 23af5d4

Please sign in to comment.