diff --git a/modules/util/viirs.py b/modules/util/viirs.py
new file mode 100644
index 0000000000000000000000000000000000000000..95fe0d245a7bba62dee4b55b83f219fcc74710bb
--- /dev/null
+++ b/modules/util/viirs.py
@@ -0,0 +1,72 @@
+import numpy as np
+import h5py
+from util.util import get_grid_values
+import glob
+
+mod_res_params = ['M07', 'M08', 'M10', 'M12', 'M13', 'M14', 'M15', 'M16']
+img_res_params = ['M07_highres', 'M08_highres', 'M10_highres', 'M12_highres', 'M13_highres', 'M14_highres', 'M15_highres', 'M16_highres']
+
+
+def run_all(directory):
+    mod_files = glob.glob(directory+'*.uwssec.nc')
+    img_files = glob.glob(directory+'*.uwssec.highres.nc')
+
+    mod_tiles = []
+    img_tiles = []
+
+    for idx, mfile in enumerate(mod_files):
+        ifile = img_files[idx]
+        run(mfile, ifile, mod_tiles, img_tiles)
+
+    mod_nda = np.stack(mod_tiles)
+    img_nda = np.stack(img_tiles)
+
+    mod_mean = mod_nda.mean()
+    img_mean = img_nda.mean()
+    mod_std = mod_nda.std()
+    img_std = img_nda.std()
+
+    mod_nda = (mod_nda - mod_mean) / mod_std
+    img_nda = (img_nda - img_mean) / img_std
+
+    return mod_nda, img_nda
+
+
+def run(mod_res_filename, img_res_filename, mod_tiles, img_tiles):
+    mod_h5f = h5py.File(mod_res_filename, 'r')
+    img_h5f = h5py.File(img_res_filename, 'r')
+
+    mod_tile_width = 64
+    img_tile_width = mod_tile_width * 2
+
+    mod_param = 'observation_data/M15'
+    img_param = 'observation_data/M15_highres'
+
+    mod_num_lines = mod_h5f[mod_param].shape[0]
+    mod_num_pixels = mod_h5f[mod_param].shape[1]
+
+    img_num_lines = img_h5f[img_param].shape[0]
+    img_num_pixels = img_h5f[img_param].shape[1]
+
+    mod_num_y_tiles = int(mod_num_lines / mod_tile_width)
+    mod_num_x_tiles = int(mod_num_pixels / mod_tile_width)
+
+    mod_data = get_grid_values(mod_h5f, mod_param, 0, 0, None, mod_num_lines, mod_num_pixels, range_name=None)
+    img_data = get_grid_values(img_h5f, img_param, 0, 0, None, img_num_lines, img_num_pixels, range_name=None)
+
+    for j in range(mod_num_y_tiles):
+        j_m = j * mod_tile_width
+        j_i = j_m * 2
+        for i in range(mod_num_x_tiles):
+            i_m = i * mod_tile_width
+            i_i = i_m * 2
+
+            nda = mod_data[j_m:j_m+mod_tile_width, i_m:i_m+mod_tile_width]
+            mod_tiles.append(nda)
+            nda = img_data[j_i:j_i+img_tile_width, i_i:i_i+img_tile_width]
+            img_tiles.append(nda)
+
+    mod_h5f.close()
+    img_h5f.close()
+
+