@@ -702,42 +702,52 @@ def plot_panel(ax, title, array, colormap, norm, levels, ticks, contours,
702702def _add_stats (modelArray , refArray , diffArray , Lats , axes ):
703703 """ compute the means, std devs. and Pearson correlation """
704704 weights = np .cos (np .deg2rad (Lats ))
705- modelMean = np .average (modelArray , weights = weights )
705+
706+ model_weights = weights
707+ model_mask = None
708+ if isinstance (modelArray , np .ma .MaskedArray ):
709+ # make sure we're using the MPAS land mask for all 3 sets of stats
710+ model_mask = modelArray .mask
711+ model_weights = np .ma .array (weights , mask = model_mask )
712+
713+ modelMean = np .average (modelArray , weights = model_weights )
706714
707715 _add_stats_text (
708716 names = ['Min' , 'Mean' , 'Max' ],
709717 values = [np .amin (modelArray ), modelMean , np .amax (modelArray )],
710718 ax = axes [0 ], loc = 'upper' )
711719
712720 if refArray is not None :
721+ ref_weights = weights
722+ ref_mask = None
713723 if isinstance (modelArray , np .ma .MaskedArray ):
714724 # make sure we're using the MPAS land mask for all 3 sets of stats
715- mask = modelArray .mask
716725 if isinstance (refArray , np .ma .MaskedArray ):
717726 # mask invalid where either model or ref array is invalid
718- mask = np .logical_or (mask , refArray .mask )
719- refArray = np .ma .array (refArray , mask = mask )
727+ ref_mask = np .logical_or (model_mask , refArray .mask )
728+ ref_weights = np .ma .array (weights , mask = ref_mask )
729+ refArray = np .ma .array (refArray , mask = ref_mask )
720730 modelAnom = modelArray - modelMean
721- modelVar = np .average (modelAnom ** 2 , weights = weights )
722- refMean = np .average (refArray , weights = weights )
731+ modelVar = np .average (modelAnom ** 2 , weights = ref_weights )
732+ refMean = np .average (refArray , weights = ref_weights )
723733 refAnom = refArray - refMean
724- refVar = np .average (refAnom ** 2 , weights = weights )
734+ refVar = np .average (refAnom ** 2 , weights = ref_weights )
725735
726736 _add_stats_text (
727737 names = ['Min' , 'Mean' , 'Max' ],
728738 values = [np .amin (refArray ), refMean , np .amax (refArray )],
729739 ax = axes [1 ], loc = 'upper' )
730740
731- diffMean = np .average (diffArray , weights = weights )
732- diffVar = np .average ((diffArray - diffMean )** 2 , weights = weights )
741+ diffMean = np .average (diffArray , weights = ref_weights )
742+ diffVar = np .average ((diffArray - diffMean )** 2 , weights = ref_weights )
733743 diffRMSE = np .sqrt (diffVar )
734744
735745 _add_stats_text (
736746 names = ['Min' , 'Mean' , 'Max' ],
737747 values = [np .amin (diffArray ), diffMean , np .amax (diffArray )],
738748 ax = axes [2 ], loc = 'upper' )
739749
740- covar = np .average (modelAnom * refAnom , weights = weights )
750+ covar = np .average (modelAnom * refAnom , weights = ref_weights )
741751
742752 corr = covar / np .sqrt (modelVar * refVar )
743753
0 commit comments