10#include "tpcclibConfig.h"
25static char *info[] = {
26 "For simulation of simple PET images for software testing;",
27 "adds the contents of existing image files as new plane(s) and writes",
28 "the combined image as a new image file.",
30 "Usage: @P [Options] newfile file1 [file2 [file3 ...]]",
34 " Add the file contents N times; default is 1.",
37 "See also: imgdim, imgdelpl, ecatcat, dft2img, imgmove, flat2img, simcirc",
39 "Keywords: image, simulation, software testing",
58int main(
int argc,
char **argv)
60 int ai, help=0, version=0, verbose=1;
61 int ci, fi, ri, ret, pi, mi, fileNr=0, firstfile=0;
62 char outfile[FILENAME_MAX], file1[FILENAME_MAX], file2[FILENAME_MAX];
70 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
71 file1[0]=file2[0]=outfile[0]=(char)0;
74 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
75 char *cptr=argv[ai]+1;
if(*cptr==
'-') cptr++;
if(cptr==NULL)
continue;
77 if(strncasecmp(cptr,
"X=", 2)==0) {
79 if(ret==0 && multip>0) {
continue;}
81 fprintf(stderr,
"Error: invalid option %s\n", argv[ai]);
86 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
92 if(ai<argc) {
strlcpy(outfile, argv[ai], FILENAME_MAX); ai++;}
94 for(; ai<argc; ai++) {
95 if(firstfile<1) firstfile=ai;
102 if(strcasecmp(argv[ai], outfile)==0) {
103 fprintf(stderr,
"Error: the same name for input and output image.\n");
111 fprintf(stderr,
"Error: missing command-line argument; try %s --help\n", argv[0]);
118 printf(
"fileNr := %d\n", fileNr);
119 printf(
"outfile := %s\n", outfile);
120 printf(
"multip := %d\n", multip);
128 if(verbose>1) printf(
"reading image headers\n");
129 strlcpy(file1, argv[firstfile], FILENAME_MAX);
130 if(verbose>2) printf(
"reading header in %s\n", file1);
133 fprintf(stderr,
"Error: %s\n", img1.
statmsg);
138 dimz=multip*img1.
dimz;
139 for(ai=firstfile+1; ai<argc; ai++) {
140 strlcpy(file2, argv[ai], FILENAME_MAX);
142 if(verbose>2) printf(
"reading header in %s\n", file2);
145 fprintf(stderr,
"Error: %s\n", img2.
statmsg);
151 dimz+=multip*img2.
dimz;
155 fprintf(stderr,
"Error: different frame number.\n");
161 fprintf(stderr,
"Error: different PET data type.\n");
167 fprintf(stderr,
"Error: different matrix size.\n");
177 fprintf(stderr,
"Warning: different header information.\n");
179 printf(
"unit: %d vs %d\n", img1.
unit, img2.
unit);
180 printf(
"isotopeHalflife: %g vs %g\n",
182 printf(
"zoom: %g vs %g\n", img1.
zoom, img2.
zoom);
184 printf(
"transaxialFOV: %g vs %g\n",
190 if(verbose>1) printf(
"combined_dimz := %d\n", dimz);
196 if(verbose>=0) printf(
"reading %s\n", file1);
198 fprintf(stderr,
"Error: %s\n", img1.
statmsg);
207 if(verbose>1) printf(
"creating combined data\n");
210 fprintf(stderr,
"Error: cannot allocate memory for combined data.\n");
215 for(pi=0; pi<img1.
dimz; pi++)
217 for(pi=img1.
dimz; pi<img3.
dimz; pi++)
221 for(mi=0; mi<multip; mi++)
222 for(pi=0; pi<img1.
dimz; pi++)
223 for(ri=0; ri<img1.
dimy; ri++)
224 for(ci=0; ci<img1.
dimx; ci++)
225 for(fi=0; fi<img1.
dimt; fi++)
226 img3.
m[mi*img1.
dimz+pi][ri][ci][fi]=img1.
m[pi][ri][ci][fi];
228 dimz=multip*img1.
dimz;
236 for(ai=firstfile+1; ai<argc; ai++) {
237 strlcpy(file2, argv[ai], FILENAME_MAX);
238 if(verbose>=0) printf(
"reading %s\n", file2);
241 fprintf(stderr,
"Error: %s\n", img2.
statmsg);
246 if(verbose>2) printf(
" read ok\n");
248 for(mi=0; mi<multip; mi++)
249 for(pi=0; pi<img2.
dimz; pi++)
250 for(ri=0; ri<img2.
dimy; ri++)
251 for(ci=0; ci<img2.
dimx; ci++)
252 for(fi=0; fi<img2.
dimt; fi++)
253 img3.
m[dimz+mi*img2.
dimz+pi][ri][ci][fi]=img2.
m[pi][ri][ci][fi];
255 dimz+=multip*img2.
dimz;
263 if(verbose>=0) printf(
"writing combined data in %s\n", outfile);
265 fprintf(stderr,
"Error: %s\n", img3.
statmsg);
270 if(verbose>0) printf(
"done.\n");
int atoi_with_check(const char *int_as_string, int *result_value)
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)