8#include "tpcclibConfig.h"
22static char *info[] = {
23 "Calculation of the mean of fraction curves. Data is not interpolated or",
24 "extrapolated. Resulting average datafile will contain a weight column;",
25 "weights represent the number of fractions from which each mean",
26 "value was calculated.",
28 "Usage: @P [Options] meanfile fractionfiles",
34 " @P mean.rat ue*ap.rat",
36 "See also: metabcor, fit_ppf, avgbolus, simframe, taccalc, tacadd, tacblend",
38 "Keywords: TAC, input, simulation",
55int samplet_eval(
const void *,
const void *);
62int main(
int argc,
char **argv)
64 int ai, help=0, version=0, verbose=1;
65 int fi, ti, ri, ret, n;
66 int fileNr=0, file1=0, timeNr=0, timeSpace=0, min_tacs;
67 char *cptr, ofile[FILENAME_MAX], dfile[FILENAME_MAX];
69 double *samplet, *dptr;
75 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
76 ofile[0]=dfile[0]=(char)0;
79 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
80 cptr=argv[ai]+1;
if(*cptr==
'-') cptr++;
if(cptr==NULL)
continue;
82 fprintf(stderr,
"Error: invalid option '%s'.\n", argv[ai]);
87 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
92 for(; ai<argc; ai++) {
94 strcpy(ofile, argv[ai]);
continue;
96 if(fileNr==0) file1=ai;
103 printf(
"fileNr := %d\n", fileNr);
104 printf(
"ofile := %s\n", ofile);
109 fprintf(stderr,
"Error: missing command-line argument; try %s --help\n",
114 fprintf(stderr,
"Error: only one input file specified.\n");
122 if(verbose>0) printf(
"collecting sample times\n");
123 timeNr=timeSpace=0; samplet=(
double*)NULL; min_tacs=10000;
124 for(ai=file1; ai<argc; ai++)
if(*argv[ai]!=
'-') {
126 strcpy(dfile, argv[ai]);
127 if(verbose>1) printf(
"dfile := %s\n", dfile);
129 fprintf(stderr,
"Error in reading '%s': %s\n", dfile,
dfterrmsg);
130 free(samplet);
dftEmpty(&dft);
return(2);
135 if(timeSpace-timeNr<dft.
frameNr) {
137 samplet=(
double*)realloc(samplet, timeSpace*
sizeof(
double));
139 fprintf(stderr,
"Error in allocation of memory.\n");
144 for(fi=0; fi<dft.
frameNr; fi++) {
146 for(ri=n=0; ri<dft.
voiNr; ri++)
if(!isnan(dft.
voi[ri].
y[fi])) n++;
149 for(ti=ret=0; ti<timeNr; ti++)
if(samplet[ti]==dft.
x[fi]) {ret=1;
break;}
152 if(verbose>8) printf(
" adding time %g\n", dft.
x[fi]);
153 samplet[timeNr++]=dft.
x[fi];
159 fprintf(stderr,
"Error: could not read sample times.\n");
160 free(samplet);
return(2);
162 if(verbose>4) printf(
"sorting %d sample times\n", timeNr);
164 qsort(dptr, timeNr,
sizeof(
double), samplet_eval);
166 printf(
"Collected sample times:\n %g", samplet[0]);
167 for(ti=1; ti<timeNr; ti++) printf(
", %g", samplet[ti]);
170 if(verbose>1) printf(
"min TAC number: %d\n", min_tacs);
177 fprintf(stderr,
"Error in allocation of memory.\n");
180 mean.frameNr=timeNr;
mean.voiNr=min_tacs;
181 for(ti=0; ti<timeNr; ti++)
mean.x[ti]=samplet[ti];
190 if(verbose>0) printf(
"collecting the fractions\n");
191 for(ai=file1; ai<argc; ai++)
if(*argv[ai]!=
'-') {
193 strcpy(dfile, argv[ai]);
195 fprintf(stderr,
"Error in reading '%s': %s\n", dfile,
dfterrmsg);
198 for(fi=0; fi<dft.
frameNr; fi++) {
200 for(ti=0; ti<
mean.frameNr; ti++)
if(
mean.x[ti]==dft.
x[fi])
break;
201 if(ti==
mean.frameNr)
continue;
203 for(ri=n=0; ri<
mean.voiNr; ri++)
if(!isnan(dft.
voi[ri].
y[fi])) {
204 mean.voi[ri].y[ti]+=dft.
voi[ri].
y[fi]; n++;}
206 if(n>0)
mean.w[ti]++;
212 for(ri=0; ri<
mean.voiNr; ri++) {
222 for(ti=0; ti<
mean.frameNr; ti++) {
224 for(ri=0; ri<
mean.voiNr; ri++)
mean.voi[ri].y[ti]=nan(
"");
226 for(ri=0; ri<
mean.voiNr; ri++)
mean.voi[ri].y[ti]/=
mean.w[ti];
233 if(verbose>1) printf(
"writing %s\n", ofile);
235 fprintf(stderr,
"Error in writing '%s': %s\n", ofile,
dfterrmsg);
239 if(verbose>=0) fprintf(stdout,
" %s written.\n", ofile),
248int samplet_eval(
const void *n1,
const void *n2)
250 if(*(
double*)n1 < *(
double*)n2)
return -1;
251 else if(*(
double*)n1 > *(
double*)n2)
return +1;
int dftSetmem(DFT *data, int frameNr, int voiNr)
int dftRead(char *filename, DFT *data)
int dftWrite(DFT *data, char *filename)
Header file for libtpccurveio.
#define DFT_FORMAT_STANDARD
Header file for libtpcmisc.
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)
Header file for libtpcmodel.
int mean(double *x, double *y, int nr, double *xmean, double *xsd, double *ymean, double *ysd)
char unit[MAX_UNITS_LEN+1]
char voiname[MAX_REGIONSUBNAME_LEN+1]
char name[MAX_REGIONNAME_LEN+1]
char hemisphere[MAX_REGIONSUBNAME_LEN+1]
char place[MAX_REGIONSUBNAME_LEN+1]