8#include "tpcclibConfig.h"
20static char *info[] = {
21 "Calculates natural logarithm of y values (concentrations) in TAC file, or",
22 "optionally of TAC x values (sample times).",
24 "Usage: @P [options] tacfile outputfile",
28 " Calculate (y) or do not calculate (n, default) natural logarithm of x",
31 " Calculate (y, default) or do not calculate (n) natural logarithm of y",
35 "See also: taccalc, tacinv, tacadd, taccut, tacsetx, fit_line, fit_exp",
37 "Keywords: TAC, tool",
56int main(
int argc,
char **argv)
58 int ai, help=0, version=0, verbose=1;
60 char tacfile[FILENAME_MAX], outfile[FILENAME_MAX];
70 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
72 tacfile[0]=outfile[0]=(char)0;
74 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
76 cptr=argv[ai]+1;
if(*cptr==
'-') cptr++;
if(!*cptr)
continue;
77 if(strncasecmp(cptr,
"X=", 2)==0) {
79 if(strncasecmp(cptr,
"YES", 1)==0) {xvals=1;
continue;}
80 else if(strncasecmp(cptr,
"NO", 1)==0) {xvals=0;
continue;}
81 }
else if(strncasecmp(cptr,
"Y=", 2)==0) {
83 if(strncasecmp(cptr,
"YES", 1)==0) {yvals=1;
continue;}
84 else if(strncasecmp(cptr,
"NO", 1)==0) {yvals=0;
continue;}
86 fprintf(stderr,
"Error: invalid option '%s'.\n", argv[ai]);
95 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
100 for(; ai<argc; ai++) {
102 strcpy(tacfile, argv[ai]);
continue;
103 }
else if(!outfile[0]) {
104 strcpy(outfile, argv[ai]);
continue;
106 fprintf(stderr,
"Error: invalid argument '%s'.\n", argv[ai]);
111 if(!outfile[0]) {
tpcPrintUsage(argv[0], info, stdout);
return(1);}
116 for(ai=0; ai<argc; ai++)
117 printf(
"%s ", argv[ai]);
119 printf(
"tacfile := %s\n", tacfile);
120 printf(
"outfile := %s\n", outfile);
121 printf(
"xvals := %d\n", xvals);
122 printf(
"yvals := %d\n", yvals);
124 if(xvals==0 && yvals==0) {
125 fprintf(stderr,
"Error: no transforms requested.\n");
133 if(verbose>1) printf(
"reading %s\n", tacfile);
134 ret=
tacRead(&tac, tacfile, &status);
136 fprintf(stderr,
"Error (%d): %s\n", ret,
errorMsg(status.
error));
141 printf(
"tacNr := %d\n", tac.
tacNr);
142 printf(
"sampleNr := %d\n", tac.
sampleNr);
148 int okNr=0, failNr=0;
153 for(
int ri=0; ri<tac.
tacNr; ri++) {
154 for(
int fi=0; fi<tac.
sampleNr; fi++) {
155 if(isnan(tac.
c[ri].
y[fi])) {failNr++;
continue;}
156 if(tac.
c[ri].
y[fi]<1.0E-20) {
157 tac.
c[ri].
y[fi]=nan(
""); failNr++;
continue;}
158 tac.
c[ri].
y[fi]=log(tac.
c[ri].
y[fi]);
159 if(isfinite(tac.
c[ri].
y[fi])) okNr++;
160 else {tac.
c[ri].
y[fi]=nan(
""); failNr++;}
169 for(
int fi=0; fi<tac.
sampleNr; fi++) {
170 if(isnan(tac.
x[fi])) {failNr++;
continue;}
171 if(tac.
x[fi]<1.0E-20) {tac.
x[fi]=nan(
""); failNr++;
continue;}
172 tac.
x[fi]=log(tac.
x[fi]);
173 if(isfinite(tac.
x[fi])) okNr++;
174 else {tac.
x[fi]=nan(
""); failNr++;}
177 for(
int fi=0; fi<tac.
sampleNr; fi++) {
178 if(isnan(tac.
x1[fi])) {failNr++;}
179 else if(tac.
x1[fi]<1.0E-20) {tac.
x1[fi]=nan(
""); failNr++;}
181 tac.
x1[fi]=log(tac.
x1[fi]);
182 if(isfinite(tac.
x1[fi])) okNr++;
183 else {tac.
x1[fi]=nan(
""); failNr++;}
185 if(isnan(tac.
x2[fi])) {failNr++;}
186 else if(tac.
x2[fi]<1.0E-20) {tac.
x2[fi]=nan(
""); failNr++;}
188 tac.
x2[fi]=log(tac.
x2[fi]);
189 if(isfinite(tac.
x2[fi])) okNr++;
190 else {tac.
x2[fi]=nan(
""); failNr++;}
197 printf(
" failNr := %d\n", failNr);
198 printf(
" okNr := %d\n", okNr);
201 fprintf(stderr,
"Error: all transformations failed.\n");
209 if(verbose>1) printf(
"writing %s\n", outfile);
210 FILE *fp; fp=fopen(outfile,
"w");
212 fprintf(stderr,
"Error: cannot open file for writing (%s)\n", outfile);
218 fprintf(stderr,
"Error (%d): %s\n", ret,
errorMsg(status.
error));
221 if(verbose>=0) printf(
"%s saved.\n", outfile);
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
int tpcHtmlUsage(const char *program, char *text[], const char *path)
void tpcPrintBuild(const char *program, FILE *fp)
void tpcPrintUsage(const char *program, char *text[], FILE *fp)
void statusInit(TPCSTATUS *s)
char * errorMsg(tpcerror e)
void statusSet(TPCSTATUS *s, const char *func, const char *srcfile, int srcline, tpcerror error)
int verbose
Verbose level, used by statusPrint() etc.
tpcerror error
Error code.
int tacRead(TAC *d, const char *fname, TPCSTATUS *status)
char * tacFormattxt(tacformat c)
int tacWrite(TAC *tac, FILE *fp, tacformat format, int extra, TPCSTATUS *status)
Header file for library libtpcextensions.
char * unitName(int unit_code)
Header file for library libtpctac.
@ TAC_FORMAT_UNKNOWN
Unknown format.