IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 13, 2006, 2:55:43 PM (20 years ago)
Author:
magnier
Message:

cleanups of APTREND stuff, added psfTrendMask to pmPSFAlloc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/objects/pmPSF.c

    r8815 r9562  
    66 *  @author EAM, IfA
    77 *
    8  *  @version $Revision: 1.9 $ $Name: not supported by cvs2svn $
    9  *  @date $Date: 2006-09-15 09:49:01 $
     8 *  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
     9 *  @date $Date: 2006-10-14 00:55:43 $
    1010 *
    1111 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2121/*****************************************************************************/
    2222
     23#include <strings.h>  // for strcasecmp
    2324#include <pslib.h>
    2425#include "pmHDU.h"
     
    5657/*****************************************************************************/
    5758
    58 
    59 
    6059/*****************************************************************************
    6160pmPSFFree(psf): function to free a pmPSF structure
     
    8584 Object Normalization
    8685 *****************************************************************************/
    87 pmPSF *pmPSFAlloc (pmModelType type, bool poissonErrors)
     86pmPSF *pmPSFAlloc (pmModelType type, bool poissonErrors, psPolynomial2D *psfTrendMask)
    8887{
    8988    int Nparams;
     
    10099
    101100    // the ApTrend components are (x, y, r2rflux, flux)
     101    // the ApTrend order is defined by the masking
     102    // initially we set it to SKYBIAS (no X,Y variation)
     103    // this is adjusted in psphotApResid based on the user's choices
    102104    psf->ApTrend = psPolynomial4DAlloc (PS_POLYNOMIAL_ORD, 2, 2, 1, 1);
    103     pmPSF_MaskApTrend (psf->ApTrend, PM_PSF_SKYBIAS);
     105    pmPSFMaskApTrend (psf->ApTrend, PM_PSF_APTREND_SKYBIAS);
    104106
    105107    if (psf->poissonErrors) {
     
    120122    psf->params = psArrayAlloc(Nparams - 4);
    121123    psf->params->n = psf->params->nalloc;
    122     for (int i = 0; i < psf->params->n; i++) {
    123         // XXX EAM : make this a user-defined value?
    124         psf->params->data[i] = psPolynomial2DAlloc(PS_POLYNOMIAL_ORD, 1, 1);
     124
     125    // the order of the PSF parameter (X,Y) fits is determined by the
     126    // psfTrendMask polynomial (user-specified as in the recipe). the
     127    // masks of psfTrendMask are applied to each parameter.
     128    // if psfTrendMask is NULL, these polynomials are not allocated.
     129    // in this case, the user must set them by hand (as in pmPSFfromMD)
     130    // XXX should we drop the hard-wired '4' above and use NULL to identify
     131    // the parameters which are not fitted.  these could be selected by
     132    // testing for the value of PM_PAR_XPOS, etc.
     133    if (psfTrendMask) {
     134        for (int i = 0; i < psf->params->n; i++) {
     135            psPolynomial2D *param = psPolynomial2DAlloc(PS_POLYNOMIAL_ORD, psfTrendMask->nX, psfTrendMask->nY);
     136            for (int nx = 0; nx < param->nX + 1; nx++) {
     137                for (int ny = 0; ny < param->nY + 1; ny++) {
     138                    param->mask[nx][ny] = psfTrendMask->mask[nx][ny];
     139                }
     140            }
     141            psf->params->data[i] = param;
     142        }
    125143    }
    126144
     
    223241
    224242// zero and mask out all terms:
    225 static bool maskAllTerms (psPolynomial4D *trend)
     243static bool maskAllApTerms (psPolynomial4D *trend)
    226244{
    227245
     
    243261 * to enable the specific subset of the coefficients
    244262 **********************************************/
    245 bool pmPSF_MaskApTrend (psPolynomial4D *trend,
    246                         pmPSF_ApTrendOptions option)
     263bool pmPSFMaskApTrend (psPolynomial4D *trend,
     264                       pmPSFApTrendOptions option)
    247265{
    248266
    249267    switch (option) {
    250     case PM_PSF_NONE:
    251         maskAllTerms (trend);
    252         return true;
    253 
    254     case PM_PSF_CONSTANT:
    255         maskAllTerms (trend);
    256         trend->mask[0][0][0][0] = 0;  // unmask constant
    257         return true;
    258 
    259     case PM_PSF_SKYBIAS:
    260         maskAllTerms (trend);
    261         trend->mask[0][0][0][0] = 0;  // unmask constant
    262         trend->mask[0][0][1][0] = 0;  // unmask skybias
    263         return true;
    264 
    265     case PM_PSF_SKYSAT:
    266         maskAllTerms (trend);
     268    case PM_PSF_APTREND_NONE:
     269        maskAllApTerms (trend);
     270        return true;
     271
     272    case PM_PSF_APTREND_CONSTANT:
     273        maskAllApTerms (trend);
     274        trend->mask[0][0][0][0] = 0;  // unmask constant
     275        return true;
     276
     277    case PM_PSF_APTREND_SKYBIAS:
     278        maskAllApTerms (trend);
     279        trend->mask[0][0][0][0] = 0;  // unmask constant
     280        trend->mask[0][0][1][0] = 0;  // unmask skybias
     281        return true;
     282
     283    case PM_PSF_APTREND_SKYSAT:
     284        maskAllApTerms (trend);
    267285        trend->mask[0][0][0][0] = 0;  // unmask constant
    268286        trend->mask[0][0][1][0] = 0;  // unmask skybias
     
    270288        return true;
    271289
    272     case PM_PSF_XY_LIN:
    273         maskAllTerms (trend);
    274         trend->mask[0][0][0][0] = 0;  // unmask constant
    275         trend->mask[1][0][0][0] = 0;  // unmask x
    276         trend->mask[0][1][0][0] = 0;  // unmask y
    277         return true;
    278 
    279     case PM_PSF_XY_QUAD:
    280         maskAllTerms (trend);
     290    case PM_PSF_APTREND_XY_LIN:
     291        maskAllApTerms (trend);
     292        trend->mask[0][0][0][0] = 0;  // unmask constant
     293        trend->mask[1][0][0][0] = 0;  // unmask x
     294        trend->mask[0][1][0][0] = 0;  // unmask y
     295        return true;
     296
     297    case PM_PSF_APTREND_XY_QUAD:
     298        maskAllApTerms (trend);
    281299        trend->mask[0][0][0][0] = 0;  // unmask constant
    282300        trend->mask[1][0][0][0] = 0;  // unmask x
     
    287305        return true;
    288306
    289     case PM_PSF_SKY_XY_LIN:
    290         maskAllTerms (trend);
    291         trend->mask[0][0][0][0] = 0;  // unmask constant
    292         trend->mask[1][0][0][0] = 0;  // unmask x
    293         trend->mask[0][1][0][0] = 0;  // unmask y
    294         trend->mask[0][0][1][0] = 0;  // unmask skybias
    295         return true;
    296 
    297     case PM_PSF_SKYSAT_XY_LIN:
    298         maskAllTerms (trend);
     307    case PM_PSF_APTREND_SKY_XY_LIN:
     308        maskAllApTerms (trend);
     309        trend->mask[0][0][0][0] = 0;  // unmask constant
     310        trend->mask[1][0][0][0] = 0;  // unmask x
     311        trend->mask[0][1][0][0] = 0;  // unmask y
     312        trend->mask[0][0][1][0] = 0;  // unmask skybias
     313        return true;
     314
     315    case PM_PSF_APTREND_SKYSAT_XY_LIN:
     316        maskAllApTerms (trend);
    299317        trend->mask[0][0][0][0] = 0;  // unmask constant
    300318        trend->mask[1][0][0][0] = 0;  // unmask x
     
    304322        return true;
    305323
    306     case PM_PSF_ALL:
     324    case PM_PSF_APTREND_ALL:
    307325    default:
    308         maskAllTerms (trend);
     326        maskAllApTerms (trend);
    309327        trend->mask[0][0][0][0] = 0;  // unmask constant
    310328        trend->mask[0][0][1][0] = 0;  // unmask skybias
     
    320338    return false;
    321339}
     340
     341pmPSFApTrendOptions pmPSFApTrendOptionFromName (char *name)
     342{
     343
     344    // no correction
     345    if (!strcasecmp (name, "NONE"))
     346        return PM_PSF_APTREND_NONE;
     347    if (!strcasecmp (name, "CONSTANT"))
     348        return PM_PSF_APTREND_CONSTANT;
     349    if (!strcasecmp (name, "SKYBIAS"))
     350        return PM_PSF_APTREND_SKYBIAS;
     351    if (!strcasecmp (name, "SKYSAT"))
     352        return PM_PSF_APTREND_SKYSAT;
     353    if (!strcasecmp (name, "XY_LIN"))
     354        return PM_PSF_APTREND_XY_LIN;
     355    if (!strcasecmp (name, "XY_QUAD"))
     356        return PM_PSF_APTREND_XY_QUAD;
     357    if (!strcasecmp (name, "SKY_XY_LIN"))
     358        return PM_PSF_APTREND_SKY_XY_LIN;
     359    if (!strcasecmp (name, "SKYSAT_XY_LIN"))
     360        return PM_PSF_APTREND_SKYSAT_XY_LIN;
     361    if (!strcasecmp (name, "ALL"))
     362        return PM_PSF_APTREND_ALL;
     363
     364    psError(PS_ERR_UNKNOWN, true, "Unknown APTREND value: %s", name);
     365    return PM_PSF_APTREND_ERROR;
     366}
     367
Note: See TracChangeset for help on using the changeset viewer.