50 if (((lcl_data = (
float *) malloc(ntot *
sizeof (
float))) ==
NULL)
51 || ((lcl_qc = (
char *) malloc(ntot *
sizeof (
char))) ==
NULL)
52 || ((wt = (
float *) malloc(
npix *
nlin *
sizeof (
float))) ==
NULL)) {
53 printf(
"%s, %d E: unable to allocate local data storage\n",
58 for (iv = 0; iv < ntot; iv++) {
59 *(lcl_data + iv) = 0.;
61 if (*(arrqc + iv) == 0) {
62 *(lcl_data + iv) = (
float) *(arr + iv);
74 for (iv = 0; iv < ntot; iv++) {
80 if ((*(lcl_qc + iv) == 1) && (*(arrqc + iv) != 20)) {
81 *(arr + iv) = *(wt + iv) * *(lcl_data + iv) +
82 (1. - *(wt + iv)) * (
float) *(arr + iv);
96 int max_extend,
float* weights)
131 float wt_shell, *ker, wt, sum, dist, r1, r2;
132 int ishell, ker_np, ker_nl, ker_cp, ker_cl, ln_grid, px_grid,
133 ker_lin, ker_pix, tl_grid, tp_grid, n_shell;
138 printf(
"%s: extending field with distance of %d\n", __FILE__, max_extend);
142 wt_shell = (
float) (max_extend - ishell) / (
float) (max_extend + 1);
149 r2 = max_extend * 2.0;
150 dist = r1 + (
float) ishell * (r2 - r1) / (
float) max_extend;
158 if (
mk_ker(dist, &ker, &ker_np, &ker_nl, &ker_cp, &ker_cl) != 0)
168 for (ln_grid = 0; ln_grid < nl_grid; ln_grid++) {
169 for (px_grid = 0; px_grid < np_grid; px_grid++) {
173 if (*(
flags + ln_grid * np_grid + px_grid) != 10) {
178 *(weights + ln_grid * np_grid + px_grid) = 1.;
185 for (ker_lin = -1; ker_lin < 2; ker_lin++) {
186 tl_grid = ln_grid + ker_lin;
187 if ((tl_grid >= 0) && (tl_grid < nl_grid)) {
188 for (ker_pix = -1; ker_pix < 2; ker_pix++) {
189 tp_grid = px_grid + ker_pix;
191 tp_grid = tp_grid + np_grid;
192 else if (tp_grid >= np_grid)
193 tp_grid = tp_grid - np_grid;
194 if (*(
flags + tl_grid * np_grid + tp_grid) <= 1)
208 for (ker_lin = 0; ker_lin < ker_nl; ker_lin++) {
213 tl_grid = ln_grid + ker_lin - ker_cl;
214 if ((tl_grid >= 0) && (tl_grid < nl_grid)) {
215 for (ker_pix = 0; ker_pix < ker_np; ker_pix++) {
217 if (*(ker + ker_lin * ker_np + ker_pix) > 0.) {
221 tp_grid = px_grid + ker_pix - ker_cp;
223 tp_grid = tp_grid + np_grid;
224 else if (tp_grid >= np_grid)
225 tp_grid = tp_grid - np_grid;
227 if (*(
flags + tl_grid * np_grid + tp_grid) == 0) {
228 wt += *(ker + ker_lin * ker_np + ker_pix);
229 sum += *(grid + tl_grid * np_grid + tp_grid);
240 *(grid + ln_grid * np_grid + px_grid) = sum / wt;
241 *(
flags + ln_grid * np_grid + px_grid) = 2;
242 *(weights + ln_grid * np_grid + px_grid) = wt_shell;
253 for (px_grid = 0; px_grid < (np_grid * nl_grid); px_grid++)
254 if (*(
flags + px_grid) == 2)
255 *(
flags + px_grid) = 1;
258 }
while ((ishell < max_extend) && (n_shell > 0));
265 int mk_ker(
float dist,
float **ker,
int *ker_np,
int *ker_nl,
266 int *ker_cp,
int *ker_cl)
292 int il, ip, n_out, iret = 0;
296 n_out = (
int) (dist + 1.);
297 *ker_np = 2 * n_out + 1;
305 if ((*ker = (
float *) malloc(*ker_np * *ker_nl *
sizeof (
float))) ==
NULL) {
306 printf(
"%s: unable to allocate storage for ker\n", __FILE__);
309 for (il = 0; il < *ker_nl; il++) {
310 for (ip = 0; ip < *ker_np; ip++) {
311 rad = sqrt(pow((
float) (*ker_cl - il), 2) +
312 pow((
float) (*ker_cp - ip), 2));
313 *(*ker + il * *ker_np + ip) = (rad < dist) ? 1. : 0.;