IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 14846


Ignore:
Timestamp:
Sep 14, 2007, 3:52:12 PM (19 years ago)
Author:
Paul Price
Message:

Clear errors in psMinimizeGaussNewtonDelta --- can't do anything about
them, but they ruin a psphot run.

File:
1 edited

Legend:

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

    r14652 r14846  
    66 *  @author GLG, MHPCC
    77 *
    8  *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
    9  *  @date $Date: 2007-08-24 00:11:02 $
     8 *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
     9 *  @date $Date: 2007-09-15 01:52:12 $
    1010 *
    1111 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    6464
    6565    for (int i = 0; i < modelSet->n; i++) {
    66         pmModel *model = modelSet->data[i];
    67        
    68         int nParams = pmModelClassParameterCount (model->type);
    69 
    70         set->paramSet->data[i] = psVectorAlloc (nParams, PS_DATA_F32);
    71         set->derivSet->data[i] = psVectorAlloc (nParams, PS_DATA_F32);
    72 
    73         set->nParamSet += nParams;
     66        pmModel *model = modelSet->data[i];
     67
     68        int nParams = pmModelClassParameterCount (model->type);
     69
     70        set->paramSet->data[i] = psVectorAlloc (nParams, PS_DATA_F32);
     71        set->derivSet->data[i] = psVectorAlloc (nParams, PS_DATA_F32);
     72
     73        set->nParamSet += nParams;
    7474    }
    7575
     
    8787    int nParamBase = 0;
    8888    for (int i = 0; i < thisSet->modelSet->n; i++) {
    89         psVector *param = thisSet->paramSet->data[i];
    90         if ((nParamBase <= nParam) && (nParam < nParamBase + param->n)) {
    91             nModel = i;
    92             nParamOne = nParam - nParamBase;
    93             break;
    94         }
    95         nParamBase += param->n;
     89        psVector *param = thisSet->paramSet->data[i];
     90        if ((nParamBase <= nParam) && (nParam < nParamBase + param->n)) {
     91            nModel = i;
     92            nParamOne = nParam - nParamBase;
     93            break;
     94        }
     95        nParamBase += param->n;
    9696    }
    9797    assert (nModel > -1);
     
    113113    int n = 0;
    114114    for (int i = 0; i < set->paramSet->n; i++) {
    115        
    116         psVector *paramOne = set->paramSet->data[i];
    117         psVector *derivOne = set->derivSet->data[i];
    118         assert ((deriv == NULL) || (paramOne->n == derivOne->n));
    119 
    120         for (int j = 0; j < paramOne->n; j++, n++) {
    121             param->data.F32[n] = paramOne->data.F32[j];
    122             if (deriv) {
    123                 deriv->data.F32[n] = derivOne->data.F32[j];
    124             }
    125         }
     115
     116        psVector *paramOne = set->paramSet->data[i];
     117        psVector *derivOne = set->derivSet->data[i];
     118        assert ((deriv == NULL) || (paramOne->n == derivOne->n));
     119
     120        for (int j = 0; j < paramOne->n; j++, n++) {
     121            param->data.F32[n] = paramOne->data.F32[j];
     122            if (deriv) {
     123                deriv->data.F32[n] = derivOne->data.F32[j];
     124            }
     125        }
    126126    }
    127127    return true;
     
    135135    int n = 0;
    136136    for (int i = 0; i < set->paramSet->n; i++) {
    137        
    138         psVector *paramOne = set->paramSet->data[i];
    139         psVector *derivOne = set->derivSet->data[i];
    140         assert ((deriv == NULL) || (paramOne->n == derivOne->n));
    141 
    142         for (int j = 0; j < paramOne->n; j++, n++) {
    143             paramOne->data.F32[j] = param->data.F32[n];
    144             if (deriv) {
    145                 derivOne->data.F32[j] = deriv->data.F32[n];
    146             }
    147         }
     137
     138        psVector *paramOne = set->paramSet->data[i];
     139        psVector *derivOne = set->derivSet->data[i];
     140        assert ((deriv == NULL) || (paramOne->n == derivOne->n));
     141
     142        for (int j = 0; j < paramOne->n; j++, n++) {
     143            paramOne->data.F32[j] = param->data.F32[n];
     144            if (deriv) {
     145                derivOne->data.F32[j] = deriv->data.F32[n];
     146            }
     147        }
    148148    }
    149149    return true;
     
    158158    int n = 0;
    159159    for (int i = 0; i < set->paramSet->n; i++) {
    160        
    161         pmModel *model = set->modelSet->data[i];
    162 
    163         for (int j = 0; j < model->params->n; j++, n++) {
     160
     161        pmModel *model = set->modelSet->data[i];
     162
     163        for (int j = 0; j < model->params->n; j++, n++) {
    164164            if (psTraceGetLevel("psModules.objects") >= 4) {
    165165                fprintf (stderr, "%f ", param->data.F32[n]);
    166166            }
    167             model->params->data.F32[j] = param->data.F32[n];
    168             model->dparams->data.F32[j] = dparam->data.F32[n];
    169         }
     167            model->params->data.F32[j] = param->data.F32[n];
     168            model->dparams->data.F32[j] = dparam->data.F32[n];
     169        }
    170170        psTrace ("psModules.objects", 4, " src %d", i);
    171171
     
    199199
    200200    for (int i = 0; i < thisSet->modelSet->n; i++) {
    201        
    202         pmModel *model = thisSet->modelSet->data[i];
    203 
    204         psVector *paramOne = thisSet->paramSet->data[i];
    205         psVector *derivOne = thisSet->derivSet->data[i];
    206 
    207         chisqOne = model->modelFunc (derivOne, paramOne, x);
    208         chisqSum += chisqOne;
     201
     202        pmModel *model = thisSet->modelSet->data[i];
     203
     204        psVector *paramOne = thisSet->paramSet->data[i];
     205        psVector *derivOne = thisSet->derivSet->data[i];
     206
     207        chisqOne = model->modelFunc (derivOne, paramOne, x);
     208        chisqSum += chisqOne;
    209209    }
    210210
     
    220220    int n = 0;
    221221    for (int i = 0; i < set->paramSet->n; i++) {
    222         psVector *paramOne = set->paramSet->data[i];
    223 
    224         switch (mode) {
    225           case PM_SOURCE_FIT_NORM:
    226             // mask all but Xo,Yo,Io
    227             for (int j = 0; j < paramOne->n; j++) {
    228                 if (j == PM_PAR_I0) continue;
    229                 constraint->paramMask->data.U8[n + j] = 1;
    230             }
    231             break;
    232           case PM_SOURCE_FIT_PSF:
    233             // mask all but Xo,Yo,Io
    234             for (int j = 0; j < paramOne->n; j++) {
    235                 if (j == PM_PAR_XPOS) continue;
    236                 if (j == PM_PAR_YPOS) continue;
    237                 if (j == PM_PAR_I0) continue;
    238                 constraint->paramMask->data.U8[n + j] = 1;
    239             }
    240             break;
    241           case PM_SOURCE_FIT_EXT:
    242             // EXT model fits all params (except sky)
    243             constraint->paramMask->data.U8[n + PM_PAR_SKY] = 1;
    244             break;
    245           default:
    246             psAbort("invalid fitting mode");
    247         }
    248         n += paramOne->n;
     222        psVector *paramOne = set->paramSet->data[i];
     223
     224        switch (mode) {
     225          case PM_SOURCE_FIT_NORM:
     226            // mask all but Xo,Yo,Io
     227            for (int j = 0; j < paramOne->n; j++) {
     228                if (j == PM_PAR_I0) continue;
     229                constraint->paramMask->data.U8[n + j] = 1;
     230            }
     231            break;
     232          case PM_SOURCE_FIT_PSF:
     233            // mask all but Xo,Yo,Io
     234            for (int j = 0; j < paramOne->n; j++) {
     235                if (j == PM_PAR_XPOS) continue;
     236                if (j == PM_PAR_YPOS) continue;
     237                if (j == PM_PAR_I0) continue;
     238                constraint->paramMask->data.U8[n + j] = 1;
     239            }
     240            break;
     241          case PM_SOURCE_FIT_EXT:
     242            // EXT model fits all params (except sky)
     243            constraint->paramMask->data.U8[n + PM_PAR_SKY] = 1;
     244            break;
     245          default:
     246            psAbort("invalid fitting mode");
     247        }
     248        n += paramOne->n;
    249249    }
    250250    return true;
     
    343343        psTrace (__func__, 4, "insufficient valid pixels\n");
    344344        psTrace("psModules.objects", 3, "---- %s() end : fail pixels ----\n", __func__);
    345         for (int i = 0; i < modelSet->n; i++) {
    346             pmModel *model = modelSet->data[i];
    347             model->flags |= PM_MODEL_STATUS_BADARGS;
    348         }
     345        for (int i = 0; i < modelSet->n; i++) {
     346            pmModel *model = modelSet->data[i];
     347            model->flags |= PM_MODEL_STATUS_BADARGS;
     348        }
    349349        psFree (x);
    350350        psFree (y);
     
    353353        psFree(constraint);
    354354        psFree (thisSet);
    355         thisSet = NULL;
     355        thisSet = NULL;
    356356        return(false);
    357357    }
     
    382382            altmask->data.U8[i] = (constraint->paramMask->data.U8[i]) ? 0 : 1;
    383383        }
    384         psMinimizeGaussNewtonDelta(delta, params, altmask, x, y, yErr, pmSourceFitSetFunction);
     384        if (!psMinimizeGaussNewtonDelta(delta, params, altmask, x, y, yErr, pmSourceFitSetFunction)) {
     385            // Can we really do anything about it?
     386            // It will happily continue on, but the presence of an error upsets the psphot cleanup
     387            psErrorClear();
     388        }
    385389        for (int i = 0; i < dparams->n; i++) {
    386390            if (!constraint->paramMask->data.U8[i])
Note: See TracChangeset for help on using the changeset viewer.