summaryrefslogtreecommitdiff
path: root/spectro/spotread.c
diff options
context:
space:
mode:
Diffstat (limited to 'spectro/spotread.c')
-rwxr-xr-x[-rw-r--r--]spectro/spotread.c83
1 files changed, 54 insertions, 29 deletions
diff --git a/spectro/spotread.c b/spectro/spotread.c
index 7689986..baf1c76 100644..100755
--- a/spectro/spotread.c
+++ b/spectro/spotread.c
@@ -333,7 +333,7 @@ usage(char *diag, ...) {
fprintf(stderr," -h Display LCh instead of Lab\n");
fprintf(stderr," -V Show running average and std. devation from ref.\n");
#ifndef SALONEINSTLIB
- fprintf(stderr," -T Display correlated color temperatures and CRI\n");
+ fprintf(stderr," -T Display correlated color temperatures, CRI and TLCI\n");
#endif /* !SALONEINSTLIB */
// fprintf(stderr," -K type Run instrument calibration first\n");
fprintf(stderr," -N Disable auto calibration of instrument\n");
@@ -948,24 +948,6 @@ int main(int argc, char *argv[]) {
refrmode = -1;
}
}
- /* Set display type */
- if (dtype != 0) {
- if (cap2 & inst2_disptype) {
- int ix;
- if ((ix = inst_get_disptype_index(it, dtype, 0)) < 0) {
- it->del(it);
- usage("Failed to locate display type matching '%c'",dtype);
- }
-
- if ((rv = it->set_disptype(it, ix)) != inst_ok) {
- printf("Setting display type ix %d not supported by instrument\n",ix);
- it->del(it);
- return -1;
- }
- } else
- printf("Display type ignored - instrument doesn't support display type selection\n");
- }
-
} else {
if (!IMODETST(cap, inst_mode_ref_spot)
|| it->check_mode(it, inst_mode_ref_spot) != inst_ok) {
@@ -976,6 +958,24 @@ int main(int argc, char *argv[]) {
}
}
+ /* Set displaytype or calibration mode */
+ if (dtype != 0) {
+ if (cap2 & inst2_disptype) {
+ int ix;
+ if ((ix = inst_get_disptype_index(it, dtype, 0)) < 0) {
+ it->del(it);
+ usage("Failed to locate display type matching '%c'",dtype);
+ }
+
+ if ((rv = it->set_disptype(it, ix)) != inst_ok) {
+ printf("Setting display type ix %d not supported by instrument\n",ix);
+ it->del(it);
+ return -1;
+ }
+ } else
+ printf("Display/calibration type ignored - instrument doesn't support it\n");
+ }
+
/* If we have non-standard observer we need spectral or CCSS */
if (obType != icxOT_default && !IMODETST(cap, inst_mode_spectral) && !(cap2 & inst2_ccss)) {
printf("Non standard observer needs spectral information or CCSS capability\n");
@@ -1604,7 +1604,7 @@ int main(int argc, char *argv[]) {
}
#ifdef DEBUG
- printf("read_sample returned '%s' (%s)\n",
+ printf("\nread_sample returned '%s' (%s)\n",
it->inst_interp_error(it, rv), it->interp_error(it, rv));
#endif /* DEBUG */
@@ -1778,9 +1778,21 @@ int main(int argc, char *argv[]) {
if (ch == 'S' || ch == 's') { /* Save last spectral into file */
if (sp.spec_n > 0) {
char buf[500];
+ xspect tsp;
+
+ if (val.sp.spec_n <= 0)
+ error("Instrument didn't return spectral data");
+
+ tsp = val.sp; /* Temp. save spectral reading */
+
+ /* Compute FWA corrected spectrum */
+ if (dofwa != 0) {
+ sp2cief[fidx]->sconvert(sp2cief[fidx], &tsp, NULL, &tsp);
+ }
+
printf("\nEnter filename (ie. xxxx.sp): "); fflush(stdout);
if (getns(buf, 500) != NULL && strlen(buf) > 0) {
- if(write_xspect(buf, &sp))
+ if(write_xspect(buf, &tsp))
printf("\nWriting file '%s' failed\n",buf);
else
printf("\nWriting file '%s' succeeded\n",buf);
@@ -2020,22 +2032,27 @@ int main(int argc, char *argv[]) {
double yy[XSPECT_MAX_BANDS];
double yr[XSPECT_MAX_BANDS];
double xmin, xmax, ymin, ymax;
+ xspect trsp = rsp;
xspect *ss; /* Spectrum range to use */
int nn;
- if (rsp.spec_n > 0) {
+ if (dofwa != 0) {
+ sp2cief[fidx]->sconvert(sp2cief[fidx], &trsp, NULL, &tsp);
+ }
+
+ if (trsp.spec_n > 0) {
if ((tsp.spec_wl_long - tsp.spec_wl_short) >
- (rsp.spec_wl_long - rsp.spec_wl_short))
+ (trsp.spec_wl_long - trsp.spec_wl_short))
ss = &tsp;
else
- ss = &rsp;
+ ss = &trsp;
} else
ss = &tsp;
- if (tsp.spec_n > rsp.spec_n)
+ if (tsp.spec_n > trsp.spec_n)
nn = tsp.spec_n;
else
- nn = rsp.spec_n;
+ nn = trsp.spec_n;
if (nn > XSPECT_MAX_BANDS)
error("Got > %d spectral values (%d)",XSPECT_MAX_BANDS,nn);
@@ -2050,7 +2067,7 @@ int main(int argc, char *argv[]) {
yy[j] = value_xspect(&tsp, xx[j]);
if (rLab[0] >= -1.0) { /* If there is a reference */
- yr[j] = value_xspect(&rsp, xx[j]);
+ yr[j] = value_xspect(&trsp, xx[j]);
}
}
@@ -2317,9 +2334,17 @@ int main(int argc, char *argv[]) {
#ifndef SALONEINSTLIB
if (val.sp.spec_n > 0 && (ambient || doCCT)) {
int invalid = 0;
+ double RR[14];
double cri;
- cri = icx_CIE1995_CRI(&invalid, &sp);
- printf(" Color Rendering Index (Ra) = %.1f%s\n",cri,invalid ? " (Invalid)" : "");
+ cri = icx_CIE1995_CRI(&invalid, RR, &sp);
+ printf(" Color Rendering Index (Ra) = %.1f [ R9 = %.1f ]%s\n",
+ cri, RR[9-1], invalid ? " (Invalid)" : "");
+ }
+ if (val.sp.spec_n > 0 && (ambient || doCCT)) {
+ int invalid = 0;
+ double tlci;
+ tlci = icx_EBU2012_TLCI(&invalid, &sp);
+ printf(" Television Lighting Consistency Index 2012 (Qa) = %.1f%s\n",tlci,invalid ? " (Invalid)" : "");
}
#endif