From 89c1ee0352e4130bb0ede6da62cc6bc430309c37 Mon Sep 17 00:00:00 2001
From: David Hammer <dhammer@mailbox.org>
Date: Thu, 12 May 2022 10:47:51 +0200
Subject: [PATCH] LPD: check gain values, mask extreme / nan values

---
 src/calng/kernels/lpd_gpu.cu | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/calng/kernels/lpd_gpu.cu b/src/calng/kernels/lpd_gpu.cu
index 38094853..bd5ae721 100644
--- a/src/calng/kernels/lpd_gpu.cu
+++ b/src/calng/kernels/lpd_gpu.cu
@@ -31,8 +31,8 @@ extern "C" {
 		const size_t data_stride_cell = Y * data_stride_y;
 		const size_t data_index = memory_cell * data_stride_cell + y * data_stride_y + x * data_stride_x;
 		const unsigned short raw_data_value = data[data_index];
-		const unsigned char gain = raw_data_value >> 12;
-		float corrected = (float)(raw_data_value & 0xfff);
+		const unsigned char gain = (raw_data_value >> 12) & 0x0003;
+		float corrected = (float)(raw_data_value & 0x0fff);
 
 		const size_t gm_map_stride_gain = 1;
 		const size_t gm_map_stride_x = 3 * gm_map_stride_gain;
@@ -46,7 +46,8 @@ extern "C" {
 				y * gm_map_stride_y +
 				x * gm_map_stride_x;
 
-			if ((corr_flags & BPMASK) && bad_pixel_map[gm_map_index]) {
+			if (gain > 2 || ((corr_flags & BPMASK) && bad_pixel_map[gm_map_index])) {
+				// now also checking for illegal gain value
 				corrected = bad_pixel_mask_value;
 			} else {
 				// TODO: save GPU memory by combining maps
@@ -62,6 +63,9 @@ extern "C" {
 				if (corr_flags & FF_CORR) {
 					corrected *= flatfield_map[gm_map_index];
 				}
+				if (corrected < -1e7 || corrected > 1e7 || isnan(corrected)) {
+					corrected = bad_pixel_mask_value;
+				}
 			}
 		}
 		{% if output_data_dtype == "half" %}
-- 
GitLab