IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 22, 2007, 3:47:28 AM (19 years ago)
Author:
eugene
Message:

fix compilation issues re pmTrend for psf parameters

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branch_20070921/psModules/src/objects/pmPSF_IO.c

    r14980 r14986  
    66 *  @author EAM, IfA
    77 *
    8  *  @version $Revision: 1.22.2.2 $ $Name: not supported by cvs2svn $
    9  *  @date $Date: 2007-09-22 02:20:11 $
     8 *  @version $Revision: 1.22.2.3 $ $Name: not supported by cvs2svn $
     9 *  @date $Date: 2007-09-22 13:47:28 $
    1010 *
    1111 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    246246
    247247    // write the PSF model parameters in a FITS table
    248     assert (psf->psfTrendMode != PM_TREND_NONE);
    249248    {
    250249        // we need to write a header for the table,
     
    254253        psMetadataAddStr (header, PS_LIST_TAIL, "PSF_NAME", 0, "PSF model name", modelName);
    255254
    256         psMetadataAddBool (header, PS_LIST_TAIL, "POISSON",  0, "Use Poisson errors in fits?", psf->poissonErrors);
     255        psMetadataAddBool (header, PS_LIST_TAIL, "ERR_LMM",  0, "Use Poisson errors in fits?", psf->poissonErrorsPhotLMM);
     256        psMetadataAddBool (header, PS_LIST_TAIL, "ERR_LIN",  0, "Use Poisson errors in fits?", psf->poissonErrorsPhotLin);
     257        psMetadataAddBool (header, PS_LIST_TAIL, "ERR_PAR",  0, "Use Poisson errors in fits?", psf->poissonErrorsParams);
    257258
    258259        int nPar = pmModelClassParameterCount (psf->type)    ;
    259260        psMetadataAdd (header, PS_LIST_TAIL, "PSF_NPAR", PS_DATA_S32, "PSF model parameter count", nPar);
     261
     262        psMetadataAddS32 (header, PS_LIST_TAIL, "IMAXIS1", 0, "Image X Size", psf->Nx);
     263        psMetadataAddS32 (header, PS_LIST_TAIL, "IMAXIS2", 0, "Image Y Size", psf->Ny);
    260264
    261265        // save the dimensions of each parameter
    262266        for (int i = 0; i < nPar; i++) {
    263267            char name[9];
    264             psPolynomial2D *poly = psf->params->data[i];
    265             if (poly == NULL) continue;
     268            int nX, nY;
     269
     270            pmTrend2D *trend = psf->params->data[i];
     271            if (trend == NULL) continue;
     272
     273            if (trend->mode == PM_TREND_MAP) {
     274              nX = trend->map->map->numCols;
     275              nY = trend->map->map->numRows;
     276            } else {
     277              nX = trend->poly->nX;
     278              nY = trend->poly->nY;
     279            }
    266280            snprintf (name, 9, "PAR%02d_NX", i);
    267             psMetadataAddS32 (header, PS_LIST_TAIL, name, 0, "", poly->nX);
     281            psMetadataAddS32 (header, PS_LIST_TAIL, name, 0, "", nX);
    268282            snprintf (name, 9, "PAR%02d_NY", i);
    269             psMetadataAddS32 (header, PS_LIST_TAIL, name, 0, "", poly->nY);
    270         }
    271 
    272         char *modeName = pmTrend2DModeToString(trend->mode);
     283            psMetadataAddS32 (header, PS_LIST_TAIL, name, 0, "", nY);
     284            snprintf (name, 9, "PAR%02d_MD", i);
     285            char *modeName = pmTrend2DModeToString (trend->mode);
     286            psMetadataAddStr (header, PS_LIST_TAIL, name, 0, "", modeName);
     287            psFree (modeName);
     288        }
    273289
    274290        // other required information describing the PSF
     
    277293        psMetadataAddF32 (header, PS_LIST_TAIL, "CHISQ",    0, "chi-square for fit", psf->chisq);
    278294        psMetadataAddS32 (header, PS_LIST_TAIL, "NSTARS",   0, "number of stars used to measure PSF", psf->nPSFstars);
    279         psMetadataAddStr (header, PS_LIST_TAIL, "MODE",     0, "", modeName);
    280         psFree (modeName);
    281295
    282296        // XXX can we drop this now?
     
    536550    if (!header) psAbort("cannot read table header");
    537551
     552    pmPSFOptions *options = pmPSFOptionsAlloc();
     553
    538554    // load the PSF model parameters from the FITS table
    539555    char *modelName = psMetadataLookupStr (&status, header, "PSF_NAME");
    540     pmModelType type = pmModelClassGetType (modelName);
    541     if (type == -1) {
     556    options->type = pmModelClassGetType (modelName);
     557    if (options->type == -1) {
    542558        psError(PS_ERR_UNKNOWN, true, "invalid model name %s in psf file %s", modelName, file->filename);
    543559        return false;
    544560    }
    545561
    546     bool poissonErrors = psMetadataLookupBool (&status, header, "POISSON");
     562    options->poissonErrorsPhotLMM = psMetadataLookupBool (&status, header, "ERR_LMM");
     563    options->poissonErrorsPhotLin = psMetadataLookupBool (&status, header, "ERR_LIN");
     564    options->poissonErrorsParams  = psMetadataLookupBool (&status, header, "ERR_PAR");
     565
     566    // XXX this is a bit ad-hoc: determine the PSF trend mode by looking at one of the parameters
     567    // this could allow the psf model to use different trend modes for different parameters, but we
     568    // would need to change the alloc somewhat
    547569
    548570    // we determine the PSF parameter polynomials from the MD-defined polynomials
    549     pmPSF *psf = pmPSFAlloc (type, poissonErrors, NULL);
     571    pmPSF *psf = pmPSFAlloc (options);
    550572
    551573    // check the number of expected parameters
     
    554576        psAbort("mismatch model par count");
    555577
    556     // load the dimensions of each parameter
     578    int nXimage = psMetadataLookupS32 (&status, header, "IMAXIS1");
     579    int nYimage = psMetadataLookupS32 (&status, header, "IMAXIS2");
     580    // XXX don't require this to exist?  0,0 if not defined?
     581
     582    // load the trend mode and dimensions of each parameter
    557583    for (int i = 0; i < nPar; i++) {
    558584        char name[9];
     
    572598            return false;
    573599        }
    574         // XXX allocate pmTrend2d based on the values here
    575         psf->params->data[i] = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXorder, nYorder);
     600        pmTrend2DMode psfTrendMode = pmTrend2DModeFromString (modeName);
     601        // XXX default to POLY_ORD if not defined?
     602
     603        psf->params->data[i] = pmTrend2DFieldAlloc (psfTrendMode, nXimage, nYimage, nXorder, nYorder, NULL);
    576604    }
    577605
     
    584612    // XXX can we drop this now?
    585613    psf->skyBias   = psMetadataLookupF32 (&status, header, "SKY_BIAS");
    586 
    587     char *modeName = psMetadataLookupStr (&status, header, "MODE");
    588     trend->mode = pmTrend2DModeToString(modeName);
    589614
    590615    // read the raw table data
     
    608633            psImageMap *map = trend->map;
    609634            map->map->data.F32[yPow][xPow]    = psMetadataLookupF32 (&status, row, "VALUE");
    610             map->error->data.F32[yPow][xPow]    = psMetadataLookupF32 (&status, row, "ERROR");
    611             // poly->mask[xPow][yPow]     = psMetadataLookupU8  (&status, row, "MASK");
     635            map->error->data.F32[yPow][xPow]  = psMetadataLookupF32 (&status, row, "ERROR");
    612636        } else {
    613637            psPolynomial2D *poly = trend->poly;
     
    666690
    667691// create a psMetadata representation (human-readable) of a psf model
    668 // XXX drop this function?
    669 psMetadata *pmPSFtoMetadata (psMetadata *metadata, pmPSF *psf)
    670 {
    671 
    672     if (metadata == NULL) {
    673         metadata = psMetadataAlloc ();
    674     }
    675 
    676     char *modelName = pmModelClassGetName (psf->type);
    677     psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_MODEL_NAME", PS_DATA_STRING, "PSF model name", modelName);
    678 
    679     int nPar = pmModelClassParameterCount (psf->type)    ;
    680     psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_MODEL_NPAR", PS_DATA_S32, "PSF model parameter count", nPar);
    681 
    682     for (int i = 0; i < nPar; i++) {
    683         psPolynomial2D *poly = psf->params->data[i];
    684         if (poly == NULL)
    685             continue;
    686         psPolynomial2DtoMetadata (metadata, poly, "PSF_PAR%02d", i);
    687     }
    688 
    689     // XXX fix this
    690     psWarning ("APTREND is currently missing");
    691     // psPolynomial4DtoMetadata (metadata, psf->ApTrend, "APTREND");
    692 
    693     psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_AP_RESID", PS_DATA_F32, "aperture residual", psf->ApResid);
    694     psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_dAP_RESID", PS_DATA_F32, "aperture residual scatter", psf->dApResid);
    695     psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_SKY_BIAS", PS_DATA_F32, "sky bias level", psf->skyBias);
    696 
    697     psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_CHISQ", PS_DATA_F32, "chi-square for fit", psf->chisq);
    698     psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_NSTARS", PS_DATA_S32, "number of stars used to measure PSF", psf->nPSFstars);
    699     psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_POISSON_ERRORS", PS_DATA_BOOL, "Poisson errors for fits", psf->poissonErrors);
    700 
    701     return metadata;
    702 }
    703 
    704 // parse a psMetadata representation (human-readable) of a psf model
    705 // XXX drop this function?
    706 pmPSF *pmPSFfromMetadata (psMetadata *metadata)
    707 {
    708 
    709     bool status;
    710     char keyword[80];
    711 
    712     char *modelName = psMetadataLookupPtr (&status, metadata, "PSF_MODEL_NAME");
    713     pmModelType type = pmModelClassGetType (modelName);
    714 
    715     bool poissonErrors = psMetadataLookupPtr (&status, metadata, "PSF_POISSON_ERRORS");
    716     if (!status)
    717         poissonErrors = true;
    718 
    719     // we determine the PSF parameter polynomials from the MD-defined polynomials
    720     pmPSF *psf = pmPSFAlloc (type, poissonErrors, NULL);
    721 
    722     int nPar = psMetadataLookupS32 (&status, metadata, "PSF_MODEL_NPAR");
    723     if (nPar != pmModelClassParameterCount (psf->type))
    724         psAbort("mismatch model par count");
    725 
    726     // un-fitted terms, not in the Metadata, are left NULL
    727     // XXX add a double-check of the expected number?
    728     for (int i = 0; i < nPar; i++) {
    729         sprintf (keyword, "PSF_PAR%02d", i);
    730         psMetadata *folder = psMetadataLookupPtr (&status, metadata, keyword);
    731         if (!status)
    732             continue;
    733         psPolynomial2D *poly = psPolynomial2DfromMetadata (folder);
    734         psFree (psf->params->data[i]);
    735         psf->params->data[i] = poly;
    736     }
    737 
    738     // load the APTREND data
    739     // XXX fix this to work with pmTrend2D
    740     psWarning ("APTREND is not being read");
    741     # if (0)
    742     sprintf (keyword, "APTREND");
    743     psMetadata *folder = psMetadataLookupPtr (&status, metadata, keyword);
    744     psPolynomial4D *poly = psPolynomial4DfromMetadata (folder);
    745     psFree (psf->ApTrend);
    746     psf->ApTrend = poly;
    747     # endif
    748 
    749     psf->ApResid = psMetadataLookupF32 (&status, metadata, "PSF_AP_RESID");
    750     psf->dApResid = psMetadataLookupF32 (&status, metadata, "PSF_dAP_RESID");
    751     psf->skyBias = psMetadataLookupF32 (&status, metadata, "PSF_SKY_BIAS");
    752 
    753     psf->chisq = psMetadataLookupF32 (&status, metadata, "PSF_CHISQ");
    754     psf->nPSFstars = psMetadataLookupS32 (&status, metadata, "PSF_NSTARS");
    755 
    756     psFree (metadata);
    757     return (psf);
    758 }
     692// XXX pmPSF to/from Metadata functions were defined for 1.22 and earlier, but were dropped
Note: See TracChangeset for help on using the changeset viewer.