IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 34141


Ignore:
Timestamp:
Jul 12, 2012, 6:44:32 AM (14 years ago)
Author:
eugene
Message:

fix up guess code for TRAIL

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20120627/psModules/src/objects/models/pmModel_TRAIL.c

    r34133 r34141  
    5959
    6060// Lax parameter limits
    61 static float paramsMinLax[] = { -1.0e3, 1.0e-2, -100, -100, 0.5, 0.5, -1.0 };
    62 static float paramsMaxLax[] = { 1.0e5, 1.0e8, 1.0e4, 1.0e4, 100, 100, 1.0 };
     61static float paramsMinLax[] = { -1.0e3, 1.0e-2, -1.0e2, -1.0e2,  0.5, -0.1, -1.0 };
     62static float paramsMaxLax[] = {  1.0e5, 1.0e+8, +1.0e4, +1.0e4, 50.0, +3.3 , 1.0 };
    6363
    6464// Moderate parameter limits
     
    7373static float *paramsMinUse = paramsMinLax;
    7474static float *paramsMaxUse = paramsMaxLax;
    75 static float betaUse[] = { 1000, 3e6, 5, 5, 2.0, 2.0, 0.5 };
     75static float betaUse[] = { 1000, 3e6, 5, 5, 2.0, 0.1, 0.1 };
    7676
    7777static bool limitsApply = true;         // Apply limits?
     
    166166        dPAR[PM_PAR_LENGTH] = PAR[PM_PAR_I0] * dPdL;
    167167        dPAR[PM_PAR_THETA]  = PAR[PM_PAR_I0] * dPdT;
    168         dPAR[PM_PAR_SIGMA]  = NAN;      // we don't actually allow this to vary, so we do not need to calculate it
     168        dPAR[PM_PAR_SIGMA]  = 0;        // we don't actually allow this to vary, so we do not need to calculate it
    169169    }
    170170    return(f);
     
    184184    psAssert(nParam >= 0 && nParam < PM_MODEL_NPARAM, "Parameter index is out of bounds");
    185185
    186     // we need to calculate the limits for SXY specially
    187     float q2 = NAN;
    188     if (nParam == PM_PAR_SXY) {
    189         float f1 = 1.0 / PS_SQR(params[PM_PAR_SYY]) + 1.0 / PS_SQR(params[PM_PAR_SXX]);
    190         float f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]);
    191         float q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2);
    192         q1 = (q1 < 0.0) ? 0.0 : q1;
    193         // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
    194         // angle and let f2,f1 fight it out
    195         q2 = 0.5*sqrtf(q1);
    196     }
    197 
    198186    switch (mode) {
    199187      case PS_MINIMIZE_BETA_LIMIT: {
    200188          psAssert(beta, "Require beta to limit beta");
    201189          float limit = betaUse[nParam];
    202           if (nParam == PM_PAR_SXY) {
    203               limit *= q2;
    204           }
    205190          if (fabs(beta[nParam]) > fabs(limit)) {
    206191              beta[nParam] = (beta[nParam] > 0) ? fabs(limit) : -fabs(limit);
     
    215200          psAssert(paramsMinUse, "Require parameter limits to limit parameters");
    216201          float limit = paramsMinUse[nParam];
    217           if (nParam == PM_PAR_SXY) {
    218               limit *= q2;
    219           }
    220202          if (params[nParam] < limit) {
    221203              params[nParam] = limit;
     
    230212          psAssert(paramsMaxUse, "Require parameter limits to limit parameters");
    231213          float limit = paramsMaxUse[nParam];
    232           if (nParam == PM_PAR_SXY) {
    233               limit *= q2;
    234           }
    235214          if (params[nParam] > limit) {
    236215              params[nParam] = limit;
     
    257236    PAR[PM_PAR_SKY]  = 0.0;
    258237
    259     // set the shape parameters
    260     if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments)) {
    261       return false;
    262     }
     238    // XXX test : modify the Io, SXX, SYY terms based on the psf SXX, SYY terms:
     239    psEllipseShape psfShape;
     240    psfShape.sx  = source->modelPSF->params->data.F32[PM_PAR_SXX] / M_SQRT2;
     241    psfShape.sxy = source->modelPSF->params->data.F32[PM_PAR_SXY];
     242    psfShape.sy  = source->modelPSF->params->data.F32[PM_PAR_SYY] / M_SQRT2;
     243    psEllipseAxes psfAxes = psEllipseShapeToAxes (psfShape, 20.0);
     244
     245    psEllipseMoments emoments;
     246    emoments.x2 = source->moments->Mxx;
     247    emoments.xy = source->moments->Mxy;
     248    emoments.y2 = source->moments->Myy;
     249
     250    // force the axis ratio to be < 20.0
     251    psEllipseAxes axes = psEllipseMomentsToAxes (emoments, 20.0);
     252
     253    if (!isfinite(axes.major)) return false;
     254    if (!isfinite(axes.minor)) return false;
     255    if (!isfinite(axes.theta)) return false;
     256
     257    PAR[PM_PAR_LENGTH] = axes.major; // XXX major or 2*major?
     258    PAR[PM_PAR_THETA] = axes.theta; // XXX theta or theta * RAD_DEG?
     259    PAR[PM_PAR_SIGMA] = psfAxes.major; // XXX major or 0.5*major?
    263260
    264261    // set the model normalization
Note: See TracChangeset for help on using the changeset viewer.