commit c53431b18cec61a7d61f1858763f0c9ff0aebff4
parent 959d5622709f0433338e5eb46af9fc4d03ae4796
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Fri, 26 Aug 2022 09:15:53 +0200
Rename sars_find_overlaped_bands in sars_find_bands
Diffstat:
3 files changed, 34 insertions(+), 19 deletions(-)
diff --git a/src/sars.c b/src/sars.c
@@ -390,7 +390,7 @@ error:
}
res_T
-sars_find_overlaped_bands
+sars_find_bands
(const struct sars* sars,
const double range[2],
size_t ibands[2])
@@ -419,12 +419,20 @@ sars_find_overlaped_bands
goto exit;
}
+ if(range[0] == range[1]) goto exit; /* No more to do */
+
upp = search_lower_bound(range+1, bands, nbands, sizeof(*bands), cmp_band);
- if(!upp) { /* The submitted range overlaps the remaining bands */
+
+ /* The submitted range overlaps the remaining bands */
+ if(!upp) {
ibands[1] = nbands - 1;
- } else if(upp->low <= range[1]) { /* The upper band includes range[1] */
+
+ /* The upper band includes range[1] */
+ } else if(upp->low <= range[1]) {
ibands[1] = (size_t)(upp - bands);
- } else if(upp->low > range[1]) { /* The upper band is greater than range[1] */
+
+ /* The upper band is greater than range[1] and therefre must be rejected */
+ } else if(upp->low > range[1]) {
if(upp != bands) {
ibands[1] = (size_t)(upp - bands - 1);
} else {
diff --git a/src/sars.h b/src/sars.h
@@ -104,9 +104,11 @@ sars_get_band
const size_t iband,
struct sars_band* band);
-/* Returns a degenerated if no band is found */
+/* Returns the range of band indices covered by a given spectral range. The
+ * returned index range is degenerated (i.e. ibands[0] > ibands[1]) if no band
+ * is found */
SARS_API res_T
-sars_find_overlaped_bands
+sars_find_bands
(const struct sars* sars,
const double range[2], /* In cm^-1. Limits are inclusive */
size_t ibands[2]); /* Range of overlaped bands. Limits are inclusive */
diff --git a/src/test_sars_load.c b/src/test_sars_load.c
@@ -271,54 +271,59 @@ test_find(struct sars* sars)
range[0] = 0;
range[1] = 10;
- CHK(sars_find_overlaped_bands(NULL, range, ibands) == RES_BAD_ARG);
- CHK(sars_find_overlaped_bands(sars, NULL, ibands) == RES_BAD_ARG);
- CHK(sars_find_overlaped_bands(sars, range, NULL) == RES_BAD_ARG);
- CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK);
+ CHK(sars_find_bands(NULL, range, ibands) == RES_BAD_ARG);
+ CHK(sars_find_bands(sars, NULL, ibands) == RES_BAD_ARG);
+ CHK(sars_find_bands(sars, range, NULL) == RES_BAD_ARG);
+ CHK(sars_find_bands(sars, range, ibands) == RES_OK);
CHK(ibands[0] == 0 && ibands[1] == 9);
range[0] = 10;
range[1] = 0;
- CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_BAD_ARG);
+ CHK(sars_find_bands(sars, range, ibands) == RES_BAD_ARG);
range[0] = 11;
range[1] = 12;
- CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK);
+ CHK(sars_find_bands(sars, range, ibands) == RES_OK);
CHK(ibands[0] > ibands[1]);
range[0] = 0;
range[1] = nextafter(1, 0);
- CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK);
+ CHK(sars_find_bands(sars, range, ibands) == RES_OK);
CHK(ibands[0] > ibands[1]);
+ range[0] = 1;
+ range[1] = 1;
+ CHK(sars_find_bands(sars, range, ibands) == RES_OK);
+ CHK(ibands[0] == 0 && ibands[1] == 0);
+
range[0] = 0;
range[1] = 1;
- CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK);
+ CHK(sars_find_bands(sars, range, ibands) == RES_OK);
CHK(ibands[0] == 0 && ibands[1] == 0);
range[0] = 1;
range[1] = nextafterf(2, 1);
- CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK);
+ CHK(sars_find_bands(sars, range, ibands) == RES_OK);
CHK(ibands[0] == 0 && ibands[1] == 0);
range[0] = 2;
range[1] = 20;
- CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK);
+ CHK(sars_find_bands(sars, range, ibands) == RES_OK);
CHK(ibands[0] == 1 && ibands[1] == 9);
range[0] = 1.5;
range[1] = 2;
- CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK);
+ CHK(sars_find_bands(sars, range, ibands) == RES_OK);
CHK(ibands[0] == 0 && ibands[1] == 1);
range[0] = 3.1;
range[1] = nextafter(6, 0);
- CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK);
+ CHK(sars_find_bands(sars, range, ibands) == RES_OK);
CHK(ibands[0] == 2 && ibands[1] == 4);
range[0] = 3.1;
range[1] = 7;
- CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK);
+ CHK(sars_find_bands(sars, range, ibands) == RES_OK);
CHK(ibands[0] == 2 && ibands[1] == 6);
CHK(fclose(fp) == 0);