Skip to content
Snippets Groups Projects
Commit ca0a32c1 authored by Greg Quinn's avatar Greg Quinn
Browse files

Add multi-granule support

parent 4bbed994
No related branches found
Tags v1-master
No related merge requests found
...@@ -5,16 +5,17 @@ import pyhdf.SD ...@@ -5,16 +5,17 @@ import pyhdf.SD
import pyhdf.VS import pyhdf.VS
from intercal.util import great_circle_dist from intercal.util import great_circle_dist
def sno_stats(mod03_file, mod021km_file, sno_lat, sno_lon, sno_radius, output_file): def modis_to_iasi(files, sno_lat, sno_lon, sno_radius, output_file):
reader = ModisReader(mod03_file, mod021km_file) output_shape = [16]
mask = (great_circle_dist(reader.latitude, reader.longitude, sno_lat, sno_lon) <= sno_radius) num_invalid_fov = np.zeros(output_shape, np.int32)
radiance = reader.radiance[:,mask] num_fov = np.zeros(output_shape, np.int32)
sum_radiance = np.zeros(output_shape, np.float64)
sum_radiance_squared = np.zeros(output_shape, np.float64)
num_invalid_fov = np.ma.count_masked(radiance, axis=-1) for mod03_file, mod021km_file in files:
num_fov = radiance.shape[-1] - num_invalid_fov sno_stats(mod03_file, mod021km_file, sno_lat, sno_lon, sno_radius,
sum_radiance = radiance.sum(axis=-1) num_invalid_fov, num_fov, sum_radiance, sum_radiance_squared)
sum_radiance_squared = (radiance**2).sum(axis=-1)
sd = pyhdf.SD.SD(output_file, pyhdf.SD.SDC.WRITE | pyhdf.SD.SDC.CREATE | pyhdf.SD.SDC.TRUNC) sd = pyhdf.SD.SD(output_file, pyhdf.SD.SDC.WRITE | pyhdf.SD.SDC.CREATE | pyhdf.SD.SDC.TRUNC)
write_hdf_sds(sd, 'Num_Invalid_FOV', num_invalid_fov, dims=['Channel']) write_hdf_sds(sd, 'Num_Invalid_FOV', num_invalid_fov, dims=['Channel'])
...@@ -22,6 +23,18 @@ def sno_stats(mod03_file, mod021km_file, sno_lat, sno_lon, sno_radius, output_fi ...@@ -22,6 +23,18 @@ def sno_stats(mod03_file, mod021km_file, sno_lat, sno_lon, sno_radius, output_fi
write_hdf_sds(sd, 'Sum_Radiance', sum_radiance, dims=['Channel']) write_hdf_sds(sd, 'Sum_Radiance', sum_radiance, dims=['Channel'])
write_hdf_sds(sd, 'Sum_Radiance_Squared', sum_radiance_squared, dims=['Channel']) write_hdf_sds(sd, 'Sum_Radiance_Squared', sum_radiance_squared, dims=['Channel'])
def sno_stats(mod03_file, mod021km_file, sno_lat, sno_lon, sno_radius,
num_invalid_fov, num_fov, sum_radiance, sum_radiance_squared):
reader = ModisReader(mod03_file, mod021km_file)
mask = (great_circle_dist(reader.latitude, reader.longitude, sno_lat, sno_lon) <= sno_radius)
radiance = reader.radiance[:,mask]
num_invalid_fov += np.ma.count_masked(radiance, axis=-1)
num_fov += radiance.shape[-1] - num_invalid_fov
sum_radiance += radiance.sum(axis=-1)
sum_radiance_squared += (radiance**2).sum(axis=-1)
def write_hdf_sds(sd, name, data, dims): def write_hdf_sds(sd, name, data, dims):
hdf_type, np_type = {'i': (pyhdf.SD.SDC.INT32, np.int32), hdf_type, np_type = {'i': (pyhdf.SD.SDC.INT32, np.int32),
......
...@@ -2,15 +2,16 @@ ...@@ -2,15 +2,16 @@
import os import os
from unittest import TestCase from unittest import TestCase
import pyhdf.SD import pyhdf.SD
from intercal.modis import sno_stats from intercal.modis import modis_to_iasi
class SnoStatsTest(TestCase): class ModisToIasiTest(TestCase):
@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):
output_file = os.path.join('local/test', output_file_name) output_file = os.path.join('local/test', output_file_name)
sno_stats(mod03_file, mod021km_file, sno_lat, sno_lon, distance_threshold, output_file) modis_to_iasi([(mod03_file, mod021km_file)], sno_lat, sno_lon, distance_threshold,
output_file)
cls.output_sd = pyhdf.SD.SD(output_file) cls.output_sd = pyhdf.SD.SD(output_file)
def test_counts_number_of_pixels_within_threshold_distance_of_sno(self): def test_counts_number_of_pixels_within_threshold_distance_of_sno(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment