TPCCLIB
Loading...
Searching...
No Matches
misc.c File Reference

Misc functions processing both IMG and TAC structures. More...

#include "tpcclibConfig.h"
#include "tpctacimg.h"

Go to the source code of this file.

Functions

int tacAllocateWithIMG (TAC *tac, IMG *img, int tacNr)
 Allocate TAC based on data in IMG.
int imgVb (IMG *img, TAC *btac, double Vb, const int simVb, const int petVolume)
 Correct pixel TACs for vascular blood, or simulate its effect.

Detailed Description

Misc functions processing both IMG and TAC structures.

Definition in file misc.c.

Function Documentation

◆ imgVb()

int imgVb ( IMG * img,
TAC * btac,
double Vb,
const int simVb,
const int petVolume )

Correct pixel TACs for vascular blood, or simulate its effect.

See also
tacVb
Returns
enum tpcerror (TPCERROR_OK when successful).
Parameters
imgPointer to IMG data to process.
btacPointer to BTAC data to subtract or add; must contain the same sample times as IMG and y values must be in the same units.
VbVb fraction [0,1].
simVbSwitch to either subtract vascular volume (0) or to simulate it (1).
petVolumeSwitch to model vascular volume as either 0 : Cpet = (1-Vb)*Ct + Vb*Cb, or 1 : Cpet = Ct + Vb*Cb

Definition at line 56 of file misc.c.

70 {
71 if(img==NULL || btac==NULL) return(TPCERROR_FAIL);
72 if(img->dimt<1 || btac->tacNr<1) return(TPCERROR_NO_DATA);
73 if(img->dimt>btac->sampleNr) return(TPCERROR_INCOMPATIBLE_DATA);
74 if(!(Vb>=0.0) || !(Vb<=1.0)) return TPCERROR_INVALID_VALUE;
75 if(Vb==1.0 && petVolume==0 && simVb==0) // combination would lead to divide by zero
77
78 if(simVb==0) {
79 for(int zi=0; zi<img->dimz; zi++)
80 for(int yi=0; yi<img->dimy; yi++)
81 for(int xi=0; xi<img->dimx; xi++)
82 for(int ti=0; ti<img->dimt; ti++) {
83 img->m[zi][yi][xi][ti]-=Vb*btac->c[0].y[ti];
84 if(petVolume==0) img->m[zi][yi][xi][ti]/=(1.0-Vb);
85 }
86 } else {
87 for(int zi=0; zi<img->dimz; zi++)
88 for(int yi=0; yi<img->dimy; yi++)
89 for(int xi=0; xi<img->dimx; xi++)
90 for(int ti=0; ti<img->dimt; ti++) {
91 if(petVolume==0) img->m[zi][yi][xi][ti]*=(1.0-Vb);
92 img->m[zi][yi][xi][ti]+=Vb*btac->c[0].y[ti];
93 }
94 }
95
96 return(TPCERROR_OK);
97}
unsigned short int dimx
Definition tpcimage.h:112
float **** m
Definition tpcimage.h:161
unsigned short int dimt
Definition tpcimage.h:110
unsigned short int dimz
Definition tpcimage.h:116
unsigned short int dimy
Definition tpcimage.h:114
double * y
Definition tpctac.h:75
int sampleNr
Definition tpctac.h:89
TACC * c
Definition tpctac.h:117
int tacNr
Definition tpctac.h:91
@ TPCERROR_INVALID_VALUE
Invalid value.
@ TPCERROR_FAIL
General error.
@ TPCERROR_OK
No error.
@ TPCERROR_NO_DATA
File contains no data.
@ TPCERROR_INCOMPATIBLE_DATA
Incompatible data.

◆ tacAllocateWithIMG()

int tacAllocateWithIMG ( TAC * tac,
IMG * img,
int tacNr )

Allocate TAC based on data in IMG.

See also
tacAllocate, tacAllocateMore, tacDuplicate, tacAllocateWithPAR
Returns
enum tpcerror (TPCERROR_OK when successful).
Author
Vesa Oikonen
Parameters
tacPointer to initiated TAC structure; any old contents are deleted. TAC sampleNr and tacNr will be set, although contents will be empty.
Precondition
Structure must be initiated with tacInit.
Parameters
imgPointer to IMG structure which contains frame times and units.
tacNrNumber of TACs to allocate.

Definition at line 16 of file misc.c.

25 {
26 /* Check the input */
27 if(tac==NULL || img==NULL || tacNr<1) return(TPCERROR_FAIL);
28 if(img->dimt<1) return(TPCERROR_NO_DATA);
29
30 /* Allocate TAC */
31 int ret=tacAllocate(tac, img->dimt, tacNr);
32 if(ret!=TPCERROR_OK) return(ret);
33 tac->sampleNr=img->dimt; tac->tacNr=tacNr;
34
35 /* Copy frame times */
36 tac->isframe=1;
37 for(int i=0; i<img->dimt; i++) {
38 tac->x1[i]=img->x1[i];
39 tac->x2[i]=img->x2[i];
40 tac->x[i]=0.5*(tac->x1[i]+tac->x2[i]);
41 }
42
43 /* Copy data units */
44 tac->cunit=img->cunit;
45 tac->tunit=img->tunit;
46
47 return(TPCERROR_OK);
48}
float * x1
Definition tpcimage.h:180
unit cunit
Definition tpcimage.h:203
float * x2
Definition tpcimage.h:182
unit tunit
Definition tpcimage.h:205
double * x
Definition tpctac.h:97
unit cunit
Definition tpctac.h:105
int isframe
Definition tpctac.h:95
double * x2
Definition tpctac.h:101
unit tunit
Definition tpctac.h:109
double * x1
Definition tpctac.h:99
int tacAllocate(TAC *tac, int sampleNr, int tacNr)
Definition tac.c:130