def test_modis(): import sys import os sys.path.insert(0, '/data/store01/data_dirs/students/ucfafyi/Multiply/Atmo_cor') from modis_l1b_reader import MODIS_L1b_reader from datetime import datetime modis_l1b = MODIS_L1b_reader("/data/selene/ucfajlg/Ujia/MODIS_L1b/GRIDDED/", "h17v05",2017) obs_time = datetime(2017, 9, 4, 11, 25) tile = "h17v05" a = modis_l1b.granules[obs_time] scales = a.scale bands = [a.b1, a.b2, a.b3, a.b4, a.b5, a.b6, a.b7] scales = a.scale sun_angles = [a.saa, a.sza] view_angles = [a.vaa] * 6 + [a.vza] * 6 sza = gdal.Open(a.sza).ReadAsArray()/100. cos_sza = np.cos(np.deg2rad(sza)) toa_dir = './MODIS/'+ obs_time.strftime('%Y_%m_%d') if not os.path.exists(toa_dir): os.mkdir(toa_dir) for i in range(7): g = gdal.Open(bands[i]) array = g.ReadAsArray().astype(float) * scales[i] / cos_sza driver = gdal.GetDriverByName('GTiff') band_name = '/MODIS_' + tile + obs_time.strftime('_%Y%m%d_%H%M_') + 'band%d.tif'%(i+1) ds = driver.Create(toa_dir + band_name, 2400, 2400, 1, gdal.GDT_Float32, options=["TILED=YES", "COMPRESS=DEFLATE"]) geotransform = g.GetGeoTransform() projection = g.GetProjection() ds.SetProjection(projection) ds.SetGeoTransform(geotransform) ds.GetRasterBand(1).WriteArray(array) ds.FlushCache() ds = None toa_bands = [toa_dir + '/MODIS_' + tile + obs_time.strftime('_%Y%m%d_%H%M_') + 'band%d.tif'%i for i in [3,4,1,2,6,7]] cloud_mask = np.zeros((2400, 2400)).astype(bool) scale = 1 off = 0 sensor_sat = 'TERRA', 'MODIS' band_index = [2, 3,0,1,5,6] aot = toa_dir + '/aot.tif' tcwv = toa_dir + '/tcwv.tif' tco3 = toa_dir + '/tco3.tif' aot_unc = toa_dir + '/aot_unc.tif' tcwv_unc = toa_dir + '/tcwv_unc.tif' tco3_unc = toa_dir + '/tco3_unc.tif' emus_dir = '~/DATA/Multiply/emus/old_emus/' rgb = [toa_bands[2], toa_bands[1], toa_bands[0]] atmo = atmospheric_correction(sensor_sat, toa_bands, band_index,view_angles,sun_angles, aot = aot, cloud_mask = cloud_mask, ref_scale = scale, ref_off = off,\ tcwv = tcwv, tco3 = tco3, aot_unc = aot_unc, tcwv_unc = tcwv_unc, tco3_unc = tco3_unc, rgb = rgb, emus_dir =emus_dir,block_size=3000) ret = atmo._doing_correction() return ret, atmo
def test_modis(): import sys import os sys.path.insert(0, '/data/store01/data_dirs/students/ucfafyi/Multiply/Atmo_cor') from modis_l1b_reader import MODIS_L1b_reader from datetime import datetime modis_l1b = MODIS_L1b_reader("/data/selene/ucfajlg/Ujia/MODIS_L1b/GRIDDED/", "h17v05",2017) obs_time = datetime(2017, 9, 4, 11, 25) tile = "h17v05" a = modis_l1b.granules[obs_time] scales = a.scale bands = [a.b1, a.b2, a.b3, a.b4, a.b5, a.b6, a.b7] scales = a.scale sun_angles = [a.saa, a.sza] view_angles = [a.vaa] * 6 + [a.vza] * 6 sza = gdal.Open(a.sza).ReadAsArray()/100. cos_sza = np.cos(np.deg2rad(sza)) toa_dir = './MODIS/'+ obs_time.strftime('%Y_%m_%d') if not os.path.exists(toa_dir): os.mkdir(toa_dir) for i in range(7): g = gdal.Open(bands[i]) array = g.ReadAsArray().astype(float) * scales[i] / cos_sza driver = gdal.GetDriverByName('GTiff') band_name = '/MODIS_' + tile + obs_time.strftime('_%Y%m%d_%H%M_') + 'band%d.tif'%(i+1) if os.path.exists(toa_dir + band_name): os.remove(toa_dir + band_name) ds = driver.Create(toa_dir + band_name, 2400, 2400, 1, gdal.GDT_Float32, options=["TILED=YES", "COMPRESS=DEFLATE"]) geotransform = g.GetGeoTransform() projection = g.GetProjection() ds.SetProjection(projection) ds.SetGeoTransform(geotransform) ds.GetRasterBand(1).WriteArray(array) ds.FlushCache() ds = None toa_bands = [toa_dir + '/MODIS_' + tile + obs_time.strftime('_%Y%m%d_%H%M_') + 'band%d.tif'%i for i in [3,4,1,2,6,7]] cloud_mask = np.zeros((2400, 2400)).astype(bool) scale = 1 off = 0 band_wv = [469, 555, 645, 859, 1640, 2130] gamma = 10. sensor_sat = 'TERRA', 'MODIS' band_index = [2, 3,0,1,5,6] emus_dir = '/data/store01/data_dirs/students/ucfafyi/Multiply/emus/old_emus/' aero = solve_aerosol(sensor_sat,toa_bands,band_wv, band_index,view_angles,sun_angles,obs_time,cloud_mask,gamma=gamma, emus_dir =emus_dir, ref_scale = scale, ref_off = off, aero_res = 3000) aero._solving() return aero
def atmospheric_correction(self, ): self.logger.propagate = False self.modis_sensor = 'TERRA' self.logger.info('Loading emulators.') self._load_xa_xb_xc_emus() self.logger.info('Finding MODIS files.') modis_l1b = MODIS_L1b_reader(self.mod_l1b_dir, "h%02dv%02d" % (self.h, self.v), self.year) self.modis_files = [(i, modis_l1b.granules[i]) for i in modis_l1b.granules.keys() if i.date() == self.date.date()] self.logger.info('%d MODIS file(s) is(are) found for doy %04d-%03d.' % (len(self.modis_files), self.year, self.doy)) for timestamp, modis_file in self.modis_files: self._doing_one_file(modis_file, timestamp)
def getting_atmo_paras(self, ): self.modis_logger = logging.getLogger('MODIS Atmospheric Correction') self.modis_logger.setLevel(logging.INFO) if not self.modis_logger.handlers: ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s') ch.setFormatter(formatter) self.modis_logger.addHandler(ch) self.modis_logger.propagate = False self.modis_logger.info('Start to retrieve atmospheric parameters.') modis_l1b = MODIS_L1b_reader(self.mod_l1b_dir, "h%02dv%02d" % (self.h, self.v), self.year) self.modis_files = [(i, modis_l1b.granules[i]) for i in modis_l1b.granules.keys() if i.date() == self.date.date()] self.modis_logger.info( '%d MODIS file(s) is(are) found for doy %04d-%03d.' % (len(self.modis_files), self.year, self.doy)) for timestamp, modis_file in self.modis_files: self._doing_one_file(modis_file, timestamp)