From c5f935011d2812d23a02a248a70b29922f090145 Mon Sep 17 00:00:00 2001 From: Martin Raspaud Date: Wed, 14 Oct 2015 12:31:19 +0200 Subject: [PATCH 1/3] Fix geolocation reading for multiple-file processing (hdfeos) Signed-off-by: Martin Raspaud --- mpop/satin/hdfeos_l1b.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/mpop/satin/hdfeos_l1b.py b/mpop/satin/hdfeos_l1b.py index e2e8e6b1..599db47f 100644 --- a/mpop/satin/hdfeos_l1b.py +++ b/mpop/satin/hdfeos_l1b.py @@ -115,8 +115,7 @@ def load(self, satscene, filename=None, *args, **kwargs): scenes.append(newscn) entire_scene = assemble_segments(sorted(scenes, key=lambda x: x.time_slot)) - for band in entire_scene.loaded_channels(): - satscene[band.name] = entire_scene[band.name] + satscene.channels = entire_scene.channels satscene.area = entire_scene.area else: self.load_dataset(satscene, *args, **kwargs) @@ -243,7 +242,7 @@ def load_dataset(self, satscene, filename=None, *args, **kwargs): # return for band_name in loaded_bands: - lon, lat = self.get_lonlat(satscene[band_name].resolution, cores) + lon, lat = self.get_lonlat(satscene[band_name].resolution, satscene.time_slot, cores) area = geometry.SwathDefinition(lons=lon, lats=lat) satscene[band_name].area = area @@ -289,11 +288,11 @@ def load_dataset(self, satscene, filename=None, *args, **kwargs): + str(band_uid)) satscene[band_name].area_id = satscene[band_name].area.area_id - def get_lonlat(self, resolution, cores=1): + def get_lonlat(self, resolution, time_slot, cores=1): """Read lat and lon. """ - if resolution in self.areas: - return self.areas[resolution] + if (resolution, time_slot) in self.areas: + return self.areas[resolution, time_slot] logger.debug("generating lon, lat at %d", resolution) if self.geofile is not None: coarse_resolution = 1000 @@ -330,7 +329,7 @@ def get_lonlat(self, resolution, cores=1): if resolution == 250: lon, lat = modis1kmto250m(lon, lat, cores) - self.areas[resolution] = lon, lat + self.areas[resolution, time_slot] = lon, lat return lon, lat # These have to be interpolated... From 54decab47d1c1824c4a407741bcab0d6e7f17e43 Mon Sep 17 00:00:00 2001 From: Martin Raspaud Date: Wed, 14 Oct 2015 12:36:37 +0200 Subject: [PATCH 2/3] hdfeos: orbit number is now an int. Signed-off-by: Martin Raspaud --- mpop/satin/hdfeos_l1b.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mpop/satin/hdfeos_l1b.py b/mpop/satin/hdfeos_l1b.py index 599db47f..73aaf815 100644 --- a/mpop/satin/hdfeos_l1b.py +++ b/mpop/satin/hdfeos_l1b.py @@ -117,6 +117,7 @@ def load(self, satscene, filename=None, *args, **kwargs): entire_scene = assemble_segments(sorted(scenes, key=lambda x: x.time_slot)) satscene.channels = entire_scene.channels satscene.area = entire_scene.area + satscene.orbit = int(entire_scene.orbit) else: self.load_dataset(satscene, *args, **kwargs) @@ -234,7 +235,7 @@ def load_dataset(self, satscene, filename=None, *args, **kwargs): if not satscene.orbit: mda = self.data.attributes()["CoreMetadata.0"] orbit_idx = mda.index("ORBITNUMBER") - satscene.orbit = mda[orbit_idx + 111:orbit_idx + 116] + satscene.orbit = int(mda[orbit_idx + 111:orbit_idx + 116]) # Get the geolocation # if resolution != 1000: From 8f99117dfa6575703d56413c3d7c8acec1202266 Mon Sep 17 00:00:00 2001 From: Martin Raspaud Date: Wed, 14 Oct 2015 13:44:08 +0200 Subject: [PATCH 3/3] Add orbit number info in the scene metadata upon loading. (hdfeos) Signed-off-by: Martin Raspaud --- mpop/satin/hdfeos_l1b.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/mpop/satin/hdfeos_l1b.py b/mpop/satin/hdfeos_l1b.py index 73aaf815..cf77183f 100644 --- a/mpop/satin/hdfeos_l1b.py +++ b/mpop/satin/hdfeos_l1b.py @@ -118,6 +118,7 @@ def load(self, satscene, filename=None, *args, **kwargs): satscene.channels = entire_scene.channels satscene.area = entire_scene.area satscene.orbit = int(entire_scene.orbit) + satscene.info["orbit_number"] = int(entire_scene.orbit) else: self.load_dataset(satscene, *args, **kwargs) @@ -556,7 +557,7 @@ def load_generic(satscene, filename, resolution, cores): if not satscene.orbit: mda = data.attributes()["CoreMetadata.0"] orbit_idx = mda.index("ORBITNUMBER") - satscene.orbit = mda[orbit_idx + 111:orbit_idx + 116] + satscene.orbit = int(mda[orbit_idx + 111:orbit_idx + 116]) # Get the geolocation # if resolution != 1000: @@ -1010,3 +1011,28 @@ def vinc_pt(f__, a__, phi1, lembda1, alpha12, s__): LAT_LON_CASES = { "modis": get_lat_lon_modis } + + +if __name__ == "__main__": + filenames = [u'/data/prod/satellit/modis/lvl1/thin_MYD021KM.A2015287.0255.005.2015287051016.NRT.hdf', + u'/data/prod/satellit/modis/lvl1/thin_MYD021KM.A2015287.0300.005.2015287050819.NRT.hdf', + u'/data/prod/satellit/modis/lvl1/thin_MYD021KM.A2015287.0305.005.2015287050825.NRT.hdf'] + + + from mpop.utils import debug_on + debug_on() + from mpop.satellites import PolarFactory + from datetime import datetime + time_slot = datetime(2015, 10, 14, 2, 55) + orbit = "18181" + global_data = PolarFactory.create_scene("EARSEOS-Aqua", "", "modis", time_slot, orbit) + + global_data.load([3.75, 0.555, 0.551, 7.3, 1.63, 10.8, 0.488, 12.0, 0.85, 0.469, 0.748, 0.443, 0.645, 6.7, 0.635, + 8.7, 0.412], filename=filenames) + + + #global_data.channels_to_load = set(['31']) + #reader = ModisReader(global_data) + #reader.load(global_data, filename=filenames) + print global_data + #global_data[10.8].show() \ No newline at end of file