9#include "tpcclibConfig.h"
21static char *info[] = {
22 "Calculate a volume weighted average TAC of specified regions in a TAC file.",
24 "Usage: @P [options] tacfile [tacid(s)]",
28 " Remove the original TACs after averaging.",
30 " Average of hemispheres (dx and sin as the 2nd name field).",
33 "Example 1: Average TAC of all TACs named as 'cer':",
36 "Example 2: Average TACs over planes of all regions separately;",
37 " remove the original TACs with option -rm.",
40 "Example 3: Average of TAC numbers 4, 6 and 7:",
43 "Example 4: Average of hemispheres (dx and sin) of all regions separately;",
44 " remove the original TACs with option -rm.",
45 " @P -hemisphere -rm b123.dat",
47 "See also: taclist, tacdel, dftrmdpl, tacadd, avgttac, taccalc, tacmean",
49 "Keywords: TAC, modelling, tool, ROI, average",
68int main(
int argc,
char **argv)
70 int ai, help=0, version=0, verbose=1;
72 int n, voi, ret, rmOrig=0, hemisphere=0, tacnamenr=0, operation=0;
74 char *cptr, dfile[FILENAME_MAX];
80 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
84 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
85 cptr=argv[ai]+1;
if(*cptr==
'-') cptr++;
if(cptr==NULL)
continue;
87 if(strncasecmp(cptr,
"HEMISPHERE", 3)==0) {
88 hemisphere=1;
continue;
89 }
else if(strcasecmp(cptr,
"RM")==0 || strcasecmp(cptr,
"DEL")==0) {
92 fprintf(stderr,
"Error: invalid option %s\n", argv[ai]);
97 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
102 for(; ai<argc; ai++) {
104 if(!dfile[0]) {strcpy(dfile, argv[ai]);
continue;}
106 if(tacnamenr==0) tacnamenr=ai;
111 fprintf(stderr,
"Error: missing command-line argument; use option --help\n");
117 }
else if(tacnamenr==0) {
126 printf(
"tacfile := %s\n", dfile);
127 printf(
"rmOrig := %d\n", rmOrig);
128 printf(
"hemisphere := %d\n", hemisphere);
129 printf(
"operation := %d\n", operation);
132 for(ai=tacnamenr; ai<argc; ai++)
133 if(*argv[ai]!=
'-') printf(
" '%s'", argv[ai]);
142 if(verbose>1) printf(
"reading %s\n", dfile);
144 fprintf(stderr,
"Error in reading '%s': %s\n", dfile,
dfterrmsg);
148 printf(
" tacNr := %d\n", dft.
voiNr);
149 printf(
" sampleNr := %d\n", dft.
frameNr);
156 for(ri=0; ri<dft.
voiNr; ri++)
162 for(ri=0; ri<dft.
voiNr; ri++) {
164 if(dft.
voi[ri].
sw2>=0)
continue;
166 if(strncasecmp(dft.
voi[ri].
place,
"Pl", 2))
continue;
170 for(rj=ri+1; rj<dft.
voiNr; rj++) {
172 if(dft.
voi[rj].
sw2>=0)
continue;
174 if(strncasecmp(dft.
voi[rj].
place,
"Pl", 2))
continue;
184 fprintf(stderr,
"Warning: no planes were found.\n");
187 }
else if(operation==1) {
191 for(ai=tacnamenr; ai<argc; ai++)
if(*argv[ai]!=
'-') {
193 voi=atoi(argv[ai])-1;
194 if(voi>=0 && voi<dft.
voiNr) dft.
voi[voi].
sw=1;
198 for(ri=0; ri<dft.
voiNr; ri++) dft.
voi[ri].
sw=1;
201 for(ri=0; ri<dft.
voiNr; ri++)
if(dft.
voi[ri].
sw) {
209 else if(!strcasecmp(dft.
voi[ri].
place,
"dx")) dft.
voi[ri].
sw=1;
210 else if(!strcasecmp(dft.
voi[ri].
place,
"sin")) dft.
voi[ri].
sw=2;
211 else if(!strcasecmp(dft.
voi[ri].
place,
"right")) dft.
voi[ri].
sw=1;
212 else if(!strcasecmp(dft.
voi[ri].
place,
"left")) dft.
voi[ri].
sw=2;
213 else if(!strcasecmp(dft.
voi[ri].
place,
"r")) dft.
voi[ri].
sw=1;
214 else if(!strcasecmp(dft.
voi[ri].
place,
"l")) dft.
voi[ri].
sw=2;
215 else dft.
voi[ri].
sw=0;
218 for(ri=n=0; ri<dft.
voiNr; ri++)
if(dft.
voi[ri].
sw==1) {
219 if(dft.
voi[ri].
sw2>=0)
continue;
220 for(rj=0; rj<dft.
voiNr; rj++)
if(dft.
voi[rj].
sw==2) {
221 if(dft.
voi[rj].
sw2>=0)
continue;
234 fprintf(stderr,
"Error: no hemispheres to average were found.\n");
239 for(ai=tacnamenr; ai<argc; ai++)
if(*argv[ai]!=
'-') {
241 voi=atoi(argv[ai])-1;
242 if(voi>=0 && voi<dft.
voiNr) {
249 for(ri=0, rj=-1; ri<dft.
voiNr; ri++)
if(dft.
voi[ri].
sw2==1) {
250 if(rj<0) {rj=ri; dft.
voi[ri].
sw3=0;}
255 fprintf(stderr,
"Error: region '%s' not found.\n", argv[ai]);
260 printf(
"%d average TACs will be produced.\n", n);
261 for(ri=0; ri<dft.
voiNr; ri++)
if(dft.
voi[ri].
sw3>=0) {
262 printf(
"Calculate avg from %d TACs:\n", dft.
voi[ri].
sw3);
276 fprintf(stderr,
"Error in reallocating memory.\n");
281 for(ri=0; ri<dft.
voiNr; ri++)
if(dft.
voi[ri].
sw2==ri) {
284 printf(
" averaging TACs:\n");
285 printf(
" %-6.6s %-6.6s %-6.6s %g\n", dft.
voi[ri].
voiname,
291 for(fi=0; fi<dft.
frameNr; fi++)
295 for(fi=0; fi<dft.
frameNr; fi++)
304 for(rj=ri+1; rj<dft.
voiNr; rj++)
if(dft.
voi[rj].
sw2==ri) {
306 printf(
" %-6.6s %-6.6s %-6.6s %g\n", dft.
voi[rj].
voiname,
310 for(fi=0; fi<dft.
frameNr; fi++)
314 for(fi=0; fi<dft.
frameNr; fi++)
326 for(fi=0; fi<dft.
frameNr; fi++)
341 printf(
" -> %-6.6s %-6.6s %-6.6s %g\n",
356 fprintf(stderr,
"Error (%d) in deleting TAC.\n", ret);
364 printf(
"%d TAC(s) are deleted; backup is in %s.bak\n", n, dfile);
371 if(verbose>1) printf(
"writing %s\n", dfile);
373 fprintf(stderr,
"Error in writing '%s': %s\n", dfile,
dfterrmsg);
376 if(verbose>0) printf(
"%s written.\n", dfile);
int dftAddmem(DFT *dft, int voiNr)
int dftDelete(DFT *dft, int voi)
int dftSelect(DFT *data, char *name)
int dftRead(char *filename, DFT *data)
int dftWrite(DFT *data, char *filename)
Header file for libtpccurveio.
Header file for libtpcmisc.
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
int rnameCatenate(char *rname, int max_rname_len, char *name1, char *name2, char *name3, char space)
#define MAX_REGIONNAME_LEN
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)
char voiname[MAX_REGIONSUBNAME_LEN+1]
char name[MAX_REGIONNAME_LEN+1]
char hemisphere[MAX_REGIONSUBNAME_LEN+1]
char place[MAX_REGIONSUBNAME_LEN+1]