Changeset 15834 for trunk/psModules/src/objects/models/pmModel_GAUSS.c
- Timestamp:
- Dec 14, 2007, 2:58:11 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/models/pmModel_GAUSS.c
r15056 r15834 6 6 * specifics of the model. All models which are used a PSF representations share a few 7 7 * parameters, for which # define names are listed in pmModel.h: 8 8 9 9 pure Gaussian: 10 10 exp(-z) 11 11 12 12 * PM_PAR_SKY 0 - local sky : note that this is unused and may be dropped in the future 13 13 * PM_PAR_I0 1 - central intensity … … 19 19 *****************************************************************************/ 20 20 21 # define PM_MODEL_FUNC pmModelFunc_GAUSS22 # define PM_MODEL_FLUX pmModelFlux_GAUSS23 # define PM_MODEL_GUESS pmModelGuess_GAUSS24 # define PM_MODEL_LIMITS pmModelLimits_GAUSS25 # define PM_MODEL_RADIUS pmModelRadius_GAUSS26 # define PM_MODEL_FROM_PSF pmModelFromPSF_GAUSS21 # 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 27 27 # define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_GAUSS 28 28 # define PM_MODEL_FIT_STATUS pmModelFitStatus_GAUSS … … 76 76 f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]); 77 77 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 that80 // angle and let f2,f1 fight it out78 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 81 81 q2 = 0.5*sqrt (q1); 82 82 } … … 111 111 if (fabs(beta[nParam]) > fabs(beta_lim)) { 112 112 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); 115 115 return false; 116 116 } … … 144 144 if (params[nParam] < params_min) { 145 145 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); 148 148 return false; 149 149 } … … 177 177 if (params[nParam] > params_max) { 178 178 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); 181 181 return false; 182 182 } … … 260 260 261 261 // construct the PSF model from the FLT model and the psf 262 bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf)262 bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, const pmPSF *psf) 263 263 { 264 264 psF32 *out = modelPSF->params->data.F32; … … 286 286 // XXX user-defined value for limit? 287 287 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; 291 291 } 292 292 … … 298 298 continue; 299 299 300 bool status = true;300 bool status = true; 301 301 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, out, NULL); 302 302 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 } 308 308 } 309 309 return(true); … … 312 312 // construct the PSF model from the FLT model and the psf 313 313 // 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)314 bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, const pmPSF *psf, float Xo, float Yo, float Io) 315 315 { 316 316 psF32 *PAR = model->params->data.F32; … … 324 324 PAR[PM_PAR_XPOS] = Xo; 325 325 PAR[PM_PAR_YPOS] = Yo; 326 326 327 327 // supply the model-fitted parameters, or copy from the input 328 328 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); 335 335 } 336 336 … … 339 339 // XXX user-defined value for limit? 340 340 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; 343 343 } 344 344 … … 350 350 continue; 351 351 352 bool status = true;352 bool status = true; 353 353 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL); 354 354 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 } 359 359 } 360 360 return(true);
Note:
See TracChangeset
for help on using the changeset viewer.
