File Coverage

lib/PDL/Image2D-pp-centroid2d.c
Criterion Covered Total %
statement 71 469 15.1
branch 89 1764 5.0
condition n/a
subroutine n/a
pod n/a
total 160 2233 7.1


line stmt bran cond sub pod time code
1              
2             #line 453 "lib/PDL/PP.pm"
3             /*
4             * THIS FILE WAS GENERATED BY PDL::PP from lib/PDL/Image2D.pd! Do not modify!
5             */
6              
7             #define PDL_FREE_CODE(trans, destroy, comp_free_code, ntpriv_free_code) \
8             if (destroy) { \
9             comp_free_code \
10             } \
11             if ((trans)->dims_redone) { \
12             ntpriv_free_code \
13             }
14              
15             #include "EXTERN.h"
16             #include "perl.h"
17             #include "XSUB.h"
18             #include "pdl.h"
19             #include "pdlcore.h"
20             #define PDL PDL_Image2D
21             extern Core* PDL; /* Structure hold core C functions */
22             #line 23 "lib/PDL/Image2D-pp-centroid2d.c"
23              
24             /* Fast Modulus with proper negative behaviour */
25              
26             #define REALMOD(a,b) {while ((a)>=(b)) (a) -= (b); while ((a)<0) (a) += (b);}
27              
28             #define X(symbol, ctype, ppsym, ...) \
29             ctype quick_select_ ## ppsym(ctype arr[], int n);
30             PDL_TYPELIST_REAL(X)
31             #undef X
32             #define EZ(x) ez ? 0 : (x)
33              
34             #line 1857 "lib/PDL/PP.pm"
35             pdl_error pdl_centroid2d_readdata(pdl_trans *__privtrans) {
36             pdl_error PDL_err = {0, NULL, 0};
37             #line 38 "lib/PDL/Image2D-pp-centroid2d.c"
38 2           register PDL_Indx __m_size = __privtrans->ind_sizes[0];
39 2           register PDL_Indx __n_size = __privtrans->ind_sizes[1];
40 2 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in centroid2d:" "broadcast.incs NULL");
41             /* broadcastloop declarations */
42             int __brcloopval;
43             register PDL_Indx __tind0,__tind1; /* counters along dim */
44 2           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
45             /* dims here are how many steps along those dims */
46 2           register PDL_Indx __tinc0_im = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
47 2           register PDL_Indx __tinc0_x = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
48 2           register PDL_Indx __tinc0_y = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
49 2           register PDL_Indx __tinc0_box = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
50 2           register PDL_Indx __tinc0_xcen = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
51 2           register PDL_Indx __tinc0_ycen = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
52 2           register PDL_Indx __tinc1_im = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
53 2           register PDL_Indx __tinc1_x = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
54 2           register PDL_Indx __tinc1_y = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
55 2           register PDL_Indx __tinc1_box = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
56 2           register PDL_Indx __tinc1_xcen = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
57 2           register PDL_Indx __tinc1_ycen = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
58             #define PDL_BROADCASTLOOP_START_centroid2d_readdata PDL_BROADCASTLOOP_START( \
59             readdata, \
60             __privtrans->broadcast, \
61             __privtrans->vtable, \
62             im_datap += __offsp[0]; \
63             x_datap += __offsp[1]; \
64             y_datap += __offsp[2]; \
65             box_datap += __offsp[3]; \
66             xcen_datap += __offsp[4]; \
67             ycen_datap += __offsp[5]; \
68             , \
69             ( ,im_datap += __tinc1_im - __tinc0_im * __tdims0 \
70             ,x_datap += __tinc1_x - __tinc0_x * __tdims0 \
71             ,y_datap += __tinc1_y - __tinc0_y * __tdims0 \
72             ,box_datap += __tinc1_box - __tinc0_box * __tdims0 \
73             ,xcen_datap += __tinc1_xcen - __tinc0_xcen * __tdims0 \
74             ,ycen_datap += __tinc1_ycen - __tinc0_ycen * __tdims0 \
75             ), \
76             ( ,im_datap += __tinc0_im \
77             ,x_datap += __tinc0_x \
78             ,y_datap += __tinc0_y \
79             ,box_datap += __tinc0_box \
80             ,xcen_datap += __tinc0_xcen \
81             ,ycen_datap += __tinc0_ycen \
82             ) \
83             )
84             #define PDL_BROADCASTLOOP_END_centroid2d_readdata PDL_BROADCASTLOOP_END( \
85             __privtrans->broadcast, \
86             im_datap -= __tinc1_im * __tdims1 + __offsp[0]; \
87             x_datap -= __tinc1_x * __tdims1 + __offsp[1]; \
88             y_datap -= __tinc1_y * __tdims1 + __offsp[2]; \
89             box_datap -= __tinc1_box * __tdims1 + __offsp[3]; \
90             xcen_datap -= __tinc1_xcen * __tdims1 + __offsp[4]; \
91             ycen_datap -= __tinc1_ycen * __tdims1 + __offsp[5]; \
92             )
93 2           register PDL_Indx __inc_im_m = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_im_m;register PDL_Indx __inc_im_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_im_n;
94             #ifndef PDL_DECLARE_PARAMS_centroid2d_1
95             #define PDL_DECLARE_PARAMS_centroid2d_1(PDL_TYPE_OP,PDL_PPSYM_OP) \
96             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, im, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
97             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, x, (__privtrans->pdls[1]), 1, PDL_PPSYM_OP) \
98             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, y, (__privtrans->pdls[2]), 1, PDL_PPSYM_OP) \
99             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, box, (__privtrans->pdls[3]), 1, PDL_PPSYM_OP) \
100             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, xcen, (__privtrans->pdls[4]), 1, PDL_PPSYM_OP) \
101             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, ycen, (__privtrans->pdls[5]), 1, PDL_PPSYM_OP)
102             #endif
103 2 100         if ( __privtrans->bvalflag ) { /* ** do 'bad' Code ** */
104             #define PDL_BAD_CODE
105             #define PDL_IF_BAD(t,f) t
106 1           switch (__privtrans->__datatype) { /* Start generic switch */
107 0           case PDL_SB: {
108 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_SByte,A)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
109 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
110 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
111 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
112 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
113 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
114 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
115 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
116 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
117 0 0         PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,A,im_badval_isnan) ) continue;,)
    0          
118 0           sum += data;
119 0           sumx += data*m;
120 0           sumy += data*n;
121             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
122             /*
123             * if sum == 0 then we will flag as bad -- although it could just mean that
124             * there is negative values in the dataset.
125             * - should use a better check than != 0.0 ...
126             */
127 0 0         PDL_IF_BAD(if ( sum == 0.0 ) {
128             (xcen_datap)[0]=xcen_badval;
129             (ycen_datap)[0]=ycen_badval;
130             } else,) {
131 0           (xcen_datap)[0] = sumx/sum;
132 0           (ycen_datap)[0] = sumy/sum;
133             }
134 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
135 0           } break;
136 0           case PDL_B: {
137 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
138 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
139 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
140 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
141 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
142 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
143 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
144 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
145 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
146 0 0         PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,B,im_badval_isnan) ) continue;,)
    0          
147 0           sum += data;
148 0           sumx += data*m;
149 0           sumy += data*n;
150             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
151             /*
152             * if sum == 0 then we will flag as bad -- although it could just mean that
153             * there is negative values in the dataset.
154             * - should use a better check than != 0.0 ...
155             */
156 0 0         PDL_IF_BAD(if ( sum == 0.0 ) {
157             (xcen_datap)[0]=xcen_badval;
158             (ycen_datap)[0]=ycen_badval;
159             } else,) {
160 0           (xcen_datap)[0] = sumx/sum;
161 0           (ycen_datap)[0] = sumy/sum;
162             }
163 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
164 0           } break;
165 0           case PDL_S: {
166 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Short,S)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
167 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
168 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
169 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
170 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
171 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
172 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
173 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
174 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
175 0 0         PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,S,im_badval_isnan) ) continue;,)
    0          
176 0           sum += data;
177 0           sumx += data*m;
178 0           sumy += data*n;
179             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
180             /*
181             * if sum == 0 then we will flag as bad -- although it could just mean that
182             * there is negative values in the dataset.
183             * - should use a better check than != 0.0 ...
184             */
185 0 0         PDL_IF_BAD(if ( sum == 0.0 ) {
186             (xcen_datap)[0]=xcen_badval;
187             (ycen_datap)[0]=ycen_badval;
188             } else,) {
189 0           (xcen_datap)[0] = sumx/sum;
190 0           (ycen_datap)[0] = sumy/sum;
191             }
192 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
193 0           } break;
194 0           case PDL_US: {
195 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Ushort,U)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
196 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
197 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
198 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
199 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
200 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
201 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
202 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
203 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
204 0 0         PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,U,im_badval_isnan) ) continue;,)
    0          
205 0           sum += data;
206 0           sumx += data*m;
207 0           sumy += data*n;
208             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
209             /*
210             * if sum == 0 then we will flag as bad -- although it could just mean that
211             * there is negative values in the dataset.
212             * - should use a better check than != 0.0 ...
213             */
214 0 0         PDL_IF_BAD(if ( sum == 0.0 ) {
215             (xcen_datap)[0]=xcen_badval;
216             (ycen_datap)[0]=ycen_badval;
217             } else,) {
218 0           (xcen_datap)[0] = sumx/sum;
219 0           (ycen_datap)[0] = sumy/sum;
220             }
221 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
222 0           } break;
223 0           case PDL_L: {
224 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
225 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
226 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
227 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
228 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
229 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
230 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
231 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
232 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
233 0 0         PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,L,im_badval_isnan) ) continue;,)
    0          
234 0           sum += data;
235 0           sumx += data*m;
236 0           sumy += data*n;
237             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
238             /*
239             * if sum == 0 then we will flag as bad -- although it could just mean that
240             * there is negative values in the dataset.
241             * - should use a better check than != 0.0 ...
242             */
243 0 0         PDL_IF_BAD(if ( sum == 0.0 ) {
244             (xcen_datap)[0]=xcen_badval;
245             (ycen_datap)[0]=ycen_badval;
246             } else,) {
247 0           (xcen_datap)[0] = sumx/sum;
248 0           (ycen_datap)[0] = sumy/sum;
249             }
250 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
251 0           } break;
252 0           case PDL_UL: {
253 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_ULong,K)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
254 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
255 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
256 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
257 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
258 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
259 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
260 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
261 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
262 0 0         PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,K,im_badval_isnan) ) continue;,)
    0          
263 0           sum += data;
264 0           sumx += data*m;
265 0           sumy += data*n;
266             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
267             /*
268             * if sum == 0 then we will flag as bad -- although it could just mean that
269             * there is negative values in the dataset.
270             * - should use a better check than != 0.0 ...
271             */
272 0 0         PDL_IF_BAD(if ( sum == 0.0 ) {
273             (xcen_datap)[0]=xcen_badval;
274             (ycen_datap)[0]=ycen_badval;
275             } else,) {
276 0           (xcen_datap)[0] = sumx/sum;
277 0           (ycen_datap)[0] = sumy/sum;
278             }
279 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
280 0           } break;
281 0           case PDL_IND: {
282 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
283 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
284 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
285 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
286 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
287 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
288 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
289 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
290 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
291 0 0         PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,N,im_badval_isnan) ) continue;,)
    0          
292 0           sum += data;
293 0           sumx += data*m;
294 0           sumy += data*n;
295             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
296             /*
297             * if sum == 0 then we will flag as bad -- although it could just mean that
298             * there is negative values in the dataset.
299             * - should use a better check than != 0.0 ...
300             */
301 0 0         PDL_IF_BAD(if ( sum == 0.0 ) {
302             (xcen_datap)[0]=xcen_badval;
303             (ycen_datap)[0]=ycen_badval;
304             } else,) {
305 0           (xcen_datap)[0] = sumx/sum;
306 0           (ycen_datap)[0] = sumy/sum;
307             }
308 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
309 0           } break;
310 0           case PDL_ULL: {
311 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_ULongLong,P)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
312 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
313 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
314 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
315 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
316 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
317 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
318 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
319 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
320 0 0         PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,P,im_badval_isnan) ) continue;,)
    0          
321 0           sum += data;
322 0           sumx += data*m;
323 0           sumy += data*n;
324             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
325             /*
326             * if sum == 0 then we will flag as bad -- although it could just mean that
327             * there is negative values in the dataset.
328             * - should use a better check than != 0.0 ...
329             */
330 0 0         PDL_IF_BAD(if ( sum == 0.0 ) {
331             (xcen_datap)[0]=xcen_badval;
332             (ycen_datap)[0]=ycen_badval;
333             } else,) {
334 0           (xcen_datap)[0] = sumx/sum;
335 0           (ycen_datap)[0] = sumy/sum;
336             }
337 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
338 0           } break;
339 0           case PDL_LL: {
340 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_LongLong,Q)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
341 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
342 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
343 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
344 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
345 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
346 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
347 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
348 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
349 0 0         PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,Q,im_badval_isnan) ) continue;,)
    0          
350 0           sum += data;
351 0           sumx += data*m;
352 0           sumy += data*n;
353             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
354             /*
355             * if sum == 0 then we will flag as bad -- although it could just mean that
356             * there is negative values in the dataset.
357             * - should use a better check than != 0.0 ...
358             */
359 0 0         PDL_IF_BAD(if ( sum == 0.0 ) {
360             (xcen_datap)[0]=xcen_badval;
361             (ycen_datap)[0]=ycen_badval;
362             } else,) {
363 0           (xcen_datap)[0] = sumx/sum;
364 0           (ycen_datap)[0] = sumy/sum;
365             }
366 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
367 0           } break;
368 0           case PDL_F: {
369 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Float,F)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
370 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
371 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
372 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
373 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
374 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
375 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
376 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
377 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
378 0 0         PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,F,im_badval_isnan) ) continue;,)
    0          
379 0           sum += data;
380 0           sumx += data*m;
381 0           sumy += data*n;
382             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
383             /*
384             * if sum == 0 then we will flag as bad -- although it could just mean that
385             * there is negative values in the dataset.
386             * - should use a better check than != 0.0 ...
387             */
388 0 0         PDL_IF_BAD(if ( sum == 0.0 ) {
389             (xcen_datap)[0]=xcen_badval;
390             (ycen_datap)[0]=ycen_badval;
391             } else,) {
392 0           (xcen_datap)[0] = sumx/sum;
393 0           (ycen_datap)[0] = sumy/sum;
394             }
395 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
396 0           } break;
397 1           case PDL_D: {
398 1 50         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Double,D)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
399 4 50         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    50          
    50          
    50          
    50          
    100          
    100          
400 1           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
401 1           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
402 1           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
403 1           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
404 1           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
405 421 100         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    100          
406 400           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
407 400 50         PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,D,im_badval_isnan) ) continue;,)
    100          
408 316           sum += data;
409 316           sumx += data*m;
410 316           sumy += data*n;
411             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
412             /*
413             * if sum == 0 then we will flag as bad -- although it could just mean that
414             * there is negative values in the dataset.
415             * - should use a better check than != 0.0 ...
416             */
417 1 50         PDL_IF_BAD(if ( sum == 0.0 ) {
418             (xcen_datap)[0]=xcen_badval;
419             (ycen_datap)[0]=ycen_badval;
420             } else,) {
421 1           (xcen_datap)[0] = sumx/sum;
422 1           (ycen_datap)[0] = sumy/sum;
423             }
424 1 50         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    50          
425 1           } break;
426 0           case PDL_LD: {
427 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_LDouble,E)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
428 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
429 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
430 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
431 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
432 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
433 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
434 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
435 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
436 0 0         PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,E,im_badval_isnan) ) continue;,)
    0          
437 0           sum += data;
438 0           sumx += data*m;
439 0           sumy += data*n;
440             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
441             /*
442             * if sum == 0 then we will flag as bad -- although it could just mean that
443             * there is negative values in the dataset.
444             * - should use a better check than != 0.0 ...
445             */
446 0 0         PDL_IF_BAD(if ( sum == 0.0 ) {
447             (xcen_datap)[0]=xcen_badval;
448             (ycen_datap)[0]=ycen_badval;
449             } else,) {
450 0           (xcen_datap)[0] = sumx/sum;
451 0           (ycen_datap)[0] = sumy/sum;
452             }
453 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
454 0           } break;
455 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in centroid2d: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
456             }
457             #undef PDL_BAD_CODE
458             #undef PDL_IF_BAD
459             } else { /* ** else do 'good' Code ** */
460             #define PDL_IF_BAD(t,f) f
461 1           switch (__privtrans->__datatype) { /* Start generic switch */
462 0           case PDL_SB: {
463 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_SByte,A)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
464 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
465 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
466 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
467 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
468 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
469 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
470 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
471 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
472             PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,A,im_badval_isnan) ) continue;,)
473 0           sum += data;
474 0           sumx += data*m;
475 0           sumy += data*n;
476             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
477             /*
478             * if sum == 0 then we will flag as bad -- although it could just mean that
479             * there is negative values in the dataset.
480             * - should use a better check than != 0.0 ...
481             */
482             PDL_IF_BAD(if ( sum == 0.0 ) {
483             (xcen_datap)[0]=xcen_badval;
484             (ycen_datap)[0]=ycen_badval;
485             } else,) {
486 0           (xcen_datap)[0] = sumx/sum;
487 0           (ycen_datap)[0] = sumy/sum;
488             }
489 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
490 0           } break;
491 0           case PDL_B: {
492 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
493 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
494 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
495 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
496 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
497 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
498 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
499 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
500 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
501             PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,B,im_badval_isnan) ) continue;,)
502 0           sum += data;
503 0           sumx += data*m;
504 0           sumy += data*n;
505             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
506             /*
507             * if sum == 0 then we will flag as bad -- although it could just mean that
508             * there is negative values in the dataset.
509             * - should use a better check than != 0.0 ...
510             */
511             PDL_IF_BAD(if ( sum == 0.0 ) {
512             (xcen_datap)[0]=xcen_badval;
513             (ycen_datap)[0]=ycen_badval;
514             } else,) {
515 0           (xcen_datap)[0] = sumx/sum;
516 0           (ycen_datap)[0] = sumy/sum;
517             }
518 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
519 0           } break;
520 0           case PDL_S: {
521 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Short,S)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
522 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
523 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
524 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
525 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
526 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
527 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
528 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
529 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
530             PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,S,im_badval_isnan) ) continue;,)
531 0           sum += data;
532 0           sumx += data*m;
533 0           sumy += data*n;
534             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
535             /*
536             * if sum == 0 then we will flag as bad -- although it could just mean that
537             * there is negative values in the dataset.
538             * - should use a better check than != 0.0 ...
539             */
540             PDL_IF_BAD(if ( sum == 0.0 ) {
541             (xcen_datap)[0]=xcen_badval;
542             (ycen_datap)[0]=ycen_badval;
543             } else,) {
544 0           (xcen_datap)[0] = sumx/sum;
545 0           (ycen_datap)[0] = sumy/sum;
546             }
547 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
548 0           } break;
549 0           case PDL_US: {
550 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Ushort,U)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
551 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
552 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
553 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
554 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
555 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
556 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
557 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
558 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
559             PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,U,im_badval_isnan) ) continue;,)
560 0           sum += data;
561 0           sumx += data*m;
562 0           sumy += data*n;
563             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
564             /*
565             * if sum == 0 then we will flag as bad -- although it could just mean that
566             * there is negative values in the dataset.
567             * - should use a better check than != 0.0 ...
568             */
569             PDL_IF_BAD(if ( sum == 0.0 ) {
570             (xcen_datap)[0]=xcen_badval;
571             (ycen_datap)[0]=ycen_badval;
572             } else,) {
573 0           (xcen_datap)[0] = sumx/sum;
574 0           (ycen_datap)[0] = sumy/sum;
575             }
576 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
577 0           } break;
578 0           case PDL_L: {
579 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
580 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
581 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
582 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
583 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
584 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
585 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
586 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
587 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
588             PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,L,im_badval_isnan) ) continue;,)
589 0           sum += data;
590 0           sumx += data*m;
591 0           sumy += data*n;
592             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
593             /*
594             * if sum == 0 then we will flag as bad -- although it could just mean that
595             * there is negative values in the dataset.
596             * - should use a better check than != 0.0 ...
597             */
598             PDL_IF_BAD(if ( sum == 0.0 ) {
599             (xcen_datap)[0]=xcen_badval;
600             (ycen_datap)[0]=ycen_badval;
601             } else,) {
602 0           (xcen_datap)[0] = sumx/sum;
603 0           (ycen_datap)[0] = sumy/sum;
604             }
605 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
606 0           } break;
607 0           case PDL_UL: {
608 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_ULong,K)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
609 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
610 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
611 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
612 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
613 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
614 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
615 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
616 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
617             PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,K,im_badval_isnan) ) continue;,)
618 0           sum += data;
619 0           sumx += data*m;
620 0           sumy += data*n;
621             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
622             /*
623             * if sum == 0 then we will flag as bad -- although it could just mean that
624             * there is negative values in the dataset.
625             * - should use a better check than != 0.0 ...
626             */
627             PDL_IF_BAD(if ( sum == 0.0 ) {
628             (xcen_datap)[0]=xcen_badval;
629             (ycen_datap)[0]=ycen_badval;
630             } else,) {
631 0           (xcen_datap)[0] = sumx/sum;
632 0           (ycen_datap)[0] = sumy/sum;
633             }
634 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
635 0           } break;
636 0           case PDL_IND: {
637 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
638 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
639 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
640 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
641 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
642 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
643 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
644 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
645 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
646             PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,N,im_badval_isnan) ) continue;,)
647 0           sum += data;
648 0           sumx += data*m;
649 0           sumy += data*n;
650             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
651             /*
652             * if sum == 0 then we will flag as bad -- although it could just mean that
653             * there is negative values in the dataset.
654             * - should use a better check than != 0.0 ...
655             */
656             PDL_IF_BAD(if ( sum == 0.0 ) {
657             (xcen_datap)[0]=xcen_badval;
658             (ycen_datap)[0]=ycen_badval;
659             } else,) {
660 0           (xcen_datap)[0] = sumx/sum;
661 0           (ycen_datap)[0] = sumy/sum;
662             }
663 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
664 0           } break;
665 0           case PDL_ULL: {
666 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_ULongLong,P)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
667 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
668 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
669 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
670 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
671 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
672 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
673 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
674 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
675             PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,P,im_badval_isnan) ) continue;,)
676 0           sum += data;
677 0           sumx += data*m;
678 0           sumy += data*n;
679             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
680             /*
681             * if sum == 0 then we will flag as bad -- although it could just mean that
682             * there is negative values in the dataset.
683             * - should use a better check than != 0.0 ...
684             */
685             PDL_IF_BAD(if ( sum == 0.0 ) {
686             (xcen_datap)[0]=xcen_badval;
687             (ycen_datap)[0]=ycen_badval;
688             } else,) {
689 0           (xcen_datap)[0] = sumx/sum;
690 0           (ycen_datap)[0] = sumy/sum;
691             }
692 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
693 0           } break;
694 0           case PDL_LL: {
695 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_LongLong,Q)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
696 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
697 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
698 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
699 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
700 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
701 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
702 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
703 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
704             PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,Q,im_badval_isnan) ) continue;,)
705 0           sum += data;
706 0           sumx += data*m;
707 0           sumy += data*n;
708             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
709             /*
710             * if sum == 0 then we will flag as bad -- although it could just mean that
711             * there is negative values in the dataset.
712             * - should use a better check than != 0.0 ...
713             */
714             PDL_IF_BAD(if ( sum == 0.0 ) {
715             (xcen_datap)[0]=xcen_badval;
716             (ycen_datap)[0]=ycen_badval;
717             } else,) {
718 0           (xcen_datap)[0] = sumx/sum;
719 0           (ycen_datap)[0] = sumy/sum;
720             }
721 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
722 0           } break;
723 0           case PDL_F: {
724 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Float,F)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
725 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
726 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
727 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
728 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
729 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
730 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
731 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
732 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
733             PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,F,im_badval_isnan) ) continue;,)
734 0           sum += data;
735 0           sumx += data*m;
736 0           sumy += data*n;
737             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
738             /*
739             * if sum == 0 then we will flag as bad -- although it could just mean that
740             * there is negative values in the dataset.
741             * - should use a better check than != 0.0 ...
742             */
743             PDL_IF_BAD(if ( sum == 0.0 ) {
744             (xcen_datap)[0]=xcen_badval;
745             (ycen_datap)[0]=ycen_badval;
746             } else,) {
747 0           (xcen_datap)[0] = sumx/sum;
748 0           (ycen_datap)[0] = sumy/sum;
749             }
750 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
751 0           } break;
752 1           case PDL_D: {
753 1 50         PDL_DECLARE_PARAMS_centroid2d_1(PDL_Double,D)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
754 4 50         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    50          
    50          
    50          
    50          
    100          
    100          
755 1           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
756 1           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
757 1           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
758 1           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
759 1           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
760 421 100         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    100          
761 400           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
762             PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,D,im_badval_isnan) ) continue;,)
763 400           sum += data;
764 400           sumx += data*m;
765 400           sumy += data*n;
766             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
767             /*
768             * if sum == 0 then we will flag as bad -- although it could just mean that
769             * there is negative values in the dataset.
770             * - should use a better check than != 0.0 ...
771             */
772             PDL_IF_BAD(if ( sum == 0.0 ) {
773             (xcen_datap)[0]=xcen_badval;
774             (ycen_datap)[0]=ycen_badval;
775             } else,) {
776 1           (xcen_datap)[0] = sumx/sum;
777 1           (ycen_datap)[0] = sumy/sum;
778             }
779 1 50         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    50          
780 1           } break;
781 0           case PDL_LD: {
782 0 0         PDL_DECLARE_PARAMS_centroid2d_1(PDL_LDouble,E)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
783 0 0         PDL_BROADCASTLOOP_START_centroid2d_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
784 0           PDL_LDouble sum = 0, sumx = 0, sumy = 0;
785 0           PDL_Indx i1 = (x_datap)[0] - (box_datap)[0]/2;
786 0           PDL_Indx i2 = (x_datap)[0] + (box_datap)[0]/2 + 1;
787 0           PDL_Indx j1 = (y_datap)[0] - (box_datap)[0]/2;
788 0           PDL_Indx j2 = (y_datap)[0] + (box_datap)[0]/2 + 1;
789 0 0         {/* Open n=j1:j2 */ PDL_EXPAND2(register PDL_Indx n=PDLMAX((j1),0), __n_stop=PDLMIN(j2, (__n_size))); for(; n<__n_stop; n+=1) {{/* Open m=i1:i2 */ PDL_EXPAND2(register PDL_Indx m=PDLMAX((i1),0), __m_stop=PDLMIN(i2, (__m_size))); for(; m<__m_stop; m+=1) {
    0          
790 0           PDL_LDouble data = (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))];
791             PDL_IF_BAD(if ( PDL_ISBAD2(data,im_badval,E,im_badval_isnan) ) continue;,)
792 0           sum += data;
793 0           sumx += data*m;
794 0           sumy += data*n;
795             }} /* Close n=j1:j2 */}} /* Close m=i1:i2 */
796             /*
797             * if sum == 0 then we will flag as bad -- although it could just mean that
798             * there is negative values in the dataset.
799             * - should use a better check than != 0.0 ...
800             */
801             PDL_IF_BAD(if ( sum == 0.0 ) {
802             (xcen_datap)[0]=xcen_badval;
803             (ycen_datap)[0]=ycen_badval;
804             } else,) {
805 0           (xcen_datap)[0] = sumx/sum;
806 0           (ycen_datap)[0] = sumy/sum;
807             }
808 0 0         }PDL_BROADCASTLOOP_END_centroid2d_readdata
    0          
809 0           } break;
810 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in centroid2d: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
811             }
812             #undef PDL_IF_BAD
813             }
814 2           return PDL_err;
815             }
816              
817             static pdl_datatypes pdl_centroid2d_vtable_gentypes[] = { PDL_SB, PDL_B, PDL_S, PDL_US, PDL_L, PDL_UL, PDL_IND, PDL_ULL, PDL_LL, PDL_F, PDL_D, PDL_LD, -1 };
818             static PDL_Indx pdl_centroid2d_vtable_realdims[] = { 2, 0, 0, 0, 0, 0 };
819             static char *pdl_centroid2d_vtable_parnames[] = { "im","x","y","box","xcen","ycen" };
820             static short pdl_centroid2d_vtable_parflags[] = {
821             0,
822             0,
823             0,
824             0,
825             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE,
826             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE
827             };
828             static pdl_datatypes pdl_centroid2d_vtable_partypes[] = { -1, -1, -1, -1, -1, -1 };
829             static PDL_Indx pdl_centroid2d_vtable_realdims_starts[] = { 0, 2, 2, 2, 2, 2 };
830             static PDL_Indx pdl_centroid2d_vtable_realdims_ind_ids[] = { 0, 1 };
831             static char *pdl_centroid2d_vtable_indnames[] = { "m","n" };
832             pdl_transvtable pdl_centroid2d_vtable = {
833             PDL_TRANS_DO_BROADCAST|PDL_TRANS_BADPROCESS, 0, pdl_centroid2d_vtable_gentypes, 4, 6, NULL /*CORE21*/,
834             pdl_centroid2d_vtable_realdims, pdl_centroid2d_vtable_parnames,
835             pdl_centroid2d_vtable_parflags, pdl_centroid2d_vtable_partypes,
836             pdl_centroid2d_vtable_realdims_starts, pdl_centroid2d_vtable_realdims_ind_ids, 2,
837             2, pdl_centroid2d_vtable_indnames,
838             NULL, pdl_centroid2d_readdata, NULL,
839             NULL,
840             0,"PDL::Image2D::centroid2d"
841             };
842              
843              
844 2           pdl_error pdl_run_centroid2d(pdl *im,pdl *x,pdl *y,pdl *box,pdl *xcen,pdl *ycen) {
845 2           pdl_error PDL_err = {0, NULL, 0};
846 2 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
847 2           pdl_trans *__privtrans = PDL->create_trans(&pdl_centroid2d_vtable);
848 2 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
849 2           __privtrans->pdls[0] = im;
850 2           __privtrans->pdls[1] = x;
851 2           __privtrans->pdls[2] = y;
852 2           __privtrans->pdls[3] = box;
853 2           __privtrans->pdls[4] = xcen;
854 2           __privtrans->pdls[5] = ycen;
855 2 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
856 2 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
857 2           return PDL_err;
858             }