8#include "tpcclibConfig.h"
23static char *info[] = {
24 "Catenate the scan information files (SIF) from interrupted PET studies",
25 "into a single SIF file.",
27 "Usage: @P [options] combined_sif sif1 sif2 [sif3]",
29 "Usage: @P [options] filename(s) [isotope code]",
35 " @P ub0371dy.sif ub0371dy1.sif ub0371dy2.sif ub0371dy3.sif",
37 "See also: sifisot, taclist, eframe, tacframe, tacweigh, ecatcat",
39 "Keywords: SIF, image, catenate, time",
58int main(
int argc,
char *argv[])
60 int ai, help=0, version=0, verbose=1;
61 char siffile[FILENAME_MAX], catfile[FILENAME_MAX];
62 int ret, ffi=0, fileNr=0;
69 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
70 siffile[0]=catfile[0]=(char)0;
72 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
75 fprintf(stderr,
"Error: invalid option '%s'\n", argv[ai]);
80 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
89 if(ai<argc) {
strlcpy(catfile, argv[ai++], FILENAME_MAX);}
91 for(; ai<argc; ai++) {
96 fprintf(stderr,
"Error: missing command-line argument; use option --help\n");
102 printf(
"catfile := %s\n", catfile);
103 printf(
"fileNr := %d\n", fileNr);
110 for(ai=ffi; ai<argc; ai++) {
111 if(access(argv[ai], 0) == -1) {
112 fprintf(stderr,
"Error: file %s not found.\n", argv[ai]);
117 if(access(catfile, 0) != -1) {
118 fprintf(stderr,
"Warning: file %s exists.\n", catfile);
126 strlcpy(siffile, argv[ffi], FILENAME_MAX);
127 if(verbose>1) fprintf(stdout,
"reading %s\n", siffile);
128 ret=
tacRead(&tac, siffile, &status);
131 if(verbose>1) printf(
"ret := %d\n", ret);
136 printf(
"tacNr := %d\n", tac.
tacNr);
137 printf(
"sampleNr := %d\n", tac.
sampleNr);
140 fprintf(stderr,
"Error: file is not in SIF format.\n");
144 char scan_start_time[256];
145 struct tm scantime1, scantime2;
149 if(verbose>0) fprintf(stderr,
"Warning: cannot read scan start time.\n");
156 for(ai=ffi+1; ai<argc; ai++) {
158 strlcpy(siffile, argv[ai], FILENAME_MAX);
159 if(verbose>1) fprintf(stdout,
"reading %s\n", siffile);
160 ret=
tacRead(&tac2, siffile, &status);
163 if(verbose>1) printf(
"ret := %d\n", ret);
168 printf(
"tacNr := %d\n", tac2.
tacNr);
169 printf(
"sampleNr := %d\n", tac2.
sampleNr);
172 fprintf(stderr,
"Error: file is not in SIF format.\n");
180 fprintf(stderr,
"Error: cannot combine SIFs.\n");
187 if(verbose>0) fprintf(stderr,
"Warning: cannot read scan start time.\n");
190 if(verbose>1 || tdif<0.0)
191 printf(
"scan_start_time_difference[s] := %g\n", tdif);
192 if(tdif<0.0) fprintf(stderr,
"Warning: SIFs in wrong order?\n");
193 for(
int i=0; i<tac2.
sampleNr; i++) {
194 tac2.
x1[i]+=tdif; tac2.
x2[i]+=tdif; tac2.
x[i]+=tdif;
198 for(
int i=0; i<tac2.
sampleNr; i++) {
202 for(
int j=0; j<tac2.
tacNr; j++)
216 if(verbose>1) printf(
"writing %s\n", catfile);
217 FILE *fp; fp=fopen(catfile,
"w");
219 fprintf(stderr,
"Error: cannot open file for writing.\n");
226 if(verbose>1) printf(
"ret := %d\n", ret);
229 if(verbose>0) printf(
"catenated file saved in %s\n", catfile);
int strDateTimeRead(const char *str, struct tm *date)
double tmDifference(struct tm *tm1, struct tm *tm0)
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)
IFT h
Optional (but often useful) header information.
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 tacGetHeaderScanstarttime(IFT *h, char *s, TPCSTATUS *status)
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)
Header file for library libtpccsv.
Header file for library libtpcextensions.
Header file for library libtpcift.
Header file for library libtpctac.
@ TAC_FORMAT_SIF
Scan information file.