Changeset 24951 for branches/czw_branch/cleanup/psModules/src/imcombine
- Timestamp:
- Jul 30, 2009, 5:20:29 PM (17 years ago)
- Location:
- branches/czw_branch/cleanup
- Files:
-
- 4 edited
-
. (modified) (1 prop)
-
psModules/src/imcombine/pmReadoutCombine.c (modified) (6 diffs)
-
psModules/src/imcombine/pmReadoutCombine.h (modified) (1 diff)
-
psModules/src/imcombine/pmSubtractionEquation.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/czw_branch/cleanup
- Property svn:mergeinfo changed
/trunk (added) merged: 24714-24742,24744-24784,24786-24798,24801-24824,24827-24834,24836-24859,24861-24901,24903-24912,24914-24939
- Property svn:mergeinfo changed
-
branches/czw_branch/cleanup/psModules/src/imcombine/pmReadoutCombine.c
r23989 r24951 173 173 for (int i = 0; i < inputs->n; i++) { 174 174 pmReadout *readout = inputs->data[i]; // Readout of interest 175 psAssert(readout, "readout was not defined"); 176 if (!readout->process) continue; 175 177 if (!readout->image) { 176 178 psError(PS_ERR_UNEXPECTED_NULL, true, "Image data is missing for image %d.\n", i); … … 271 273 for (int r = 0; r < inputs->n; r++) { 272 274 pmReadout *readout = inputs->data[r]; // Input readout 275 if (!readout->process) continue; 273 276 psTrace("psModules.imcombine", 3, "Iterating input %d: %d --> %d, %d --> %d\n", r, 274 277 minInputCols - readout->col0, maxInputCols - readout->col0, … … 277 280 } 278 281 #endif 282 283 // set up windows for visualization (if selected) 284 pmReadoutCombineVisualInit(); 279 285 280 286 // Dereference output products … … 308 314 for (int r = 0; r < inputs->n; r++) { 309 315 pmReadout *readout = inputs->data[r]; // Input readout 316 if (!readout->process) { 317 maskData[r] = 1; 318 continue; 319 } 310 320 int yIn = i - readout->row0; // y position on input readout 311 321 int xIn = j - readout->col0; // x position on input readout … … 390 400 outputImage[yOut][xOut] = psStatsGetValue(stats, params->combine); 391 401 402 if (!isfinite(outputImage[yOut][xOut])) { 403 pmReadoutCombineVisualPixels(pixels, mask, outputImage[yOut][xOut]); 404 } 405 392 406 if (isnan(outputImage[yOut][xOut])) { 393 407 outputImage[yOut][xOut] = NAN; … … 427 441 } 428 442 443 #if (HAVE_KAPA) 444 #include <kapa.h> 445 #include "pmKapaPlots.h" 446 #include "pmVisual.h" 447 448 static int kapa = -1; 449 static bool plotFlag = true; 450 451 // this init function only gets the ordinates for the first readout... 452 bool pmReadoutCombineVisualInit(void) { 453 454 if (!pmVisualIsVisual()) return true; 455 456 // skip if we have already opened the windows (or if none are requested...) 457 if (kapa != -1) return true; 458 459 pmVisualInitWindow(&kapa, "ppmerge"); 460 return true; 461 } 462 463 bool pmReadoutCombineVisualPixels(psVector *pixels, psVector *mask, float mean) { 464 465 Graphdata graphdata; 466 float xline[2], yline[2]; 467 468 if (!pmVisualIsVisual()) return true; 469 470 if (!plotFlag) return true; 471 472 KapaInitGraph(&graphdata); 473 474 psVector *xAll = psVectorAlloc(pixels->n, PS_TYPE_F32); 475 psVector *xSub = psVectorAlloc(pixels->n, PS_TYPE_F32); 476 psVector *ySub = psVectorAlloc(pixels->n, PS_TYPE_F32); 477 478 // generate vectors of the unmasked values 479 int nSub = 0; 480 for (int j = 0; j < pixels->n; j++) { 481 xAll->data.F32[j] = j; 482 if (mask && mask->data.PS_TYPE_VECTOR_MASK_DATA[j]) continue; 483 xSub->data.F32[nSub] = j; 484 ySub->data.F32[nSub] = pixels->data.F32[j]; 485 nSub ++; 486 } 487 xSub->n = ySub->n = nSub; 488 xAll->n = pixels->n; 489 490 xline[0] = 0; 491 xline[1] = pixels->n; 492 yline[0] = mean; 493 yline[1] = mean; 494 495 // plot the unmasked values 496 pmVisualScaleGraphdata (&graphdata, xAll, pixels, false); 497 KapaSetGraphData(kapa, &graphdata); 498 KapaSetLimits(kapa, &graphdata); 499 KapaClearPlots (kapa); 500 501 KapaSetFont (kapa, "courier", 14); 502 KapaBox (kapa, &graphdata); 503 KapaSendLabel (kapa, "ordinate", KAPA_LABEL_XM); 504 KapaSendLabel (kapa, "pixel values", KAPA_LABEL_YM); 505 506 graphdata.color = KapaColorByName("black"); 507 graphdata.style = 2; 508 graphdata.ptype = 2; 509 KapaPrepPlot (kapa, xSub->n, &graphdata); 510 KapaPlotVector(kapa, xSub->n, xSub->data.F32, "x"); 511 KapaPlotVector(kapa, xSub->n, ySub->data.F32, "y"); 512 513 graphdata.color = KapaColorByName("red"); 514 graphdata.style = 2; 515 graphdata.ptype = 7; 516 KapaPrepPlot (kapa, xAll->n, &graphdata); 517 KapaPlotVector(kapa, xAll->n, xAll->data.F32, "x"); 518 KapaPlotVector(kapa, xAll->n, pixels->data.F32, "y"); 519 520 graphdata.color = KapaColorByName("blue"); 521 graphdata.style = 0; 522 graphdata.ptype = 7; 523 KapaPrepPlot (kapa, 2, &graphdata); 524 KapaPlotVector(kapa, 2, xline, "x"); 525 KapaPlotVector(kapa, 2, yline, "y"); 526 527 pmVisualAskUser (&plotFlag); 528 return true; 529 } 530 531 bool pmReadoutCombineVisualCleanup(void) { 532 533 if (!pmVisualIsVisual()) return true; 534 if (kapa == -1) return true; 535 536 KapaClose(kapa); 537 return true; 538 } 539 540 # else 541 542 bool pmReadoutCombineVisualInit(void) { return true; } 543 bool pmReadoutCombineVisualPixels(psVector *pixels, psVector *mask, float mean) { return true; } 544 bool pmReadoutCombineVisualCleanup(void) { return true; } 545 546 # endif -
branches/czw_branch/cleanup/psModules/src/imcombine/pmReadoutCombine.h
r21363 r24951 47 47 ); 48 48 49 bool pmReadoutCombineVisualInit(void); 50 bool pmReadoutCombineVisualPixels(psVector *pixels, psVector *mask, float mean); 51 bool pmReadoutCombineVisualCleanup(void); 52 49 53 /// @} 50 54 #endif -
branches/czw_branch/cleanup/psModules/src/imcombine/pmSubtractionEquation.c
r24621 r24951 793 793 794 794 #ifdef TESTING 795 // XXX double-check for NAN in data:796 for (int iy = 0; iy < stamp->matrix1->numRows; iy++) {797 for (int ix = 0; ix < stamp->matrix1->numCols; ix++) {798 if (!isfinite(stamp->matrix1->data.F64[iy][ix])) {799 fprintf (stderr, "WARNING: NAN in matrix1\n");800 }801 }802 }803 for (int ix = 0; ix < stamp->vector1->n; ix++) {804 if (!isfinite(stamp->vector1->data.F64[ix])) {805 fprintf (stderr, "WARNING: NAN in vector1\n");806 }807 }795 // XXX double-check for NAN in data: 796 for (int iy = 0; iy < stamp->matrix1->numRows; iy++) { 797 for (int ix = 0; ix < stamp->matrix1->numCols; ix++) { 798 if (!isfinite(stamp->matrix1->data.F64[iy][ix])) { 799 fprintf (stderr, "WARNING: NAN in matrix1\n"); 800 } 801 } 802 } 803 for (int ix = 0; ix < stamp->vector1->n; ix++) { 804 if (!isfinite(stamp->vector1->data.F64[ix])) { 805 fprintf (stderr, "WARNING: NAN in vector1\n"); 806 } 807 } 808 808 #endif 809 809 … … 818 818 819 819 #ifdef TESTING 820 for (int ix = 0; ix < sumVector->n; ix++) {821 if (!isfinite(sumVector->data.F64[ix])) {822 fprintf (stderr, "WARNING: NAN in vector1\n");823 }824 }820 for (int ix = 0; ix < sumVector->n; ix++) { 821 if (!isfinite(sumVector->data.F64[ix])) { 822 fprintf (stderr, "WARNING: NAN in vector1\n"); 823 } 824 } 825 825 #endif 826 826 … … 828 828 829 829 #ifdef TESTING 830 for (int ix = 0; ix < sumVector->n; ix++) {831 if (!isfinite(sumVector->data.F64[ix])) {832 fprintf (stderr, "WARNING: NAN in vector1\n");833 }834 }830 for (int ix = 0; ix < sumVector->n; ix++) { 831 if (!isfinite(sumVector->data.F64[ix])) { 832 fprintf (stderr, "WARNING: NAN in vector1\n"); 833 } 834 } 835 835 { 836 836 psImage *inverse = psMatrixInvert(NULL, sumMatrix, NULL); … … 866 866 867 867 #ifdef TESTING 868 // XXX double-check for NAN in data:869 for (int ix = 0; ix < kernels->solution1->n; ix++) {870 if (!isfinite(kernels->solution1->data.F64[ix])) {871 fprintf (stderr, "WARNING: NAN in vector1\n");872 }873 }868 // XXX double-check for NAN in data: 869 for (int ix = 0; ix < kernels->solution1->n; ix++) { 870 if (!isfinite(kernels->solution1->data.F64[ix])) { 871 fprintf (stderr, "WARNING: NAN in vector1\n"); 872 } 873 } 874 874 #endif 875 875 … … 1127 1127 source = stamp->image1; 1128 1128 convolutions = stamp->convolutions1; 1129 1130 // Having convolved image1 and changed its normalisation, we need to renormalise the residual 1131 // so that it is on the scale of image1. 1132 psImage *image = pmSubtractionKernelImage(kernels, stamp->xNorm, stamp->yNorm, 1133 false); // Kernel image 1134 if (!image) { 1135 psError(PS_ERR_UNKNOWN, false, "Unable to generate image of kernel."); 1136 return false; 1137 } 1138 double sumKernel = 0; // Sum of kernel, for normalising residual 1139 int size = kernels->size; // Half-size of kernel 1140 int fullSize = 2 * size + 1; // Full size of kernel 1141 for (int y = 0; y < fullSize; y++) { 1142 for (int x = 0; x < fullSize; x++) { 1143 sumKernel += image->data.F32[y][x]; 1144 } 1145 } 1146 psFree(image); 1147 devNorm = 1.0 / sumKernel / numPixels; 1129 1148 break; 1130 1149 case PM_SUBTRACTION_MODE_2:
Note:
See TracChangeset
for help on using the changeset viewer.
