28 if(verbose>0) printf(
"%s(img1, img2, '%c', %g, %d)\n", __func__, operation, ulimit, verbose);
32 if(verbose>0) fprintf(stderr,
"Invalid image status.\n");
39 if(ret==0)
for(
int pi=0; pi<img1->
dimz; pi++)
44 if(verbose>0) fprintf(stderr,
"Image dimensions do not match.\n");
51 for(
int pi=0; pi<img1->
dimz; pi++)
for(
int yi=0; yi<img1->
dimy; yi++)
52 for(
int xi=0; xi<img1->
dimx; xi++)
for(
int fi=0; fi<img1->
dimt; fi++)
53 img1->
m[pi][yi][xi][fi]+=img2->
m[pi][yi][xi][fi];
56 for(
int pi=0; pi<img1->
dimz; pi++)
for(
int yi=0; yi<img1->
dimy; yi++)
57 for(
int xi=0; xi<img1->
dimx; xi++)
for(
int fi=0; fi<img1->
dimt; fi++)
58 img1->
m[pi][yi][xi][fi]-=img2->
m[pi][yi][xi][fi];
62 for(
int pi=0; pi<img1->
dimz; pi++)
for(
int yi=0; yi<img1->
dimy; yi++)
63 for(
int xi=0; xi<img1->
dimx; xi++)
for(
int fi=0; fi<img1->
dimt; fi++) {
64 if(fabs(img2->
m[pi][yi][xi][fi])>1.0E-5)
65 img1->
m[pi][yi][xi][fi]/=img2->
m[pi][yi][xi][fi];
66 else img1->
m[pi][yi][xi][fi]=0.0;
72 for(
int pi=0; pi<img1->
dimz; pi++)
for(
int yi=0; yi<img1->
dimy; yi++)
73 for(
int xi=0; xi<img1->
dimx; xi++)
for(
int fi=0; fi<img1->
dimt; fi++)
74 img1->
m[pi][yi][xi][fi]*=img2->
m[pi][yi][xi][fi];
77 if(verbose>0) fprintf(stderr,
"Invalid operation.\n");
83 for(
int pi=0; pi<img1->
dimz; pi++)
for(
int yi=0; yi<img1->
dimy; yi++)
84 for(
int xi=0; xi<img1->
dimx; xi++)
for(
int fi=0; fi<img1->
dimt; fi++)
85 if(img1->
m[pi][yi][xi][fi]>ulimit) img1->
m[pi][yi][xi][fi]=ulimit;
112 if(verbose>0) printf(
"%s(img, %g, '%c', %g, %d)\n", __func__, operand, operation, ulimit, verbose);
116 if(verbose>0) fprintf(stderr,
"Invalid image status.\n");
121 for(
int pi=0; pi<img->
dimz; pi++)
for(
int yi=0; yi<img->
dimy; yi++)
122 for(
int xi=0; xi<img->
dimx; xi++)
for(
int fi=0; fi<img->
dimt; fi++)
123 img->
m[pi][yi][xi][fi]+=operand;
126 for(
int pi=0; pi<img->
dimz; pi++)
for(
int yi=0; yi<img->
dimy; yi++)
127 for(
int xi=0; xi<img->
dimx; xi++)
for(
int fi=0; fi<img->
dimt; fi++)
128 img->
m[pi][yi][xi][fi]-=operand;
132 if(fabs(operand)<1.0e-100)
return(2);
133 for(
int pi=0; pi<img->
dimz; pi++)
for(
int yi=0; yi<img->
dimy; yi++)
134 for(
int xi=0; xi<img->
dimx; xi++)
for(
int fi=0; fi<img->
dimt; fi++)
135 img->
m[pi][yi][xi][fi]/=operand;
140 for(
int pi=0; pi<img->
dimz; pi++)
for(
int yi=0; yi<img->
dimy; yi++)
141 for(
int xi=0; xi<img->
dimx; xi++)
for(
int fi=0; fi<img->
dimt; fi++)
142 img->
m[pi][yi][xi][fi]*=operand;
145 if(verbose>0) fprintf(stderr,
"Invalid operation.\n");
151 for(
int pi=0; pi<img->
dimz; pi++)
for(
int yi=0; yi<img->
dimy; yi++)
152 for(
int xi=0; xi<img->
dimx; xi++)
for(
int fi=0; fi<img->
dimt; fi++)
153 if(img->
m[pi][yi][xi][fi]>ulimit) img->
m[pi][yi][xi][fi]=ulimit;
180 if(verbose>0) printf(
"%s(img1, img2, '%c', %g, %d)\n", __func__, operation, ulimit, verbose);
184 if(verbose>0) fprintf(stderr,
"Invalid image status.\n");
191 if(ret==0)
for(
int pi=0; pi<img1->
dimz; pi++)
194 if(verbose>0) fprintf(stderr,
"Image dimensions do not match.\n");
201 for(
int pi=0; pi<img1->
dimz; pi++)
for(
int yi=0; yi<img1->
dimy; yi++)
202 for(
int xi=0; xi<img1->
dimx; xi++)
for(
int fi=0; fi<img1->
dimt; fi++)
203 img1->
m[pi][yi][xi][fi]+=img2->
m[pi][yi][xi][0];
206 for(
int pi=0; pi<img1->
dimz; pi++)
for(
int yi=0; yi<img1->
dimy; yi++)
207 for(
int xi=0; xi<img1->
dimx; xi++)
for(
int fi=0; fi<img1->
dimt; fi++)
208 img1->
m[pi][yi][xi][fi]-=img2->
m[pi][yi][xi][0];
212 for(
int pi=0; pi<img1->
dimz; pi++)
for(
int yi=0; yi<img1->
dimy; yi++)
213 for(
int xi=0; xi<img1->
dimx; xi++) {
214 if(fabs(img2->
m[pi][yi][xi][0])>1.0E-8)
215 for(
int fi=0; fi<img1->
dimt; fi++)
216 img1->
m[pi][yi][xi][fi]/=img2->
m[pi][yi][xi][0];
217 else for(
int fi=0; fi<img1->
dimt; fi++) img1->
m[pi][yi][xi][fi]=0.0;
223 for(
int pi=0; pi<img1->
dimz; pi++)
for(
int yi=0; yi<img1->
dimy; yi++)
224 for(
int xi=0; xi<img1->
dimx; xi++)
for(
int fi=0; fi<img1->
dimt; fi++)
225 img1->
m[pi][yi][xi][fi]*=img2->
m[pi][yi][xi][0];
228 if(verbose>0) fprintf(stderr,
"Invalid operation.\n");
234 for(
int pi=0; pi<img1->
dimz; pi++)
for(
int yi=0; yi<img1->
dimy; yi++)
235 for(
int xi=0; xi<img1->
dimx; xi++)
for(
int fi=0; fi<img1->
dimt; fi++)
236 if(img1->
m[pi][yi][xi][fi]>ulimit) img1->
m[pi][yi][xi][fi]=ulimit;
254 for(
int pi=0; pi<img->
dimz; pi++)
255 for(
int yi=0; yi<img->
dimy; yi++)
256 for(
int xi=0; xi<img->
dimx; xi++)
257 for(
int fi=0; fi<img->
dimt; fi++) {
258 if(img->
m[pi][yi][xi][fi]<=0.0) img->
m[pi][yi][xi][fi]=0.0;
259 else img->
m[pi][yi][xi][fi]=log(img->
m[pi][yi][xi][fi]);
276 for(
int pi=0; pi<img->
dimz; pi++)
277 for(
int yi=0; yi<img->
dimy; yi++)
278 for(
int xi=0; xi<img->
dimx; xi++)
279 for(
int fi=0; fi<img->
dimt; fi++) {
280 if(img->
m[pi][yi][xi][fi]<=0.0) img->
m[pi][yi][xi][fi]=0.0;
281 else img->
m[pi][yi][xi][fi]=log10(img->
m[pi][yi][xi][fi]);
298 for(
int pi=0; pi<img->
dimz; pi++)
299 for(
int yi=0; yi<img->
dimy; yi++)
300 for(
int xi=0; xi<img->
dimx; xi++)
301 for(
int fi=0; fi<img->
dimt; fi++)
302 img->
m[pi][yi][xi][fi]=fabsf(img->
m[pi][yi][xi][fi]);
320 for(
int pi=0; pi<img->
dimz; pi++)
321 for(
int yi=0; yi<img->
dimy; yi++)
322 for(
int xi=0; xi<img->
dimx; xi++)
323 for(
int fi=0; fi<img->
dimt; fi++) {
324 if(img->
m[pi][yi][xi][fi]<=0.0) img->
m[pi][yi][xi][fi]=0.0;
326 img->
m[pi][yi][xi][fi]=1.0/img->
m[pi][yi][xi][fi];
327 if(!isfinite(img->
m[pi][yi][xi][fi])) img->
m[pi][yi][xi][fi]=0.0;
358 if(verbose>0) printf(
"%s(img, %d, %d, iimg, %d)\n", __func__, first, last, verbose);
360 int zi, yi, xi, fi, ret, times_exist;
361 float fstart, fend, dur, x, y, k;
364 if(img==NULL || iimg==NULL || first<0 || first>last)
return(1);
367 fstart=img->
start[first]; fend=img->
end[last];
368 if(verbose>1) printf(
" time_range := %g - %g\n", fstart, fend);
374 if(verbose>0) fprintf(stderr,
"Error %d in allocating memory for sum image.\n", ret);
379 iimg->
start[0]=fstart; iimg->
end[0]=fend;
386 if(img->
unit==CUNIT_KBQ_PER_ML) iimg->
unit=CUNIT_SEC_KBQ_PER_ML;
394 for(zi=0; zi<img->
dimz; zi++)
395 for(yi=0; yi<img->
dimy; yi++)
396 for(xi=0; xi<img->
dimx; xi++)
397 iimg->
m[zi][yi][xi][0]=dur*img->
m[zi][yi][xi][fi];
399 for(fi=first+1; fi<=last; fi++) {
404 for(zi=0; zi<img->
dimz; zi++)
405 for(yi=0; yi<img->
dimy; yi++)
406 for(xi=0; xi<img->
dimx; xi++)
407 iimg->
m[zi][yi][xi][0]+=dur*img->
m[zi][yi][xi][fi];
410 dur=img->
start[fi]-img->
end[fi-1];
if(dur<=1.0E-10)
continue;
412 x=0.5*(img->
start[fi]+img->
end[fi-1]);
413 for(zi=0; zi<img->
dimz; zi++)
414 for(yi=0; yi<img->
dimy; yi++)
415 for(xi=0; xi<img->
dimx; xi++) {
416 k=(img->
m[zi][yi][xi][fi]-img->
m[zi][yi][xi][fi-1])
417 /(img->
mid[fi]-img->
mid[fi-1]);
418 y=img->
m[zi][yi][xi][fi-1]+k*(x-img->
mid[fi-1]);
419 iimg->
m[zi][yi][xi][0]+=dur*y;
426 iimg->
end[0]=img->
end[last];
448 int fi, zi, xi, yi, notime=0;
452 if(operation!=0 && operation!=1)
return(1);
453 if(img==NULL)
return(2);
456 for(fi=0; fi<img->
dimt; fi++) {
457 f=img->
end[fi]-img->
start[fi];
if(f<=1.0E-12) notime++;
460 if(img->
dimt>1)
return(4);
464 for(fi=0; fi<img->
dimt; fi++) {
465 f=img->
end[fi]-img->
start[fi];
if(operation==1) f=1.0/f;
466 for(zi=0; zi<img->
dimz; zi++)
467 for(yi=0; yi<img->
dimy; yi++)
468 for(xi=0; xi<img->
dimx; xi++)
469 img->
m[zi][yi][xi][fi]*=f;
487 float conversion_factor=1.0;
489 if(img==NULL || unit==NULL)
return(1);
490 if(img->
unit==CUNIT_UNKNOWN)
return(1);
492 new_unit=
imgUnitId(unit);
if(new_unit<0)
return(1-new_unit);
494 if(img->
unit==new_unit)
return(0);
496 if(img->
unit==CUNIT_KBQ_PER_ML && new_unit==CUNIT_BQ_PER_ML)
497 conversion_factor=1000.0;
498 else if(img->
unit==CUNIT_BQ_PER_ML && new_unit==CUNIT_KBQ_PER_ML)
499 conversion_factor=0.001;
500 else if(img->
unit==CUNIT_KBQ_PER_ML && new_unit==CUNIT_NCI_PER_ML)
501 conversion_factor=27.027;
502 else if(img->
unit==CUNIT_NCI_PER_ML && new_unit==CUNIT_KBQ_PER_ML)
503 conversion_factor=0.037;
504 else if(img->
unit==CUNIT_NCI_PER_ML && new_unit==CUNIT_BQ_PER_ML)
505 conversion_factor=37.0;
506 else if(img->
unit==CUNIT_KBQ_PER_ML && new_unit==CUNIT_MBQ_PER_ML)
507 conversion_factor=0.001;
508 else if(img->
unit==CUNIT_MBQ_PER_ML && new_unit==CUNIT_KBQ_PER_ML)
509 conversion_factor=1000.0;
510 else if(img->
unit==CUNIT_PER_SEC && new_unit==CUNIT_PER_MIN)
511 conversion_factor=60.0;
512 else if(img->
unit==CUNIT_PER_MIN && new_unit==CUNIT_PER_SEC)
513 conversion_factor=1.0/60.0;
514 else if(img->
unit==CUNIT_ML_PER_ML && new_unit==CUNIT_ML_PER_DL)
515 conversion_factor=0.01;
516 else if(img->
unit==CUNIT_ML_PER_DL && new_unit==CUNIT_ML_PER_ML)
517 conversion_factor=100.0;
523 if(ret)
return(10+ret);
549 if(verbose>0) printf(
"%s(*img, *oimg)\n", __func__);
553 if(verbose>1) fprintf(stderr,
"Error: dynamic image required.\n");
557 if(verbose>1) fprintf(stderr,
"Error: unknown frame times.\n");
560 if(oimg==NULL)
return(3);
564 if(verbose>1) fprintf(stderr,
"Error: gaps or overlap between time frames.\n");
570 if(verbose>1) printf(
"allocating memory for %dx%dx%d pixels\n", img->
dimz, img->
dimy, img->
dimx);
577 oimg->
unit=CUNIT_UNKNOWN;
580 for(
int zi=0; zi<img->
dimz; zi++) {
581 for(
int yi=0; yi<img->
dimy; yi++) {
582 for(
int xi=0; xi<img->
dimx; xi++) {
583 oimg->
m[zi][yi][xi][0]=0.0;
584 for(
int ti=0; ti<img->
dimt; ti++) {
585 if(isnan(img->
m[zi][yi][xi][ti]))
continue;
586 float fdur=img->
end[ti]-img->
start[ti];
if(!(fdur>0.0)) fdur=0.0;
587 oimg->
m[zi][yi][xi][0]+=img->
m[zi][yi][xi][ti]*img->
mid[ti]*fdur;
615 if(verbose>0) printf(
"%s(*img, *oimg)\n", __func__);
619 if(verbose>1) fprintf(stderr,
"Error: dynamic image required.\n");
623 if(verbose>1) fprintf(stderr,
"Error: unknown frame times.\n");
626 if(oimg==NULL)
return(3);
630 if(verbose>1) fprintf(stderr,
"Error: gaps or overlap between time frames.\n");
636 if(verbose>1) printf(
"allocating memory for %dx%dx%d pixels\n", img->
dimz, img->
dimy, img->
dimx);
643 oimg->
unit=CUNIT_UNKNOWN;
646 for(
int zi=0; zi<img->
dimz; zi++) {
647 for(
int yi=0; yi<img->
dimy; yi++) {
648 for(
int xi=0; xi<img->
dimx; xi++) {
649 float aumc=0.0, auc=0.0;
650 for(
int ti=0; ti<img->
dimt; ti++) {
651 if(isnan(img->
m[zi][yi][xi][ti]))
continue;
652 float fdur=img->
end[ti]-img->
start[ti];
if(!(fdur>0.0)) fdur=0.0;
653 aumc+=img->
m[zi][yi][xi][ti]*img->
mid[ti]*fdur;
654 auc+=img->
m[zi][yi][xi][ti]*fdur;
657 if(isfinite(mrt)) oimg->
m[zi][yi][xi][0]=mrt;
else oimg->
m[zi][yi][xi][0]=0.0;
int imgExistentTimes(IMG *img)
int imgAllocate(IMG *image, int planes, int rows, int columns, int frames)
int imgCopyhdr(IMG *image1, IMG *image2)
int imgAllocateWithHeader(IMG *image, int planes, int rows, int columns, int frames, IMG *image_from)
void imgEmpty(IMG *image)
int imgAUMC(IMG *img, IMG *oimg, int verbose)
int imgMRT(IMG *img, IMG *oimg, int verbose)
int imgArithm(IMG *img1, IMG *img2, char operation, float ulimit, int verbose)
int imgFrameIntegral(IMG *img, int first, int last, IMG *iimg, int verbose)
int imgConvertUnit(IMG *img, char *unit)
int imgRawCountsPerTime(IMG *img, int operation)
int imgArithmConst(IMG *img, float operand, char operation, float ulimit, int verbose)
int imgArithmFrame(IMG *img1, IMG *img2, char operation, float ulimit, int verbose)
int imgFramesCheck(IMG *img, int verbose)
int imgUnitId(char *unit)
#define IMG_STATUS_OCCUPIED
#define IMG_DC_NONCORRECTED
Header file for libtpcimgp.