IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

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

Adding const in some appropriate places.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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);
Note: See TracChangeset for help on using the changeset viewer.