Changeset 5643
- Timestamp:
- Nov 30, 2005, 2:32:16 PM (21 years ago)
- Location:
- trunk/psphot
- Files:
-
- 5 edited
-
Makefile (modified) (2 diffs)
-
src/pmSourceFitFixed.c (modified) (5 diffs)
-
src/psphot.c (modified) (1 diff)
-
src/psphot.h (modified) (2 diffs)
-
src/psphotFixedPSF.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psphot/Makefile
r5622 r5643 28 28 $(SRC)/psphotChoosePSF.$(ARCH).o \ 29 29 $(SRC)/psphotApplyPSF.$(ARCH).o \ 30 $(SRC)/psphotFixedPSF.$(ARCH).o \ 30 31 $(SRC)/psphotFitGalaxies.$(ARCH).o \ 31 32 $(SRC)/psphotOutput.$(ARCH).o \ … … 38 39 $(SRC)/psModulesUtils.$(ARCH).o \ 39 40 $(SRC)/pmPeaksSigmaLimit.$(ARCH).o \ 41 $(SRC)/pmSourceFitFixed.$(ARCH).o \ 40 42 $(SRC)/psImageData.$(ARCH).o 41 43 -
trunk/psphot/src/pmSourceFitFixed.c
r5629 r5643 1 1 # include "psphot.h" 2 # define USECLIP 0 2 3 3 bool pmSourceFitFixed (pmSource *source, 4 pmModel *model) 5 { 4 bool pmSourceFitFixed (pmSource *source, pmModel *model) { 5 6 6 PS_ASSERT_PTR_NON_NULL(source, false); 7 7 PS_ASSERT_PTR_NON_NULL(source->peak, false); … … 11 11 PS_ASSERT_PTR_NON_NULL(source->weight, false); 12 12 13 // XXX EAM : is it necessary for the mask & weight to exist? the 14 // tests below could be conditions (!NULL) 15 16 psBool fitStatus = true; 17 psBool onPic = true; 18 psBool rc = true; 19 psF32 Ro, ymodel; 13 psF32 Ro, ymodel; 20 14 21 15 psVector *params = model->params; 22 16 psVector *dparams = model->dparams; 23 psVector *paramMask = NULL;24 17 25 18 pmModelFunc modelFunc = pmModelFunc_GetFunction (model->type); … … 52 45 yErr->data.F32[count] = sqrt (source->weight->data.F32[i][j] * Ro); 53 46 54 psVectorExtend (x, 1, 100);55 psVectorExtend (y, 1, 100);56 psVectorExtend (yErr, 1 , 100);47 psVectorExtend (x, 100, 1); 48 psVectorExtend (y, 100, 1); 49 psVectorExtend (yErr, 100, 1); 57 50 count++; 58 51 } … … 61 54 psPolynomial1D *poly = psPolynomial1DAlloc (1, PS_POLYNOMIAL_ORD); 62 55 63 // psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEDIAN | PS_STAT_SAMPLE_STDEV); 64 // stats->clipIter = 3; 65 // poly = psVectorClipFitPolynomial1D (poly, stats, NULL, 0, y, yErr, x); 56 # if (USECLIP) 57 psVector *mask = psVectorAlloc (count, PS_TYPE_U8); 58 psVectorInit (mask, 0); 59 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEDIAN | PS_STAT_SAMPLE_STDEV); 60 stats->clipIter = 3; 61 poly = psVectorClipFitPolynomial1D (poly, stats, mask, 0, y, yErr, x); 62 # else 63 poly = psVectorFitPolynomial1D (poly, NULL, 0, y, yErr, x); 64 # endif 66 65 67 poly = psVectorFitPolynomial1D (poly, stats, NULL, 0, y, yErr, x); 68 69 params->data.F32[0] = poly->coeff[0]; 70 params->data.F32[1] = poly->coeff[1]; 66 // fitted values are variations from current values 67 params->data.F32[0] += poly->coeff[0]; 68 params->data.F32[1] *= poly->coeff[1]; 71 69 72 70 // XXX need to get errors back from psVectorClipFit... … … 82 80 psFree(y); 83 81 psFree(yErr); 82 83 # if (USECLIP) 84 84 psFree(stats); 85 psFree(mask); 86 # endif 85 87 86 88 return true; -
trunk/psphot/src/psphot.c
r5628 r5643 49 49 if (!strcasecmp (breakPt, "PSFFIT")) exit (0); 50 50 51 // test PSF on all except SATURATE and DEFECT (artifacts) 52 psphotApplyPSF (imdata, config, sources, psf, sky); 53 if (!strcasecmp (breakPt, "PSFSUB")) exit (0); 51 int FITMODE = psMetadataLookupS32 (&status, config, "FIT_MODE"); 52 if (!status) FITMODE = 0; 54 53 55 // fit extended objects with galaxy models 56 psphotFitGalaxies (imdata, config, sources, sky); 57 if (!strcasecmp (breakPt, "GALSUB")) exit (0); 54 switch (FITMODE) { 55 case 0: 56 psphotFixedPSF (imdata, config, sources, psf, sky); 57 break; 58 59 case 1: 60 // test PSF on all except SATURATE and DEFECT (artifacts) 61 psphotApplyPSF (imdata, config, sources, psf, sky); 62 break; 63 64 case 2: 65 // fit extended objects with galaxy models 66 psphotApplyPSF (imdata, config, sources, psf, sky); 67 psphotFitGalaxies (imdata, config, sources, sky); 68 break; 69 70 case 3: 71 // fit extended objects with galaxy models 72 psphotFixedPSF (imdata, config, sources, psf, sky); 73 psphotFitGalaxies (imdata, config, sources, sky); 74 break; 75 } 58 76 59 77 // write out data in appropriate format -
trunk/psphot/src/psphot.h
r5622 r5643 24 24 pmPSF *psphotChoosePSF (psMetadata *config, psArray *sources, psStats *sky); 25 25 bool psphotApplyPSF (eamReadout *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky); 26 bool psphotFixedPSF (eamReadout *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky); 26 27 bool psphotFitGalaxies (eamReadout *imdata, psMetadata *config, psArray *sources, psStats *skyStats); 27 28 void psphotOutput (eamReadout *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky); … … 33 34 bool psphotDefinePixels (pmSource *mySource, const eamReadout *imdata, psF32 x, psF32 y, psF32 Radius); 34 35 36 bool pmSourceFitFixed (pmSource *source, pmModel *model); 35 37 psArray *pmPeaksSigmaLimit (eamReadout *imdata, psMetadata *config, psStats *sky); 36 38 pmModel *pmSourceMagnitudes (pmSource *source, pmPSF *psf, float apRadius); -
trunk/psphot/src/psphotFixedPSF.c
r5629 r5643 3 3 // fit psf model to all objects with centroid fixed 4 4 5 bool psphotFi tFixedPSF (eamReadout *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky)5 bool psphotFixedPSF (eamReadout *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky) 6 6 { 7 7 bool status; 8 8 float x; 9 9 float y; 10 float Sky; 10 11 int Nfit = 0; 11 int Nsub = 0;12 int Niter = 0;13 12 14 13 psTimerStart ("psphot"); 15 14 16 15 // we may set this differently here from the value used to mark likely saturated stars 17 float SATURATION = psMetadataLookupF32 (&status, config, "SATURATION");18 16 float OUTER_RADIUS = psMetadataLookupF32 (&status, config, "SKY_OUTER_RADIUS"); 19 17 20 float PSF_MIN_SN = psMetadataLookupF32 (&status, config, "PSF_MIN_SN");21 float PSF_MAX_CHI = psMetadataLookupF32 (&status, config, "PSF_MAX_CHI");22 18 float PSF_FIT_NSIGMA = psMetadataLookupF32 (&status, config, "PSF_FIT_NSIGMA"); 23 19 float PSF_FIT_PADDING = psMetadataLookupF32 (&status, config, "PSF_FIT_PADDING"); 24 float PSF_SHAPE_NSIGMA = psMetadataLookupF32 (&status, config, "PSF_SHAPE_NSIGMA");25 20 26 21 // set the object surface-brightness limit for fitted pixels … … 45 40 // set PSF parameters for this model 46 41 pmModel *model = pmModelFromPSF (modelFLT, psf); 42 // model->params->data.F32[2] = source->peak->x; 43 // model->params->data.F32[3] = source->peak->y; 47 44 x = model->params->data.F32[2]; 48 45 y = model->params->data.F32[3]; … … 69 66 70 67 if (!status || (model->params->data.F32[1] < 0)) { 71 psLogMsg ("psphot", 5, "PSF fit failed for %f, %f ( %d iterations)\n", x, y, model->nIter);68 psLogMsg ("psphot", 5, "PSF fit failed for %f, %f (peak %f\n", x, y, model->params->data.F32[1]); 72 69 source->type = PM_SOURCE_FAIL_FIT_PSF; // better choice? 73 70 psFree (model); … … 77 74 // model succeeded : tentatively keep it 78 75 source->modelPSF = model; 79 Niter += model[0].nIter;80 76 Nfit ++; 81 77 82 78 // subtract object, leave local sky 83 sky = model->params->data.F32[0];79 Sky = model->params->data.F32[0]; 84 80 model->params->data.F32[0] = 0; 85 81 pmSourceSubModel (source->pixels, source->mask, source->modelPSF, false); 86 model->params->data.F32[0] = sky;82 model->params->data.F32[0] = Sky; 87 83 } 88 84 89 psLogMsg ("psphot", 3, "fit fixed PSF models: %f sec for %d objects (%d total iterations)\n", psTimerMark ("psphot"), Nfit, Niter);85 psLogMsg ("psphot", 3, "fit fixed PSF models: %f sec for %d objects\n", psTimerMark ("psphot"), Nfit); 90 86 return (true); 91 87 }
Note:
See TracChangeset
for help on using the changeset viewer.
