IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 31, 2007, 4:33:59 PM (19 years ago)
Author:
magnier
Message:

fixed errors for low-quality objects

File:
1 edited

Legend:

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

    r12696 r12709  
    33 *  @author EAM, IfA
    44 *
    5  *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
    6  *  @date $Date: 2007-03-30 21:12:56 $
     5 *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
     6 *  @date $Date: 2007-04-01 02:33:59 $
    77 *
    88 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5151    psEllipseShape shape;
    5252    psEllipseAxes axes;
     53    psF32 xPos, yPos;
    5354
    5455    // find config information for output header
     
    6061        pmSource *source = (pmSource *) sources->data[i];
    6162        pmModel *model = pmSourceSelectModel (source);
    62         if (model == NULL)
    63             continue;
    64 
    65         PAR = model->params->data.F32;
    66         dPAR = model->dparams->data.F32;
    67 
    68         type = pmSourceDophotType (source);
    69         lsky = (source->sky < 1.0) ? 0.0 : log10(source->sky);
    70 
    71         shape.sx  = PAR[PM_PAR_SXX];
    72         shape.sy  = PAR[PM_PAR_SYY];
    73         shape.sxy = PAR[PM_PAR_SXY];
    74         axes = psEllipseShapeToAxes (shape, 20.0);
     63        if (model != NULL) {
     64            PAR = model->params->data.F32;
     65            dPAR = model->dparams->data.F32;
     66            xPos = PAR[PM_PAR_XPOS];
     67            yPos = PAR[PM_PAR_YPOS];
     68
     69            type = pmSourceDophotType (source);
     70            lsky = (source->sky < 1.0) ? 0.0 : log10(source->sky);
     71
     72            shape.sx  = PAR[PM_PAR_SXX];
     73            shape.sy  = PAR[PM_PAR_SYY];
     74            shape.sxy = PAR[PM_PAR_SXY];
     75            if ((shape.sx == 0) || (shape.sy == 0)) {
     76                axes.major = 0.0;
     77                axes.minor = 0.0;
     78                axes.theta = 0.0;
     79            } else {
     80                axes = psEllipseShapeToAxes (shape, 20.0);
     81            }
     82        } else {
     83            xPos = source->peak->xf;
     84            yPos = source->peak->yf;
     85            axes.major = 0.0;
     86            axes.minor = 0.0;
     87            axes.theta = 0.0;
     88        }
    7589
    7690        row = psMetadataAlloc ();
    77         psMetadataAdd (row, PS_LIST_TAIL, "X_PIX",   PS_DATA_F32, "", PAR[PM_PAR_XPOS]);
    78         psMetadataAdd (row, PS_LIST_TAIL, "Y_PIX",   PS_DATA_F32, "", PAR[PM_PAR_YPOS]);
     91        psMetadataAdd (row, PS_LIST_TAIL, "X_PIX",   PS_DATA_F32, "", xPos);
     92        psMetadataAdd (row, PS_LIST_TAIL, "Y_PIX",   PS_DATA_F32, "", yPos);
    7993        psMetadataAdd (row, PS_LIST_TAIL, "MAG_RAW", PS_DATA_F32, "", PS_MIN (99.0, source->psfMag + ZERO_POINT));
    8094        psMetadataAdd (row, PS_LIST_TAIL, "MAG_ERR", PS_DATA_F32, "", PS_MIN (999, 1000*source->errMag));
     
    159173        axes.theta       = psMetadataLookupF32 (&status, row, "THETA");
    160174
    161         shape = psEllipseAxesToShape (axes);
    162 
    163         PAR[PM_PAR_SXX] = shape.sx;
    164         PAR[PM_PAR_SYY] = shape.sy;
    165         PAR[PM_PAR_SXY] = shape.sxy;
     175        bool skip = false;
     176        skip |= (axes.major <= 0);
     177        skip |= (axes.minor <= 0);
     178        if (!skip) {
     179            shape = psEllipseAxesToShape (axes);
     180            PAR[PM_PAR_SXX] = shape.sx;
     181            PAR[PM_PAR_SYY] = shape.sy;
     182            PAR[PM_PAR_SXY] = shape.sxy;
     183        } else {
     184            PAR[PM_PAR_SXX] = 0.0;
     185            PAR[PM_PAR_SYY] = 0.0;
     186            PAR[PM_PAR_SXY] = 0.0;
     187        }
    166188
    167189        source->psfMag = psMetadataLookupF32 (&status, row, "MAG_RAW") - ZERO_POINT;
     
    170192        source->apMag  = psMetadataLookupF32 (&status, row, "MAG_AP")  - ZERO_POINT;
    171193
     194        psF64 Area = 2.0 * M_PI * axes.major * axes.minor;
     195        psF64 peakFlux = source->psfMag / Area;
     196
     197        source->peak = pmPeakAlloc(PAR[PM_PAR_XPOS], PAR[PM_PAR_YPOS], peakFlux, PM_PEAK_LONE);
    172198        sources->data[i] = source;
    173199    }
Note: See TracChangeset for help on using the changeset viewer.