@@ -702,42 +702,52 @@ def plot_panel(ax, title, array, colormap, norm, levels, ticks, contours,
702
702
def _add_stats (modelArray , refArray , diffArray , Lats , axes ):
703
703
""" compute the means, std devs. and Pearson correlation """
704
704
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 )
706
714
707
715
_add_stats_text (
708
716
names = ['Min' , 'Mean' , 'Max' ],
709
717
values = [np .amin (modelArray ), modelMean , np .amax (modelArray )],
710
718
ax = axes [0 ], loc = 'upper' )
711
719
712
720
if refArray is not None :
721
+ ref_weights = weights
722
+ ref_mask = None
713
723
if isinstance (modelArray , np .ma .MaskedArray ):
714
724
# make sure we're using the MPAS land mask for all 3 sets of stats
715
- mask = modelArray .mask
716
725
if isinstance (refArray , np .ma .MaskedArray ):
717
726
# 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 )
720
730
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 )
723
733
refAnom = refArray - refMean
724
- refVar = np .average (refAnom ** 2 , weights = weights )
734
+ refVar = np .average (refAnom ** 2 , weights = ref_weights )
725
735
726
736
_add_stats_text (
727
737
names = ['Min' , 'Mean' , 'Max' ],
728
738
values = [np .amin (refArray ), refMean , np .amax (refArray )],
729
739
ax = axes [1 ], loc = 'upper' )
730
740
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 )
733
743
diffRMSE = np .sqrt (diffVar )
734
744
735
745
_add_stats_text (
736
746
names = ['Min' , 'Mean' , 'Max' ],
737
747
values = [np .amin (diffArray ), diffMean , np .amax (diffArray )],
738
748
ax = axes [2 ], loc = 'upper' )
739
749
740
- covar = np .average (modelAnom * refAnom , weights = weights )
750
+ covar = np .average (modelAnom * refAnom , weights = ref_weights )
741
751
742
752
corr = covar / np .sqrt (modelVar * refVar )
743
753
0 commit comments