commit 560640f67dee638771c7343f6802d2ca92dffd86
parent f630c483b781fe4af1eeed655cb370a27d5b80f9
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 3 Jun 2020 14:29:43 +0200
Remove hard-coded <short|long>wave limits
Ensure that the submitted spectral range is included in the spectral
data of the sky.
Diffstat:
2 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/src/htrdr.c b/src/htrdr.c
@@ -401,6 +401,7 @@ htrdr_init
struct htsky_args htsky_args = HTSKY_ARGS_DEFAULT;
double proj_ratio;
double sun_dir[3];
+ double spectral_range[2];
const char* output_name = NULL;
size_t ithread;
int nthreads_max;
@@ -503,13 +504,23 @@ htrdr_init
res = htsky_create(&htrdr->logger, htrdr->allocator, &htsky_args, &htrdr->sky);
if(res != RES_OK) goto error;
- htrdr->wlen_range_m[0] = args->wlen_range[0]*1e-9; /* Convert in meters */
- htrdr->wlen_range_m[1] = args->wlen_range[1]*1e-9; /* Convert in meters */
+ HTSKY(get_raw_spectral_bounds(htrdr->sky, spectral_range));
+
+ spectral_range[0] = MMAX(args->wlen_range[0], spectral_range[0]);
+ spectral_range[1] = MMIN(args->wlen_range[1], spectral_range[1]);
+ if(spectral_range[0] != args->wlen_range[0]
+ || spectral_range[1] != args->wlen_range[1]) {
+ htrdr_log_warn(htrdr,
+ "%s: the submitted spectral range overflowed the spectral data.\n", FUNC_NAME);
+ }
+
+ htrdr->wlen_range_m[0] = spectral_range[0]*1e-9; /* Convert in meters */
+ htrdr->wlen_range_m[1] = spectral_range[1]*1e-9; /* Convert in meters */
if(htrdr->spectral_type == HTRDR_SPECTRAL_SW_CIE_XYZ) {
size_t n;
- n = (size_t)(args->wlen_range[1] - args->wlen_range[0]);
- res = htrdr_cie_xyz_create(htrdr, args->wlen_range, n, &htrdr->cie);
+ n = (size_t)(spectral_range[1] - spectral_range[0]);
+ res = htrdr_cie_xyz_create(htrdr, spectral_range, n, &htrdr->cie);
if(res != RES_OK) goto error;
} else {
@@ -523,10 +534,10 @@ htrdr_init
}
ASSERT(htrdr->wlen_range_m[0] <= htrdr->wlen_range_m[1]);
- n = (size_t)(args->wlen_range[1] - args->wlen_range[0]);
+ n = (size_t)(spectral_range[1] - spectral_range[0]);
res = htrdr_ran_wlen_create
- (htrdr, args->wlen_range, n, Tref, &htrdr->ran_wlen);
+ (htrdr, spectral_range, n, Tref, &htrdr->ran_wlen);
if(res != RES_OK) goto error;
}
diff --git a/src/htrdr_ran_wlen.c b/src/htrdr_ran_wlen.c
@@ -280,8 +280,6 @@ htrdr_ran_wlen_create
res_T res = RES_OK;
ASSERT(htrdr && range && out_wlen_ran && ref_temperature > 0);
ASSERT(ref_temperature > 0);
- ASSERT(range[0] >= 200);
- ASSERT(range[1] <= 100000);
ASSERT(range[0] <= range[1]);
wlen_ran = MEM_CALLOC(htrdr->allocator, 1, sizeof(*wlen_ran));