IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Nov 28, 2006, 5:02:18 PM (20 years ago)
Author:
eugene
Message:

changed limits to new dynamic limits function, added ellipse parameter limits for sxy

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psphot/src/models/pmModel_TEST1.c

    r9781 r10265  
    5858}
    5959
     60# if (0)
    6061// define the parameter limits
    6162bool PM_MODEL_LIMITS (psVector **beta_lim, psVector **params_min, psVector **params_max)
     
    9293    return (TRUE);
    9394}
     95# endif
     96
     97// define the parameter limits
     98bool PM_MODEL_LIMITS (psMinConstraintMode mode, int nParam, float *params, float *beta)
     99{
     100    float beta_lim, params_min, params_max;
     101
     102    switch (mode) {
     103      case PS_MINIMIZE_BETA_LIMIT:
     104        switch (nParam) {
     105          case PM_PAR_SKY:  beta_lim = 1000;  break;
     106          case PM_PAR_I0:   beta_lim = 3e6;   break;
     107          case PM_PAR_XPOS: beta_lim = 5;     break;
     108          case PM_PAR_YPOS: beta_lim = 5;     break;
     109          case PM_PAR_SXX:  beta_lim = 0.5;   break;
     110          case PM_PAR_SYY:  beta_lim = 0.5;   break;
     111          case PM_PAR_SXY:  beta_lim = 0.5;   break;
     112          default:
     113            psAbort ("psModules.pmModel_GAUSS", "invalid parameter %d for beta test", nParam);
     114        }
     115        if (fabs(beta[nParam]) > fabs(beta_lim)) {
     116            beta[nParam] = (beta[nParam] > 0) ? fabs(beta_lim) : -fabs(beta_lim);
     117            return false;
     118        }
     119        return true;
     120      case PS_MINIMIZE_PARAM_MIN:
     121        switch (nParam) {
     122          case PM_PAR_SKY:  params_min = -1000; break;
     123          case PM_PAR_I0:   params_min =     0; break;
     124          case PM_PAR_XPOS: params_min =  -100; break;
     125          case PM_PAR_YPOS: params_min =  -100; break;
     126          case PM_PAR_SXX:  params_min =   0.5; break;
     127          case PM_PAR_SYY:  params_min =   0.5; break;
     128          case PM_PAR_SXY:  params_min =  -5.0; break;
     129          default:
     130            psAbort ("psModules.pmModel_GAUSS", "invalid parameter %d for param min test", nParam);
     131        }
     132        if (params[nParam] < params_min) {
     133            params[nParam] = params_min;
     134            return false;
     135        }
     136        return true;
     137      case PS_MINIMIZE_PARAM_MAX:
     138        switch (nParam) {
     139          case PM_PAR_SKY:  params_max =   1e5; break;
     140          case PM_PAR_I0:   params_max =   1e8; break;
     141          case PM_PAR_XPOS: params_max =   1e4; break;
     142          case PM_PAR_YPOS: params_max =   1e4; break;
     143          case PM_PAR_SXX:  params_max =   100; break;
     144          case PM_PAR_SYY:  params_max =   100; break;
     145          case PM_PAR_SXY:  params_max =  +5.0; break;
     146          default:
     147            psAbort ("psModules.pmModel_GAUSS", "invalid parameter %d for param max test", nParam);
     148        }
     149        if (params[nParam] > params_max) {
     150            params[nParam] = params_max;
     151            return false;
     152        }
     153        return true;
     154      default:
     155        psAbort ("psModules.pmModel_GAUSS", "invalid choice for limits");
     156    }
     157    psAbort ("psModules.pmModel_GAUSS", "should not reach here");
     158    return false;
     159}
    94160
    95161// make an initial guess for parameters
     
    123189
    124190    // Area is equivalent to 2 pi sigma^2
    125     psEllipseAxes axes = psEllipseShapeToAxes (shape);
     191    psEllipseAxes axes = psEllipseShapeToAxes (shape, 20.0);
    126192    psF64 Area = 2.0 * M_PI * axes.major * axes.minor;
    127193
     
    167233
    168234    // this estimates the radius assuming f(z) is roughly exp(-z)
    169     psEllipseAxes axes = psEllipseShapeToAxes (shape);
     235    psEllipseAxes axes = psEllipseShapeToAxes (shape, 20.0);
    170236    psF64 radius = axes.major * sqrt (2.0 * log(params->data.F32[PM_PAR_I0] / flux));
    171237
Note: See TracChangeset for help on using the changeset viewer.