def process_one_scene(scene_files, out_path, use_iband_res=False, engine='h5netcdf', all_channels=False, pps_channels=False, orbit_n=0): """Make level 1c files in PPS-format.""" tic = time.time() scn_ = Scene(reader='viirs_sdr', filenames=scene_files) MY_MBAND = MBAND_DEFAULT MY_IBAND_I = IBAND_DEFAULT_I MY_IBAND_M = IBAND_DEFAULT_M if all_channels: MY_MBAND = MBANDS MY_IBAND_I = IBANDS MY_IBAND_M = MBANDS if pps_channels: MY_MBAND = MBAND_PPS MY_IBAND_I = IBAND_PPS_I MY_IBAND_M = IBAND_PPS_M if use_iband_res: scn_.load(MY_IBAND_I + ANGLE_NAMES + ['i_latitude', 'i_longitude'], resolution=371) scn_.load(MY_IBAND_M, resolution=742) scn_ = scn_.resample(resampler='native') else: scn_.load(MY_MBAND + ANGLE_NAMES + ['m_latitude', 'm_longitude'], resolution=742) # one ir channel irch = scn_['M15'] # Set header and band attributes set_header_and_band_attrs(scn_, orbit_n=orbit_n) # Rename longitude, latitude to lon, lat. rename_latitude_longitude(scn_) # Convert angles to PPS convert_angles(scn_, delete_azimuth=True) update_angle_attributes(scn_, irch) filename = compose_filename(scn_, out_path, instrument='viirs', band=irch) scn_.save_datasets(writer='cf', filename=filename, header_attrs=get_header_attrs(scn_, band=irch, sensor='viirs'), engine=engine, include_lonlats=False, flatten_attrs=True, encoding=get_encoding_viirs(scn_)) print("Saved file {:s} after {:3.1f} seconds".format( os.path.basename(filename), time.time() - tic)) return filename
def process_one_scene(scene_files, out_path, engine='h5netcdf', all_channels=False, pps_channels=False, orbit_n=0): """Make level 1c files in PPS-format.""" tic = time.time() scn_ = Scene(reader='modis_l1b', filenames=scene_files) MY_BANDNAMES = BANDNAMES_DEFAULT if all_channels: MY_BANDNAMES = BANDNAMES if pps_channels: MY_BANDNAMES = BANDNAMES_PPS scn_.load(MY_BANDNAMES + ['latitude', 'longitude'] + ANGLE_NAMES, resolution=1000) # one ir channel irch = scn_['31'] # Set header and band attributes set_header_and_band_attrs(scn_, orbit_n=orbit_n) # Rename longitude, latitude to lon, lat. rename_latitude_longitude(scn_) # Convert angles to PPS convert_angles(scn_, delete_azimuth=True) update_angle_attributes(scn_, irch) # Apply sunz correction apply_sunz_correction(scn_, REFL_BANDS) filename = compose_filename(scn_, out_path, instrument='modis', band=irch) scn_.save_datasets(writer='cf', filename=filename, header_attrs=get_header_attrs(scn_, band=irch, sensor='modis'), engine=engine, include_lonlats=False, flatten_attrs=True, encoding=get_encoding_modis(scn_)) print("Saved file {:s} after {:3.1f} seconds".format( os.path.basename(filename), time.time() - tic)) return filename
def process_one_scene(scene_files, out_path): """Make level 1c files in PPS-format.""" tic = time.time() scn_ = Scene(reader='vii_l1b_nc', filenames=scene_files) scn_.load(BANDNAMES + ANGLE_NAMES + ['lat_pixels', 'lon_pixels']) # Transpose data to get scanlines as row dimension for key in BANDNAMES + ANGLE_NAMES + ['lat_pixels', 'lon_pixels']: if 'num_pixels' in scn_[key].dims: # satpy <= 0 .26.0 scn_[key] = scn_[key].transpose('num_lines', 'num_pixels') elif scn_[key].dims[0] == 'x': # first dim should be y scn_[key] = scn_[key].transpose('y', 'x') # one ir channel irch = scn_['vii_10690'] # Set header and band attributes set_header_and_band_attrs(scn_) # Rename longitude, latitude to lon, lat. rename_latitude_longitude(scn_) # Adjust lons to valid range: adjust_lons_to_valid_range(scn_) # Convert angles to PPS convert_angles(scn_, delete_azimuth=True) update_angle_attributes(scn_, irch) # Apply sunz correction # apply_sunz_correction(scn_, REFL_BANDS) filename = compose_filename(scn_, out_path, instrument='metimage', band=irch) scn_.save_datasets(writer='cf', filename=filename, header_attrs=get_header_attrs(scn_, band=irch, sensor='metimage'), engine='h5netcdf', include_lonlats=False, flatten_attrs=True, encoding=get_encoding_metimage(scn_)) print("Saved file {:s} after {:3.1f} seconds".format( os.path.basename(filename), time.time()-tic))
def process_one_scene(scene_files, out_path, engine='h5netcdf', orbit_n=0): """Make level 1c files in PPS-format.""" tic = time.time() if 'AVHR_xxx' in scene_files[0]: avhrr_reader = 'avhrr_l1b_eps' angles = ANGLE_NAMES_EPS else: avhrr_reader = 'avhrr_l1b_aapp' angles = ANGLE_NAMES_AAPP scn_ = Scene( reader=avhrr_reader, filenames=scene_files) scn_.load(BANDNAMES + ['latitude', 'longitude'] + angles) # one ir channel irch = scn_['4'] # Check if we have old hrpt format with data only every 20th line check_broken_data(scn_) # Set header and band attributes set_header_and_band_attrs(scn_, orbit_n=orbit_n) # Rename longitude, latitude to lon, lat. rename_latitude_longitude(scn_) # Convert angles to PPS convert_angles(scn_, delete_azimuth=True) update_angle_attributes(scn_, irch) # Apply sunz correction apply_sunz_correction(scn_, REFL_BANDS) filename = compose_filename(scn_, out_path, instrument='avhrr', band=irch) scn_.save_datasets(writer='cf', filename=filename, header_attrs=get_header_attrs(scn_, band=irch, sensor='avhrr'), engine=engine, include_lonlats=False, flatten_attrs=True, encoding=get_encoding_avhrr(scn_)) print("Saved file {:s} after {:3.1f} seconds".format( os.path.basename(filename), time.time()-tic)) return filename
def process_one_scene(scene_files, out_path, engine='h5netcdf', all_channels=False, pps_channels=False): """Make level 1c files in PPS-format.""" tic = time.time() scn_ = Scene( reader='slstr_l1b', filenames=scene_files) MY_BANDNAMES = BANDNAMES_DEFAULT if all_channels: MY_BANDNAMES = BANDNAMES if pps_channels: MY_BANDNAMES = BANDNAMES_PPS scn_.load(MY_BANDNAMES + ['latitude', 'longitude'] + ANGLE_NAMES) # Everything should be on the same grid, to be saved as ppsleve1c scn_ = scn_.resample(resampler="native") # one ir channel irch = scn_['S8'] # Set header and band attributes set_header_and_band_attrs(scn_) # Rename longitude, latitude to lon, lat. rename_latitude_longitude(scn_) # Convert angles to PPS convert_angles(scn_, delete_azimuth=True) update_angle_attributes(scn_, irch) filename = compose_filename(scn_, out_path, instrument='slstr', band=irch) scn_.save_datasets(writer='cf', filename=filename, header_attrs=get_header_attrs(scn_, band=irch, sensor='slstr'), engine=engine, include_lonlats=False, flatten_attrs=True, encoding=get_encoding_slstr(scn_)) print("Saved file {:s} after {:3.1f} seconds".format( os.path.basename(filename), time.time()-tic))
def process_one_scene(scene_files, out_path, engine='h5netcdf'): """Make level 1c files in PPS-format.""" tic = time.time() scn_ = Scene(reader='mersi2_l1b', filenames=scene_files) scn_.load(BANDNAMES + ['latitude', 'longitude'] + ANGLE_NAMES, resolution=1000) # Remove bad data at first and last column remove_broken_data(scn_) # one ir channel irch = scn_['24'] # Set header and band attributes set_header_and_band_attrs(scn_) # Rename longitude, latitude to lon, lat. rename_latitude_longitude(scn_) # Convert angles to PPS convert_angles(scn_, delete_azimuth=True) update_angle_attributes(scn_, irch) for angle in ['sunzenith', 'satzenith', 'azimuthdiff']: scn_[angle].attrs['file_key'] = ANGLE_ATTRIBUTES['mersi2_file_key'][ angle] filename = compose_filename(scn_, out_path, instrument='mersi2', band=irch) scn_.save_datasets(writer='cf', filename=filename, header_attrs=get_header_attrs(scn_, band=irch, sensor='mersi-2'), engine=engine, include_lonlats=False, flatten_attrs=True, encoding=get_encoding_mersi2(scn_)) print("Saved file {:s} after {:3.1f} seconds".format( os.path.basename(filename), time.time() - tic)) return filename
def process_one_file(eumgacfdr_file, out_path='.', reader_kwargs=None, start_line=None, end_line=None, engine='h5netcdf', remove_broken=True): """Make level 1c files in PPS-format.""" tic = time.time() scn_ = Scene(reader='avhrr_l1c_eum_gac_fdr_nc', filenames=[eumgacfdr_file]) scn_.load(BANDNAMES) scn_.load([ 'latitude', 'longitude', 'qual_flags', 'equator_crossing_time', 'equator_crossing_longitude', 'acq_time' ] + ANGLENAMES) # Only load these if we do not crop data if start_line is None and end_line is None: scn_.load(['overlap_free_end', 'overlap_free_start', 'midnight_line']) # Needs to be done before everything else to avoid problems with attributes. if remove_broken: logger.info("Setting low quality data (qual_flags) to nodata.") remove_broken_data(scn_) # Crop after all renaming of variables are done # Problems to rename if cropping is done first. set_exact_time_and_crop(scn_, start_line, end_line, time_key='acq_time') irch = scn_[ 'brightness_temperature_channel_4'] # Redefine, to get updated start/end_times # One ir channel irch = scn_['brightness_temperature_channel_4'] # Set header and band attributes set_header_and_band_attrs(scn_) # Rename longitude, latitude to lon, lat. rename_latitude_longitude(scn_) # Convert angles to PPS convert_angles(scn_) update_angle_attributes(scn_, irch) # Standard name etc # Handle gac specific datasets qual_flags and scanline_timestamps update_ancilliary_datasets(scn_) filename = compose_filename(scn_, out_path, instrument='avhrr', band=irch) encoding = get_encoding_gac(scn_) scn_.save_datasets( writer='cf', filename=filename, header_attrs=get_header_attrs(scn_, band=irch, sensor='avhrr'), engine=engine, flatten_attrs=True, include_lonlats=False, # Included anyway as they are datasets in scn_ pretty=True, encoding=encoding) logger.info("Saved file {:s} after {:3.1f} seconds".format( os.path.basename(filename), time.time() - tic)) return filename
def process_one_file(gac_file, out_path='.', reader_kwargs=None, engine='h5netcdf', orbit_n=99999): """Make level 1c files in PPS-format.""" tic = time.time() if reader_kwargs is None: reader_kwargs = {} if 'tle_dir' not in reader_kwargs: from pygac.configuration import get_config conf = get_config() tle_dir = conf.get('tle', 'tledir', raw=True) tle_name = conf.get('tle', 'tlename', raw=True) reader_kwargs['tle_dir'] = tle_dir reader_kwargs['tle_name'] = tle_name scn_ = Scene(reader='avhrr_l1b_gaclac', filenames=[gac_file], reader_kwargs=reader_kwargs) # Loading all at once sometimes fails with newer satpy, so start with BANDNAMES ... scn_.load(BANDNAMES) scn_.load([ 'latitude', 'longitude', 'qual_flags', 'sensor_zenith_angle', 'solar_zenith_angle', 'solar_azimuth_angle', 'sensor_azimuth_angle', 'sun_sensor_azimuth_difference_angle' ]) # one ir channel irch = scn_['4'] # Set header and band attributes set_header_and_band_attrs(scn_, orbit_n=orbit_n) # Rename longitude, latitude to lon, lat. rename_latitude_longitude(scn_) # Convert angles to PPS convert_angles(scn_) update_angle_attributes(scn_, irch) # Handle gac specific datasets qual_flags and scanline_timestamps update_ancilliary_datasets(scn_) filename = compose_filename(scn_, out_path, instrument='avhrr', band=irch) encoding = get_encoding_gac(scn_) encoding['scanline_timestamps'].pop('units') scn_.save_datasets( writer='cf', filename=filename, header_attrs=get_header_attrs(scn_, band=irch, sensor='avhrr'), engine=engine, flatten_attrs=True, include_lonlats=False, # Included anyway as they are datasets in scn_ pretty=True, encoding=encoding) print("Saved file {:s} after {:3.1f} seconds".format( os.path.basename(filename), time.time() - tic)) return filename