8#include "tpcclibConfig.h"
21static char *info[] = {
22 "Adds a zero sample to the beginning of TAC data.",
23 "If data samples already start from time (x) zero, then nothing is done.",
25 "Usage: @P [options] tacfile [outputfile]",
29 " Add late time point with zero value instead.",
32 "See also: tacsetx, tacsety, inpstart, tacframe, taccat, taccut",
34 "Keywords: TAC, time, tool",
53int main(
int argc,
char **argv)
55 int ai, help=0, version=0, verbose=1;
57 char *cptr, tacfile[FILENAME_MAX], outfile[FILENAME_MAX];
58 double latetime=nan(
"");
65 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
67 tacfile[0]=outfile[0]=(char)0;
69 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
71 cptr=argv[ai]+1;
if(*cptr==
'-') cptr++;
if(!*cptr)
continue;
72 if(strncasecmp(cptr,
"X=", 2)==0) {
73 if(
atofCheck(cptr+2, &latetime)==0 && latetime>0.0)
continue;
75 fprintf(stderr,
"Error: invalid option '%s'\n", argv[ai]);
84 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
89 if(ai<argc)
strlcpy(tacfile, argv[ai++], FILENAME_MAX);
90 if(ai<argc)
strlcpy(outfile, argv[ai++], FILENAME_MAX);
92 fprintf(stderr,
"Error: too many arguments.\n");
97 if(!tacfile[0]) {
tpcPrintUsage(argv[0], info, stdout);
return(1);}
98 if(!outfile[0]) strcpy(outfile, tacfile);
102 for(ai=0; ai<argc; ai++)
103 printf(
"%s ", argv[ai]);
105 printf(
"tacfile := %s\n", tacfile);
106 printf(
"outfile := %s\n", outfile);
107 if(!isnan(latetime)) printf(
"latetime := %g\n", latetime);
114 if(verbose>1) printf(
"reading %s\n", tacfile);
115 ret=
tacRead(&tac, tacfile, &status);
122 printf(
"tacNr := %d\n", tac.
tacNr);
123 printf(
"sampleNr := %d\n", tac.
sampleNr);
138 if(isnan(latetime)) {
140 fprintf(stderr,
"Notice: zero sample exists; nothing to do.\n");
145 fprintf(stderr,
"Notice: late sample exists; nothing to do.\n");
154 double newx, newx1, newx2;
155 newx=newx1=newx2=nan(
"");
158 int i;
if(isnan(latetime)) i=0;
else i=tac.
sampleNr-1;
159 printf(
"x1 := %g\n", tac.
x1[i]);
160 printf(
"x2 := %g\n", tac.
x2[i]);
162 if(isnan(latetime) && tac.
x1[0]>0.0) {
164 newx1=newx2-(tac.
x2[0]-tac.
x1[0]);
165 if(newx1<0.0) newx1=0.0;
166 newx=0.5*(newx1+newx2);
168 if(!isnan(latetime)) {
172 newx2=latetime+(latetime-newx1);
176 int i;
if(isnan(latetime)) i=0;
else i=tac.
sampleNr-1;
177 printf(
"x[%d] := %g\n", i, tac.
x[i]);
179 if(isnan(latetime)) printf(
"x[1] := %g\n", tac.
x[1]);
180 else printf(
"x[%d] := %g\n", i-1, tac.
x[i-1]);
183 if(isnan(latetime) && tac.
x[0]>0.0) {
185 newx=tac.
x[0]-(tac.
x[1]-tac.
x[0]);
186 if(newx<0.0) newx=0.0;
191 if(!isnan(latetime)) {
197 printf(
"newx1 := %g\n", newx1);
198 printf(
"newx2 := %g\n", newx2);
200 printf(
"newx := %g\n", newx);
203 if(tac.
isframe && (isnan(newx1) || isnan(newx2))) {
204 fprintf(stderr,
"Error: cannot add zero sample.\n");
207 if(!tac.
isframe && isnan(newx)) {
208 fprintf(stderr,
"Error: cannot add zero sample.\n");
215 if(verbose>2) printf(
"adding zero sample\n");
216 if(isnan(latetime)) {
222 fprintf(stderr,
"Error: cannot add zero sample.\n");
225 if(isnan(latetime)) {
241 if(verbose>1) printf(
"writing %s\n", outfile);
242 FILE *fp; fp=fopen(outfile,
"w");
244 fprintf(stderr,
"Error: cannot open file for writing (%s)\n", outfile);
250 fprintf(stderr,
"Error (%d): %s\n", ret,
errorMsg(status.
error));
253 if(verbose>0) printf(
"%s saved.\n", outfile);
int atofCheck(const char *s, double *v)
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)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
int verbose
Verbose level, used by statusPrint() etc.
tpcerror error
Error code.
int tacAllocateMoreSamples(TAC *tac, int addNr)
Allocate memory for more samples in TAC data.
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)
int tacSortByTime(TAC *d, TPCSTATUS *status)
int tacAddZeroSample(TAC *d, TPCSTATUS *status)
Add an initial sample to TAC(s) with zero time and concentration.
Header file for library libtpcextensions.
char * unitName(int unit_code)
Header file for library libtpcift.
Header file for library libtpctac.
@ TAC_FORMAT_UNKNOWN
Unknown format.