IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 14220


Ignore:
Timestamp:
Jul 15, 2007, 1:30:42 PM (19 years ago)
Author:
magnier
Message:

further attempt to set valid limits for sigma_xy

Location:
trunk/psModules/src/objects/models
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/objects/models/pmModel_GAUSS.c

    r13803 r14220  
    7171        f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]);
    7272        q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2);
    73         assert (q1 > 0);
     73        q1 = PS_MAX (0.0, q1);
     74        // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
     75        // angle and let f2,f1 fight it out
    7476        q2  = 0.5*sqrt (q1);
    7577    }
     
    9799            break;
    98100        case PM_PAR_SXY:
    99             beta_lim =  q2;
     101            beta_lim =  0.5*q2;
    100102            break;
    101103        default:
  • trunk/psModules/src/objects/models/pmModel_PGAUSS.c

    r13803 r14220  
    3939    psF32 py = Y / PAR[PM_PAR_SYY];
    4040    psF32 z  = PS_SQR(px) + PS_SQR(py) + PAR[PM_PAR_SXY]*X*Y;
     41    assert (z >= 0.0);
     42
    4143    psF32 t  = 1 + z + z*z/2.0;
    4244    psF32 r  = 1.0 / (t + z*z*z/6.0); /* exp (-Z) */
     
    6365# define AR_MAX 20.0
    6466# define AR_RATIO 0.99
     67
     68// we constraint limits by the min valid minor axis:
     69# define MIN_MINOR_AXIS 0.5
     70
     71// f3 = (s_b^-2 - s_a^-2); F3_SQ_MAX is MIN_MINOR_AXIS^-4
     72# define F3_SQ_MAX 16.0
     73
     74static float saveParams[8];
     75
    6576bool PM_MODEL_LIMITS (psMinConstraintMode mode, int nParam, float *params, float *beta)
    6677{
     
    7384        f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]);
    7485        q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2);
    75         assert (q1 > 0);
     86        q1 = PS_MAX (0.0, q1);
     87        // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
     88        // angle and let f2,f1 fight it out
    7689        q2  = 0.5*sqrt (q1);
    7790    }
     
    93106            break;
    94107        case PM_PAR_SXX:
    95             beta_lim = 0.5;
     108            beta_lim = 2.0;
    96109            break;
    97110        case PM_PAR_SYY:
    98             beta_lim = 0.5;
     111            beta_lim = 2.0;
    99112            break;
    100113        case PM_PAR_SXY:
    101             beta_lim =  q2;
     114            beta_lim =  0.5*q2;
    102115            break;
    103116        default:
     
    137150            psAbort("invalid parameter %d for param min test", nParam);
    138151        }
    139         if (params[nParam] < params_min) {
     152        saveParams[nParam] = params[nParam];
     153        if (params[nParam] < params_min) {
    140154            params[nParam] = params_min;
    141155            psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
     
    170184            psAbort("invalid parameter %d for param max test", nParam);
    171185        }
     186        saveParams[nParam] = params[nParam];
    172187        if (params[nParam] > params_max) {
    173188            params[nParam] = params_max;
  • trunk/psModules/src/objects/models/pmModel_QGAUSS.c

    r13960 r14220  
    8888        f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]);
    8989        q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2);
    90         if (q1 <= 0) {
    91             psError(PM_ERR_PSF, true, "Q1 < 0 (%g)", q1);
    92             return false;
    93         }
     90        q1 = (q1 < 0.0) ? 0.0 : q1;
     91        // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
     92        // angle and let f2,f1 fight it out
    9493        q2  = 0.5*sqrt (q1);
    9594    }
     
    117116            break;
    118117        case PM_PAR_SXY:
    119             beta_lim =  q2;
     118            beta_lim =  0.5*q2;
    120119            break;
    121120        case PM_PAR_7:
Note: See TracChangeset for help on using the changeset viewer.