8#include "tpcclibConfig.h"
23static char *info[] = {
24 "Calculate area under moment curve (AUMC) for every pixel in dynamic image.",
25 "Data is not extrapolated, and AUMC is therefore not complete.",
27 "Usage: @P [Options] imgfile outputfile",
29 "Image file can be in ECAT 6.3 or 7.x, NIfTI-1, or Analyze 7.5 format.",
30 "If data units are available, output units will be (Bq/mL)*s^2, if possible.",
34 " Instead of AUMC, AUMC/AUC (MRT) is calculated, with units s.",
36 " Result will be natural log transformed.",
39 "See also: imgledif, imginteg, imgpeak, imginv, imgthrs",
41 "Keywords: image, peak, time, AUC",
60int main(
int argc,
char **argv)
62 int ai, help=0, version=0, verbose=1;
63 char imgfile[FILENAME_MAX], outfile[FILENAME_MAX];
71 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
72 imgfile[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(strcasecmp(cptr,
"LOG")==0) {
78 log_transform=1;
continue;
79 }
else if(strcasecmp(cptr,
"MRT")==0) {
81 }
else if(strcasecmp(cptr,
"AUMC")==0) {
84 fprintf(stderr,
"Error: invalid option '%s'.\n", argv[ai]);
89 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
94 if(ai<argc) {
strlcpy(imgfile, argv[ai], FILENAME_MAX); ai++;}
95 if(ai<argc) {
strlcpy(outfile, argv[ai], FILENAME_MAX); ai++;}
96 if(ai<argc) {fprintf(stderr,
"Error: too many arguments.\n");
return(1);}
100 fprintf(stderr,
"Error: missing command-line argument; use option --help\n");
107 printf(
"imgfile := %s\n", imgfile);
108 printf(
"outfile := %s\n", outfile);
109 printf(
"mode := %d\n", mode);
110 printf(
"log_transform := %d\n", log_transform);
117 if(verbose>0) {printf(
"reading %s\n", imgfile); fflush(stdout);}
120 fprintf(stderr,
"Error: %s\n", img.
statmsg);
124 printf(
"dimt := %d\n", img.
dimt);
125 printf(
"dimx := %d\n", img.
dimx);
126 printf(
"dimy := %d\n", img.
dimy);
127 printf(
"dimz := %d\n", img.
dimz);
131 fprintf(stderr,
"Error: dynamic image required.\n");
135 if(verbose>0) fprintf(stderr,
"Warning: missing pixel values.\n");
137 fprintf(stderr,
"Error: unknown frame times.\n");
142 if(verbose>0) printf(
"checking frame overlap\n");
144 if(ret==1 || ret==3) fprintf(stderr,
"Warning: overlapping time frames.\n");
145 if(ret==2 || ret==3) fprintf(stderr,
"Warning: gaps between time frames.\n");
148 fprintf(stderr,
"Error: cannot fix time frame gap.\n"); fflush(stderr);
153 fprintf(stderr,
"Error: cannot fix time frame overlap.\n"); fflush(stderr);
157 fprintf(stdout,
"Frame times (sec):\n");
158 for(
int i=0; i<img.
dimt; i++)
159 fprintf(stdout,
" %e %e %e\n", img.
start[i], img.
end[i], img.
mid[i]);
165 fprintf(stderr,
"Warning: cannot convert units.\n"); fflush(stderr);
172 if(verbose>0) printf(
"processing...\n");
175 if(
imgAUMC(&img, &oimg, verbose-1)) {
176 fprintf(stderr,
"Error: cannot calculate AUMC.\n");
180 if(
imgMRT(&img, &oimg, verbose-1)) {
181 fprintf(stderr,
"Error: cannot calculate MRT.\n");
187 if(verbose>0) printf(
"log transform...\n");
195 if(verbose>0) printf(
"writing image %s\n", outfile);
197 fprintf(stderr,
"Error: %s\n", oimg.
statmsg);
201 if(verbose>0) printf(
"done.\n\n");
int imgExistentTimes(IMG *img)
unsigned long long imgNaNs(IMG *img, int fix)
void imgEmpty(IMG *image)
int imgAUMC(IMG *img, IMG *oimg, int verbose)
int imgMRT(IMG *img, IMG *oimg, int verbose)
int imgConvertUnit(IMG *img, char *unit)
int imgRead(const char *fname, IMG *img)
int imgWrite(const char *fname, IMG *img)
int imgFrameGapFill(IMG *img, int verbose)
int imgFramesCheck(IMG *img, int verbose)
int imgDeleteFrameOverlap(IMG *img)
char * imgUnit(int dunit)
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)