TPCCLIB
Toggle main menu visibility
Loading...
Searching...
No Matches
libtpcidi
circle.c
Go to the documentation of this file.
1
5
/*****************************************************************************/
6
#include "
libtpcidi.h
"
7
/*****************************************************************************/
8
9
/*****************************************************************************/
16
int
imgCircleMask
(
20
IMG
*img,
22
int
zi,
24
double
cx,
26
double
cy,
28
double
r,
31
double
mv,
34
double
*smv,
36
int
verbose
37
) {
38
if
(verbose>0) printf(
"%s(img, %d, %g, %g, %g, %g, ...)\n"
, __func__, zi, cx, cy, r, mv);
39
40
int
n, xi, yi, fi, i, j;
41
double
dx[5], dy[5], r2, v;
42
43
if
(img->
status
<
IMG_STATUS_OCCUPIED
)
return
(1);
44
if
(zi<0 || zi>=img->
dimz
)
return
(2);
45
if
(img->
sizey
<=0.0 || img->
sizex
<=0.0)
return
(3);
46
if
(img->
sizey
!=img->
sizex
)
return
(4);
47
if
(img->
dimt
<1)
return
(5);
48
49
if
(smv!=NULL) *smv=0.0;
50
/* Compare r^2 to sum of squared distances instead of square root */
51
r2=r*r;
52
for
(yi=0; yi<img->
dimy
; yi++) {
53
dy[0]=(0.1+(double)yi)*img->
sizey
- cy;
54
for
(j=1; j<5; j++) dy[j]=dy[j-1]+0.2*img->
sizey
;
55
for
(xi=0; xi<img->
dimx
; xi++) {
56
dx[0]=(0.1+(double)xi)*img->
sizex
- cx;
57
for
(i=1; i<5; i++) dx[i]=dx[i-1]+0.2*img->
sizex
;
58
for
(i=0, n=0; i<5; i++)
for
(j=0; j<5; j++)
if
((dx[i]*dx[i]+dy[j]*dy[j])<r2) n++;
59
if
(n==0)
continue
;
60
v=(double)n*mv/25.0;
61
for
(fi=0; fi<img->
dimt
; fi++) img->
m
[zi][yi][xi][fi]+=v;
62
if
(smv!=NULL) *smv+=v;
63
}
64
}
65
66
return
(0);
67
}
68
/*****************************************************************************/
69
70
/*****************************************************************************/
77
int
imgRingMask
(
81
IMG
*img,
83
int
zi,
85
double
cx,
87
double
cy,
89
double
r1,
91
double
r2,
94
double
mv,
97
double
*smv,
99
int
verbose
100
) {
101
int
ret;
102
double
mv1, mv2, d;
103
104
if
(verbose>0) printf(
"%s(img, %d, %g, %g, %g, %g, %g, ...)\n"
, __func__, zi, cx, cy, r1, r2, mv);
105
if
(r1>=r2 || r1<0.0) {
106
if
(verbose>0) fprintf(stderr,
"Error: invalid radius.\n"
);
107
return
(1);
108
}
109
110
/* Simulate circle with the larger radius */
111
ret=
imgCircleMask
(img, zi, cx, cy, r2, mv, &mv1, verbose);
112
if
(ret!=0) {
113
if
(verbose>0) fprintf(stderr,
"Error: cannot simulate circle 1.\n"
);
114
return
(ret);
115
}
116
/* Subtract circle with the smaller radius */
117
ret=
imgCircleMask
(img, zi, cx, cy, r1, -mv, &mv2, verbose);
118
if
(ret!=0) {
119
if
(verbose>0) fprintf(stderr,
"Error: cannot simulate circle 2.\n"
);
120
return
(ret);
121
}
122
/* Calculate the sum of mask pixel values */
123
d=mv1+mv2;
if
(smv!=NULL) *smv=d;
124
if
(d==0.0 && verbose>0) {fprintf(stderr,
"Warning: empty mask image created.\n"
); fflush(stderr);}
125
return
(0);
126
}
127
/*****************************************************************************/
128
129
/*****************************************************************************/
imgRingMask
int imgRingMask(IMG *img, int zi, double cx, double cy, double r1, double r2, double mv, double *smv, int verbose)
Definition
circle.c:77
imgCircleMask
int imgCircleMask(IMG *img, int zi, double cx, double cy, double r, double mv, double *smv, int verbose)
Definition
circle.c:16
libtpcidi.h
Header file for libtpcidi.
IMG_STATUS_OCCUPIED
#define IMG_STATUS_OCCUPIED
Definition
libtpcimgio.h:1479
IMG
Definition
libtpcimgio.h:1657
IMG::sizex
float sizex
Definition
libtpcimgio.h:1714
IMG::dimx
unsigned short int dimx
Definition
libtpcimgio.h:1780
IMG::m
float **** m
Definition
libtpcimgio.h:1799
IMG::status
char status
Definition
libtpcimgio.h:1665
IMG::dimt
unsigned short int dimt
Definition
libtpcimgio.h:1778
IMG::sizey
float sizey
Definition
libtpcimgio.h:1716
IMG::dimz
unsigned short int dimz
Definition
libtpcimgio.h:1784
IMG::dimy
unsigned short int dimy
Definition
libtpcimgio.h:1782
Generated on
for TPCCLIB by
1.17.0