Changeset 21366 for trunk/ppStack
- Timestamp:
- Feb 5, 2009, 5:03:33 PM (17 years ago)
- Location:
- trunk/ppStack/src
- Files:
-
- 6 edited
-
ppStack.h (modified) (2 diffs)
-
ppStackArguments.c (modified) (4 diffs)
-
ppStackCamera.c (modified) (6 diffs)
-
ppStackLoop.c (modified) (28 diffs)
-
ppStackMatch.c (modified) (6 diffs)
-
ppStackThread.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ppStack/src/ppStack.h
r21092 r21366 38 38 psArray *imageFits; // FITS file pointers for images 39 39 psArray *maskFits; // FITS file pointers for masks 40 psArray * weightFits; // FITS file pointers for weights40 psArray *varianceFits; // FITS file pointers for variances 41 41 } ppStackThreadData; 42 42 … … 45 45 const psArray *imageNames, // Names of images to read 46 46 const psArray *maskNames, // Names of masks to read 47 const psArray * weightNames, // Names of weightmaps to read47 const psArray *varianceNames, // Names of variance maps to read 48 48 const pmConfig *config // Configuration 49 49 ); -
trunk/ppStack/src/ppStackArguments.c
r21199 r21366 24 24 "\tIMAGE(STR): Image filename\n" 25 25 "\tMASK(STR): Mask filename\n" 26 "\t WEIGHT(STR): Weightmap filename\n"26 "\tVARIANCE(STR): Variance map filename\n" 27 27 "\tPSF(STR): PSF filename\n" 28 28 "\tSOURCES(STR): Sources filename\n" … … 151 151 psMetadataAddStr(arguments, PS_LIST_TAIL, "-mask-poor", 0, "Mask value to give poor pixels", NULL); 152 152 psMetadataAddF32(arguments, PS_LIST_TAIL, "-threshold-mask", 0, "Threshold for mask deconvolution", NAN); 153 psMetadataAddF32(arguments, PS_LIST_TAIL, "-poor-frac", 0, "Fraction of weightfor poor pixels", NAN);153 psMetadataAddF32(arguments, PS_LIST_TAIL, "-poor-frac", 0, "Fraction of variance for poor pixels", NAN); 154 154 psMetadataAddF32(arguments, PS_LIST_TAIL, "-deconv-limit", 0, "Maximum deconvolution fraction limit", NAN); 155 155 psMetadataAddF32(arguments, PS_LIST_TAIL, "-image-rej", 0, … … 183 183 psMetadataAddStr(arguments, PS_LIST_TAIL, "-temp-image", 0, "Suffix for temporary images", NULL); 184 184 psMetadataAddStr(arguments, PS_LIST_TAIL, "-temp-mask", 0, "Suffix for temporary masks", NULL); 185 psMetadataAddStr(arguments, PS_LIST_TAIL, "-temp- weight", 0, "Suffix for temporary weightmaps", NULL);185 psMetadataAddStr(arguments, PS_LIST_TAIL, "-temp-variance", 0, "Suffix for temporary variance maps", NULL); 186 186 psMetadataAddBool(arguments, PS_LIST_TAIL, "-temp-delete", 0, 187 187 "Delete temporary files on completion?", false); … … 283 283 VALUE_ARG_RECIPE_INT("-renorm-num", "RENORM.NUM", S32, 0); 284 284 VALUE_ARG_RECIPE_FLOAT("-renorm-width", "RENORM.WIDTH", F32); 285 valueArgRecipeStr(arguments, recipe, "-renorm-mean", "RENORM.MEAN", recipe);285 valueArgRecipeStr(arguments, recipe, "-renorm-mean", "RENORM.MEAN", recipe); 286 286 valueArgRecipeStr(arguments, recipe, "-renorm-stdev", "RENORM.STDEV", recipe); 287 287 288 valueArgRecipeStr(arguments, recipe, "-temp-image", "TEMP.IMAGE", recipe);289 valueArgRecipeStr(arguments, recipe, "-temp-mask", "TEMP.MASK", recipe);290 valueArgRecipeStr(arguments, recipe, "-temp- weight", "TEMP.WEIGHT", recipe);288 valueArgRecipeStr(arguments, recipe, "-temp-image", "TEMP.IMAGE", recipe); 289 valueArgRecipeStr(arguments, recipe, "-temp-mask", "TEMP.MASK", recipe); 290 valueArgRecipeStr(arguments, recipe, "-temp-variance", "TEMP.VARIANCE", recipe); 291 291 292 292 if (psMetadataLookupBool(NULL, arguments, "-temp-delete") || -
trunk/ppStack/src/ppStackCamera.c
r20995 r21366 71 71 bool ppStackCamera(pmConfig *config) 72 72 { 73 bool have Weights = false; // Do we have weightmaps?73 bool haveVariances = false; // Do we have variance maps? 74 74 bool havePSFs = false; // Do we have PSFs? 75 75 … … 97 97 bool mdok; 98 98 psString mask = psMetadataLookupStr(&mdok, input, "MASK"); // Name of mask 99 psString weight = psMetadataLookupStr(&mdok, input, "WEIGHT"); // Name of weightmap99 psString variance = psMetadataLookupStr(&mdok, input, "VARIANCE"); // Name of variance map 100 100 psString psf = psMetadataLookupStr(&mdok, input, "PSF"); // Name of PSF 101 101 psString sources = psMetadataLookupStr(&mdok, input, "SOURCES"); // Name of sources … … 140 140 } 141 141 142 // Optionally add the weightfile143 if ( weight && strlen(weight) > 0) {144 have Weights = true;145 psArray * weightFiles = psArrayAlloc(1); // Array of filenames for this FPA146 weightFiles->data[0] = psMemIncrRefCounter(weight);147 psMetadataAddArray(config->arguments, PS_LIST_TAIL, " WEIGHT.FILENAMES", PS_META_REPLACE,148 "Filenames of weight files", weightFiles);149 psFree( weightFiles);142 // Optionally add the variance file 143 if (variance && strlen(variance) > 0) { 144 haveVariances = true; 145 psArray *varianceFiles = psArrayAlloc(1); // Array of filenames for this FPA 146 varianceFiles->data[0] = psMemIncrRefCounter(variance); 147 psMetadataAddArray(config->arguments, PS_LIST_TAIL, "VARIANCE.FILENAMES", PS_META_REPLACE, 148 "Filenames of variance files", varianceFiles); 149 psFree(varianceFiles); 150 150 151 151 bool status; 152 pmFPAfile * weightFile = pmFPAfileBindFromArgs(&status, imageFile, config, "PPSTACK.INPUT.WEIGHT",153 "WEIGHT.FILENAMES");152 pmFPAfile *varianceFile = pmFPAfileBindFromArgs(&status, imageFile, config, 153 "PPSTACK.INPUT.VARIANCE", "VARIANCE.FILENAMES"); 154 154 if (!status) { 155 psError(PS_ERR_UNKNOWN, false, "Unable to define file from weight %d (%s)", i, weight);156 return false; 157 } 158 if ( weightFile->type != PM_FPA_FILE_WEIGHT) {159 psError(PS_ERR_IO, true, "PPSTACK.INPUT. WEIGHT is not of type WEIGHT");155 psError(PS_ERR_UNKNOWN, false, "Unable to define file from variance %d (%s)", i, variance); 156 return false; 157 } 158 if (varianceFile->type != PM_FPA_FILE_VARIANCE) { 159 psError(PS_ERR_IO, true, "PPSTACK.INPUT.VARIANCE is not of type VARIANCE"); 160 160 return false; 161 161 } … … 217 217 #if 0 218 218 // Output convolved files 219 pmFPAfile *outconvImage = defineOutputConvolved("PPSTACK.OUTCONV", imageFile->fpa, config, 219 pmFPAfile *outconvImage = defineOutputConvolved("PPSTACK.OUTCONV", imageFile->fpa, config, 220 PM_FPA_FILE_IMAGE); 221 pmFPAfile *outconvMask = defineOutputConvolved("PPSTACK.OUTCONV.MASK", imageFile->fpa, config, 222 PM_FPA_FILE_MASK); 223 pmFPAfile *outconvVariance = defineOutputConvolved("PPSTACK.OUTCONV.VARIANCE", imageFile->fpa, config, 224 PM_FPA_FILE_VARIANCE); 225 if (!outconvImage || !outconvMask || !outconvVariance) { 226 return false; 227 } 228 229 // Input convolved files 230 pmFPAfile *inconvImage = defineInputConvolved("PPSTACK.INCONV", outconvImage, config, 220 231 PM_FPA_FILE_IMAGE); 221 pmFPAfile * outconvMask = defineOutputConvolved("PPSTACK.OUTCONV.MASK", imageFile->fpa, config,232 pmFPAfile *inconvMask = defineInputConvolved("PPSTACK.INCONV.MASK", outconvMask, config, 222 233 PM_FPA_FILE_MASK); 223 pmFPAfile *outconvWeight = defineOutputConvolved("PPSTACK.OUTCONV.WEIGHT", imageFile->fpa, config, 224 PM_FPA_FILE_WEIGHT); 225 if (!outconvImage || !outconvMask || !outconvWeight) { 226 return false; 227 } 228 229 // Input convolved files 230 pmFPAfile *inconvImage = defineInputConvolved("PPSTACK.INCONV", outconvImage, config, 231 PM_FPA_FILE_IMAGE); 232 pmFPAfile *inconvMask = defineInputConvolved("PPSTACK.INCONV.MASK", outconvMask, config, 233 PM_FPA_FILE_MASK); 234 pmFPAfile *inconvWeight = defineInputConvolved("PPSTACK.INCONV.WEIGHT", outconvWeight, config, 235 PM_FPA_FILE_WEIGHT); 236 if (!inconvImage || !inconvMask || !inconvWeight) { 234 pmFPAfile *inconvVariance = defineInputConvolved("PPSTACK.INCONV.VARIANCE", outconvVariance, config, 235 PM_FPA_FILE_VARIANCE); 236 if (!inconvImage || !inconvMask || !inconvVariance) { 237 237 return false; 238 238 } … … 246 246 psMetadataRemoveKey(config->arguments, "MASK.FILENAMES"); 247 247 } 248 if (psMetadataLookup(config->arguments, " WEIGHT.FILENAMES")) {249 psMetadataRemoveKey(config->arguments, " WEIGHT.FILENAMES");248 if (psMetadataLookup(config->arguments, "VARIANCE.FILENAMES")) { 249 psMetadataRemoveKey(config->arguments, "VARIANCE.FILENAMES"); 250 250 } 251 251 if (psMetadataLookup(config->arguments, "PSF.FILENAMES")) { … … 295 295 outMask->save = true; 296 296 297 // Output weight298 if (have Weights) {299 pmFPAfile *out Weight = pmFPAfileDefineOutput(config, output->fpa, "PPSTACK.OUTPUT.WEIGHT");300 if (!out Weight) {301 psError(PS_ERR_IO, false, _("Unable to generate output file from PPSTACK.OUTPUT. WEIGHT"));302 return false; 303 } 304 if (out Weight->type != PM_FPA_FILE_WEIGHT) {305 psError(PS_ERR_IO, true, "PPSTACK.OUTPUT. WEIGHT is not of type WEIGHT");306 return false; 307 } 308 out Weight->save = true;297 // Output variance 298 if (haveVariances) { 299 pmFPAfile *outVariance = pmFPAfileDefineOutput(config, output->fpa, "PPSTACK.OUTPUT.VARIANCE"); 300 if (!outVariance) { 301 psError(PS_ERR_IO, false, _("Unable to generate output file from PPSTACK.OUTPUT.VARIANCE")); 302 return false; 303 } 304 if (outVariance->type != PM_FPA_FILE_VARIANCE) { 305 psError(PS_ERR_IO, true, "PPSTACK.OUTPUT.VARIANCE is not of type VARIANCE"); 306 return false; 307 } 308 outVariance->save = true; 309 309 } 310 310 -
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); -
trunk/ppStack/src/ppStackMatch.c
r21199 r21366 16 16 PM_SOURCE_MODE_CR_LIMIT) // Mask to apply to input sources 17 17 #define FAINT_SOURCE_FRAC 1.0e-4 // Set minimum flux to this fraction of faintest source flux 18 #define COVAR_FRAC 0.01 // Truncation fraction for covariance matrix 18 19 19 20 //#define TESTING // Enable debugging output … … 233 234 } 234 235 235 // Read image, mask, weight236 // Read image, mask, variance 236 237 const char *tempImage = psMetadataLookupStr(NULL, recipe, "TEMP.IMAGE"); // Suffix for image 237 238 const char *tempMask = psMetadataLookupStr(NULL, recipe, "TEMP.MASK"); // Suffix for mask 238 const char *temp Weight = psMetadataLookupStr(NULL, recipe, "TEMP.WEIGHT"); // Suffix for weightmap239 psString imageName = NULL, maskName = NULL, weightName = NULL; // Names for convolved images239 const char *tempVariance = psMetadataLookupStr(NULL, recipe, "TEMP.VARIANCE"); // Suffix for variance map 240 psString imageName = NULL, maskName = NULL, varianceName = NULL; // Names for convolved images 240 241 psStringAppend(&imageName, "%s.%d.%s", outName, numInput, tempImage); 241 242 psStringAppend(&maskName, "%s.%d.%s", outName, numInput, tempMask); 242 psStringAppend(& weightName, "%s.%d.%s", outName, numInput, tempWeight);243 psStringAppend(&varianceName, "%s.%d.%s", outName, numInput, tempVariance); 243 244 244 245 if (!readImage(&readout->image, imageName, config) || !readImage(&readout->mask, maskName, config) || 245 !readImage(&readout-> weight, weightName, config)) {246 !readImage(&readout->variance, varianceName, config)) { 246 247 psError(PS_ERR_IO, false, "Unable to read previously produced image."); 247 248 psFree(imageName); 248 249 psFree(maskName); 249 psFree( weightName);250 psFree(varianceName); 250 251 return false; 251 252 } 252 253 psFree(imageName); 253 254 psFree(maskName); 254 psFree( weightName);255 psFree(varianceName); 255 256 256 257 psRegion *region = psMetadataLookupPtr(NULL, output->analysis, … … 374 375 "RENORM.STDEV")); 375 376 376 if (!pmReadout WeightRenormPixels(readout, maskBad, renormMean, renormStdev, rng)) {377 if (!pmReadoutVarianceRenormPixels(readout, maskBad, renormMean, renormStdev, rng)) { 377 378 psError(PS_ERR_UNKNOWN, false, "Unable to renormalise variances."); 378 379 psFree(output); … … 444 445 psFree(readout->image); 445 446 psFree(readout->mask); 446 psFree(readout->weight); 447 psFree(readout->variance); 448 psFree(readout->covariance); 447 449 readout->image = psMemIncrRefCounter(output->image); 448 450 readout->mask = psMemIncrRefCounter(output->mask); 449 readout->weight = psMemIncrRefCounter(output->weight); 451 readout->variance = psMemIncrRefCounter(output->variance); 452 readout->covariance = psImageCovarianceTruncate(output->covariance, COVAR_FRAC); 450 453 } else { 451 454 // Fake the convolution … … 559 562 "RENORM.STDEV")); 560 563 561 if (!pmReadout WeightRenormPixels(readout, maskBad, renormMean, renormStdev, rng)) {564 if (!pmReadoutVarianceRenormPixels(readout, maskBad, renormMean, renormStdev, rng)) { 562 565 psError(PS_ERR_UNKNOWN, false, "Unable to renormalise variances."); 563 566 psFree(output); … … 583 586 psFree(bg); 584 587 585 586 588 #if 0 587 589 #define RADIUS 10 // Radius of photometry -
trunk/ppStack/src/ppStackThread.c
r20711 r21366 38 38 psFitsClose(stack->imageFits->data[i]); 39 39 psFitsClose(stack->maskFits->data[i]); 40 psFitsClose(stack-> weightFits->data[i]);41 stack->imageFits->data[i] = stack->maskFits->data[i] = stack-> weightFits->data[i] = NULL;40 psFitsClose(stack->varianceFits->data[i]); 41 stack->imageFits->data[i] = stack->maskFits->data[i] = stack->varianceFits->data[i] = NULL; 42 42 } 43 43 psFree(stack->imageFits); 44 44 psFree(stack->maskFits); 45 psFree(stack-> weightFits);45 psFree(stack->varianceFits); 46 46 return; 47 47 } 48 48 49 49 ppStackThreadData *ppStackThreadDataSetup(const psArray *cells, const psArray *imageNames, 50 const psArray *maskNames, const psArray * weightNames,50 const psArray *maskNames, const psArray *varianceNames, 51 51 const pmConfig *config) 52 52 { … … 54 54 PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, imageNames, NULL); 55 55 PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, maskNames, NULL); 56 PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, weightNames, NULL);56 PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, varianceNames, NULL); 57 57 58 58 ppStackThreadData *stack = psAlloc(sizeof(ppStackThreadData)); // Thread data, to return … … 64 64 stack->imageFits = psArrayAlloc(numInputs); 65 65 stack->maskFits = psArrayAlloc(numInputs); 66 stack-> weightFits = psArrayAlloc(numInputs);66 stack->varianceFits = psArrayAlloc(numInputs); 67 67 for (int i = 0; i < numInputs; i++) { 68 68 if (!cells->data[i]) { … … 73 73 psString imageResolved = pmConfigConvertFilename(imageNames->data[i], config, false, false); 74 74 psString maskResolved = pmConfigConvertFilename(maskNames->data[i], config, false, false); 75 psString weightResolved = pmConfigConvertFilename(weightNames->data[i], config, false, false);75 psString varianceResolved = pmConfigConvertFilename(varianceNames->data[i], config, false, false); 76 76 stack->imageFits->data[i] = psFitsOpen(imageResolved, "r"); 77 77 stack->maskFits->data[i] = psFitsOpen(maskResolved, "r"); 78 stack-> weightFits->data[i] = psFitsOpen(weightResolved, "r");78 stack->varianceFits->data[i] = psFitsOpen(varianceResolved, "r"); 79 79 psFree(imageResolved); 80 80 psFree(maskResolved); 81 psFree( weightResolved);82 if (!stack->imageFits->data[i] || !stack->maskFits->data[i] || !stack-> weightFits->data[i]) {81 psFree(varianceResolved); 82 if (!stack->imageFits->data[i] || !stack->maskFits->data[i] || !stack->varianceFits->data[i]) { 83 83 psError(PS_ERR_UNKNOWN, false, "Unable to open convolved files %s, %s, %s", 84 (char*)imageNames->data[i], (char*)maskNames->data[i], (char*) weightNames->data[i]);84 (char*)imageNames->data[i], (char*)maskNames->data[i], (char*)varianceNames->data[i]); 85 85 return false; 86 86 } … … 156 156 // override the recorded last scan 157 157 ro->thisImageScan = thread->firstScan; 158 ro->this WeightScan = thread->firstScan;158 ro->thisVarianceScan = thread->firstScan; 159 159 ro->thisMaskScan = thread->firstScan; 160 160 ro->lastImageScan = thread->lastScan; 161 161 ro->lastMaskScan = thread->lastScan; 162 ro->last WeightScan = thread->lastScan;162 ro->lastVarianceScan = thread->lastScan; 163 163 ro->forceScan = true; 164 164 165 165 psFits *imageFits = stack->imageFits->data[i]; // FITS file for image 166 166 psFits *maskFits = stack->maskFits->data[i]; // FITS file for mask 167 psFits * weightFits = stack->weightFits->data[i]; // FITS file for weight167 psFits *varianceFits = stack->varianceFits->data[i]; // FITS file for variance 168 168 169 169 … … 189 189 } 190 190 191 if (pmReadoutMore Weight(ro, weightFits, 0, rows, config)) {191 if (pmReadoutMoreVariance(ro, varianceFits, 0, rows, config)) { 192 192 keepReading = true; 193 if (!pmReadoutReadChunkWeight(ro, weightFits, 0, rows, overlap, config)) { 194 psError(PS_ERR_IO, false, "Unable to read chunk %d for file PPSTACK.INPUT.WEIGHT %d", 193 if (!pmReadoutReadChunkVariance(ro, varianceFits, 0, rows, overlap, config)) { 194 psError(PS_ERR_IO, false, 195 "Unable to read chunk %d for file PPSTACK.INPUT.VARIANCE %d", 195 196 numChunk, i); 196 197 *status = false;
Note:
See TracChangeset
for help on using the changeset viewer.
