00001 #include "sadie.h"
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 void
00014 FUNCTION (short nlin,
00015 short npix,
00016 double yradius,
00017 double xradius,
00018 double alpha,
00019 short option,
00020
00021
00022
00023
00024
00025
00026 IMAGE ** out
00027
00028 )
00029 {
00030 register short j, k, nlinrem, npixrem;
00031 char msg[SLEN];
00032 double x, y, *elin = 0, *epix = 0;
00033
00034 if (TIMES)
00035 TIMING (T_FUNCTION);
00036 if (NAMES)
00037 {
00038 MESSAGE ('I', "");
00039 MESSAGE ('I', "FUNCTION");
00040 MESSAGE ('I', "");
00041 sprintf (msg, " Image size: lines: %d", nlin);
00042 MESSAGE ('I', msg);
00043 sprintf (msg, " pixels: %d", npix);
00044 MESSAGE ('I', msg);
00045 sprintf (msg, " Function radius: lines: %12.4e", yradius);
00046 MESSAGE ('I', msg);
00047 sprintf (msg, " pixels: %12.4e", xradius);
00048 MESSAGE ('I', msg);
00049 if (option == CONE)
00050 {
00051 MESSAGE ('I', " Cone function");
00052 }
00053 else if (option == NEGEXP)
00054 {
00055 MESSAGE ('I', " Negative exponential function");
00056 }
00057 else if (option == GAUSS)
00058 {
00059 MESSAGE ('I', " Gaussian function");
00060 }
00061 else if (option == BOX)
00062 {
00063 MESSAGE ('I', " Box function");
00064 }
00065 else if (option == CYLINDER)
00066 {
00067 MESSAGE ('I', " Cylinder function");
00068 }
00069 else if (option == HANNING)
00070 {
00071 MESSAGE ('I', " Hanning function");
00072 }
00073 else if (option == HAMMING)
00074 {
00075 MESSAGE ('I', " Hanning function");
00076 }
00077 else if (option == KAISER)
00078 {
00079 MESSAGE ('I', " Kaiser function");
00080 }
00081 MESSAGE ('I', " ...............");
00082 }
00083
00084
00085 if (nlin <= 0)
00086 {
00087 MESSAGE ('E', " Number of lines must be greater than zero.");
00088 goto the_end;
00089 }
00090 else if (npix <= 0)
00091 {
00092 MESSAGE ('E', " Number of pixels/line must be greater than zero.");
00093 goto the_end;
00094 }
00095 else if (yradius <= 0.0)
00096 {
00097 MESSAGE ('E',
00098 " Radius in lines of test function must be greater than zero.");
00099 goto the_end;
00100 }
00101 else if (xradius <= 0.0)
00102 {
00103 MESSAGE ('E',
00104 " Radius in pixels/line of test function must be greater than zero.");
00105 goto the_end;
00106 }
00107 else if (option != CONE && option != NEGEXP && option != GAUSS
00108 && option != BOX && option != CYLINDER && option != HANNING
00109 && option != HAMMING && option != KAISER)
00110 {
00111 MESSAGE ('E',
00112 " Option must be one of CONE, NEGEXP, GAUSS, BOX, CYLINDER, HANNING, HAMMING or KAISER.");
00113 goto the_end;
00114 }
00115
00116
00117 if (!
00118 (elin =
00119 (double *) malloc (((nlin / 2) + (nlin % 2)) * sizeof (double))))
00120 {
00121 MESSAGE ('E', " Memory request failed.");
00122 goto the_end;
00123 }
00124 if (!
00125 (epix =
00126 (double *) malloc (((npix / 2) + (npix % 2)) * sizeof (double))))
00127 {
00128 MESSAGE ('E', " Memory request failed.");
00129 goto the_end;
00130 }
00131
00132
00133 if (!CHECKIMG (*out))
00134 GETMEM (1, nlin, npix, out);
00135 if (!*out)
00136 goto the_end;
00137
00138
00139 nlinrem = nlin % 2;
00140 npixrem = npix % 2;
00141
00142
00143 switch (option)
00144 {
00145 case CONE:
00146
00147 for (j = 1 - nlinrem; j < nlin / 2; j++)
00148 {
00149 y =
00150 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00151 yradius);
00152 for (k = 1 - npixrem; k < npix / 2; k++)
00153 {
00154 x =
00155 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00156 (xradius * xradius);
00157 (*out)->data[0][j][k] = (*out)->data[0][j][npix - k - npixrem] =
00158 (*out)->data[0][nlin - j - nlinrem][k] =
00159 (*out)->data[0][nlin - j - nlinrem][npix - k - npixrem] =
00160 (PIXEL) max (0.0,
00161 (double) (SMAX - SMIN) * (1.0 - sqrt (x + y) +
00162 (double) SMIN));
00163 }
00164 }
00165
00166 for (j = 0; j < nlin; j++)
00167 {
00168 y =
00169 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00170 yradius);
00171 (*out)->data[0][j][npix / 2] =
00172 (PIXEL) max (0.0,
00173 (double) (SMAX - SMIN) * (1.0 - sqrt (y) +
00174 (double) SMIN));
00175 }
00176 for (k = 0; k < npix; k++)
00177 {
00178 x =
00179 ((double) (k - npix / 2) * (double) (k - npix / 2)) / (xradius *
00180 xradius);
00181 (*out)->data[0][nlin / 2][k] =
00182 (PIXEL) max (0.0,
00183 (double) (SMAX - SMIN) * (1.0 - sqrt (x) +
00184 (double) SMIN));
00185 }
00186
00187 if (npixrem == 0)
00188 {
00189 x =
00190 ((double) (npix / 2) * (double) (npix / 2)) / (xradius * xradius);
00191 for (j = 0; j < nlin; j++)
00192 {
00193 y =
00194 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) /
00195 (yradius * yradius);
00196 (*out)->data[0][j][0] =
00197 (PIXEL) max (0.0,
00198 (double) (SMAX - SMIN) * (1.0 - sqrt (x + y) +
00199 (double) SMIN));
00200 }
00201 }
00202
00203 if (nlinrem == 0)
00204 {
00205 y =
00206 ((double) (nlin / 2) * (double) (nlin / 2)) / (yradius * yradius);
00207 for (k = 0; k < npix; k++)
00208 {
00209 x =
00210 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00211 (xradius * xradius);
00212 (*out)->data[0][0][k] =
00213 (PIXEL) max (0.0,
00214 (double) (SMAX - SMIN) * (1.0 - sqrt (x + y) +
00215 (double) SMIN));
00216 }
00217 }
00218 break;
00219 case NEGEXP:
00220
00221 for (j = 1 - nlinrem; j < nlin / 2; j++)
00222 {
00223 y =
00224 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00225 yradius);
00226 for (k = 1 - npixrem; k < npix / 2; k++)
00227 {
00228 x =
00229 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00230 (xradius * xradius);
00231 (*out)->data[0][j][k] = (*out)->data[0][j][npix - k - npixrem] =
00232 (*out)->data[0][nlin - j - nlinrem][k] =
00233 (*out)->data[0][nlin - j - nlinrem][npix - k - npixrem] =
00234 (PIXEL) ((double) (SMAX - SMIN) * exp (-sqrt (x + y)) +
00235 (double) SMIN);
00236 }
00237 }
00238
00239 for (j = 0; j < nlin; j++)
00240 {
00241 y =
00242 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00243 yradius);
00244 (*out)->data[0][j][npix / 2] =
00245 (PIXEL) ((double) (SMAX - SMIN) * exp (-sqrt (y)) +
00246 (double) SMIN);
00247 }
00248 for (k = 0; k < npix; k++)
00249 {
00250 x =
00251 ((double) (k - npix / 2) * (double) (k - npix / 2)) / (xradius *
00252 xradius);
00253 (*out)->data[0][nlin / 2][k] =
00254 (PIXEL) ((double) (SMAX - SMIN) * exp (-sqrt (x)) +
00255 (double) SMIN);
00256 }
00257
00258 if (npixrem == 0)
00259 {
00260 x =
00261 ((double) (npix / 2) * (double) (npix / 2)) / (xradius * xradius);
00262 for (j = 0; j < nlin; j++)
00263 {
00264 y =
00265 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) /
00266 (yradius * yradius);
00267 (*out)->data[0][j][0] =
00268 (PIXEL) ((double) (SMAX - SMIN) * exp (-sqrt (x + y)) +
00269 (double) SMIN);
00270 }
00271 }
00272
00273 if (nlinrem == 0)
00274 {
00275 y =
00276 ((double) (nlin / 2) * (double) (nlin / 2)) / (yradius * yradius);
00277 for (k = 0; k < npix; k++)
00278 {
00279 x =
00280 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00281 (xradius * xradius);
00282 (*out)->data[0][0][k] =
00283 (PIXEL) ((double) (SMAX - SMIN) * exp (-sqrt (x + y)) +
00284 (double) SMIN);
00285 }
00286 }
00287 break;
00288 case GAUSS:
00289
00290 for (j = 1 - nlinrem; j < nlin / 2; j++)
00291 {
00292 y =
00293 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00294 yradius);
00295 elin[j] = exp (-y);
00296 }
00297 for (k = 1 - npixrem; k < npix / 2; k++)
00298 {
00299 x =
00300 ((double) (k - npix / 2) * (double) (k - npix / 2)) / (xradius *
00301 xradius);
00302 epix[k] = exp (-x);
00303 }
00304
00305 for (j = 1 - nlinrem; j < nlin / 2; j++)
00306 {
00307 for (k = 1 - npixrem; k < npix / 2; k++)
00308 {
00309 (*out)->data[0][j][k] =
00310 (*out)->data[0][j][npix - k - npixrem] =
00311 (*out)->data[0][nlin - j - nlinrem][k] =
00312 (*out)->data[0][nlin - j - nlinrem][npix - k - npixrem] =
00313 (PIXEL) ((double) (SMAX - SMIN) * (epix[k] * elin[j]) +
00314 (double) SMIN);
00315 }
00316 }
00317
00318 for (j = 0; j < nlin; j++)
00319 {
00320 y =
00321 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00322 yradius);
00323 (*out)->data[0][j][npix / 2] =
00324 (PIXEL) ((double) (SMAX - SMIN) * exp (-y) + (double) SMIN);
00325 }
00326 for (k = 0; k < npix; k++)
00327 {
00328 x =
00329 ((double) (k - npix / 2) * (double) (k - npix / 2)) / (xradius *
00330 xradius);
00331 (*out)->data[0][nlin / 2][k] =
00332 (PIXEL) ((double) (SMAX - SMIN) * exp (-x) + (double) SMIN);
00333 }
00334
00335 if (npixrem == 0)
00336 {
00337 x =
00338 ((double) (npix / 2) * (double) (npix / 2)) / (xradius * xradius);
00339 for (j = 0; j < nlin; j++)
00340 {
00341 y =
00342 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) /
00343 (yradius * yradius);
00344 (*out)->data[0][j][0] =
00345 (PIXEL) ((double) (SMAX - SMIN) * exp (-x - y) +
00346 (double) SMIN);
00347 }
00348 }
00349
00350 if (nlinrem == 0)
00351 {
00352 y =
00353 ((double) (nlin / 2) * (double) (nlin / 2)) / (yradius * yradius);
00354 for (k = 0; k < npix; k++)
00355 {
00356 x =
00357 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00358 (xradius * xradius);
00359 (*out)->data[0][0][k] =
00360 (PIXEL) ((double) (SMAX - SMIN) * exp (-x - y) +
00361 (double) SMIN);
00362 }
00363 }
00364 break;
00365 case BOX:
00366
00367 for (j = 1 - nlinrem; j < nlin / 2; j++)
00368 {
00369 y =
00370 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00371 yradius);
00372 for (k = 1 - npixrem; k < npix / 2; k++)
00373 {
00374 x =
00375 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00376 (xradius * xradius);
00377 (*out)->data[0][j][k] = (*out)->data[0][j][npix - k - npixrem] =
00378 (*out)->data[0][nlin - j - nlinrem][k] =
00379 (*out)->data[0][nlin - j - nlinrem][npix - k - npixrem] =
00380 (PIXEL) (x <= 1.0 && y <= 1.0 ? SMAX : SMIN);
00381 }
00382 }
00383
00384 for (j = 0; j < nlin; j++)
00385 {
00386 y =
00387 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00388 yradius);
00389 (*out)->data[0][j][npix / 2] = (PIXEL) (y <= 1.0 ? SMAX : SMIN);
00390 }
00391 for (k = 0; k < npix; k++)
00392 {
00393 x =
00394 ((double) (k - npix / 2) * (double) (k - npix / 2)) / (xradius *
00395 xradius);
00396 (*out)->data[0][nlin / 2][k] = (PIXEL) (x <= 1.0 ? SMAX : SMIN);
00397 }
00398
00399 if (npixrem == 0)
00400 {
00401 x =
00402 ((double) (npix / 2) * (double) (npix / 2)) / (xradius * xradius);
00403 for (j = 0; j < nlin; j++)
00404 {
00405 y =
00406 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) /
00407 (yradius * yradius);
00408 (*out)->data[0][j][0] = (PIXEL) (x <= 1.0
00409 && y <= 1.0 ? SMAX : SMIN);
00410 }
00411 }
00412
00413 if (nlinrem == 0)
00414 {
00415 y =
00416 ((double) (nlin / 2) * (double) (nlin / 2)) / (yradius * yradius);
00417 for (k = 0; k < npix; k++)
00418 {
00419 x =
00420 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00421 (xradius * xradius);
00422 (*out)->data[0][0][k] = (PIXEL) (x <= 1.0
00423 && y <= 1.0 ? SMAX : SMIN);
00424 }
00425 }
00426 break;
00427 case CYLINDER:
00428
00429 for (j = 1 - nlinrem; j < nlin / 2; j++)
00430 {
00431 y =
00432 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00433 yradius);
00434 for (k = 1 - npixrem; k < npix / 2; k++)
00435 {
00436 x =
00437 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00438 (xradius * xradius);
00439 (*out)->data[0][j][k] = (*out)->data[0][j][npix - k - npixrem] =
00440 (*out)->data[0][nlin - j - nlinrem][k] =
00441 (*out)->data[0][nlin - j - nlinrem][npix - k - npixrem] =
00442 (PIXEL) (sqrt (x + y) <= 1.0 ? SMAX : SMIN);
00443 }
00444 }
00445
00446 for (j = 0; j < nlin; j++)
00447 {
00448 y =
00449 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00450 yradius);
00451 (*out)->data[0][j][npix / 2] =
00452 (PIXEL) (sqrt (y) <= 1.0 ? SMAX : SMIN);
00453 }
00454 for (k = 0; k < npix; k++)
00455 {
00456 x =
00457 ((double) (k - npix / 2) * (double) (k - npix / 2)) / (xradius *
00458 xradius);
00459 (*out)->data[0][nlin / 2][k] =
00460 (PIXEL) (sqrt (x) <= 1.0 ? SMAX : SMIN);
00461 }
00462
00463 if (npixrem == 0)
00464 {
00465 x =
00466 ((double) (npix / 2) * (double) (npix / 2)) / (xradius * xradius);
00467 for (j = 0; j < nlin; j++)
00468 {
00469 y =
00470 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) /
00471 (yradius * yradius);
00472 (*out)->data[0][j][0] =
00473 (PIXEL) (sqrt (x + y) <= 1.0 ? SMAX : SMIN);
00474 }
00475 }
00476
00477 if (nlinrem == 0)
00478 {
00479 y =
00480 ((double) (nlin / 2) * (double) (nlin / 2)) / (yradius * yradius);
00481 for (k = 0; k < npix; k++)
00482 {
00483 x =
00484 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00485 (xradius * xradius);
00486 (*out)->data[0][0][k] =
00487 (PIXEL) (sqrt (x + y) <= 1.0 ? SMAX : SMIN);
00488 }
00489 }
00490 break;
00491 case HANNING:
00492
00493 for (j = 1 - nlinrem; j < nlin / 2; j++)
00494 {
00495 y =
00496 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00497 yradius);
00498 for (k = 1 - npixrem; k < npix / 2; k++)
00499 {
00500 x =
00501 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00502 (xradius * xradius);
00503 (*out)->data[0][j][k] = (*out)->data[0][j][npix - k - npixrem] =
00504 (*out)->data[0][nlin - j - nlinrem][k] =
00505 (*out)->data[0][nlin - j - nlinrem][npix - k - npixrem] =
00506 (PIXEL) (sqrt (x + y) <=
00507 1.0 ? (SMAX - SMIN) * (0.50 +
00508 0.50 * cos (M_PI *
00509 sqrt (x + y))) +
00510 SMIN : SMIN);
00511 }
00512 }
00513
00514 for (j = 0; j < nlin; j++)
00515 {
00516 y =
00517 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00518 yradius);
00519 (*out)->data[0][j][npix / 2] =
00520 (PIXEL) (sqrt (y) <=
00521 1.0 ? (SMAX - SMIN) * (0.50 +
00522 0.50 * cos (M_PI * sqrt (y))) +
00523 SMIN : SMIN);
00524 }
00525 for (k = 0; k < npix; k++)
00526 {
00527 x =
00528 ((double) (k - npix / 2) * (double) (k - npix / 2)) / (xradius *
00529 xradius);
00530 (*out)->data[0][nlin / 2][k] =
00531 (PIXEL) (sqrt (x) <=
00532 1.0 ? (SMAX - SMIN) * (0.50 +
00533 0.50 * cos (M_PI * sqrt (x))) +
00534 SMIN : SMIN);
00535 }
00536
00537 if (npixrem == 0)
00538 {
00539 x =
00540 ((double) (npix / 2) * (double) (npix / 2)) / (xradius * xradius);
00541 for (j = 0; j < nlin; j++)
00542 {
00543 y =
00544 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) /
00545 (yradius * yradius);
00546 (*out)->data[0][j][0] =
00547 (PIXEL) (sqrt (x + y) <=
00548 1.0 ? (SMAX - SMIN) * (0.50 +
00549 0.50 * cos (M_PI *
00550 sqrt (x + y))) +
00551 SMIN : SMIN);
00552 }
00553 }
00554
00555 if (nlinrem == 0)
00556 {
00557 y =
00558 ((double) (nlin / 2) * (double) (nlin / 2)) / (yradius * yradius);
00559 for (k = 0; k < npix; k++)
00560 {
00561 x =
00562 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00563 (xradius * xradius);
00564 (*out)->data[0][0][k] =
00565 (PIXEL) (sqrt (x + y) <=
00566 1.0 ? (SMAX - SMIN) * (0.50 +
00567 0.50 * cos (M_PI *
00568 sqrt (x + y))) +
00569 SMIN : SMIN);
00570 }
00571 }
00572 break;
00573 case HAMMING:
00574
00575 for (j = 1 - nlinrem; j < nlin / 2; j++)
00576 {
00577 y =
00578 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00579 yradius);
00580 for (k = 1 - npixrem; k < npix / 2; k++)
00581 {
00582 x =
00583 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00584 (xradius * xradius);
00585 (*out)->data[0][j][k] = (*out)->data[0][j][npix - k - npixrem] =
00586 (*out)->data[0][nlin - j - nlinrem][k] =
00587 (*out)->data[0][nlin - j - nlinrem][npix - k - npixrem] =
00588 (PIXEL) (sqrt (x + y) <=
00589 1.0 ? (SMAX - SMIN) * (0.54 +
00590 0.46 * cos (M_PI *
00591 sqrt (x + y))) +
00592 SMIN : SMIN);
00593 }
00594 }
00595
00596 for (j = 0; j < nlin; j++)
00597 {
00598 y =
00599 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00600 yradius);
00601 (*out)->data[0][j][npix / 2] =
00602 (PIXEL) (sqrt (y) <=
00603 1.0 ? (SMAX - SMIN) * (0.54 +
00604 0.46 * cos (M_PI * sqrt (y))) +
00605 SMIN : SMIN);
00606 }
00607 for (k = 0; k < npix; k++)
00608 {
00609 x =
00610 ((double) (k - npix / 2) * (double) (k - npix / 2)) / (xradius *
00611 xradius);
00612 (*out)->data[0][nlin / 2][k] =
00613 (PIXEL) (sqrt (x) <=
00614 1.0 ? (SMAX - SMIN) * (0.54 +
00615 0.46 * cos (M_PI * sqrt (x))) +
00616 SMIN : SMIN);
00617 }
00618
00619 if (npixrem == 0)
00620 {
00621 x =
00622 ((double) (npix / 2) * (double) (npix / 2)) / (xradius * xradius);
00623 for (j = 0; j < nlin; j++)
00624 {
00625 y =
00626 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) /
00627 (yradius * yradius);
00628 (*out)->data[0][j][0] =
00629 (PIXEL) (sqrt (x + y) <=
00630 1.0 ? (SMAX - SMIN) * (0.54 +
00631 0.46 * cos (M_PI *
00632 sqrt (x + y))) +
00633 SMIN : SMIN);
00634 }
00635 }
00636
00637 if (nlinrem == 0)
00638 {
00639 y =
00640 ((double) (nlin / 2) * (double) (nlin / 2)) / (yradius * yradius);
00641 for (k = 0; k < npix; k++)
00642 {
00643 x =
00644 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00645 (xradius * xradius);
00646 (*out)->data[0][0][k] =
00647 (PIXEL) (sqrt (x + y) <=
00648 1.0 ? (SMAX - SMIN) * (0.54 +
00649 0.46 * cos (M_PI *
00650 sqrt (x + y))) +
00651 SMIN : SMIN);
00652 }
00653 }
00654 break;
00655 case KAISER:
00656
00657 for (j = 1 - nlinrem; j < nlin / 2; j++)
00658 {
00659 y =
00660 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00661 yradius);
00662 for (k = 1 - npixrem; k < npix / 2; k++)
00663 {
00664 x =
00665 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00666 (xradius * xradius);
00667 (*out)->data[0][j][k] = (*out)->data[0][j][npix - k - npixrem] =
00668 (*out)->data[0][nlin - j - nlinrem][k] =
00669 (*out)->data[0][nlin - j - nlinrem][npix - k - npixrem] =
00670 (PIXEL) (sqrt (x + y) <=
00671 1.0 ? (SMAX -
00672 SMIN) * (mBesselF (alpha *
00673 sqrt (1.0 -
00674 (x +
00675 y))) /
00676 mBesselF (alpha)) + SMIN : SMIN);
00677 }
00678 }
00679
00680 for (j = 0; j < nlin; j++)
00681 {
00682 y =
00683 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) / (yradius *
00684 yradius);
00685 (*out)->data[0][j][npix / 2] =
00686 (PIXEL) (sqrt (y) <=
00687 1.0 ? (SMAX -
00688 SMIN) * (mBesselF (alpha * sqrt (1.0 - y)) /
00689 mBesselF (alpha)) + SMIN : SMIN);
00690 }
00691 for (k = 0; k < npix; k++)
00692 {
00693 x =
00694 ((double) (k - npix / 2) * (double) (k - npix / 2)) / (xradius *
00695 xradius);
00696 (*out)->data[0][nlin / 2][k] =
00697 (PIXEL) (sqrt (x) <=
00698 1.0 ? (SMAX -
00699 SMIN) * (mBesselF (alpha * sqrt (1.0 - x)) /
00700 mBesselF (alpha)) + SMIN : SMIN);
00701 }
00702
00703 if (npixrem == 0)
00704 {
00705 x =
00706 ((double) (npix / 2) * (double) (npix / 2)) / (xradius * xradius);
00707 for (j = 0; j < nlin; j++)
00708 {
00709 y =
00710 ((double) (j - nlin / 2) * (double) (j - nlin / 2)) /
00711 (yradius * yradius);
00712 (*out)->data[0][j][0] =
00713 (PIXEL) (sqrt (x + y) <=
00714 1.0 ? (SMAX -
00715 SMIN) * (mBesselF (alpha *
00716 sqrt (1.0 -
00717 (x +
00718 y))) /
00719 mBesselF (alpha)) + SMIN : SMIN);
00720 }
00721 }
00722
00723 if (nlinrem == 0)
00724 {
00725 y =
00726 ((double) (nlin / 2) * (double) (nlin / 2)) / (yradius * yradius);
00727 for (k = 0; k < npix; k++)
00728 {
00729 x =
00730 ((double) (k - npix / 2) * (double) (k - npix / 2)) /
00731 (xradius * xradius);
00732 (*out)->data[0][0][k] =
00733 (PIXEL) (sqrt (x + y) <=
00734 1.0 ? (SMAX -
00735 SMIN) * (mBesselF (alpha *
00736 sqrt (1.0 -
00737 (x +
00738 y))) /
00739 mBesselF (alpha)) + SMIN : SMIN);
00740 }
00741 }
00742 break;
00743 }
00744 (*out)->gmin = (*out)->data[0][0][0];
00745 (*out)->gmax = (*out)->data[0][nlin / 2][npix / 2];
00746
00747 the_end:
00748 if (elin)
00749 free (elin);
00750 if (epix)
00751 free (epix);
00752 if (TIMES)
00753 TIMING (T_EXIT);
00754 }