Changeset 28484 for branches/pap/psModules/src/objects/pmSourcePhotometry.c
- Timestamp:
- Jun 24, 2010, 2:59:09 PM (16 years ago)
- Location:
- branches/pap
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/pap
- Property svn:mergeinfo changed
-
branches/pap/psModules
- Property svn:mergeinfo changed
/branches/czw_branch/20100519/psModules (added) merged: 28164,28304,28334,28338
- Property svn:mergeinfo changed
-
branches/pap/psModules/src/objects/pmSourcePhotometry.c
r27531 r28484 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
Note:
See TracChangeset
for help on using the changeset viewer.
