TPCCLIB
Toggle main menu visibility
Loading...
Searching...
No Matches
libtpcidi
peak.c
Go to the documentation of this file.
1
5
/*****************************************************************************/
6
#include "
libtpcidi.h
"
7
/*****************************************************************************/
8
9
/*****************************************************************************/
14
int
imgGetConcWeightedPeakPos
(
17
IMG
*img,
19
float
thrs,
21
IMG_PIXEL
*pos,
23
int
verbose
24
) {
25
if
(verbose>0) printf(
"%s(img, %g, ...)\n"
, __func__, thrs);
26
27
int
xi, yi, zi, fi=0;
28
float
d, fmax, fmin, thrslev;
29
float
px, py, pz, fsum;
30
31
if
(img->
status
<
IMG_STATUS_OCCUPIED
)
return
(1);
32
if
(img->
dimz
<1 || img->
dimx
<2 || img->
dimy
<2)
return
(2);
33
if
(img->
dimt
<1)
return
(3);
34
if
(thrs<=0.0 || thrs>=1.0)
return
(4);
35
if
(pos==NULL)
return
(5);
36
37
38
/* Search min and max value inside the image volume */
39
zi=yi=xi=0; fmax=fmin=img->
m
[zi][yi][xi][fi];
40
for
(zi=0; zi<img->
dimz
; zi++)
41
for
(yi=0; yi<img->
dimy
; yi++)
42
for
(xi=0; xi<img->
dimx
; xi++) {
43
if
(img->
m
[zi][yi][xi][fi] > fmax) fmax=img->
m
[zi][yi][xi][fi];
44
else
if
(img->
m
[zi][yi][xi][fi] < fmin) fmin=img->
m
[zi][yi][xi][fi];
45
}
46
if
(verbose>1) printf(
"fmin := %g\nfmax := %g\n"
, fmin, fmax);
47
48
/* Calculate threshold level from min and max */
49
d=fmax-fmin;
if
(d<=0.0)
return
(10);
50
thrslev=d*thrs+fmin;
if
(verbose>1) printf(
"thrslev := %g\n"
, thrslev);
51
52
/* Calculate concentration weighted peak position */
53
px=py=pz=0.0; fsum=0.0;
54
for
(zi=0; zi<img->
dimz
; zi++)
55
for
(yi=0; yi<img->
dimy
; yi++)
56
for
(xi=0; xi<img->
dimx
; xi++) {
57
d=img->
m
[zi][yi][xi][fi]-thrslev;
58
if
(d>0.0) {
59
px+=(float)(xi+1)*d;
60
py+=(float)(yi+1)*d;
61
pz+=(float)(zi+1)*d;
62
fsum+=d;
63
}
64
}
65
if
(fsum<=0.0)
return
5;
66
px/=fsum; py/=fsum; pz/=fsum;
67
if
(verbose>1) printf(
"peak_pos := (%g,%g,%g)\n"
, px, py, pz);
68
pos->
x
=roundf(px); pos->
y
=roundf(py); pos->
z
=roundf(pz); pos->
f
=1;
69
70
return
(0);
71
}
72
/*****************************************************************************/
73
74
/*****************************************************************************/
libtpcidi.h
Header file for libtpcidi.
IMG_STATUS_OCCUPIED
#define IMG_STATUS_OCCUPIED
Definition
libtpcimgio.h:1479
imgGetConcWeightedPeakPos
int imgGetConcWeightedPeakPos(IMG *img, float thrs, IMG_PIXEL *pos, int verbose)
Definition
peak.c:14
IMG_PIXEL
Definition
libtpcimgio.h:1603
IMG_PIXEL::y
int y
Definition
libtpcimgio.h:1607
IMG_PIXEL::z
int z
Definition
libtpcimgio.h:1609
IMG_PIXEL::x
int x
Definition
libtpcimgio.h:1605
IMG_PIXEL::f
int f
Definition
libtpcimgio.h:1611
IMG
Definition
libtpcimgio.h:1657
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::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