Commit c3e5c17a authored by Klaus Zimmermann's avatar Klaus Zimmermann
Browse files

Fix handling of seasonal periods that straddle years (fixes #226)

parent 2572e947
...@@ -55,17 +55,29 @@ class Season(Period): ...@@ -55,17 +55,29 @@ class Season(Period):
] ]
def __init__(self, specifier): def __init__(self, specifier):
super().__init__("year", "sem") super().__init__("season_year", "sem")
self.specifier = specifier.upper() self.specifier = specifier.upper()
self.first_month_number = (self.YEAR * 2).find(self.specifier) + 1 self.first_month_number = (self.YEAR * 2).find(self.specifier) + 1
self.length = len(self.specifier) self.length = len(self.specifier)
self.last_month_number = self.first_month_number + self.length - 1 last_month_number = self.first_month_number + self.length - 1
self.constraint = iris.Constraint( if last_month_number > 12:
time=lambda cell: self.first_month_number last_month_number %= 12
<= cell.point.month
<= self.last_month_number def selector(cell):
m = cell.point.month
return (self.first_month_number <= m <= 12) | (
1 <= m <= last_month_number
) )
else:
def selector(cell):
m = cell.point.month
return self.first_month_number <= m <= last_month_number
self.constraint = iris.Constraint(time=selector)
self.last_month_number = last_month_number
def long_label(self): def long_label(self):
first_month = self.MONTHS[self.first_month_number - 1] first_month = self.MONTHS[self.first_month_number - 1]
last_month = self.MONTHS[self.last_month_number - 1] last_month = self.MONTHS[self.last_month_number - 1]
...@@ -73,7 +85,7 @@ class Season(Period): ...@@ -73,7 +85,7 @@ class Season(Period):
return long_label return long_label
def add_coord_categorisation(self, cube): def add_coord_categorisation(self, cube):
iris.coord_categorisation.add_year( iris.coord_categorisation.add_season_year(
cube, self.input_coord, name=self.output_coord cube, self.input_coord, name=self.output_coord
) )
return self.output_coord return self.output_coord
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment