Changeset 28440 for branches/eam_branches/ipp-20100621/psModules
- Timestamp:
- Jun 23, 2010, 2:36:55 PM (16 years ago)
- Location:
- branches/eam_branches/ipp-20100621/psModules/src/objects
- Files:
-
- 4 edited
-
pmPSF_IO.c (modified) (14 diffs)
-
pmPSF_IO.h (modified) (2 diffs)
-
pmSourcePhotometry.c (modified) (14 diffs)
-
pmSourcePhotometry.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20100621/psModules/src/objects/pmPSF_IO.c
r27531 r28440 174 174 PS_ASSERT_PTR_NON_NULL(chip, false); 175 175 176 if (!pmPSFmodelWrite(chip->analysis, view, file, config)) { 176 // We need the readout as well, because that has the PSF analysis data (e.g., clumps) 177 // There is only one, because photometry is done on chip-mosaicked data. 178 pmFPAview *roView = pmFPAviewAlloc(0); // View to readout 179 *roView = *view; 180 roView->cell = 0; 181 roView->readout = 0; 182 pmReadout *ro = pmFPAviewThisReadout(roView, chip->parent); // Readout with analysis data 183 psFree(roView); 184 PM_ASSERT_READOUT_NON_NULL(ro, false); 185 186 if (!pmPSFmodelWrite(chip->analysis, ro->analysis, view, file, config)) { 177 187 psError(psErrorCodeLast(), false, "Failed to write PSF for chip"); 178 188 return false; … … 189 199 // else 190 200 // - psf table (+header) : FITS Table 191 bool pmPSFmodelWrite ( psMetadata *analysis, const pmFPAview *view,201 bool pmPSFmodelWrite (const psMetadata *chipAnalysis, const psMetadata *roAnalysis, const pmFPAview *view, 192 202 pmFPAfile *file, pmConfig *config) 193 203 { … … 198 208 char *headName, *tableName, *residName; 199 209 200 if (! analysis) {210 if (!chipAnalysis) { 201 211 psError(PM_ERR_PROG, true, "No analysis metadata for chip."); 212 return false; 213 } 214 if (!roAnalysis) { 215 psError(PM_ERR_PROG, true, "No analysis metadata for readout."); 202 216 return false; 203 217 } … … 314 328 315 329 // select the psf of interest 316 pmPSF *psf = psMetadataLookupPtr (&status, analysis, "PSPHOT.PSF");330 pmPSF *psf = psMetadataLookupPtr (&status, chipAnalysis, "PSPHOT.PSF"); 317 331 if (!psf) { 318 332 psError(PM_ERR_PROG, true, "missing PSF for this analysis metadata"); … … 346 360 347 361 // we now save clump parameters for each region : need to save all of those 348 int nRegions = psMetadataLookupS32 (&status, analysis, "PSF.CLUMP.NREGIONS");362 int nRegions = psMetadataLookupS32 (&status, roAnalysis, "PSF.CLUMP.NREGIONS"); 349 363 psMetadataAddS32 (header, PS_LIST_TAIL, "PSF_CLN", PS_META_REPLACE, "number of psf clump regions", nRegions); 350 364 for (int i = 0; i < nRegions; i++) { 351 365 char regionName[64]; 352 366 snprintf (regionName, 64, "PSF.CLUMP.REGION.%03d", i); 353 psMetadata *regionMD = psMetadataLookupPtr (&status, analysis, regionName);367 psMetadata *regionMD = psMetadataLookupPtr (&status, roAnalysis, regionName); 354 368 355 369 psfClump.X = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.X"); assert (status); … … 492 506 493 507 // write the residuals as planes of the image 494 psArray *images = psArrayAllocEmpty (1);495 psArrayAdd (images, 1, psf->residuals->Ro); // z = 0 is Ro508 psArray *images = psArrayAllocEmpty (1); 509 psArrayAdd (images, 1, psf->residuals->Ro); // z = 0 is Ro 496 510 497 511 if (psf->residuals->Rx) { 498 512 psArrayAdd (images, 1, psf->residuals->Rx); 499 513 psArrayAdd (images, 1, psf->residuals->Ry); 500 }501 502 // note that all N plane are implicitly of the same type, so we convert the mask503 if (psf->residuals->mask) {504 psImage *mask = psImageCopy (NULL, psf->residuals->mask, psf->residuals->Ro->type.type);505 psArrayAdd (images, 1, mask);506 psFree (mask);507 }508 509 // psFitsWriteImageCube (file->fits, header, images, residName);510 // psFree (images);511 512 if (!psFitsWriteImageCube (file->fits, header, images, residName)) {514 } 515 516 // note that all N plane are implicitly of the same type, so we convert the mask 517 if (psf->residuals->mask) { 518 psImage *mask = psImageCopy (NULL, psf->residuals->mask, psf->residuals->Ro->type.type); 519 psArrayAdd (images, 1, mask); 520 psFree (mask); 521 } 522 523 // psFitsWriteImageCube (file->fits, header, images, residName); 524 // psFree (images); 525 526 if (!psFitsWriteImageCube (file->fits, header, images, residName)) { 513 527 psError(psErrorCodeLast(), false, "Unable to write PSF residuals."); 514 528 psFree(images); … … 728 742 PS_ASSERT_PTR_NON_NULL(file->fpa, false); 729 743 730 if (!pmPSFmodelRead (chip->analysis, view, file, config)) { 744 // We need the readout as well, because that has the PSF analysis data (e.g., clumps) 745 // There may be only one, because photometry is done on chip-mosaicked data. 746 if (chip->cells->n != 1) { 747 psError(PM_ERR_PROG, true, "Chip to receive PSF has %ld cells (should be only one)", 748 chip->cells->n); 749 return false; 750 } 751 pmCell *cell = chip->cells->data[0]; // Cell to receive PSF 752 pmReadout *ro = NULL; // Readout to receive PSF 753 if (cell->readouts->n == 0) { 754 ro = pmReadoutAlloc(cell); 755 psFree(ro); // Drop reference 756 } else if (cell->readouts->n != 1) { 757 psError(PM_ERR_PROG, true, "Cell to receive PSF has %ld readouts (should be only one)", 758 cell->readouts->n); 759 return false; 760 } else { 761 ro = cell->readouts->data[0]; 762 } 763 PM_ASSERT_READOUT_NON_NULL(ro, false); 764 if (!ro->analysis) { 765 ro->analysis = psMetadataAlloc(); 766 } 767 768 if (!pmPSFmodelRead(chip->analysis, ro->analysis, view, file, config)) { 731 769 psError(psErrorCodeLast(), false, "Failed to write PSF for chip"); 732 770 return false; … … 737 775 // for each Readout (ie, analysed image), we write out: header + table with PSF model parameters, 738 776 // and header + image for the PSF residual images 739 bool pmPSFmodelRead (psMetadata * analysis, const pmFPAview *view, pmFPAfile *file, const pmConfig *config)777 bool pmPSFmodelRead (psMetadata *chipAnalysis, psMetadata *roAnalysis, const pmFPAview *view, pmFPAfile *file, const pmConfig *config) 740 778 { 779 PS_ASSERT_METADATA_NON_NULL(chipAnalysis, false); 780 PS_ASSERT_METADATA_NON_NULL(roAnalysis, false); 741 781 PS_ASSERT_PTR_NON_NULL(view, false); 742 782 PS_ASSERT_PTR_NON_NULL(file, false); … … 809 849 char regionName[64]; 810 850 snprintf (regionName, 64, "PSF.CLUMP.REGION.000"); 811 psMetadataAddS32 ( analysis, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS", PS_META_REPLACE, "psf clump regions", 1);812 813 psMetadata *regionMD = psMetadataLookupPtr (&status, analysis, regionName);851 psMetadataAddS32 (roAnalysis, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS", PS_META_REPLACE, "psf clump regions", 1); 852 853 psMetadata *regionMD = psMetadataLookupPtr (&status, roAnalysis, regionName); 814 854 if (!regionMD) { 815 855 regionMD = psMetadataAlloc(); 816 psMetadataAddMetadata ( analysis, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD);856 psMetadataAddMetadata (roAnalysis, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD); 817 857 psFree (regionMD); 818 858 } … … 831 871 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DY", PS_META_REPLACE, "psf clump center", psfClump.dY); 832 872 } else { 833 psMetadataAddS32 ( analysis, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS", PS_META_REPLACE, "psf clump regions", nRegions);873 psMetadataAddS32 (roAnalysis, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS", PS_META_REPLACE, "psf clump regions", nRegions); 834 874 835 875 for (int i = 0; i < nRegions; i++) { … … 838 878 snprintf (regionName, 64, "PSF.CLUMP.REGION.%03d", i); 839 879 840 psMetadata *regionMD = psMetadataLookupPtr (&status, analysis, regionName);880 psMetadata *regionMD = psMetadataLookupPtr (&status, roAnalysis, regionName); 841 881 if (!regionMD) { 842 882 regionMD = psMetadataAlloc(); 843 psMetadataAddMetadata ( analysis, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD);883 psMetadataAddMetadata (roAnalysis, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD); 844 884 psFree (regionMD); 845 885 } … … 1019 1059 } 1020 1060 1021 // note that all N plane are implicitly of the same type, so we convert the mask1022 psImage *mask = psImageCopy(NULL, psf->residuals->mask, psf->residuals->Ro->type.type);1023 psImageInit (psf->residuals->mask, 0);1024 psImageInit (psf->residuals->Rx, 0.0);1025 psImageInit (psf->residuals->Ry, 0.0);1026 switch (Nz) {1027 case 1: // Ro only1028 break;1029 case 2: // Ro and mask1061 // note that all N plane are implicitly of the same type, so we convert the mask 1062 psImage *mask = psImageCopy(NULL, psf->residuals->mask, psf->residuals->Ro->type.type); 1063 psImageInit (psf->residuals->mask, 0); 1064 psImageInit (psf->residuals->Rx, 0.0); 1065 psImageInit (psf->residuals->Ry, 0.0); 1066 switch (Nz) { 1067 case 1: // Ro only 1068 break; 1069 case 2: // Ro and mask 1030 1070 if (!psFitsReadImageBuffer(mask, file->fits, fullImage, 1)) { 1031 1071 psError(psErrorCodeLast(), false, "Unable to read PSF residual image."); 1032 1072 return false; 1033 1073 } 1034 psImageCopy (psf->residuals->mask, mask, PM_TYPE_RESID_MASK);1035 break;1036 case 3: // Ro, Rx and Ry, no mask1074 psImageCopy (psf->residuals->mask, mask, PM_TYPE_RESID_MASK); 1075 break; 1076 case 3: // Ro, Rx and Ry, no mask 1037 1077 if (!psFitsReadImageBuffer(psf->residuals->Rx, file->fits, fullImage, 1)) { 1038 1078 psError(psErrorCodeLast(), false, "Unable to read PSF residual image."); … … 1043 1083 return false; 1044 1084 } 1045 break;1046 case 4: // Ro, Rx, Ry, and mask:1085 break; 1086 case 4: // Ro, Rx, Ry, and mask: 1047 1087 if (!psFitsReadImageBuffer(psf->residuals->Rx, file->fits, fullImage, 1)) { 1048 1088 psError(psErrorCodeLast(), false, "Unable to read PSF residual image."); … … 1057 1097 return false; 1058 1098 } 1059 psImageCopy (psf->residuals->mask, mask, PM_TYPE_RESID_MASK);1060 break;1061 } 1062 psFree (mask);1063 } 1064 1065 psMetadataAdd ( analysis, PS_LIST_TAIL, "PSPHOT.PSF", PS_DATA_UNKNOWN, "psphot psf", psf);1099 psImageCopy (psf->residuals->mask, mask, PM_TYPE_RESID_MASK); 1100 break; 1101 } 1102 psFree (mask); 1103 } 1104 1105 psMetadataAdd (chipAnalysis, PS_LIST_TAIL, "PSPHOT.PSF", PS_DATA_UNKNOWN, "psphot psf", psf); 1066 1106 psFree (psf); 1067 1107 -
branches/eam_branches/ipp-20100621/psModules/src/objects/pmPSF_IO.h
r18601 r28440 20 20 bool pmPSFmodelWriteFPA (pmFPA *fpa, const pmFPAview *view, pmFPAfile *file, pmConfig *config); 21 21 bool pmPSFmodelWriteChip (pmChip *chip, const pmFPAview *view, pmFPAfile *file, pmConfig *config); 22 bool pmPSFmodelWrite ( psMetadata *analysis, const pmFPAview *view, pmFPAfile *file, pmConfig *config);22 bool pmPSFmodelWrite (const psMetadata *chipAnalysis, const psMetadata *roAnalysis, const pmFPAview *view, pmFPAfile *file, pmConfig *config); 23 23 24 24 bool pmPSFmodelWritePHU (const pmFPAview *view, pmFPAfile *file, pmConfig *config); … … 27 27 bool pmPSFmodelReadFPA (pmFPA *fpa, const pmFPAview *view, pmFPAfile *file, const pmConfig *config); 28 28 bool pmPSFmodelReadChip (pmChip *chip, const pmFPAview *view, pmFPAfile *file, const pmConfig *config); 29 bool pmPSFmodelRead (psMetadata * analysis, const pmFPAview *view, pmFPAfile *file, const pmConfig *config);29 bool pmPSFmodelRead (psMetadata *chipAnalysis, psMetadata *roAnalysis, const pmFPAview *view, pmFPAfile *file, const pmConfig *config); 30 30 31 31 bool pmPSFmodelCheckDataStatusForView (const pmFPAview *view, const pmFPAfile *file); -
branches/eam_branches/ipp-20100621/psModules/src/objects/pmSourcePhotometry.c
r27531 r28440 107 107 // the source peak pixel is guaranteed to be on the image, and only minimally different from the source center 108 108 double fluxScale = pmTrend2DEval (psf->FluxScale, (float)source->peak->x, (float)source->peak->y); 109 psAssert (isfinite(fluxScale), "how can the flux scale be invalid? source at %d, %d\n", source->peak->x, source->peak->y);110 psAssert (fluxScale > 0.0, "how can the flux scale be negative? source at %d, %d\n", source->peak->x, source->peak->y);111 source->psfFlux = fluxScale * source->modelPSF->params->data.F32[PM_PAR_I0];112 source->psfFluxErr = fluxScale * source->modelPSF->dparams->data.F32[PM_PAR_I0];113 source->psfMag = -2.5*log10(source->psfFlux);109 psAssert (isfinite(fluxScale), "how can the flux scale be invalid? source at %d, %d\n", source->peak->x, source->peak->y); 110 psAssert (fluxScale > 0.0, "how can the flux scale be negative? source at %d, %d\n", source->peak->x, source->peak->y); 111 source->psfFlux = fluxScale * source->modelPSF->params->data.F32[PM_PAR_I0]; 112 source->psfFluxErr = fluxScale * source->modelPSF->dparams->data.F32[PM_PAR_I0]; 113 source->psfMag = -2.5*log10(source->psfFlux); 114 114 } else { 115 115 status = pmSourcePhotometryModel (&source->psfMag, &source->psfFlux, source->modelPSF); 116 source->psfFluxErr = source->psfFlux * (source->modelPSF->dparams->data.F32[PM_PAR_I0] / source->modelPSF->params->data.F32[PM_PAR_I0]);116 source->psfFluxErr = source->psfFlux * (source->modelPSF->dparams->data.F32[PM_PAR_I0] / source->modelPSF->params->data.F32[PM_PAR_I0]); 117 117 } 118 118 … … 120 120 if (source->modelFits) { 121 121 bool foundEXT = false; 122 for (int i = 0; i < source->modelFits->n; i++) {123 pmModel *model = source->modelFits->data[i];124 status = pmSourcePhotometryModel (&model->mag, NULL, model);125 if (model == source->modelEXT) foundEXT = true;126 }127 if (foundEXT) {128 source->extMag = source->modelEXT->mag;129 } else {130 status = pmSourcePhotometryModel (&source->extMag, NULL, source->modelEXT);131 }122 for (int i = 0; i < source->modelFits->n; i++) { 123 pmModel *model = source->modelFits->data[i]; 124 status = pmSourcePhotometryModel (&model->mag, NULL, model); 125 if (model == source->modelEXT) foundEXT = true; 126 } 127 if (foundEXT) { 128 source->extMag = source->modelEXT->mag; 129 } else { 130 status = pmSourcePhotometryModel (&source->extMag, NULL, source->modelEXT); 131 } 132 132 } else { 133 if (source->modelEXT) {134 status = pmSourcePhotometryModel (&source->extMag, NULL, source->modelEXT);135 }133 if (source->modelEXT) { 134 status = pmSourcePhotometryModel (&source->extMag, NULL, source->modelEXT); 135 } 136 136 } 137 137 … … 204 204 } 205 205 if (mode & PM_SOURCE_PHOT_APCORR) { 206 // XXX this should be removed -- we no longer fit for the 'sky bias'206 // XXX this should be removed -- we no longer fit for the 'sky bias' 207 207 rflux = pow (10.0, 0.4*source->psfMag); 208 208 source->apMag -= PS_SQR(source->apRadius)*rflux * psf->skyBias + psf->skySat / rflux; … … 236 236 flux = model->modelFlux (model->params); 237 237 if (flux > 0) { 238 mag = -2.5*log10(flux);238 mag = -2.5*log10(flux); 239 239 } 240 240 if (fitMag) { 241 *fitMag = mag;241 *fitMag = mag; 242 242 } 243 243 if (fitFlux) { 244 *fitFlux = flux;244 *fitFlux = flux; 245 245 } 246 246 … … 380 380 381 381 if (source->diffStats == NULL) { 382 source->diffStats = pmSourceDiffStatsAlloc();382 source->diffStats = pmSourceDiffStatsAlloc(); 383 383 } 384 384 … … 388 388 int nMask = 0; 389 389 int nBad = 0; 390 390 391 391 psImage *flux = source->pixels; 392 392 psImage *variance = source->variance; … … 394 394 395 395 for (int iy = 0; iy < flux->numRows; iy++) { 396 for (int ix = 0; ix < flux->numCols; ix++) {396 for (int ix = 0; ix < flux->numCols; ix++) { 397 397 if (mask->data.PS_TYPE_IMAGE_MASK_DATA[iy][ix] & maskVal) { 398 nMask ++;399 continue; 400 }401 402 float SN = flux->data.F32[iy][ix] / sqrt(variance->data.F32[iy][ix]);403 404 if (SN > +FLUX_LIMIT) { 405 nGood ++;406 fGood += fabs(flux->data.F32[iy][ix]);407 }408 409 if (SN < -FLUX_LIMIT) { 410 nBad ++;411 fBad += fabs(flux->data.F32[iy][ix]);412 }413 }398 nMask ++; 399 continue; 400 } 401 402 float SN = flux->data.F32[iy][ix] / sqrt(variance->data.F32[iy][ix]); 403 404 if (SN > +FLUX_LIMIT) { 405 nGood ++; 406 fGood += fabs(flux->data.F32[iy][ix]); 407 } 408 409 if (SN < -FLUX_LIMIT) { 410 nBad ++; 411 fBad += fabs(flux->data.F32[iy][ix]); 412 } 413 } 414 414 } 415 415 416 416 source->diffStats->nGood = nGood; 417 source->diffStats->fRatio = (fGood + fBad == 0.0) ? NAN : fGood / (fGood + fBad); 418 source->diffStats->nRatioBad = (nGood + nBad == 0) ? NAN : nGood / (float) (nGood + nBad); 419 source->diffStats->nRatioMask = (nGood + nMask == 0) ? NAN : nGood / (float) (nGood + nMask); 417 source->diffStats->fRatio = (fGood + fBad == 0.0) ? NAN : fGood / (fGood + fBad); 418 source->diffStats->nRatioBad = (nGood + nBad == 0) ? NAN : nGood / (float) (nGood + nBad); 419 source->diffStats->nRatioMask = (nGood + nMask == 0) ? NAN : nGood / (float) (nGood + nMask); 420 420 source->diffStats->nRatioAll = (nGood + nMask + nBad == 0) ? NAN : nGood / (float) (nGood + nMask + nBad); 421 421 … … 628 628 } 629 629 } 630 model->nPix = Npix; 630 model->nPix = Npix; 631 631 model->nDOF = Npix - 1; 632 632 model->chisq = dC; … … 636 636 637 637 638 double pmSourceModelWeight(const pmSource *Mi, int term, const bool unweighted_sum, const float covarFactor )638 double pmSourceModelWeight(const pmSource *Mi, int term, const bool unweighted_sum, const float covarFactor, psImageMaskType maskVal) 639 639 { 640 640 PS_ASSERT_PTR_NON_NULL(Mi, NAN); … … 652 652 for (int yi = 0; yi < Pi->numRows; yi++) { 653 653 for (int xi = 0; xi < Pi->numCols; xi++) { 654 if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi] )654 if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi] & maskVal) 655 655 continue; 656 656 if (!unweighted_sum) { … … 684 684 } 685 685 686 double pmSourceModelDotModel (const pmSource *Mi, const pmSource *Mj, const bool unweighted_sum, const float covarFactor )686 double pmSourceModelDotModel (const pmSource *Mi, const pmSource *Mj, const bool unweighted_sum, const float covarFactor, psImageMaskType maskVal) 687 687 { 688 688 PS_ASSERT_PTR_NON_NULL(Mi, NAN); … … 727 727 for (yi = yIs, yj = yJs; yi < yIe; yi++, yj++) { 728 728 for (xi = xIs, xj = xJs; xi < xIe; xi++, xj++) { 729 if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi] )730 continue; 731 if (Tj->data.PS_TYPE_IMAGE_MASK_DATA[yj][xj] )729 if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi] & maskVal) 730 continue; 731 if (Tj->data.PS_TYPE_IMAGE_MASK_DATA[yj][xj] & maskVal) 732 732 continue; 733 733 … … 746 746 } 747 747 748 double pmSourceDataDotModel (const pmSource *Mi, const pmSource *Mj, const bool unweighted_sum, const float covarFactor )748 double pmSourceDataDotModel (const pmSource *Mi, const pmSource *Mj, const bool unweighted_sum, const float covarFactor, psImageMaskType maskVal) 749 749 { 750 750 PS_ASSERT_PTR_NON_NULL(Mi, NAN); … … 789 789 for (yi = yIs, yj = yJs; yi < yIe; yi++, yj++) { 790 790 for (xi = xIs, xj = xJs; xi < xIe; xi++, xj++) { 791 if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi] )792 continue; 793 if (Tj->data.PS_TYPE_IMAGE_MASK_DATA[yj][xj] )791 if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi] & maskVal) 792 continue; 793 if (Tj->data.PS_TYPE_IMAGE_MASK_DATA[yj][xj] & maskVal) 794 794 continue; 795 795 -
branches/eam_branches/ipp-20100621/psModules/src/objects/pmSourcePhotometry.h
r27531 r28440 48 48 psImage *image, ///< image pixels to be used 49 49 psImage *mask, ///< mask of pixels to ignore 50 psImageMaskType maskVal ///< Value to mask50 psImageMaskType maskVal ///< Value to mask 51 51 ); 52 52 … … 58 58 bool pmSourceMeasureDiffStats (pmSource *source, psImageMaskType maskVal); 59 59 60 double pmSourceDataDotModel (const pmSource *Mi, const pmSource *Mj, const bool unweighted_sum, const float covarFactor );61 double pmSourceModelDotModel (const pmSource *Mi, const pmSource *Mj, const bool unweighted_sum, const float covarFactor );62 double pmSourceModelWeight(const pmSource *Mi, int term, const bool unweighted_sum, const float covarFactor );60 double pmSourceDataDotModel (const pmSource *Mi, const pmSource *Mj, const bool unweighted_sum, const float covarFactor, psImageMaskType maskVal); 61 double pmSourceModelDotModel (const pmSource *Mi, const pmSource *Mj, const bool unweighted_sum, const float covarFactor, psImageMaskType maskVal); 62 double pmSourceModelWeight(const pmSource *Mi, int term, const bool unweighted_sum, const float covarFactor, psImageMaskType maskVal); 63 63 64 64 // retire these:
Note:
See TracChangeset
for help on using the changeset viewer.
