IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 5643


Ignore:
Timestamp:
Nov 30, 2005, 2:32:16 PM (21 years ago)
Author:
eugene
Message:

adding fixed-psf fitting

Location:
trunk/psphot
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/psphot/Makefile

    r5622 r5643  
    2828$(SRC)/psphotChoosePSF.$(ARCH).o   \
    2929$(SRC)/psphotApplyPSF.$(ARCH).o    \
     30$(SRC)/psphotFixedPSF.$(ARCH).o    \
    3031$(SRC)/psphotFitGalaxies.$(ARCH).o \
    3132$(SRC)/psphotOutput.$(ARCH).o      \
     
    3839$(SRC)/psModulesUtils.$(ARCH).o    \
    3940$(SRC)/pmPeaksSigmaLimit.$(ARCH).o \
     41$(SRC)/pmSourceFitFixed.$(ARCH).o  \
    4042$(SRC)/psImageData.$(ARCH).o
    4143
  • trunk/psphot/src/pmSourceFitFixed.c

    r5629 r5643  
    11# include "psphot.h"
     2# define USECLIP 0
    23
    3 bool pmSourceFitFixed (pmSource *source,
    4                        pmModel *model)
    5 {
     4bool pmSourceFitFixed (pmSource *source, pmModel *model) {
     5
    66    PS_ASSERT_PTR_NON_NULL(source, false);
    77    PS_ASSERT_PTR_NON_NULL(source->peak, false);
     
    1111    PS_ASSERT_PTR_NON_NULL(source->weight, false);
    1212
    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;
    2014
    2115    psVector *params = model->params;
    2216    psVector *dparams = model->dparams;
    23     psVector *paramMask = NULL;
    2417
    2518    pmModelFunc modelFunc = pmModelFunc_GetFunction (model->type);
     
    5245            yErr->data.F32[count] = sqrt (source->weight->data.F32[i][j] * Ro);
    5346
    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);
    5750            count++;
    5851        }
     
    6154    psPolynomial1D *poly = psPolynomial1DAlloc (1, PS_POLYNOMIAL_ORD);
    6255
    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
    6665
    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];
    7169
    7270    // XXX need to get errors back from psVectorClipFit...
     
    8280    psFree(y);
    8381    psFree(yErr);
     82
     83# if (USECLIP)
    8484    psFree(stats);
     85    psFree(mask);
     86# endif
    8587
    8688    return true;
  • trunk/psphot/src/psphot.c

    r5628 r5643  
    4949    if (!strcasecmp (breakPt, "PSFFIT")) exit (0);
    5050
    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;
    5453
    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    }
    5876
    5977    // write out data in appropriate format
  • trunk/psphot/src/psphot.h

    r5622 r5643  
    2424pmPSF       *psphotChoosePSF (psMetadata *config, psArray *sources, psStats *sky);
    2525bool         psphotApplyPSF (eamReadout *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky);
     26bool         psphotFixedPSF (eamReadout *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky);
    2627bool         psphotFitGalaxies (eamReadout *imdata, psMetadata *config, psArray *sources, psStats *skyStats);
    2728void         psphotOutput (eamReadout *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky);
     
    3334bool         psphotDefinePixels (pmSource *mySource, const eamReadout *imdata, psF32 x, psF32 y, psF32 Radius);
    3435
     36bool         pmSourceFitFixed (pmSource *source, pmModel *model);
    3537psArray     *pmPeaksSigmaLimit (eamReadout *imdata, psMetadata *config, psStats *sky);
    3638pmModel     *pmSourceMagnitudes (pmSource *source, pmPSF *psf, float apRadius);
  • trunk/psphot/src/psphotFixedPSF.c

    r5629 r5643  
    33// fit psf model to all objects with centroid fixed
    44
    5 bool psphotFitFixedPSF (eamReadout *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky)
     5bool psphotFixedPSF (eamReadout *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky)
    66{
    77    bool  status;
    88    float x;
    99    float y;
     10    float Sky;
    1011    int   Nfit = 0;
    11     int   Nsub = 0;
    12     int   Niter = 0;
    1312
    1413    psTimerStart ("psphot");
    1514
    1615    // we may set this differently here from the value used to mark likely saturated stars
    17     float SATURATION   = psMetadataLookupF32 (&status, config, "SATURATION");
    1816    float OUTER_RADIUS = psMetadataLookupF32 (&status, config, "SKY_OUTER_RADIUS");
    1917
    20     float PSF_MIN_SN       = psMetadataLookupF32 (&status, config, "PSF_MIN_SN");
    21     float PSF_MAX_CHI      = psMetadataLookupF32 (&status, config, "PSF_MAX_CHI");
    2218    float PSF_FIT_NSIGMA   = psMetadataLookupF32 (&status, config, "PSF_FIT_NSIGMA");
    2319    float PSF_FIT_PADDING  = psMetadataLookupF32 (&status, config, "PSF_FIT_PADDING");
    24     float PSF_SHAPE_NSIGMA = psMetadataLookupF32 (&status, config, "PSF_SHAPE_NSIGMA");
    2520
    2621    // set the object surface-brightness limit for fitted pixels
     
    4540        // set PSF parameters for this model
    4641        pmModel *model = pmModelFromPSF (modelFLT, psf);
     42        // model->params->data.F32[2] = source->peak->x;
     43        // model->params->data.F32[3] = source->peak->y;
    4744        x = model->params->data.F32[2];
    4845        y = model->params->data.F32[3];
     
    6966
    7067        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]);
    7269          source->type = PM_SOURCE_FAIL_FIT_PSF;  // better choice?
    7370          psFree (model);
     
    7774        // model succeeded : tentatively keep it
    7875        source->modelPSF = model;
    79         Niter += model[0].nIter;
    8076        Nfit ++;
    8177
    8278        // subtract object, leave local sky
    83         sky = model->params->data.F32[0];
     79        Sky = model->params->data.F32[0];
    8480        model->params->data.F32[0] = 0;
    8581        pmSourceSubModel (source->pixels, source->mask, source->modelPSF, false);
    86         model->params->data.F32[0] = sky;
     82        model->params->data.F32[0] = Sky;
    8783    }
    8884
    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);
    9086    return (true);
    9187}
Note: See TracChangeset for help on using the changeset viewer.