44 double s, dx, dy, d, v;
48 if(zi<0 || zi>=vol->
dimz)
return(2);
49 if(vol->
sizey<=0.0 || vol->
sizex<=0.0)
return(3);
53 for(yi=0; yi<vol->
dimy; yi++) {
54 dy=(0.5+(double)yi)*vol->
sizey - cy;
55 for(xi=0; xi<vol->
dimx; xi++) {
56 dx=(0.5+(double)xi)*vol->
sizex - cx;
57 vol->
v[zi][yi][xi]=0.0;
58 d=hypot(dx-0.25*vol->
sizex, dy-0.25*vol->
sizey);
59 vol->
v[zi][yi][xi]+=(v/2.0)*( erf((d+r)/(M_SQRT2*s)) - erf((d-r)/(M_SQRT2*s)) );
60 d=hypot(dx-0.25*vol->
sizex, dy+0.25*vol->
sizey);
61 vol->
v[zi][yi][xi]+=(v/2.0)*( erf((d+r)/(M_SQRT2*s)) - erf((d-r)/(M_SQRT2*s)) );
62 d=hypot(dx+0.25*vol->
sizex, dy-0.25*vol->
sizey);
63 vol->
v[zi][yi][xi]+=(v/2.0)*( erf((d+r)/(M_SQRT2*s)) - erf((d-r)/(M_SQRT2*s)) );
64 d=hypot(dx+0.25*vol->
sizex, dy+0.25*vol->
sizey);
65 vol->
v[zi][yi][xi]+=(v/2.0)*( erf((d+r)/(M_SQRT2*s)) - erf((d-r)/(M_SQRT2*s)) );
66 vol->
v[zi][yi][xi]*=0.25;
67 vol->
v[zi][yi][xi]+= cbkg;
99 double dx1, dy1, dx2, dy2, d1, d2, d3, d4, r2;
103 if(zi<0 || zi>=img->
dimz)
return(2);
104 if(img->
sizey<=0.0 || img->
sizex<=0.0)
return(3);
108 for(yi=0; yi<img->
dimy; yi++) {
109 dy1=dy2=(0.5+(double)yi)*img->
sizey - cy;
111 for(xi=0; xi<img->
dimx; xi++) {
112 dx1=dx2=(0.5+(double)xi)*img->
sizex - cx;
114 d1=dx1*dx1+dy1*dy1; d2=dx1*dx1+dy2*dy2;
115 d3=dx2*dx2+dy1*dy1; d4=dx2*dx2+dy2*dy2;
116 n=0;
if(d1<=r2) n++;
if(d2<=r2) n++;
if(d3<=r2) n++;
if(d4<=r2) n++;
117 for(fi=0; fi<img->
dimt; fi++)
118 img->
m[zi][yi][xi][fi]=0.25*((
double)n*cblo[fi]+(
double)(4-n)*cbkg[fi]);
168 if(zi<0 || zi>=img->
dimz)
return(2);
169 if(img->
sizey<=0.0 || img->
sizex<=0.0)
return(3);
170 if(cbkg==NULL || cblo==NULL)
return(4);
172 double d, s=FWHM/2.354820;
175 double v, w1, w2, w3, w4, dy, dx;
176 for(yi=0; yi<img->
dimy; yi++) {
177 dy=(0.5+(double)yi)*img->
sizey - cy;
178 for(xi=0; xi<img->
dimx; xi++) {
179 dx=(0.5+(double)xi)*img->
sizex - cx;
180 d=hypot(dx-0.25*img->
sizex, dy-0.25*img->
sizey);
181 w1=0.5*( erf((d+r)/(M_SQRT2*s)) - erf((d-r)/(M_SQRT2*s)) );
182 d=hypot(dx-0.25*img->
sizex, dy+0.25*img->
sizey);
183 w2=0.5*( erf((d+r)/(M_SQRT2*s)) - erf((d-r)/(M_SQRT2*s)) );
184 d=hypot(dx+0.25*img->
sizex, dy-0.25*img->
sizey);
185 w3=0.5*( erf((d+r)/(M_SQRT2*s)) - erf((d-r)/(M_SQRT2*s)) );
186 d=hypot(dx+0.25*img->
sizex, dy+0.25*img->
sizey);
187 w4=0.5*( erf((d+r)/(M_SQRT2*s)) - erf((d-r)/(M_SQRT2*s)) );
188 for(fi=0; fi<img->
dimt; fi++) {
190 img->
m[zi][yi][xi][fi]= 0.25*v*(w1+w2+w3+w4) + cbkg[fi];
195 double dx1, dy1, dx2, dy2, d1, d2, d3, d4, r2;
199 for(yi=0; yi<img->
dimy; yi++) {
200 dy1=dy2=(0.5+(double)yi)*img->
sizey - cy;
202 for(xi=0; xi<img->
dimx; xi++) {
203 dx1=dx2=(0.5+(double)xi)*img->
sizex - cx;
205 d1=dx1*dx1+dy1*dy1; d2=dx1*dx1+dy2*dy2;
206 d3=dx2*dx2+dy1*dy1; d4=dx2*dx2+dy2*dy2;
207 n=0;
if(d1<=r2) n++;
if(d2<=r2) n++;
if(d3<=r2) n++;
if(d4<=r2) n++;
208 for(fi=0; fi<img->
dimt; fi++)
209 img->
m[zi][yi][xi][fi]=0.25*((
double)n*cblo[fi]+(
double)(4-n)*cbkg[fi]);
int idiSimulateTubeImgPlane(int simmet, IMG *img, int zi, double cx, double cy, double r, double FWHM, double *cbkg, double *cblo)
int idiSimulateTubeImg(IMG *img, int zi, double cx, double cy, double r, double *cbkg, double *cblo)
int idiSimulateTubeVol(VOL *vol, int zi, double cx, double cy, double r, double FWHM, double cbkg, double cblo)