예제 #1
0
 def processVariable( self, request: TaskRequest, node: OpNode, variable: EDASArray ) -> EDASArray:
     variable.persist()
     axisIndex = variable.getAxisIndex( node.axes, 0, 0 )
     dim = variable.xr.dims[axisIndex]
     window_size = node.getParm("wsize", variable.xr.shape[axisIndex]//8 )
     lowpass_args = { dim:int(window_size), "center":True, "min_periods": 1 }
     lowpass = variable.xr.rolling(**lowpass_args).mean()
     return EDASArray( variable.name, variable.domId, lowpass )
예제 #2
0
 def processVariable( self, request: TaskRequest, node: OpNode, variable: EDASArray ) -> EDASArray:
     variable.persist()
     parms = self.getParameters( node, [ Param("lat"), Param("lon")])
     aIndex = variable.xr.get_axis_num('t')
     center: xa.DataArray = variable.selectPoint( float(parms["lon"]), float(parms["lat"]) ).xr
     cmean, data_mean = center.mean(axis=aIndex), variable.xr.mean(axis=aIndex)
     cstd, data_std = center.std(axis=aIndex), variable.xr.std(axis=aIndex)
     cov = np.sum((variable.xr - data_mean) * (center - cmean), axis=aIndex) / variable.xr.shape[aIndex]
     cor = cov / (cstd * data_std)
     return EDASArray( variable.name, variable.domId, cor )
예제 #3
0
 def processVariable( self, request: TaskRequest, node: OpNode, variable: EDASArray ) -> EDASArray:
     data = variable.persist()
     norm = bool(node.getParm("norm", False))
     grouping = node.getParm("groupby", 't.month')
     climatology = data.groupby(grouping).mean('t')
     anomalies = data.groupby(grouping) - climatology
     if norm:
         anomalies = anomalies.groupby(grouping) / data.groupby(grouping).std('t')
     return variable.updateXa( anomalies, "decycle" )
예제 #4
0
 def processVariable( self, request: TaskRequest, node: OpNode, variable: EDASArray ) -> EDASArray:
     data = variable.persist()
     axisIndex = variable.getAxisIndex( node.axes, 0, 0 )
     dim = data.dims[axisIndex]
     window_size = node.getParm("wsize", data.shape[axisIndex] // 8)
     detrend_args = {dim: int(window_size), "center": True, "min_periods": 1}
     trend = data.rolling(**detrend_args).mean()
     detrend: EDASArray = variable - variable.updateXa(trend, "trend")
     return detrend
예제 #5
0
 def processVariable(self, request: TaskRequest, node: OpNode,
                     variable: EDASArray) -> EDASArray:
     variable.persist()
     return variable - variable.ave(node.axes)
예제 #6
0
 def setResult(self, key: str, value: EDASArray):
     self.logger.info(f"Computed value for WorldClim field bio-{key}")
     value.persist()
     self.results[key] = value
예제 #7
0
 def processVariables(self, request: TaskRequest, node: OpNode,
                      variable: EDASArray) -> List[EDASArray]:
     variable.persist()
     freq = node.getParm("freq", 'month')
     operation = str(node.getParm("op", 'mean')).lower()
     return variable.timeResample(freq, operation)
예제 #8
0
 def processVariables(self, request: TaskRequest, node: OpNode,
                      variable: EDASArray) -> List[EDASArray]:
     variable.persist()
     period = node.getParm("period", 'month')
     operation = str(node.getParm("op", 'mean')).lower()
     return variable.timeAgg(period, operation)
예제 #9
0
 def processVariable(self, request: TaskRequest, node: OpNode,
                     variable: EDASArray) -> EDASArray:
     variable.persist()
     centered_result = variable - variable.ave(node.axes)
     return centered_result / centered_result.std(node.axes)