Changeset 21366 for trunk/ppStack/src/ppStackLoop.c
- Timestamp:
- Feb 5, 2009, 5:03:33 PM (17 years ago)
- File:
-
- 1 edited
-
trunk/ppStack/src/ppStackLoop.c (modified) (28 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ppStack/src/ppStackLoop.c
r21258 r21366 24 24 25 25 // Files required for the convolution 26 static char *convolveFiles[] = { "PPSTACK.INPUT", "PPSTACK.INPUT.MASK", "PPSTACK.INPUT. WEIGHT", NULL };26 static char *convolveFiles[] = { "PPSTACK.INPUT", "PPSTACK.INPUT.MASK", "PPSTACK.INPUT.VARIANCE", NULL }; 27 27 28 28 // Output files for the combination 29 static char *combineFiles[] = { "PPSTACK.OUTPUT", "PPSTACK.OUTPUT.MASK", "PPSTACK.OUTPUT. WEIGHT",29 static char *combineFiles[] = { "PPSTACK.OUTPUT", "PPSTACK.OUTPUT.MASK", "PPSTACK.OUTPUT.VARIANCE", 30 30 "PPSTACK.OUTPUT.JPEG1", "PPSTACK.OUTPUT.JPEG2", NULL }; 31 31 … … 204 204 const char *tempImage = psMetadataLookupStr(NULL, recipe, "TEMP.IMAGE"); // Suffix for temporary images 205 205 const char *tempMask = psMetadataLookupStr(NULL, recipe, "TEMP.MASK"); // Suffix for temporary masks 206 const char *temp Weight = psMetadataLookupStr(NULL, recipe, "TEMP.WEIGHT"); // Suffix for temp weightmaps207 if (!tempImage || !tempMask || !temp Weight) {206 const char *tempVariance = psMetadataLookupStr(NULL, recipe, "TEMP.VARIANCE"); // Suffix for temp variance maps 207 if (!tempImage || !tempMask || !tempVariance) { 208 208 psError(PS_ERR_BAD_PARAMETER_VALUE, false, 209 "Unable to find TEMP.IMAGE, TEMP.MASK and TEMP. WEIGHTin recipe");209 "Unable to find TEMP.IMAGE, TEMP.MASK and TEMP.VARIANCE in recipe"); 210 210 return false; 211 211 } … … 387 387 psArray *imageNames = psArrayAlloc(num); 388 388 psArray *maskNames = psArrayAlloc(num); 389 psArray * weightNames = psArrayAlloc(num);389 psArray *varianceNames = psArrayAlloc(num); 390 390 for (int i = 0; i < num; i++) { 391 psString imageName = NULL, maskName = NULL, weightName = NULL; // Names for convolved images391 psString imageName = NULL, maskName = NULL, varianceName = NULL; // Names for convolved images 392 392 psStringAppend(&imageName, "%s/%s.%d.%s", tempDir, tempName, i, tempImage); 393 393 psStringAppend(&maskName, "%s/%s.%d.%s", tempDir, tempName, i, tempMask); 394 psStringAppend(& weightName, "%s/%s.%d.%s", tempDir, tempName, i, tempWeight);395 psTrace("ppStack", 5, "Temporary files: %s %s %s\n", imageName, maskName, weightName);394 psStringAppend(&varianceName, "%s/%s.%d.%s", tempDir, tempName, i, tempVariance); 395 psTrace("ppStack", 5, "Temporary files: %s %s %s\n", imageName, maskName, varianceName); 396 396 imageNames->data[i] = imageName; 397 397 maskNames->data[i] = maskName; 398 weightNames->data[i] = weightName;398 varianceNames->data[i] = varianceName; 399 399 } 400 400 // Free the outputName that we grabbed above to set up tempName. … … 417 417 psList *fpaList = psListAlloc(NULL); // List of input FPAs, for concept averaging 418 418 psList *cellList = psListAlloc(NULL); // List of input cells, for concept averaging 419 psArray *covariances = psArrayAlloc(num); // Covariance matrices 419 420 for (int i = 0; i < num; i++) { 420 421 psTrace("ppStack", 2, "Convolving input %d of %d to target PSF....\n", i, num); … … 431 432 psFree(fpaList); 432 433 psFree(cellList); 434 psFree(covariances); 433 435 return false; 434 436 } … … 450 452 psFree(fpaList); 451 453 psFree(cellList); 454 psFree(covariances); 452 455 return false; 453 456 } … … 464 467 continue; 465 468 } 469 covariances->data[i] = psMemIncrRefCounter(readout->covariance); 466 470 467 471 if (stats) { … … 486 490 pmHDU *hdu = readout->parent->parent->parent->hdu; // HDU for convolved image 487 491 assert(hdu); 488 writeImage(imageNames->data[i], hdu->header, readout->image, config);489 492 psMetadata *maskHeader = psMetadataCopy(NULL, hdu->header); // Copy of header, for mask 490 493 pmConfigMaskWriteHeader(config, maskHeader); 491 writeImage(maskNames->data[i], maskHeader, readout->mask, config);494 writeImage(maskNames->data[i], maskHeader, readout->mask, config); 492 495 psFree(maskHeader); 493 writeImage( weightNames->data[i], hdu->header, readout->weight, config);496 writeImage(varianceNames->data[i], hdu->header, readout->variance, config); 494 497 495 498 pmCell *inCell = readout->parent; // Input cell … … 502 505 psFree(fpaList); 503 506 psFree(cellList); 507 psFree(covariances); 504 508 return false; 505 509 } … … 523 527 psFree(fpaList); 524 528 psFree(cellList); 529 psFree(covariances); 525 530 return false; 526 531 } … … 570 575 psFree(matchChi2); 571 576 psFree(values); 577 psFree(covariances); 572 578 return false; 573 579 } … … 611 617 psFree(inputMask); 612 618 psFree(matchChi2); 619 psFree(covariances); 613 620 return false; 614 621 } … … 622 629 // Start threading 623 630 ppStackThreadInit(); 624 ppStackThreadData *stack = ppStackThreadDataSetup(cells, imageNames, maskNames, weightNames, config);631 ppStackThreadData *stack = ppStackThreadDataSetup(cells, imageNames, maskNames, varianceNames, config); 625 632 626 633 psTimerStart("PPSTACK_INITIAL"); … … 645 652 psFree(matchChi2); 646 653 psFree(cells); 654 psFree(covariances); 647 655 return false; 648 656 } … … 658 666 psFree(matchChi2); 659 667 psFree(cells); 668 psFree(covariances); 660 669 return false; 661 670 } … … 676 685 psFree(outRO); 677 686 psFree(cells); 687 psFree(covariances); 678 688 return false; 679 689 } … … 695 705 psFree(view); 696 706 psFree(outRO); 707 psFree(covariances); 697 708 return false; 698 709 } … … 721 732 psFree(view); 722 733 psFree(outRO); 734 psFree(covariances); 723 735 return false; 724 736 } … … 735 747 psFree(view); 736 748 psFree(outRO); 749 psFree(covariances); 737 750 return false; 738 751 } … … 803 816 psFree(inspect); 804 817 psFree(rejected); 818 psFree(covariances); 805 819 return false; 806 820 } … … 818 832 psFree(inspect); 819 833 psFree(rejected); 834 psFree(covariances); 820 835 return false; 821 836 } … … 912 927 psFree(view); 913 928 psFree(outRO); 929 psFree(covariances); 914 930 return false; 915 931 } … … 941 957 psFree(view); 942 958 psFree(outRO); 959 psFree(covariances); 943 960 return false; 944 961 } … … 962 979 psFree(view); 963 980 psFree(outRO); 981 psFree(covariances); 964 982 return false; 965 983 } … … 974 992 psFree(view); 975 993 psFree(outRO); 994 psFree(covariances); 976 995 return false; 977 996 } … … 979 998 980 999 memDump("final"); 1000 1001 // Sum covariance matrices 1002 for (int i = 0; i < num; i++) { 1003 if (inputMask->data.U8[i]) { 1004 psFree(covariances->data[i]); 1005 covariances->data[i] = NULL; 1006 } 1007 } 1008 outRO->covariance = psImageCovarianceSum(covariances); 1009 psFree(covariances); 981 1010 982 1011 if (stats) { … … 1040 1069 psString imageResolved = pmConfigConvertFilename(imageNames->data[i], config, false, false); 1041 1070 psString maskResolved = pmConfigConvertFilename(maskNames->data[i], config, false, false); 1042 psString weightResolved = pmConfigConvertFilename(weightNames->data[i], config, false, false);1071 psString varianceResolved = pmConfigConvertFilename(varianceNames->data[i], config, false, false); 1043 1072 if (unlink(imageResolved) == -1 || unlink(maskResolved) == -1 || 1044 unlink( weightResolved) == -1) {1073 unlink(varianceResolved) == -1) { 1045 1074 psWarning("Unable to delete temporary files for image %d", i); 1046 1075 } 1047 1076 psFree(imageResolved); 1048 1077 psFree(maskResolved); 1049 psFree( weightResolved);1078 psFree(varianceResolved); 1050 1079 } 1051 1080 } 1052 1081 psFree(imageNames); 1053 1082 psFree(maskNames); 1054 psFree( weightNames);1083 psFree(varianceNames); 1055 1084 1056 1085 psFree(inputMask); … … 1092 1121 float renormWidth = psMetadataLookupS32(&mdok, recipe, "RENORM.WIDTH"); // Width of Gaussian phot 1093 1122 psImageMaskType maskValue = pmConfigMaskGet("BLANK", config); // Bits to mask 1094 if (!pmReadout WeightRenormPhot(outRO, maskValue, renormNum, renormWidth,1095 renormMean, renormStdev, NULL)) {1123 if (!pmReadoutVarianceRenormPhot(outRO, maskValue, renormNum, renormWidth, 1124 renormMean, renormStdev, NULL)) { 1096 1125 psError(PS_ERR_UNKNOWN, false, "Unable to renormalise variances."); 1097 1126 psFree(outRO);
Note:
See TracChangeset
for help on using the changeset viewer.
