IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 6526


Ignore:
Timestamp:
Mar 6, 2006, 10:40:50 AM (20 years ago)
Author:
gusciora
Message:

From rel10_ifa.

File:
1 edited

Legend:

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

    r6525 r6526  
    1010 *  @author EAM, IfA
    1111 *
    12  *  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
    13  *  @date $Date: 2006-03-06 20:32:36 $
     12 *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
     13 *  @date $Date: 2006-03-06 20:40:50 $
    1414 *
    1515 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    159159    psImage  *Alpha  = psImageAlloc (params->n, params->n, PS_TYPE_F64);
    160160    psVector *beta   = psVectorAlloc(params->n, PS_TYPE_F64);
     161    beta->n = beta->nalloc;
    161162    psVector *Params = psVectorAlloc(params->n, PS_TYPE_F64);
     163    Params->n = Params->nalloc;
    162164    psVector *dy     = NULL;
    163165    psBool rc = true;
     
    169171    } else {
    170172        dy = psVectorAlloc(y->n, PS_TYPE_F32);
     173        dy->n = dy->nalloc;
    171174        psVectorInit(dy, 1.0);
    172175    }
     
    302305NOTES: EAM: this is my re-implementation of MinLM
    303306 
    304 XXX: Must implement code to handle the constrain->min, ->max, ->delta members.
     307XXX: EAM : constraints added 2006.02.15
    305308 
    306309XXX: Put the ASSERTS in.
     
    329332    PS_ASSERT_VECTOR_TYPE(params, PS_TYPE_F32, false);
    330333    psVector *paramMask = NULL;
     334    psVector *paramDelta = NULL;
     335    psVector *paramMin = NULL;
     336    psVector *paramMax = NULL;
    331337    if (constrain != NULL) {
     338        // XXX EAM : fill out the asserts
     339        paramDelta = constrain->paramDelta;
     340        paramMin = constrain->paramMin;
     341        paramMax = constrain->paramMax;
    332342        paramMask = constrain->paramMask;
    333343        if (paramMask != NULL) {
    334344            PS_ASSERT_VECTOR_TYPE(paramMask, PS_TYPE_U8, false);
    335345            PS_ASSERT_VECTORS_SIZE_EQUAL(params, paramMask, false);
    336         }
    337         if (constrain->paramMin != NULL) {
    338             psLogMsg(__func__, PS_LOG_WARN, "WARNING: the constrain->paramMin vector is currently ignored.\n");
    339         }
    340         if (constrain->paramMax != NULL) {
    341             psLogMsg(__func__, PS_LOG_WARN, "WARNING: the constrain->paramMax vector is currently ignored.\n");
    342         }
    343         if (constrain->paramDelta != NULL) {
    344             psLogMsg(__func__, PS_LOG_WARN, "WARNING: the constrain->paramDelta vector is currently ignored.\n");
    345346        }
    346347    }
     
    369370    psImage *Alpha   = psImageAlloc(params->n, params->n, PS_TYPE_F64);
    370371    psVector *beta   = psVectorAlloc(params->n, PS_TYPE_F64);
     372    beta->n = beta->nalloc;
    371373    psVector *Beta   = psVectorAlloc(params->n, PS_TYPE_F64);
     374    beta->n = beta->nalloc;
    372375    psVector *Params = psVectorAlloc(params->n, PS_TYPE_F32);
    373     beta->n = beta->nalloc;
    374     Beta->n = Beta->nalloc;
    375376    Params->n = Params->nalloc;
    376377    psVector *dy     = NULL;
    377378    psF64 Chisq = 0.0;
    378379    psF64 lambda = 0.001;
    379     // XXX: Code this properly.  Don't use mustFree00.
    380     psBool mustFree00 = false;
    381     psVector *beta_lim = NULL;
    382     psVector *param_min = NULL;
    383     psVector *param_max = NULL;
    384 
    385     // if we are provided a covar image, we expect to find these three vectors in first three rows
    386     if (covar != NULL) {
    387         mustFree00 = true;
    388         beta_lim  = psVectorAlloc(params->n, PS_TYPE_F32);
    389         param_min = psVectorAlloc(params->n, PS_TYPE_F32);
    390         param_max = psVectorAlloc(params->n, PS_TYPE_F32);
    391         beta_lim->n = beta_lim->nalloc;
    392         param_min->n = param_min->nalloc;
    393         param_max->n = param_max->nalloc;
    394         for (int i = 0; i < params->n; i++) {
    395             beta_lim->data.F32[i] = covar->data.F64[0][i];
    396             param_min->data.F32[i] = covar->data.F64[1][i];
    397             param_max->data.F32[i] = covar->data.F64[2][i];
    398         }
    399         psImageRecycle(covar, params->n, params->n, PS_TYPE_F64);
    400     }
    401380
    402381    // why is this needed here??? the initial guess on params is provided by the user
     
    439418        // set a new guess for Alpha, Beta, Params
    440419        p_psMinLM_GuessABP(Alpha, Beta, Params, alpha, beta, params, paramMask,
    441                            beta_lim, param_min, param_max, lambda);
     420                           paramDelta, paramMin, paramMax, lambda);
    442421
    443422        // measure linear model prediction
     
    496475    if (covar != NULL) {
    497476        p_psMinLM_GuessABP(covar, Beta, Params, alpha, beta, params, paramMask,
    498                            beta_lim, param_min, param_max, 0.0);
     477                           paramDelta, paramMin, paramMax, 0.0);
    499478    }
    500479
     
    507486    if (yWt == NULL) {
    508487        psFree(dy);
    509     }
    510     if (mustFree00 == true) {
    511         psFree(beta_lim);
    512         psFree(param_min);
    513         psFree(param_max);
    514488    }
    515489    if (min->iter == min->maxIter) {
Note: See TracChangeset for help on using the changeset viewer.