def _get_valid_output_index(source_geo_def, target_geo_def, target_lons, target_lats, reduce_data, radius_of_influence): """Find indices of reduced output data""" valid_output_index = np.ones(target_lons.size, dtype=np.bool) if reduce_data: if isinstance(source_geo_def, (geometry.GridDefinition, geometry.AreaDefinition)) and \ isinstance(target_geo_def, geometry.CoordinateDefinition): #Resampling from grid to swath lonlat_boundary = source_geo_def.get_boundary_lonlats() valid_output_index = \ data_reduce.get_valid_index_from_lonlat_boundaries( lonlat_boundary[0], lonlat_boundary[1], target_lons, target_lats, radius_of_influence) valid_output_index = valid_output_index.astype(np.bool) #Remove illegal values valid_out = ((target_lons >= -180) & (target_lons <= 180) & (target_lats <= 90) & (target_lats >= -90)) #Combine reduced and legal values valid_output_index = (valid_output_index & valid_out) return valid_output_index
def _get_valid_input_index(source_geo_def, target_geo_def, reduce_data, radius_of_influence, nprocs=1): """Find indices of reduced inputput data""" source_lons, source_lats = source_geo_def.get_lonlats(nprocs=nprocs) source_lons = source_lons.ravel() source_lats = source_lats.ravel() if source_lons.size == 0 or source_lats.size == 0: raise ValueError('Cannot resample empty data set') elif source_lons.size != source_lats.size or \ source_lons.shape != source_lats.shape: raise ValueError('Mismatch between lons and lats') #Remove illegal values valid_data = ((source_lons >= -180) & (source_lons <= 180) & (source_lats <= 90) & (source_lats >= -90)) valid_input_index = np.ones(source_geo_def.size, dtype=np.bool) if reduce_data: #Reduce dataset if (isinstance(source_geo_def, geometry.CoordinateDefinition) and isinstance(target_geo_def, (geometry.GridDefinition, geometry.AreaDefinition))) or \ (isinstance(source_geo_def, (geometry.GridDefinition, geometry.AreaDefinition)) and isinstance(target_geo_def, (geometry.GridDefinition, geometry.AreaDefinition))): #Resampling from swath to grid or from grid to grid lonlat_boundary = target_geo_def.get_boundary_lonlats() valid_input_index = \ data_reduce.get_valid_index_from_lonlat_boundaries( lonlat_boundary[0], lonlat_boundary[1], source_lons, source_lats, radius_of_influence) #Combine reduced and legal values valid_input_index = (valid_data & valid_input_index) if(isinstance(valid_input_index, np.ma.core.MaskedArray)): #Make sure valid_input_index is not a masked array valid_input_index = valid_input_index.filled(False) return valid_input_index, source_lons, source_lats