Skip to content

Commit eb5cfe8

Browse files
committed
Further modularised the level4
1 parent cd3b38e commit eb5cfe8

File tree

3 files changed

+67
-71
lines changed

3 files changed

+67
-71
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from odc.stats._algebra import expr_eval
2+
import xarray as xr
3+
4+
5+
def lifeform(self, xx: xr.Dataset):
6+
7+
# 113 ----> 1 woody
8+
# 114 ----> 2 herbaceous
9+
lifeform_mask = expr_eval(
10+
"where(a==113, 1, a)",
11+
{"a": xx.woody_cover.data},
12+
name="mark_lifeform",
13+
dtype="uint8",
14+
)
15+
lifeform_mask = expr_eval(
16+
"where(a==114, 2, a)",
17+
{"a": lifeform_mask},
18+
name="mark_lifeform",
19+
dtype="uint8",
20+
)
21+
22+
return lifeform_mask
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import xarray as xr
2+
3+
from odc.stats._algebra import expr_eval
4+
from . import utils
5+
6+
WATER_FREQ_NODATA = -999
7+
8+
9+
def water_seasonality(self, xx: xr.Dataset):
10+
# >= 3 months ----> 1 Semi-permanent or permanent
11+
# < 3 months ----> 2 Temporary or seasonal
12+
13+
water_season_mask = expr_eval(
14+
"where((a>watseas_trh)&(a<=12), 100, a)",
15+
{"a": xx.water_frequency.data},
16+
name="mark_water_season",
17+
dtype="uint8",
18+
**{"watseas_trh": self.water_seasonality_threshold},
19+
)
20+
water_season_mask = expr_eval(
21+
"where((a<=watseas_trh)&(a<=12), 200, a)",
22+
{"a": water_season_mask},
23+
name="mark_water_season",
24+
dtype="uint8",
25+
**{"watseas_trh": self.water_seasonality_threshold},
26+
)
27+
water_season_mask = expr_eval(
28+
"where((a==watersea_nodata), 255, a)",
29+
{"a": water_season_mask},
30+
name="mark_water_season",
31+
dtype="uint8",
32+
**{
33+
"watseas_trh": self.water_seasonality_threshold,
34+
"watersea_nodata": WATER_FREQ_NODATA,
35+
},
36+
)
37+
mapping = {100: 1, 200: 2}
38+
water_season_mask = utils.apply_mapping(water_season_mask, mapping)
39+
40+
return water_season_mask

odc/stats/plugins/lc_level34.py

Lines changed: 5 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
import numpy as np
88
import xarray as xr
99

10-
from odc.stats._algebra import expr_eval
1110
from ._registry import StatsPluginInterface, register
1211

1312
from .l34_utils import (
1413
l4_water_persistence,
14+
lc_water_seasonality,
1515
l4_veg_cover,
1616
lc_level3,
1717
l4_cultivated,
@@ -20,12 +20,11 @@
2020
l4_surface,
2121
l4_bare_gradation,
2222
l4_water,
23-
utils,
23+
lc_lifeform,
2424
)
2525

2626

2727
NODATA = 255
28-
WATER_FREQ_NODATA = -999
2928

3029

3130
class StatsLccsLevel4(StatsPluginInterface):
@@ -66,74 +65,15 @@ def native_transform(self, xx):
6665
def fuser(self, xx):
6766
return xx
6867

69-
# @staticmethod
70-
# def apply_mapping(data, class_mapping):
71-
# for o_val, n_val in class_mapping.items():
72-
# data = xr.where(data == o_val, n_val, data)
73-
# return data
74-
75-
def define_life_form(self, xx: xr.Dataset):
76-
77-
# 113 ----> 1 woody
78-
# 114 ----> 2 herbaceous
79-
lifeform_mask = expr_eval(
80-
"where(a==113, 1, a)",
81-
{"a": xx.woody_cover.data},
82-
name="mark_lifeform",
83-
dtype="uint8",
84-
)
85-
lifeform_mask = expr_eval(
86-
"where(a==114, 2, a)",
87-
{"a": lifeform_mask},
88-
name="mark_lifeform",
89-
dtype="uint8",
90-
)
91-
92-
return lifeform_mask
93-
94-
def define_water_seasonality(self, xx: xr.Dataset):
95-
# >= 3 months ----> 1 Semi-permanent or permanent
96-
# < 3 months ----> 2 Temporary or seasonal
97-
98-
water_season_mask = expr_eval(
99-
"where((a>watseas_trh)&(a<=12), 100, a)",
100-
{"a": xx.water_frequency.data},
101-
name="mark_water_season",
102-
dtype="uint8",
103-
**{"watseas_trh": self.water_seasonality_threshold},
104-
)
105-
water_season_mask = expr_eval(
106-
"where((a<=watseas_trh)&(a<=12), 200, a)",
107-
{"a": water_season_mask},
108-
name="mark_water_season",
109-
dtype="uint8",
110-
**{"watseas_trh": self.water_seasonality_threshold},
111-
)
112-
water_season_mask = expr_eval(
113-
"where((a==watersea_nodata), 255, a)",
114-
{"a": water_season_mask},
115-
name="mark_water_season",
116-
dtype="uint8",
117-
**{
118-
"watseas_trh": self.water_seasonality_threshold,
119-
"watersea_nodata": WATER_FREQ_NODATA,
120-
},
121-
)
122-
mapping = {100: 1, 200: 2}
123-
water_season_mask = utils.apply_mapping(water_season_mask, mapping)
124-
125-
return water_season_mask
126-
12768
def reduce(self, xx: xr.Dataset) -> xr.Dataset:
12869

12970
intertidal_mask, level3 = lc_level3.lc_level3(xx)
13071

13172
# Vegetation cover
13273
veg_cover = l4_veg_cover.canopyco_veg_con(xx, self.veg_threshold)
133-
# # Define mapping from current output to expected a3 output
134-
# veg_cover = utils.apply_mapping(veg_cover, self.veg_mapping)
74+
13575
# Define life form
136-
lifeform = self.define_life_form(xx)
76+
lifeform = lc_lifeform.lifeform(xx)
13777

13878
# Apply cultivated Level-4 classes (1-18)
13979
l4 = l4_cultivated.lc_l4_cultivated(
@@ -147,19 +87,13 @@ def reduce(self, xx: xr.Dataset) -> xr.Dataset:
14787
bare_gradation = l4_bare_gradation.bare_gradation(
14888
xx, self.bare_threshold, veg_cover
14989
)
150-
# # Apply bare gradation expected output classes
151-
# bare_gradation = utils.apply_mapping(bare_gradation, self.bs_mapping)
15290

15391
# Water persistence
15492
water_persistence = l4_water_persistence.water_persistence(
15593
xx, self.watper_threshold
15694
)
157-
# # Apply water persistence expcted classes
158-
# water_persistence = utils.apply_mapping(
159-
# water_persistence, self.waterper_wat_mapping
160-
# )
16195

162-
water_seasonality = self.define_water_seasonality(xx)
96+
water_seasonality = lc_water_seasonality.water_seasonality(xx)
16397

16498
l4 = l4_natural_aquatic.natural_auquatic_veg(
16599
l4, lifeform, veg_cover, water_seasonality

0 commit comments

Comments
 (0)