- Timestamp:
- Jan 29, 2010, 6:02:38 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/20091201/psModules/src/imcombine/pmSubtractionKernels.c
r26734 r26739 197 197 } 198 198 199 #if 1199 #if 0 200 200 fprintf(stderr, "%d raw: %lf, null: %f, min: %lf, max: %lf, moment: %lf\n", index, sum, preCalc->kernel->kernel[0][0], min, max, penalty); 201 201 #endif … … 245 245 } 246 246 247 #if 1247 #if 0 248 248 { 249 249 double sum = 0.0; // Sum of kernel component … … 276 276 pmSubtractionKernels *p_pmSubtractionKernelsRawISIS(int size, int spatialOrder, 277 277 const psVector *fwhmsIN, const psVector *ordersIN, 278 float penalty, p mSubtractionMode mode)278 float penalty, psRegion bounds, pmSubtractionMode mode) 279 279 { 280 280 PS_ASSERT_VECTOR_NON_NULL(fwhmsIN, NULL); … … 305 305 } 306 306 307 pmSubtractionKernels *kernels = pmSubtractionKernelsAlloc(num, PM_SUBTRACTION_KERNEL_ISIS, size, spatialOrder, penalty, mode); // The kernels 307 pmSubtractionKernels *kernels = pmSubtractionKernelsAlloc(num, PM_SUBTRACTION_KERNEL_ISIS, size, 308 spatialOrder, penalty, bounds, mode); // Kernels 308 309 psStringAppend(&kernels->description, "ISIS(%d,%s,%d,%.2e)", size, params, spatialOrder, penalty); 309 310 … … 331 332 pmSubtractionKernels *pmSubtractionKernelsISIS_RADIAL(int size, int spatialOrder, 332 333 const psVector *fwhmsIN, const psVector *ordersIN, 333 float penalty, p mSubtractionMode mode)334 float penalty, psRegion bounds, pmSubtractionMode mode) 334 335 { 335 336 PS_ASSERT_VECTOR_NON_NULL(fwhmsIN, NULL); … … 361 362 } 362 363 363 pmSubtractionKernels *kernels = pmSubtractionKernelsAlloc(num, PM_SUBTRACTION_KERNEL_ISIS_RADIAL, size, spatialOrder, penalty, mode); // The kernels 364 pmSubtractionKernels *kernels = pmSubtractionKernelsAlloc(num, PM_SUBTRACTION_KERNEL_ISIS_RADIAL, size, 365 spatialOrder, penalty, bounds, mode); // Kernels 364 366 psStringAppend(&kernels->description, "ISIS_RADIAL(%d,%s,%d,%.2e)", size, params, spatialOrder, penalty); 365 367 … … 388 390 pmSubtractionKernels *pmSubtractionKernelsHERM(int size, int spatialOrder, 389 391 const psVector *fwhmsIN, const psVector *ordersIN, 390 float penalty, p mSubtractionMode mode)392 float penalty, psRegion bounds, pmSubtractionMode mode) 391 393 { 392 394 PS_ASSERT_VECTOR_NON_NULL(fwhmsIN, NULL); … … 417 419 } 418 420 419 pmSubtractionKernels *kernels = pmSubtractionKernelsAlloc(num, PM_SUBTRACTION_KERNEL_HERM, size, spatialOrder, penalty, mode); // The kernels 421 pmSubtractionKernels *kernels = pmSubtractionKernelsAlloc(num, PM_SUBTRACTION_KERNEL_HERM, size, 422 spatialOrder, penalty, bounds, mode); // Kernels 420 423 psStringAppend(&kernels->description, "HERM(%d,%s,%d,%.2e)", size, params, spatialOrder, penalty); 421 424 422 psLogMsg("psModules.imcombine", PS_LOG_INFO, "HERM kernel: %s,%d --> %d elements", params, spatialOrder, num); 425 psLogMsg("psModules.imcombine", PS_LOG_INFO, "HERM kernel: %s,%d --> %d elements", 426 params, spatialOrder, num); 423 427 psFree(params); 424 428 … … 439 443 440 444 pmSubtractionKernels *pmSubtractionKernelsDECONV_HERM(int size, int spatialOrder, 441 const psVector *fwhmsIN, const psVector *ordersIN,442 float penalty, pmSubtractionMode mode)445 const psVector *fwhmsIN, const psVector *ordersIN, 446 float penalty, psRegion bounds, pmSubtractionMode mode) 443 447 { 444 448 PS_ASSERT_VECTOR_NON_NULL(fwhmsIN, NULL); … … 469 473 } 470 474 471 pmSubtractionKernels *kernels = pmSubtractionKernelsAlloc(num, PM_SUBTRACTION_KERNEL_DECONV_HERM, size, spatialOrder, penalty, mode); // The kernels 475 pmSubtractionKernels *kernels = pmSubtractionKernelsAlloc(num, PM_SUBTRACTION_KERNEL_DECONV_HERM, size, 476 spatialOrder, penalty, bounds, mode); // Kernels 472 477 psStringAppend(&kernels->description, "DECONV_HERM(%d,%s,%d,%.2e)", size, params, spatialOrder, penalty); 473 478 … … 544 549 545 550 pmSubtractionKernels *pmSubtractionKernelsAlloc(int numBasisFunctions, pmSubtractionKernelsType type, 546 int size, int spatialOrder, float penalty, 551 int size, int spatialOrder, float penalty, psRegion bounds, 547 552 pmSubtractionMode mode) 548 553 { … … 558 563 kernels->uStop = NULL; 559 564 kernels->vStop = NULL; 565 kernels->xMin = bounds.x0; 566 kernels->xMax = bounds.x1; 567 kernels->yMin = bounds.y0; 568 kernels->yMax = bounds.y1; 560 569 kernels->preCalc = psArrayAlloc(numBasisFunctions); 561 570 kernels->penalty = penalty; … … 566 575 kernels->bgOrder = 0; 567 576 kernels->mode = mode; 568 kernels->numCols = 0;569 kernels->numRows = 0;570 577 kernels->solution1 = NULL; 571 578 kernels->solution2 = NULL; … … 640 647 } 641 648 642 pmSubtractionKernels *pmSubtractionKernelsPOIS(int size, int spatialOrder, float penalty, 649 pmSubtractionKernels *pmSubtractionKernelsPOIS(int size, int spatialOrder, float penalty, psRegion bounds, 643 650 pmSubtractionMode mode) 644 651 { … … 649 656 650 657 pmSubtractionKernels *kernels = pmSubtractionKernelsAlloc(0, PM_SUBTRACTION_KERNEL_POIS, size, 651 spatialOrder, penalty, mode); // The kernels658 spatialOrder, penalty, bounds, mode); // Kernels 652 659 psStringAppend(&kernels->description, "POIS(%d,%d,%.2e)", size, spatialOrder, penalty); 653 660 psLogMsg("psModules.imcombine", PS_LOG_INFO, "POIS kernel: %d,%d --> %d elements", … … 664 671 pmSubtractionKernels *pmSubtractionKernelsISIS(int size, int spatialOrder, 665 672 const psVector *fwhms, const psVector *orders, 666 float penalty, p mSubtractionMode mode)673 float penalty, psRegion bounds, pmSubtractionMode mode) 667 674 { 668 675 pmSubtractionKernels *kernels = p_pmSubtractionKernelsRawISIS(size, spatialOrder, fwhms, orders, 669 penalty, mode); // Kernels676 penalty, bounds, mode); // Kernels 670 677 if (!kernels) { 671 678 return NULL; … … 676 683 677 684 pmSubtractionKernels *pmSubtractionKernelsSPAM(int size, int spatialOrder, int inner, int binning, 678 float penalty, p mSubtractionMode mode)685 float penalty, psRegion bounds, pmSubtractionMode mode) 679 686 { 680 687 PS_ASSERT_INT_POSITIVE(size, NULL); … … 697 704 698 705 pmSubtractionKernels *kernels = pmSubtractionKernelsAlloc(num, PM_SUBTRACTION_KERNEL_SPAM, size, 699 spatialOrder, penalty, mode); // The kernels706 spatialOrder, penalty, bounds, mode); // Kernels 700 707 kernels->inner = inner; 701 708 psStringAppend(&kernels->description, "SPAM(%d,%d,%d,%d,%.2e)", size, inner, binning, spatialOrder, … … 768 775 769 776 pmSubtractionKernels *pmSubtractionKernelsFRIES(int size, int spatialOrder, int inner, float penalty, 770 p mSubtractionMode mode)777 psRegion bounds, pmSubtractionMode mode) 771 778 { 772 779 PS_ASSERT_INT_POSITIVE(size, NULL); … … 795 802 796 803 pmSubtractionKernels *kernels = pmSubtractionKernelsAlloc(num, PM_SUBTRACTION_KERNEL_FRIES, size, 797 spatialOrder, penalty, mode); // The kernels804 spatialOrder, penalty, bounds, mode); // Kernels 798 805 kernels->inner = inner; 799 806 psStringAppend(&kernels->description, "FRIES(%d,%d,%d,%.2e)", size, inner, spatialOrder, penalty); … … 864 871 pmSubtractionKernels *pmSubtractionKernelsGUNK(int size, int spatialOrder, const psVector *fwhms, 865 872 const psVector *orders, int inner, float penalty, 866 p mSubtractionMode mode)873 psRegion bounds, pmSubtractionMode mode) 867 874 { 868 875 PS_ASSERT_INT_POSITIVE(size, NULL); … … 877 884 878 885 pmSubtractionKernels *kernels = p_pmSubtractionKernelsRawISIS(size, spatialOrder, fwhms, orders, 879 penalty, mode); // Kernels886 penalty, bounds, mode); // Kernels 880 887 kernels->type = PM_SUBTRACTION_KERNEL_GUNK; 881 888 psStringPrepend(&kernels->description, "GUNK="); … … 893 900 // RINGS --- just what it says 894 901 pmSubtractionKernels *pmSubtractionKernelsRINGS(int size, int spatialOrder, int inner, int ringsOrder, 895 float penalty, p mSubtractionMode mode)902 float penalty, psRegion bounds, pmSubtractionMode mode) 896 903 { 897 904 PS_ASSERT_INT_POSITIVE(size, NULL); … … 924 931 925 932 pmSubtractionKernels *kernels = pmSubtractionKernelsAlloc(num, PM_SUBTRACTION_KERNEL_RINGS, size, 926 spatialOrder, penalty, mode); // The kernels933 spatialOrder, penalty, bounds, mode); // Kernels 927 934 kernels->inner = inner; 928 935 psStringAppend(&kernels->description, "RINGS(%d,%d,%d,%d,%.2e)", size, inner, ringsOrder, spatialOrder, … … 1046 1053 pmSubtractionKernels *pmSubtractionKernelsGenerate(pmSubtractionKernelsType type, int size, int spatialOrder, 1047 1054 const psVector *fwhms, const psVector *orders, int inner, 1048 int binning, int ringsOrder, float penalty, 1055 int binning, int ringsOrder, float penalty, psRegion bounds, 1049 1056 pmSubtractionMode mode) 1050 1057 { 1051 1058 switch (type) { 1052 1059 case PM_SUBTRACTION_KERNEL_POIS: 1053 return pmSubtractionKernelsPOIS(size, spatialOrder, penalty, mode);1060 return pmSubtractionKernelsPOIS(size, spatialOrder, penalty, bounds, mode); 1054 1061 case PM_SUBTRACTION_KERNEL_ISIS: 1055 return pmSubtractionKernelsISIS(size, spatialOrder, fwhms, orders, penalty, mode);1062 return pmSubtractionKernelsISIS(size, spatialOrder, fwhms, orders, penalty, bounds, mode); 1056 1063 case PM_SUBTRACTION_KERNEL_ISIS_RADIAL: 1057 return pmSubtractionKernelsISIS_RADIAL(size, spatialOrder, fwhms, orders, penalty, mode);1064 return pmSubtractionKernelsISIS_RADIAL(size, spatialOrder, fwhms, orders, penalty, bounds, mode); 1058 1065 case PM_SUBTRACTION_KERNEL_HERM: 1059 return pmSubtractionKernelsHERM(size, spatialOrder, fwhms, orders, penalty, mode);1066 return pmSubtractionKernelsHERM(size, spatialOrder, fwhms, orders, penalty, bounds, mode); 1060 1067 case PM_SUBTRACTION_KERNEL_DECONV_HERM: 1061 return pmSubtractionKernelsDECONV_HERM(size, spatialOrder, fwhms, orders, penalty, mode);1068 return pmSubtractionKernelsDECONV_HERM(size, spatialOrder, fwhms, orders, penalty, bounds, mode); 1062 1069 case PM_SUBTRACTION_KERNEL_SPAM: 1063 return pmSubtractionKernelsSPAM(size, spatialOrder, inner, binning, penalty, mode);1070 return pmSubtractionKernelsSPAM(size, spatialOrder, inner, binning, penalty, bounds, mode); 1064 1071 case PM_SUBTRACTION_KERNEL_FRIES: 1065 return pmSubtractionKernelsFRIES(size, spatialOrder, inner, penalty, mode);1072 return pmSubtractionKernelsFRIES(size, spatialOrder, inner, penalty, bounds, mode); 1066 1073 case PM_SUBTRACTION_KERNEL_GUNK: 1067 return pmSubtractionKernelsGUNK(size, spatialOrder, fwhms, orders, inner, penalty, mode);1074 return pmSubtractionKernelsGUNK(size, spatialOrder, fwhms, orders, inner, penalty, bounds, mode); 1068 1075 case PM_SUBTRACTION_KERNEL_RINGS: 1069 return pmSubtractionKernelsRINGS(size, spatialOrder, inner, ringsOrder, penalty, mode);1076 return pmSubtractionKernelsRINGS(size, spatialOrder, inner, ringsOrder, penalty, bounds, mode); 1070 1077 default: 1071 1078 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Unknown kernel type: %x", type); … … 1103 1110 1104 1111 pmSubtractionKernels *pmSubtractionKernelsFromDescription(const char *description, int bgOrder, 1105 p mSubtractionMode mode)1112 psRegion bounds, pmSubtractionMode mode) 1106 1113 { 1107 1114 PS_ASSERT_STRING_NON_EMPTY(description, NULL); … … 1156 1163 PARSE_STRING_NUMBER(spatialOrder, ptr, ',', parseStringInt); 1157 1164 penalty = parseStringFloat(ptr); 1158 1159 return pmSubtractionKernelsGenerate(type, size, spatialOrder, fwhms, orders, inner, binning, ringsOrder, penalty, mode); 1160 1165 break; 1161 1166 case PM_SUBTRACTION_KERNEL_RINGS: 1162 1167 PARSE_STRING_NUMBER(size, ptr, ',', parseStringInt); … … 1165 1170 PARSE_STRING_NUMBER(spatialOrder, ptr, ',', parseStringInt); 1166 1171 PARSE_STRING_NUMBER(penalty, ptr, ')', parseStringInt); 1167 return pmSubtractionKernelsGenerate(type, size, spatialOrder, fwhms, orders, inner, binning, ringsOrder, penalty, mode);1172 break; 1168 1173 default: 1169 1174 psAbort("Deciphering kernels other than ISIS, HERM, DECONV_HERM or RINGS is not currently supported."); 1170 1175 } 1171 return NULL; 1176 1177 return pmSubtractionKernelsGenerate(type, size, spatialOrder, fwhms, orders, inner, binning, 1178 ringsOrder, penalty, bounds, mode); 1172 1179 } 1173 1180 … … 1245 1252 out->bgOrder = in->bgOrder; 1246 1253 out->mode = in->mode; 1247 out->numCols = in->numCols; 1248 out->numRows = in->numRows; 1254 out->xMin = in->xMin; 1255 out->xMax = in->xMax; 1256 out->yMin = in->yMin; 1257 out->yMax = in->yMax; 1249 1258 out->solution1 = in->solution1 ? psVectorCopy(NULL, in->solution1, PS_TYPE_F64) : NULL; 1250 1259 out->solution2 = in->solution2 ? psVectorCopy(NULL, in->solution2, PS_TYPE_F64) : NULL;
Note:
See TracChangeset
for help on using the changeset viewer.
