IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 15834


Ignore:
Timestamp:
Dec 14, 2007, 2:58:11 PM (18 years ago)
Author:
Paul Price
Message:

Adding const in some appropriate places.

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

Legend:

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

    r15056 r15834  
    66 * specifics of the model.  All models which are used a PSF representations share a few
    77 * parameters, for which # define names are listed in pmModel.h:
    8  
     8
    99   pure Gaussian:
    1010   exp(-z)
    11  
     11
    1212 * PM_PAR_SKY 0   - local sky : note that this is unused and may be dropped in the future
    1313 * PM_PAR_I0 1    - central intensity
     
    1919 *****************************************************************************/
    2020
    21 # define PM_MODEL_FUNC            pmModelFunc_GAUSS
    22 # define PM_MODEL_FLUX            pmModelFlux_GAUSS
    23 # define PM_MODEL_GUESS           pmModelGuess_GAUSS
    24 # define PM_MODEL_LIMITS          pmModelLimits_GAUSS
    25 # define PM_MODEL_RADIUS          pmModelRadius_GAUSS
    26 # define PM_MODEL_FROM_PSF        pmModelFromPSF_GAUSS
     21# define PM_MODEL_FUNC            pmModelFunc_GAUSS
     22# define PM_MODEL_FLUX            pmModelFlux_GAUSS
     23# define PM_MODEL_GUESS           pmModelGuess_GAUSS
     24# define PM_MODEL_LIMITS          pmModelLimits_GAUSS
     25# define PM_MODEL_RADIUS          pmModelRadius_GAUSS
     26# define PM_MODEL_FROM_PSF        pmModelFromPSF_GAUSS
    2727# define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_GAUSS
    2828# define PM_MODEL_FIT_STATUS      pmModelFitStatus_GAUSS
     
    7676        f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]);
    7777        q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2);
    78         q1 = PS_MAX (0.0, q1);
    79         // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
    80         // angle and let f2,f1 fight it out
     78        q1 = PS_MAX (0.0, q1);
     79        // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
     80        // angle and let f2,f1 fight it out
    8181        q2  = 0.5*sqrt (q1);
    8282    }
     
    111111        if (fabs(beta[nParam]) > fabs(beta_lim)) {
    112112            beta[nParam] = (beta[nParam] > 0) ? fabs(beta_lim) : -fabs(beta_lim);
    113             psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
    114                      nParam, beta[nParam], beta_lim);
     113            psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
     114                     nParam, beta[nParam], beta_lim);
    115115            return false;
    116116        }
     
    144144        if (params[nParam] < params_min) {
    145145            params[nParam] = params_min;
    146             psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
    147                      nParam, params[nParam], params_min);
     146            psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
     147                     nParam, params[nParam], params_min);
    148148            return false;
    149149        }
     
    177177        if (params[nParam] > params_max) {
    178178            params[nParam] = params_max;
    179             psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",
    180                      nParam, params[nParam], params_max);
     179            psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",
     180                     nParam, params[nParam], params_max);
    181181            return false;
    182182        }
     
    260260
    261261// construct the PSF model from the FLT model and the psf
    262 bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf)
     262bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, const pmPSF *psf)
    263263{
    264264    psF32 *out = modelPSF->params->data.F32;
     
    286286    // XXX user-defined value for limit?
    287287    if (!pmPSF_FitToModel (out, 0.1)) {
    288         psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)",
    289                 in[PM_PAR_YPOS], in[PM_PAR_XPOS]);
    290         return false;
     288        psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)",
     289                in[PM_PAR_YPOS], in[PM_PAR_XPOS]);
     290        return false;
    291291    }
    292292
     
    298298            continue;
    299299
    300         bool status = true;
     300        bool status = true;
    301301        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, out, NULL);
    302302        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, out, NULL);
    303         if (!status) {
    304             psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",
    305                      in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
    306             modelPSF->flags |= PM_MODEL_STATUS_LIMITS;
    307         }
     303        if (!status) {
     304            psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",
     305                     in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
     306            modelPSF->flags |= PM_MODEL_STATUS_LIMITS;
     307        }
    308308    }
    309309    return(true);
     
    312312// construct the PSF model from the FLT model and the psf
    313313// XXX is this sufficiently general do be a global function, not a pmModelClass function?
    314 bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, pmPSF *psf, float Xo, float Yo, float Io)
     314bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, const pmPSF *psf, float Xo, float Yo, float Io)
    315315{
    316316    psF32 *PAR = model->params->data.F32;
     
    324324    PAR[PM_PAR_XPOS] = Xo;
    325325    PAR[PM_PAR_YPOS] = Yo;
    326    
     326
    327327    // supply the model-fitted parameters, or copy from the input
    328328    for (int i = 0; i < psf->params->n; i++) {
    329         if (i == PM_PAR_SKY) continue;
    330         if (i == PM_PAR_I0) continue;
    331         if (i == PM_PAR_XPOS) continue;
    332         if (i == PM_PAR_YPOS) continue;
    333         pmTrend2D *trend = psf->params->data[i];
    334         PAR[i] = pmTrend2DEval(trend, Xo, Yo);
     329        if (i == PM_PAR_SKY) continue;
     330        if (i == PM_PAR_I0) continue;
     331        if (i == PM_PAR_XPOS) continue;
     332        if (i == PM_PAR_YPOS) continue;
     333        pmTrend2D *trend = psf->params->data[i];
     334        PAR[i] = pmTrend2DEval(trend, Xo, Yo);
    335335    }
    336336
     
    339339    // XXX user-defined value for limit?
    340340    if (!pmPSF_FitToModel (PAR, 0.1)) {
    341         psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo);
    342         return false;
     341        psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo);
     342        return false;
    343343    }
    344344
     
    350350            continue;
    351351
    352         bool status = true;
     352        bool status = true;
    353353        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL);
    354354        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL);
    355         if (!status) {
    356             psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo);
    357             model->flags |= PM_MODEL_STATUS_LIMITS;
    358         }
     355        if (!status) {
     356            psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo);
     357            model->flags |= PM_MODEL_STATUS_LIMITS;
     358        }
    359359    }
    360360    return(true);
  • trunk/psModules/src/objects/models/pmModel_PGAUSS.c

    r15056 r15834  
    66 * specifics of the model.  All models which are used a PSF representations share a few
    77 * parameters, for which # define names are listed in pmModel.h:
    8  
     8
    99   Gaussian taylor expansion
    1010   1 / (1 + z + z^2/2 + z^3/6)
    11  
     11
    1212 * PM_PAR_SKY 0   - local sky : note that this is unused and may be dropped in the future
    1313 * PM_PAR_I0 1    - central intensity
     
    1919 *****************************************************************************/
    2020
    21 # define PM_MODEL_FUNC            pmModelFunc_PGAUSS
    22 # define PM_MODEL_FLUX            pmModelFlux_PGAUSS
    23 # define PM_MODEL_GUESS           pmModelGuess_PGAUSS
    24 # define PM_MODEL_LIMITS          pmModelLimits_PGAUSS
    25 # define PM_MODEL_RADIUS          pmModelRadius_PGAUSS
    26 # define PM_MODEL_FROM_PSF        pmModelFromPSF_PGAUSS
     21# define PM_MODEL_FUNC            pmModelFunc_PGAUSS
     22# define PM_MODEL_FLUX            pmModelFlux_PGAUSS
     23# define PM_MODEL_GUESS           pmModelGuess_PGAUSS
     24# define PM_MODEL_LIMITS          pmModelLimits_PGAUSS
     25# define PM_MODEL_RADIUS          pmModelRadius_PGAUSS
     26# define PM_MODEL_FROM_PSF        pmModelFromPSF_PGAUSS
    2727# define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_PGAUSS
    2828# define PM_MODEL_FIT_STATUS      pmModelFitStatus_PGAUSS
     
    7777        f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]);
    7878        q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2);
    79         q1 = PS_MAX (0.0, q1);
    80         // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
    81         // angle and let f2,f1 fight it out
     79        q1 = PS_MAX (0.0, q1);
     80        // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
     81        // angle and let f2,f1 fight it out
    8282        q2  = 0.5*sqrt (q1);
    8383    }
     
    112112        if (fabs(beta[nParam]) > fabs(beta_lim)) {
    113113            beta[nParam] = (beta[nParam] > 0) ? fabs(beta_lim) : -fabs(beta_lim);
    114             psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
    115                      nParam, beta[nParam], beta_lim);
     114            psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
     115                     nParam, beta[nParam], beta_lim);
    116116            return false;
    117117        }
     
    143143            psAbort("invalid parameter %d for param min test", nParam);
    144144        }
    145         if (params[nParam] < params_min) {
     145        if (params[nParam] < params_min) {
    146146            params[nParam] = params_min;
    147             psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
    148                      nParam, params[nParam], params_min);
     147            psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
     148                     nParam, params[nParam], params_min);
    149149            return false;
    150150        }
     
    178178        if (params[nParam] > params_max) {
    179179            params[nParam] = params_max;
    180             psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",
    181                      nParam, params[nParam], params_max);
     180            psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",
     181                     nParam, params[nParam], params_max);
    182182            return false;
    183183        }
     
    292292    while ((Nstep < 10) && (fabs(z1 - z0) > 0.5)) {
    293293        z = 0.5*(z0 + z1);
    294         f = 1.0 / (1 + z + z*z/2.0 + z*z*z/6.0);
     294        f = 1.0 / (1 + z + z*z/2.0 + z*z*z/6.0);
    295295        if (f > limit) {
    296296            z0 = z;
     
    314314}
    315315
    316 bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf)
     316bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, const pmPSF *psf)
    317317{
    318318
     
    339339    // convert to shape terms (SXX,SYY,SXY)
    340340    if (!pmPSF_FitToModel (out, 0.1)) {
    341         psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)",
    342                 in[PM_PAR_YPOS], in[PM_PAR_XPOS]);
    343         return false;
     341        psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)",
     342                in[PM_PAR_YPOS], in[PM_PAR_XPOS]);
     343        return false;
    344344    }
    345345
     
    351351            continue;
    352352
    353         bool status = true;
     353        bool status = true;
    354354        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, out, NULL);
    355355        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, out, NULL);
    356         if (!status) {
    357             psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",
    358                      in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
    359             modelPSF->flags |= PM_MODEL_STATUS_LIMITS;
    360         }
     356        if (!status) {
     357            psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",
     358                     in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
     359            modelPSF->flags |= PM_MODEL_STATUS_LIMITS;
     360        }
    361361    }
    362362    return(true);
     
    365365// construct the PSF model from the FLT model and the psf
    366366// XXX is this sufficiently general do be a global function, not a pmModelClass function?
    367 bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, pmPSF *psf, float Xo, float Yo, float Io)
     367bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, const pmPSF *psf, float Xo, float Yo, float Io)
    368368{
    369369    psF32 *PAR = model->params->data.F32;
     
    377377    PAR[PM_PAR_XPOS] = Xo;
    378378    PAR[PM_PAR_YPOS] = Yo;
    379    
     379
    380380    // supply the model-fitted parameters, or copy from the input
    381381    for (int i = 0; i < psf->params->n; i++) {
    382         if (i == PM_PAR_SKY) continue;
    383         if (i == PM_PAR_I0) continue;
    384         if (i == PM_PAR_XPOS) continue;
    385         if (i == PM_PAR_YPOS) continue;
    386         pmTrend2D *trend = psf->params->data[i];
    387         PAR[i] = pmTrend2DEval(trend, Xo, Yo);
     382        if (i == PM_PAR_SKY) continue;
     383        if (i == PM_PAR_I0) continue;
     384        if (i == PM_PAR_XPOS) continue;
     385        if (i == PM_PAR_YPOS) continue;
     386        pmTrend2D *trend = psf->params->data[i];
     387        PAR[i] = pmTrend2DEval(trend, Xo, Yo);
    388388    }
    389389
     
    392392    // XXX user-defined value for limit?
    393393    if (!pmPSF_FitToModel (PAR, 0.1)) {
    394         psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo);
    395         return false;
     394        psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo);
     395        return false;
    396396    }
    397397
     
    403403            continue;
    404404
    405         bool status = true;
     405        bool status = true;
    406406        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL);
    407407        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL);
    408         if (!status) {
    409             psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo);
    410             model->flags |= PM_MODEL_STATUS_LIMITS;
    411         }
     408        if (!status) {
     409            psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo);
     410            model->flags |= PM_MODEL_STATUS_LIMITS;
     411        }
    412412    }
    413413    return(true);
  • trunk/psModules/src/objects/models/pmModel_QGAUSS.c

    r15056 r15834  
    66 * may thus vary depending on the specifics of the model.  All models which are used a PSF
    77 * representations share a few parameters, for which # define names are listed in pmModel.h:
    8  
     8
    99   power-law with fitted linear term
    1010   1 / (1 + kz + z^2.25)
    11  
     11
    1212   * PM_PAR_SKY 0   - local sky : note that this is unused and may be dropped in the future
    1313   * PM_PAR_I0 1    - central intensity
     
    2020   *****************************************************************************/
    2121
    22 # define PM_MODEL_FUNC            pmModelFunc_QGAUSS
    23 # define PM_MODEL_FLUX            pmModelFlux_QGAUSS
    24 # define PM_MODEL_GUESS           pmModelGuess_QGAUSS
    25 # define PM_MODEL_LIMITS          pmModelLimits_QGAUSS
    26 # define PM_MODEL_RADIUS          pmModelRadius_QGAUSS
    27 # define PM_MODEL_FROM_PSF        pmModelFromPSF_QGAUSS
     22# define PM_MODEL_FUNC            pmModelFunc_QGAUSS
     23# define PM_MODEL_FLUX            pmModelFlux_QGAUSS
     24# define PM_MODEL_GUESS           pmModelGuess_QGAUSS
     25# define PM_MODEL_LIMITS          pmModelLimits_QGAUSS
     26# define PM_MODEL_RADIUS          pmModelRadius_QGAUSS
     27# define PM_MODEL_FROM_PSF        pmModelFromPSF_QGAUSS
    2828# define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_QGAUSS
    2929# define PM_MODEL_FIT_STATUS      pmModelFitStatus_QGAUSS
     
    8989        f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]);
    9090        q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2);
    91         q1 = (q1 < 0.0) ? 0.0 : q1;
    92         // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
    93         // angle and let f2,f1 fight it out
     91        q1 = (q1 < 0.0) ? 0.0 : q1;
     92        // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
     93        // angle and let f2,f1 fight it out
    9494        q2  = 0.5*sqrt (q1);
    9595    }
     
    127127        if (fabs(beta[nParam]) > fabs(beta_lim)) {
    128128            beta[nParam] = (beta[nParam] > 0) ? fabs(beta_lim) : -fabs(beta_lim);
    129             psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
    130                      nParam, beta[nParam], beta_lim);
     129            psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
     130                     nParam, beta[nParam], beta_lim);
    131131            return false;
    132132        }
     
    163163        if (params[nParam] < params_min) {
    164164            params[nParam] = params_min;
    165             psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
    166                      nParam, params[nParam], params_min);
     165            psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
     166                     nParam, params[nParam], params_min);
    167167            return false;
    168168        }
     
    199199        if (params[nParam] > params_max) {
    200200            params[nParam] = params_max;
    201             psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",
    202                      nParam, params[nParam], params_max);
     201            psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",
     202                     nParam, params[nParam], params_max);
    203203            return false;
    204204        }
     
    344344}
    345345
    346 bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf)
     346bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, const pmPSF *psf)
    347347{
    348348
     
    366366    // convert to shape terms (SXX,SYY,SXY)
    367367    if (!pmPSF_FitToModel (out, 0.1)) {
    368         psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)",
    369                 in[PM_PAR_YPOS], in[PM_PAR_XPOS]);
    370         return false;
     368        psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)",
     369                in[PM_PAR_YPOS], in[PM_PAR_XPOS]);
     370        return false;
    371371    }
    372372
     
    378378            continue;
    379379
    380         bool status = true;
     380        bool status = true;
    381381        status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MIN, i, out, NULL);
    382         status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MAX, i, out, NULL);
    383         if (!status) {
    384             psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",
    385                      in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
    386             modelPSF->flags |= PM_MODEL_STATUS_LIMITS;
    387         }
     382        status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MAX, i, out, NULL);
     383        if (!status) {
     384            psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",
     385                     in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
     386            modelPSF->flags |= PM_MODEL_STATUS_LIMITS;
     387        }
    388388    }
    389389
     
    393393// construct the PSF model from the FLT model and the psf
    394394// XXX is this sufficiently general do be a global function, not a pmModelClass function?
    395 bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, pmPSF *psf, float Xo, float Yo, float Io)
     395bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, const pmPSF *psf, float Xo, float Yo, float Io)
    396396{
    397397    psF32 *PAR = model->params->data.F32;
     
    405405    PAR[PM_PAR_XPOS] = Xo;
    406406    PAR[PM_PAR_YPOS] = Yo;
    407    
     407
    408408    // supply the model-fitted parameters, or copy from the input
    409409    for (int i = 0; i < psf->params->n; i++) {
    410         if (i == PM_PAR_SKY) continue;
    411         if (i == PM_PAR_I0) continue;
    412         if (i == PM_PAR_XPOS) continue;
    413         if (i == PM_PAR_YPOS) continue;
    414         pmTrend2D *trend = psf->params->data[i];
    415         PAR[i] = pmTrend2DEval(trend, Xo, Yo);
     410        if (i == PM_PAR_SKY) continue;
     411        if (i == PM_PAR_I0) continue;
     412        if (i == PM_PAR_XPOS) continue;
     413        if (i == PM_PAR_YPOS) continue;
     414        pmTrend2D *trend = psf->params->data[i];
     415        PAR[i] = pmTrend2DEval(trend, Xo, Yo);
    416416    }
    417417
     
    420420    // XXX user-defined value for limit?
    421421    if (!pmPSF_FitToModel (PAR, 0.1)) {
    422         psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo);
    423         return false;
     422        psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo);
     423        return false;
    424424    }
    425425
     
    431431            continue;
    432432
    433         bool status = true;
     433        bool status = true;
    434434        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL);
    435435        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL);
    436         if (!status) {
    437             psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo);
    438             model->flags |= PM_MODEL_STATUS_LIMITS;
    439         }
     436        if (!status) {
     437            psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo);
     438            model->flags |= PM_MODEL_STATUS_LIMITS;
     439        }
    440440    }
    441441    return(true);
  • trunk/psModules/src/objects/models/pmModel_RGAUSS.c

    r15056 r15834  
    66 * may thus vary depending on the specifics of the model.  All models which are used a PSF
    77 * representations share a few parameters, for which # define names are listed in pmModel.h:
    8  
     8
    99   power-law with fitted slope
    1010   1 / (1 + z + z^alpha)
    11  
     11
    1212 * PM_PAR_SKY 0   - local sky : note that this is unused and may be dropped in the future
    1313 * PM_PAR_I0 1    - central intensity
     
    2020 *****************************************************************************/
    2121
    22 # define PM_MODEL_FUNC            pmModelFunc_RGAUSS
    23 # define PM_MODEL_FLUX            pmModelFlux_RGAUSS
    24 # define PM_MODEL_GUESS           pmModelGuess_RGAUSS
    25 # define PM_MODEL_LIMITS          pmModelLimits_RGAUSS
    26 # define PM_MODEL_RADIUS          pmModelRadius_RGAUSS
    27 # define PM_MODEL_FROM_PSF        pmModelFromPSF_RGAUSS
     22# define PM_MODEL_FUNC            pmModelFunc_RGAUSS
     23# define PM_MODEL_FLUX            pmModelFlux_RGAUSS
     24# define PM_MODEL_GUESS           pmModelGuess_RGAUSS
     25# define PM_MODEL_LIMITS          pmModelLimits_RGAUSS
     26# define PM_MODEL_RADIUS          pmModelRadius_RGAUSS
     27# define PM_MODEL_FROM_PSF        pmModelFromPSF_RGAUSS
    2828# define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_RGAUSS
    2929# define PM_MODEL_FIT_STATUS      pmModelFitStatus_RGAUSS
     
    6262        dPAR[PM_PAR_SXY] = -q*X*Y;
    6363
    64         // this model derivative is undefined at z = 0.0, but is actually 0.0
     64        // this model derivative is undefined at z = 0.0, but is actually 0.0
    6565        dPAR[PM_PAR_7] = (z == 0.0) ? 0.0 : -5.0*t*log(z)*p*z;
    6666    }
     
    8383        f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]);
    8484        q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2);
    85         q1 = (q1 < 0.0) ? 0.0 : q1;
    86         // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
    87         // angle and let f2,f1 fight it out
     85        q1 = (q1 < 0.0) ? 0.0 : q1;
     86        // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
     87        // angle and let f2,f1 fight it out
    8888        q2  = 0.5*sqrt (q1);
    8989    }
     
    121121        if (fabs(beta[nParam]) > fabs(beta_lim)) {
    122122            beta[nParam] = (beta[nParam] > 0) ? fabs(beta_lim) : -fabs(beta_lim);
    123             psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
    124                      nParam, beta[nParam], beta_lim);
     123            psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
     124                     nParam, beta[nParam], beta_lim);
    125125            return false;
    126126        }
     
    157157        if (params[nParam] < params_min) {
    158158            params[nParam] = params_min;
    159             psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
    160                      nParam, params[nParam], params_min);
     159            psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
     160                     nParam, params[nParam], params_min);
    161161            return false;
    162162        }
     
    193193        if (params[nParam] > params_max) {
    194194            params[nParam] = params_max;
    195             psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",
    196                      nParam, params[nParam], params_max);
     195            psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",
     196                     nParam, params[nParam], params_max);
    197197            return false;
    198198        }
     
    337337}
    338338
    339 bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf)
     339bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, const pmPSF *psf)
    340340{
    341341
     
    359359    // convert to shape terms (SXX,SYY,SXY)
    360360    if (!pmPSF_FitToModel (out, 0.1)) {
    361         psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)",
    362                 in[PM_PAR_YPOS], in[PM_PAR_XPOS]);
    363         return false;
     361        psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)",
     362                in[PM_PAR_YPOS], in[PM_PAR_XPOS]);
     363        return false;
    364364    }
    365365
     
    371371            continue;
    372372
    373         bool status = true;
     373        bool status = true;
    374374        status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MIN, i, out, NULL);
    375         status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MAX, i, out, NULL);
    376         if (!status) {
    377             psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",
    378                      in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
    379             modelPSF->flags |= PM_MODEL_STATUS_LIMITS;
    380         }
     375        status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MAX, i, out, NULL);
     376        if (!status) {
     377            psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",
     378                     in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
     379            modelPSF->flags |= PM_MODEL_STATUS_LIMITS;
     380        }
    381381    }
    382382
     
    386386// construct the PSF model from the FLT model and the psf
    387387// XXX is this sufficiently general do be a global function, not a pmModelClass function?
    388 bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, pmPSF *psf, float Xo, float Yo, float Io)
     388bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, const pmPSF *psf, float Xo, float Yo, float Io)
    389389{
    390390    psF32 *PAR = model->params->data.F32;
     
    398398    PAR[PM_PAR_XPOS] = Xo;
    399399    PAR[PM_PAR_YPOS] = Yo;
    400    
     400
    401401    // supply the model-fitted parameters, or copy from the input
    402402    for (int i = 0; i < psf->params->n; i++) {
    403         if (i == PM_PAR_SKY) continue;
    404         if (i == PM_PAR_I0) continue;
    405         if (i == PM_PAR_XPOS) continue;
    406         if (i == PM_PAR_YPOS) continue;
    407         pmTrend2D *trend = psf->params->data[i];
    408         PAR[i] = pmTrend2DEval(trend, Xo, Yo);
     403        if (i == PM_PAR_SKY) continue;
     404        if (i == PM_PAR_I0) continue;
     405        if (i == PM_PAR_XPOS) continue;
     406        if (i == PM_PAR_YPOS) continue;
     407        pmTrend2D *trend = psf->params->data[i];
     408        PAR[i] = pmTrend2DEval(trend, Xo, Yo);
    409409    }
    410410
     
    413413    // XXX user-defined value for limit?
    414414    if (!pmPSF_FitToModel (PAR, 0.1)) {
    415         psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo);
    416         return false;
     415        psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo);
     416        return false;
    417417    }
    418418
     
    424424            continue;
    425425
    426         bool status = true;
     426        bool status = true;
    427427        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL);
    428428        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL);
    429         if (!status) {
    430             psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo);
    431             model->flags |= PM_MODEL_STATUS_LIMITS;
    432         }
     429        if (!status) {
     430            psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo);
     431            model->flags |= PM_MODEL_STATUS_LIMITS;
     432        }
    433433    }
    434434    return(true);
  • trunk/psModules/src/objects/models/pmModel_SERSIC.c

    r15056 r15834  
    66 * specifics of the model.  All models which are used a PSF representations share a few
    77 * parameters, for which # define names are listed in pmModel.h:
    8  
     8
    99   f = exp(-z^n)
    10  
     10
    1111   * PM_PAR_SKY 0   - local sky : note that this is unused and may be dropped in the future
    1212   * PM_PAR_I0 1    - central intensity
     
    2323   *****************************************************************************/
    2424
    25 # define PM_MODEL_FUNC            pmModelFunc_SERSIC
    26 # define PM_MODEL_FLUX            pmModelFlux_SERSIC
    27 # define PM_MODEL_GUESS           pmModelGuess_SERSIC
    28 # define PM_MODEL_LIMITS          pmModelLimits_SERSIC
    29 # define PM_MODEL_RADIUS          pmModelRadius_SERSIC
    30 # define PM_MODEL_FROM_PSF        pmModelFromPSF_SERSIC
     25# define PM_MODEL_FUNC            pmModelFunc_SERSIC
     26# define PM_MODEL_FLUX            pmModelFlux_SERSIC
     27# define PM_MODEL_GUESS           pmModelGuess_SERSIC
     28# define PM_MODEL_LIMITS          pmModelLimits_SERSIC
     29# define PM_MODEL_RADIUS          pmModelRadius_SERSIC
     30# define PM_MODEL_FROM_PSF        pmModelFromPSF_SERSIC
    3131# define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_SERSIC
    3232# define PM_MODEL_FIT_STATUS      pmModelFitStatus_SERSIC
     
    6464        psF32 *dPAR = deriv->data.F32;
    6565
    66         // gradient is infinite for z = 0; saturate at z = 0.01
    67         psF32 z1 = (z < 0.01) ? z0*PAR[PM_PAR_7]*pow(0.01,PAR[PM_PAR_7] - 1.0) : z0*PAR[PM_PAR_7]*pow(z,PAR[PM_PAR_7] - 1.0);
     66        // gradient is infinite for z = 0; saturate at z = 0.01
     67        psF32 z1 = (z < 0.01) ? z0*PAR[PM_PAR_7]*pow(0.01,PAR[PM_PAR_7] - 1.0) : z0*PAR[PM_PAR_7]*pow(z,PAR[PM_PAR_7] - 1.0);
    6868
    6969        dPAR[PM_PAR_SKY]  = +1.0;
     
    7171        dPAR[PM_PAR_7]    = (z == 0.0) ? 0.0 : -z0*f2*log(z);
    7272
    73         assert (isfinite(z1));
    74         assert (isfinite(dPAR[PM_PAR_7]));
     73        assert (isfinite(z1));
     74        assert (isfinite(dPAR[PM_PAR_7]));
    7575
    7676        dPAR[PM_PAR_XPOS] = +1.0*z1*(2.0*px/PAR[PM_PAR_SXX] + Y*PAR[PM_PAR_SXY]);
     
    9999        f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]);
    100100        q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2);
    101         q1 = (q1 < 0.0) ? 0.0 : q1;
    102         // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
    103         // angle and let f2,f1 fight it out
     101        q1 = (q1 < 0.0) ? 0.0 : q1;
     102        // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg..  Saturate at that
     103        // angle and let f2,f1 fight it out
    104104        q2  = 0.5*sqrt (q1);
    105105    }
     
    137137        if (fabs(beta[nParam]) > fabs(beta_lim)) {
    138138            beta[nParam] = (beta[nParam] > 0) ? fabs(beta_lim) : -fabs(beta_lim);
    139             psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
    140                      nParam, beta[nParam], beta_lim);
     139            psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
     140                     nParam, beta[nParam], beta_lim);
    141141            return false;
    142142        }
     
    173173        if (params[nParam] < params_min) {
    174174            params[nParam] = params_min;
    175             psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
    176                      nParam, params[nParam], params_min);
     175            psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
     176                     nParam, params[nParam], params_min);
    177177            return false;
    178178        }
     
    209209        if (params[nParam] > params_max) {
    210210            params[nParam] = params_max;
    211             psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",
    212                      nParam, params[nParam], params_max);
     211            psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",
     212                     nParam, params[nParam], params_max);
    213213            return false;
    214214        }
     
    329329}
    330330
    331 bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf)
     331bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, const pmPSF *psf)
    332332{
    333333
     
    351351    // convert to shape terms (SXX,SYY,SXY)
    352352    if (!pmPSF_FitToModel (out, 0.1)) {
    353         psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)",
    354                 in[PM_PAR_YPOS], in[PM_PAR_XPOS]);
    355         return false;
     353        psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)",
     354                in[PM_PAR_YPOS], in[PM_PAR_XPOS]);
     355        return false;
    356356    }
    357357
     
    363363            continue;
    364364
    365         bool status = true;
     365        bool status = true;
    366366        status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MIN, i, out, NULL);
    367         status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MAX, i, out, NULL);
    368         if (!status) {
    369             psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",
    370                      in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
    371             modelPSF->flags |= PM_MODEL_STATUS_LIMITS;
    372         }
     367        status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MAX, i, out, NULL);
     368        if (!status) {
     369            psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",
     370                     in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
     371            modelPSF->flags |= PM_MODEL_STATUS_LIMITS;
     372        }
    373373    }
    374374
     
    378378// construct the PSF model from the FLT model and the psf
    379379// XXX is this sufficiently general do be a global function, not a pmModelClass function?
    380 bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, pmPSF *psf, float Xo, float Yo, float Io)
     380bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, const pmPSF *psf, float Xo, float Yo, float Io)
    381381{
    382382    psF32 *PAR = model->params->data.F32;
     
    390390    PAR[PM_PAR_XPOS] = Xo;
    391391    PAR[PM_PAR_YPOS] = Yo;
    392    
     392
    393393    // supply the model-fitted parameters, or copy from the input
    394394    for (int i = 0; i < psf->params->n; i++) {
    395         if (i == PM_PAR_SKY) continue;
    396         if (i == PM_PAR_I0) continue;
    397         if (i == PM_PAR_XPOS) continue;
    398         if (i == PM_PAR_YPOS) continue;
    399         pmTrend2D *trend = psf->params->data[i];
    400         PAR[i] = pmTrend2DEval(trend, Xo, Yo);
     395        if (i == PM_PAR_SKY) continue;
     396        if (i == PM_PAR_I0) continue;
     397        if (i == PM_PAR_XPOS) continue;
     398        if (i == PM_PAR_YPOS) continue;
     399        pmTrend2D *trend = psf->params->data[i];
     400        PAR[i] = pmTrend2DEval(trend, Xo, Yo);
    401401    }
    402402
     
    405405    // XXX user-defined value for limit?
    406406    if (!pmPSF_FitToModel (PAR, 0.1)) {
    407         psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo);
    408         return false;
     407        psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo);
     408        return false;
    409409    }
    410410
     
    416416            continue;
    417417
    418         bool status = true;
     418        bool status = true;
    419419        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL);
    420420        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL);
    421         if (!status) {
    422             psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo);
    423             model->flags |= PM_MODEL_STATUS_LIMITS;
    424         }
     421        if (!status) {
     422            psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo);
     423            model->flags |= PM_MODEL_STATUS_LIMITS;
     424        }
    425425    }
    426426    return(true);
  • trunk/psModules/src/objects/models/pmModel_SGAUSS.c

    r9775 r15834  
    66 * may thus vary depending on the specifics of the model.  All models which are used a PSF
    77 * representations share a few parameters, for which # define names are listed in pmModel.h:
    8  
     8
    99   power-law with fitted slope and outer tidal radius
    1010   1 / (1 + z^N + kz^4)
    11  
     11
    1212   * PM_PAR_SKY 0   - local sky : note that this is unused and may be dropped in the future
    1313   * PM_PAR_I0 1    - central intensity
     
    2323/***
    2424    XXXX the model in this file needs to be tested more carefully.
    25     the code for guessing the power-law slope based on the radial profile 
     25    the code for guessing the power-law slope based on the radial profile
    2626    is either too slow or does not work well.
    2727    fix up the code to follow conventions in the other model function files.
     
    234234}
    235235
    236 bool PM_MODEL_FROM_PSF  (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf)
     236bool PM_MODEL_FROM_PSF  (pmModel *modelPSF, pmModel *modelFLT, const pmPSF *psf)
    237237{
    238238
  • trunk/psModules/src/objects/models/pmModel_TGAUSS.c

    r9775 r15834  
    66 * may thus vary depending on the specifics of the model.  All models which are used a PSF
    77 * representations share a few parameters, for which # define names are listed in pmModel.h:
    8  
     8
    99   power-law with fixed slope and fitted amplitude
    1010   1 / (1 + z + kz^2.2)
    11  
     11
    1212   * PM_PAR_SKY 0   - local sky : note that this is unused and may be dropped in the future
    1313   * PM_PAR_I0 1    - central intensity
     
    154154}
    155155
    156 bool PS_MODEL_FROM_PSF  (psModel *modelPSF, psModel *modelFLT, pmPSF *psf)
     156bool PS_MODEL_FROM_PSF  (psModel *modelPSF, psModel *modelFLT, const pmPSF *psf)
    157157{
    158158
  • trunk/psModules/src/objects/models/pmModel_WAUSS.c

    r9775 r15834  
    66 * may thus vary depending on the specifics of the model.  All models which are used a PSF
    77 * representations share a few parameters, for which # define names are listed in pmModel.h:
    8  
     8
    99   power-law with fitted linear term
    1010   1 / (1 + Az + Bz^2 + z^3/6)
    11  
     11
    1212   * PM_PAR_SKY 0   - local sky : note that this is unused and may be dropped in the future
    1313   * PM_PAR_I0 1    - central intensity
     
    150150}
    151151
    152 bool PS_MODEL_FROM_PSF  (psModel *modelPSF, psModel *modelFLT, pmPSF *psf)
     152bool PS_MODEL_FROM_PSF  (psModel *modelPSF, psModel *modelFLT, const pmPSF *psf)
    153153{
    154154
  • trunk/psModules/src/objects/models/pmModel_ZGAUSS.c

    r9775 r15834  
    66 * may thus vary depending on the specifics of the model.  All models which are used a PSF
    77 * representations share a few parameters, for which # define names are listed in pmModel.h:
    8  
     8
    99   power-law with fitted slope and tidal cutoff
    1010   1 / (1 + z^N + (Az)^4)
    11  
     11
    1212   * PM_PAR_SKY 0   - local sky : note that this is unused and may be dropped in the future
    1313   * PM_PAR_I0 1    - central intensity
     
    203203}
    204204
    205 bool PS_MODEL_FROM_PSF  (psModel *modelPSF, psModel *modelFLT, pmPSF *psf)
     205bool PS_MODEL_FROM_PSF  (psModel *modelPSF, psModel *modelFLT, const pmPSF *psf)
    206206{
    207207
Note: See TracChangeset for help on using the changeset viewer.