summaryrefslogtreecommitdiff
path: root/spectro/chartread.c
diff options
context:
space:
mode:
Diffstat (limited to 'spectro/chartread.c')
-rwxr-xr-x[-rw-r--r--]spectro/chartread.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/spectro/chartread.c b/spectro/chartread.c
index e1624e1..6a9db39 100644..100755
--- a/spectro/chartread.c
+++ b/spectro/chartread.c
@@ -265,6 +265,7 @@ int disbidi, /* Disable automatic bi-directional strip recognition */
int highres, /* Use high res spectral mode */
char *ccxxname, /* Colorimeter Correction/Colorimeter Calibration name */
icxObserverType obType, /* ccss observer */
+xspect custObserver[3], /* If obType = icxOT_custom */
double scan_tol, /* Modify patch consistency tolerance */
int pbypatch, /* Patch by patch measurement */
int xtern, /* Use external (user supplied) values rather than instument read */
@@ -468,7 +469,7 @@ a1log *log /* verb, debug & error log */
it->del(it);
return -1;
}
- if ((rv = it->get_set_opt(it, inst_opt_set_ccss_obs, obType, NULL)) != inst_ok) {
+ if ((rv = it->get_set_opt(it, inst_opt_set_ccss_obs, obType, custObserver)) != inst_ok) {
printf("\nSetting CCSS observer failed with error :'%s' (%s)\n",
it->inst_interp_error(it, rv), it->interp_error(it, rv));
cs->del(cs);
@@ -489,7 +490,7 @@ a1log *log /* verb, debug & error log */
/* If non-standard observer wasn't set by a CCSS file above */
if (obType != icxOT_default && (cap2 & inst2_ccss) && ccssset == 0) {
- if ((rv = it->get_set_opt(it, inst_opt_set_ccss_obs, obType, NULL)) != inst_ok) {
+ if ((rv = it->get_set_opt(it, inst_opt_set_ccss_obs, obType, custObserver)) != inst_ok) {
printf("\nSetting CCSS observer failed with error :'%s' (%s)\n",
it->inst_interp_error(it, rv), it->interp_error(it, rv));
it->del(it);
@@ -552,12 +553,10 @@ a1log *log /* verb, debug & error log */
rmode = 0;
}
} else if (displ) {
-printf("~1 using displ mode\n");
/* We assume a display mode will always be spot by spot */
mode = inst_mode_emis_spot;
rmode = 0;
} else if (emis) {
-printf("~1 using emis mode\n");
if (pbypatch
&& it->check_mode(it, inst_mode_emis_spot) == inst_ok) {
mode = inst_mode_emis_spot;
@@ -1466,7 +1465,7 @@ printf("~1 using emis mode\n");
/* DTP51 has a nasty habit of misaligning test squares by +/- 1 */
/* See if this might have happened */
- if (it->itype == instDTP51) {
+ if (it->dtype == instDTP51) {
loff = -1;
hoff = 1;
}
@@ -2155,9 +2154,9 @@ usage() {
fprintf(stderr," -X file.ccss Use Colorimeter Calibration Spectral Samples for calibration\n");
fprintf(stderr," -Q observ Choose CIE Observer for CCSS instrument:\n");
#ifdef SALONEINSTLIB
- fprintf(stderr," 1931_2 (def), 1964_10\n");
+ fprintf(stderr," 1931_2 (def), 1964_10, 2012_2, 2012_10\n");
#else /* !SALONEINSTLIB */
- fprintf(stderr," 1931_2 (def), 1964_10, S&B 1955_2, shaw, J&V 1978_2\n");
+ fprintf(stderr," 1931_2 (def), 1964_10, 2012_2, 2012_10, S&B 1955_2, shaw, J&V 1978_2 or file.cmf\n");
#endif /* !SALONEINSTLIB */
}
fprintf(stderr," -T ratio Modify strip patch consistency tolerance by ratio\n");
@@ -2208,6 +2207,7 @@ int main(int argc, char *argv[]) {
int doplot = 0; /* Plot spectral of patch by patch */
char ccxxname[MAXNAMEL+1] = "\000"; /* Colorimeter Correction/Colorimeter Calibration name */
icxObserverType obType = icxOT_default; /* ccss observer */
+ xspect custObserver[3]; /* If obType = icxOT_custom */
static char inname[MAXNAMEL+1] = { 0 }; /* Input cgats file base name */
static char outname[MAXNAMEL+1] = { 0 }; /* Output cgats file base name */
cgats *icg; /* input cgats structure */
@@ -2300,6 +2300,10 @@ int main(int argc, char *argv[]) {
obType = icxOT_CIE_1931_2;
} else if (strcmp(na, "1964_10") == 0) { /* Classic 10 degree */
obType = icxOT_CIE_1964_10;
+ } else if (strcmp(na, "2012_2") == 0) { /* Latest 2 degree */
+ obType = icxOT_CIE_2012_2;
+ } else if (strcmp(na, "2012_10") == 0) { /* Latest 10 degree */
+ obType = icxOT_CIE_2012_10;
#ifndef SALONEINSTLIB
} else if (strcmp(na, "1955_2") == 0) { /* Stiles and Burch 1955 2 degree */
obType = icxOT_Stiles_Burch_2;
@@ -2308,8 +2312,11 @@ int main(int argc, char *argv[]) {
} else if (strcmp(na, "shaw") == 0) { /* Shaw and Fairchilds 1997 2 degree */
obType = icxOT_Shaw_Fairchild_2;
#endif /* !SALONEINSTLIB */
- } else
- usage();
+ } else { /* Assume it's a filename */
+ obType = icxOT_custom;
+ if (read_cmf(custObserver, na) != 0)
+ usage();
+ }
}
/* Scan tolerance ratio */
@@ -2992,7 +2999,7 @@ int main(int argc, char *argv[]) {
if (read_strips(itype, scols, &atype, npat, totpa, stipa, pis, paix,
saix, ixord, rstart, rand, hex, ipath, fc, plen, glen, tlen,
trans, emis, displ, dtype, fe, scalstd, &ucalstd, nocal, disbidi, highres,
- ccxxname, obType,
+ ccxxname, obType, custObserver,
scan_tol, pbypatch, xtern, spectral, uvmode, accurate_expd,
emit_warnings, doplot, g_log) == 0) {
/* And save the result */
@@ -3009,6 +3016,13 @@ int main(int argc, char *argv[]) {
if (displ == 0 && trans == 0 && ucalstd != xcalstd_none)
ocg->add_kword(ocg, 0, "DEVCALSTD",xcalstd2str(ucalstd), NULL);
+ if (fe == inst_opt_filter_pol)
+ ocg->add_kword(ocg, 0, "INSTRUMENT_FILTER", "POLARIZED", NULL);
+ else if (fe == inst_opt_filter_D65)
+ ocg->add_kword(ocg, 0, "INSTRUMENT_FILTER", "D65", NULL);
+ else if (fe == inst_opt_filter_UVCut)
+ ocg->add_kword(ocg, 0, "INSTRUMENT_FILTER", "UVCUT", NULL);
+
/* Count patches actually read */
for (nrpat = i = 0; i < npat; i++) {
if (cols[i].rr) {