9#include "tpcclibConfig.h"
24static char *info[] = {
25 "For simulation of simple PET images for software testing;",
26 "adds the contents of existing image files as new frame(s) and writes",
27 "the combined image as a new image file.",
28 "Images are catenated in the order given to the program.",
29 "Frame times or decay correction are not changed here.",
31 "Usage: @P [Options] newfile file1 [file2 [file3 ...]]",
36 "See also: ecatcat, imgdim, imgdelfr, imgadd, imgmove, flat2img",
38 "Keywords: image, simulation, software testing, catenate",
57int main(
int argc,
char **argv)
59 int ai, help=0, version=0, verbose=1;
60 int ci, fi, ri, ret, pi, fileNr=0, firstfile=0;
61 char outfile[FILENAME_MAX], file1[FILENAME_MAX], file2[FILENAME_MAX];
68 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
69 file1[0]=file2[0]=outfile[0]=(char)0;
72 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
73 char *cptr=argv[ai]+1;
if(*cptr==
'-') cptr++;
if(cptr==NULL)
continue;
75 fprintf(stderr,
"Error: invalid option %s\n", argv[ai]);
80 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
86 if(ai<argc) {
strlcpy(outfile, argv[ai], FILENAME_MAX); ai++;}
88 for(; ai<argc; ai++) {
89 if(firstfile<1) firstfile=ai;
96 if(strcasecmp(argv[ai], outfile)==0) {
97 fprintf(stderr,
"Error: the same name for input and output image.\n");
105 fprintf(stderr,
"Error: missing command-line argument; try %s --help\n", argv[0]);
112 printf(
"fileNr := %d\n", fileNr);
113 printf(
"outfile := %s\n", outfile);
121 if(verbose>1) printf(
"reading image headers\n");
122 strlcpy(file1, argv[firstfile], FILENAME_MAX);
123 if(verbose>2) printf(
"reading header in %s\n", file1);
126 fprintf(stderr,
"Error: %s\n", img1.
statmsg);
132 for(ai=firstfile+1; ai<argc; ai++) {
133 strlcpy(file2, argv[ai], FILENAME_MAX);
135 if(verbose>2) printf(
"reading header in %s\n", file2);
138 fprintf(stderr,
"Error: %s\n", img2.
statmsg);
148 fprintf(stderr,
"Error: different PET data type.\n");
154 fprintf(stderr,
"Error: different matrix size.\n");
164 fprintf(stderr,
"Warning: different header information.\n");
166 printf(
"unit: %d vs %d\n", img1.
unit, img2.
unit);
168 printf(
"zoom: %g vs %g\n", img1.
zoom, img2.
zoom);
175 if(verbose>1) printf(
"combined_dimt := %d\n", dimt);
181 if(verbose>=0) printf(
"reading %s\n", file1);
183 fprintf(stderr,
"Error: %s\n", img1.
statmsg);
192 if(verbose>1) printf(
"creating combined data\n");
195 fprintf(stderr,
"Error: cannot allocate memory for combined data.\n");
201 for(pi=0; pi<img1.
dimz; pi++)
202 for(ri=0; ri<img1.
dimy; ri++)
203 for(ci=0; ci<img1.
dimx; ci++)
204 for(fi=0; fi<img1.
dimt; fi++)
205 img3.
m[pi][ri][ci][fi]=img1.
m[pi][ri][ci][fi];
207 for(fi=0; fi<img1.
dimt; fi++) {
209 img3.
end[fi]=img1.
end[fi];
210 img3.
mid[fi]=img1.
mid[fi];
220 for(ai=firstfile+1; ai<argc; ai++) {
221 strlcpy(file2, argv[ai], FILENAME_MAX);
if(verbose>=0) printf(
"reading %s\n", file2);
224 fprintf(stderr,
"Error: %s\n", img2.
statmsg);
229 if(verbose>4) printf(
" read ok\n");
231 for(pi=0; pi<img2.
dimz; pi++)
232 for(ri=0; ri<img2.
dimy; ri++)
233 for(ci=0; ci<img2.
dimx; ci++)
234 for(fi=0; fi<img2.
dimt; fi++)
235 img3.
m[pi][ri][ci][dimt+fi]=img2.
m[pi][ri][ci][fi];
237 for(fi=0; fi<img2.
dimt; fi++) {
239 img3.
end[dimt+fi]=img2.
end[fi];
240 img3.
mid[dimt+fi]=img2.
mid[fi];
251 if(verbose>=0) printf(
"writing combined data in %s\n", outfile);
253 fprintf(stderr,
"Error: %s\n", img3.
statmsg);
258 if(verbose>0) printf(
"done.\n");
int imgAllocateWithHeader(IMG *image, int planes, int rows, int columns, int frames, IMG *image_from)
void imgEmpty(IMG *image)
int imgRead(const char *fname, IMG *img)
int imgWrite(const char *fname, IMG *img)
int imgReadHeader(const char *fname, IMG *img, int format)
Header file for libtpcimgio.
Header file for libtpcimgp.
Header file for libtpcmisc.
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
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)