IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 3, 2011, 3:11:09 PM (15 years ago)
Author:
eugene
Message:

fix the calculation of chisq values for constant errors (re-calculated, do not attempt to correct raw value)

Location:
branches/eam_branches/ipp-20110213/psModules/src/objects
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmModel.c

    r30705 r30784  
    6767    tmp->chisqNorm = NAN;
    6868    tmp->nDOF  = 0;
     69    tmp->nPar  = 0;
    6970    tmp->nPix  = 0;
    7071    tmp->nIter = 0;
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmModel.h

    r30705 r30784  
    3939    float magErr;                       ///< integrated model magnitude error
    4040    int nPix;                           ///< number of pixels used for fit
    41     int nDOF;                           ///< number of degrees of freedom
     41    int nPar;                           ///< number of parameters in fit
     42    int nDOF;                           ///< number of degrees of freedom (nDOF = nPix - nPar)
    4243    int nIter;                          ///< number of iterations to reach min
    4344    pmModelStatus flags;                ///< model status flags
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmPCMdata.c

    r30763 r30784  
    254254
    255255    pcm->nPix = nPix;
    256     pcm->nDOF = nPix - nParams - 1;
     256    pcm->nPar = nParams;
     257    pcm->nDOF = nPix - nParams;
    257258
    258259    return pcm;
     
    341342        return false;
    342343    }
     344    pcm->nPar = nParams;
    343345    pcm->nDOF = pcm->nPix - nParams;
    344346
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmPCMdata.h

    r30621 r30784  
    3333    psMinConstraint *constraint;
    3434    int nPix;
     35    int nPar;
    3536    int nDOF;
    3637} pmPCMdata;
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceFitModel.c

    r30763 r30784  
    236236        model->covar = psMemIncrRefCounter(covar);
    237237    }
     238    model->nIter = myMin->iter;
     239    model->nPar = nParams;
     240
    238241    psTrace ("psModules.objects", 4, "niter: %d, chisq: %f", myMin->iter, myMin->value);
    239242
    240243    // save the resulting chisq, nDOF, nIter
     244    // NOTE: if (!options->poissonErrors) chisq will be wrong : recalculate
    241245    if (options->poissonErrors) {
    242246        model->chisq = myMin->value;
    243247        model->nPix  = y->n;
    244         model->nDOF  = y->n - nParams;
     248        model->nDOF  = y->n - model->nPar;
    245249        model->chisqNorm = model->chisq / model->nDOF;
    246250    } else {
    247         pmSourceChisq (model, source->pixels, source->maskObj, source->variance, maskVal, options->covarFactor, nParams);
    248     }
    249     model->nIter = myMin->iter;
     251        pmSourceChisqUnsubtracted (source, model, maskVal);
     252    }
    250253
    251254    // set the model success or failure status
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceFitPCM.c

    r30763 r30784  
    8484        }
    8585    }
     86    pcm->modelConv->nIter = myMin->iter;
     87    pcm->modelConv->nPar = pcm->nPar;
    8688
    8789    // save the resulting chisq, nDOF, nIter
     
    9294        pcm->modelConv->chisqNorm = pcm->modelConv->chisq / pcm->modelConv->nDOF;
    9395    } else {
    94         pmSourceChisq (pcm->modelConv, source->pixels, source->maskObj, source->variance, maskVal, fitOptions->covarFactor, pcm->nPix - pcm->nDOF - 1);
     96        // xxx this is wrong because it does not convolve with the psf
     97        pmSourceChisqUnsubtracted (source, pcm->modelConv, maskVal);
    9598    }
    96     pcm->modelConv->nIter = myMin->iter;
    9799
    98100    // set the model success or failure status
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceFitSet.c

    r30763 r30784  
    335335        psTrace ("psModules.objects", 4, " src %d", i);
    336336
     337        model->nIter = myMin->iter;
     338        // model->nPar is set by pmSourceFitSetMasks
     339
    337340        // save the resulting chisq, nDOF, nIter
    338341        // these are not unique for any one source
     
    340343            model->chisq = myMin->value;
    341344            model->nPix  = nPix;
    342             model->nDOF  = nPix - model->params->n;
     345            model->nDOF  = nPix - model->nPar;
    343346            model->chisqNorm = model->chisq / model->nDOF;
    344347        } else {
    345             pmSourceChisq (model, source->pixels, source->maskObj, source->variance, maskVal, options->covarFactor, model->params->n);
     348            pmSourceChisqUnsubtracted (source, model, maskVal);
    346349        }
    347         model->nIter = myMin->iter;
    348350
    349351        // set the model success or failure status
     
    399401    for (int i = 0; i < set->paramSet->n; i++) {
    400402        psVector *paramOne = set->paramSet->data[i];
     403        pmModel  *modelOne = set->modelSet->data[i];
    401404
    402405        switch (mode) {
     
    406409                if (j == PM_PAR_I0) continue;
    407410                constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[n + j] = 1;
     411                modelOne->nPar = 1;
    408412            }
    409413            break;
     
    415419                if (j == PM_PAR_I0) continue;
    416420                constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[n + j] = 1;
     421                modelOne->nPar = 3;
    417422            }
    418423            break;
     
    420425            // EXT model fits all params (except sky)
    421426            constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[n + PM_PAR_SKY] = 1;
     427            modelOne->nPar = paramOne->n - 1;
    422428            break;
    423429          default:
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceOutputs.c

    r30763 r30784  
    7272    }
    7373
    74     *nImageOverlap = 1;
     74    *nImageOverlap = psMetadataLookupS32 (&status2, header, "NINPUTS");
    7575    return true;
    7676
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourcePhotometry.c

    r30772 r30784  
    741741# endif
    742742
    743 // determine chisq, etc for linear normalization-only fit
    744 bool pmSourceChisq (pmModel *model, psImage *image, psImage *mask, psImage *variance, psImageMaskType maskVal, const float covarFactor, int nParams)
     743// determine chisq, nPix, nDOF, chisqNorm : model->nPar must be set
     744bool pmSourceChisq (pmModel *model, psImage *image, psImage *mask, psImage *variance, psImageMaskType maskVal)
    745745{
    746746    PS_ASSERT_PTR_NON_NULL(model, false);
     
    757757            if (variance->data.F32[j][i] <= 0)
    758758                continue;
    759             // dC += PS_SQR (image->data.F32[j][i]) / (covarFactor * variance->data.F32[j][i]);
    760759            dC += PS_SQR (image->data.F32[j][i]) / variance->data.F32[j][i];
    761760            Npix ++;
    762761        }
    763762    }
    764 
    765763    model->nPix = Npix;
    766     model->nDOF = Npix - nParams - 1;
     764    model->nDOF = Npix - model->nPar;
    767765    model->chisq = dC;
    768766    model->chisqNorm = dC / model->nDOF;
     
    771769}
    772770
     771
     772// return source aperture magnitude
     773bool pmSourceChisqUnsubtracted (pmSource *source, pmModel *model, psImageMaskType maskVal)
     774{
     775    PS_ASSERT_PTR_NON_NULL(source, false);
     776    PS_ASSERT_PTR_NON_NULL(model, false);
     777
     778    float dC = 0.0;
     779    int Npix = 0;
     780
     781    // the model function returns the source flux at a position
     782    psVector *coord = psVectorAlloc(2, PS_TYPE_F32);
     783
     784    psVector *params = model->params;
     785    psImage  *image = source->pixels;
     786    psImage  *mask = source->maskObj;
     787    psImage  *variance = source->variance;
     788
     789    int dX = image->col0;
     790    int dY = image->row0;
     791
     792    for (int iy = 0; iy < image->numRows; iy++) {
     793        for (int ix = 0; ix < image->numCols; ix++) {
     794
     795            // skip pixels which are masked
     796            if (mask->data.PS_TYPE_IMAGE_MASK_DATA[iy][ix] & maskVal) continue;
     797
     798            if (variance->data.F32[iy][ix] <= 0) continue;
     799
     800            coord->data.F32[0] = (psF32) ix + dX + 0.5;
     801            coord->data.F32[1] = (psF32) iy + dY + 0.5;
     802
     803            // for the full model, add all points
     804            float value = model->modelFunc (NULL, params, coord);
     805
     806            // fprintf (stderr, "%d, %d : %f, %f : %f - %f : %f\n",
     807            // ix, iy, coord->data.F32[0], coord->data.F32[1], image->data.F32[iy][ix], value, dC);
     808
     809            dC += PS_SQR (image->data.F32[iy][ix] - value) / variance->data.F32[iy][ix];
     810            Npix ++;
     811        }
     812    }
     813    model->nPix = Npix;
     814    model->nDOF = Npix - model->nPar;
     815    model->chisq = dC;
     816    model->chisqNorm = dC / model->nDOF;
     817
     818    psFree (coord);
     819    return (true);
     820}
    773821
    774822double pmSourceModelWeight(const pmSource *Mi, int term, const bool unweighted_sum, const float covarFactor, psImageMaskType maskVal)
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourcePhotometry.h

    r30772 r30784  
    6969bool pmSourcePixelWeight (pmSource *source, pmModel *model, psImage *mask, psImageMaskType maskVal, float radius);
    7070
    71 bool pmSourceChisq (pmModel *model, psImage *image, psImage *mask, psImage *weight, psImageMaskType maskVal, const float covarFactor, int nParams);
     71bool pmSourceChisq (pmModel *model, psImage *image, psImage *mask, psImage *weight, psImageMaskType maskVal);
     72bool pmSourceChisqUnsubtracted (pmSource *source, pmModel *model, psImageMaskType maskVal);
    7273
    7374bool pmSourceMeasureDiffStats (pmSource *source, psImageMaskType maskVal, psImageMaskType markVal);
Note: See TracChangeset for help on using the changeset viewer.