IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 3, 2006, 12:05:22 PM (20 years ago)
Author:
gusciora
Message:

Misc code cleaning

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/math/psMinimizeLMM.c

    r6226 r6322  
    1010 *  @author EAM, IfA
    1111 *
    12  *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
    13  *  @date $Date: 2006-01-27 20:08:58 $
     12 *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
     13 *  @date $Date: 2006-02-03 22:05:22 $
    1414 *
    1515 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    4848
    4949// XXX EAM : can we use static copies of LUv, LUm, A?
    50 // XXX: Add trace messages, check return codes.
    5150psBool p_psMinLM_GuessABP(
    5251    psImage  *Alpha,
     
    7574    A = psImageCopy(NULL, alpha, PS_TYPE_F64);
    7675    for (int j = 0; j < params->n; j++) {
    77         if ((paramMask != NULL) && (paramMask->data.U8[j]))
     76        if ((paramMask != NULL) && (paramMask->data.U8[j])) {
    7877            continue;
     78        }
    7979        A->data.F64[j][j] = alpha->data.F64[j][j] * (1.0 + lambda);
    8080    }
     
    8383    // these operations do not modify the input values (creates LUm, LUv)
    8484    LUm   = psMatrixLUD(NULL, &LUv, A);
     85    if (LUm == NULL) {
     86        psError(PS_ERR_UNKNOWN, false, "psMatrixLUD() returned NULL\n");
     87    }
    8588    Beta  = psMatrixLUSolve(Beta, LUm, beta, LUv);
     89    if (Beta == NULL) {
     90        psError(PS_ERR_UNKNOWN, false, "psMatrixLUSolve() returned NULL\n");
     91    }
    8692    Alpha = psMatrixInvert(Alpha, A, &det);
    87 
     93    psFree(LUm);
     94    psFree(LUv);
     95    psFree(A);
     96
     97    if (Alpha == NULL) {
     98        psError(PS_ERR_UNKNOWN, false, "psMatrixInvert() returned NULL\n");
     99        return(false);
     100    }
    88101    # else
    89102        // gauss-jordan version
     
    94107    Alpha = psImageCopy(Alpha, alpha, PS_TYPE_F64);
    95108    for (int j = 0; j < params->n; j++) {
    96         if ((paramMask != NULL) && (paramMask->data.U8[j]))
     109        if ((paramMask != NULL) && (paramMask->data.U8[j])) {
    97110            continue;
     111        }
    98112        Alpha->data.F64[j][j] = alpha->data.F64[j][j] * (1.0 + lambda);
    99113    }
    100114
    101     // XXX: Check error codes!
    102     psGaussJordan(Alpha, Beta);
    103     psFree(A);
    104     psFree(LUm);
    105     psFree(LUv);
     115    if (false == psGaussJordan(Alpha, Beta)) {
     116        psError(PS_ERR_UNKNOWN, false, "psMatrixInvert() returned NULL\n");
     117        return(false);
     118    }
    106119    # endif
    107120
    108121    // apply Beta to get new Params values
    109122    for (int j = 0; j < params->n; j++) {
    110         if ((paramMask != NULL) && (paramMask->data.U8[j]))
     123        if ((paramMask != NULL) && (paramMask->data.U8[j])) {
    111124            continue;
     125        }
    112126        // Params->data.F32[j] = params->data.F32[j] - Beta->data.F64[j];
    113127        // compare Beta to beta limits
     
    126140        }
    127141    }
    128     # if (USE_LU_DECOMP)
    129         psFree(A);
    130     psFree(LUm);
    131     psFree(LUv);
    132     # endif
    133142
    134143    return(true);
     
    136145
    137146
    138 // XXX: Add trace messages, check return codes.
    139147bool psMinimizeGaussNewtonDelta(
    140148    psVector *delta,
     
    146154    psMinimizeLMChi2Func func)
    147155{
     156    psTrace(__func__, 3, "---- %s() begin ----\n", __func__);
    148157    // allocate internal arrays (current vs Guess)
    149158    psImage  *alpha  = psImageAlloc (params->n, params->n, PS_TYPE_F64);
     
    152161    psVector *Params = psVectorAlloc(params->n, PS_TYPE_F64);
    153162    psVector *dy     = NULL;
     163    psBool rc = true;
    154164
    155165    // the user provides the error or NULL.  we need to convert
     
    162172    }
    163173
    164     p_psMinLM_SetABX(alpha, beta, params, paramMask, x, y, dy, func);
    165     p_psMinLM_GuessABP(Alpha, delta, Params, alpha, beta, params, paramMask, NULL, NULL, NULL, 0.0);
     174    psF64 rcF64 = p_psMinLM_SetABX(alpha, beta, params, paramMask, x, y, dy, func);
     175    if (isnan(rcF64)) {
     176        psError(PS_ERR_UNKNOWN, false, "p_psMinLM_SetABX() retruned a NAN.\n");
     177        rc = false;
     178    }
     179    psTrace(__func__, 5, "p_psMinLM_SetABX() was succesful\n", __func__);
     180
     181    psBool rcBool = p_psMinLM_GuessABP(Alpha, delta, Params, alpha, beta, params, paramMask, NULL, NULL, NULL, 0.0);
     182    if (rcBool == false) {
     183        psError(PS_ERR_UNKNOWN, false, "p_psMinLM_GuessABP() retruned FALSE.\n");
     184        rc = false;
     185    }
     186    psTrace(__func__, 5, "p_psMinLM_GuessABP() was succesful\n", __func__);
    166187
    167188    psFree(alpha);
     
    172193        psFree(dy);
    173194    }
    174     return (true);
     195    psTrace(__func__, 3, "---- %s() end ----\n", __func__);
     196    return(rc);
    175197}
    176198
     
    235257
    236258        for (psS32 j = 0; j < params->n; j++) {
    237             if ((paramMask != NULL) && (paramMask->data.U8[j]))
     259            if ((paramMask != NULL) && (paramMask->data.U8[j])) {
    238260                continue;
     261            }
    239262            weight = deriv->data.F32[j] * dy->data.F32[i];
    240263            for (psS32 k = 0; k <= j; k++) {
    241                 if ((paramMask != NULL) && (paramMask->data.U8[k]))
     264                if ((paramMask != NULL) && (paramMask->data.U8[k])) {
    242265                    continue;
     266                }
    243267                alpha->data.F64[j][k] += weight * deriv->data.F32[k];
    244268            }
     
    394418    }
    395419    if (psTraceGetLevel (__func__) >= 6) {
    396         //XXX:  p_psVectorPrintRow(psTraceGetDestination(), Params, "params guess");
     420        psTrace(__func__, 6, "The current Param vector: \n");
     421        for (psS32 i = 0 ; i < Params->n ; i++) {
     422            psTrace(__func__, 6, "Params[%d] is %f\n", Params->data.F32[i]);
     423        }
    397424    }
    398425
     
    416443        }
    417444        if (psTraceGetLevel(__func__) >= 6) {
    418             //XXX: p_psVectorPrintRow(psTraceGetDestination(), Params, "params guess");
     445            if (psTraceGetLevel (__func__) >= 6) {
     446                psTrace(__func__, 6, "The current Param vector: \n");
     447                for (psS32 i = 0 ; i < Params->n ; i++) {
     448                    psTrace(__func__, 6, "Params[%d] is %f\n", Params->data.F32[i]);
     449                }
     450            }
    419451        }
    420452
     
    628660bool psMemCheckConstrain(psPtr tmp)
    629661{
    630     return( psMemGetDeallocator(tmp) == (psFreeFunc)constrainFree );
    631 }
     662    return(psMemGetDeallocator(tmp) == (psFreeFunc) constrainFree);
     663}
Note: See TracChangeset for help on using the changeset viewer.