38 #include "boost/format.hpp"
48 namespace algorithms {
51 namespace geom = lsst::afw::geom;
61 static std::vector<Defect::Ptr>
62 classify_defects(std::vector<Defect::Ptr>
const & badList,
68 std::vector<Defect::Ptr> badList1D;
70 for (
DefectCIter begin = badList.begin(), end = badList.end(), bri = begin; bri != end; ++bri) {
73 if (y < defect->getY0() || y > defect->getY1() || ncol < defect->getX0()) {
77 int const x0 = defect->getX0();
78 int x1 = defect->getX1();
82 for (++bri; bri != end; ++bri) {
85 if (y < defect->getY0() || y > defect->getY1()) {
88 if (x1 < defect->getX0() - 1) {
92 if (defect->getX1() > x1) {
97 int const nbad = x1 - x0 + 1;
108 badList1D.push_back(defect);
117 for (
DefectCIter begin = badList1D.begin(), end = badList1D.end(), bri = begin; bri != end; ++bri) {
120 int const nbad = defect->getX1() - defect->getX0() + 1;
123 if (defect->getX0() == 0) {
129 }
else if (defect->getX0() == 1) {
135 }
else if (defect->getX1() == ncol - 2) {
141 }
else if (defect->getX1() == ncol - 1) {
159 switch (defect->getPos()) {
174 assert(defect_m->getX1() < defect->getX0());
176 if (defect_m->getX1() == defect->getX0() - 2) {
177 defect->classify(defect->getPos(), (defect->getType() & ~(02 << (nshift + 2))));
182 if (bri + 1 != end) {
188 if (defect->getX1() == defect_p->getX0() - 2) {
189 defect->classify(defect->getPos(), (defect->getType() & ~01));
204 template<
typename ImageT>
205 static void do_defects(std::vector<Defect::Ptr>
const & badList,
208 typename ImageT::Pixel
min,
212 typedef typename ImageT::Pixel ImagePixel;
213 ImagePixel out1_2, out1_1, out2_1, out2_2;
218 int const ncol = data.getWidth();
219 typename ImageT::x_iterator out = data.row_begin(y);
221 for (
DefectCIter ptr = badList.begin(), end = badList.end(); ptr != end; ++ptr) {
224 if (y < defect->getY0() || y > defect->getY1()) {
228 int const badX0 = defect->getX0();
229 int const badX1 = defect->getX1();
231 switch (defect->getPos()) {
233 assert(badX0 >= 0 && badX1 + 2 < ncol);
235 out2_1 = out[badX1 + 1];
236 out2_2 = out[badX1 + 2];
238 switch (defect->getType()) {
240 val = 1.4288*out2_1 - 0.4288*out2_2;
241 out[badX1] = (val <
min) ? out2_1 : val;
245 val = 1.0933*out2_1 - 0.0933*out2_2;
246 out[badX0] = (val <
min) ? out2_1 : val;
248 val = 1.4288*out2_1 - 0.4288*out2_2;
249 out[badX1] = (val <
min) ? out2_1 : val;
253 val = 0.6968*out2_1 + 0.3032*out2_2;
254 out[badX0] = (val <
min) ? out2_1 : val;
256 val = 1.0933*out2_1 - 0.0933*out2_2;
257 out[badX1 - 1] = (val <
min) ? out2_1 : val;
259 val = 1.4288*out2_1 - 0.4288*out2_2;
260 out[badX1] = (val <
min) ? out2_1 : val;
264 val = 0.5370*out2_1 + 0.4630*out2_2;
265 out[badX0] = (val <
min) ? out2_1 : val;
267 val = 0.6968*out2_1 + 0.3032*out2_2;
268 out[badX0 + 1] = (val <
min) ? out2_1 : val;
270 val = 1.0933*out2_1 - 0.0933*out2_2;
271 out[badX1 - 1] = (val <
min) ? out2_1 : val;
273 val = 1.4288*out2_1 - 0.4288*out2_2;
274 out[badX1] = (val <
min) ? out2_1 : val;
278 val = 0.5041*out2_1 + 0.4959*out2_2;
279 out[badX0] = (val <
min) ? out2_1 : val;
281 val = 0.5370*out2_1 + 0.4630*out2_2;
282 out[badX0 + 1] = (val <
min) ? out2_1 : val;
284 val = 0.6968*out2_1 + 0.3032*out2_2;
285 out[badX1 - 2] = (val <
min) ? out2_1 : val;
287 val = 1.0933*out2_1 - 0.0933*out2_2;
288 out[badX1 - 1] = (val <
min) ? out2_1 : val;
290 val = 1.4288*out2_1 - 0.4288*out2_2;
291 out[badX1] = (val <
min) ? out2_1 : val;
295 val = 0.5003*out2_1 + 0.4997*out2_2;
296 out[badX0] = (val <
min) ? out2_1 : val;
298 val = 0.5041*out2_1 + 0.4959*out2_2;
299 out[badX0 + 1] = (val <
min) ? out2_1 : val;
301 val = 0.5370*out2_1 + 0.4630*out2_2;
302 out[badX0 + 2] = (val <
min) ? out2_1 : val;
304 val = 0.6968*out2_1 + 0.3032*out2_2;
305 out[badX1 - 2] = (val <
min) ? out2_1 : val;
307 val = 1.0933*out2_1 - 0.0933*out2_2;
308 out[badX1 - 1] = (val <
min) ? out2_1 : val;
310 val = 1.4288*out2_1 - 0.4288*out2_2;
311 out[badX1] = (val <
min) ? out2_1 : val;
315 val = 0.5000*out2_1 + 0.5000*out2_2;
316 out[badX0] = (val <
min) ? out2_1 : val;
318 val = 0.5003*out2_1 + 0.4997*out2_2;
319 out[badX0 + 1] = (val <
min) ? out2_1 : val;
321 val = 0.5041*out2_1 + 0.4959*out2_2;
322 out[badX0 + 2] = (val <
min) ? out2_1 : val;
324 val = 0.5370*out2_1 + 0.4630*out2_2;
325 out[badX1 - 3] = (val <
min) ? out2_1 : val;
327 val = 0.6968*out2_1 + 0.3032*out2_2;
328 out[badX1 - 2] = (val <
min) ? out2_1 : val;
330 val = 1.0933*out2_1 - 0.0933*out2_2;
331 out[badX1 - 1] = (val <
min) ? out2_1 : val;
333 val = 1.4288*out2_1 - 0.4288*out2_2;
334 out[badX1] = (val <
min) ? out2_1 : val;
338 val = 0.5000*out2_1 + 0.5000*out2_2;
339 out[badX0] = (val <
min) ? out2_1 : val;
341 val = 0.5000*out2_1 + 0.5000*out2_2;
342 out[badX0 + 1] = (val <
min) ? out2_1 : val;
344 val = 0.5003*out2_1 + 0.4997*out2_2;
345 out[badX0 + 2] = (val <
min) ? out2_1 : val;
347 val = 0.5041*out2_1 + 0.4959*out2_2;
348 out[badX0 + 3] = (val <
min) ? out2_1 : val;
350 val = 0.5370*out2_1 + 0.4630*out2_2;
351 out[badX1 - 3] = (val <
min) ? out2_1 : val;
353 val = 0.6968*out2_1 + 0.3032*out2_2;
354 out[badX1 - 2] = (val <
min) ? out2_1 : val;
356 val = 1.0933*out2_1 - 0.0933*out2_2;
357 out[badX1 - 1] = (val <
min) ? out2_1 : val;
359 val = 1.4288*out2_1 - 0.4288*out2_2;
360 out[badX1] = (val <
min) ? out2_1 : val;
364 val = 0.5000*out2_1 + 0.5000*out2_2;
365 out[badX0] = (val <
min) ? out2_1 : val;
367 val = 0.5000*out2_1 + 0.5000*out2_2;
368 out[badX0 + 1] = (val <
min) ? out2_1 : val;
370 val = 0.5000*out2_1 + 0.5000*out2_2;
371 out[badX0 + 2] = (val <
min) ? out2_1 : val;
373 val = 0.5003*out2_1 + 0.4997*out2_2;
374 out[badX0 + 3] = (val <
min) ? out2_1 : val;
376 val = 0.5041*out2_1 + 0.4959*out2_2;
377 out[badX1 - 4] = (val <
min) ? out2_1 : val;
379 val = 0.5370*out2_1 + 0.4630*out2_2;
380 out[badX1 - 3] = (val <
min) ? out2_1 : val;
382 val = 0.6968*out2_1 + 0.3032*out2_2;
383 out[badX1 - 2] = (val <
min) ? out2_1 : val;
385 val = 1.0933*out2_1 - 0.0933*out2_2;
386 out[badX1 - 1] = (val <
min) ? out2_1 : val;
388 val = 1.4288*out2_1 - 0.4288*out2_2;
389 out[badX1] = (val <
min) ? out2_1 : val;
393 val = 0.5000*out2_1 + 0.5000*out2_2;
394 out[badX0] = (val <
min) ? out2_1 : val;
396 val = 0.5000*out2_1 + 0.5000*out2_2;
397 out[badX0 + 1] = (val <
min) ? out2_1 : val;
399 val = 0.5000*out2_1 + 0.5000*out2_2;
400 out[badX0 + 2] = (val <
min) ? out2_1 : val;
402 val = 0.5000*out2_1 + 0.5000*out2_2;
403 out[badX0 + 3] = (val <
min) ? out2_1 : val;
405 val = 0.5003*out2_1 + 0.4997*out2_2;
406 out[badX0 + 4] = (val <
min) ? out2_1 : val;
408 val = 0.5041*out2_1 + 0.4959*out2_2;
409 out[badX1 - 4] = (val <
min) ? out2_1 : val;
411 val = 0.5370*out2_1 + 0.4630*out2_2;
412 out[badX1 - 3] = (val <
min) ? out2_1 : val;
414 val = 0.6968*out2_1 + 0.3032*out2_2;
415 out[badX1 - 2] = (val <
min) ? out2_1 : val;
417 val = 1.0933*out2_1 - 0.0933*out2_2;
418 out[badX1 - 1] = (val <
min) ? out2_1 : val;
420 val = 1.4288*out2_1 - 0.4288*out2_2;
421 out[badX1] = (val <
min) ? out2_1 : val;
431 if (badX1 + 2 >= ncol) {
433 if (badX1 == ncol - 2) {
438 for (
int j = badX0; j <= badX1; j++) {
443 out2_1 = out[badX1 + 1];
444 out2_2 = out[badX1 + 2];
446 switch (defect->getType()) {
449 val = (val <
min) ? out2_1 : val;
451 for (
int j = badX0; j <= badX1; j++) {
456 val = 0.5000*out2_1 + 0.5000*out2_2;
461 for (
int j = badX0; j < badX1 - 5; j++) {
465 val = 0.5003*out2_1 + 0.4997*out2_2;
466 out[badX1 - 5] = (val <
min) ? out2_1 : val;
468 val = 0.5041*out2_1 + 0.4959*out2_2;
469 out[badX1 - 4] = (val <
min) ? out2_1 : val;
471 val = 0.5370*out2_1 + 0.4630*out2_2;
472 out[badX1 - 3] = (val <
min) ? out2_1 : val;
474 val = 0.6968*out2_1 + 0.3032*out2_2;
475 out[badX1 - 2] = (val <
min) ? out2_1 : val;
477 val = 1.0933*out2_1 - 0.0933*out2_2;
478 out[badX1 - 1] = (val <
min) ? out2_1 : val;
480 val = 1.4288*out2_1 - 0.4288*out2_2;
481 out[badX1] = (val <
min) ? out2_1 : val;
491 assert(badX0 >= 2 && badX1 < ncol);
493 out1_2 = out[badX0 - 2];
494 out1_1 = out[badX0 - 1];
496 switch (defect->getType()) {
498 val = -0.4288*out1_2 + 1.4288*out1_1;
499 out[badX1] = (val <
min) ? out1_1 : val;
503 val = -0.4288*out1_2 + 1.4288*out1_1;
504 out[badX0] = (val <
min) ? out1_1 : val;
506 val = -0.0933*out1_2 + 1.0933*out1_1;
507 out[badX1] = (val <
min) ? out1_1 : val;
511 val = -0.4288*out1_2 + 1.4288*out1_1;
512 out[badX0] = (val <
min) ? out1_1 : val;
514 val = -0.0933*out1_2 + 1.0933*out1_1;
515 out[badX1 - 1] = (val <
min) ? out1_1 : val;
517 val = 0.3032*out1_2 + 0.6968*out1_1;
518 out[badX1] = (val <
min) ? out1_1 : val;
522 val = -0.4288*out1_2 + 1.4288*out1_1;
523 out[badX0] = (val <
min) ? out1_1 : val;
525 val = -0.0933*out1_2 + 1.0933*out1_1;
526 out[badX0 + 1] = (val <
min) ? out1_1 : val;
528 val = 0.3032*out1_2 + 0.6968*out1_1;
529 out[badX1 - 1] = (val <
min) ? out1_1 : val;
531 val = 0.4630*out1_2 + 0.5370*out1_1;
532 out[badX1] = (val <
min) ? out1_1 : val;
536 val = -0.4288*out1_2 + 1.4288*out1_1;
537 out[badX0] = (val <
min) ? out1_1 : val;
539 val = -0.0933*out1_2 + 1.0933*out1_1;
540 out[badX0 + 1] = (val <
min) ? out1_1 : val;
542 val = 0.3032*out1_2 + 0.6968*out1_1;
543 out[badX1 - 2] = (val <
min) ? out1_1 : val;
545 val = 0.4630*out1_2 + 0.5370*out1_1;
546 out[badX1 - 1] = (val <
min) ? out1_1 : val;
548 val = 0.4959*out1_2 + 0.5041*out1_1;
549 out[badX1] = (val <
min) ? out1_1 : val;
553 val = -0.4288*out1_2 + 1.4288*out1_1;
554 out[badX0] = (val <
min) ? out1_1 : val;
556 val = -0.0933*out1_2 + 1.0933*out1_1;
557 out[badX0 + 1] = (val <
min) ? out1_1 : val;
559 val = 0.3032*out1_2 + 0.6968*out1_1;
560 out[badX0 + 2] = (val <
min) ? out1_1 : val;
562 val = 0.4630*out1_2 + 0.5370*out1_1;
563 out[badX1 - 2] = (val <
min) ? out1_1 : val;
565 val = 0.4959*out1_2 + 0.5041*out1_1;
566 out[badX1 - 1] = (val <
min) ? out1_1 : val;
568 val = 0.4997*out1_2 + 0.5003*out1_1;
569 out[badX1] = (val <
min) ? out1_1 : val;
573 val = -0.4288*out1_2 + 1.4288*out1_1;
574 out[badX0] = (val <
min) ? out1_1 : val;
576 val = -0.0933*out1_2 + 1.0933*out1_1;
577 out[badX0 + 1] = (val <
min) ? out1_1 : val;
579 val = 0.3032*out1_2 + 0.6968*out1_1;
580 out[badX0 + 2] = (val <
min) ? out1_1 : val;
582 val = 0.4630*out1_2 + 0.5370*out1_1;
583 out[badX1 - 3] = (val <
min) ? out1_1 : val;
585 val = 0.4959*out1_2 + 0.5041*out1_1;
586 out[badX1 - 2] = (val <
min) ? out1_1 : val;
588 val = 0.4997*out1_2 + 0.5003*out1_1;
589 out[badX1 - 1] = (val <
min) ? out1_1 : val;
591 val = 0.5000*out1_2 + 0.5000*out1_1;
592 out[badX1] = (val <
min) ? out1_1 : val;
596 val = -0.4288*out1_2 + 1.4288*out1_1;
597 out[badX0] = (val <
min) ? out1_1 : val;
599 val = -0.0933*out1_2 + 1.0933*out1_1;
600 out[badX0 + 1] = (val <
min) ? out1_1 : val;
602 val = 0.3032*out1_2 + 0.6968*out1_1;
603 out[badX0 + 2] = (val <
min) ? out1_1 : val;
605 val = 0.4630*out1_2 + 0.5370*out1_1;
606 out[badX0 + 3] = (val <
min) ? out1_1 : val;
608 val = 0.4959*out1_2 + 0.5041*out1_1;
609 out[badX1 - 3] = (val <
min) ? out1_1 : val;
611 val = 0.4997*out1_2 + 0.5003*out1_1;
612 out[badX1 - 2] = (val <
min) ? out1_1 : val;
614 val = 0.5000*out1_2 + 0.5000*out1_1;
615 out[badX1 - 1] = (val <
min) ? out1_1 : val;
617 val = 0.5000*out1_2 + 0.5000*out1_1;
618 out[badX1] = (val <
min) ? out1_1 : val;
622 val = -0.4288*out1_2 + 1.4288*out1_1;
623 out[badX0] = (val <
min) ? out1_1 : val;
625 val = -0.0933*out1_2 + 1.0933*out1_1;
626 out[badX0 + 1] = (val <
min) ? out1_1 : val;
628 val = 0.3032*out1_2 + 0.6968*out1_1;
629 out[badX0 + 2] = (val <
min) ? out1_1 : val;
631 val = 0.4630*out1_2 + 0.5370*out1_1;
632 out[badX0 + 3] = (val <
min) ? out1_1 : val;
634 val = 0.4959*out1_2 + 0.5041*out1_1;
635 out[badX1 - 4] = (val <
min) ? out1_1 : val;
637 val = 0.4997*out1_2 + 0.5003*out1_1;
638 out[badX1 - 3] = (val <
min) ? out1_1 : val;
640 val = 0.5000*out1_2 + 0.5000*out1_1;
641 out[badX1 - 2] = (val <
min) ? out1_1 : val;
643 val = 0.5000*out1_2 + 0.5000*out1_1;
644 out[badX1 - 1] = (val <
min) ? out1_1 : val;
646 val = 0.5000*out1_2 + 0.5000*out1_1;
647 out[badX1] = (val <
min) ? out1_1 : val;
651 val = -0.4288*out1_2 + 1.4288*out1_1;
652 out[badX0] = (val <
min) ? out1_1 : val;
654 val = -0.0933*out1_2 + 1.0933*out1_1;
655 out[badX0 + 1] = (val <
min) ? out1_1 : val;
657 val = 0.3032*out1_2 + 0.6968*out1_1;
658 out[badX0 + 2] = (val <
min) ? out1_1 : val;
660 val = 0.4630*out1_2 + 0.5370*out1_1;
661 out[badX0 + 3] = (val <
min) ? out1_1 : val;
663 val = 0.4959*out1_2 + 0.5041*out1_1;
664 out[badX0 + 4] = (val <
min) ? out1_1 : val;
666 val = 0.4997*out1_2 + 0.5003*out1_1;
667 out[badX1 - 4] = (val <
min) ? out1_1 : val;
669 val = 0.5000*out1_2 + 0.5000*out1_1;
670 out[badX1 - 3] = (val <
min) ? out1_1 : val;
672 val = 0.5000*out1_2 + 0.5000*out1_1;
673 out[badX1 - 2] = (val <
min) ? out1_1 : val;
675 val = 0.5000*out1_2 + 0.5000*out1_1;
676 out[badX1 - 1] = (val <
min) ? out1_1 : val;
678 val = 0.5000*out1_2 + 0.5000*out1_1;
679 out[badX1] = (val <
min) ? out1_1 : val;
688 assert(badX1 < ncol);
697 for (
int j = badX0; j <= badX1; j++) {
703 out1_2 = out[badX0 - 2];
704 out1_1 = out[badX0 - 1];
706 switch (defect->getType()) {
708 val = -0.4288*out1_2 + 1.4288*out1_1;
709 out[badX0] = (val <
min) ? out1_1 : val;
711 val = -0.0933*out1_2 + 1.0933*out1_1;
712 out[badX0 + 1] = (val <
min) ? out1_1 : val;
714 val = 0.3032*out1_2 + 0.6968*out1_1;
715 out[badX0 + 2] = (val <
min) ? out1_1 : val;
717 val = 0.4630*out1_2 + 0.5370*out1_1;
718 out[badX0 + 3] = (val <
min) ? out1_1 : val;
720 val = 0.4959*out1_2 + 0.5041*out1_1;
721 out[badX0 + 4] = (val <
min) ? out1_1 : val;
723 val = 0.4997*out1_2 + 0.5003*out1_1;
724 out[badX0 + 5] = (val <
min) ? out1_1 : val;
726 val = 0.5000*out1_2 + 0.5000*out1_1;
727 val = (val <
min) ? out1_1 : val;
729 for (
int j = badX0 + 6; j <= badX1; j++) {
742 assert(badX0 >= 2 && badX1 + 2 < ncol);
743 out1_2 = out[badX0 - 2];
744 out2_2 = out[badX1 + 2];
746 assert(badX0 >= 1 && badX1 + 2 < ncol);
748 out2_2 = out[badX1 + 2];
750 assert(badX0 >= 2 && badX1 + 1 < ncol);
751 out1_2 = out[badX0 - 2];
755 out1_2 = out2_2 = -1;
757 out1_1 = out[badX0 - 1];
758 out2_1 = out[badX1 + 1];
760 switch (defect->getType()) {
762 val = 0.5000*out1_1 + 0.5000*out2_1;
763 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
767 val = 0.4875*out1_1 + 0.8959*out2_1 - 0.3834*out2_2;
768 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
772 val = 0.7297*out1_1 + 0.2703*out2_1;
773 out[badX0] = (val < 0) ? 0 : val;
775 val = 0.2703*out1_1 + 0.7297*out2_1;
776 out[badX1] = (val < 0) ? 0 : val;
780 val = 0.7538*out1_1 + 0.5680*out2_1 - 0.3218*out2_2;
781 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
783 val = 0.3095*out1_1 + 1.2132*out2_1 - 0.5227*out2_2;
784 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
788 val = -0.3834*out1_2 + 0.8959*out1_1 + 0.4875*out2_1;
789 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
795 val = -0.2737*out1_2 + 0.7737*out1_1 + 0.7737*out2_1 - 0.2737*out2_2;
796 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
800 val = 0.8430*out1_1 + 0.1570*out2_1;
801 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
803 val = 0.5000*out1_1 + 0.5000*out2_1;
804 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
806 val = 0.1570*out1_1 + 0.8430*out2_1;
807 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
811 val = 0.8525*out1_1 + 0.2390*out2_1 - 0.0915*out2_2;
812 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
814 val = 0.5356*out1_1 + 0.8057*out2_1 - 0.3413*out2_2;
815 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
817 val = 0.2120*out1_1 + 1.3150*out2_1 - 0.5270*out2_2;
818 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
822 val = -0.5227*out1_2 + 1.2132*out1_1 + 0.3095*out2_1;
823 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
825 val = -0.3218*out1_2 + 0.5680*out1_1 + 0.7538*out2_1;
826 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
830 val = -0.4793*out1_2 + 1.1904*out1_1 + 0.5212*out2_1 - 0.2323*out2_2;
831 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
833 val = -0.2323*out1_2 + 0.5212*out1_1 + 1.1904*out2_1 - 0.4793*out2_2;
834 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
838 val = 0.8810*out1_1 + 0.1190*out2_1;
839 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
841 val = 0.6315*out1_1 + 0.3685*out2_1;
842 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
844 val = 0.3685*out1_1 + 0.6315*out2_1;
845 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
847 val = 0.1190*out1_1 + 0.8810*out2_1;
848 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
852 val = 0.8779*out1_1 + 0.0945*out2_1 + 0.0276*out2_2;
853 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
855 val = 0.6327*out1_1 + 0.3779*out2_1 - 0.0106*out2_2;
856 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
858 val = 0.4006*out1_1 + 0.8914*out2_1 - 0.2920*out2_2;
859 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
861 val = 0.1757*out1_1 + 1.3403*out2_1 - 0.5160*out2_2;
862 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
866 val = -0.5270*out1_2 + 1.3150*out1_1 + 0.2120*out2_1;
867 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
869 val = -0.3413*out1_2 + 0.8057*out1_1 + 0.5356*out2_1;
870 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
872 val = -0.0915*out1_2 + 0.2390*out1_1 + 0.8525*out2_1;
873 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
877 val = -0.5230*out1_2 + 1.3163*out1_1 + 0.2536*out2_1 - 0.0469*out2_2;
878 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
880 val = -0.3144*out1_2 + 0.8144*out1_1 + 0.8144*out2_1 - 0.3144*out2_2;
881 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
883 val = -0.0469*out1_2 + 0.2536*out1_1 + 1.3163*out2_1 - 0.5230*out2_2;
884 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
888 val = 0.8885*out1_1 + 0.1115*out2_1;
889 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
891 val = 0.6748*out1_1 + 0.3252*out2_1;
892 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
894 val = 0.5000*out1_1 + 0.5000*out2_1;
895 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
897 val = 0.3252*out1_1 + 0.6748*out2_1;
898 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
900 val = 0.1115*out1_1 + 0.8885*out2_1;
901 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
905 val = 0.8824*out1_1 + 0.0626*out2_1 + 0.0549*out2_2;
906 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
908 val = 0.6601*out1_1 + 0.2068*out2_1 + 0.1331*out2_2;
909 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
911 val = 0.4938*out1_1 + 0.4498*out2_1 + 0.0564*out2_2;
912 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
914 val = 0.3551*out1_1 + 0.9157*out2_1 - 0.2708*out2_2;
915 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
917 val = 0.1682*out1_1 + 1.3447*out2_1 - 0.5129*out2_2;
918 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
922 val = -0.5160*out1_2 + 1.3403*out1_1 + 0.1757*out2_1;
923 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
925 val = -0.2920*out1_2 + 0.8914*out1_1 + 0.4006*out2_1;
926 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
928 val = -0.0106*out1_2 + 0.3779*out1_1 + 0.6327*out2_1;
929 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
931 val = 0.0276*out1_2 + 0.0945*out1_1 + 0.8779*out2_1;
932 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
936 val = -0.5197*out1_2 + 1.3370*out1_1 + 0.1231*out2_1 + 0.0596*out2_2;
937 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
939 val = -0.2924*out1_2 + 0.8910*out1_1 + 0.3940*out2_1 + 0.0074*out2_2;
940 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
942 val = 0.0074*out1_2 + 0.3940*out1_1 + 0.8910*out2_1 - 0.2924*out2_2;
943 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
945 val = 0.0596*out1_2 + 0.1231*out1_1 + 1.3370*out2_1 - 0.5197*out2_2;
946 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
950 val = 0.8893*out1_1 + 0.1107*out2_1;
951 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
953 val = 0.6830*out1_1 + 0.3170*out2_1;
954 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
956 val = 0.5435*out1_1 + 0.4565*out2_1;
957 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
959 val = 0.4565*out1_1 + 0.5435*out2_1;
960 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
962 val = 0.3170*out1_1 + 0.6830*out2_1;
963 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
965 val = 0.1107*out1_1 + 0.8893*out2_1;
966 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
970 val = 0.8829*out1_1 + 0.0588*out2_1 + 0.0583*out2_2;
971 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
973 val = 0.6649*out1_1 + 0.1716*out2_1 + 0.1635*out2_2;
974 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
976 val = 0.5212*out1_1 + 0.2765*out2_1 + 0.2024*out2_2;
977 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
979 val = 0.4477*out1_1 + 0.4730*out2_1 + 0.0793*out2_2;
980 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
982 val = 0.3465*out1_1 + 0.9201*out2_1 - 0.2666*out2_2;
983 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
985 val = 0.1673*out1_1 + 1.3452*out2_1 - 0.5125*out2_2;
986 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
990 val = -0.5129*out1_2 + 1.3447*out1_1 + 0.1682*out2_1;
991 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
993 val = -0.2708*out1_2 + 0.9157*out1_1 + 0.3551*out2_1;
994 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
996 val = 0.0564*out1_2 + 0.4498*out1_1 + 0.4938*out2_1;
997 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
999 val = 0.1331*out1_2 + 0.2068*out1_1 + 0.6601*out2_1;
1000 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1002 val = 0.0549*out1_2 + 0.0626*out1_1 + 0.8824*out2_1;
1003 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1007 val = -0.5179*out1_2 + 1.3397*out1_1 + 0.0928*out2_1 + 0.0854*out2_2;
1008 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1010 val = -0.2796*out1_2 + 0.9069*out1_1 + 0.2231*out2_1 + 0.1495*out2_2;
1011 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1013 val = 0.0533*out1_2 + 0.4467*out1_1 + 0.4467*out2_1 + 0.0533*out2_2;
1014 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1016 val = 0.1495*out1_2 + 0.2231*out1_1 + 0.9069*out2_1 - 0.2796*out2_2;
1017 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1019 val = 0.0854*out1_2 + 0.0928*out1_1 + 1.3397*out2_1 - 0.5179*out2_2;
1020 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1024 val = 0.8894*out1_1 + 0.1106*out2_1;
1025 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1027 val = 0.6839*out1_1 + 0.3161*out2_1;
1028 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1030 val = 0.5517*out1_1 + 0.4483*out2_1;
1031 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1033 val = 0.5000*out1_1 + 0.5000*out2_1;
1034 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1036 val = 0.4483*out1_1 + 0.5517*out2_1;
1037 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1039 val = 0.3161*out1_1 + 0.6839*out2_1;
1040 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1042 val = 0.1106*out1_1 + 0.8894*out2_1;
1043 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1047 val = 0.8829*out1_1 + 0.0585*out2_1 + 0.0585*out2_2;
1048 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1050 val = 0.6654*out1_1 + 0.1676*out2_1 + 0.1670*out2_2;
1051 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1053 val = 0.5260*out1_1 + 0.2411*out2_1 + 0.2329*out2_2;
1054 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1056 val = 0.4751*out1_1 + 0.2995*out2_1 + 0.2254*out2_2;
1057 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1059 val = 0.4390*out1_1 + 0.4773*out2_1 + 0.0836*out2_2;
1060 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1062 val = 0.3456*out1_1 + 0.9205*out2_1 - 0.2661*out2_2;
1063 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1065 val = 0.1673*out1_1 + 1.3452*out2_1 - 0.5125*out2_2;
1066 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1070 val = -0.5125*out1_2 + 1.3452*out1_1 + 0.1673*out2_1;
1071 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1073 val = -0.2666*out1_2 + 0.9201*out1_1 + 0.3465*out2_1;
1074 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1076 val = 0.0793*out1_2 + 0.4730*out1_1 + 0.4477*out2_1;
1077 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1079 val = 0.2024*out1_2 + 0.2765*out1_1 + 0.5212*out2_1;
1080 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1082 val = 0.1635*out1_2 + 0.1716*out1_1 + 0.6649*out2_1;
1083 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1085 val = 0.0583*out1_2 + 0.0588*out1_1 + 0.8829*out2_1;
1086 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1090 val = -0.5177*out1_2 + 1.3400*out1_1 + 0.0891*out2_1 + 0.0886*out2_2;
1091 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1093 val = -0.2771*out1_2 + 0.9095*out1_1 + 0.1878*out2_1 + 0.1797*out2_2;
1094 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1096 val = 0.0677*out1_2 + 0.4614*out1_1 + 0.2725*out2_1 + 0.1984*out2_2;
1097 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1099 val = 0.1984*out1_2 + 0.2725*out1_1 + 0.4614*out2_1 + 0.0677*out2_2;
1100 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1102 val = 0.1797*out1_2 + 0.1878*out1_1 + 0.9095*out2_1 - 0.2771*out2_2;
1103 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1105 val = 0.0886*out1_2 + 0.0891*out1_1 + 1.3400*out2_1 - 0.5177*out2_2;
1106 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1110 val = 0.8894*out1_1 + 0.1106*out2_1;
1111 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1113 val = 0.6839*out1_1 + 0.3161*out2_1;
1114 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1116 val = 0.5526*out1_1 + 0.4474*out2_1;
1117 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1119 val = 0.5082*out1_1 + 0.4918*out2_1;
1120 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1122 val = 0.4918*out1_1 + 0.5082*out2_1;
1123 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1125 val = 0.4474*out1_1 + 0.5526*out2_1;
1126 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1128 val = 0.3161*out1_1 + 0.6839*out2_1;
1129 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1131 val = 0.1106*out1_1 + 0.8894*out2_1;
1132 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1136 val = 0.8829*out1_1 + 0.0585*out2_1 + 0.0585*out2_2;
1137 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1139 val = 0.6654*out1_1 + 0.1673*out2_1 + 0.1673*out2_2;
1140 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1142 val = 0.5265*out1_1 + 0.2370*out2_1 + 0.2365*out2_2;
1143 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1145 val = 0.4799*out1_1 + 0.2641*out2_1 + 0.2560*out2_2;
1146 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1148 val = 0.4664*out1_1 + 0.3038*out2_1 + 0.2298*out2_2;
1149 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1151 val = 0.4381*out1_1 + 0.4778*out2_1 + 0.0841*out2_2;
1152 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1154 val = 0.3455*out1_1 + 0.9206*out2_1 - 0.2661*out2_2;
1155 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1157 val = 0.1673*out1_1 + 1.3452*out2_1 - 0.5125*out2_2;
1158 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1162 val = -0.5125*out1_2 + 1.3452*out1_1 + 0.1673*out2_1;
1163 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1165 val = -0.2661*out1_2 + 0.9205*out1_1 + 0.3456*out2_1;
1166 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1168 val = 0.0836*out1_2 + 0.4773*out1_1 + 0.4390*out2_1;
1169 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1171 val = 0.2254*out1_2 + 0.2995*out1_1 + 0.4751*out2_1;
1172 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1174 val = 0.2329*out1_2 + 0.2411*out1_1 + 0.5260*out2_1;
1175 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1177 val = 0.1670*out1_2 + 0.1676*out1_1 + 0.6654*out2_1;
1178 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1180 val = 0.0585*out1_2 + 0.0585*out1_1 + 0.8829*out2_1;
1181 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1185 val = -0.5177*out1_2 + 1.3400*out1_1 + 0.0889*out2_1 + 0.0888*out2_2;
1186 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1188 val = -0.2768*out1_2 + 0.9098*out1_1 + 0.1838*out2_1 + 0.1832*out2_2;
1189 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1191 val = 0.0703*out1_2 + 0.4639*out1_1 + 0.2370*out2_1 + 0.2288*out2_2;
1192 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1194 val = 0.2130*out1_2 + 0.2870*out1_1 + 0.2870*out2_1 + 0.2130*out2_2;
1195 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1197 val = 0.2288*out1_2 + 0.2370*out1_1 + 0.4639*out2_1 + 0.0703*out2_2;
1198 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1200 val = 0.1832*out1_2 + 0.1838*out1_1 + 0.9098*out2_1 - 0.2768*out2_2;
1201 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1203 val = 0.0888*out1_2 + 0.0889*out1_1 + 1.3400*out2_1 - 0.5177*out2_2;
1204 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1208 val = 0.8894*out1_1 + 0.1106*out2_1;
1209 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1211 val = 0.6839*out1_1 + 0.3161*out2_1;
1212 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1214 val = 0.5527*out1_1 + 0.4473*out2_1;
1215 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1217 val = 0.5091*out1_1 + 0.4909*out2_1;
1218 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1220 val = 0.5000*out1_1 + 0.5000*out2_1;
1221 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1223 val = 0.4909*out1_1 + 0.5091*out2_1;
1224 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1226 val = 0.4473*out1_1 + 0.5527*out2_1;
1227 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1229 val = 0.3161*out1_1 + 0.6839*out2_1;
1230 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1232 val = 0.1106*out1_1 + 0.8894*out2_1;
1233 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1237 val = 0.8829*out1_1 + 0.0585*out2_1 + 0.0585*out2_2;
1238 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1240 val = 0.6654*out1_1 + 0.1673*out2_1 + 0.1673*out2_2;
1241 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1243 val = 0.5265*out1_1 + 0.2368*out2_1 + 0.2367*out2_2;
1244 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1246 val = 0.4804*out1_1 + 0.2601*out2_1 + 0.2595*out2_2;
1247 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1249 val = 0.4712*out1_1 + 0.2685*out2_1 + 0.2603*out2_2;
1250 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1252 val = 0.4654*out1_1 + 0.3043*out2_1 + 0.2302*out2_2;
1253 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1255 val = 0.4380*out1_1 + 0.4778*out2_1 + 0.0842*out2_2;
1256 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1258 val = 0.3455*out1_1 + 0.9206*out2_1 - 0.2661*out2_2;
1259 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1261 val = 0.1673*out1_1 + 1.3452*out2_1 - 0.5125*out2_2;
1262 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1266 val = -0.5125*out1_2 + 1.3452*out1_1 + 0.1673*out2_1;
1267 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1269 val = -0.2661*out1_2 + 0.9206*out1_1 + 0.3455*out2_1;
1270 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1272 val = 0.0841*out1_2 + 0.4778*out1_1 + 0.4381*out2_1;
1273 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1275 val = 0.2298*out1_2 + 0.3038*out1_1 + 0.4664*out2_1;
1276 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1278 val = 0.2560*out1_2 + 0.2641*out1_1 + 0.4799*out2_1;
1279 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1281 val = 0.2365*out1_2 + 0.2370*out1_1 + 0.5265*out2_1;
1282 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1284 val = 0.1673*out1_2 + 0.1673*out1_1 + 0.6654*out2_1;
1285 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1287 val = 0.0585*out1_2 + 0.0585*out1_1 + 0.8829*out2_1;
1288 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1292 val = -0.5177*out1_2 + 1.3400*out1_1 + 0.0888*out2_1 + 0.0888*out2_2;
1293 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1295 val = -0.2768*out1_2 + 0.9098*out1_1 + 0.1835*out2_1 + 0.1835*out2_2;
1296 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1298 val = 0.0705*out1_2 + 0.4642*out1_1 + 0.2329*out2_1 + 0.2324*out2_2;
1299 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1301 val = 0.2155*out1_2 + 0.2896*out1_1 + 0.2515*out2_1 + 0.2434*out2_2;
1302 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1304 val = 0.2434*out1_2 + 0.2515*out1_1 + 0.2896*out2_1 + 0.2155*out2_2;
1305 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1307 val = 0.2324*out1_2 + 0.2329*out1_1 + 0.4642*out2_1 + 0.0705*out2_2;
1308 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1310 val = 0.1835*out1_2 + 0.1835*out1_1 + 0.9098*out2_1 - 0.2768*out2_2;
1311 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1313 val = 0.0888*out1_2 + 0.0888*out1_1 + 1.3400*out2_1 - 0.5177*out2_2;
1314 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1318 val = 0.8894*out1_1 + 0.1106*out2_1;
1319 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1321 val = 0.6839*out1_1 + 0.3161*out2_1;
1322 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1324 val = 0.5527*out1_1 + 0.4473*out2_1;
1325 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1327 val = 0.5092*out1_1 + 0.4908*out2_1;
1328 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1330 val = 0.5009*out1_1 + 0.4991*out2_1;
1331 out[badX0 + 4] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1333 val = 0.4991*out1_1 + 0.5009*out2_1;
1334 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1336 val = 0.4908*out1_1 + 0.5092*out2_1;
1337 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1339 val = 0.4473*out1_1 + 0.5527*out2_1;
1340 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1342 val = 0.3161*out1_1 + 0.6839*out2_1;
1343 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1345 val = 0.1106*out1_1 + 0.8894*out2_1;
1346 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1):
val;
1350 val = 0.8829*out1_1 + 0.0585*out2_1 + 0.0585*out2_2;
1351 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1353 val = 0.6654*out1_1 + 0.1673*out2_1 + 0.1673*out2_2;
1354 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1356 val = 0.5265*out1_1 + 0.2367*out2_1 + 0.2367*out2_2;
1357 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1359 val = 0.4804*out1_1 + 0.2598*out2_1 + 0.2598*out2_2;
1360 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1362 val = 0.4717*out1_1 + 0.2644*out2_1 + 0.2639*out2_2;
1363 out[badX0 + 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1365 val = 0.4703*out1_1 + 0.2690*out2_1 + 0.2608*out2_2;
1366 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1368 val = 0.4654*out1_1 + 0.3043*out2_1 + 0.2303*out2_2;
1369 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1371 val = 0.4380*out1_1 + 0.4778*out2_1 + 0.0842*out2_2;
1372 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1374 val = 0.3455*out1_1 + 0.9206*out2_1 - 0.2661*out2_2;
1375 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1377 val = 0.1673*out1_1 + 1.3452*out2_1 - 0.5125*out2_2;
1378 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1382 val = -0.5125*out1_2 + 1.3452*out1_1 + 0.1673*out2_1;
1383 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1385 val = -0.2661*out1_2 + 0.9206*out1_1 + 0.3455*out2_1;
1386 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1388 val = 0.0842*out1_2 + 0.4778*out1_1 + 0.4380*out2_1;
1389 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1391 val = 0.2302*out1_2 + 0.3043*out1_1 + 0.4654*out2_1;
1392 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1394 val = 0.2603*out1_2 + 0.2685*out1_1 + 0.4712*out2_1;
1395 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1397 val = 0.2595*out1_2 + 0.2601*out1_1 + 0.4804*out2_1;
1398 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1400 val = 0.2367*out1_2 + 0.2368*out1_1 + 0.5265*out2_1;
1401 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1403 val = 0.1673*out1_2 + 0.1673*out1_1 + 0.6654*out2_1;
1404 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1406 val = 0.0585*out1_2 + 0.0585*out1_1 + 0.8829*out2_1;
1407 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1411 val = -0.5177*out1_2 + 1.3400*out1_1 + 0.0888*out2_1 + 0.0888*out2_2;
1412 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1414 val = -0.2768*out1_2 + 0.9098*out1_1 + 0.1835*out2_1 + 0.1835*out2_2;
1415 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1417 val = 0.0705*out1_2 + 0.4642*out1_1 + 0.2326*out2_1 + 0.2326*out2_2;
1418 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1420 val = 0.2158*out1_2 + 0.2899*out1_1 + 0.2474*out2_1 + 0.2469*out2_2;
1421 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1423 val = 0.2459*out1_2 + 0.2541*out1_1 + 0.2541*out2_1 + 0.2459*out2_2;
1424 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1426 val = 0.2469*out1_2 + 0.2474*out1_1 + 0.2899*out2_1 + 0.2158*out2_2;
1427 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1429 val = 0.2326*out1_2 + 0.2326*out1_1 + 0.4642*out2_1 + 0.0705*out2_2;
1430 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1432 val = 0.1835*out1_2 + 0.1835*out1_1 + 0.9098*out2_1 - 0.2768*out2_2;
1433 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1435 val = 0.0888*out1_2 + 0.0888*out1_1 + 1.3400*out2_1 - 0.5177*out2_2;
1436 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1440 val = 0.8829*out1_1 + 0.0585*out2_1 + 0.0585*out2_2;
1441 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1443 val = 0.6654*out1_1 + 0.1673*out2_1 + 0.1673*out2_2;
1444 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1446 val = 0.5265*out1_1 + 0.2367*out2_1 + 0.2367*out2_2;
1447 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1449 val = 0.4804*out1_1 + 0.2598*out2_1 + 0.2598*out2_2;
1450 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1452 val = 0.4718*out1_1 + 0.2641*out2_1 + 0.2641*out2_2;
1453 out[badX0 + 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1455 val = 0.4708*out1_1 + 0.2649*out2_1 + 0.2644*out2_2;
1456 out[badX1 - 5] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1458 val = 0.4702*out1_1 + 0.2690*out2_1 + 0.2608*out2_2;
1459 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1461 val = 0.4654*out1_1 + 0.3044*out2_1 + 0.2303*out2_2;
1462 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1464 val = 0.4380*out1_1 + 0.4778*out2_1 + 0.0842*out2_2;
1465 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1467 val = 0.3455*out1_1 + 0.9206*out2_1 - 0.2661*out2_2;
1468 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1470 val = 0.1673*out1_1 + 1.3452*out2_1 - 0.5125*out2_2;
1471 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1475 val = -0.5125*out1_2 + 1.3452*out1_1 + 0.1673*out2_1;
1476 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1478 val = -0.2661*out1_2 + 0.9206*out1_1 + 0.3455*out2_1;
1479 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1481 val = 0.0842*out1_2 + 0.4778*out1_1 + 0.4380*out2_1;
1482 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1484 val = 0.2303*out1_2 + 0.3043*out1_1 + 0.4654*out2_1;
1485 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1487 val = 0.2608*out1_2 + 0.2690*out1_1 + 0.4703*out2_1;
1488 out[badX0 + 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1490 val = 0.2639*out1_2 + 0.2644*out1_1 + 0.4717*out2_1;
1491 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1493 val = 0.2598*out1_2 + 0.2598*out1_1 + 0.4804*out2_1;
1494 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1496 val = 0.2367*out1_2 + 0.2367*out1_1 + 0.5265*out2_1;
1497 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1499 val = 0.1673*out1_2 + 0.1673*out1_1 + 0.6654*out2_1;
1500 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1502 val = 0.0585*out1_2 + 0.0585*out1_1 + 0.8829*out2_1;
1503 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1507 val = -0.5177*out1_2 + 1.3400*out1_1 + 0.0888*out2_1 + 0.0888*out2_2;
1508 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1510 val = -0.2768*out1_2 + 0.9098*out1_1 + 0.1835*out2_1 + 0.1835*out2_2;
1511 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1513 val = 0.0705*out1_2 + 0.4642*out1_1 + 0.2326*out2_1 + 0.2326*out2_2;
1514 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1516 val = 0.2158*out1_2 + 0.2899*out1_1 + 0.2472*out2_1 + 0.2471*out2_2;
1517 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1519 val = 0.2462*out1_2 + 0.2544*out1_1 + 0.2500*out2_1 + 0.2495*out2_2;
1520 out[badX0 + 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1522 val = 0.2495*out1_2 + 0.2500*out1_1 + 0.2544*out2_1 + 0.2462*out2_2;
1523 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1525 val = 0.2471*out1_2 + 0.2472*out1_1 + 0.2899*out2_1 + 0.2158*out2_2;
1526 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1528 val = 0.2326*out1_2 + 0.2326*out1_1 + 0.4642*out2_1 + 0.0705*out2_2;
1529 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1531 val = 0.1835*out1_2 + 0.1835*out1_1 + 0.9098*out2_1 - 0.2768*out2_2;
1532 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1534 val = 0.0888*out1_2 + 0.0888*out1_1 + 1.3400*out2_1 - 0.5177*out2_2;
1535 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1539 val = 0.8829*out1_1 + 0.0585*out2_1 + 0.0585*out2_2;
1540 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1542 val = 0.6654*out1_1 + 0.1673*out2_1 + 0.1673*out2_2;
1543 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1545 val = 0.5265*out1_1 + 0.2367*out2_1 + 0.2367*out2_2;
1546 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1548 val = 0.4804*out1_1 + 0.2598*out2_1 + 0.2598*out2_2;
1549 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1551 val = 0.4718*out1_1 + 0.2641*out2_1 + 0.2641*out2_2;
1552 out[badX0 + 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1554 val = 0.4708*out1_1 + 0.2646*out2_1 + 0.2646*out2_2;
1555 out[badX0 + 5] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1557 val = 0.4707*out1_1 + 0.2649*out2_1 + 0.2644*out2_2;
1558 out[badX1 - 5] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1560 val = 0.4702*out1_1 + 0.2690*out2_1 + 0.2608*out2_2;
1561 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1563 val = 0.4654*out1_1 + 0.3044*out2_1 + 0.2303*out2_2;
1564 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1566 val = 0.4380*out1_1 + 0.4778*out2_1 + 0.0842*out2_2;
1567 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1569 val = 0.3455*out1_1 + 0.9206*out2_1 - 0.2661*out2_2;
1570 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1572 val = 0.1673*out1_1 + 1.3452*out2_1 - 0.5125*out2_2;
1573 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1577 val = -0.5125*out1_2 + 1.3452*out1_1 + 0.1673*out2_1;
1578 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1580 val = -0.2661*out1_2 + 0.9206*out1_1 + 0.3455*out2_1;
1581 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1583 val = 0.0842*out1_2 + 0.4778*out1_1 + 0.4380*out2_1;
1584 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1586 val = 0.2303*out1_2 + 0.3044*out1_1 + 0.4654*out2_1;
1587 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1589 val = 0.2608*out1_2 + 0.2690*out1_1 + 0.4702*out2_1;
1590 out[badX0 + 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1592 val = 0.2644*out1_2 + 0.2649*out1_1 + 0.4708*out2_1;
1593 out[badX1 - 5] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1595 val = 0.2641*out1_2 + 0.2641*out1_1 + 0.4718*out2_1;
1596 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1598 val = 0.2598*out1_2 + 0.2598*out1_1 + 0.4804*out2_1;
1599 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1601 val = 0.2367*out1_2 + 0.2367*out1_1 + 0.5265*out2_1;
1602 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1604 val = 0.1673*out1_2 + 0.1673*out1_1 + 0.6654*out2_1;
1605 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1607 val = 0.0585*out1_2 + 0.0585*out1_1 + 0.8829*out2_1;
1608 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1622 if (badX1 + 2 >= ncol) {
1624 if (badX1 == ncol - 2) {
1625 val = out[ncol - 1];
1627 val = fallbackValue;
1629 for (
int j = badX0; j <= badX1; j++) {
1635 out2_2 = out[badX1 + 2];
1637 assert(badX0 >= 2 && badX1 + 2 < ncol);
1638 out1_2 = out[badX0 - 2];
1639 out2_2 = out[badX1 + 2];
1641 assert(badX1 + 1 < ncol);
1648 val = fallbackValue;
1650 for (
int j = badX0; j <= badX1; j++) {
1655 out1_2 = out[badX0 - 2];
1659 out1_2 = out2_2 = -1;
1662 out1_1 = out[badX0 - 1];
1663 out2_1 = out[badX1 + 1];
1665 switch (defect->getType()) {
1668 val = 0.8894*out1_1 + 0.1106*out2_1;
1669 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1671 val = 0.6839*out1_1 + 0.3161*out2_1;
1672 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1674 val = 0.5527*out1_1 + 0.4473*out2_1;
1675 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1677 val = 0.5092*out1_1 + 0.4908*out2_1;
1678 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1680 val = 0.5010*out1_1 + 0.4990*out2_1;
1681 out[badX0 + 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1683 val = 0.5001*out1_1 + 0.4999*out2_1;
1684 out[badX0 + 5] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1687 val = 0.5000*out1_1 + 0.5000*out2_1;
1689 for (
int j = badX0 + 6; j < badX1 - 5; j++) {
1693 val = 0.4999*out1_1 + 0.5001*out2_1;
1694 out[badX1 - 5] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1696 val = 0.4990*out1_1 + 0.5010*out2_1;
1697 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1699 val = 0.4908*out1_1 + 0.5092*out2_1;
1700 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1702 val = 0.4473*out1_1 + 0.5527*out2_1;
1703 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1705 val = 0.3161*out1_1 + 0.6839*out2_1;
1706 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1708 val = 0.1106*out1_1 + 0.8894*out2_1;
1709 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1713 val = 0.8829*out1_1 + 0.0585*out2_1 + 0.0585*out2_2;
1714 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1716 val = 0.6654*out1_1 + 0.1673*out2_1 + 0.1673*out2_2;
1717 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1719 val = 0.5265*out1_1 + 0.2367*out2_1 + 0.2367*out2_2;
1720 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1722 val = 0.4804*out1_1 + 0.2598*out2_1 + 0.2598*out2_2;
1723 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1725 val = 0.4718*out1_1 + 0.2641*out2_1 + 0.2641*out2_2;
1726 out[badX0 + 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1728 val = 0.4708*out1_1 + 0.2646*out2_1 + 0.2646*out2_2;
1729 out[badX0 + 5] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1731 val = 0.4707*out[badX0 - 1] + 0.2646*out[badX1 + 1] + 0.2646*out[badX1 + 2];
1733 for (
int j = badX0 + 6; j < badX1 - 5; j++) {
1737 val = 0.4707*out1_1 + 0.2649*out2_1 + 0.2644*out2_2;
1738 out[badX1 - 5] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1740 val = 0.4702*out1_1 + 0.2690*out2_1 + 0.2608*out2_2;
1741 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1743 val = 0.4654*out1_1 + 0.3044*out2_1 + 0.2303*out2_2;
1744 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1746 val = 0.4380*out1_1 + 0.4778*out2_1 + 0.0842*out2_2;
1747 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1749 val = 0.3455*out1_1 + 0.9206*out2_1 - 0.2661*out2_2;
1750 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1752 val = 0.1673*out1_1 + 1.3452*out2_1 - 0.5125*out2_2;
1753 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1757 val = -0.5125*out1_2 + 1.3452*out1_1 + 0.1673*out2_1;
1758 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1760 val = -0.2661*out1_2 + 0.9206*out1_1 + 0.3455*out2_1;
1761 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1763 val = 0.0842*out1_2 + 0.4778*out1_1 + 0.4380*out2_1;
1764 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1766 val = 0.2303*out1_2 + 0.3044*out1_1 + 0.4654*out2_1;
1767 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1769 val = 0.2608*out1_2 + 0.2690*out1_1 + 0.4702*out2_1;
1770 out[badX0 + 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1772 val = 0.2644*out1_2 + 0.2649*out1_1 + 0.4707*out2_1;
1773 out[badX0 + 5] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1775 val = 0.2646*out1_2 + 0.2646*out1_1 + 0.4707*out2_1;
1776 val = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1778 for (
int j = badX0 + 6; j < badX1 - 5; j++) {
1782 val = 0.2646*out1_2 + 0.2646*out1_1 + 0.4708*out2_1;
1783 out[badX1 - 5] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1785 val = 0.2641*out1_2 + 0.2641*out1_1 + 0.4718*out2_1;
1786 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1788 val = 0.2598*out1_2 + 0.2598*out1_1 + 0.4804*out2_1;
1789 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1791 val = 0.2367*out1_2 + 0.2367*out1_1 + 0.5265*out2_1;
1792 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1794 val = 0.1673*out1_2 + 0.1673*out1_1 + 0.6654*out2_1;
1795 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1797 val = 0.0585*out1_2 + 0.0585*out1_1 + 0.8829*out2_1;
1798 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1802 val = -0.5177*out1_2 + 1.3400*out1_1 + 0.0888*out2_1 + 0.0888*out2_2;
1803 out[badX0] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1805 val = -0.2768*out1_2 + 0.9098*out1_1 + 0.1835*out2_1 + 0.1835*out2_2;
1806 out[badX0 + 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1808 val = 0.0705*out1_2 + 0.4642*out1_1 + 0.2326*out2_1 + 0.2326*out2_2;
1809 out[badX0 + 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1811 val = 0.2158*out1_2 + 0.2899*out1_1 + 0.2472*out2_1 + 0.2472*out2_2;
1812 out[badX0 + 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1814 val = 0.2462*out1_2 + 0.2544*out1_1 + 0.2497*out2_1 + 0.2497*out2_2;
1815 out[badX0 + 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1817 val = 0.2497*out1_2 + 0.2503*out1_1 + 0.2500*out2_1 + 0.2500*out2_2;
1818 out[badX0 + 5] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1820 val = 0.2500*out1_2 + 0.2500*out1_1 + 0.2500*out2_1 + 0.2500*out2_2;
1821 val = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1823 for (
int j = badX0 + 6; j < badX1 - 5; j++) {
1827 val = 0.2500*out1_2 + 0.2500*out1_1 + 0.2503*out2_1 + 0.2497*out2_2;
1828 out[badX1 - 5] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1830 val = 0.2497*out1_2 + 0.2497*out1_1 + 0.2544*out2_1 + 0.2462*out2_2;
1831 out[badX1 - 4] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1833 val = 0.2472*out1_2 + 0.2472*out1_1 + 0.2899*out2_1 + 0.2158*out2_2;
1834 out[badX1 - 3] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1836 val = 0.2326*out1_2 + 0.2326*out1_1 + 0.4642*out2_1 + 0.0705*out2_2;
1837 out[badX1 - 2] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1839 val = 0.1835*out1_2 + 0.1835*out1_1 + 0.9098*out2_1 - 0.2768*out2_2;
1840 out[badX1 - 1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1842 val = 0.0888*out1_2 + 0.0888*out1_1 + 1.3400*out2_1 - 0.5177*out2_2;
1843 out[badX1] = (val <
min) ? 0.5*(out1_1 + out2_1) :
val;
1855 template<
typename MaskT>
1856 static void do_defects(std::vector<Defect::Ptr>
const & badList,
1859 typename MaskT::Pixel
const interpBit
1862 typename MaskT::x_iterator mask_row = mask.row_begin(y);
1864 for (
DefectCIter ptr = badList.begin(), end = badList.end(); ptr != end; ++ptr) {
1867 if (y < defect->getY0() || y > defect->getY1()) {
1871 int const badX0 = defect->getX0();
1872 int const badX1 = defect->getX1();
1874 for (
int c = badX0; c <= badX1; ++c) {
1875 mask_row[c] |= interpBit;
1883 template<
typename T>
1884 struct Sort_ByX0 :
public std::binary_function<typename T::Ptr const, typename T::Ptr const, bool> {
1885 bool operator() (
typename T::Ptr
const a,
typename T::Ptr
const b)
const {
1886 return a->getX0() < b->getX0();
1894 template<
typename MaskedImageT>
1897 std::vector<Defect::Ptr> &_badList,
1898 double fallbackValue
1903 typename MaskedImageT::Mask::Pixel
const interpBit =
1904 mimage.getMask()->getPlaneBitMask(
"INTRP");
1908 int const width = mimage.getWidth();
1909 int const height = mimage.getHeight();
1911 std::vector<Defect::Ptr> badList;
1912 badList.reserve(_badList.size());
1913 for (std::vector<Defect::Ptr>::iterator ptr = _badList.begin(), end = _badList.end(); ptr != end; ++ptr) {
1917 if(min.getX() >= width){
1919 }
else if (min.getX() < 0) {
1920 if (
max.getX() < 0) {
1927 if (
max.getX() < 0) {
1929 }
else if (
max.getX() >= width) {
1930 max.setX(width - 1);
1935 ndefect->classify((*ptr)->getPos(), (*ptr)->getType());
1936 badList.push_back(ndefect);
1939 sort(badList.begin(), badList.end(), Sort_ByX0<Defect>());
1943 for (
int y = 0; y != height; y++) {
1944 std::vector<Defect::Ptr> badList1D = classify_defects(badList, y, width);
1946 do_defects(badList1D, y, *mimage.getImage(),
1949 do_defects(badList1D, y, *mimage.getMask(), interpBit);
1951 do_defects(badList1D, y, *mimage.getVariance(),
1966 template <
typename MaskedImageT>
1970 MaskedImageT
const&,
1982 static int ndatamax = 40;
1987 shAssert(badmask != NULL && badmask->type == shTypeGetFromName(
"OBJMASK"));
1988 shAssert(reg != NULL && reg->type == TYPE_PIX);
1993 for (z1 = colc - 1; z1 >= 0; z1--) {
1994 if (!phPixIntersectMask(badmask, z1, rowc)) {
2000 for (z2 = colc + 1; z2 < ncol; z2++) {
2001 if (!phPixIntersectMask(badmask, z2, rowc)) {
2007 i0 = (z1 > 2) ? z1 - 2 : 0;
2008 i1 = (z2 < ncol - 2) ? z2 + 2 : ncol - 1;
2010 if (i0 < 2 || i1 >= ncol - 2) {
2014 ndata = (i1 - i0 + 1);
2015 if (ndata > ndatamax) {
2019 data = alloca(ndata*
sizeof(PIX));
2020 for (i = i0; i <= i1; i++) {
2021 data[i - i0] = reg->ROWS[rowc][i];
2023 val = &data[colc - i0];
2025 for (z1 = rowc - 1; z1 >= 0; z1--) {
2026 if (!phPixIntersectMask(badmask, colc, z1)) {
2032 for (z2 = rowc + 1; z2 < nrow; z2++) {
2033 if (!phPixIntersectMask(badmask, colc, z2)) {
2039 i0 = (z1 > 2) ? z1 - 2 : 0;
2040 i1 = (z2 < nrow - 2) ? z2 + 2 : nrow - 1;
2042 if (i0 < 2 || i1 >= ncol - 2) {
2046 ndata = (i1 - i0 + 1);
2047 if (ndata > ndatamax) {
2051 data = alloca(ndata*
sizeof(PIX));
2052 for (i = i0; i <= i1; i++) {
2053 data[i - i0] = reg->ROWS[i][colc];
2055 val = &data[rowc - i0];
2058 defect.x1 = z1 - i0;
2059 defect.x2 = z2 - i0;
2060 classify_defects(&defect, 1, ndata);
2061 do_defect(&defect, 1, data, ndata, minval);
2075 typedef float ImagePixel;
2084 bool horizontal,
double minval);
2097 bool horizontal,
double minval);
defect is wide at right boundary
An include file to include the header files for lsst::afw::geom.
defect is in middle, and wide
void shift(Extent2I const &offset)
Shift the position of the box by the given offset.
boost::shared_ptr< Defect > Ptr
shared pointer to Defect
definition of the Trace messaging facilities
Point2I const getMax() const
defect is in middle of frame
void interpolateOverDefects(MaskedImageT &mimage, lsst::afw::detection::Psf const &, std::vector< Defect::Ptr > &_badList, double fallbackValue)
Process a set of known bad pixels in an image.
defect is near right boundary
std::vector< Defect::Ptr >::const_iterator DefectCIter
An integer coordinate rectangle.
defect is at left boundary
table::Key< table::Array< Kernel::Pixel > > image
Include files required for standard LSST Exception handling.
defect is near right, and wide
A class to manipulate images, masks, and variance as a single object.
defect is wide at left boundary
defect is near left, and wide
std::pair< bool, typename MaskedImageT::Image::Pixel > singlePixel(int x, int y, MaskedImageT const &image, bool horizontal, double minval)
defect is near left boundary
afw::table::Key< double > b
Implementation of the Class MaskedImage.
Point2I const getMin() const
A polymorphic base class for representing an image's Point Spread Function.
defect is at right boundary
Encapsulate information about a bad portion of a detector.